|
|
@ -11,9 +11,11 @@ import ( |
|
|
|
baseModel "LAPP_LF_MOM_BACKEND/models/base" |
|
|
|
common "LAPP_LF_MOM_BACKEND/models/base" |
|
|
|
model "LAPP_LF_MOM_BACKEND/models/om" |
|
|
|
"LAPP_LF_MOM_BACKEND/web/models" |
|
|
|
"errors" |
|
|
|
"fmt" |
|
|
|
"strconv" |
|
|
|
"strings" |
|
|
|
"time" |
|
|
|
) |
|
|
|
|
|
|
@ -243,7 +245,6 @@ func (tasksrv *TaskSrv) Release(workOrderStatusDao dal.WorkOrderStatusDAO, workO |
|
|
|
|
|
|
|
// 下达批次订单,同步生成对应的序列订单
|
|
|
|
func (tasksrv *TaskSrv) ReleaseSerialOrder(relQty int, releaseId string) (err error) { |
|
|
|
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
@ -263,8 +264,13 @@ func (tasksrv *TaskSrv) ReleaseSerialOrder(relQty int, releaseId string) (err er |
|
|
|
opDetailDao := dal.NewSerialOrderOPDetailDAO(session, common.PlantNr, user) |
|
|
|
opDetailRecDao := dal.NewSerialOrderOPDetailStatusRecLstDAO(session, common.PlantNr, user) |
|
|
|
processDao := baseDal.NewProcessDAO(session, common.PlantNr, user) |
|
|
|
printHeadDao := baseDal.NewPrintHeadDAO(session, common.PlantNr, user) |
|
|
|
printDetailDao := baseDal.NewPrintDetailDAO(session, common.PlantNr, user) |
|
|
|
workLineDao := baseDal.NewWorkLineDAO(session, common.PlantNr, user) |
|
|
|
articleDao := baseDal.NewArticleDAO(session, common.PlantNr, user) |
|
|
|
innerLog, _ := logger.NewLogger("scheduler", "scheduler") |
|
|
|
innerLog.Debug("ReleaseSerialOrder begin workOrderId:"+tasksrv.Wotab.WorkOrderId+" relQty: "+strconv.Itoa(relQty), "release id:"+releaseId) |
|
|
|
today := time.Now().Format("20060102") |
|
|
|
// 判断批次订单状态是否满足下达条件 >= 24 && < 80
|
|
|
|
if tasksrv.WorkOrderStatus.Status < common.WO_STATUS_LOCKED || tasksrv.WorkOrderStatus.Status >= common.WO_STATUS_FINISHED { |
|
|
|
_ = session.Rollback() |
|
|
@ -291,8 +297,19 @@ func (tasksrv *TaskSrv) ReleaseSerialOrder(relQty int, releaseId string) (err er |
|
|
|
err = errors.New(fmt.Sprintf("批次订单%s需下达数量大于锁定的任务队列!", tasksrv.WorkOrderStatus.WorkOrderId)) |
|
|
|
return |
|
|
|
} |
|
|
|
workLine, err := workLineDao.SelectOne(tasksrv.Wotab.UsedResourceId) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
innerLog.Error("ReleaseSerialOrder 获取产线数据失败, workOrderId:"+tasksrv.Wotab.WorkOrderId+"error:"+err.Error(), "release id:"+releaseId) |
|
|
|
return |
|
|
|
} |
|
|
|
if workLine == nil { |
|
|
|
_ = session.Rollback() |
|
|
|
innerLog.Error("ReleaseSerialOrder 获取产线不存在, workOrderId:"+tasksrv.Wotab.WorkOrderId+"workLineId:"+tasksrv.Wotab.UsedResourceId, "release id:"+releaseId) |
|
|
|
return errors.New("获取产线不存在, workOrderId:" + tasksrv.Wotab.WorkOrderId + "workLineId:" + tasksrv.Wotab.UsedResourceId) |
|
|
|
} |
|
|
|
artMap := make(map[string]baseModel.Article) |
|
|
|
for i := 0; i < relQty; i++ { |
|
|
|
|
|
|
|
serialOrderStatus := tasksrv.SerialTaskArray[i].SerialOrderStatusTab |
|
|
|
innerLog.Debug("ReleaseSerialOrder release serialOrder begin, serialOrderID:"+serialOrderStatus.SerialOrderId, "release id:"+releaseId) |
|
|
|
|
|
|
@ -325,6 +342,134 @@ func (tasksrv *TaskSrv) ReleaseSerialOrder(relQty int, releaseId string) (err er |
|
|
|
} |
|
|
|
innerLog.Debug("ReleaseSerialOrder serialOrderStatusDao.UpdateOne(&serialOrderStatus), serialOrderID:"+serialOrderStatus.SerialOrderId, "release id:"+releaseId) |
|
|
|
|
|
|
|
// 写入打印条码的逻辑
|
|
|
|
snr := new(models.Snrtab) |
|
|
|
snr.Finr = common.PlantNr |
|
|
|
printID, err := snr.GetNextSnrWithSession(session, "Printer") |
|
|
|
if err != nil { |
|
|
|
innerLog.Error("ReleaseSerialOrder 更新工单工艺详细步骤状态失败, error:"+err.Error()+" serialOrderId:"+serialOrderStatus.SerialOrderId, "release id:"+releaseId) |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("获取打印条码流水号失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
article, exist := artMap[serialOrder.ArtId] |
|
|
|
if !exist { |
|
|
|
articlePointer, err := articleDao.SelectOne(serialOrder.ArtId) |
|
|
|
if err != nil { |
|
|
|
innerLog.Error("ReleaseSerialOrder 获取物料数据失败, error:"+err.Error()+" serialOrderId:"+serialOrderStatus.SerialOrderId, "release id:"+releaseId) |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("获取物料数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if articlePointer == nil { |
|
|
|
innerLog.Error("ReleaseSerialOrder 获取物料数据不存在,artId:"+serialOrder.ArtId+" serialOrderId:"+serialOrderStatus.SerialOrderId, "release id:"+releaseId) |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("获取物料数据不存在,artId:" + serialOrder.ArtId + " serialOrderId:" + serialOrderStatus.SerialOrderId) |
|
|
|
} |
|
|
|
article = *articlePointer |
|
|
|
} |
|
|
|
var ipAddress string |
|
|
|
if workLine.WorkLineid == "IBK2-2" { |
|
|
|
ipLi := strings.Split(workLine.PrintAddress, ";") |
|
|
|
if len(ipLi) != 2 { |
|
|
|
innerLog.Error("ReleaseSerialOrder IBK2-2 产线打印机数据错误, serialOrderId:"+serialOrderStatus.SerialOrderId, "release id:"+releaseId) |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("IBK2-2 产线打印机数据错误, serialOrderId:"+serialOrderStatus.SerialOrderId) |
|
|
|
} |
|
|
|
if article.ArtSpec4 == "MANUAL" { |
|
|
|
ipAddress = ipLi[0] |
|
|
|
} else { |
|
|
|
ipAddress = ipLi[1] |
|
|
|
} |
|
|
|
} else { |
|
|
|
ipAddress = workLine.PrintAddress |
|
|
|
} |
|
|
|
printHead := baseModel.PrintHead{ |
|
|
|
PrintHeadId: printID, |
|
|
|
PrinterId: ipAddress, |
|
|
|
PrintFileType: "BARCODE", |
|
|
|
PrintObjId: serialOrder.SerialOrderId, |
|
|
|
PrintObjType: "OrderId", |
|
|
|
Status: "0", |
|
|
|
TemplateFile: workLine.PrintTemplate, |
|
|
|
} |
|
|
|
pd1 := baseModel.PrintDetail{ |
|
|
|
PrintHeadId: printID, |
|
|
|
Pos: 1, |
|
|
|
VarName: "$YFAS$", |
|
|
|
VarValue: article.ArtId, |
|
|
|
} |
|
|
|
pd2 := baseModel.PrintDetail{ |
|
|
|
PrintHeadId: printID, |
|
|
|
Pos: 2, |
|
|
|
VarName: "$Customer$", |
|
|
|
VarValue: article.CustArtId, |
|
|
|
} |
|
|
|
var pd3 baseModel.PrintDetail |
|
|
|
if article.ProjectId == "X247" || article.ProjectId == "X243" { |
|
|
|
pd3 = baseModel.PrintDetail{ |
|
|
|
PrintHeadId: printID, |
|
|
|
Pos: 3, |
|
|
|
VarName: "$PartName$", |
|
|
|
VarValue: article.Descr2, |
|
|
|
} |
|
|
|
} else { |
|
|
|
pd3 = baseModel.PrintDetail{ |
|
|
|
PrintHeadId: printID, |
|
|
|
Pos: 3, |
|
|
|
VarName: "$PartName$", |
|
|
|
VarValue: article.Descr1, |
|
|
|
} |
|
|
|
} |
|
|
|
pd4 := baseModel.PrintDetail{ |
|
|
|
PrintHeadId: printID, |
|
|
|
Pos: 4, |
|
|
|
VarName: "$ProductionDate$", |
|
|
|
VarValue: today, |
|
|
|
} |
|
|
|
pd5 := baseModel.PrintDetail{ |
|
|
|
PrintHeadId: printID, |
|
|
|
Pos: 5, |
|
|
|
VarName: "$PartVersion$", |
|
|
|
VarValue: article.ArtSpec2, |
|
|
|
} |
|
|
|
pd6 := baseModel.PrintDetail{ |
|
|
|
PrintHeadId: printID, |
|
|
|
Pos: 6, |
|
|
|
VarName: "$shift$", |
|
|
|
VarValue: "E", |
|
|
|
} |
|
|
|
pd7 := baseModel.PrintDetail{ |
|
|
|
PrintHeadId: printID, |
|
|
|
Pos: 7, |
|
|
|
VarName: "$Level$", |
|
|
|
VarValue: article.ArtSpec3, |
|
|
|
} |
|
|
|
pd8 := baseModel.PrintDetail{ |
|
|
|
PrintHeadId: printID, |
|
|
|
Pos: 8, |
|
|
|
VarName: "$S/N$", |
|
|
|
VarValue: serialOrder.SerialOrderId[len(serialOrder.SerialOrderId)-4: len(serialOrder.SerialOrderId)], |
|
|
|
} |
|
|
|
pd9 := baseModel.PrintDetail{ |
|
|
|
PrintHeadId: printID, |
|
|
|
Pos: 9, |
|
|
|
VarName: "$OrderId$", |
|
|
|
VarValue: serialOrder.SerialOrderId, |
|
|
|
} |
|
|
|
printDetailLi := []baseModel.PrintDetail{pd1, pd2, pd3, pd4, pd5, pd6, pd7, pd8, pd9} |
|
|
|
err = printHeadDao.InsertOne(&printHead) |
|
|
|
if err != nil { |
|
|
|
innerLog.Error("ReleaseSerialOrder 插入打印头部数据失败, error:"+err.Error()+" serialOrderId:"+serialOrderStatus.SerialOrderId, "release id:"+releaseId) |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("插入打印头部数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
err = printDetailDao.Insert(&printDetailLi) |
|
|
|
if err != nil { |
|
|
|
innerLog.Error("ReleaseSerialOrder 插入打印详细数据失败, error:"+err.Error()+" serialOrderId:"+serialOrderStatus.SerialOrderId, "release id:"+releaseId) |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("插入打印详细数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
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) |
|
|
@ -513,6 +658,8 @@ func (tasksrv *TaskSrv) ReleaseSerialOrder(relQty int, releaseId string) (err er |
|
|
|
_ = session.Rollback() |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
tasksrv.ReleasedQty++ |
|
|
|
tasksrv.WorkOrderQty.ReleasedQty++ |
|
|
|
} |
|
|
@ -692,7 +839,7 @@ func (tasksrv *TaskSrv) RecursionComposePO(PO int, POLi *[]baseModel.Process) [] |
|
|
|
return []int{} |
|
|
|
} else if poData.IsLastPO { |
|
|
|
return []int{poData.PO} |
|
|
|
}else { |
|
|
|
} else { |
|
|
|
li := tasksrv.RecursionComposePO(poData.PO, POLi) |
|
|
|
result = append(result, poData.PO) |
|
|
|
result = append(result, li...) |
|
|
|