|
|
@ -7,10 +7,7 @@ import ( |
|
|
|
meDal "LAPP_LF_MOM_BACKEND/dao/me" |
|
|
|
baseMeta "LAPP_LF_MOM_BACKEND/meta/base" |
|
|
|
meModel "LAPP_LF_MOM_BACKEND/models/me" |
|
|
|
"fmt" |
|
|
|
"github.com/go-xorm/xorm" |
|
|
|
"strings" |
|
|
|
|
|
|
|
//logDal "LAPP_LF_MOM_BACKEND/dao/log"
|
|
|
|
dal "LAPP_LF_MOM_BACKEND/dao/om" |
|
|
|
"LAPP_LF_MOM_BACKEND/db" |
|
|
@ -1634,6 +1631,19 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
|
bomLstDao := meDal.NewBomLstDAO(session, user.Pid, user.Userid) |
|
|
|
artWorkLineDao := baseDal.NewArtWorkLineLstDAO(session, user.Pid, user.Userid) |
|
|
|
// 校验物料属性
|
|
|
|
now := time.Now() |
|
|
|
year := now.Year() |
|
|
|
day := now.Day() |
|
|
|
var dayStr string |
|
|
|
if day >= 10 { |
|
|
|
dayStr = strconv.Itoa(day) |
|
|
|
} else { |
|
|
|
dayStr = "0" + strconv.Itoa(day) |
|
|
|
} |
|
|
|
month := int(now.Month()) |
|
|
|
yearStr := baseModel.YEAR_MAP[year] |
|
|
|
monthStr := baseModel.MONTH_MAP[month] |
|
|
|
|
|
|
|
article, err := articleDao.SelectOne(entity.ArtId) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
@ -1662,12 +1672,12 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("该总成不支持在该产线上生产") |
|
|
|
} |
|
|
|
fmt.Println("--------------------------------------") |
|
|
|
// 虚拟件获取实际物料BOM及比例关系
|
|
|
|
var virtualArtMap map[string]int |
|
|
|
var virtualArtMap []map[string]int |
|
|
|
var countMap map[string]int |
|
|
|
productQty := entity.Qty |
|
|
|
if article.ArtSpec1 == baseModel.ART_TYPE_VIRTUAL { |
|
|
|
virtualArtMap = make(map[string]int) |
|
|
|
virtualArtMap = make([]map[string]int, 0) |
|
|
|
countMap = make(map[string]int) |
|
|
|
|
|
|
|
var count int |
|
|
@ -1695,45 +1705,48 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("虚拟件BOM配置错误") |
|
|
|
} |
|
|
|
virtualArtMap[bomLst.CmatNr] = int(bomLst.CmatQty) |
|
|
|
bMap := make(map[string]int) |
|
|
|
bMap[bomLst.CmatNr] = int(bomLst.CmatQty) |
|
|
|
virtualArtMap = append(virtualArtMap, bMap) |
|
|
|
count += int(bomLst.CmatQty) |
|
|
|
} |
|
|
|
} |
|
|
|
if entity.Qty%count != 0 { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("创建工单的生产数量不能匹配BOM分配关系") |
|
|
|
} |
|
|
|
for artId := range virtualArtMap { |
|
|
|
countMap[artId] = 0 |
|
|
|
for _, artData := range virtualArtMap { |
|
|
|
for artId := range artData { |
|
|
|
countMap[artId] = 0 |
|
|
|
} |
|
|
|
} |
|
|
|
productQty = productQty * count |
|
|
|
} |
|
|
|
// 组装BOM切片
|
|
|
|
bomHeadMap := make(map[string]meModel.BomHead, 0) |
|
|
|
if article.ArtSpec1 == baseModel.ART_TYPE_VIRTUAL { |
|
|
|
for artId := range virtualArtMap { |
|
|
|
bomHead, err := bomHeadDao.SelectOne(artId) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("查询物料BOM失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if bomHead == nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("不存在对应的物料BOM, artId:" + artId) |
|
|
|
} |
|
|
|
var Me meModel.BomLst |
|
|
|
Me.PlantNr = user.Pid |
|
|
|
Me.BomId = bomHead.BomId |
|
|
|
bomList, err := Me.SetMenu(bomHead.MatNr) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("获取BOM细则失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if len(bomList) == 0 { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("未获取到BOM细则, artId:" + bomHead.BomId) |
|
|
|
for _, artData := range virtualArtMap { |
|
|
|
for artId := range artData { |
|
|
|
bomHead, err := bomHeadDao.SelectOne(artId) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("查询物料BOM失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if bomHead == nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("不存在对应的物料BOM, artId:" + artId) |
|
|
|
} |
|
|
|
var Me meModel.BomLst |
|
|
|
Me.PlantNr = user.Pid |
|
|
|
Me.BomId = bomHead.BomId |
|
|
|
bomList, err := Me.SetMenu(bomHead.MatNr) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("获取BOM细则失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if len(bomList) == 0 { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("未获取到BOM细则, artId:" + bomHead.BomId) |
|
|
|
} |
|
|
|
bomHead.BomLstLi = bomList |
|
|
|
bomHeadMap[bomHead.MatNr] = *bomHead |
|
|
|
} |
|
|
|
bomHead.BomLstLi = bomList |
|
|
|
bomHeadMap[bomHead.MatNr] = *bomHead |
|
|
|
} |
|
|
|
} else { |
|
|
|
bomHead, err := bomHeadDao.SelectOne(article.ArtId) |
|
|
@ -1761,7 +1774,7 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
|
bomHeadMap[bomHead.MatNr] = *bomHead |
|
|
|
} |
|
|
|
// 获取项目数据 用于获取流水号
|
|
|
|
project, err := projectDao.SelectOne(baseModel.ProjectId) |
|
|
|
project, err := projectDao.SelectOne(article.ProjectId) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("获取项目数据失败, error:" + err.Error()) |
|
|
@ -1827,7 +1840,7 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
|
PlanEndDate: grmi.Date(time.Now()), |
|
|
|
PlanStartTime: grmi.DateTime(time.Now()), |
|
|
|
PlanEndTime: grmi.DateTime(time.Now()), |
|
|
|
ProjectId: project.ProjectId, |
|
|
|
ProjectId: article.ProjectId, |
|
|
|
} |
|
|
|
workOrderStatus := model.WorkOrderStatus{ |
|
|
|
WorkOrderId: workOrderId, |
|
|
@ -1868,44 +1881,98 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
|
|
|
|
|
serialOrderLi := make([]model.SerialOrder, 0, entity.Qty) |
|
|
|
serialOrderStatusLi := make([]model.SerialOrderStatus, 0, entity.Qty) |
|
|
|
|
|
|
|
// 进行批次工单的时间拆解到序列工单的计划时间上
|
|
|
|
// 生成序列工单
|
|
|
|
for i := 0; i < entity.Qty; i++ { |
|
|
|
snr := new(models.Snrtab) |
|
|
|
snr.Finr = user.Pid |
|
|
|
serialNum, err := snr.GetNextSnrWithSession(session, project.SerialOrderSnr) |
|
|
|
custArtMap := make(map[string]string) |
|
|
|
for artId := range countMap { |
|
|
|
art, err := articleDao.SelectOne(artId) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("获取序列工单流水号失败, error:" + err.Error()) |
|
|
|
return grmi.NewBusinessError("获取物料数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if art == nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("未获取到物料数据, artID:" + artId) |
|
|
|
} |
|
|
|
planStartDate := workOrder.PlanStartDate.Restore().Format("20060102") |
|
|
|
prefix := workOrder.ArtId + baseModel.PlantName + planStartDate |
|
|
|
serialOrderId := strings.Replace(serialNum, "SO-", prefix, 1) |
|
|
|
custArtMap[artId] = art.CustArtId |
|
|
|
} |
|
|
|
// 进行批次工单的时间拆解到序列工单的计划时间上
|
|
|
|
var serialNum string |
|
|
|
// 生成序列工单
|
|
|
|
for i := 0; i < productQty; i++ { |
|
|
|
var serialOrderId string |
|
|
|
|
|
|
|
// 根据虚拟件还是总成件 来获取ArtId
|
|
|
|
var artId string |
|
|
|
if article.ArtSpec1 == baseModel.ART_TYPE_VIRTUAL { |
|
|
|
accomplish := true |
|
|
|
for innerArtId, qty := range virtualArtMap { |
|
|
|
if countMap[innerArtId] < qty { |
|
|
|
accomplish = false |
|
|
|
for _, artData := range virtualArtMap { |
|
|
|
for innerArtId, qty := range artData { |
|
|
|
if countMap[innerArtId] < qty { |
|
|
|
accomplish = false |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if accomplish { |
|
|
|
for artId := range countMap { |
|
|
|
countMap[artId] = 0 |
|
|
|
for countArtId := range countMap { |
|
|
|
countMap[countArtId] = 0 |
|
|
|
} |
|
|
|
} |
|
|
|
for innerArtId, qty := range virtualArtMap { |
|
|
|
if countMap[innerArtId] < qty { |
|
|
|
artId = innerArtId |
|
|
|
countMap[innerArtId] += 1 |
|
|
|
for _, artData := range virtualArtMap { |
|
|
|
var sign bool |
|
|
|
for innerArtId, qty := range artData { |
|
|
|
if countMap[innerArtId] < qty { |
|
|
|
artId = innerArtId |
|
|
|
countMap[innerArtId] += 1 |
|
|
|
sign = true |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
if sign { |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
artId = article.ArtId |
|
|
|
} |
|
|
|
if entity.WorkLineId == "X243&X247" { |
|
|
|
if i % 2 == 0 { |
|
|
|
snr := new(models.Snrtab) |
|
|
|
snr.Finr = user.Pid |
|
|
|
serialNum, err = snr.GetNextSnrWithSession(session, project.SerialOrderSnr) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("获取序列工单流水号失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
snr := new(models.Snrtab) |
|
|
|
snr.Finr = user.Pid |
|
|
|
serialNum, err = snr.GetNextSnrWithSession(session, project.SerialOrderSnr) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("获取序列工单流水号失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if entity.WorkLineId == "X243&X247" { |
|
|
|
|
|
|
|
custArtId := custArtMap[artId] |
|
|
|
if len(custArtId) < 7 { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("客户零件号不合规") |
|
|
|
} |
|
|
|
serialOrderId = custArtId[:7] + "0000" + yearStr + monthStr + dayStr + "5" + serialNum |
|
|
|
|
|
|
|
} else if entity.WorkLineId == "CN7C" || entity.WorkLineId == "IBK2" || entity.WorkLineId == "IBK2-2" { |
|
|
|
if len(artId) < 7 { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("零件号不合规") |
|
|
|
} |
|
|
|
serialOrderId = "0" + artId[:7] + "000" + yearStr + monthStr + dayStr + serialNum |
|
|
|
} else { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("暂不支持的产线") |
|
|
|
} |
|
|
|
|
|
|
|
serialOrder := model.SerialOrder{ |
|
|
|
WorkOrderId: workOrderId, |
|
|
|
SerialOrderId: serialOrderId, |
|
|
@ -1925,6 +1992,7 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
|
PlanStartTime: workOrder.PlanStartTime, |
|
|
|
PlanEndTime: workOrder.PlanEndTime, |
|
|
|
ProjectId: workOrder.ProjectId, |
|
|
|
Sort: serialNum, |
|
|
|
} |
|
|
|
serialOrderLi = append(serialOrderLi, serialOrder) |
|
|
|
serialStatus := model.SerialOrderStatus{ |
|
|
@ -2075,6 +2143,11 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
/****************************************************************************** |
|
|
|
* |
|
|
|
* @Reference LAPP_LF_MOM_BACKEND/services/om/WorkOrderService.PrintRuleInfo 生成单据打印数据 |
|
|
|
* |
|
|
|
******************************************************************************/ |
|
|
|
func (impl *WorkOrderServiceImplement) ExtractArtId(bomHead *meModel.BomHead) map[string]int { |
|
|
|
artMap := make(map[string]int) |
|
|
|
bomLstLi := bomHead.BomLstLi |
|
|
@ -2088,3 +2161,7 @@ func (impl *WorkOrderServiceImplement) ExtractArtId(bomHead *meModel.BomHead) ma |
|
|
|
} |
|
|
|
return artMap |
|
|
|
} |
|
|
|
|
|
|
|
func (impl *WorkOrderServiceImplement) SplitWorkOrder() { |
|
|
|
|
|
|
|
} |