diff --git a/services/om/implments/WorkOrder.service.impl.go b/services/om/implments/WorkOrder.service.impl.go index c515949..0b0c8b7 100644 --- a/services/om/implments/WorkOrder.service.impl.go +++ b/services/om/implments/WorkOrder.service.impl.go @@ -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()) +// } +// } +// +//}