|
|
@ -8,6 +8,7 @@ import ( |
|
|
|
meDal "LAPP_LF_MOM_BACKEND/dao/me" |
|
|
|
apiMeta "LAPP_LF_MOM_BACKEND/meta/api" |
|
|
|
baseMeta "LAPP_LF_MOM_BACKEND/meta/base" |
|
|
|
"github.com/go-xorm/xorm" |
|
|
|
"strings" |
|
|
|
|
|
|
|
//logDal "LAPP_LF_MOM_BACKEND/dao/log"
|
|
|
@ -911,11 +912,7 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO |
|
|
|
PODao := dal.NewSerialOrderPOLstDAO(session, user.Pid, user.Userid) |
|
|
|
stepDao := dal.NewSerialOrderStepLstDAO(session, user.Pid, user.Userid) |
|
|
|
artRelDao := baseDal.NewArticleRelLstDAO(session, user.Pid, user.Userid) |
|
|
|
ruleDao := baseDal.NewArtCheckRuleDAO(session, user.Pid, user.Userid) |
|
|
|
allocateDao := baseDal.NewArtQtyAllocateDAO(session, user.Pid, user.Userid) |
|
|
|
opcComRuleDao := baseDal.NewOPCComRuleDAO(session, user.Pid, user.Userid) |
|
|
|
//opcComDetailDao := baseDal.NewOPCComDetailRuleDAO(session, user.Pid, user.Userid)
|
|
|
|
serialOrderDetailDao := dal.NewSerialOrderOPDetailDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
|
|
// 获取项目数据 用于获取流水号
|
|
|
|
project, err := projectDao.SelectOne(baseModel.ProjectId) |
|
|
|
if err != nil { |
|
|
@ -1076,6 +1073,7 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO |
|
|
|
} |
|
|
|
allocateMap := make(map[string][]baseModel.ArtQtyAllocate) |
|
|
|
checkRuleMap := make(map[string]baseModel.ArtCheckRule) |
|
|
|
//opcBasicMap := make(map[string]baseModel.OPCBasicComInfo)
|
|
|
|
for _, serialOrderStatus := range serialOrderStatusLi { |
|
|
|
var PO int |
|
|
|
processPos := 1 |
|
|
@ -1086,8 +1084,7 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO |
|
|
|
serialOrderWorkPlace := model.SerialOrderPOLst{ |
|
|
|
SerialOrderId: serialOrderStatus.SerialOrderId, |
|
|
|
PO: PO, |
|
|
|
Pos: processPos, |
|
|
|
Status: baseModel.WO_STATUS_LOCKED, |
|
|
|
Status: baseModel.WO_STATUS_LOCKED, |
|
|
|
} |
|
|
|
err = PODao.InsertOne(&serialOrderWorkPlace) |
|
|
|
if err != nil { |
|
|
@ -1107,7 +1104,7 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO |
|
|
|
AttrCode: op.ArticleAtcodLst.AttrCode, |
|
|
|
AttrValue: op.ArticleAtcodLst.AttrValue, |
|
|
|
StepType: op.StepType.StepTypeName, |
|
|
|
Status: baseModel.WO_STATUS_LOCKED, |
|
|
|
Status: baseModel.WO_STATUS_LOCKED, |
|
|
|
} |
|
|
|
opPos++ |
|
|
|
err = stepDao.InsertOne(&serialOrderStep) |
|
|
@ -1116,132 +1113,14 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO |
|
|
|
return nil, grmi.NewBusinessError("插入序列工单工艺数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if serialOrderStep.StepType == model.STEP_CHECK_RULE { |
|
|
|
rule, exist := checkRuleMap[op.ArticleAtcodLst.ArtId] |
|
|
|
if !exist { |
|
|
|
ruleLi, err := ruleDao.Select([]grmi.Predicate{baseMeta.ArtCheckRule_AttriCode.NewPredicate(grmi.Equal, op.ArticleAtcodLst.AttrCode), baseMeta.ArtCheckRule_SubObject.NewPredicate(grmi.Equal, serialOrderStep.SubArtId)}, nil) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("获取零件检验规则失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if len(ruleLi) == 0 { |
|
|
|
ruleLi, err = ruleDao.Select([]grmi.Predicate{baseMeta.ArtCheckRule_AttriCode.NewPredicate(grmi.Equal, op.ArticleAtcodLst.AttrCode), baseMeta.ArtCheckRule_SubObject.NewPredicate(grmi.Equal, model.MES_MATCH_ALL)}, nil) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("获取零件检验规则失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if len(ruleLi) == 0 { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("未获取到零件检验规则, artId:" + serialOrderStep.SubArtId) |
|
|
|
} |
|
|
|
} |
|
|
|
rule = ruleLi[0] |
|
|
|
} |
|
|
|
var num int |
|
|
|
allocateLi, exist := allocateMap[op.ArticleAtcodLst.ArtId] |
|
|
|
composeQty := int(artRelMap[serialOrderStep.SubArtId].ComposeQty) |
|
|
|
if !exist { |
|
|
|
allocateLi, err = allocateDao.Select([]grmi.Predicate{baseMeta.ArtQtyAllocate_AttriCode.NewPredicate(grmi.Equal, op.ArticleAtcodLst.AttrCode), baseMeta.ArtQtyAllocate_TotalPlanty.NewPredicate(grmi.Equal, composeQty)}, nil) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("获取特殊工位数量分配数据失败,错误:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
if len(allocateLi) == 0 { |
|
|
|
num = composeQty |
|
|
|
} else { |
|
|
|
var allNum int |
|
|
|
for _, allocate := range allocateLi { |
|
|
|
if allocate.PO == serialOrderStep.PO { |
|
|
|
if allocate.SubObject == model.MES_MATCH_ALL { |
|
|
|
allNum = allocate.AssignPlanty |
|
|
|
} else if allocate.SubObject == serialOrderStep.SubArtId { |
|
|
|
num = allocate.AssignPlanty |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if num == 0 { |
|
|
|
if allNum != 0 { |
|
|
|
num = allNum |
|
|
|
} else { |
|
|
|
num = composeQty |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
pos := 1 |
|
|
|
for i := 0; i < num; i++ { |
|
|
|
op := model.SerialOrderOPDetail{ |
|
|
|
SerialOrderId: serialOrderStep.SerialOrderId, |
|
|
|
PO: serialOrderStep.PO, |
|
|
|
SubArtId: serialOrderStep.SubArtId, |
|
|
|
Pos: pos, |
|
|
|
StepNo: serialOrderStep.StepNo, |
|
|
|
StepType: model.STEP_CHECK_RULE, |
|
|
|
Status: baseModel.WO_STATUS_LOCKED, |
|
|
|
// 扫码校验 AttriCodeDesc
|
|
|
|
CharPara1: rule.AttriCodeDesc, |
|
|
|
// 扫码校验 SubObject
|
|
|
|
CharPara2: rule.SubObject, |
|
|
|
// 扫码校验 CodeLength
|
|
|
|
CharPara3: rule.CodeLength, |
|
|
|
CharPara4: rule.CheckObject, |
|
|
|
IntPara1: rule.AttriCode, |
|
|
|
// 扫码校验 AttriCode
|
|
|
|
IntPara2: rule.CheckStartPos, |
|
|
|
IntPara3: rule.CheckLength, |
|
|
|
FlagPara1: rule.OnlyBarCodeFlag, |
|
|
|
} |
|
|
|
pos++ |
|
|
|
err = serialOrderDetailDao.InsertOne(&op) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("插入操作明细记录失败,error:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} else if serialOrderStep.StepType == model.STEP_OPC_RULE { |
|
|
|
opcDataLi, err := opcComRuleDao.SelectOPCJoinData(serialOrderStep.PO, serialOrderStep.StepNo) |
|
|
|
checkRuleMapPointer, allocateMapPointer, err := impl.ScanCodeCheck(user, session, checkRuleMap, allocateMap, artRelMap, &op, &serialOrderStep) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("获取OPC通信规则数据失败,error:" + err.Error()) |
|
|
|
} |
|
|
|
pos := 1 |
|
|
|
for _, opc := range opcDataLi { |
|
|
|
op := model.SerialOrderOPDetail{ |
|
|
|
SerialOrderId: serialOrderStep.SerialOrderId, |
|
|
|
PO: serialOrderStep.PO, |
|
|
|
SubArtId: serialOrderStep.SubArtId, |
|
|
|
Pos: pos, |
|
|
|
StepType: model.STEP_OPC_RULE, |
|
|
|
Status: baseModel.WO_STATUS_LOCKED, |
|
|
|
StepNo: serialOrderStep.StepNo, |
|
|
|
// OPC STEP DESC
|
|
|
|
CharPara1: opc.OPCComRule.StepDesc, |
|
|
|
// OPC BRAND NAME
|
|
|
|
CharPara2: opc.OPCBasicComInfo.BrandName, |
|
|
|
// OPC MACHINE TYPE
|
|
|
|
CharPara3: opc.OPCBasicComInfo.MachineType, |
|
|
|
// OPC IP ADDRESS
|
|
|
|
CharPara4: opc.OPCBasicComInfo.IpAddress, |
|
|
|
// OPC ACTION TYPE
|
|
|
|
CharPara5: opc.OPCComRule.ActionType, |
|
|
|
// OPC DBLOCK ADDRESS
|
|
|
|
CharPara6: opc.OPCComRule.DBlockAddress, |
|
|
|
// OPC DBLOCK VALUE TYPE
|
|
|
|
CharPara7: opc.OPCComRule.DBlockValueType, |
|
|
|
// OPC DBLOCK VALUE
|
|
|
|
CharPara8: opc.OPCComRule.DBlockValue, |
|
|
|
// OPC STEP NO
|
|
|
|
IntPara1: opc.OPCComRule.StepNo, |
|
|
|
// OPC RULE ID
|
|
|
|
IntPara2: opc.OPCComRule.RuleId, |
|
|
|
} |
|
|
|
pos++ |
|
|
|
err = serialOrderDetailDao.InsertOne(&op) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("插入操作明细记录失败,error:" + err.Error()) |
|
|
|
} |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
checkRuleMap = *checkRuleMapPointer |
|
|
|
allocateMap = *allocateMapPointer |
|
|
|
} else if serialOrderStep.StepType == model.STEP_OPC_RULE { |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
@ -1253,3 +1132,152 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO |
|
|
|
_ = session.Commit() |
|
|
|
return result, nil |
|
|
|
} |
|
|
|
|
|
|
|
/****************************************************************************** |
|
|
|
* |
|
|
|
* @Reference LAPP_LF_MOM_BACKEND/services/om/WorkOrderService.ScanCodeCheck 生成扫码校验的工艺数据 |
|
|
|
* |
|
|
|
******************************************************************************/ |
|
|
|
func (impl *WorkOrderServiceImplement) ScanCodeCheck(user *models.Usertab, session *xorm.Session, checkRuleMap map[string]baseModel.ArtCheckRule, allocateMap map[string][]baseModel.ArtQtyAllocate, artRelMap map[string]baseModel.ArticleRelLst, op *baseModel.OperationRelData, serialOrderStep *model.SerialOrderStepLst) (resCheckRuleMap *map[string]baseModel.ArtCheckRule, resAllocateMap *map[string][]baseModel.ArtQtyAllocate, err error) { |
|
|
|
ruleDao := baseDal.NewArtCheckRuleDAO(session, user.Pid, user.Userid) |
|
|
|
allocateDao := baseDal.NewArtQtyAllocateDAO(session, user.Pid, user.Userid) |
|
|
|
serialOrderDetailDao := dal.NewSerialOrderOPDetailDAO(session, user.Pid, user.Userid) |
|
|
|
// 获取零件校验规则
|
|
|
|
rule, exist := checkRuleMap[op.ArticleAtcodLst.ArtId] |
|
|
|
if !exist { |
|
|
|
ruleLi, err := ruleDao.Select([]grmi.Predicate{baseMeta.ArtCheckRule_AttriCode.NewPredicate(grmi.Equal, op.ArticleAtcodLst.AttrCode), baseMeta.ArtCheckRule_SubObject.NewPredicate(grmi.Equal, serialOrderStep.SubArtId)}, nil) |
|
|
|
if err != nil { |
|
|
|
return nil, nil, grmi.NewBusinessError("获取零件检验规则失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if len(ruleLi) == 0 { |
|
|
|
ruleLi, err = ruleDao.Select([]grmi.Predicate{baseMeta.ArtCheckRule_AttriCode.NewPredicate(grmi.Equal, op.ArticleAtcodLst.AttrCode), baseMeta.ArtCheckRule_SubObject.NewPredicate(grmi.Equal, model.MES_MATCH_ALL)}, nil) |
|
|
|
if err != nil { |
|
|
|
return nil, nil, grmi.NewBusinessError("获取零件检验规则失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if len(ruleLi) == 0 { |
|
|
|
return nil, nil, grmi.NewBusinessError("未获取到零件检验规则, artId:" + serialOrderStep.SubArtId) |
|
|
|
} |
|
|
|
} |
|
|
|
rule = ruleLi[0] |
|
|
|
checkRuleMap[op.ArticleAtcodLst.ArtId] = rule |
|
|
|
} |
|
|
|
// 获取零件分配数量
|
|
|
|
var num int |
|
|
|
// 零件BOM中两件组成父级零件的数量
|
|
|
|
composeQty := int(artRelMap[serialOrderStep.SubArtId].ComposeQty) |
|
|
|
allocateLi, exist := allocateMap[op.ArticleAtcodLst.ArtId] |
|
|
|
if !exist { |
|
|
|
allocateLi, err = allocateDao.Select([]grmi.Predicate{baseMeta.ArtQtyAllocate_AttriCode.NewPredicate(grmi.Equal, op.ArticleAtcodLst.AttrCode), baseMeta.ArtQtyAllocate_TotalPlanty.NewPredicate(grmi.Equal, composeQty)}, nil) |
|
|
|
if err != nil { |
|
|
|
return nil, nil, grmi.NewBusinessError("获取特殊工位数量分配数据失败,错误:" + err.Error()) |
|
|
|
} |
|
|
|
allocateMap[op.ArticleAtcodLst.ArtId] = allocateLi |
|
|
|
} |
|
|
|
// 获取特殊工位零件分配数量
|
|
|
|
if len(allocateLi) == 0 { |
|
|
|
num = composeQty |
|
|
|
} else { |
|
|
|
var allNum int |
|
|
|
for _, allocate := range allocateLi { |
|
|
|
if allocate.PO == serialOrderStep.PO { |
|
|
|
if allocate.SubObject == model.MES_MATCH_ALL { |
|
|
|
allNum = allocate.AssignPlanty |
|
|
|
} else if allocate.SubObject == serialOrderStep.SubArtId { |
|
|
|
num = allocate.AssignPlanty |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if num == 0 { |
|
|
|
if allNum != 0 { |
|
|
|
num = allNum |
|
|
|
} else { |
|
|
|
num = composeQty |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 生成零件校验规则的工艺数据
|
|
|
|
pos := 1 |
|
|
|
for i := 0; i < num; i++ { |
|
|
|
op := model.SerialOrderOPDetail{ |
|
|
|
SerialOrderId: serialOrderStep.SerialOrderId, |
|
|
|
PO: serialOrderStep.PO, |
|
|
|
SubArtId: serialOrderStep.SubArtId, |
|
|
|
Pos: pos, |
|
|
|
StepNo: serialOrderStep.StepNo, |
|
|
|
StepType: model.STEP_CHECK_RULE, |
|
|
|
Status: baseModel.WO_STATUS_LOCKED, |
|
|
|
// 扫码校验 AttriCodeDesc
|
|
|
|
CharPara1: rule.AttriCodeDesc, |
|
|
|
// 扫码校验 SubObject
|
|
|
|
CharPara2: rule.SubObject, |
|
|
|
// 扫码校验 CodeLength
|
|
|
|
CharPara3: rule.CodeLength, |
|
|
|
CharPara4: rule.CheckObject, |
|
|
|
IntPara1: rule.AttriCode, |
|
|
|
// 扫码校验 AttriCode
|
|
|
|
IntPara2: rule.CheckStartPos, |
|
|
|
IntPara3: rule.CheckLength, |
|
|
|
FlagPara1: rule.OnlyBarCodeFlag, |
|
|
|
} |
|
|
|
pos++ |
|
|
|
err = serialOrderDetailDao.InsertOne(&op) |
|
|
|
if err != nil { |
|
|
|
return nil, nil, grmi.NewBusinessError("插入操作明细记录失败,error:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
return &checkRuleMap, &allocateMap, nil |
|
|
|
} |
|
|
|
|
|
|
|
/****************************************************************************** |
|
|
|
* |
|
|
|
* @Reference LAPP_LF_MOM_BACKEND/services/om/WorkOrderService.ScanCodeCheck 生成OPC通信的工艺数据 |
|
|
|
* |
|
|
|
******************************************************************************/ |
|
|
|
//func (impl *WorkOrderServiceImplement) OPCCommunication(user *models.Usertab, session *xorm.Session, opcBasicMap map[string]baseModel.OPCBasicComInfo, op *baseModel.OperationRelData, serialOrderStep *model.SerialOrderStepLst) (*map[string]baseModel.OPCBasicComInfo, error) {
|
|
|
|
// opcComRuleDao := baseDal.NewOPCComRuleDAO(session, user.Pid, user.Userid)
|
|
|
|
// opcComDetailDao := baseDal.NewOPCComDetailRuleDAO(session, user.Pid, user.Userid)
|
|
|
|
// serialOrderDetailDao := dal.NewSerialOrderOPDetailDAO(session, user.Pid, user.Userid)
|
|
|
|
// opcDataLi, err := opcComRuleDao.SelectOPCJoinData(serialOrderStep.PO, serialOrderStep.StepNo)
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, grmi.NewBusinessError("获取OPC通信规则数据失败,error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// pos := 1
|
|
|
|
// for _, opc := range opcDataLi {
|
|
|
|
// op := model.SerialOrderOPDetail{
|
|
|
|
// SerialOrderId: serialOrderStep.SerialOrderId,
|
|
|
|
// PO: serialOrderStep.PO,
|
|
|
|
// SubArtId: serialOrderStep.SubArtId,
|
|
|
|
// Pos: pos,
|
|
|
|
// StepType: model.STEP_OPC_RULE,
|
|
|
|
// Status: baseModel.WO_STATUS_LOCKED,
|
|
|
|
// StepNo: serialOrderStep.StepNo,
|
|
|
|
// // OPC STEP DESC
|
|
|
|
// CharPara1: opc.OPCComRule.StepDesc,
|
|
|
|
// // OPC BRAND NAME
|
|
|
|
// CharPara2: opc.OPCBasicComInfo.BrandName,
|
|
|
|
// // OPC MACHINE TYPE
|
|
|
|
// CharPara3: opc.OPCBasicComInfo.MachineType,
|
|
|
|
// // OPC IP ADDRESS
|
|
|
|
// CharPara4: opc.OPCBasicComInfo.IpAddress,
|
|
|
|
// // OPC ACTION TYPE
|
|
|
|
// CharPara5: opc.OPCComRule.ActionType,
|
|
|
|
// // OPC DBLOCK ADDRESS
|
|
|
|
// CharPara6: opc.OPCComRule.DBlockAddress,
|
|
|
|
// // OPC DBLOCK VALUE TYPE
|
|
|
|
// CharPara7: opc.OPCComRule.DBlockValueType,
|
|
|
|
// // OPC DBLOCK VALUE
|
|
|
|
// CharPara8: opc.OPCComRule.DBlockValue,
|
|
|
|
// // OPC STEP NO
|
|
|
|
// IntPara1: opc.OPCComRule.StepNo,
|
|
|
|
// // OPC RULE ID
|
|
|
|
// IntPara2: opc.OPCComRule.RuleId,
|
|
|
|
// }
|
|
|
|
// pos++
|
|
|
|
// err = serialOrderDetailDao.InsertOne(&op)
|
|
|
|
// if err != nil {
|
|
|
|
// _ = session.Rollback()
|
|
|
|
// return nil, grmi.NewBusinessError("插入操作明细记录失败,error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
//}
|