From dd8955f16ea20ce9429a17b4912a04dfa701537c Mon Sep 17 00:00:00 2001 From: zhangxin Date: Thu, 2 Sep 2021 10:05:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=B4=BE=E5=B7=A5=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/schedule/SchedTask.Ctrl.go | 153 +++++++++++++++++++++++++++- 1 file changed, 150 insertions(+), 3 deletions(-) diff --git a/services/schedule/SchedTask.Ctrl.go b/services/schedule/SchedTask.Ctrl.go index 093dc2d..b7ee410 100644 --- a/services/schedule/SchedTask.Ctrl.go +++ b/services/schedule/SchedTask.Ctrl.go @@ -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...)