|
|
@ -378,7 +378,6 @@ func (impl *PackOrderServiceImplement) ScanBarcode(user *global.User, barcode st |
|
|
|
return nil, grmi.NewBusinessError("初始化全局包装模板失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//判断条码是否已经生成过包装
|
|
|
|
dataList, err := packLstDAO.Select([]grmi.Predicate{ |
|
|
|
meta.PackOrderItemLst_SerialOrderId.NewPredicate(grmi.Equal, barcode), |
|
|
@ -403,18 +402,7 @@ func (impl *PackOrderServiceImplement) ScanBarcode(user *global.User, barcode st |
|
|
|
if serialOrderLi[0].SerialOrderStatus.Status != baseModel.WO_STATUS_FINISHED { |
|
|
|
return nil, grmi.NewBusinessError("条码对应的工单状态不是已完成") |
|
|
|
} |
|
|
|
// 台套Key
|
|
|
|
syncKey := serialOrderLi[0].SyncKey |
|
|
|
// 通过工单条码获取总成
|
|
|
|
artId := serialOrderLi[0].ArtId |
|
|
|
projectId := serialOrderLi[0].ProjectId |
|
|
|
project, err := projectDao.SelectOne(projectId) |
|
|
|
if err != nil { |
|
|
|
return nil, grmi.NewBusinessError("查询车型项目数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if project == nil { |
|
|
|
return nil, grmi.NewBusinessError("车型项目数据不存在,项目ID:" + projectId) |
|
|
|
} |
|
|
|
serialOrder := serialOrderLi[0] |
|
|
|
// 获取用户之前是否存在未关包的包装单 如果存在则使用之前的包装单ID 如果不存在则创建包装单 如果超过一个则报错
|
|
|
|
var packOrderId string |
|
|
|
packOrderLi, err := packOrderDao.SelectUserRunningPackOrder(user.UserId) |
|
|
@ -428,12 +416,32 @@ func (impl *PackOrderServiceImplement) ScanBarcode(user *global.User, barcode st |
|
|
|
} else { |
|
|
|
return nil, grmi.NewBusinessError("该用户现在存在多个包装中的包装单, 请确认") |
|
|
|
} |
|
|
|
|
|
|
|
// 通过工单条码获取总成
|
|
|
|
artId := serialOrderLi[0].ArtId |
|
|
|
projectId := serialOrderLi[0].ProjectId |
|
|
|
project, err := projectDao.SelectOne(projectId) |
|
|
|
if err != nil { |
|
|
|
return nil, grmi.NewBusinessError("查询车型项目数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if project == nil { |
|
|
|
return nil, grmi.NewBusinessError("车型项目数据不存在,项目ID:" + projectId) |
|
|
|
} |
|
|
|
// 台套Key
|
|
|
|
syncKey := serialOrderLi[0].SyncKey |
|
|
|
|
|
|
|
if err := session.Begin(); err != nil { |
|
|
|
return nil, grmi.NewBusinessError("事务开启失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
currentPackOrder := &model.PackOrderWithStatus{} |
|
|
|
// 如果当前用户不存在操作中未关闭的包装单, 则创建包装单数据
|
|
|
|
if packOrderId == "" { |
|
|
|
var packTypeId string |
|
|
|
if serialOrder.OrderType == baseModel.ODER_TYPE_INTERVAL { |
|
|
|
packTypeId = model.PACK_TYPE_INT |
|
|
|
} else { |
|
|
|
packTypeId = model.PACK_TYPE_STD |
|
|
|
} |
|
|
|
packOrderId, err = snrDao.GetNextSnr(project.PackOrderSnr) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
@ -444,6 +452,7 @@ func (impl *PackOrderServiceImplement) ScanBarcode(user *global.User, barcode st |
|
|
|
ProjectId: projectId, |
|
|
|
PlanQty: 1, |
|
|
|
ActQty: 1, |
|
|
|
PackTypeId: packTypeId, |
|
|
|
OpenTime: grmi.DateTime(time.Now()), |
|
|
|
Operator: user.UserId, |
|
|
|
} |
|
|
@ -492,6 +501,43 @@ func (impl *PackOrderServiceImplement) ScanBarcode(user *global.User, barcode st |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("对应的包装单数据不存在, 包装单ID:" + packOrderId) |
|
|
|
} |
|
|
|
// 如果工单时内部工单 则校验包装单类型 是不是符合要求 同时插入包装单
|
|
|
|
if serialOrder.OrderType == baseModel.ODER_TYPE_INTERVAL { |
|
|
|
if currentPackOrder.PackOrder.PackTypeId != model.PACK_TYPE_INT { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("当前进行包装的包装单是标包类型, 但工单是内部工单") |
|
|
|
} |
|
|
|
currentPackOrder.PackOrder.ActQty += 1 |
|
|
|
currentPackOrder.PackOrder.PlanQty += 1 |
|
|
|
currentPackOrder.PackOrder.Operator = user.UserId |
|
|
|
err = packOrderDao.UpdateOne(¤tPackOrder.PackOrder) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("更新包装单数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
// 写入当前扫描的包装单子项
|
|
|
|
packOrderLst := model.PackOrderItemLst{ |
|
|
|
PackOrderId: packOrderId, |
|
|
|
Pos: 1, |
|
|
|
PartId: artId, |
|
|
|
SerialOrderId: barcode, |
|
|
|
Status: model.PACK_STATUS_CLOSED, |
|
|
|
PlanQty: 1, |
|
|
|
ActQty: 1, |
|
|
|
} |
|
|
|
err = packLstDAO.InsertOne(&packOrderLst) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("插入包装单细则失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
_ = session.Commit() |
|
|
|
result.IsClosed = false |
|
|
|
result.Message = "扫描完成, 包装单ID:" + currentPackOrder.PackOrder.PackOrderId |
|
|
|
result.PackOrderId = currentPackOrder.PackOrder.PackOrderId |
|
|
|
result.MatchTemplateLi = make([]model.PackTemplate, 0) |
|
|
|
return result, nil |
|
|
|
} |
|
|
|
|
|
|
|
// 判断包装单是否校验CheckSyncKey
|
|
|
|
if currentPackOrder.PackOrder.CheckSyncKey { |
|
|
|
packLstLi, err := packLstDAO.Select([]grmi.Predicate{meta.PackOrderItemLst_PackOrderId.NewPredicate(grmi.Equal, packOrderId)}, nil) |
|
|
@ -949,6 +995,69 @@ func (impl *PackOrderServiceImplement) ScanBarcode(user *global.User, barcode st |
|
|
|
// return nil
|
|
|
|
//}
|
|
|
|
|
|
|
|
// ClosePackOrder 关闭包装单
|
|
|
|
func (impl *PackOrderServiceImplement) ClosePackOrder(user *global.User, packOrderId string) error { |
|
|
|
grmi.Log(user, "/services/jit/implments/PackOrder.service.impl.go", "ClosePackOrder", "关闭包装单") |
|
|
|
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
|
|
|
|
|
var err error |
|
|
|
dao := dal.NewPackOrderDAO(session, user.PlantNr, user.UserId) |
|
|
|
statusDao := dal.NewPackOrderStatusDAO(session, user.PlantNr, user.UserId) |
|
|
|
statusHistoryDao := dal.NewPackOrderStatusHistoryDAO(session, user.PlantNr, user.UserId) |
|
|
|
packOrder, err := dao.SelectOne(packOrderId) |
|
|
|
if err != nil { |
|
|
|
return grmi.NewBusinessError("查询包装单失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if packOrder == nil { |
|
|
|
return grmi.NewBusinessError("不存在该包装单, 包装单Id:" + packOrderId) |
|
|
|
} |
|
|
|
if packOrder.PackTypeId != model.PACK_TYPE_INT { |
|
|
|
return grmi.NewBusinessError("不是内部包装单,不允许手动关包") |
|
|
|
} |
|
|
|
packOrderStatus, err := statusDao.SelectOne(packOrderId) |
|
|
|
if err != nil { |
|
|
|
return grmi.NewBusinessError("查询包装单状态失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if packOrderStatus == nil { |
|
|
|
return grmi.NewBusinessError("未查询到包装单状态") |
|
|
|
} |
|
|
|
if packOrderStatus.Status != model.PACK_STATUS_RUNNING { |
|
|
|
return grmi.NewBusinessError("包状态状态不是包装中, 不能关包") |
|
|
|
} |
|
|
|
if err := session.Begin(); err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
maxPos, err := statusHistoryDao.GetMaxPos(packOrderId) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("获取包装单状态变更历史位置数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
statusHistory := model.PackOrderStatusHistory{ |
|
|
|
PackOrderId: packOrderId, |
|
|
|
Pos: maxPos+1, |
|
|
|
StatusChangeType: model.PACK_STATUS_CHANGE_TYPE_PACK, |
|
|
|
FromStatus: model.PACK_STATUS_RUNNING, |
|
|
|
ToStatus: model.PACK_STATUS_CLOSED, |
|
|
|
ChangeTime: grmi.DateTime(time.Now()), |
|
|
|
} |
|
|
|
err = statusHistoryDao.InsertOne(&statusHistory) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("写入包装单状态变更历史失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
packOrderStatus.Status = model.PACK_STATUS_CLOSED |
|
|
|
err = statusDao.UpdateOne(packOrderStatus) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("更新包装单状态失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
_ = session.Commit() |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
// CreateByTemplate 通过模板创建包装单
|
|
|
|
func (impl *PackOrderServiceImplement) CreateByTemplate(user *global.User, packTemplateId string) (err error) { |
|
|
|
grmi.Log(user, "/services/jit/implments/PackOrder.service.impl.go", "CreateByTemplate", "通过包装模板创建包装单") |
|
|
@ -1116,9 +1225,88 @@ func (impl *PackOrderServiceImplement) SplitPackOrder(user *global.User, packOrd |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
// SplitPackOrderBySerialOrderId 通过工单ID进行拆包
|
|
|
|
func (impl *PackOrderServiceImplement) SplitPackOrderBySerialOrderId(user *global.User, serialOrderId string) error { |
|
|
|
grmi.Log(user, "/services/jit/implments/PackOrder.service.impl.go", "SplitPackOrderBySerialOrderId", "拆包") |
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
|
|
|
|
|
packOrderDao := dal.NewPackOrderDAO(session, user.PlantNr, user.UserId) |
|
|
|
packOrderItemDao := dal.NewPackOrderItemLstDAO(session, user.PlantNr, user.UserId) |
|
|
|
packOrderStatusDao := dal.NewPackOrderStatusDAO(session, user.PlantNr, user.UserId) |
|
|
|
packOrderStatusHistoryDao := dal.NewPackOrderStatusHistoryDAO(session, user.PlantNr, user.UserId) |
|
|
|
// 通过工单ID查询包装单
|
|
|
|
packItemLi, err := packOrderItemDao.Select([]grmi.Predicate{meta.PackOrderItemLst_SerialOrderId.NewPredicate(grmi.Equal, serialOrderId), |
|
|
|
meta.PackOrderItemLst_Status.NewPredicate(grmi.Equal, model.PACK_STATUS_CLOSED)}, nil) |
|
|
|
if len(packItemLi) == 0 { |
|
|
|
return grmi.NewBusinessError("该工单未进行包") |
|
|
|
} |
|
|
|
packOrderId := packItemLi[0].PackOrderId |
|
|
|
// 校验包装单
|
|
|
|
packOrder, err := packOrderDao.SelectOneWithStatus(packOrderId) |
|
|
|
if err != nil { |
|
|
|
return grmi.NewBusinessError("查询包装单数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if packOrder == nil { |
|
|
|
return grmi.NewBusinessError("不存在对应的包装单, 包装单ID:" + packOrderId) |
|
|
|
} |
|
|
|
if packOrder.PackOrderStatus.LoadStatus == model.SHIP_STATUS_CLOSED || packOrder.PackOrderStatus.ShipStatus == model.SHIP_STATUS_CLOSED { |
|
|
|
return grmi.NewBusinessError("该包装单已在发运中或已发运,不允许拆包") |
|
|
|
} |
|
|
|
//开启事务
|
|
|
|
if err = session.Begin(); err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
// 更新包装单操作人员
|
|
|
|
packOrder.PackOrder.Operator = user.UserId |
|
|
|
packOrder.PackOrder.CloseTime = grmi.DateTime(time.Now()) |
|
|
|
err = packOrderDao.UpdateOne(&packOrder.PackOrder) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("更新包装单数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
// 更新包状态状态 及写入变更记录
|
|
|
|
maxPos, err := packOrderStatusHistoryDao.GetMaxPos(packOrderId) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("查询包装单状态变更位置失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
packOrderStatusHistory := model.PackOrderStatusHistory{ |
|
|
|
PackOrderId: packOrderId, |
|
|
|
Pos: maxPos + 1, |
|
|
|
StatusChangeType: model.PACK_STATUS_CHANGE_TYPE_PACK, |
|
|
|
FromStatus: packOrder.PackOrderStatus.Status, |
|
|
|
ToStatus: model.PACK_STATUS_CANCELED, |
|
|
|
ChangeTime: grmi.DateTime(time.Now()), |
|
|
|
} |
|
|
|
err = packOrderStatusHistoryDao.InsertOne(&packOrderStatusHistory) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("保存包装单状态变更记录失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
packOrder.PackOrderStatus.Status = model.PACK_STATUS_CANCELED |
|
|
|
err = packOrderStatusDao.UpdateOne(&packOrder.PackOrderStatus) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("更新包装单状态失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
// 更新包装单子项状态
|
|
|
|
updatePackOrderItem := model.PackOrderItemLst{ |
|
|
|
Status: model.PACK_STATUS_CANCELED, |
|
|
|
} |
|
|
|
err = packOrderItemDao.UpdateWhere([]grmi.Predicate{meta.PackOrderItemLst_PackOrderId.NewPredicate(grmi.Equal, packOrderId)}, &updatePackOrderItem, []string{meta.PackOrderItemLst_Status.Name}...) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("更新包状态子项状态失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
_ = session.Commit() |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
// GetUserOperatePackOrder 获取当前用户操作的包装单
|
|
|
|
func (impl *PackOrderServiceImplement) GetUserOperatePackOrder(user *global.User) (string, error) { |
|
|
|
grmi.Log(user, "/services/jit/implments/PackOrder.service.impl.go", "SplitPackOrder", "拆包") |
|
|
|
grmi.Log(user, "/services/jit/implments/PackOrder.service.impl.go", "GetUserOperatePackOrder", "获取当前用户操作的包装单") |
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
|