|
|
@ -42,12 +42,14 @@ func (impl *CustOrderServiceImplement) LockCustOrder(user *global.User, custOrde |
|
|
|
custOrderStatusDao := dal.NewCustOrderStatusDAO(session, user.PlantNr, user.UserId) |
|
|
|
custOrderStatusRecDao := dal.NewCustOrderStatusHistoryDAO(session, user.PlantNr, user.UserId) |
|
|
|
productRelateDao := meDal.NewProductFamilyRelateDAO(session, user.PlantNr, user.UserId) |
|
|
|
configDao := dal.NewReleaseTaskConfigDAO(session, user.PlantNr, user.UserId) |
|
|
|
snrDao := baseDal.NewSnrDAO(session, user.PlantNr, user.UserId) |
|
|
|
projectDao := meDal.NewProjectDAO(session, user.PlantNr, user.UserId) |
|
|
|
custOrderStatusRecLi := make([]model.CustOrderStatusHistory, 0, len(custOrderIdLi)) |
|
|
|
custOrderStatusLi := make([]model.CustOrderStatus, 0, len(custOrderIdLi)) |
|
|
|
custOrderLi := make([]model.CustOrder, 0, len(custOrderIdLi)) |
|
|
|
projectMap := make(map[string]*meModel.Project) |
|
|
|
workLineConfigMap := make(map[string]model.ReleaseTaskConfig) |
|
|
|
for _, custOrderId := range custOrderIdLi { |
|
|
|
// 校验客户订单是否存在及状态
|
|
|
|
orderData, err := custOrderDao.SelectOne(custOrderId) |
|
|
@ -60,7 +62,23 @@ func (impl *CustOrderServiceImplement) LockCustOrder(user *global.User, custOrde |
|
|
|
if orderData.OrderStatus.Status != baseModel.WO_STATUS_PLANNED { |
|
|
|
return grmi.NewBusinessError("客户订单当前状态不是已计划, 订单ID:" + custOrderId) |
|
|
|
} |
|
|
|
_, exist := projectMap[orderData.ProjectId] |
|
|
|
_, exist := workLineConfigMap[orderData.WorkLineId] |
|
|
|
if !exist { |
|
|
|
configLi, err := configDao.Select([]grmi.Predicate{ |
|
|
|
meta.ReleaseTaskConfig_BusinessObjType.NewPredicate(grmi.Equal, model.CONFIG_TYPE_WORK_LINE), |
|
|
|
meta.ReleaseTaskConfig_BusinessObjId.NewPredicate(grmi.Equal, orderData.WorkLineId), |
|
|
|
}, nil) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError(fmt.Sprintf("查询产线%s的派工配置失败, 错误:%v", orderData.WorkLineId, err)) |
|
|
|
} |
|
|
|
if len(configLi) == 0 { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError(fmt.Sprintf("产线%s的派工配置不存在", orderData.WorkLineId)) |
|
|
|
} |
|
|
|
workLineConfigMap[orderData.WorkLineId] = configLi[0] |
|
|
|
} |
|
|
|
_, exist = projectMap[orderData.ProjectId] |
|
|
|
if !exist { |
|
|
|
project, err := projectDao.SelectOne(orderData.ProjectId) |
|
|
|
if err != nil { |
|
|
@ -136,12 +154,20 @@ func (impl *CustOrderServiceImplement) LockCustOrder(user *global.User, custOrde |
|
|
|
jUnix := itemJ.PlanStartTime.Restore().Unix() |
|
|
|
return iUnix < jUnix |
|
|
|
}) |
|
|
|
newReleaseTaskLi := make([]model.CustOrder, 0) |
|
|
|
for _, custOrder := range custOrderLi { |
|
|
|
config := workLineConfigMap[custOrder.WorkLineId] |
|
|
|
duration := utils.CalcDurationByUom(float64(config.LeadTime), config.TimeUomId) |
|
|
|
if custOrder.PlanStartTime.Restore().Add(-duration * time.Second).Unix() < time.Now().Unix() { |
|
|
|
newReleaseTaskLi = append(newReleaseTaskLi, custOrder) |
|
|
|
} |
|
|
|
} |
|
|
|
plantNr := user.PlantNr |
|
|
|
channel, exist := common.ReleaseTaskChannel[plantNr] |
|
|
|
if !exist { |
|
|
|
return nil |
|
|
|
} |
|
|
|
for _, custOrder := range custOrderLi { |
|
|
|
for _, custOrder := range newReleaseTaskLi { |
|
|
|
err = channel.SendData(custOrder) |
|
|
|
if err != nil { |
|
|
|
return nil |
|
|
@ -163,6 +189,8 @@ func (impl *CustOrderServiceImplement) AnalysisPlanFromExcel(user *global.User, |
|
|
|
productRelateDao := meDal.NewProductFamilyRelateDAO(session, user.PlantNr, user.UserId) |
|
|
|
projectDao := meDal.NewProjectDAO(session, user.PlantNr, user.UserId) |
|
|
|
snrDao := baseDal.NewSnrDAO(session, user.PlantNr, user.UserId) |
|
|
|
configDao := dal.NewReleaseTaskConfigDAO(session, user.PlantNr, user.UserId) |
|
|
|
workLineConfigMap := make(map[string]model.ReleaseTaskConfig) |
|
|
|
file, err := excelize.OpenFile(filepath) |
|
|
|
if err != nil { |
|
|
|
return grmi.NewBusinessError("读取文件失败, error:" + err.Error()) |
|
|
@ -318,6 +346,22 @@ func (impl *CustOrderServiceImplement) AnalysisPlanFromExcel(user *global.User, |
|
|
|
} |
|
|
|
// 占用流水号
|
|
|
|
for _, custOrder := range releaseCustOrderLi { |
|
|
|
_, exist := workLineConfigMap[custOrder.WorkLineId] |
|
|
|
if !exist { |
|
|
|
configLi, err := configDao.Select([]grmi.Predicate{ |
|
|
|
meta.ReleaseTaskConfig_BusinessObjType.NewPredicate(grmi.Equal, model.CONFIG_TYPE_WORK_LINE), |
|
|
|
meta.ReleaseTaskConfig_BusinessObjId.NewPredicate(grmi.Equal, custOrder.WorkLineId), |
|
|
|
}, nil) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError(fmt.Sprintf("查询产线%s的派工配置失败, 错误:%v", custOrder.WorkLineId, err)) |
|
|
|
} |
|
|
|
if len(configLi) == 0 { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError(fmt.Sprintf("产线%s的派工配置不存在", custOrder.WorkLineId)) |
|
|
|
} |
|
|
|
workLineConfigMap[custOrder.WorkLineId] = configLi[0] |
|
|
|
} |
|
|
|
project := projectMap[custOrder.ProjectId] |
|
|
|
productLi, err := productRelateDao.SelectProductByFamilyIdForCreateSerialOrder(custOrder.ProjectId, custOrder.ProductFamilyId) |
|
|
|
if err != nil { |
|
|
@ -350,8 +394,6 @@ func (impl *CustOrderServiceImplement) AnalysisPlanFromExcel(user *global.User, |
|
|
|
} |
|
|
|
} |
|
|
|
_ = session.Commit() |
|
|
|
//newReleaseTaskLi := make([]model.CustOrder, 0)
|
|
|
|
//for _, custOrder := range
|
|
|
|
sort.Slice(releaseCustOrderLi, func(i, j int) bool { |
|
|
|
itemI := releaseCustOrderLi[i] |
|
|
|
itemJ := releaseCustOrderLi[j] |
|
|
@ -359,14 +401,21 @@ func (impl *CustOrderServiceImplement) AnalysisPlanFromExcel(user *global.User, |
|
|
|
jUnix := itemJ.PlanStartTime.Restore().Unix() |
|
|
|
return iUnix < jUnix |
|
|
|
}) |
|
|
|
|
|
|
|
newReleaseTaskLi := make([]model.CustOrder, 0) |
|
|
|
for _, custOrder := range releaseCustOrderLi { |
|
|
|
config := workLineConfigMap[custOrder.WorkLineId] |
|
|
|
duration := utils.CalcDurationByUom(float64(config.LeadTime), config.TimeUomId) |
|
|
|
if custOrder.PlanStartTime.Restore().Add(-duration * time.Second).Unix() < time.Now().Unix() { |
|
|
|
newReleaseTaskLi = append(newReleaseTaskLi, custOrder) |
|
|
|
} |
|
|
|
} |
|
|
|
plantNr := user.PlantNr |
|
|
|
channel, exist := common.ReleaseTaskChannel[plantNr] |
|
|
|
if !exist { |
|
|
|
fmt.Println(fmt.Sprintf("通道不存在, 工厂%d", plantNr)) |
|
|
|
return nil |
|
|
|
} |
|
|
|
for _, custOrder := range releaseCustOrderLi { |
|
|
|
for _, custOrder := range newReleaseTaskLi { |
|
|
|
err = channel.SendData(custOrder) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("派工发送数据出错:" + err.Error()) |
|
|
@ -415,7 +464,6 @@ func (impl *CustOrderServiceImplement) ReleaseSingleOrder(user *global.User, cus |
|
|
|
|
|
|
|
// ReleaseCustOrder 对客户订单进行派工
|
|
|
|
func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custOrderData model.CustOrder, log logger.Log) error { |
|
|
|
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
@ -449,6 +497,13 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO |
|
|
|
if custOrderData.OrderStatus.Status == baseModel.WO_STATUS_RELEASED { |
|
|
|
return nil |
|
|
|
} |
|
|
|
if custOrderData.OrderStatus.Status1 != baseModel.WO_STATUS_RUNNING { |
|
|
|
custOrderData.OrderStatus.Status1 = baseModel.WO_STATUS_RUNNING |
|
|
|
err = custOrderStatusDao.UpdateOne(&custOrderData.OrderStatus) |
|
|
|
if err != nil { |
|
|
|
return grmi.NewBusinessError("更新订单派工状态失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
// 创建serialOrder service接口
|
|
|
|
serialOrderSvr := omSvr.NewSerialOrderService() |
|
|
|
// 查询当前是否有需要派工的custOrder
|
|
|
@ -869,7 +924,7 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO |
|
|
|
} |
|
|
|
} |
|
|
|
if syncSnr { |
|
|
|
serialNumber, err = snrDao.GetSnrFromOccupy(project.SerialOrderSnr, baseModel.SNR_OCCUPY_CUSTORDER, custOrderData.CustOrderId) |
|
|
|
serialNumber, err = snrDao.GetNextSnrWithTime(project.SerialOrderSnr, waitReleaseSerialOrderLi[0].PlanStartTime.Restore()) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("生成工单流水号失败, error:" + err.Error() + ", 流水号Id:" + project.SerialOrderSnr) |
|
|
@ -1066,14 +1121,6 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO |
|
|
|
return grmi.NewBusinessError("写入跨工厂任务失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
if custOrderData.OrderQty.ReleasedQty == 1 { |
|
|
|
custOrderData.OrderStatus.Status1 = baseModel.WO_STATUS_RUNNING |
|
|
|
err = custOrderStatusDao.UpdateOne(&custOrderData.OrderStatus) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("更新订单派工状态失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
_ = session.Commit() |
|
|
|
} |
|
|
|
if custOrderData.OrderQty.PlanQty == custOrderData.OrderQty.ReleasedQty+custOrderData.OrderQty.CancelQty { |
|
|
@ -1376,7 +1423,7 @@ func (impl *CustOrderServiceImplement) ManualReleaseCustOrder(user *global.User, |
|
|
|
fmt.Println(fmt.Sprintf("通道不存在, 工厂%d", custOrder.PlantNr)) |
|
|
|
return nil |
|
|
|
} |
|
|
|
err = channel.SendData(custOrder) |
|
|
|
err = channel.SendData(*custOrder) |
|
|
|
if err != nil { |
|
|
|
return grmi.NewBusinessError("派工发送数据出错:" + err.Error()) |
|
|
|
} |
|
|
|