|
|
@ -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 |
|
|
|
} |