|
|
@ -12,13 +12,14 @@ import ( |
|
|
|
"LAPP_ACURA_MOM_BACKEND/infra/logger" |
|
|
|
meMeta "LAPP_ACURA_MOM_BACKEND/meta/me" |
|
|
|
omMeta "LAPP_ACURA_MOM_BACKEND/meta/om" |
|
|
|
meta "LAPP_ACURA_MOM_BACKEND/meta/pln" |
|
|
|
baseModel "LAPP_ACURA_MOM_BACKEND/models/base" |
|
|
|
channelModel "LAPP_ACURA_MOM_BACKEND/models/channel" |
|
|
|
meModel "LAPP_ACURA_MOM_BACKEND/models/me" |
|
|
|
omModel "LAPP_ACURA_MOM_BACKEND/models/om" |
|
|
|
model "LAPP_ACURA_MOM_BACKEND/models/pln" |
|
|
|
omSvr "LAPP_ACURA_MOM_BACKEND/services/om" |
|
|
|
"LAPP_ACURA_MOM_BACKEND/utils" |
|
|
|
"fmt" |
|
|
|
"github.com/360EntSecGroup-Skylar/excelize/v2" |
|
|
|
uuid "github.com/iris-contrib/go.uuid" |
|
|
|
"sort" |
|
|
@ -84,11 +85,13 @@ func (impl *CustOrderServiceImplement) LockCustOrder(user *global.User, custOrde |
|
|
|
plantNr := user.PlantNr |
|
|
|
channel, exist := common.ReleaseTaskChannel[plantNr] |
|
|
|
if !exist { |
|
|
|
common.ReleaseTaskChannel[plantNr] = make(chan model.CustOrder, 50) |
|
|
|
channel = common.ReleaseTaskChannel[plantNr] |
|
|
|
return nil |
|
|
|
} |
|
|
|
for _, custOrder := range custOrderLi { |
|
|
|
channel <- custOrder |
|
|
|
err = channel.SendData(custOrder) |
|
|
|
if err != nil { |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|
return nil |
|
|
|
} |
|
|
@ -262,28 +265,62 @@ func (impl *CustOrderServiceImplement) AnalysisPlanFromExcel(user *global.User, |
|
|
|
sort.Slice(releaseCustOrderLi, func(i, j int) bool { |
|
|
|
itemI := releaseCustOrderLi[i] |
|
|
|
itemJ := releaseCustOrderLi[j] |
|
|
|
return itemJ.PlanStartTime.Restore().Before(itemI.PlanStartTime.Restore()) |
|
|
|
return itemI.PlanStartTime.Restore().Before(itemJ.PlanStartTime.Restore()) |
|
|
|
}) |
|
|
|
plantNr := user.PlantNr |
|
|
|
channel, exist := common.ReleaseTaskChannel[plantNr] |
|
|
|
if !exist { |
|
|
|
common.ReleaseTaskChannel[plantNr] = make(chan model.CustOrder, 50) |
|
|
|
channel = common.ReleaseTaskChannel[plantNr] |
|
|
|
return nil |
|
|
|
} |
|
|
|
for _, custOrder := range releaseCustOrderLi { |
|
|
|
fmt.Println("custORderId:", custOrder.CustOrderId) |
|
|
|
channel <- custOrder |
|
|
|
err = channel.SendData(custOrder) |
|
|
|
if err != nil { |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
// ReleaseCustOrder 对客户订单进行派工
|
|
|
|
func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custOrderData model.CustOrder) error { |
|
|
|
func (impl *CustOrderServiceImplement) ReleaseSingleOrder(user *global.User, custOrderData model.CustOrder) error { |
|
|
|
releaseId, err := uuid.NewV4() |
|
|
|
if err != nil { |
|
|
|
return grmi.NewBusinessError("生成任务id失败,错误:" + err.Error()) |
|
|
|
} |
|
|
|
log, _ := logger.NewLogger("客户订单派工,id:"+releaseId.String(), "PLN") |
|
|
|
err = impl.ReleaseCustOrder(user, custOrderData, log) |
|
|
|
if err != nil { |
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
|
statusHistoryDao := dal.NewCustOrderStatusHistoryDAO(session, user.PlantNr, user.UserId) |
|
|
|
statusDao := dal.NewCustOrderStatusDAO(session, user.PlantNr, user.UserId) |
|
|
|
statusHistory := model.CustOrderStatusHistory{ |
|
|
|
CustOrderId: custOrderData.CustOrderId, |
|
|
|
StatusChangeType: model.STATUS_CHANGE_TYPE_RELEASE, |
|
|
|
FromStatus: custOrderData.OrderStatus.Status, |
|
|
|
ToStatus: baseModel.WO_STATUS_RELEASE_FAILED, |
|
|
|
ChangeTime: grmi.DateTime(time.Now()), |
|
|
|
TriggerPara1: err.Error(), |
|
|
|
} |
|
|
|
innerErr := statusHistoryDao.InsertOne(&statusHistory) |
|
|
|
if innerErr != nil { |
|
|
|
log.Error("派工失败, 保存客户订单状态变更记录失败, 错误:" + err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
custOrderData.OrderStatus.Status = baseModel.WO_STATUS_RELEASE_FAILED |
|
|
|
innerErr = statusDao.UpdateOne(&custOrderData.OrderStatus) |
|
|
|
if err != nil { |
|
|
|
log.Error("派工失败, 更新客户订单状态变更记录失败, 错误:" + err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
return err |
|
|
|
} |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
// 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() |
|
|
@ -887,19 +924,24 @@ func (impl *CustOrderServiceImplement) ReleaseCustOrder(user *global.User, custO |
|
|
|
|
|
|
|
func (impl *CustOrderServiceImplement) ReleasePlantTask(user *global.User) { |
|
|
|
log, _ := logger.NewLogger("派工任务", "PLN") |
|
|
|
var err error |
|
|
|
plantNr := user.PlantNr |
|
|
|
channel, exist := common.ReleaseTaskChannel[plantNr] |
|
|
|
if !exist { |
|
|
|
common.ReleaseTaskChannel[plantNr] = make(chan model.CustOrder, 50) |
|
|
|
return |
|
|
|
} |
|
|
|
for { |
|
|
|
select { |
|
|
|
case custOrder := <-channel: |
|
|
|
err = impl.ReleaseCustOrder(user, custOrder) |
|
|
|
if err != nil { |
|
|
|
log.Error("派工异常, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
custOrder, ok, err := channel.Read() |
|
|
|
if err != nil { |
|
|
|
return |
|
|
|
} |
|
|
|
if !ok { |
|
|
|
continue |
|
|
|
} |
|
|
|
err = impl.ReleaseSingleOrder(user, custOrder) |
|
|
|
if err != nil { |
|
|
|
log.Error("派工异常, 错误:" + err.Error()) |
|
|
|
channel.Close() |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -926,11 +968,14 @@ func (impl *CustOrderServiceImplement) ReleaseTask() error { |
|
|
|
} |
|
|
|
channel, exist := common.ReleaseTaskChannel[user.PlantNr] |
|
|
|
if !exist { |
|
|
|
common.ReleaseTaskChannel[user.PlantNr] = make(chan model.CustOrder, 50) |
|
|
|
channel = common.ReleaseTaskChannel[user.PlantNr] |
|
|
|
channel = channelModel.NewReleaseChannel() |
|
|
|
common.ReleaseTaskChannel[user.PlantNr] = channel |
|
|
|
} |
|
|
|
for _, custOrder := range custOrderLi { |
|
|
|
channel <- custOrder |
|
|
|
err = channel.SendData(custOrder) |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
go func(user *global.User) { |
|
|
|
impl.ReleasePlantTask(user) |
|
|
@ -938,3 +983,81 @@ func (impl *CustOrderServiceImplement) ReleaseTask() error { |
|
|
|
} |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
// SelectReleaseTask 查询派工任务
|
|
|
|
func (impl *CustOrderServiceImplement) SelectReleaseTask(user *global.User) ([]model.CustOrder, error) { |
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
|
custOrderDao := dal.NewCustOrderDAO(session, user.PlantNr, user.UserId) |
|
|
|
custOrderLi, err := custOrderDao.SelectReleasingOrder() |
|
|
|
return custOrderLi, err |
|
|
|
} |
|
|
|
|
|
|
|
// RepairReleaseFailedTask 修复派工失败
|
|
|
|
func (impl *CustOrderServiceImplement) RepairReleaseFailedTask(user *global.User) (err error) { |
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
|
custOrderStatusDao := dal.NewCustOrderStatusDAO(session, user.PlantNr, user.UserId) |
|
|
|
statusHistoryDao := dal.NewCustOrderStatusHistoryDAO(session, user.PlantNr, user.UserId) |
|
|
|
custOrderDao := dal.NewCustOrderDAO(session, user.PlantNr, user.UserId) |
|
|
|
statusLi, err := custOrderStatusDao.Select([]grmi.Predicate{ |
|
|
|
meta.CustOrderStatus_Status.NewPredicate(grmi.Equal, baseModel.WO_STATUS_RELEASE_FAILED), |
|
|
|
}, nil) |
|
|
|
if err != nil { |
|
|
|
return grmi.NewBusinessError("查询客户订单数据失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
if len(statusLi) == 0 { |
|
|
|
return grmi.NewBusinessError("不存在派工失败的客户订单, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
channel, exist := common.ReleaseTaskChannel[user.PlantNr] |
|
|
|
if !exist { |
|
|
|
return grmi.NewBusinessError("该工厂任务队列不存在, 请联系软件供应商") |
|
|
|
} |
|
|
|
if err = session.Begin(); err != nil { |
|
|
|
return grmi.NewBusinessError("开启事务失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
for _, status := range statusLi { |
|
|
|
statusHistory := model.CustOrderStatusHistory{ |
|
|
|
CustOrderId: status.CustOrderId, |
|
|
|
StatusChangeType: model.STATUS_CHANGE_TYPE_RELEASE, |
|
|
|
FromStatus: status.Status, |
|
|
|
ToStatus: baseModel.WO_STATUS_LOCKED, |
|
|
|
ChangeTime: grmi.DateTime(time.Now()), |
|
|
|
TriggerPara1: "修复派工任务", |
|
|
|
} |
|
|
|
err = statusHistoryDao.InsertOne(&statusHistory) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("保存客户订单状态变更历史失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
status.Status = baseModel.WO_STATUS_LOCKED |
|
|
|
err = custOrderStatusDao.UpdateOne(&status) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("更新客户订单状态失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
err = channel.ResetChannel() |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("刷新任务队列失败") |
|
|
|
} |
|
|
|
custOrderLi, err := custOrderDao.SelectNeedReleaseCustOrder() |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("查询需要派工的客户订单失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
for _, custOrder := range custOrderLi { |
|
|
|
err = channel.SendData(custOrder) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("向队列发送数据失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
_ = session.Commit() |
|
|
|
go impl.ReleasePlantTask(user) |
|
|
|
return nil |
|
|
|
|
|
|
|
} |