|
|
@ -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{} |
|
|
|
} |