|
@ -6,6 +6,7 @@ import ( |
|
|
baseDal "LAPP_LF_MOM_BACKEND/dao/base" |
|
|
baseDal "LAPP_LF_MOM_BACKEND/dao/base" |
|
|
meDal "LAPP_LF_MOM_BACKEND/dao/me" |
|
|
meDal "LAPP_LF_MOM_BACKEND/dao/me" |
|
|
baseMeta "LAPP_LF_MOM_BACKEND/meta/base" |
|
|
baseMeta "LAPP_LF_MOM_BACKEND/meta/base" |
|
|
|
|
|
"fmt" |
|
|
"github.com/go-xorm/xorm" |
|
|
"github.com/go-xorm/xorm" |
|
|
"strings" |
|
|
"strings" |
|
|
|
|
|
|
|
@ -881,7 +882,7 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO |
|
|
PODao := dal.NewSerialOrderPOLstDAO(session, user.Pid, user.Userid) |
|
|
PODao := dal.NewSerialOrderPOLstDAO(session, user.Pid, user.Userid) |
|
|
stepDao := dal.NewSerialOrderStepLstDAO(session, user.Pid, user.Userid) |
|
|
stepDao := dal.NewSerialOrderStepLstDAO(session, user.Pid, user.Userid) |
|
|
artRelDao := baseDal.NewArticleRelLstDAO(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) |
|
|
scanRuleDao := baseDal.NewScanRuleInfoDAO(session, user.Pid, user.Userid) |
|
|
guideDao := baseDal.NewGuideRuleInfoDAO(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() |
|
|
_ = session.Rollback() |
|
|
return nil, grmi.NewBusinessError("不存在该项目数据") |
|
|
return nil, grmi.NewBusinessError("不存在该项目数据") |
|
|
} |
|
|
} |
|
|
attributeLi, err := attributeDao.SelectAllAttributeData() |
|
|
|
|
|
|
|
|
attributeLi, err := articleWithAttrDao.SelectAllWithAttrValue() |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
|
return nil, grmi.NewBusinessError("查询零件属性失败,error:" + err.Error()) |
|
|
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) |
|
|
scanRuleLi, err := scanRuleDao.Select(nil, nil) |
|
|
if err != nil { |
|
|
if err != nil { |
|
@ -1064,6 +1069,10 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO |
|
|
artIdLi = append(artIdLi, article.ArtId) |
|
|
artIdLi = append(artIdLi, article.ArtId) |
|
|
artRelMap[article.ArtId] = article |
|
|
artRelMap[article.ArtId] = article |
|
|
} |
|
|
} |
|
|
|
|
|
subArtMap := make(map[string]interface{}) |
|
|
|
|
|
for _, artId := range artIdLi { |
|
|
|
|
|
subArtMap[artId] = nil |
|
|
|
|
|
} |
|
|
opLi, err := operationDao.GetOperationRelData(artIdLi, vomWorkOrder.WorkOrder.PlanResourceId) |
|
|
opLi, err := operationDao.GetOperationRelData(artIdLi, vomWorkOrder.WorkOrder.PlanResourceId) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
@ -1129,7 +1138,7 @@ func (impl *WorkOrderServiceImplement) LockWorkOrder(user *models.Usertab, workO |
|
|
checkRuleMap = *checkRuleMapPointer |
|
|
checkRuleMap = *checkRuleMapPointer |
|
|
allocateMap = *allocateMapPointer |
|
|
allocateMap = *allocateMapPointer |
|
|
} else if serialOrderStep.StepType == baseModel.STEP_OPC_RULE { // 生成OPC通讯的工艺数据
|
|
|
} 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 { |
|
|
if err != nil { |
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
|
return nil, err |
|
|
return nil, err |
|
@ -1177,93 +1186,117 @@ func (impl *WorkOrderServiceImplement) ScanCodeCheck(user *models.Usertab, sessi |
|
|
allocateDao := baseDal.NewArtQtyAllocateDAO(session, user.Pid, user.Userid) |
|
|
allocateDao := baseDal.NewArtQtyAllocateDAO(session, user.Pid, user.Userid) |
|
|
serialOrderDetailDao := dal.NewSerialOrderOPDetailDAO(session, user.Pid, user.Userid) |
|
|
serialOrderDetailDao := dal.NewSerialOrderOPDetailDAO(session, user.Pid, user.Userid) |
|
|
if scanRule.RuleType == baseModel.SCAN_RULE_TYPE_ARTICLE { |
|
|
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 { |
|
|
if err != nil { |
|
|
return nil, nil, grmi.NewBusinessError("获取零件检验规则失败, error:" + err.Error()) |
|
|
return nil, nil, grmi.NewBusinessError("获取零件检验规则失败, error:" + err.Error()) |
|
|
} |
|
|
} |
|
|
if len(ruleLi) == 0 { |
|
|
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{ |
|
|
op := model.SerialOrderOPDetail{ |
|
|
SerialOrderId: serialOrderStep.SerialOrderId, |
|
|
SerialOrderId: serialOrderStep.SerialOrderId, |
|
|
OperationId: serialOrderStep.OperationId, |
|
|
OperationId: serialOrderStep.OperationId, |
|
|
PO: serialOrderStep.PO, |
|
|
PO: serialOrderStep.PO, |
|
|
SubArtId: serialOrderStep.SubArtId, |
|
|
SubArtId: serialOrderStep.SubArtId, |
|
|
Pos: pos, |
|
|
|
|
|
|
|
|
Pos: 1, |
|
|
StepNo: serialOrderStep.StepNo, |
|
|
StepNo: serialOrderStep.StepNo, |
|
|
StepType: baseModel.STEP_CHECK_RULE, |
|
|
StepType: baseModel.STEP_CHECK_RULE, |
|
|
Status: baseModel.WO_STATUS_LOCKED, |
|
|
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) |
|
|
err = serialOrderDetailDao.InsertOne(&op) |
|
|
if err != nil { |
|
|
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 { |
|
|
} else if scanRule.RuleType == baseModel.SCAN_RULE_TYPE_OTHER { |
|
|
if scanRule.SRCtrlPara1 == baseModel.SCAN_RULE_SERIALORDER { |
|
|
if scanRule.SRCtrlPara1 == baseModel.SCAN_RULE_SERIALORDER { |
|
|
op := model.SerialOrderOPDetail{ |
|
|
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通信的工艺数据 |
|
|
* @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 |
|
|
var err error |
|
|
opcBasicDao := baseDal.NewOPCBasicComInfoDAO(session, user.Pid, user.Userid) |
|
|
opcBasicDao := baseDal.NewOPCBasicComInfoDAO(session, user.Pid, user.Userid) |
|
|
opcComRuleDao := baseDal.NewOPCComRuleDAO(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 { |
|
|
if opc.DBlockValueType == baseModel.OPC_DBBLOCK_VALUE_TYPE_MAP { |
|
|
for _, detail := range opc.OPCComDetailRuleLi { |
|
|
for _, detail := range opc.OPCComDetailRuleLi { |
|
|
if detail.BaseOnType == baseModel.BASE_ON_TYPE_ATTRNAME { |
|
|
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 { |
|
|
if !exist { |
|
|
return nil, grmi.NewBusinessError("未获取到OPC通信细则中的零件属性描述对应的shortCode, 属性描述:" + detail.BaseOnValue) |
|
|
return nil, grmi.NewBusinessError("未获取到OPC通信细则中的零件属性描述对应的shortCode, 属性描述:" + detail.BaseOnValue) |
|
|
} |
|
|
} |
|
|
if detail.DataType == baseModel.DATA_TYPE_ATTRCODE { |
|
|
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 { |
|
|
} 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 { |
|
|
} 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 { |
|
|
} else { |
|
|
return nil, grmi.NewBusinessError("不支持的OPC通信细则中的DATA TYPE, DATA TYPE:" + detail.DataType) |
|
|
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) |
|
|
PODao := dal.NewSerialOrderPOLstDAO(session, user.Pid, user.Userid) |
|
|
stepDao := dal.NewSerialOrderStepLstDAO(session, user.Pid, user.Userid) |
|
|
stepDao := dal.NewSerialOrderStepLstDAO(session, user.Pid, user.Userid) |
|
|
artRelDao := baseDal.NewArticleRelLstDAO(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) |
|
|
scanRuleDao := baseDal.NewScanRuleInfoDAO(session, user.Pid, user.Userid) |
|
|
guideDao := baseDal.NewGuideRuleInfoDAO(session, user.Pid, user.Userid) |
|
|
guideDao := baseDal.NewGuideRuleInfoDAO(session, user.Pid, user.Userid) |
|
|
printDao := baseDal.NewPrintRuleInfoDAO(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, |
|
|
OrderType: baseModel.ODER_TYPE_INTERVAL, |
|
|
OrderInfo: article.Descr1, |
|
|
OrderInfo: article.Descr1, |
|
|
PlanResourceGroupId: article.PlanResourceGroupId, |
|
|
PlanResourceGroupId: article.PlanResourceGroupId, |
|
|
PlanResourceId: article.PlanResourceId, |
|
|
|
|
|
UsedResourceId: article.UsedResourceId, |
|
|
|
|
|
|
|
|
PlanResourceId: entity.WorkLineId, |
|
|
|
|
|
UsedResourceId: entity.WorkLineId, |
|
|
PlanQty: float64(entity.Qty), |
|
|
PlanQty: float64(entity.Qty), |
|
|
QtyUomId: article.UomId, |
|
|
QtyUomId: article.UomId, |
|
|
RatePerHourToggle: article.RatePerHourToggle, |
|
|
RatePerHourToggle: article.RatePerHourToggle, |
|
@ -1670,15 +1737,20 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
|
return grmi.NewBusinessError("插入批次工单数量失败, error:" + err.Error()) |
|
|
return grmi.NewBusinessError("插入批次工单数量失败, error:" + err.Error()) |
|
|
} |
|
|
} |
|
|
attributeLi, err := attributeDao.SelectAllAttributeData() |
|
|
|
|
|
|
|
|
attributeLi, err := articleWithAttrDao.SelectAllWithAttrValue() |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
|
return grmi.NewBusinessError("查询零件属性失败,error:" + err.Error()) |
|
|
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) |
|
|
serialOrderLi := make([]model.SerialOrder, 0, entity.Qty) |
|
|
serialOrderStatusLi := make([]model.SerialOrderStatus, 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) |
|
|
artIdLi = append(artIdLi, article.ArtId) |
|
|
artRelMap[article.ArtId] = article |
|
|
artRelMap[article.ArtId] = article |
|
|
} |
|
|
} |
|
|
|
|
|
subArtMap := make(map[string]interface{}) |
|
|
|
|
|
for _, artId := range artIdLi { |
|
|
|
|
|
subArtMap[artId] = nil |
|
|
|
|
|
} |
|
|
opLi, err := operationDao.GetOperationRelData(artIdLi, workOrder.PlanResourceId) |
|
|
opLi, err := operationDao.GetOperationRelData(artIdLi, workOrder.PlanResourceId) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
@ -1817,7 +1893,7 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
allocateMap = *allocateMapPointer |
|
|
allocateMap = *allocateMapPointer |
|
|
} else if serialOrderStep.StepType == baseModel.STEP_OPC_RULE { // 生成OPC通讯的工艺数据
|
|
|
} 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 { |
|
|
if err != nil { |
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
|
return err |
|
|
return err |
|
|