|
|
@ -9,6 +9,7 @@ import ( |
|
|
|
"LAPP_GAAS_GFrame_BACKEND/grmi" |
|
|
|
"LAPP_GAAS_GFrame_BACKEND/infra/logger" |
|
|
|
logMeta "LAPP_GAAS_GFrame_BACKEND/meta/log" |
|
|
|
meMeta "LAPP_GAAS_GFrame_BACKEND/meta/me" |
|
|
|
meta "LAPP_GAAS_GFrame_BACKEND/meta/om" |
|
|
|
baseModel "LAPP_GAAS_GFrame_BACKEND/models/base" |
|
|
|
logModel "LAPP_GAAS_GFrame_BACKEND/models/log" |
|
|
@ -59,7 +60,7 @@ func NewParseMesWorkOrderServiceImplement() *ParseMesWorkOrderServiceImplement { |
|
|
|
|
|
|
|
/****************************************************************************** |
|
|
|
* |
|
|
|
* @Reference LAPP_GAAS_GFrame_BACKEND/services/om/ParseMesWorkOrder.OMParseDemandFromFile |
|
|
|
* @Reference LAPP_GAAS_GFrame_BACKEND/services/om/ParseMesWorkOrder.`OMParseDemandFromFile` |
|
|
|
* |
|
|
|
******************************************************************************/ |
|
|
|
func (impl *ParseMesWorkOrderServiceImplement) OMParseDemandFromFile(plantNr int) { |
|
|
@ -532,7 +533,7 @@ func (impl *ParseMesWorkOrderServiceImplement) DealArtDemand(pid int, |
|
|
|
DemandCtrlPara6: lastSeq, |
|
|
|
DemandCtrlPara3: workOrder.OrderInfo, |
|
|
|
PlanResourceId: workOrder.PlanResourceId, |
|
|
|
CancelQty: cancelQty, |
|
|
|
CancelQty: cancelQty, |
|
|
|
} |
|
|
|
if artDemandHead.UnproducedQty == 0 { |
|
|
|
artDemandHead.DemandStatus = logModel.DemandOrderStatusAccomplish |
|
|
@ -1009,6 +1010,8 @@ func (impl *ParseMesWorkOrderServiceImplement) DealIntervalFileDemandHead(demand |
|
|
|
workOrderDao := dal.NewWorkOrderDAO(sessionTX, demandHead.PlantNr, user) |
|
|
|
workOrderStatusDao := dal.NewWorkOrderStatusDAO(sessionTX, demandHead.PlantNr, user) |
|
|
|
workOrderQtyDao := dal.NewWorkOrderQtyDAO(sessionTX, demandHead.PlantNr, user) |
|
|
|
bomLstDao := meDal.NewBomLstDAO(session, demandHead.PlantNr, user) |
|
|
|
|
|
|
|
articleDao := baseDal.NewArticleDAO(session, demandHead.PlantNr, user) |
|
|
|
projectDao := meDal.NewProjectDAO(session, demandHead.PlantNr, user) |
|
|
|
project, err := projectDao.SelectOne(baseModel.ProjectId) |
|
|
@ -1050,7 +1053,8 @@ func (impl *ParseMesWorkOrderServiceImplement) DealIntervalFileDemandHead(demand |
|
|
|
workOrderDao, |
|
|
|
workOrderStatusDao, |
|
|
|
workOrderQtyDao, |
|
|
|
articleDao) |
|
|
|
articleDao, |
|
|
|
bomLstDao) |
|
|
|
if err != nil { |
|
|
|
demandHead.Status = model.DemandHeadUnParsedStatus |
|
|
|
demandHead.ErrNum += 1 |
|
|
@ -1078,7 +1082,8 @@ func (impl *ParseMesWorkOrderServiceImplement) DealIntervalFileDemandHead(demand |
|
|
|
workOrderDao, |
|
|
|
workOrderStatusDao, |
|
|
|
workOrderQtyDao, |
|
|
|
articleDao) |
|
|
|
articleDao, |
|
|
|
bomLstDao) |
|
|
|
if err != nil { |
|
|
|
demandHead.Status = model.DemandHeadUnParsedStatus |
|
|
|
demandHead.ErrNum += 1 |
|
|
@ -1104,7 +1109,7 @@ func (impl *ParseMesWorkOrderServiceImplement) DealIntervalFileDemandHead(demand |
|
|
|
* @Reference LAPP_GAAS_GFrame_BACKEND/services/om/ParseMesWorkOrder.DealINTWorkOrder |
|
|
|
* |
|
|
|
******************************************************************************/ |
|
|
|
func (impl *ParseMesWorkOrderServiceImplement) DealINTWorkOrder(session *xorm.Session,pid int, |
|
|
|
func (impl *ParseMesWorkOrderServiceImplement) DealINTWorkOrder(session *xorm.Session, pid int, |
|
|
|
project *meModel.Project, |
|
|
|
custOrder *model.CustOrder, |
|
|
|
qty float64, |
|
|
@ -1112,6 +1117,7 @@ func (impl *ParseMesWorkOrderServiceImplement) DealINTWorkOrder(session *xorm.Se |
|
|
|
workOrderStatusDao dal.WorkOrderStatusDAO, |
|
|
|
workOrderQtyDao dal.WorkOrderQtyDAO, |
|
|
|
articleDao baseDal.ArticleDAO, |
|
|
|
bomLstDao meDal.BomLstDAO, |
|
|
|
) (err error) { |
|
|
|
user := "crontab" |
|
|
|
var workOrder model.WorkOrder |
|
|
@ -1119,38 +1125,125 @@ func (impl *ParseMesWorkOrderServiceImplement) DealINTWorkOrder(session *xorm.Se |
|
|
|
var workOrderQty model.WorkOrderQty |
|
|
|
log, _ := logger.NewLogger(user, "OM") |
|
|
|
|
|
|
|
workOrderLi, err := workOrderDao.SelectByEndDate(custOrder.ArtId, custOrder.DDT.Restore().Format("2006-01-02"), baseModel.ProjectId) |
|
|
|
//workOrderLi, err := workOrderDao.SelectByEndDate(custOrder.ArtId, custOrder.DDT.Restore().Format("2006-01-02"), baseModel.ProjectId)
|
|
|
|
//if err != nil {
|
|
|
|
// return err
|
|
|
|
//}
|
|
|
|
//var newWorkOrderSign = true
|
|
|
|
//if len(workOrderLi) != 0 {
|
|
|
|
// for _, dbWorkOrder := range workOrderLi {
|
|
|
|
// if dbWorkOrder.WorkOrderStatus.Status != baseModel.WO_STATUS_UNPLANNED {
|
|
|
|
// workOrder = dbWorkOrder
|
|
|
|
// newWorkOrderSign = false
|
|
|
|
// break
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
|
|
//if newWorkOrderSign {
|
|
|
|
article, err := articleDao.SelectOne(custOrder.ArtId) |
|
|
|
if err != nil { |
|
|
|
log.Error("DealINTWorkOrder DealWorkOrder get article failed, error: " + err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
var newWorkOrderSign = true |
|
|
|
if len(workOrderLi) != 0 { |
|
|
|
for _, dbWorkOrder := range workOrderLi { |
|
|
|
if dbWorkOrder.WorkOrderStatus.Status != baseModel.WO_STATUS_UNPLANNED { |
|
|
|
workOrder = dbWorkOrder |
|
|
|
newWorkOrderSign = false |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
if article == nil { |
|
|
|
err = errors.New("不存在对应的物料, artID: " + custOrder.ArtId) |
|
|
|
log.Error("DealINTWorkOrder DealWorkOrder get article failed, error: " + err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
if article.Status != baseModel.ARTICLE_STATUS_USED { |
|
|
|
log.Error("DealINTWorkOrder 物料未启用,物料ID:" + custOrder.ArtId) |
|
|
|
return grmi.NewBusinessError("物料未启用,物料ID:" + custOrder.ArtId) |
|
|
|
} |
|
|
|
|
|
|
|
if newWorkOrderSign { |
|
|
|
article, err := articleDao.SelectOne(custOrder.ArtId) |
|
|
|
// 根据不同的物料类型 创建批次工单
|
|
|
|
if article.ArtSpec1 == "CarSet" { |
|
|
|
// 派生的总成创建底下实际总成
|
|
|
|
bomLstLi, err := bomLstDao.Select([]grmi.Predicate{meMeta.BomLst_BomId.NewPredicate(grmi.Equal, article.ArtId)}, []grmi.Field{meMeta.BomLst_Position}) |
|
|
|
if err != nil { |
|
|
|
log.Error("DealINTWorkOrder DealWorkOrder get article failed, error: " + err.Error()) |
|
|
|
return err |
|
|
|
log.Error("DealINTWorkOrder 获取物料BOM数据失败, error:" + err.Error()) |
|
|
|
return grmi.NewBusinessError("获取物料BOM数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if article == nil { |
|
|
|
err = errors.New("不存在对应的物料, artID: " + custOrder.ArtId) |
|
|
|
log.Error("DealINTWorkOrder DealWorkOrder get article failed, error: " + err.Error()) |
|
|
|
return err |
|
|
|
if len(bomLstLi) == 0 { |
|
|
|
log.Error("DealINTWorkOrder 创建的物料是派生, 但是未获取到BOM数据") |
|
|
|
return grmi.NewBusinessError("创建的物料是派生, 但是未获取到BOM数据") |
|
|
|
} |
|
|
|
for _, bomLst := range bomLstLi { |
|
|
|
bomQty := bomLst.CmatQty / bomLst.FmatQty |
|
|
|
productQty := qty * bomQty |
|
|
|
bomArticle, err := articleDao.SelectOne(bomLst.CmatNr) |
|
|
|
if err != nil { |
|
|
|
log.Error("DealINTWorkOrder 查询物料数据失败,error:" + err.Error()) |
|
|
|
return grmi.NewBusinessError("查询物料数据失败,error:" + err.Error()) |
|
|
|
} |
|
|
|
if bomArticle == nil { |
|
|
|
log.Error("DealINTWorkOrder BOM关联的物料不存在, artId:" + bomLst.CmatNr) |
|
|
|
return grmi.NewBusinessError("BOM关联的物料不存在, artId:" + bomLst.CmatNr) |
|
|
|
} |
|
|
|
if bomArticle.Status != baseModel.ARTICLE_STATUS_USED { |
|
|
|
log.Error("DealINTWorkOrder 物料未启用,物料ID:" + bomArticle.ArtId) |
|
|
|
return grmi.NewBusinessError("物料未启用,物料ID:" + bomArticle.ArtId) |
|
|
|
} |
|
|
|
snr := new(models.Snrtab) |
|
|
|
snr.Finr = pid |
|
|
|
workOrderId, err := snr.GetNextSnrWithSession(session, "WorkOrder") |
|
|
|
if err != nil { |
|
|
|
log.Error("DealINTWorkOrder 生成工单流水号失败, error:" + err.Error()) |
|
|
|
return grmi.NewBusinessError("生成工单流水号失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
workOrder = model.WorkOrder{ |
|
|
|
WorkOrderId: workOrderId, |
|
|
|
ArtId: bomArticle.ArtId, |
|
|
|
OrderType: baseModel.ODER_TYPE_SEQ, |
|
|
|
OrderInfo: bomArticle.Descr1, |
|
|
|
OrderType1: custOrder.ArtTypeId, |
|
|
|
PlanQty: productQty, |
|
|
|
QtyUomId: bomArticle.UomId, |
|
|
|
PlanResourceId: bomArticle.PlanResourceId, |
|
|
|
UsedResourceId: bomArticle.UsedResourceId, |
|
|
|
OpTimePerItem: bomArticle.OpTimePerItem, |
|
|
|
PlanResourceGroupId: bomArticle.PlanResourceGroupId, |
|
|
|
ProjectId: bomArticle.ProjectId, |
|
|
|
QuantityPerHour: bomArticle.QuantityPerHour, |
|
|
|
RatePerHourToggle: true, |
|
|
|
BatchTime: bomArticle.BatchTime, |
|
|
|
BatchingMethod: bomArticle.BatchingMethod, |
|
|
|
PlanStartDate: grmi.Date(time.Now()), |
|
|
|
PlanEndDate: grmi.Date(custOrder.DDT), |
|
|
|
PlanEndTime: custOrder.DDT, |
|
|
|
} |
|
|
|
workOrderStatus = model.WorkOrderStatus{ |
|
|
|
WorkOrderId: workOrderId, |
|
|
|
Status: baseModel.WO_STATUS_UNPLANNED, |
|
|
|
} |
|
|
|
workOrderQty = model.WorkOrderQty{ |
|
|
|
WorkOrderId: workOrderId, |
|
|
|
PlanQty: productQty, |
|
|
|
} |
|
|
|
err = workOrderDao.InsertOne(&workOrder) |
|
|
|
if err != nil { |
|
|
|
log.Error("DealINTWorkOrder insert work order failed, error: " + err.Error()) |
|
|
|
|
|
|
|
return err |
|
|
|
} |
|
|
|
err = workOrderStatusDao.InsertOne(&workOrderStatus) |
|
|
|
if err != nil { |
|
|
|
log.Error("DealINTWorkOrder insert work order status failed, error: " + err.Error()) |
|
|
|
|
|
|
|
return err |
|
|
|
} |
|
|
|
err = workOrderQtyDao.InsertOne(&workOrderQty) |
|
|
|
if err != nil { |
|
|
|
log.Error("DealINTWorkOrder insert work order qty failed, error: " + err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
snr := new(models.Snrtab) |
|
|
|
snr.Finr = pid |
|
|
|
workOrderId, err := snr.GetNextSnrWithSession(session, project.WorkOrderSnr) |
|
|
|
if err != nil { |
|
|
|
log.Error("DealINTWorkOrder DealWorkOrder get work order id failed, error: " + err.Error()) |
|
|
|
|
|
|
|
return err |
|
|
|
} |
|
|
|
workOrder = model.WorkOrder{ |
|
|
@ -1199,17 +1292,19 @@ func (impl *ParseMesWorkOrderServiceImplement) DealINTWorkOrder(session *xorm.Se |
|
|
|
log.Error("DealINTWorkOrder insert work order qty failed, error: " + err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
} else { |
|
|
|
workOrderQty = workOrder.WorkOrderQty |
|
|
|
if workOrderQty.PlanQty != qty { |
|
|
|
workOrderQty.PlanQty = qty |
|
|
|
err = workOrderQtyDao.UpdateOne(&workOrderQty) |
|
|
|
if err != nil { |
|
|
|
log.Error("DealINTWorkOrder DealWorkOrder update work order qty, error: " + err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//} else {
|
|
|
|
// workOrderQty = workOrder.WorkOrderQty
|
|
|
|
// if workOrderQty.PlanQty != qty {
|
|
|
|
// workOrderQty.PlanQty = qty
|
|
|
|
// err = workOrderQtyDao.UpdateOne(&workOrderQty)
|
|
|
|
// if err != nil {
|
|
|
|
// log.Error("DealINTWorkOrder DealWorkOrder update work order qty, error: " + err.Error())
|
|
|
|
// return err
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
@ -1541,7 +1636,7 @@ func (impl *ParseMesWorkOrderServiceImplement) DealCacheWorkOrder(pid int, |
|
|
|
ReleasedQty: qty, |
|
|
|
ActQty: finishedQty, |
|
|
|
ActQty1: runningQty, |
|
|
|
ActQty3: cancelQty, |
|
|
|
ActQty3: cancelQty, |
|
|
|
} |
|
|
|
err = workOrderDao.InsertOne(&workOrder) |
|
|
|
if err != nil { |
|
|
@ -1610,7 +1705,7 @@ func (impl *ParseMesWorkOrderServiceImplement) DealCacheArtDemand(pid int, |
|
|
|
WorkOrderId: workOrder.WorkOrderId, |
|
|
|
DemandCtrlPara3: workOrder.OrderInfo, |
|
|
|
PlanResourceId: workOrder.PlanResourceId, |
|
|
|
CancelQty: cancelQty, |
|
|
|
CancelQty: cancelQty, |
|
|
|
} |
|
|
|
if artDemandHead.UnproducedQty == 0 { |
|
|
|
artDemandHead.DemandStatus = logModel.DemandOrderStatusAccomplish |
|
|
|