Browse Source

添加支持导入excel中物料是carset类型的解析功能

pull/439/head
zhangxin 3 years ago
parent
commit
91e9d0a33f
2 changed files with 169 additions and 47 deletions
  1. +38
    -11
      services/om/implments/DemandHead.service.impl.go
  2. +131
    -36
      services/om/implments/ParsePortalWorkOrder.service.impl.go

+ 38
- 11
services/om/implments/DemandHead.service.impl.go View File

@ -15,6 +15,7 @@ import (
model "LAPP_GAAS_GFrame_BACKEND/models/om"
"LAPP_GAAS_GFrame_BACKEND/utils"
"LAPP_GAAS_GFrame_BACKEND/web/models"
"fmt"
"github.com/360EntSecGroup-Skylar/excelize"
"strconv"
"strings"
@ -352,16 +353,27 @@ func (impl *DemandHeadServiceImplement) UploadExcel(user *models.Usertab, filepa
}
demandHead := model.DemandHead{
FileName: filename,
Status: model.DemandHeadLoadingStatus,
Status: model.DemandHeadParsedStatus,
Source: source,
}
err = demandHeadDao.InsertOne(&demandHead)
if err != nil {
return err
}
if source == model.ParseSourceInterval {
return impl.SaveIntervalDataFromExcel(user, filepath, demandHead)
err = impl.SaveIntervalDataFromExcel(user, filepath, demandHead)
if err != nil {
demandHead.Status = model.DemandHeadLoadFailedStatus
fmt.Println(err.Error())
demandHead.ErrorInfo = err.Error()
_ = demandHeadDao.UpdateOne(&demandHead)
return err
} else {
return err
}
} else if source == model.ParseSourceMES {
go impl.SaveMesDataFromExcel(user, filepath, demandHead)
}
return nil
@ -864,14 +876,15 @@ func (impl *DemandHeadServiceImplement) SaveIntervalDataFromExcel(user *models.U
}
}
}
snr := new(models.Snrtab)
snr.Finr = user.Pid
workOrderId, err := snr.GetNextSnrWithSession(session, project.WorkOrderSnr)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("获取工单流水号失败,错误:" + err.Error())
}
if article.ArtSpec1 == baseModel.ART_SPEC_FG {
snr := new(models.Snrtab)
snr.Finr = user.Pid
workOrderId, err := snr.GetNextSnrWithSession(session, project.WorkOrderSnr)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("获取工单流水号失败,错误:" + err.Error())
}
workOrder := model.WorkOrder{
WorkOrderId: workOrderId,
ArtId: article.ArtId,
@ -939,12 +952,15 @@ func (impl *DemandHeadServiceImplement) SaveIntervalDataFromExcel(user *models.U
bomLstLi, err := bomLstDao.Select([]grmi.Predicate{meMeta.BomLst_BomId.NewPredicate(grmi.Equal, bomHead.BomId)}, nil)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("未获取到BOM数据")
return grmi.NewBusinessError("查询BOM数据失败, error:" + err.Error())
}
if len(bomLstLi) == 0 {
_ = session.Rollback()
return grmi.NewBusinessError("该物料没有配置BOM细则, 物料ID:" + article.ArtId)
}
composeBomLst := make([]meModel.BomLst, 0)
for _, bomLst := range bomLstLi {
if bomLst.FmatNr != bomHead.MatNr {
continue
}
newBomLst := impl.GetChildBomLst(&bomLstLi, bomLst)
@ -955,7 +971,18 @@ func (impl *DemandHeadServiceImplement) SaveIntervalDataFromExcel(user *models.U
li := impl.GeneralWorkOrder(bomLst, 1)
bomArtLi = append(bomArtLi, li...)
}
if len(bomArtLi) == 0 {
_ = session.Rollback()
return grmi.NewBusinessError("该物料没有配置BOM细则, 物料ID:" + article.ArtId)
}
for _, bomArt := range bomArtLi {
snr := new(models.Snrtab)
snr.Finr = user.Pid
workOrderId, err := snr.GetNextSnrWithSession(session, project.WorkOrderSnr)
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("获取工单流水号失败,错误:" + err.Error())
}
sumArticle, err := artDao.SelectOne(bomArt.ArtId)
if err != nil {
_ = session.Rollback()


+ 131
- 36
services/om/implments/ParsePortalWorkOrder.service.impl.go View File

@ -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


Loading…
Cancel
Save