|
@ -110,7 +110,7 @@ func (impl *SerialOrderServiceImplement) GenerateProductCraft(user *global.User, |
|
|
bomLstLi, err := bomLstDao.Select([]grmi.Predicate{ |
|
|
bomLstLi, err := bomLstDao.Select([]grmi.Predicate{ |
|
|
meMeta.BomLst_BomId.NewPredicate(grmi.Equal, productId), |
|
|
meMeta.BomLst_BomId.NewPredicate(grmi.Equal, productId), |
|
|
meMeta.BomLst_ShipableAU.NewPredicate(grmi.Equal, true), |
|
|
meMeta.BomLst_ShipableAU.NewPredicate(grmi.Equal, true), |
|
|
}, nil) |
|
|
|
|
|
|
|
|
}, []grmi.Field{meMeta.BomLst_Position}) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return grmi.NewBusinessError("查询BOM子项数据失败, 错误:" + err.Error()) |
|
|
return grmi.NewBusinessError("查询BOM子项数据失败, 错误:" + err.Error()) |
|
|
} |
|
|
} |
|
@ -124,13 +124,7 @@ func (impl *SerialOrderServiceImplement) GenerateProductCraft(user *global.User, |
|
|
sfpUsedPoMap := make(map[string]interface{}) |
|
|
sfpUsedPoMap := make(map[string]interface{}) |
|
|
orderPoMap := make(map[string]*model.OrderAUPoData) |
|
|
orderPoMap := make(map[string]*model.OrderAUPoData) |
|
|
for _, bomLst := range bomLstLi { |
|
|
for _, bomLst := range bomLstLi { |
|
|
sfp, err := articleDao.SelectOne(bomLst.CmatNr, projectId) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return grmi.NewBusinessError("查询物料失败, 错误:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
if sfp == nil { |
|
|
|
|
|
return grmi.NewBusinessError("半成品物料不存在, 物料ID:" + bomLst.CmatNr) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
auConfig, err := shipableAUConfigDao.SelectOne(bomLst.CmatNr) |
|
|
auConfig, err := shipableAUConfigDao.SelectOne(bomLst.CmatNr) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return grmi.NewBusinessError("查询半成品配置数据失败, 错误:" + err.Error()) |
|
|
return grmi.NewBusinessError("查询半成品配置数据失败, 错误:" + err.Error()) |
|
@ -138,65 +132,81 @@ func (impl *SerialOrderServiceImplement) GenerateProductCraft(user *global.User, |
|
|
if auConfig == nil { |
|
|
if auConfig == nil { |
|
|
return grmi.NewBusinessError("半成品配置不存在, 物料ID:" + bomLst.CmatNr) |
|
|
return grmi.NewBusinessError("半成品配置不存在, 物料ID:" + bomLst.CmatNr) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
sfpBomHead, err := bomHeadDao.SelectOne(bomLst.CmatNr) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return grmi.NewBusinessError("查询物料BOM失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
if sfpBomHead == nil { |
|
|
|
|
|
return grmi.NewBusinessError("不存在对应的物料BOM, 物料ID:" + bomLst.CmatNr) |
|
|
|
|
|
} |
|
|
|
|
|
var sfpMe meModel.BomLst |
|
|
|
|
|
sfpMe.PlantNr = user.PlantNr |
|
|
|
|
|
sfpMe.BomId = sfpBomHead.BomId |
|
|
|
|
|
sfpBomLstLi, err := sfpMe.SetMenu(sfpBomHead.MatNr) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return grmi.NewBusinessError("获取BOM细则失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
if len(sfpBomLstLi) == 0 { |
|
|
|
|
|
return grmi.NewBusinessError("未获取到BOM细则, 物料ID:" + bomHead.BomId) |
|
|
|
|
|
} |
|
|
|
|
|
sfpBomHead.BomLstLi = sfpBomLstLi |
|
|
|
|
|
// 获取关联的所有零件ID
|
|
|
|
|
|
sfpArtMap := impl.ExtractArtId(sfpBomHead) |
|
|
|
|
|
sfpArtIdLi := make([]string, 0, len(sfpArtMap)) |
|
|
|
|
|
for innerArtId := range sfpArtMap { |
|
|
|
|
|
sfpArtIdLi = append(sfpArtIdLi, innerArtId) |
|
|
|
|
|
} |
|
|
|
|
|
sfpArtIdLi = append(sfpArtIdLi, sfp.ArtId) |
|
|
|
|
|
sfpAllArticleAttributeLi, err := articleWithAttrDao.SelectWithArticleByArtIdLi(sfpArtIdLi, projectId) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return grmi.NewBusinessError("查询半成品关联所有属性失败, 错误:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
auPoData, exist := poDataMap[auConfig.AuPo] |
|
|
|
|
|
if !exist { |
|
|
|
|
|
return grmi.NewBusinessError("半成品指定工序不存在于总工单的工序序列中, 半成品ID:" + sfp.ArtId) |
|
|
|
|
|
} |
|
|
|
|
|
// 根据该工序查询所有后序
|
|
|
|
|
|
poDataLi := impl.GetOrderPOLi(auPoData, poDataMap) |
|
|
|
|
|
// 该工单用到的所有生产工序
|
|
|
|
|
|
poDataLi = append(poDataLi, auPoData) |
|
|
|
|
|
// 查询这个工单需要用到的所有工艺数据
|
|
|
|
|
|
poIdLi := make([]string, 0, len(poDataLi)) |
|
|
|
|
|
for _, innerPoData := range poDataLi { |
|
|
|
|
|
sfpUsedPoMap[innerPoData.PO] = nil |
|
|
|
|
|
poIdLi = append(poIdLi, innerPoData.PO) |
|
|
|
|
|
} |
|
|
|
|
|
opLi, err := operationDao.GetMeOperation(sfpArtIdLi, projectId, poIdLi, workLineId) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return grmi.NewBusinessError("获取工艺操作失败,error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
if len(opLi) == 0 { |
|
|
|
|
|
return grmi.NewBusinessError("未获取到工艺数据") |
|
|
|
|
|
} |
|
|
|
|
|
// 所有需要生成工单工序绑定的数据
|
|
|
|
|
|
orderPoMap[bomLst.CmatNr] = &model.OrderAUPoData{ |
|
|
|
|
|
Config: auConfig, |
|
|
|
|
|
MeOperationLi: opLi, |
|
|
|
|
|
IsMainOrder: false, |
|
|
|
|
|
SFP: sfp, |
|
|
|
|
|
AllAttributeLi: sfpAllArticleAttributeLi, |
|
|
|
|
|
ArtRelMap: sfpArtMap, |
|
|
|
|
|
|
|
|
if auConfig.AuPlantNr != user.PlantNr { |
|
|
|
|
|
// 所有需要生成工单工序绑定的数据
|
|
|
|
|
|
orderPoMap[bomLst.CmatNr] = &model.OrderAUPoData{ |
|
|
|
|
|
OtherPlant: true, |
|
|
|
|
|
OtherPlantNr: auConfig.AuPlantNr, |
|
|
|
|
|
ArtId: bomLst.CmatNr, |
|
|
|
|
|
LastAuPo: auConfig.AuPo, |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
sfp, err := articleDao.SelectOne(bomLst.CmatNr, projectId) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return grmi.NewBusinessError("查询物料失败, 错误:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
if sfp == nil { |
|
|
|
|
|
return grmi.NewBusinessError("半成品物料不存在, 物料ID:" + bomLst.CmatNr) |
|
|
|
|
|
} |
|
|
|
|
|
sfpBomHead, err := bomHeadDao.SelectOne(bomLst.CmatNr) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return grmi.NewBusinessError("查询物料BOM失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
if sfpBomHead == nil { |
|
|
|
|
|
return grmi.NewBusinessError("不存在对应的物料BOM, 物料ID:" + bomLst.CmatNr) |
|
|
|
|
|
} |
|
|
|
|
|
var sfpMe meModel.BomLst |
|
|
|
|
|
sfpMe.PlantNr = user.PlantNr |
|
|
|
|
|
sfpMe.BomId = sfpBomHead.BomId |
|
|
|
|
|
sfpBomLstLi, err := sfpMe.SetMenu(sfpBomHead.MatNr) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return grmi.NewBusinessError("获取BOM细则失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
if len(sfpBomLstLi) == 0 { |
|
|
|
|
|
return grmi.NewBusinessError("未获取到BOM细则, 物料ID:" + bomHead.BomId) |
|
|
|
|
|
} |
|
|
|
|
|
sfpBomHead.BomLstLi = sfpBomLstLi |
|
|
|
|
|
// 获取关联的所有零件ID
|
|
|
|
|
|
sfpArtMap := impl.ExtractArtId(sfpBomHead) |
|
|
|
|
|
sfpArtIdLi := make([]string, 0, len(sfpArtMap)) |
|
|
|
|
|
for innerArtId := range sfpArtMap { |
|
|
|
|
|
sfpArtIdLi = append(sfpArtIdLi, innerArtId) |
|
|
|
|
|
} |
|
|
|
|
|
sfpArtIdLi = append(sfpArtIdLi, sfp.ArtId) |
|
|
|
|
|
sfpAllArticleAttributeLi, err := articleWithAttrDao.SelectWithArticleByArtIdLi(sfpArtIdLi, projectId) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return grmi.NewBusinessError("查询半成品关联所有属性失败, 错误:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
auPoData, exist := poDataMap[auConfig.AuPo] |
|
|
|
|
|
if !exist { |
|
|
|
|
|
return grmi.NewBusinessError("半成品指定工序不存在于总工单的工序序列中, 半成品ID:" + sfp.ArtId) |
|
|
|
|
|
} |
|
|
|
|
|
// 根据该工序查询所有后序
|
|
|
|
|
|
poDataLi := impl.GetOrderPOLi(auPoData, poDataMap) |
|
|
|
|
|
// 该工单用到的所有生产工序
|
|
|
|
|
|
poDataLi = append(poDataLi, auPoData) |
|
|
|
|
|
// 查询这个工单需要用到的所有工艺数据
|
|
|
|
|
|
poIdLi := make([]string, 0, len(poDataLi)) |
|
|
|
|
|
for _, innerPoData := range poDataLi { |
|
|
|
|
|
sfpUsedPoMap[innerPoData.PO] = nil |
|
|
|
|
|
poIdLi = append(poIdLi, innerPoData.PO) |
|
|
|
|
|
} |
|
|
|
|
|
opLi, err := operationDao.GetMeOperation(sfpArtIdLi, projectId, poIdLi, workLineId) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return grmi.NewBusinessError("获取工艺操作失败,error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
if len(opLi) == 0 { |
|
|
|
|
|
return grmi.NewBusinessError("未获取到工艺数据") |
|
|
|
|
|
} |
|
|
|
|
|
// 所有需要生成工单工序绑定的数据
|
|
|
|
|
|
orderPoMap[bomLst.CmatNr] = &model.OrderAUPoData{ |
|
|
|
|
|
Config: auConfig, |
|
|
|
|
|
MeOperationLi: opLi, |
|
|
|
|
|
IsMainOrder: false, |
|
|
|
|
|
SFP: sfp, |
|
|
|
|
|
AllAttributeLi: sfpAllArticleAttributeLi, |
|
|
|
|
|
ArtRelMap: sfpArtMap, |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
mainOrderPOIdLi := make([]string, 0) |
|
|
mainOrderPOIdLi := make([]string, 0) |
|
@ -281,6 +291,17 @@ func (impl *SerialOrderServiceImplement) GenerateProductCraft(user *global.User, |
|
|
for _, orderOPData := range orderPoMap { |
|
|
for _, orderOPData := range orderPoMap { |
|
|
var serialOrderId string |
|
|
var serialOrderId string |
|
|
if !orderOPData.IsMainOrder { |
|
|
if !orderOPData.IsMainOrder { |
|
|
|
|
|
// 如果是拆分到其他工厂
|
|
|
|
|
|
if orderOPData.OtherPlant { |
|
|
|
|
|
usedSerialOrder = &model.SerialOrder{ |
|
|
|
|
|
PlantNr: orderOPData.OtherPlantNr, |
|
|
|
|
|
ArtId: orderOPData.ArtId, |
|
|
|
|
|
OrderType: baseModel.ORDER_TYPE_CROSS, |
|
|
|
|
|
CtrlStr1: orderOPData.LastAuPo, |
|
|
|
|
|
} |
|
|
|
|
|
serialOrder.PreOrderLi = append(serialOrder.PreOrderLi, *usedSerialOrder) |
|
|
|
|
|
continue |
|
|
|
|
|
} |
|
|
usedArticle = orderOPData.SFP |
|
|
usedArticle = orderOPData.SFP |
|
|
if orderOPData.Config.BarCodeRule == baseModel.BARCODE_RULE_ACURA_PRE { |
|
|
if orderOPData.Config.BarCodeRule == baseModel.BARCODE_RULE_ACURA_PRE { |
|
|
|
|
|
|
|
|