From c6324dba97796e47eeac70a2fe1b20cc91ca5f88 Mon Sep 17 00:00:00 2001 From: zhangxin Date: Fri, 20 Aug 2021 08:42:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=AE=A2=E5=8D=95=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E6=8C=87=E5=AE=9AworkLineId=20=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9opc=E6=98=A0=E5=B0=84=E5=80=BC=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=98=A0=E5=B0=84=E5=80=BC=E5=BE=97=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/base/Const.go | 2 + models/base/base.go | 10 +- models/om/om.go | 7 +- .../implments/OPCBasicComInfo.service.impl.go | 11 +- .../om/implments/WorkOrder.service.impl.go | 238 ++++++++++++------ 5 files changed, 179 insertions(+), 89 deletions(-) diff --git a/models/base/Const.go b/models/base/Const.go index 6f99cf7..1573c75 100644 --- a/models/base/Const.go +++ b/models/base/Const.go @@ -132,6 +132,8 @@ const ( SCAN_RULE_TYPE_OTHER = "自主条码" SCAN_RULE_SERIALORDER = "UNITSN" + SCAN_RULE_CHECK = "校验" + SCAN_RULE_CRWAL = "采集" TRIGGER_FROM_BARCODE = "自主条码" TRIGGER_DEPEND_ON_UNITSN = "UNITSN" diff --git a/models/base/base.go b/models/base/base.go index 5f8ea99..4d99bde 100644 --- a/models/base/base.go +++ b/models/base/base.go @@ -184,15 +184,19 @@ type ScanRuleInfoData struct { ScanRuleInfoLi []ScanRuleInfo `json:"scanRuleInfoLi"` } - // 指导操作插入前端绑定结构体 type GuideRuleInfoData struct { - OperationId int `json:"operationId"` + OperationId int `json:"operationId"` GuideRuleInfoLi []GuideRuleInfo `json:"guideRuleInfoLi"` } // 指导操作插入前端绑定结构体 type PrintRuleInfoData struct { - OperationId int `json:"operationId"` + OperationId int `json:"operationId"` PrintRuleInfoLi []PrintRuleInfo `json:"printRuleInfoLi"` } + +type ArticleWithAttrValue struct { + ArticleAtcodLst `xorm:"extends"` + AttributeValst `xorm:"extends"` +} diff --git a/models/om/om.go b/models/om/om.go index 9e0a052..2b15686 100644 --- a/models/om/om.go +++ b/models/om/om.go @@ -112,6 +112,7 @@ type TempDemandLstData struct { // 创建序列工单 前端传递数据绑定的结构体 type CreateLockWorkOrder struct { - ArtId string `json:"artId"` - Qty int `json:"qty"` -} \ No newline at end of file + ArtId string `json:"artId"` + Qty int `json:"qty"` + WorkLineId string `json:"workLineId"` +} diff --git a/services/base/implments/OPCBasicComInfo.service.impl.go b/services/base/implments/OPCBasicComInfo.service.impl.go index 17321bf..ed7abc4 100644 --- a/services/base/implments/OPCBasicComInfo.service.impl.go +++ b/services/base/implments/OPCBasicComInfo.service.impl.go @@ -261,18 +261,21 @@ func (impl *OPCBasicComInfoServiceImplement) SelectOne(user *models.Usertab, ope if result == nil { return nil, grmi.NewBusinessError("数据不存在") } - ruleLi, err := ruleDao.Select([]grmi.Predicate{meta.OPCComRule_OperationId.NewPredicate(grmi.Equal, operationId)}, nil) + ruleLi, err := ruleDao.Select([]grmi.Predicate{meta.OPCComRule_OperationId.NewPredicate(grmi.Equal, operationId)}, []grmi.Field{meta.OPCComRule_RuleId}) if err != nil { return nil, err } for index, rule := range ruleLi { if rule.DBlockValueType == model.DBlockValueType_VALUE_MAP { - detailLi, err := detailDao.Select([]grmi.Predicate{meta.OPCComDetailRule_OperationId.NewPredicate(grmi.Equal, operationId), meta.OPCComDetailRule_RuleId.NewPredicate(grmi.Equal, rule.RuleId)}, nil) + detailLi, err := detailDao.Select([]grmi.Predicate{meta.OPCComDetailRule_OperationId.NewPredicate(grmi.Equal, operationId), meta.OPCComDetailRule_RuleId.NewPredicate(grmi.Equal, rule.RuleId)}, []grmi.Field{meta.OPCComDetailRule_RuleId}) if err != nil { return nil, err } rule.OPCComDetailRuleLi = detailLi ruleLi[index] = rule + } else { + rule.OPCComDetailRuleLi = make([]model.OPCComDetailRule, 0) + ruleLi[index] = rule } } result.OPCComRuleLi = ruleLi @@ -330,6 +333,8 @@ func (impl *OPCBasicComInfoServiceImplement) UpdateOne(user *models.Usertab, ent rule.StepNo = entity.StepNo rule.StepDesc = entity.StepDesc rule.OperationId = entity.OperationId + rule.WorkPlaceNr = entity.WorkPlaceNr + rule.ProjectId = entity.ProjectId if rule.DBlockValueType == model.DBlockValueType_VALUE_MAP { if len(rule.OPCComDetailRuleLi) == 0 { _ = session.Rollback() @@ -345,6 +350,8 @@ func (impl *OPCBasicComInfoServiceImplement) UpdateOne(user *models.Usertab, ent detail.RuleId = rule.RuleId detail.StepDesc = rule.StepDesc detail.OperationId = rule.OperationId + detail.ProjectId = rule.ProjectId + detail.WorkPlaceNr = rule.WorkPlaceNr rule.OPCComDetailRuleLi[index] = detail } err = detailDao.Insert(&rule.OPCComDetailRuleLi) diff --git a/services/om/implments/WorkOrder.service.impl.go b/services/om/implments/WorkOrder.service.impl.go index 4142a94..a5f9585 100644 --- a/services/om/implments/WorkOrder.service.impl.go +++ b/services/om/implments/WorkOrder.service.impl.go @@ -6,6 +6,7 @@ import ( baseDal "LAPP_LF_MOM_BACKEND/dao/base" meDal "LAPP_LF_MOM_BACKEND/dao/me" baseMeta "LAPP_LF_MOM_BACKEND/meta/base" + "fmt" "github.com/go-xorm/xorm" "strings" @@ -881,7 +882,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) - attributeDao := baseDal.NewAttributeValstDAO(session, user.Pid, user.Userid) + articleWithAttrDao := baseDal.NewArticleAtcodLstDAO(session, user.Pid, user.Userid) scanRuleDao := baseDal.NewScanRuleInfoDAO(session, user.Pid, user.Userid) guideDao := baseDal.NewGuideRuleInfoDAO(session, user.Pid, user.Userid) // 获取项目数据 用于获取流水号 @@ -894,14 +895,18 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO _ = session.Rollback() return nil, grmi.NewBusinessError("不存在该项目数据") } - attributeLi, err := attributeDao.SelectAllAttributeData() + attributeLi, err := articleWithAttrDao.SelectAllWithAttrValue() if err != nil { _ = session.Rollback() return nil, grmi.NewBusinessError("查询零件属性失败,error:" + err.Error()) } - attributeMap := make(map[string]baseModel.AttributeValst) - for _, attribute := range attributeLi { - attributeMap[attribute.Descr] = attribute + attributeMap := make(map[int][]baseModel.ArticleWithAttrValue) + for _, data := range attributeLi { + _, exist := attributeMap[data.ArticleAtcodLst.AttrCode] + if !exist { + attributeMap[data.ArticleAtcodLst.AttrCode] = make([]baseModel.ArticleWithAttrValue, 0) + } + attributeMap[data.ArticleAtcodLst.AttrCode] = append(attributeMap[data.ArticleAtcodLst.AttrCode], data) } scanRuleLi, err := scanRuleDao.Select(nil, nil) if err != nil { @@ -1064,6 +1069,10 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO artIdLi = append(artIdLi, article.ArtId) artRelMap[article.ArtId] = article } + subArtMap := make(map[string]interface{}) + for _, artId := range artIdLi { + subArtMap[artId] = nil + } opLi, err := operationDao.GetOperationRelData(artIdLi, vomWorkOrder.WorkOrder.PlanResourceId) if err != nil { _ = session.Rollback() @@ -1129,7 +1138,7 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO checkRuleMap = *checkRuleMapPointer allocateMap = *allocateMapPointer } else if serialOrderStep.StepType == baseModel.STEP_OPC_RULE { // 生成OPC通讯的工艺数据 - opcBasicMapPointer, err := impl.OPCCommunication(user, session, opcBasicMap, &serialOrderStep, attributeMap, workOrderId) + opcBasicMapPointer, err := impl.OPCCommunication(user, session, opcBasicMap, &serialOrderStep, attributeMap, workOrderId, subArtMap) if err != nil { _ = session.Rollback() return nil, err @@ -1177,93 +1186,117 @@ func (impl *WorkOrderServiceImplement) ScanCodeCheck(user *models.Usertab, sessi allocateDao := baseDal.NewArtQtyAllocateDAO(session, user.Pid, user.Userid) serialOrderDetailDao := dal.NewSerialOrderOPDetailDAO(session, user.Pid, user.Userid) if scanRule.RuleType == baseModel.SCAN_RULE_TYPE_ARTICLE { - // 获取零件校验规则 - 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, baseModel.MES_MATCH_ALL)}, nil) + if scanRule.SRCtrlPara1 == baseModel.SCAN_RULE_CHECK { + // 获取零件校验规则 + 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 { - return nil, nil, grmi.NewBusinessError("未获取到零件检验规则, artId:" + serialOrderStep.SubArtId) + ruleLi, err = ruleDao.Select([]grmi.Predicate{baseMeta.ArtCheckRule_AttriCode.NewPredicate(grmi.Equal, op.ArticleAtcodLst.AttrCode), baseMeta.ArtCheckRule_SubObject.NewPredicate(grmi.Equal, baseModel.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 } - 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()) + // 获取零件分配数量 + 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 } - 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 == baseModel.MES_MATCH_ALL { - allNum = allocate.AssignPlanty - } else if allocate.SubObject == serialOrderStep.SubArtId { - num = allocate.AssignPlanty + // 获取特殊工位零件分配数量 + if len(allocateLi) == 0 { + num = composeQty + } else { + var allNum int + for _, allocate := range allocateLi { + if allocate.PO == serialOrderStep.PO { + if allocate.SubObject == baseModel.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 } } } - 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, + OperationId: serialOrderStep.OperationId, + PO: serialOrderStep.PO, + SubArtId: serialOrderStep.SubArtId, + Pos: pos, + StepNo: serialOrderStep.StepNo, + StepType: baseModel.STEP_CHECK_RULE, + Status: baseModel.WO_STATUS_LOCKED, + // 扫码校验 AttriCodeDesc + CharPara1: rule.AttriCodeDesc, + // 扫码校验 SubObject + CharPara2: rule.SubObject, + // 扫码校验 CodeLength + CharPara3: rule.CodeLength, + // 扫码校验 CheckObject + CharPara4: rule.CheckObject, + // 扫码校验 CheckStartPos + IntPara1: rule.CheckStartPos, + // 扫码校验 CheckLength + IntPara2: rule.CheckLength, + // 扫码校验 OnlyBarCodeFlag + FlagPara1: rule.OnlyBarCodeFlag, + } + pos++ + err = serialOrderDetailDao.InsertOne(&op) + if err != nil { + return nil, nil, grmi.NewBusinessError("插入操作明细记录失败,error:" + err.Error()) } } - } - // 生成零件校验规则的工艺数据 - pos := 1 - for i := 0; i < num; i++ { + return &checkRuleMap, &allocateMap, nil + } else if scanRule.SRCtrlPara1 == baseModel.SCAN_RULE_CRWAL { op := model.SerialOrderOPDetail{ SerialOrderId: serialOrderStep.SerialOrderId, OperationId: serialOrderStep.OperationId, PO: serialOrderStep.PO, SubArtId: serialOrderStep.SubArtId, - Pos: pos, + Pos: 1, StepNo: serialOrderStep.StepNo, StepType: baseModel.STEP_CHECK_RULE, Status: baseModel.WO_STATUS_LOCKED, - // 扫码校验 AttriCodeDesc - CharPara1: rule.AttriCodeDesc, - // 扫码校验 SubObject - CharPara2: rule.SubObject, - // 扫码校验 CodeLength - CharPara3: rule.CodeLength, - // 扫码校验 CheckObject - CharPara4: rule.CheckObject, - // 扫码校验 CheckStartPos - IntPara1: rule.CheckStartPos, - // 扫码校验 CheckLength - IntPara2: rule.CheckLength, - // 扫码校验 OnlyBarCodeFlag - FlagPara1: rule.OnlyBarCodeFlag, + IntPara5: -1, + } - pos++ err = serialOrderDetailDao.InsertOne(&op) if err != nil { - return nil, nil, grmi.NewBusinessError("插入操作明细记录失败,error:" + err.Error()) + return nil, nil, grmi.NewBusinessError("插入扫码校验操作明细记录失败,error:" + err.Error()) + } else { + return &checkRuleMap, &allocateMap, nil } + } else { + return nil, nil, grmi.NewBusinessError("不支持的条码校验类型") } - return &checkRuleMap, &allocateMap, nil + } else if scanRule.RuleType == baseModel.SCAN_RULE_TYPE_OTHER { if scanRule.SRCtrlPara1 == baseModel.SCAN_RULE_SERIALORDER { op := model.SerialOrderOPDetail{ @@ -1297,7 +1330,7 @@ func (impl *WorkOrderServiceImplement) ScanCodeCheck(user *models.Usertab, sessi * @Reference LAPP_LF_MOM_BACKEND/services/om/WorkOrderService.ScanCodeCheck 生成OPC通信的工艺数据 * ******************************************************************************/ -func (impl *WorkOrderServiceImplement) OPCCommunication(user *models.Usertab, session *xorm.Session, opcBasicMap map[int][]baseModel.OPCBasicComInfo, serialOrderStep *model.SerialOrderStepLst, attributeMap map[string]baseModel.AttributeValst, workOrderId string) (*map[int][]baseModel.OPCBasicComInfo, error) { +func (impl *WorkOrderServiceImplement) OPCCommunication(user *models.Usertab, session *xorm.Session, opcBasicMap map[int][]baseModel.OPCBasicComInfo, serialOrderStep *model.SerialOrderStepLst, attributeMap map[int][]baseModel.ArticleWithAttrValue, workOrderId string, subArtMap map[string]interface{}) (*map[int][]baseModel.OPCBasicComInfo, error) { var err error opcBasicDao := baseDal.NewOPCBasicComInfoDAO(session, user.Pid, user.Userid) opcComRuleDao := baseDal.NewOPCComRuleDAO(session, user.Pid, user.Userid) @@ -1346,16 +1379,50 @@ func (impl *WorkOrderServiceImplement) OPCCommunication(user *models.Usertab, se if opc.DBlockValueType == baseModel.OPC_DBBLOCK_VALUE_TYPE_MAP { for _, detail := range opc.OPCComDetailRuleLi { if detail.BaseOnType == baseModel.BASE_ON_TYPE_ATTRNAME { - attributeData, exist := attributeMap[detail.BaseOnValue] + fmt.Printf("***************************") + fmt.Println("detail.DataType:", detail.DataType) + attrCode, err := strconv.Atoi(detail.BaseOnValue) + if err != nil { + return nil, grmi.NewBusinessError("OPC通讯规则映射值转换ATTRCODE失败, error:" + err.Error()) + } + attrLi, exist := attributeMap[attrCode] if !exist { return nil, grmi.NewBusinessError("未获取到OPC通信细则中的零件属性描述对应的shortCode, 属性描述:" + detail.BaseOnValue) } if detail.DataType == baseModel.DATA_TYPE_ATTRCODE { - value += strconv.Itoa(attributeData.AttrCode) + + value += strconv.Itoa(attrLi[0].AttributeValst.AttrCode) } else if detail.DataType == baseModel.DATA_TYPE_SHORTCODE { - value += attributeData.ShortCode + var sign bool + for _, data := range attrLi { + _,exist := subArtMap[data.ArticleAtcodLst.ArtId] + if !exist { + continue + } else { + if sign { + return nil, grmi.NewBusinessError("OPC通讯规则映射值获取ATTRCODE下的零件多于一个") + } + sign = true + value += data.AttributeValst.ShortCode + } + } + if !sign { + return nil, grmi.NewBusinessError("未获取到OPC通信细则中的零件属性描述对应的shortCode, 属性描述:" + detail.BaseOnValue) + } } else if detail.DataType == baseModel.DATA_TYPE_ATTRVALUE { - value += attributeData.AttrValue + var sign bool + for _, data := range attrLi { + _,exist := subArtMap[data.ArticleAtcodLst.ArtId] + if !exist { + continue + } else { + if sign { + return nil, grmi.NewBusinessError("OPC通讯规则映射值获取ATTRCODE下的零件多于一个") + } + sign = true + value += data.AttributeValst.AttrValue + } + } } else { return nil, grmi.NewBusinessError("不支持的OPC通信细则中的DATA TYPE, DATA TYPE:" + detail.DataType) } @@ -1561,7 +1628,7 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, PODao := dal.NewSerialOrderPOLstDAO(session, user.Pid, user.Userid) stepDao := dal.NewSerialOrderStepLstDAO(session, user.Pid, user.Userid) artRelDao := baseDal.NewArticleRelLstDAO(session, user.Pid, user.Userid) - attributeDao := baseDal.NewAttributeValstDAO(session, user.Pid, user.Userid) + articleWithAttrDao := baseDal.NewArticleAtcodLstDAO(session, user.Pid, user.Userid) scanRuleDao := baseDal.NewScanRuleInfoDAO(session, user.Pid, user.Userid) guideDao := baseDal.NewGuideRuleInfoDAO(session, user.Pid, user.Userid) printDao := baseDal.NewPrintRuleInfoDAO(session, user.Pid, user.Userid) @@ -1629,8 +1696,8 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, OrderType: baseModel.ODER_TYPE_INTERVAL, OrderInfo: article.Descr1, PlanResourceGroupId: article.PlanResourceGroupId, - PlanResourceId: article.PlanResourceId, - UsedResourceId: article.UsedResourceId, + PlanResourceId: entity.WorkLineId, + UsedResourceId: entity.WorkLineId, PlanQty: float64(entity.Qty), QtyUomId: article.UomId, RatePerHourToggle: article.RatePerHourToggle, @@ -1670,15 +1737,20 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, _ = session.Rollback() return grmi.NewBusinessError("插入批次工单数量失败, error:" + err.Error()) } - attributeLi, err := attributeDao.SelectAllAttributeData() + attributeLi, err := articleWithAttrDao.SelectAllWithAttrValue() if err != nil { _ = session.Rollback() return grmi.NewBusinessError("查询零件属性失败,error:" + err.Error()) } - attributeMap := make(map[string]baseModel.AttributeValst) - for _, attribute := range attributeLi { - attributeMap[attribute.Descr] = attribute + attributeMap := make(map[int][]baseModel.ArticleWithAttrValue) + for _, data := range attributeLi { + _, exist := attributeMap[data.ArticleAtcodLst.AttrCode] + if !exist { + attributeMap[data.ArticleAtcodLst.AttrCode] = make([]baseModel.ArticleWithAttrValue, 0) + } + attributeMap[data.ArticleAtcodLst.AttrCode] = append(attributeMap[data.ArticleAtcodLst.AttrCode], data) } + serialOrderLi := make([]model.SerialOrder, 0, entity.Qty) serialOrderStatusLi := make([]model.SerialOrderStatus, 0, entity.Qty) @@ -1753,6 +1825,10 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, artIdLi = append(artIdLi, article.ArtId) artRelMap[article.ArtId] = article } + subArtMap := make(map[string]interface{}) + for _, artId := range artIdLi { + subArtMap[artId] = nil + } opLi, err := operationDao.GetOperationRelData(artIdLi, workOrder.PlanResourceId) if err != nil { _ = session.Rollback() @@ -1817,7 +1893,7 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, allocateMap = *allocateMapPointer } else if serialOrderStep.StepType == baseModel.STEP_OPC_RULE { // 生成OPC通讯的工艺数据 - opcBasicMapPointer, err := impl.OPCCommunication(user, session, opcBasicMap, &serialOrderStep, attributeMap, workOrderId) + opcBasicMapPointer, err := impl.OPCCommunication(user, session, opcBasicMap, &serialOrderStep, attributeMap, workOrderId, subArtMap) if err != nil { _ = session.Rollback() return err