Browse Source

修改工序依赖派工的逻辑

pull/80/head
zhangxin 3 years ago
parent
commit
501ba05f6a
1 changed files with 66 additions and 9 deletions
  1. +66
    -9
      services/schedule/SchedTask.Ctrl.go

+ 66
- 9
services/schedule/SchedTask.Ctrl.go View File

@ -1,11 +1,14 @@
package schedule
import (
baseDal "LAPP_LF_MOM_BACKEND/dao/base"
dal "LAPP_LF_MOM_BACKEND/dao/om"
"LAPP_LF_MOM_BACKEND/db"
"LAPP_LF_MOM_BACKEND/grmi"
"LAPP_LF_MOM_BACKEND/infra/logger"
baseMeta "LAPP_LF_MOM_BACKEND/meta/base"
omMeta "LAPP_LF_MOM_BACKEND/meta/om"
baseModel "LAPP_LF_MOM_BACKEND/models/base"
common "LAPP_LF_MOM_BACKEND/models/base"
model "LAPP_LF_MOM_BACKEND/models/om"
"errors"
@ -259,6 +262,7 @@ func (tasksrv *TaskSrv) ReleaseSerialOrder(relQty int, releaseId string) (err er
poRecDao := dal.NewSerialOrderPOStatusRecLstDAO(session, common.PlantNr, user)
opDetailDao := dal.NewSerialOrderOPDetailDAO(session, common.PlantNr, user)
opDetailRecDao := dal.NewSerialOrderOPDetailStatusRecLstDAO(session, common.PlantNr, user)
processDao := baseDal.NewProcessDAO(session, common.PlantNr, user)
innerLog, _ := logger.NewLogger("scheduler", "scheduler")
innerLog.Debug("ReleaseSerialOrder begin workOrderId:"+tasksrv.Wotab.WorkOrderId+" relQty: "+strconv.Itoa(relQty), "release id:"+releaseId)
// 判断批次订单状态是否满足下达条件 >= 24 && < 80
@ -320,18 +324,46 @@ func (tasksrv *TaskSrv) ReleaseSerialOrder(relQty int, releaseId string) (err er
return err
}
innerLog.Debug("ReleaseSerialOrder serialOrderStatusDao.UpdateOne(&serialOrderStatus), serialOrderID:"+serialOrderStatus.SerialOrderId, "release id:"+releaseId)
poLi, err := poDao.Select([]grmi.Predicate{omMeta.SerialOrderPOLst_SerialOrderId.NewPredicate(grmi.Equal, serialOrder.SerialOrderId)}, nil)
if err != nil {
innerLog.Error("ReleaseSerialOrder 查询工单工序数据失败, error:"+err.Error()+" serialOrderId:"+serialOrderStatus.SerialOrderId, "release id:"+releaseId)
_ = session.Rollback()
return err
}
poNumLi := make([]interface{}, 0, len(poLi))
for _, poData := range poLi {
poNumLi = append(poNumLi, poData.PO)
}
poDataLi, err := processDao.Select([]grmi.Predicate{baseMeta.Process_WorkLineId.NewPredicate(grmi.Equal, serialOrder.UsedResourceId), baseMeta.Process_PO.NewPredicate(grmi.Include, poNumLi...)}, nil)
if err != nil {
innerLog.Error("ReleaseSerialOrder 查询工序数据失败, error:"+err.Error()+" serialOrderId:"+serialOrderStatus.SerialOrderId, "release id:"+releaseId)
_ = session.Rollback()
return err
}
firstPOMap := make(map[int]interface{})
releasePOLi := make([]int, 0)
for _, po := range poDataLi {
if po.IsFirstPO {
firstPOMap[po.PO] = nil
releasePOLi = append(releasePOLi, po.PO)
}
}
for firstPO, _ := range firstPOMap {
li := tasksrv.RecursionComposePO(firstPO, &poDataLi)
releasePOLi = append(releasePOLi, li...)
}
releasePOMap := make(map[int]interface{}, len(releasePOLi))
for _, po := range releasePOLi {
releasePOMap[po] = nil
}
poRecLi := make([]model.SerialOrderPOStatusRecLst, 0, len(poLi))
var dependPo int
for index, po := range poLi {
if po.HasDependOn {
dependPo = po.PO
break
_, exist := releasePOMap[po.PO]
if !exist {
continue
}
poRec := model.SerialOrderPOStatusRecLst{
SerialOrderId: serialOrder.SerialOrderId,
@ -352,8 +384,9 @@ func (tasksrv *TaskSrv) ReleaseSerialOrder(relQty int, releaseId string) (err er
}
stepRecLi := make([]model.SerialOrderStepStatusRecLst, 0, len(stepLi))
for index, step := range stepLi {
if dependPo != 0 && step.PO >= dependPo {
break
_, exist := releasePOMap[step.PO]
if !exist {
continue
}
stepRec := model.SerialOrderStepStatusRecLst{
SerialOrderId: serialOrder.SerialOrderId,
@ -376,12 +409,13 @@ func (tasksrv *TaskSrv) ReleaseSerialOrder(relQty int, releaseId string) (err er
}
opDetailRecLi := make([]model.SerialOrderOPDetailStatusRecLst, 0, len(opDetailLi))
for index, opDetail := range opDetailLi {
if dependPo != 0 && opDetail.PO >= dependPo {
break
_, exist := releasePOMap[opDetail.PO]
if !exist {
continue
}
opDetailRec := model.SerialOrderOPDetailStatusRecLst{
SerialOrderId: serialOrder.SerialOrderId,
DetailId: opDetail.DetailId,
DetailId: opDetail.DetailId,
PO: opDetail.PO,
StepNo: opDetail.StepNo,
OriginPos: opDetail.Pos,
@ -645,3 +679,26 @@ func (stasksrv *SerialTaskSrv) Release() (err error) {
}
return
}
func (tasksrv *TaskSrv) RecursionComposePO(PO int, POLi *[]baseModel.Process) []int {
result := make([]int, 0)
for _, poData := range *POLi {
prePO, err := strconv.Atoi(poData.PrePO)
if err != nil {
prePO = 0
}
if prePO == PO {
if poData.HasDependOn {
return []int{}
} else if poData.IsLastPO {
return []int{poData.PO}
}else {
li := tasksrv.RecursionComposePO(poData.PO, POLi)
result = append(result, poData.PO)
result = append(result, li...)
return result
}
}
}
return []int{}
}

Loading…
Cancel
Save