Browse Source

添加定时派工任务

pull/240/head
zhangxin 2 years ago
parent
commit
690f87827a
5 changed files with 105 additions and 8 deletions
  1. +2
    -0
      services/pln/CustOrder.service.go
  2. +2
    -0
      services/pln/implments/CustOrder.CrossPlant.impl.go
  3. +94
    -8
      services/pln/implments/CustOrderLogic.service.impl.go
  4. +6
    -0
      task/ApsRelease.go
  5. +1
    -0
      task/scheduler.go

+ 2
- 0
services/pln/CustOrder.service.go View File

@ -435,6 +435,8 @@ type CustOrderService interface {
CrossPlantTask() error
// ManualReleaseCustOrder 手动派工
ManualReleaseCustOrder(user *global.User, custOrderId string) error
// PutTaskToChannel 根据配置定时向channel中导入派工任务
PutTaskToChannel() (err error)
}


+ 2
- 0
services/pln/implments/CustOrder.CrossPlant.impl.go View File

@ -151,6 +151,8 @@ func (impl *CustOrderServiceImplement) GenerateCrossPlantTaskData(task baseModel
fmt.Println("通道不存在, 工厂号:" + strconv.Itoa(plantNr))
return nil
}
mk := fmt.Sprintf("%d-%s", custOrderLi[0].PlantNr, custOrderLi[0].CustOrderId)
common.ReleasingTaskMap.Store(mk, nil)
err = channel.SendData(custOrderLi[0])
if err != nil {
fmt.Println("跨工厂发送数据出错:" + err.Error())


+ 94
- 8
services/pln/implments/CustOrderLogic.service.impl.go View File

@ -158,7 +158,7 @@ func (impl *CustOrderServiceImplement) LockCustOrder(user *global.User, custOrde
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() {
if custOrder.PlanStartTime.Restore().Add(-duration*time.Second).Unix() < time.Now().Unix() {
newReleaseTaskLi = append(newReleaseTaskLi, custOrder)
}
}
@ -168,6 +168,8 @@ func (impl *CustOrderServiceImplement) LockCustOrder(user *global.User, custOrde
return nil
}
for _, custOrder := range newReleaseTaskLi {
mk := fmt.Sprintf("%d-%s", custOrder.PlantNr, custOrder.CustOrderId)
common.ReleasingTaskMap.Store(mk, nil)
err = channel.SendData(custOrder)
if err != nil {
return nil
@ -405,7 +407,7 @@ func (impl *CustOrderServiceImplement) AnalysisPlanFromExcel(user *global.User,
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() {
if custOrder.PlanStartTime.Restore().Add(-duration*time.Second).Unix() < time.Now().Unix() {
newReleaseTaskLi = append(newReleaseTaskLi, custOrder)
}
}
@ -416,6 +418,8 @@ func (impl *CustOrderServiceImplement) AnalysisPlanFromExcel(user *global.User,
return nil
}
for _, custOrder := range newReleaseTaskLi {
mk := fmt.Sprintf("%d-%s", custOrder.PlantNr, custOrder.CustOrderId)
common.ReleasingTaskMap.Store(mk, nil)
err = channel.SendData(custOrder)
if err != nil {
fmt.Println("派工发送数据出错:" + err.Error())
@ -910,13 +914,13 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO
preSerialNumber, err = snrDao.GetNextSnrWithTime(project.PreOrderSnr, waitReleaseSerialOrderLi[0].PlanStartTime.Restore())
if err != nil {
_ = session.Rollback()
return grmi.NewBusinessError("获取流水号失败,错误:" + err.Error()+ ", 流水号Id:" + project.PreOrderSnr)
return grmi.NewBusinessError("获取流水号失败,错误:" + err.Error() + ", 流水号Id:" + project.PreOrderSnr)
}
}
bindPreOrderLi := make([]omModel.PreOrderBindMainOrder, 0)
var (
serialNumber string
syncSnr = true
syncSnr = true
)
for _, product := range productLi {
if product.CtrlStr1 != meModel.PRODUCT_TYPE_PRE {
@ -1156,7 +1160,8 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO
log.Error("客户订单已经派工完成,但是并没有改变客户订单状态, 当前派工客户订单ID:" + custOrderData.CustOrderId)
}
log.Info("客户订单已经派工完成, 当前派工客户订单ID:" + custOrderData.CustOrderId)
mk := fmt.Sprintf("%d-%s", custOrderData.PlantNr, custOrderData.CustOrderId)
common.ReleasingTaskMap.Delete(mk)
return nil
}
@ -1211,6 +1216,8 @@ func (impl *CustOrderServiceImplement) ReleaseTask() error {
common.ReleaseTaskChannel[user.PlantNr] = channel
}
for _, custOrder := range custOrderLi {
mk := fmt.Sprintf("%d-%s", custOrder.PlantNr, custOrder.CustOrderId)
common.ReleasingTaskMap.Store(mk, nil)
err = channel.SendData(custOrder)
if err != nil {
return err
@ -1290,6 +1297,8 @@ func (impl *CustOrderServiceImplement) RepairReleaseFailedTask(user *global.User
return grmi.NewBusinessError("查询需要派工的客户订单失败, 错误:" + err.Error())
}
for _, custOrder := range custOrderLi {
mk := fmt.Sprintf("%d-%s", custOrder.PlantNr, custOrder.CustOrderId)
common.ReleasingTaskMap.Store(mk, nil)
err = channel.SendData(custOrder)
if err != nil {
_ = session.Rollback()
@ -1415,17 +1424,94 @@ func (impl *CustOrderServiceImplement) ManualReleaseCustOrder(user *global.User,
if custOrder.OrderStatus.Status != baseModel.WO_STATUS_LOCKED {
return grmi.NewBusinessError("订单不是已锁定, 不能手动派工")
}
if custOrder.OrderStatus.Status1 == baseModel.WO_STATUS_RUNNING {
return grmi.NewBusinessError("订单已在派工中")
//if custOrder.OrderStatus.Status1 == baseModel.WO_STATUS_RUNNING {
// return grmi.NewBusinessError("订单已在派工中")
//}
mk := fmt.Sprintf("%d-%s", custOrder.PlantNr, custOrder.CustOrderId)
_, ok := common.ReleasingTaskMap.Load(mk)
if ok {
return grmi.NewBusinessError("订单已在派工队列中")
}
channel, exist := common.ReleaseTaskChannel[custOrder.PlantNr]
if !exist {
fmt.Println(fmt.Sprintf("通道不存在, 工厂%d", custOrder.PlantNr))
return nil
}
common.ReleasingTaskMap.Store(mk, nil)
err = channel.SendData(*custOrder)
if err != nil {
return grmi.NewBusinessError("派工发送数据出错:" + err.Error())
}
return nil
}
}
// PutTaskToChannel 根据配置定时向channel中导入派工任务
func (impl *CustOrderServiceImplement) PutTaskToChannel() (err error) {
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
log, _ := logger.NewLogger("定时派工", "RELEASE")
userId := "System"
defer func() {
if err != nil {
log.Error("执行失败, 错误:" + err.Error())
}
}()
plantDao := baseDal.NewPlantDAO(session, userId)
plantLi, err := plantDao.Select(nil, nil)
if err != nil {
return err
}
for _, plant := range plantLi {
user := &global.User{
UserId: "System",
PlantNr: plant.PlantNr,
}
configDao := dal.NewReleaseTaskConfigDAO(session, user.PlantNr, user.UserId)
configLi, err := configDao.Select([]grmi.Predicate{meta.ReleaseTaskConfig_BusinessObjType.NewPredicate(grmi.Equal, model.CONFIG_TYPE_WORK_LINE)}, nil)
if err != nil {
return err
}
configMap := make(map[string]model.ReleaseTaskConfig)
for _, config := range configLi {
configMap[config.BusinessObjId] = config
}
custOrderDao := dal.NewCustOrderDAO(session, user.PlantNr, user.UserId)
custOrderLi, err := custOrderDao.SelectNeedReleaseCustOrder()
if err != nil {
return err
}
sort.Slice(custOrderLi, func(i, j int) bool {
itemI := custOrderLi[i]
itemJ := custOrderLi[j]
iUnix := itemI.PlanStartTime.Restore().Unix()
jUnix := itemJ.PlanStartTime.Restore().Unix()
return iUnix < jUnix
})
channel, exist := common.ReleaseTaskChannel[plant.PlantNr]
if !exist {
return grmi.NewBusinessError(fmt.Sprintf("通道不存在, 工厂%d", plant.PlantNr))
}
for _, custOrder := range custOrderLi {
mk := fmt.Sprintf("%d-%s", custOrder.PlantNr, custOrder.CustOrderId)
_, ok := common.ReleasingTaskMap.Load(mk)
if ok {
continue
}
config, exist := configMap[custOrder.WorkLineId]
if !exist {
return grmi.NewBusinessError(fmt.Sprintf("产线%s没有派工配置", custOrder.WorkLineId))
}
duration := utils.CalcDurationByUom(float64(config.LeadTime), config.TimeUomId)
if custOrder.PlanStartTime.Restore().Add(-duration*time.Second).Unix() > time.Now().Unix() {
continue
}
common.ReleasingTaskMap.Store(mk, nil)
err = channel.SendData(custOrder)
if err != nil {
return grmi.NewBusinessError("派工发送数据出错:" + err.Error())
}
}
}
return nil
}

+ 6
- 0
task/ApsRelease.go View File

@ -20,4 +20,10 @@ func StartCrossPlantTask() error {
custSvr := pln.NewCustOrderService()
err := custSvr.CrossPlantTask()
return err
}
func StartTimingPutTaskToChannel() {
// 异步派工
custSvr := pln.NewCustOrderService()
_ = custSvr.PutTaskToChannel()
}

+ 1
- 0
task/scheduler.go View File

@ -41,6 +41,7 @@ func Start() error {
if err != nil {
return err
}
err = c.AddFunc("0 * * * * ?", StartTimingPutTaskToChannel)
c.Start()
select {}
}

Loading…
Cancel
Save