Browse Source

修复顺引解析的bug

feature_shunyin
zhangxin 2 years ago
parent
commit
01650cd6e0
4 changed files with 268 additions and 134 deletions
  1. +1
    -0
      dao/pln/ToyotaCalloff.dao.go
  2. +39
    -0
      dao/pln/implments/ToyotaCalloff.dao.impl.go
  3. +151
    -109
      services/pln/implments/ToyotaCalloff.service.impl.go
  4. +77
    -25
      services/pln/implments/ToyotaDeliveryOrder.service.impl.go

+ 1
- 0
dao/pln/ToyotaCalloff.dao.go View File

@ -162,6 +162,7 @@ type ToyotaCalloffDAO interface {
*
******************************************************************************/
Select([]grmi.Predicate, []grmi.Field) ([]model.ToyotaCalloff, error)
SelectTopDesc([]grmi.Predicate, []grmi.Field) (*model.ToyotaCalloff, error)
/******************************************************************************
*
* @Function Name : SelectCols


+ 39
- 0
dao/pln/implments/ToyotaCalloff.dao.impl.go View File

@ -211,6 +211,45 @@ func (impl *ToyotaCalloffDAOImplement) Select(predicates []grmi.Predicate, order
return data, nil
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/dao/pln/ToyotaCalloffDAO.Select
*
******************************************************************************/
func (impl *ToyotaCalloffDAOImplement) SelectTopDesc(predicates []grmi.Predicate, orderByFields []grmi.Field) (*model.ToyotaCalloff, error) {
parameters := []interface{}{impl.plantNr}
where := fmt.Sprintf("%s = ?", meta.ToyotaCalloff_PlantNr.ColumnName)
session := impl.session.Table(impl.meta.TableName)
if predicates != nil {
for _, predicate := range predicates {
where += predicate.Build()
parameters = append(parameters, predicate.Values...)
}
session = session.Where(where, parameters...)
} else {
session = session.Where(where, parameters...)
}
session = session.OrderBy(meta.ToyotaCalloff_PlantNr.ColumnName)
if orderByFields != nil {
for _, field := range orderByFields {
session = session.Desc(field.SortColumnName)
}
}
data := model.ToyotaCalloff{}
ok, err := session.Get(&data)
if err != nil {
return nil, grmi.NewDataBaseError(err)
}
if !ok {
return nil, nil
}
return &data, nil
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/dao/pln/ToyotaCalloffDAO.SelectCols


+ 151
- 109
services/pln/implments/ToyotaCalloff.service.impl.go View File

@ -618,6 +618,7 @@ func (impl *ToyotaCalloffServiceImplement) ParseCallOffData(user *global.User) {
}
if len(waitParseLi) == 0 {
log.Info("解析CallOff数据, 没有待解析的CallOff数据")
return
}
maxSeqCallOff, err := callOffDao.SelectMaxSeqCallOff()
if err != nil {
@ -648,79 +649,72 @@ func (impl *ToyotaCalloffServiceImplement) ParseCallOffData(user *global.User) {
}()
productFamilyMap := make(map[string]*meModel.ProductFamily)
productFamilyRelateMap := make(map[string][]meModel.Product)
for _, callOffData := range waitParseLi {
err = callOffErrDao.DeleteWhere([]grmi.Predicate{meta.ToyotaCallOffErrorLst_DemandId.NewPredicate(grmi.Equal, callOffData.DemandId)})
if err != nil {
_ = session.Rollback()
log.Error("解析CallOff数据,删除已存在的错误数据失败, error:" + err.Error())
return
dealLi := waitParseLi
for {
if len(dealLi) == 0 {
break
}
if callOffData.CheckSequence != needParseSeq && needParseSeq != -1 {
callOffError := model.ToyotaCallOffErrorLst{
DemandId: callOffData.DemandId,
Pos: 1,
ErrorType: model.ERROR_TYPE_HINT,
ErrorInfo: "连番号不连续,当前需要解析连番号为:" + strconv.Itoa(needParseSeq) + ", 该连番号为:" + strconv.Itoa(callOffData.CheckSequence),
ErrorStatus: model.ERROR_STATUS_ON,
newLi := make([]model.ToyotaCalloff, 0)
var deal bool
var dealIndex int
for index, callOffData := range dealLi {
if callOffData.CheckSequence != needParseSeq && needParseSeq != -1 {
continue
}
err = callOffErrDao.InsertOne(&callOffError)
deal = true
dealIndex = index
err = callOffErrDao.DeleteWhere([]grmi.Predicate{meta.ToyotaCallOffErrorLst_DemandId.NewPredicate(grmi.Equal, callOffData.DemandId)})
if err != nil {
_ = session.Rollback()
log.Error("解析CallOff数据, 写入错误信息失败, error:" + err.Error())
log.Error("解析CallOff数据,删除已存在的错误数据失败, error:" + err.Error())
return
}
break
}
//if callOffData.CheckSequence != needParseSeq && needParseSeq != -1 {
// callOffError := model.ToyotaCallOffErrorLst{
// DemandId: callOffData.DemandId,
// Pos: 1,
// ErrorType: model.ERROR_TYPE_HINT,
// ErrorInfo: "连番号不连续,当前需要解析连番号为:" + strconv.Itoa(needParseSeq) + ", 该连番号为:" + strconv.Itoa(callOffData.CheckSequence),
// ErrorStatus: model.ERROR_STATUS_ON,
// }
// err = callOffErrDao.InsertOne(&callOffError)
// if err != nil {
// _ = session.Rollback()
// log.Error("解析CallOff数据, 写入错误信息失败, error:" + err.Error())
// return
// }
// break
//}
needParseSeq = callOffData.CheckSequence + 1
productFamily, exist := productFamilyMap[callOffData.ProductFamilyId]
if !exist {
productFamily, err = productFamilyDao.SelectOne(callOffData.ProductFamilyId)
if err != nil {
callOffError := model.ToyotaCallOffErrorLst{
DemandId: callOffData.DemandId,
Pos: 1,
ErrorType: model.ERROR_TYPE_SYSTEM,
ErrorInfo: "查询派生数据失败, error:" + err.Error(),
ErrorStatus: model.ERROR_STATUS_ON,
}
err = callOffErrDao.InsertOne(&callOffError)
if err != nil {
_ = session.Rollback()
log.Error("解析CallOff数据, 写入错误信息失败, error:" + err.Error())
return
}
break
needParseSeq = callOffData.CheckSequence + 1
if needParseSeq > 999 {
needParseSeq = 0
}
if productFamily == nil {
callOffError := model.ToyotaCallOffErrorLst{
DemandId: callOffData.DemandId,
Pos: 1,
ErrorType: model.ERROR_TYPE_DATA,
ErrorInfo: "派生不存在",
ErrorStatus: model.ERROR_STATUS_ON,
}
err = callOffErrDao.InsertOne(&callOffError)
if err != nil {
_ = session.Rollback()
log.Error("解析CallOff数据, 写入错误信息失败, error:" + err.Error())
return
}
break
}
productFamilyMap[callOffData.ProductFamilyId] = productFamily
}
var seatData string
if productFamily.CtrlPara1 == 1 { // 如果座椅是安道拓的
productLi, exist := productFamilyRelateMap[callOffData.ProductFamilyId]
productFamily, exist := productFamilyMap[callOffData.ProductFamilyId]
if !exist {
productLi, err = productFamilyRelateDao.SelectProductByFamilyId(callOffData.ProjectId, callOffData.ProductFamilyId)
productFamily, err = productFamilyDao.SelectOne(callOffData.ProductFamilyId)
if err != nil {
callOffError := model.ToyotaCallOffErrorLst{
DemandId: callOffData.DemandId,
Pos: 1,
ErrorType: model.ERROR_TYPE_SYSTEM,
ErrorInfo: "查询派生下座椅总成失败",
ErrorInfo: "查询派生数据失败, error:" + err.Error(),
ErrorStatus: model.ERROR_STATUS_ON,
}
err = callOffErrDao.InsertOne(&callOffError)
if err != nil {
_ = session.Rollback()
log.Error("解析CallOff数据, 写入错误信息失败, error:" + err.Error())
return
}
break
}
if productFamily == nil {
callOffError := model.ToyotaCallOffErrorLst{
DemandId: callOffData.DemandId,
Pos: 1,
ErrorType: model.ERROR_TYPE_DATA,
ErrorInfo: "派生不存在",
ErrorStatus: model.ERROR_STATUS_ON,
}
err = callOffErrDao.InsertOne(&callOffError)
@ -731,12 +725,54 @@ func (impl *ToyotaCalloffServiceImplement) ParseCallOffData(user *global.User) {
}
break
}
if len(productLi) == 0 {
productFamilyMap[callOffData.ProductFamilyId] = productFamily
}
var seatData string
if productFamily.CtrlPara1 == 1 { // 如果座椅是安道拓的
productLi, exist := productFamilyRelateMap[callOffData.ProductFamilyId]
if !exist {
productLi, err = productFamilyRelateDao.SelectProductByFamilyId(callOffData.ProjectId, callOffData.ProductFamilyId)
if err != nil {
callOffError := model.ToyotaCallOffErrorLst{
DemandId: callOffData.DemandId,
Pos: 1,
ErrorType: model.ERROR_TYPE_SYSTEM,
ErrorInfo: "查询派生下座椅总成失败",
ErrorStatus: model.ERROR_STATUS_ON,
}
err = callOffErrDao.InsertOne(&callOffError)
if err != nil {
_ = session.Rollback()
log.Error("解析CallOff数据, 写入错误信息失败, error:" + err.Error())
return
}
break
}
if len(productLi) == 0 {
callOffError := model.ToyotaCallOffErrorLst{
DemandId: callOffData.DemandId,
Pos: 1,
ErrorType: model.ERROR_TYPE_DATA,
ErrorInfo: "该派生下没有关联座椅",
ErrorStatus: model.ERROR_STATUS_ON,
}
err = callOffErrDao.InsertOne(&callOffError)
if err != nil {
_ = session.Rollback()
log.Error("解析CallOff数据, 写入错误信息失败, error:" + err.Error())
return
}
break
}
productFamilyRelateMap[callOffData.ProductFamilyId] = productLi
}
seatData, err = impl.MakeUpSeatData(productLi)
if err != nil {
callOffError := model.ToyotaCallOffErrorLst{
DemandId: callOffData.DemandId,
Pos: 1,
ErrorType: model.ERROR_TYPE_DATA,
ErrorInfo: "该派生下没有关联座椅",
ErrorInfo: err.Error(),
ErrorStatus: model.ERROR_STATUS_ON,
}
err = callOffErrDao.InsertOne(&callOffError)
@ -747,15 +783,30 @@ func (impl *ToyotaCalloffServiceImplement) ParseCallOffData(user *global.User) {
}
break
}
productFamilyRelateMap[callOffData.ProductFamilyId] = productLi
} else { // 如果座椅是樱泰的
seatData = productFamily.ProductFamilyId
for i := len(seatData); i < 25; i++ {
seatData += "0"
}
}
plcCode := `1` + strconv.Itoa(productFamily.CtrlPara1) + seatData
deliveryOrder := model.ToyotaDeliveryOrder{
DemandId: callOffData.DemandId,
SortNr: callOffData.CheckSequence,
ProductFamilyId: callOffData.ProductFamilyId,
ProjectId: callOffData.ProjectId,
PlcIpAddress: conf.DbConfig.CallOffPlcAddress,
PlcCode: plcCode,
Status: model.DELIVERY_STATUS_PLAN,
}
seatData, err = impl.MakeUpSeatData(productLi)
err = deliveryOrderDao.InsertOne(&deliveryOrder)
if err != nil {
callOffError := model.ToyotaCallOffErrorLst{
DemandId: callOffData.DemandId,
Pos: 1,
ErrorType: model.ERROR_TYPE_DATA,
ErrorInfo: err.Error(),
ErrorType: model.ERROR_TYPE_SYSTEM,
ErrorInfo: "写入发运数据失败, error:" + err.Error(),
ErrorStatus: model.ERROR_STATUS_ON,
}
err = callOffErrDao.InsertOne(&callOffError)
@ -766,30 +817,29 @@ func (impl *ToyotaCalloffServiceImplement) ParseCallOffData(user *global.User) {
}
break
}
} else { // 如果座椅是樱泰的
seatData = productFamily.ProductFamilyId
for i := len(seatData); i < 25; i++ {
seatData += "0"
recordId, err := snrDao.GetNextSnr("ToyotaCallOff")
if err != nil {
_ = session.Rollback()
log.Error("解析CallOff数据, 获取回写流水号失败, error:" + err.Error())
return
}
callOffData.Parsed = model.CALLOFF_STATUS_PARSED
callOffData.RecordId = recordId
err = callOffDao.UpdateOne(&callOffData)
if err != nil {
_ = session.Rollback()
log.Error("解析CallOff数据, 更新CallOff状态失败, error:" + err.Error())
return
}
break
}
plcCode := `1` + strconv.Itoa(productFamily.CtrlPara1) + seatData
deliveryOrder := model.ToyotaDeliveryOrder{
DemandId: callOffData.DemandId,
SortNr: callOffData.CheckSequence,
ProductFamilyId: callOffData.ProductFamilyId,
ProjectId: callOffData.ProjectId,
PlcIpAddress: conf.DbConfig.CallOffPlcAddress,
PlcCode: plcCode,
Status: model.DELIVERY_STATUS_PLAN,
}
err = deliveryOrderDao.InsertOne(&deliveryOrder)
if err != nil {
if !deal {
callOffData := waitParseLi[0]
callOffError := model.ToyotaCallOffErrorLst{
DemandId: callOffData.DemandId,
Pos: 1,
ErrorType: model.ERROR_TYPE_SYSTEM,
ErrorInfo: "写入发运数据失败, error:" + err.Error(),
ErrorType: model.ERROR_TYPE_HINT,
ErrorInfo: "连番号不连续,当前需要解析连番号为:" + strconv.Itoa(needParseSeq) + ", 该连番号为:" + strconv.Itoa(callOffData.CheckSequence),
ErrorStatus: model.ERROR_STATUS_ON,
}
err = callOffErrDao.InsertOne(&callOffError)
@ -800,21 +850,14 @@ func (impl *ToyotaCalloffServiceImplement) ParseCallOffData(user *global.User) {
}
break
}
recordId, err := snrDao.GetNextSnr("ToyotaCallOff")
if err != nil {
_ = session.Rollback()
log.Error("解析CallOff数据, 获取回写流水号失败, error:" + err.Error())
return
}
callOffData.Parsed = model.CALLOFF_STATUS_PARSED
callOffData.RecordId = recordId
err = callOffDao.UpdateOne(&callOffData)
if err != nil {
_ = session.Rollback()
log.Error("解析CallOff数据, 更新CallOff状态失败, error:" + err.Error())
return
for index, _ := range dealLi {
if index != dealIndex {
newLi = append(newLi, dealLi[index])
}
}
dealLi = newLi
}
_ = session.Commit()
log.Info("解析CallOff数据任务执行完, 最大MaxSeq:", strconv.Itoa(needParseSeq-1))
return
@ -1117,7 +1160,6 @@ func (impl *ToyotaCalloffServiceImplement) AnalysisAgain(user *global.User, dema
return nil
}
// ExportPageData 导出页面数据
func (impl *ToyotaCalloffServiceImplement) ExportPageData(user *global.User, urlParameters map[string]string) (filepath string, err error) {
@ -1206,16 +1248,16 @@ func (impl *ToyotaCalloffServiceImplement) ExportPageData(user *global.User, url
parsed = strconv.Itoa(item.Parsed)
}
exportItem := model.ToyotaCalloffExcel{
PlantNr: item.PlantNr,
DemandId: item.DemandId,
SupplierCode: item.SupplierCode,
ProjectId: item.ProjectId,
PlantNr: item.PlantNr,
DemandId: item.DemandId,
SupplierCode: item.SupplierCode,
ProjectId: item.ProjectId,
ProductFamilyId: item.ProductFamilyId,
TotalQty: item.TotalQty,
CheckSequence: item.CheckSequence,
Parsed: parsed,
OrderTime: item.OrderTime.Restore().Format(grmi.DateTimeOutFormat),
OrderShift: item.OrderShift,
TotalQty: item.TotalQty,
CheckSequence: item.CheckSequence,
Parsed: parsed,
OrderTime: item.OrderTime.Restore().Format(grmi.DateTimeOutFormat),
OrderShift: item.OrderShift,
}
li = append(li, exportItem)
}
@ -1227,9 +1269,9 @@ func (impl *ToyotaCalloffServiceImplement) ExportPageData(user *global.User, url
if !exist {
head = append(head, typeOf.Field(i).Name)
} else {
head = append(head, name,)
head = append(head, name)
}
}
filepath, err = grmi.SaveExcelFile(li, head, "Sheet1", "顺引")
return
}
}

+ 77
- 25
services/pln/implments/ToyotaDeliveryOrder.service.impl.go View File

@ -397,20 +397,72 @@ func (impl *ToyotaDeliveryOrderServiceImplement) WriteDeliveryDataToPLC(user *gl
dao := dal.NewToyotaDeliveryOrderDAO(session, user.PlantNr, user.UserId)
errDao := dal.NewToyotaDeliveryOrderErrorLstDAO(session, user.PlantNr, user.UserId)
callOffDao := dal.NewToyotaCalloffDAO(session, user.PlantNr, user.UserId)
deliveryOrder, err := dao.SelectTopOne([]grmi.Predicate{meta.ToyotaDeliveryOrder_Status.NewPredicate(grmi.Equal, model.DELIVERY_STATUS_PLAN)}, []grmi.Field{meta.ToyotaDeliveryOrder_SortNr})
//deliveryOrder, err := dao.SelectTopOne([]grmi.Predicate{meta.ToyotaDeliveryOrder_Status.NewPredicate(grmi.Equal, model.DELIVERY_STATUS_PLAN)}, []grmi.Field{meta.ToyotaDeliveryOrder_SortNr})
//if err != nil {
// log.Error("广丰写入座椅出库数据, 查询发运数据失败, error:" + err.Error())
// return
//}
//if deliveryOrder == nil {
// log.Info("广丰写入座椅出库数据, 当前没有待写入的座椅出库数据")
// return
//}
callOffData, err := callOffDao.SelectTopDesc([]grmi.Predicate{
meta.ToyotaCalloff_Parsed.NewPredicate(grmi.Equal, model.CALLOFF_STATUS_SHIPED),
}, []grmi.Field{meta.ToyotaCalloff_RecordId})
if err != nil {
log.Error("广丰写入座椅出库数据, 查询发运数据失败, error:" + err.Error())
log.Error("广丰写入座椅出库数据, 查询写入完成的CallOff数据失败, error:" + err.Error())
return
}
var deliveryOrder *model.ToyotaDeliveryOrder
if callOffData == nil {
deliveryOrder, err = dao.SelectTopOne([]grmi.Predicate{meta.ToyotaDeliveryOrder_Status.NewPredicate(grmi.Equal, model.DELIVERY_STATUS_PLAN),
}, []grmi.Field{meta.ToyotaDeliveryOrder_SortNr})
if err != nil {
log.Error("广丰写入座椅出库数据, 查询发运数据失败, error:" + err.Error())
return
}
} else {
doneOrder, err := dao.SelectOne(callOffData.DemandId)
if err != nil {
log.Error("广丰写入座椅出库数据, 查询写入完成的发运单数据失败, error:" + err.Error())
return
}
if doneOrder == nil {
log.Error("广丰写入座椅出库数据, 查询写入完成的发运单数据不存在:" + callOffData.DemandId)
return
}
nextSortNr := doneOrder.SortNr + 1
if nextSortNr > 999 {
nextSortNr = 0
}
deliveryOrder, err = dao.SelectTopOne([]grmi.Predicate{meta.ToyotaDeliveryOrder_Status.NewPredicate(grmi.Equal, model.DELIVERY_STATUS_PLAN),
meta.ToyotaDeliveryOrder_SortNr.NewPredicate(grmi.Equal, nextSortNr)}, []grmi.Field{meta.ToyotaDeliveryOrder_SortNr})
if err != nil {
log.Error("广丰写入座椅出库数据, 查询发运数据失败, error:" + err.Error())
return
}
}
//doneOrder, err := dao.SelectTopOneDesc([]grmi.Predicate{meta.ToyotaDeliveryOrder_Status.NewPredicate(grmi.Equal, model.DELIVERY_STATUS_DONE)},
//[]grmi.Field{meta.ToyotaDeliveryOrder_CloseTime, meta.ToyotaDeliveryOrder_SortNr})
//if err != nil {
// log.Error("广丰写入座椅出库数据, 查询写入完成的发运单数据失败, error:" + err.Error())
// return
//}
//if doneOrder == nil {
// deliveryOrder, err = dao.SelectTopOne([]grmi.Predicate{meta.ToyotaDeliveryOrder_Status.NewPredicate(grmi.Equal, model.DELIVERY_STATUS_PLAN),
// }, []grmi.Field{meta.ToyotaDeliveryOrder_SortNr})
// if err != nil {
// log.Error("广丰写入座椅出库数据, 查询发运数据失败, error:" + err.Error())
// return
// }
//} else {
//}
if deliveryOrder == nil {
log.Info("广丰写入座椅出库数据, 当前没有待写入的座椅出库数据")
return
}
doneOrder, err := dao.SelectTopOneDesc([]grmi.Predicate{meta.ToyotaDeliveryOrder_Status.NewPredicate(grmi.Equal, model.DELIVERY_STATUS_DONE)}, []grmi.Field{meta.ToyotaDeliveryOrder_SortNr})
if err != nil {
log.Error("广丰写入座椅出库数据, 查询写入完成的发运单数据失败, error:" + err.Error())
return
}
callOff, err := callOffDao.SelectOne(deliveryOrder.DemandId)
if err != nil {
log.Error("查询callOff数据失败, 错误:" + err.Error())
@ -443,24 +495,24 @@ func (impl *ToyotaDeliveryOrderServiceImplement) WriteDeliveryDataToPLC(user *gl
log.Error("广丰写入座椅出库数据, 删除已存在的错误数据失败, error:" + err.Error())
return
}
if doneOrder != nil {
if deliveryOrder.SortNr != doneOrder.SortNr+1 {
errorContent := "发运数据连番号不连续,当前已写到:" + strconv.Itoa(doneOrder.SortNr)
log.Error("广丰写入座椅出库数据," + errorContent + ", demandId:" + deliveryOrder.DemandId)
errData := model.ToyotaDeliveryOrderErrorLst{
DemandId: deliveryOrder.DemandId,
Pos: 1,
ErrorType: model.ERROR_TYPE_HINT,
ErrorInfo: errorContent,
ErrorStatus: model.ERROR_STATUS_ON,
}
err = errDao.InsertOne(&errData)
if err != nil {
log.Error("广丰写入座椅出库数据, 写入错误数据失败, error:" + err.Error() + ", 错误数据:" + errorContent + ", demandId:" + deliveryOrder.DemandId)
}
return
}
}
//if doneOrder != nil {
// if deliveryOrder.SortNr != doneOrder.SortNr+1 {
// errorContent := "发运数据连番号不连续,当前已写到:" + strconv.Itoa(doneOrder.SortNr)
// log.Error("广丰写入座椅出库数据," + errorContent + ", demandId:" + deliveryOrder.DemandId)
// errData := model.ToyotaDeliveryOrderErrorLst{
// DemandId: deliveryOrder.DemandId,
// Pos: 1,
// ErrorType: model.ERROR_TYPE_HINT,
// ErrorInfo: errorContent,
// ErrorStatus: model.ERROR_STATUS_ON,
// }
// err = errDao.InsertOne(&errData)
// if err != nil {
// log.Error("广丰写入座椅出库数据, 写入错误数据失败, error:" + err.Error() + ", 错误数据:" + errorContent + ", demandId:" + deliveryOrder.DemandId)
// }
// return
// }
//}
if err = session.Begin(); err != nil {
log.Error("广丰写入座椅出库数据, 开启事务失败, error:" + err.Error())
errorContent := "开启事务失败, error:" + err.Error()


Loading…
Cancel
Save