Browse Source

修复异步派工生成工艺的bug

pull/216/head
zhangxin 2 years ago
parent
commit
1cdcc5b5ba
4 changed files with 136 additions and 65 deletions
  1. +1
    -0
      services/om/implments/SerialOrder.Craft.impl.go
  2. +48
    -1
      services/om/implments/SerialOrder.Logic.impl.go
  3. +56
    -56
      services/pln/implments/CustOrder.service.impl.go
  4. +31
    -8
      services/pln/implments/CustOrderLogic.service.impl.go

+ 1
- 0
services/om/implments/SerialOrder.Craft.impl.go View File

@ -319,6 +319,7 @@ func (impl *SerialOrderServiceImplement) GenerateProductCraft(user *global.User,
PlanEndTime: serialOrder.PlanEndTime,
PickingFlag: orderOPData.SFP.PickingFlag,
MainOrderId: serialOrder.SerialOrderId,
SyncKey: serialOrder.SyncKey,
}
usedSerialOrder = &sfpSerialOrder
usedSerialOrder.SerialOrderStatus = model.SerialOrderStatus{


+ 48
- 1
services/om/implments/SerialOrder.Logic.impl.go View File

@ -164,8 +164,33 @@ func (impl *SerialOrderServiceImplement) CreateBatchSerialOrder(user *global.Use
return grmi.NewBusinessError("生成工单工艺数据失败, 错误:" + err.Error())
}
preSerialOrder = serialOrder
preSerialOrder.PreOrderLi = make([]model.SerialOrder, 0, len(serialOrder.PreOrderLi))
preSerialOrder.SerialOrderPOLstLi = make([]model.SerialOrderPOLst, len(serialOrder.SerialOrderPOLstLi), len(serialOrder.SerialOrderPOLstLi))
preSerialOrder.SerialOrderStepLstLi = make([]model.SerialOrderStepLst, len(serialOrder.SerialOrderStepLstLi), len(serialOrder.SerialOrderStepLstLi))
preSerialOrder.SerialOrderOPDetailLi = make([]model.SerialOrderOPDetail, len(serialOrder.SerialOrderOPDetailLi), len(serialOrder.SerialOrderOPDetailLi))
preSerialOrder.LabelHeadLi = make([]baseModel.LabelHead, len(serialOrder.LabelHeadLi), len(serialOrder.LabelHeadLi))
preSerialOrder.LabelDetailLi = make([]baseModel.LabelDetail, len(serialOrder.LabelDetailLi), len(serialOrder.LabelDetailLi))
copy(preSerialOrder.SerialOrderPOLstLi, serialOrder.SerialOrderPOLstLi)
copy(preSerialOrder.SerialOrderStepLstLi, serialOrder.SerialOrderStepLstLi)
copy(preSerialOrder.SerialOrderOPDetailLi, serialOrder.SerialOrderOPDetailLi)
copy(preSerialOrder.LabelHeadLi, serialOrder.LabelHeadLi)
copy(preSerialOrder.LabelDetailLi, serialOrder.LabelDetailLi)
for _, preOrder := range serialOrder.PreOrderLi {
newPreOrder := preOrder
newPreOrder.SerialOrderPOLstLi = make([]model.SerialOrderPOLst, len(preOrder.SerialOrderPOLstLi), len(preOrder.SerialOrderPOLstLi))
newPreOrder.SerialOrderStepLstLi = make([]model.SerialOrderStepLst, len(preOrder.SerialOrderStepLstLi), len(preOrder.SerialOrderStepLstLi))
newPreOrder.SerialOrderOPDetailLi = make([]model.SerialOrderOPDetail, len(preOrder.SerialOrderOPDetailLi), len(preOrder.SerialOrderOPDetailLi))
newPreOrder.LabelHeadLi = make([]baseModel.LabelHead, len(preOrder.LabelHeadLi), len(preOrder.LabelHeadLi))
newPreOrder.LabelDetailLi = make([]baseModel.LabelDetail, len(preOrder.LabelDetailLi), len(preOrder.LabelDetailLi))
copy(newPreOrder.SerialOrderPOLstLi, preOrder.SerialOrderPOLstLi)
copy(newPreOrder.SerialOrderStepLstLi, preOrder.SerialOrderStepLstLi)
copy(newPreOrder.SerialOrderOPDetailLi, preOrder.SerialOrderOPDetailLi)
copy(newPreOrder.LabelHeadLi, preOrder.LabelHeadLi)
copy(newPreOrder.LabelDetailLi, preOrder.LabelDetailLi)
preSerialOrder.PreOrderLi = append(preSerialOrder.PreOrderLi, newPreOrder)
}
} else {
serialOrder.PreOrderLi = make([]model.SerialOrder, len(preSerialOrder.PreOrderLi), len(preSerialOrder.PreOrderLi))
serialOrder.PreOrderLi = make([]model.SerialOrder, 0, len(preSerialOrder.PreOrderLi))
serialOrder.SerialOrderPOLstLi = make([]model.SerialOrderPOLst, len(preSerialOrder.SerialOrderPOLstLi), len(preSerialOrder.SerialOrderPOLstLi))
serialOrder.SerialOrderStepLstLi = make([]model.SerialOrderStepLst, len(preSerialOrder.SerialOrderStepLstLi), len(preSerialOrder.SerialOrderStepLstLi))
serialOrder.SerialOrderOPDetailLi = make([]model.SerialOrderOPDetail, len(preSerialOrder.SerialOrderOPDetailLi), len(preSerialOrder.SerialOrderOPDetailLi))
@ -386,6 +411,28 @@ func (impl *SerialOrderServiceImplement) ReplaceData(serialOrder *model.SerialOr
}
for index, serialOrderOp := range serialOrder.SerialOrderOPDetailLi {
serialOrderOp.SerialOrderId = serialOrderId
serialOrderOp.CharPara1 = strings.Replace(serialOrderOp.CharPara1, "$serialNumber$", serialNumber, 1)
serialOrderOp.CharPara2 = strings.Replace(serialOrderOp.CharPara2, "$serialNumber$", serialNumber, 1)
serialOrderOp.CharPara3 = strings.Replace(serialOrderOp.CharPara3, "$serialNumber$", serialNumber, 1)
serialOrderOp.CharPara4 = strings.Replace(serialOrderOp.CharPara4, "$serialNumber$", serialNumber, 1)
serialOrderOp.CharPara5 = strings.Replace(serialOrderOp.CharPara5, "$serialNumber$", serialNumber, 1)
serialOrderOp.CharPara6 = strings.Replace(serialOrderOp.CharPara6, "$serialNumber$", serialNumber, 1)
serialOrderOp.CharPara7 = strings.Replace(serialOrderOp.CharPara7, "$serialNumber$", serialNumber, 1)
serialOrderOp.CharPara8 = strings.Replace(serialOrderOp.CharPara8, "$serialNumber$", serialNumber, 1)
serialOrderOp.CharPara9 = strings.Replace(serialOrderOp.CharPara9, "$serialNumber$", serialNumber, 1)
serialOrderOp.CharPara10 = strings.Replace(serialOrderOp.CharPara10, "$serialNumber$", serialNumber, 1)
if isPre {
serialOrderOp.CharPara1 = strings.Replace(serialOrderOp.CharPara1, "$date$", day, 1)
serialOrderOp.CharPara2 = strings.Replace(serialOrderOp.CharPara2, "$date$", day, 1)
serialOrderOp.CharPara3 = strings.Replace(serialOrderOp.CharPara3, "$date$", day, 1)
serialOrderOp.CharPara4 = strings.Replace(serialOrderOp.CharPara4, "$date$", day, 1)
serialOrderOp.CharPara5 = strings.Replace(serialOrderOp.CharPara5, "$date$", day, 1)
serialOrderOp.CharPara6 = strings.Replace(serialOrderOp.CharPara6, "$date$", day, 1)
serialOrderOp.CharPara7 = strings.Replace(serialOrderOp.CharPara7, "$date$", day, 1)
serialOrderOp.CharPara8 = strings.Replace(serialOrderOp.CharPara8, "$date$", day, 1)
serialOrderOp.CharPara9 = strings.Replace(serialOrderOp.CharPara9, "$date$", day, 1)
serialOrderOp.CharPara10 = strings.Replace(serialOrderOp.CharPara10, "$date$", day, 1)
}
serialOrder.SerialOrderOPDetailLi[index] = serialOrderOp
}
for index, labelHead := range serialOrder.LabelHeadLi {


+ 56
- 56
services/pln/implments/CustOrder.service.impl.go View File

@ -861,62 +861,62 @@ func (impl *CustOrderServiceImplement) CancelCustOrderQty(user *global.User, cus
return grmi.NewBusinessError("更新工单详细操作状态失败, error:" + err.Error())
}
// 对拆分的预装工单做取消处理
preSerialOrderLi, err := serialOrderDao.Select([]grmi.Predicate{
omMeta.SerialOrder_OrderType.NewPredicate(grmi.Equal, baseModel.ORDER_TYPE_PRE),
omMeta.SerialOrder_GenerateFlag.NewPredicate(grmi.Equal, 0),
omMeta.SerialOrder_MainOrderId.NewPredicate(grmi.Equal, serialOrderData.SerialOrderId),
}, nil)
if err != nil {
return grmi.NewBusinessError("查询工单下的预装工单失败, 错误:" + err.Error())
}
for _, preOrder := range preSerialOrderLi {
if preOrder.SerialOrderStatus.Status > baseModel.WO_STATUS_RELEASED {
return grmi.NewBusinessError("预装工单已经不允许取消, 工单ID:" + preOrder.SerialOrderId)
}
originStatus := preOrder.SerialOrderStatus.Status
statusRec = omModel.SerialOrderStatusRecLst{
SerialOrderId: preOrder.SerialOrderId,
Status: baseModel.WO_STATUS_CANCELED,
PrevStatus: preOrder.SerialOrderStatus.Status,
}
preOrder.SerialOrderStatus.Status = baseModel.WO_STATUS_CANCELED
err = serialOrderStatusRecDao.InsertOne(&statusRec)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("插入预装工单状态变更记录失败, error:" + err.Error())
}
err = serialOrderStatusDao.UpdateOneWithStatus(&preOrder.SerialOrderStatus, baseModel.WO_STATUS_RELEASED)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("更新预装工单状态失败, error:" + err.Error())
}
if originStatus == baseModel.WO_STATUS_RELEASED {
poUpdateData := &omModel.SerialOrderPOLst{
Status: baseModel.WO_STATUS_CANCELED,
}
err = serialOrderPoDao.UpdateWhere([]grmi.Predicate{omMeta.SerialOrderPOLst_SerialOrderId.NewPredicate(grmi.Equal, preOrder.SerialOrderId)}, poUpdateData, omMeta.SerialOrderPOLst_Status.Name)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("更新预装工单工序状态失败, error:" + err.Error())
}
stepUpdateData := &omModel.SerialOrderStepLst{
Status: baseModel.WO_STATUS_CANCELED,
}
err = serialOrderStepDao.UpdateWhere([]grmi.Predicate{omMeta.SerialOrderStepLst_SerialOrderId.NewPredicate(grmi.Equal, preOrder.SerialOrderId)}, stepUpdateData, omMeta.SerialOrderStepLst_Status.Name)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("更新预装工单工步状态失败, error:" + err.Error())
}
opDetailUpdateData := &omModel.SerialOrderOPDetail{
Status: baseModel.WO_STATUS_CANCELED,
}
err = serialOrderOPDetailDao.UpdateWhere([]grmi.Predicate{omMeta.SerialOrderOPDetail_SerialOrderId.NewPredicate(grmi.Equal, preOrder.SerialOrderId)}, opDetailUpdateData, omMeta.SerialOrderOPDetail_Status.Name)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("更新预装工单详细操作状态失败, error:" + err.Error())
}
}
}
//preSerialOrderLi, err := serialOrderDao.Select([]grmi.Predicate{
// omMeta.SerialOrder_OrderType.NewPredicate(grmi.Equal, baseModel.ORDER_TYPE_PRE),
// omMeta.SerialOrder_GenerateFlag.NewPredicate(grmi.Equal, 0),
// omMeta.SerialOrder_MainOrderId.NewPredicate(grmi.Equal, serialOrderData.SerialOrderId),
//}, nil)
//if err != nil {
// return grmi.NewBusinessError("查询工单下的预装工单失败, 错误:" + err.Error())
//}
//for _, preOrder := range preSerialOrderLi {
// if preOrder.SerialOrderStatus.Status > baseModel.WO_STATUS_RELEASED {
// return grmi.NewBusinessError("预装工单已经不允许取消, 工单ID:" + preOrder.SerialOrderId)
// }
// originStatus := preOrder.SerialOrderStatus.Status
// statusRec = omModel.SerialOrderStatusRecLst{
// SerialOrderId: preOrder.SerialOrderId,
// Status: baseModel.WO_STATUS_CANCELED,
// PrevStatus: preOrder.SerialOrderStatus.Status,
// }
// preOrder.SerialOrderStatus.Status = baseModel.WO_STATUS_CANCELED
// err = serialOrderStatusRecDao.InsertOne(&statusRec)
// if err != nil {
// _ = session.Rollback()
// return grmi.NewBusinessError("插入预装工单状态变更记录失败, error:" + err.Error())
// }
// err = serialOrderStatusDao.UpdateOneWithStatus(&preOrder.SerialOrderStatus, baseModel.WO_STATUS_RELEASED)
// if err != nil {
// _ = session.Rollback()
// return grmi.NewBusinessError("更新预装工单状态失败, error:" + err.Error())
// }
// if originStatus == baseModel.WO_STATUS_RELEASED {
// poUpdateData := &omModel.SerialOrderPOLst{
// Status: baseModel.WO_STATUS_CANCELED,
// }
// err = serialOrderPoDao.UpdateWhere([]grmi.Predicate{omMeta.SerialOrderPOLst_SerialOrderId.NewPredicate(grmi.Equal, preOrder.SerialOrderId)}, poUpdateData, omMeta.SerialOrderPOLst_Status.Name)
// if err != nil {
// _ = session.Rollback()
// return grmi.NewBusinessError("更新预装工单工序状态失败, error:" + err.Error())
// }
// stepUpdateData := &omModel.SerialOrderStepLst{
// Status: baseModel.WO_STATUS_CANCELED,
// }
// err = serialOrderStepDao.UpdateWhere([]grmi.Predicate{omMeta.SerialOrderStepLst_SerialOrderId.NewPredicate(grmi.Equal, preOrder.SerialOrderId)}, stepUpdateData, omMeta.SerialOrderStepLst_Status.Name)
// if err != nil {
// _ = session.Rollback()
// return grmi.NewBusinessError("更新预装工单工步状态失败, error:" + err.Error())
// }
// opDetailUpdateData := &omModel.SerialOrderOPDetail{
// Status: baseModel.WO_STATUS_CANCELED,
// }
// err = serialOrderOPDetailDao.UpdateWhere([]grmi.Predicate{omMeta.SerialOrderOPDetail_SerialOrderId.NewPredicate(grmi.Equal, preOrder.SerialOrderId)}, opDetailUpdateData, omMeta.SerialOrderOPDetail_Status.Name)
// if err != nil {
// _ = session.Rollback()
// return grmi.NewBusinessError("更新预装工单详细操作状态失败, error:" + err.Error())
// }
// }
//}
}
}
// 处理客户订单数量数据


