|
@ -5,22 +5,19 @@ package implments |
|
|
import ( |
|
|
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" |
|
|
|
|
|
meModel "LAPP_LF_MOM_BACKEND/models/me" |
|
|
|
|
|
"github.com/go-xorm/xorm" |
|
|
|
|
|
//logDal "LAPP_LF_MOM_BACKEND/dao/log"
|
|
|
|
|
|
dal "LAPP_LF_MOM_BACKEND/dao/om" |
|
|
dal "LAPP_LF_MOM_BACKEND/dao/om" |
|
|
"LAPP_LF_MOM_BACKEND/db" |
|
|
"LAPP_LF_MOM_BACKEND/db" |
|
|
"LAPP_LF_MOM_BACKEND/grmi" |
|
|
"LAPP_LF_MOM_BACKEND/grmi" |
|
|
"LAPP_LF_MOM_BACKEND/infra/logger" |
|
|
"LAPP_LF_MOM_BACKEND/infra/logger" |
|
|
|
|
|
baseMeta "LAPP_LF_MOM_BACKEND/meta/base" |
|
|
meMeta "LAPP_LF_MOM_BACKEND/meta/me" |
|
|
meMeta "LAPP_LF_MOM_BACKEND/meta/me" |
|
|
//logMeta "LAPP_LF_MOM_BACKEND/meta/log"
|
|
|
|
|
|
meta "LAPP_LF_MOM_BACKEND/meta/om" |
|
|
meta "LAPP_LF_MOM_BACKEND/meta/om" |
|
|
baseModel "LAPP_LF_MOM_BACKEND/models/base" |
|
|
baseModel "LAPP_LF_MOM_BACKEND/models/base" |
|
|
//logModel "LAPP_LF_MOM_BACKEND/models/log"
|
|
|
|
|
|
|
|
|
meModel "LAPP_LF_MOM_BACKEND/models/me" |
|
|
model "LAPP_LF_MOM_BACKEND/models/om" |
|
|
model "LAPP_LF_MOM_BACKEND/models/om" |
|
|
"LAPP_LF_MOM_BACKEND/utils" |
|
|
"LAPP_LF_MOM_BACKEND/utils" |
|
|
"LAPP_LF_MOM_BACKEND/web/models" |
|
|
"LAPP_LF_MOM_BACKEND/web/models" |
|
|
|
|
|
"github.com/go-xorm/xorm" |
|
|
"strconv" |
|
|
"strconv" |
|
|
"time" |
|
|
"time" |
|
|
) |
|
|
) |
|
@ -1428,7 +1425,7 @@ func (impl *WorkOrderServiceImplement) OPCCommunication(user *models.Usertab, se |
|
|
value += workOrderId |
|
|
value += workOrderId |
|
|
} else if detail.DataType == baseModel.DATA_TYPE_PARTNO { |
|
|
} else if detail.DataType == baseModel.DATA_TYPE_PARTNO { |
|
|
value += serialOrderStep.SubArtId |
|
|
value += serialOrderStep.SubArtId |
|
|
} else if detail.DataType == baseModel.DATA_TYPE_SERIALID { |
|
|
|
|
|
|
|
|
} else if detail.DataType == baseModel.DATA_TYPE_SERIALID { |
|
|
value += strconv.Itoa(serialId) |
|
|
value += strconv.Itoa(serialId) |
|
|
} else { |
|
|
} else { |
|
|
return nil, grmi.NewBusinessError("不支持的OPC通信细则中的DATA TYPE, DATA TYPE:" + detail.DataType) |
|
|
return nil, grmi.NewBusinessError("不支持的OPC通信细则中的DATA TYPE, DATA TYPE:" + detail.DataType) |
|
@ -1644,7 +1641,25 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
month := int(now.Month()) |
|
|
month := int(now.Month()) |
|
|
yearStr := baseModel.YEAR_MAP[year] |
|
|
yearStr := baseModel.YEAR_MAP[year] |
|
|
monthStr := baseModel.MONTH_MAP[month] |
|
|
monthStr := baseModel.MONTH_MAP[month] |
|
|
|
|
|
|
|
|
|
|
|
today := now.Format(grmi.DateOutFormat) |
|
|
|
|
|
shiftStartStr := today + " 07:00:00" |
|
|
|
|
|
shiftEndStr := today + " 19:30:00" |
|
|
|
|
|
shiftStart, err := time.ParseInLocation(grmi.DatetimeOutFormat, shiftStartStr, utils.TimezoneLocation) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("解析班组时间失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
shiftEnd, err := time.ParseInLocation(grmi.DatetimeOutFormat, shiftEndStr, utils.TimezoneLocation) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("解析班组时间失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
var shift string |
|
|
|
|
|
if now.Before(shiftStart) || now.After(shiftEnd) { |
|
|
|
|
|
shift = "N" |
|
|
|
|
|
} else { |
|
|
|
|
|
shift = "E" |
|
|
|
|
|
} |
|
|
article, err := articleDao.SelectOne(entity.ArtId) |
|
|
article, err := articleDao.SelectOne(entity.ArtId) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
@ -1692,7 +1707,7 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
|
return grmi.NewBusinessError("不存在对应的物料BOM,artId:" + article.ArtId) |
|
|
return grmi.NewBusinessError("不存在对应的物料BOM,artId:" + article.ArtId) |
|
|
} |
|
|
} |
|
|
bomLstLi, err := bomLstDao.Select([]grmi.Predicate{meMeta.BomLst_BomId.NewPredicate(grmi.Equal, bomHead.BomId)}, nil) |
|
|
|
|
|
|
|
|
bomLstLi, err := bomLstDao.Select([]grmi.Predicate{meMeta.BomLst_BomId.NewPredicate(grmi.Equal, bomHead.BomId)}, []grmi.Field{meMeta.BomLst_Position}) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
|
return grmi.NewBusinessError("获取BOM细则失败, error:" + err.Error()) |
|
|
return grmi.NewBusinessError("获取BOM细则失败, error:" + err.Error()) |
|
@ -1833,11 +1848,12 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
ArtId: article.ArtId, |
|
|
ArtId: article.ArtId, |
|
|
CustArtId: article.CustArtId, |
|
|
CustArtId: article.CustArtId, |
|
|
OrderType: baseModel.ODER_TYPE_INTERVAL, |
|
|
OrderType: baseModel.ODER_TYPE_INTERVAL, |
|
|
|
|
|
OrderType1: shift, |
|
|
OrderInfo: article.Descr1, |
|
|
OrderInfo: article.Descr1, |
|
|
PlanResourceGroupId: article.PlanResourceGroupId, |
|
|
PlanResourceGroupId: article.PlanResourceGroupId, |
|
|
PlanResourceId: entity.WorkLineId, |
|
|
PlanResourceId: entity.WorkLineId, |
|
|
UsedResourceId: entity.WorkLineId, |
|
|
UsedResourceId: entity.WorkLineId, |
|
|
PlanQty: float64(entity.Qty), |
|
|
|
|
|
|
|
|
PlanQty: float64(productQty), |
|
|
QtyUomId: article.UomId, |
|
|
QtyUomId: article.UomId, |
|
|
RatePerHourToggle: article.RatePerHourToggle, |
|
|
RatePerHourToggle: article.RatePerHourToggle, |
|
|
TimePerItemToggle: article.TimePerItemToggle, |
|
|
TimePerItemToggle: article.TimePerItemToggle, |
|
@ -1894,18 +1910,23 @@ func (impl *WorkOrderServiceImplement) CreateLockWorkOrder(user *models.Usertab, |
|
|
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) |
|
|
custArtMap := make(map[string]string) |
|
|
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()) |
|
|
|
|
|
} |
|
|
|
|
|
if art == nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("未获取到物料数据, artID:" + artId) |
|
|
|
|
|
|
|
|
if article.ArtSpec1 == baseModel.ART_TYPE_VIRTUAL { |
|
|
|
|
|
for artId := range countMap { |
|
|
|
|
|
art, err := articleDao.SelectOne(artId) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("获取物料数据失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
if art == nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("未获取到物料数据, artID:" + artId) |
|
|
|
|
|
} |
|
|
|
|
|
custArtMap[artId] = art.CustArtId |
|
|
} |
|
|
} |
|
|
custArtMap[artId] = art.CustArtId |
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
custArtMap[article.ArtId] = article.CustArtId |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 进行批次工单的时间拆解到序列工单的计划时间上
|
|
|
// 进行批次工单的时间拆解到序列工单的计划时间上
|
|
|
var serialNum string |
|
|
var serialNum string |
|
|
// 生成序列工单
|
|
|
// 生成序列工单
|
|
@ -2234,7 +2255,7 @@ func (impl *WorkOrderServiceImplement) SplitWorkOrder(user *models.Usertab, work |
|
|
if bomHead == nil { |
|
|
if bomHead == nil { |
|
|
return grmi.NewBusinessError("不存在对应的物料BOM,artId:" + article.ArtId) |
|
|
return grmi.NewBusinessError("不存在对应的物料BOM,artId:" + article.ArtId) |
|
|
} |
|
|
} |
|
|
bomLstLi, err := bomLstDao.Select([]grmi.Predicate{meMeta.BomLst_BomId.NewPredicate(grmi.Equal, bomHead.BomId)}, nil) |
|
|
|
|
|
|
|
|
bomLstLi, err := bomLstDao.Select([]grmi.Predicate{meMeta.BomLst_BomId.NewPredicate(grmi.Equal, bomHead.BomId)}, []grmi.Field{meMeta.BomLst_Position}) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return grmi.NewBusinessError("获取BOM细则失败, error:" + err.Error()) |
|
|
return grmi.NewBusinessError("获取BOM细则失败, error:" + err.Error()) |
|
|
} |
|
|
} |
|
@ -2249,7 +2270,7 @@ func (impl *WorkOrderServiceImplement) SplitWorkOrder(user *models.Usertab, work |
|
|
bMap[bomLst.CmatNr] = int(bomLst.CmatQty) |
|
|
bMap[bomLst.CmatNr] = int(bomLst.CmatQty) |
|
|
count += int(bomLst.CmatQty) |
|
|
count += int(bomLst.CmatQty) |
|
|
} |
|
|
} |
|
|
if qty % count != 0 { |
|
|
|
|
|
|
|
|
if qty%count != 0 { |
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
|
return grmi.NewBusinessError("因为总成为虚拟总成,拆分工单不符合BOM配置比例关系") |
|
|
return grmi.NewBusinessError("因为总成为虚拟总成,拆分工单不符合BOM配置比例关系") |
|
|
} |
|
|
} |
|
@ -2414,19 +2435,41 @@ func (impl *WorkOrderServiceImplement) CreateSplitWorkOrder(session *xorm.Sessio |
|
|
month := int(now.Month()) |
|
|
month := int(now.Month()) |
|
|
yearStr := baseModel.YEAR_MAP[year] |
|
|
yearStr := baseModel.YEAR_MAP[year] |
|
|
monthStr := baseModel.MONTH_MAP[month] |
|
|
monthStr := baseModel.MONTH_MAP[month] |
|
|
|
|
|
|
|
|
|
|
|
today := now.Format(grmi.DateOutFormat) |
|
|
|
|
|
shiftStartStr := today + " 07:00:00" |
|
|
|
|
|
shiftEndStr := today + " 19:30:00" |
|
|
|
|
|
shiftStart, err := time.ParseInLocation(grmi.DatetimeOutFormat, shiftStartStr, utils.TimezoneLocation) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("解析班组时间失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
shiftEnd, err := time.ParseInLocation(grmi.DatetimeOutFormat, shiftEndStr, utils.TimezoneLocation) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("解析班组时间失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
var shift string |
|
|
|
|
|
if now.Before(shiftStart) || now.After(shiftEnd) { |
|
|
|
|
|
shift = "N" |
|
|
|
|
|
} else { |
|
|
|
|
|
shift = "E" |
|
|
|
|
|
} |
|
|
article, err := articleDao.SelectOne(artId) |
|
|
article, err := articleDao.SelectOne(artId) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
return grmi.NewBusinessError("查询物料数据失败, error:" + err.Error()) |
|
|
return grmi.NewBusinessError("查询物料数据失败, error:" + err.Error()) |
|
|
} |
|
|
} |
|
|
if article == nil { |
|
|
if article == nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
return grmi.NewBusinessError("不存在对应的物料数据") |
|
|
return grmi.NewBusinessError("不存在对应的物料数据") |
|
|
} |
|
|
} |
|
|
if article.ArtSpec1 != baseModel.ART_TYPE_FINISHED && article.ArtSpec1 != baseModel.ART_TYPE_VIRTUAL { |
|
|
if article.ArtSpec1 != baseModel.ART_TYPE_FINISHED && article.ArtSpec1 != baseModel.ART_TYPE_VIRTUAL { |
|
|
|
|
|
_ = session.Rollback() |
|
|
return grmi.NewBusinessError("传递的物料不是成品或虚拟物料ID") |
|
|
return grmi.NewBusinessError("传递的物料不是成品或虚拟物料ID") |
|
|
} |
|
|
} |
|
|
workLineLi, err := artWorkLineDao.Select([]grmi.Predicate{baseMeta.ArtWorkLineLst_ArtId.NewPredicate(grmi.Equal, article.ArtId)}, nil) |
|
|
workLineLi, err := artWorkLineDao.Select([]grmi.Predicate{baseMeta.ArtWorkLineLst_ArtId.NewPredicate(grmi.Equal, article.ArtId)}, nil) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
return grmi.NewBusinessError("查询物料关联产线失败, error:" + err.Error()) |
|
|
return grmi.NewBusinessError("查询物料关联产线失败, error:" + err.Error()) |
|
|
} |
|
|
} |
|
|
var workLineExist bool |
|
|
var workLineExist bool |
|
@ -2456,7 +2499,7 @@ func (impl *WorkOrderServiceImplement) CreateSplitWorkOrder(session *xorm.Sessio |
|
|
if bomHead == nil { |
|
|
if bomHead == nil { |
|
|
return grmi.NewBusinessError("不存在对应的物料BOM,artId:" + article.ArtId) |
|
|
return grmi.NewBusinessError("不存在对应的物料BOM,artId:" + article.ArtId) |
|
|
} |
|
|
} |
|
|
bomLstLi, err := bomLstDao.Select([]grmi.Predicate{meMeta.BomLst_BomId.NewPredicate(grmi.Equal, bomHead.BomId)}, nil) |
|
|
|
|
|
|
|
|
bomLstLi, err := bomLstDao.Select([]grmi.Predicate{meMeta.BomLst_BomId.NewPredicate(grmi.Equal, bomHead.BomId)}, []grmi.Field{meMeta.BomLst_Position}) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return grmi.NewBusinessError("获取BOM细则失败, error:" + err.Error()) |
|
|
return grmi.NewBusinessError("获取BOM细则失败, error:" + err.Error()) |
|
|
} |
|
|
} |
|
@ -2557,11 +2600,13 @@ func (impl *WorkOrderServiceImplement) CreateSplitWorkOrder(session *xorm.Sessio |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return grmi.NewBusinessError("生成工单流水号失败") |
|
|
return grmi.NewBusinessError("生成工单流水号失败") |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
workOrder := model.WorkOrder{ |
|
|
workOrder := model.WorkOrder{ |
|
|
WorkOrderId: workOrderId, |
|
|
WorkOrderId: workOrderId, |
|
|
ArtId: article.ArtId, |
|
|
ArtId: article.ArtId, |
|
|
CustArtId: article.CustArtId, |
|
|
CustArtId: article.CustArtId, |
|
|
OrderType: baseModel.ODER_TYPE_INTERVAL, |
|
|
OrderType: baseModel.ODER_TYPE_INTERVAL, |
|
|
|
|
|
OrderType1: shift, |
|
|
OrderInfo: article.Descr1, |
|
|
OrderInfo: article.Descr1, |
|
|
PlanResourceGroupId: article.PlanResourceGroupId, |
|
|
PlanResourceGroupId: article.PlanResourceGroupId, |
|
|
PlanResourceId: workLineId, |
|
|
PlanResourceId: workLineId, |
|
@ -2695,9 +2740,10 @@ func (impl *WorkOrderServiceImplement) CreateSplitWorkOrder(session *xorm.Sessio |
|
|
} |
|
|
} |
|
|
sortNum := serialNum |
|
|
sortNum := serialNum |
|
|
if workLineId == "X243X247" { |
|
|
if workLineId == "X243X247" { |
|
|
|
|
|
|
|
|
custArtId := custArtMap[artId] |
|
|
custArtId := custArtMap[artId] |
|
|
|
|
|
|
|
|
if len(custArtId) < 7 { |
|
|
if len(custArtId) < 7 { |
|
|
|
|
|
|
|
|
_ = session.Rollback() |
|
|
_ = session.Rollback() |
|
|
return grmi.NewBusinessError("客户零件号不合规") |
|
|
return grmi.NewBusinessError("客户零件号不合规") |
|
|
} |
|
|
} |
|
@ -2995,3 +3041,168 @@ func (impl *WorkOrderServiceImplement) SelectUnReleaseWorkOrder(user *models.Use |
|
|
workOrderLi, err := workOrderDao.SelectUnReleaseWorkOrder(workLineId) |
|
|
workOrderLi, err := workOrderDao.SelectUnReleaseWorkOrder(workLineId) |
|
|
return workOrderLi, err |
|
|
return workOrderLi, err |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************** |
|
|
|
|
|
* |
|
|
|
|
|
* @Reference LAPP_LF_MOM_BACKEND/services/om/WorkOrderService.SelectWorkOrderUnCompletedSerialOrder |
|
|
|
|
|
* |
|
|
|
|
|
******************************************************************************/ |
|
|
|
|
|
func (impl *WorkOrderServiceImplement) SelectWorkOrderUnCompletedSerialOrder(user *models.Usertab, workOrderId string) (*[]model.VOmSerialorder, error) { |
|
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
|
|
session := engine.NewSession() |
|
|
|
|
|
defer session.Close() |
|
|
|
|
|
dao := dal.NewSerialOrderDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
return dao.GetWorkOrderUnCompleted(workOrderId) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************** |
|
|
|
|
|
* |
|
|
|
|
|
* @Reference LAPP_LF_MOM_BACKEND/services/om/WorkOrderService.CancelUnCompletedSerialOrder |
|
|
|
|
|
* |
|
|
|
|
|
******************************************************************************/ |
|
|
|
|
|
func (impl *WorkOrderServiceImplement) CancelUnCompletedSerialOrder(user *models.Usertab, serialOrderIdLi []string) error { |
|
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
|
|
session := engine.NewSession() |
|
|
|
|
|
defer session.Close() |
|
|
|
|
|
if err := session.Begin(); err != nil { |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
dao := dal.NewWorkOrderDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
serialOrderDao := dal.NewSerialOrderDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
poDao := dal.NewSerialOrderPOLstDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
serialOrderStatusDao := dal.NewSerialOrderStatusDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
serialOrderStatusRecDao := dal.NewSerialOrderStatusRecLstDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
StepDao := dal.NewSerialOrderStepLstDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
opDetailDao := dal.NewSerialOrderOPDetailDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
workOrderQtyDao := dal.NewWorkOrderQtyDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
workOrderStatusDao := dal.NewWorkOrderStatusDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
workOrderStatusRecDao := dal.NewWorkOrderStatusRecLstDAO(session, user.Pid, user.Userid) |
|
|
|
|
|
if len(serialOrderIdLi) == 0 { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("未获取到工单ID") |
|
|
|
|
|
} |
|
|
|
|
|
serialOrderLi, err := serialOrderDao.GetSerialOrderByIDLi(serialOrderIdLi) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("查询序列工单失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
if len(*serialOrderLi) != len(serialOrderIdLi) { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("部分序列工单ID错误") |
|
|
|
|
|
} |
|
|
|
|
|
var workOrderId string |
|
|
|
|
|
var status int |
|
|
|
|
|
for index, serialOrder := range *serialOrderLi { |
|
|
|
|
|
if workOrderId == "" { |
|
|
|
|
|
workOrderId = serialOrder.SerialOrder.WorkOrderId |
|
|
|
|
|
} |
|
|
|
|
|
status = serialOrder.SerialOrderStatus.Status |
|
|
|
|
|
if workOrderId != serialOrder.SerialOrder.WorkOrderId { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("序列工单不属于同一个批次工单") |
|
|
|
|
|
} |
|
|
|
|
|
if index == 0 { |
|
|
|
|
|
if serialOrder.SerialOrderStatus.Status >= baseModel.ORDER_STATUS_CLOSED || serialOrder.SerialOrderStatus.Status == baseModel.WO_STATUS_INTERRUPT { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("序列工单不合规,不允许取消, serialOrderId:" + serialOrder.SerialOrder.SerialOrderId) |
|
|
|
|
|
} else if serialOrder.SerialOrderStatus.Status == baseModel.ORDER_STATUS_RUNNING { |
|
|
|
|
|
poDataLi, err := poDao.GetSerialOrderPOData(serialOrder.SerialOrder.SerialOrderId, serialOrder.SerialOrder.UsedResourceId) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("查询工单工序数据失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
for _, poData := range *poDataLi { |
|
|
|
|
|
if !poData.Process.IsFirstPO { |
|
|
|
|
|
if poData.SerialOrderPOLst.Status > baseModel.WO_STATUS_RELEASED { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("首个工单的非首道序状态不是已下达") |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
if poData.SerialOrderPOLst.Status != baseModel.ORDER_STATUS_RUNNING && poData.SerialOrderPOLst.Status != baseModel.WO_STATUS_RELEASED { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("首个工单的首道序状态不是生产中") |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
if serialOrder.SerialOrderStatus.Status >= baseModel.WO_STATUS_RUNNING || serialOrder.SerialOrderStatus.Status == baseModel.WO_STATUS_INTERRUPT { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("序列工单不合规,不允许取消, serialOrderId:" + serialOrder.SerialOrder.SerialOrderId) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
serialOrderStatus := serialOrder.SerialOrderStatus |
|
|
|
|
|
serialOrderStatus.Status = baseModel.ORDER_STATUS_CANCELED |
|
|
|
|
|
err = serialOrderStatusDao.UpdateOne(&serialOrderStatus) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("更新工单状态失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
statusRec := model.SerialOrderStatusRecLst{SerialOrderId: serialOrderStatus.SerialOrderId, PrevStatus: status, Status: baseModel.ORDER_STATUS_CANCELED} |
|
|
|
|
|
err = serialOrderStatusRecDao.InsertOne(&statusRec) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("插入工单状态变更记录失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
newPo := model.SerialOrderPOLst{Status: baseModel.ORDER_STATUS_CANCELED} |
|
|
|
|
|
err = poDao.UpdateWhere([]grmi.Predicate{meta.SerialOrderPOLst_SerialOrderId.NewPredicate(grmi.Equal, serialOrder.SerialOrder.SerialOrderId)}, &newPo, meta.SerialOrderPOLst_Status.Name) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("更新工单工序状态失败") |
|
|
|
|
|
} |
|
|
|
|
|
newStep := model.SerialOrderStepLst{Status: baseModel.ORDER_STATUS_CANCELED} |
|
|
|
|
|
err = StepDao.UpdateWhere([]grmi.Predicate{meta.SerialOrderStepLst_SerialOrderId.NewPredicate(grmi.Equal, serialOrder.SerialOrder.SerialOrderId)}, &newStep, meta.SerialOrderStepLst_Status.Name) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("更新工单工步状态失败") |
|
|
|
|
|
} |
|
|
|
|
|
newOpDetail := model.SerialOrderOPDetail{Status: baseModel.ORDER_STATUS_CANCELED} |
|
|
|
|
|
err = opDetailDao.UpdateWhere([]grmi.Predicate{meta.SerialOrderOPDetail_SerialOrderId.NewPredicate(grmi.Equal, serialOrder.SerialOrder.SerialOrderId)}, &newOpDetail, meta.SerialOrderOPDetail_Status.Name) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("更新工单工步详细操作状态失败") |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
workOrder, err := dao.SelectOneJoin(workOrderId) |
|
|
|
|
|
if workOrder.WorkOrderStatus.Status < baseModel.WO_STATUS_RELEASED || workOrder.WorkOrderStatus.Status >= baseModel.ORDER_STATUS_CLOSED { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("序列工单状态不符合条件") |
|
|
|
|
|
} |
|
|
|
|
|
if workOrder == nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("未查询到批次工单, workOrderId:" + workOrderId) |
|
|
|
|
|
} |
|
|
|
|
|
workOrderStatus := workOrder.WorkOrderStatus.Status |
|
|
|
|
|
cancelQty := len(serialOrderIdLi) |
|
|
|
|
|
workOrder.WorkOrderQty.ActQty3 += float64(cancelQty) |
|
|
|
|
|
workOrder.ActQty += float64(cancelQty) |
|
|
|
|
|
if int(workOrder.WorkOrderQty.ActQty) == int(workOrder.WorkOrderQty.PlanQty) { |
|
|
|
|
|
if workOrder.WorkOrderQty.ActQty3 == workOrder.WorkOrderQty.PlanQty { |
|
|
|
|
|
workOrderStatus = baseModel.ORDER_STATUS_CANCELED |
|
|
|
|
|
} else { |
|
|
|
|
|
workOrderStatus = baseModel.WO_STATUS_FINISHED |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
err = workOrderQtyDao.UpdateOne(&workOrder.WorkOrderQty) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("更新批次工单数量失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
if workOrder.WorkOrderStatus.Status != workOrderStatus { |
|
|
|
|
|
statusRec := model.WorkOrderStatusRecLst{WorkOrderId: workOrder.WorkOrder.WorkOrderId, PrevStatus: workOrder.WorkOrderStatus.Status, Status: workOrderStatus} |
|
|
|
|
|
err = workOrderStatusRecDao.InsertOne(&statusRec) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("插入批次工单状态变更记录失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
workOrder.WorkOrderStatus.Status = workOrderStatus |
|
|
|
|
|
err = workOrderStatusDao.UpdateOne(&workOrder.WorkOrderStatus) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return grmi.NewBusinessError("更新批次工单状态失败, error:" + err.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
_ = session.Commit() |
|
|
|
|
|
return nil |
|
|
|
|
|
|
|
|
|
|
|
} |