Browse Source

添加打散的操作

feature_specialship
zhangxin 2 years ago
parent
commit
27b160362f
1 changed files with 107 additions and 0 deletions
  1. +107
    -0
      services/om/implments/SerialOrder.Logic.impl.go

+ 107
- 0
services/om/implments/SerialOrder.Logic.impl.go View File

@ -2,15 +2,18 @@ package implments
import (
baseDal "LAPP_ACURA_MOM_BACKEND/dao/base"
jitDal "LAPP_ACURA_MOM_BACKEND/dao/jit"
meDal "LAPP_ACURA_MOM_BACKEND/dao/me"
dal "LAPP_ACURA_MOM_BACKEND/dao/om"
"LAPP_ACURA_MOM_BACKEND/db"
"LAPP_ACURA_MOM_BACKEND/global"
"LAPP_ACURA_MOM_BACKEND/grmi"
baseMeta "LAPP_ACURA_MOM_BACKEND/meta/base"
jitMeta "LAPP_ACURA_MOM_BACKEND/meta/jit"
meMeta "LAPP_ACURA_MOM_BACKEND/meta/me"
meta "LAPP_ACURA_MOM_BACKEND/meta/om"
baseModel "LAPP_ACURA_MOM_BACKEND/models/base"
jitModel "LAPP_ACURA_MOM_BACKEND/models/jit"
model "LAPP_ACURA_MOM_BACKEND/models/om"
"LAPP_ACURA_MOM_BACKEND/utils"
"github.com/go-xorm/xorm"
@ -511,3 +514,107 @@ func (impl *SerialOrderServiceImplement) SingleProductTask(user *global.User, se
}
return &insertOrder, nil
}
// BreakUp 打散
func (impl *SerialOrderServiceImplement) BreakUp(user *global.User, barcode string) (err error) {
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
// barcode 有可能是总成条码或者是零件条码
SerialOrderDao := dal.NewSerialOrderDAO(session, user.PlantNr, user.UserId)
recvDataDao := dal.NewSerialOrderOPDetailRecvDataLstDAO(session, user.PlantNr, user.UserId)
barcodeDao := dal.NewSerialOrderOnlyBarcodeRecLstDAO(session, user.PlantNr, user.UserId)
statusDao := dal.NewSerialOrderStatusDAO(session, user.PlantNr, user.UserId)
statusRecDao := dal.NewSerialOrderStatusRecLstDAO(session, user.PlantNr, user.UserId)
packOrderItemDao := jitDal.NewPackOrderItemLstDAO(session, user.PlantNr, user.UserId)
// 先查总成 总成不存在再查零件
serialOrder, err := SerialOrderDao.SelectOne(barcode)
if err != nil {
return grmi.NewBusinessError("查询工单失败, 错误:" + err.Error())
}
if serialOrder == nil {
// 通过零件查总成
recvDataLi, err := recvDataDao.Select([]grmi.Predicate{
meta.SerialOrderOPDetailRecvDataLst_RecvData.NewPredicate(grmi.Equal, barcode),
meta.SerialOrderOPDetailRecvDataLst_Status.NewPredicate(grmi.Equal, 1),
}, []grmi.Field{meta.SerialOrderOPDetailRecvDataLst_SerialOrderId})
if err != nil {
return grmi.NewBusinessError("查询工单扫码记录失败, 错误:" + err.Error())
}
if len(recvDataLi) == 0 {
return grmi.NewBusinessError("无效的条码")
}
serialOrderMap := make(map[string]interface{})
for _, recvData := range recvDataLi {
serialOrderMap[recvData.SerialOrderId] = nil
}
if len(serialOrderMap) != 1 {
return grmi.NewBusinessError("该条码使用在多个工单中")
}
var serialOrderId string
for key := range serialOrderMap {
serialOrderId = key
}
serialOrder, err = SerialOrderDao.SelectOne(serialOrderId)
if err != nil {
return grmi.NewBusinessError("查询工单失败, 错误:" + err.Error())
}
if serialOrder == nil {
return grmi.NewBusinessError("使用该条码的工单不存在, 工单条码:" + serialOrderId)
}
}
// 查询工单是否打包, 如果打包状态是80 报错
packOrderItemLi, err := packOrderItemDao.Select([]grmi.Predicate{
jitMeta.PackOrderItemLst_SerialOrderId.NewPredicate(grmi.Equal, serialOrder.SerialOrderId),
jitMeta.PackOrderItemLst_Status.NewPredicate(grmi.Equal, jitModel.PACK_STATUS_CLOSED),
}, nil)
if err != nil {
return grmi.NewBusinessError("查询打包记录失败, 错误:" + err.Error())
}
if len(packOrderItemLi) > 0 {
return grmi.NewBusinessError("该工单已经打包")
}
serialOrderStatus, err := statusDao.SelectOne(serialOrder.SerialOrderId)
if err != nil {
return grmi.NewBusinessError("查询工单状态失败, 错误:" + err.Error())
}
if serialOrderStatus == nil {
return grmi.NewBusinessError("工单状态数据不存在, 错误:" + err.Error())
}
if err = session.Begin(); err != nil {
return grmi.NewBusinessError("开启事务失败, 错误:" + err.Error())
}
defer func() {
if err != nil {
_ = session.Rollback()
} else {
_ = session.Commit()
}
}()
statusHistory := model.SerialOrderStatusRecLst{
SerialOrderId: serialOrder.SerialOrderId,
PrevStatus: serialOrderStatus.Status,
Status: baseModel.WO_STATUS_CANCELED,
StartTime: grmi.DateTime(time.Now()),
Remark1: "BREAK_UP",
}
err = statusRecDao.InsertOne(&statusHistory)
if err != nil {
return grmi.NewBusinessError("保存工单状态变更历史失败, 错误:" + err.Error())
}
serialOrderStatus.Status = baseModel.WO_STATUS_CANCELED
err = statusDao.UpdateOne(serialOrderStatus)
if err != nil {
return grmi.NewBusinessError("更新工单状态变更历史失败, 错误:" + err.Error())
}
updateData := model.SerialOrderOnlyBarcodeRecLst{
Status: 0,
}
err = barcodeDao.UpdateWhere([]grmi.Predicate{
meta.SerialOrderOnlyBarcodeRecLst_SerialOrderId.NewPredicate(grmi.Equal, serialOrder.SerialOrderId),
}, &updateData, meta.SerialOrderOnlyBarcodeRecLst_Status.Name)
if err != nil {
return grmi.NewBusinessError("解绑零件使用记录失败, 错误:" + err.Error())
}
return nil
}

Loading…
Cancel
Save