Browse Source

调整派工的逻辑

pull/93/head
zhangxin 3 years ago
parent
commit
dd8955f16e
1 changed files with 150 additions and 3 deletions
  1. +150
    -3
      services/schedule/SchedTask.Ctrl.go

+ 150
- 3
services/schedule/SchedTask.Ctrl.go View File

@ -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...)


Loading…
Cancel
Save