+ 31
- 8
services/pln/implments/CustOrderLogic.service.impl.go View File

@ -304,7 +304,6 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO
// 每个总成生产的时间
duration := custOrderData.PlanEndTime.Restore().Sub(custOrderData.PlanStartTime.Restore())
totalQty := custOrderData.PlanQty * len(productLi)
var current int
perDuration := duration.Seconds() / float64(totalQty)
// 产线组与所属产线的MAP数据结构
workLineGroupMap := make(map[string]map[string]interface{})
@ -338,7 +337,7 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO
writeLabelDetailLi := make([]baseModel.LabelDetail, 0)
syncKey := custOrderData.CustOrderId + "-" + strconv.Itoa(custOrderData.OrderQty.ReleasedQty)
waitReleaseSerialOrderLi := make([]omModel.SerialOrder, 0, len(productLi))
for _, product := range productLi {
for index, product := range productLi {
var serialOrder omModel.SerialOrder
orderCraft, exist := productCraftMap[product.ProductId]
if !exist {
@ -372,9 +371,9 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO
} else {
resourceId = product.DefaultWorkLineId
}
planStartTime := custOrderData.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*current) * time.Second)
planEndTime := custOrderData.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*(current+1)) * time.Second)
current++
currentIndex := custOrderData.OrderQty.ReleasedQty * len(productLi) + index
planStartTime := custOrderData.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*currentIndex) * time.Second)
planEndTime := custOrderData.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*(currentIndex+1)) * time.Second)
planStartDate := grmi.Date(planStartTime)
planEndDate := grmi.Date(planEndTime)
serialOrderId := product.MachineCode + "$serialNumber$" + product.ProductType + product.ColorValue
@ -383,7 +382,6 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO
return grmi.NewBusinessError("通过时间获取工单调度Key失败, error:" + err.Error())
}
var dealedSchedKey = int64(timeInt * 100)
serialOrder = omModel.SerialOrder{
SerialOrderId: serialOrderId,
ArtId: product.ProductId,
@ -427,7 +425,7 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO
copy(orderCraft.SerialOrderOPDetailLi, serialOrder.SerialOrderOPDetailLi)
copy(orderCraft.LabelHeadLi, serialOrder.LabelHeadLi)
copy(orderCraft.LabelDetailLi, serialOrder.LabelDetailLi)
for _, preOrder := range orderCraft.PreOrderLi {
for _, preOrder := range serialOrder.PreOrderLi {
newPreOrder := preOrder
newPreOrder.SerialOrderPOLstLi = make([]omModel.SerialOrderPOLst, len(preOrder.SerialOrderPOLstLi), len(preOrder.SerialOrderPOLstLi))
newPreOrder.SerialOrderStepLstLi = make([]omModel.SerialOrderStepLst, len(preOrder.SerialOrderStepLstLi), len(preOrder.SerialOrderStepLstLi))
@ -439,11 +437,28 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO
copy(newPreOrder.SerialOrderOPDetailLi, preOrder.SerialOrderOPDetailLi)
copy(newPreOrder.LabelHeadLi, preOrder.LabelHeadLi)
copy(newPreOrder.LabelDetailLi, preOrder.LabelDetailLi)
serialOrder.PreOrderLi = append(serialOrder.PreOrderLi, newPreOrder)
orderCraft.PreOrderLi = append(orderCraft.PreOrderLi, newPreOrder)
}
productCraftMap[serialOrder.ArtId] = orderCraft
} else {
serialOrder = orderCraft
currentIndex := custOrderData.OrderQty.ReleasedQty * len(productLi) + index
planStartTime := custOrderData.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*currentIndex) * time.Second)
planEndTime := custOrderData.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*(currentIndex+1)) * time.Second)
planStartDate := grmi.Date(planStartTime)
planEndDate := grmi.Date(planEndTime)
timeInt, err := strconv.Atoi(planStartTime.Format("060102150405"))
if err != nil {
return grmi.NewBusinessError("通过时间获取工单调度Key失败, error:" + err.Error())
}
var dealedSchedKey = int64(timeInt * 100)
serialOrder.SyncKey = syncKey
serialOrder.PlanStartTime = grmi.DateTime(planStartTime)
serialOrder.PlanEndTime = grmi.DateTime(planEndTime)
serialOrder.PlanStartDate = planStartDate
serialOrder.PlanEndDate = planEndDate
serialOrder.SchedKey = dealedSchedKey
serialOrder.ArtId = product.ProductId
serialOrder.PreOrderLi = make([]omModel.SerialOrder, 0, len(orderCraft.PreOrderLi))
serialOrder.SerialOrderPOLstLi = make([]omModel.SerialOrderPOLst, len(orderCraft.SerialOrderPOLstLi), len(orderCraft.SerialOrderPOLstLi))
serialOrder.SerialOrderStepLstLi = make([]omModel.SerialOrderStepLst, len(orderCraft.SerialOrderStepLstLi), len(orderCraft.SerialOrderStepLstLi))
@ -457,6 +472,14 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO
copy(serialOrder.LabelDetailLi, orderCraft.LabelDetailLi)
for _, preOrder := range orderCraft.PreOrderLi {
newPreOrder := preOrder
newPreOrder.MainOrderId = serialOrder.SerialOrderId
newPreOrder.SyncKey = serialOrder.SyncKey
newPreOrder.SchedKey = serialOrder.SchedKey
newPreOrder.PreSchedKey = serialOrder.SchedKey
newPreOrder.PlanStartTime = serialOrder.PlanStartTime
newPreOrder.PlanEndTime = serialOrder.PlanEndTime
newPreOrder.PlanStartDate = serialOrder.PlanStartDate
newPreOrder.PlanEndDate = serialOrder.PlanEndDate
newPreOrder.SerialOrderPOLstLi = make([]omModel.SerialOrderPOLst, len(preOrder.SerialOrderPOLstLi), len(preOrder.SerialOrderPOLstLi))
newPreOrder.SerialOrderStepLstLi = make([]omModel.SerialOrderStepLst, len(preOrder.SerialOrderStepLstLi), len(preOrder.SerialOrderStepLstLi))
newPreOrder.SerialOrderOPDetailLi = make([]omModel.SerialOrderOPDetail, len(preOrder.SerialOrderOPDetailLi), len(preOrder.SerialOrderOPDetailLi))


Loading…
Cancel
Save