|
|
@ -524,209 +524,8 @@ func (impl *ShipOrderServiceImplement) Update(user *global.User, entities *[]mod |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
// ScanBarCode 在发运环境扫描工单条码 通过工单条码获取包装单 自动配置发运单
|
|
|
|
//func (impl *ShipOrderServiceImplement) ScanBarCode(user *global.User, barCode string) (result *model.ShipResult, err error) {
|
|
|
|
// grmi.Log(user, "/services/jit/implments/ShipOrder.service.impl.go", "ScanBarCode", "在发运环境扫描工单条码")
|
|
|
|
//
|
|
|
|
// engine := db.Eloquent.Master()
|
|
|
|
// session := engine.NewSession()
|
|
|
|
// defer session.Close()
|
|
|
|
// // 通过barcode 工单条码查询包装单数据 并校验
|
|
|
|
// packLstDao := dal.NewPackOrderItemLstDAO(session, user.PlantNr, user.UserId)
|
|
|
|
// packOrderDao := dal.NewPackOrderDAO(session, user.PlantNr, user.UserId)
|
|
|
|
// packOrderItemLstLi, err := packLstDao.Select([]grmi.Predicate{meta.PackOrderItemLst_SerialOrderId.NewPredicate(grmi.Equal, barCode)}, nil)
|
|
|
|
// if len(packOrderItemLstLi) == 0 {
|
|
|
|
// return nil, grmi.NewBusinessError("未查询到该工单的包装单")
|
|
|
|
// } else if len(packOrderItemLstLi) > 1 {
|
|
|
|
// return nil, grmi.NewBusinessError("包含该工单的包装单大于一条,请排查, 工单ID:" + barCode)
|
|
|
|
// }
|
|
|
|
// packOrderId := packOrderItemLstLi[0].PackOrderId
|
|
|
|
// packOrder, err := packOrderDao.SelectOne(packOrderId)
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, grmi.NewBusinessError("查询包装单失败, error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// if packOrder == nil {
|
|
|
|
// return nil, grmi.NewBusinessError("未查询到该工单的包装单头部数据, 包装单ID:" + packOrderId)
|
|
|
|
// }
|
|
|
|
// if packOrder.Status != baseModel.PACK_STATUS_CLOSED {
|
|
|
|
// return nil, grmi.NewBusinessError("该包装单的状态不是已完成, 包装单ID:" + packOrderId)
|
|
|
|
// }
|
|
|
|
// // 校验该包装单是否已经存在发运单中
|
|
|
|
// shipDataLstDao := dal.NewShipOrderDataLstDAO(session, user.PlantNr, user.UserId)
|
|
|
|
// shipDataLstLi, err := shipDataLstDao.Select([]grmi.Predicate{meta.ShipOrderDataLst_PackOrderId.NewPredicate(grmi.Equal, packOrderId)}, nil)
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, grmi.NewBusinessError("查询发运包装单数据项失败, error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// if len(shipDataLstLi) != 0 {
|
|
|
|
// return nil, grmi.NewBusinessError("该发运单已经存在于发运单中,包装单ID:" + packOrderId)
|
|
|
|
// }
|
|
|
|
// // 查询该包装单下的所有总成及其数量
|
|
|
|
// packOrderItemLstLi, err = packLstDao.Select([]grmi.Predicate{meta.PackOrderItemLst_PackOrderId.NewPredicate(grmi.Equal, packOrderId)}, []grmi.Field{meta.PackOrderItemLst_Pos})
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, grmi.NewBusinessError("查询包装单数据失败, error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// //packOrderArtQtyMap := make(map[string]int)
|
|
|
|
// //for _, packOrderItemLst := range packOrderItemLstLi {
|
|
|
|
// // _, exist := packOrderArtQtyMap[packOrderItemLst.PartId]
|
|
|
|
// // if !exist {
|
|
|
|
// // packOrderArtQtyMap[packOrderItemLst.PartId] = 1
|
|
|
|
// // } else {
|
|
|
|
// // packOrderArtQtyMap[packOrderItemLst.PartId] += 1
|
|
|
|
// // }
|
|
|
|
// //}
|
|
|
|
// // 读取当前用户操作的数据
|
|
|
|
// originTempData, exist := model.UserShipOrderTempMap[user.UserId]
|
|
|
|
// if !exist {
|
|
|
|
// originTempData = model.TempShipOrderData{
|
|
|
|
// UserId: user.UserId,
|
|
|
|
// ScannedArtMap: make(map[string]int),
|
|
|
|
// PackOrderIdLi: make([]string, 0),
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// tempData := originTempData
|
|
|
|
// // 将当前包装单数据保存到用户操作数据中
|
|
|
|
// for _, packOrderItemLst := range packOrderItemLstLi {
|
|
|
|
// _, exist = tempData.ScannedArtMap[packOrderItemLst.PartId]
|
|
|
|
// if !exist {
|
|
|
|
// tempData.ScannedArtMap[packOrderItemLst.PartId] = 1
|
|
|
|
// } else {
|
|
|
|
// tempData.ScannedArtMap[packOrderItemLst.PartId] += 1
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// tempData.PackOrderIdLi = append(tempData.PackOrderIdLi, packOrderId)
|
|
|
|
// // 聚合所有未完成的发运单
|
|
|
|
// shipOrderDao := dal.NewShipOrderDAO(session, user.PlantNr, user.UserId)
|
|
|
|
// shipOrderIdLi, err := shipOrderDao.SelectUnAccomplishedShipOrder()
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, grmi.NewBusinessError("查询未完成的发运单失败, error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// if len(shipOrderIdLi) == 0 {
|
|
|
|
// return nil, grmi.NewBusinessError("不存在未完成的发运单,请检查")
|
|
|
|
// }
|
|
|
|
// shipOrderItemLstDao := dal.NewShipOrderItemLstDAO(session, user.PlantNr, user.UserId)
|
|
|
|
// shipOrderItemLstLi, err := shipOrderItemLstDao.Select([]grmi.Predicate{meta.ShipOrderItemLst_ShipOrderId.NewPredicate(grmi.Include, shipOrderIdLi...)},
|
|
|
|
// []grmi.Field{meta.ShipOrderItemLst_ShipOrderId, meta.ShipOrderItemLst_Pos})
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, grmi.NewBusinessError("查询未完成发运单的发运项数据失败, error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// shipOrderArtMap := make(map[string]map[string]int, 0)
|
|
|
|
// for _, shipOrderItemLst := range shipOrderItemLstLi {
|
|
|
|
// _, exist := shipOrderArtMap[shipOrderItemLst.ShipOrderId]
|
|
|
|
// if !exist {
|
|
|
|
// shipOrderArtMap[shipOrderItemLst.ShipOrderId] = make(map[string]int)
|
|
|
|
// } else {
|
|
|
|
// shipOrderArtMap[shipOrderItemLst.ShipOrderId][shipOrderItemLst.PackTypeId] = shipOrderItemLst.PlanQty
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// // 比对当前用户的操作数据和所有未完成的发运单数据
|
|
|
|
// matchShipOrderIdLi := make([]string, 0, 1)
|
|
|
|
// for shipOrderId, artMap := range shipOrderArtMap {
|
|
|
|
// if len(tempData.ScannedArtMap) == len(artMap) {
|
|
|
|
// var matchSign = true
|
|
|
|
// for artId, qty := range tempData.ScannedArtMap {
|
|
|
|
// shipQty, exist := artMap[artId]
|
|
|
|
// if !exist {
|
|
|
|
// matchSign = false
|
|
|
|
// break
|
|
|
|
// }
|
|
|
|
// if qty != shipQty {
|
|
|
|
// matchSign = false
|
|
|
|
// break
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// if matchSign {
|
|
|
|
// matchShipOrderIdLi = append(matchShipOrderIdLi, shipOrderId)
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// // 如果没有任何一个发运模板匹配配上,存储用户操作数据到MONGO中 返回操作成功
|
|
|
|
// if len(matchShipOrderIdLi) == 0 {
|
|
|
|
// _, err := db.AppMongo.Database(model.MONGO_USER_SHIP_DATABASE).Collection(model.MONGOD_USER_SHIP_COLLECTION).InsertOne(context.Background(), tempData)
|
|
|
|
// if err != nil {
|
|
|
|
// return nil, grmi.NewBusinessError("写入用户操作数据到临时存储失败, error:" + err.Error() + " ,请重新扫描该包装")
|
|
|
|
// }
|
|
|
|
// model.UserShipOrderTempMap[user.UserId] = tempData
|
|
|
|
// result = &model.ShipResult{
|
|
|
|
// Message: "扫描完成,包装单ID:" + packOrderId,
|
|
|
|
// }
|
|
|
|
// return result, nil
|
|
|
|
// } else if len(matchShipOrderIdLi) == 1 {
|
|
|
|
// // 只匹配到一个发运单 将用户操作数据落库 同时对该发运单进行关单 对用户操作数据进行清空同时清空MONGO中用户操作数据
|
|
|
|
// if err = session.Begin(); err != nil {
|
|
|
|
// return nil, grmi.NewBusinessError("开启事务失败")
|
|
|
|
// }
|
|
|
|
// shipOrderId := matchShipOrderIdLi[0]
|
|
|
|
// shipOrder, err := shipOrderDao.SelectOneWithStatus(shipOrderId)
|
|
|
|
// if err != nil {
|
|
|
|
// _ = session.Rollback()
|
|
|
|
// return nil, grmi.NewBusinessError("查询发运单失败, 发运单ID:" + shipOrderId + ", error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// if shipOrder == nil {
|
|
|
|
// _ = session.Rollback()
|
|
|
|
// return nil, grmi.NewBusinessError("未查询到发运单, 发运单ID:" + shipOrderId)
|
|
|
|
// }
|
|
|
|
// shipOrder.ShipOrder.ActQty = shipOrder.PlanQty
|
|
|
|
// shipOrder.ShipOrder.Operator = user.UserId
|
|
|
|
// shipOrder.ShipOrder.CloseTime = grmi.DateTime(time.Now())
|
|
|
|
// err = shipOrderDao.UpdateOne(&shipOrder.ShipOrder)
|
|
|
|
// if err != nil {
|
|
|
|
// _ = session.Rollback()
|
|
|
|
// return nil, grmi.NewBusinessError("更新发运单数据失败, 发运单ID:" + shipOrderId + ", error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// statusHistoryDao := dal.NewShipOrderStatusHistoryDAO(session, user.PlantNr, user.UserId)
|
|
|
|
// maxPos, err := statusHistoryDao.GetMaxPos(shipOrderId)
|
|
|
|
// if err != nil {
|
|
|
|
// _ = session.Rollback()
|
|
|
|
// return nil, grmi.NewBusinessError("获取发运单状态变更历史位置数据失败, error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// statusHistory := model.ShipOrderStatusHistory{
|
|
|
|
// ShipOrderId: shipOrderId,
|
|
|
|
// Pos: maxPos + 1,
|
|
|
|
// FromStatus: shipOrder.ShipOrderStatus.Status,
|
|
|
|
// ToStatus: baseModel.PACK_STATUS_CLOSED,
|
|
|
|
// }
|
|
|
|
// err = statusHistoryDao.InsertOne(&statusHistory)
|
|
|
|
// if err != nil {
|
|
|
|
// _ = session.Rollback()
|
|
|
|
// return nil, grmi.NewBusinessError("插入发运单状态变更历史失败, error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// shipOrder.ShipOrderStatus.Status = baseModel.PACK_STATUS_CLOSED
|
|
|
|
// shipOrderStatusDao := dal.NewShipOrderStatusDAO(session, user.PlantNr, user.UserId)
|
|
|
|
// err = shipOrderStatusDao.UpdateOne(&shipOrder.ShipOrderStatus)
|
|
|
|
// if err != nil {
|
|
|
|
// _ = session.Rollback()
|
|
|
|
// return nil, grmi.NewBusinessError("更新发运单状态失败, 发运单ID:" + shipOrderId)
|
|
|
|
// }
|
|
|
|
// for _, packOrderId := range tempData.PackOrderIdLi {
|
|
|
|
// packOrder, err := packOrderDao.SelectOne(packOrderId)
|
|
|
|
// if err != nil {
|
|
|
|
// _ = session.Rollback()
|
|
|
|
// return nil, grmi.NewBusinessError("查询包装单失败, error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// if packOrder == nil {
|
|
|
|
// _ = session.Rollback()
|
|
|
|
// return nil, grmi.NewBusinessError("包装单不存在, 包装单ID:" + packOrderId)
|
|
|
|
// }
|
|
|
|
// shipOrderDataLst := model.ShipOrderDataLst{
|
|
|
|
// ShipOrderId: shipOrderId,
|
|
|
|
// PackOrderId: packOrderId,
|
|
|
|
// Status: baseModel.PACK_STATUS_CLOSED,
|
|
|
|
// PlanQty: packOrder.PlanQty,
|
|
|
|
// ActQty: packOrder.ActQty,
|
|
|
|
// }
|
|
|
|
// err = shipDataLstDao.InsertOne(&shipOrderDataLst)
|
|
|
|
// if err != nil {
|
|
|
|
// _ = session.Rollback()
|
|
|
|
// return nil, grmi.NewBusinessError("写入发运单数据项失败, error:" + err.Error())
|
|
|
|
// }
|
|
|
|
// shipOrderLstLi, err := shipOrderItemLstDao.Select([]grmi.Predicate{})
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
|
|
// CreateAdvanceShipOrder 根据模板创建发运单
|
|
|
|
func (impl *ShipOrderServiceImplement) CreateAdvanceShipOrder(user *global.User, shipTemplateId string, projectId string, plateNumber string, checkCarSet bool) (err error) { |
|
|
|
func (impl *ShipOrderServiceImplement) CreateAdvanceShipOrder(user *global.User, shipTemplateId string, projectId string, plateNumber string, checkCarSet bool, planQty int) (err error) { |
|
|
|
grmi.Log(user, "/services/jit/implments/ShipOrder.service.impl.go", "CreateAdvanceShipOrderByTemplate", "通过发运模板创建预发运单") |
|
|
|
|
|
|
|
engine := db.Eloquent.Master() |
|
|
@ -843,7 +642,7 @@ func (impl *ShipOrderServiceImplement) CreateAdvanceShipOrder(user *global.User, |
|
|
|
ShipTemplateId: shipTemplateId, |
|
|
|
ProjectId: projectId, |
|
|
|
ShipType: model.SHIP_TYPE_ADVANCE, |
|
|
|
PlanQty: 0, |
|
|
|
PlanQty: planQty, |
|
|
|
OpenTime: grmi.DateTime(time.Now()), |
|
|
|
Operator: user.UserId, |
|
|
|
PlateNumber: plateNumber, |
|
|
@ -1137,6 +936,10 @@ func (impl *ShipOrderServiceImplement) ScanBarCode(user *global.User, barCode st |
|
|
|
} |
|
|
|
// 如果是预发运单, 且没有指定发运模板
|
|
|
|
if shipOrder.ShipOrder.ShipType == model.SHIP_TYPE_ADVANCE && shipOrder.ShipOrder.ShipTemplateId == "" { |
|
|
|
if shipOrder.ShipOrder.ProjectId != packOrder.ProjectId { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("包装项目和发运单项目不一致") |
|
|
|
} |
|
|
|
// 如果发运单已经进行扫描且需要校验同一派生
|
|
|
|
if shipOrder.CheckCarSet && shipOrder.ShipOrderStatus.Status == model.SHIP_STATUS_RUNNING { |
|
|
|
scanDataLi, err := shipOrderDataLstDao.Select([]grmi.Predicate{ |
|
|
@ -1183,45 +986,6 @@ func (impl *ShipOrderServiceImplement) ScanBarCode(user *global.User, barCode st |
|
|
|
} |
|
|
|
} |
|
|
|
// 进行扫码处理
|
|
|
|
shipOrder.ShipOrder.PlanQty += 1 |
|
|
|
shipOrder.ShipOrder.ActQty += 1 |
|
|
|
shipOrder.ShipOrder.Operator = user.UserId |
|
|
|
err = shipOrderDao.UpdateOne(&shipOrder.ShipOrder) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("更新发运单数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if shipOrder.ShipOrderStatus.Status != model.SHIP_STATUS_RUNNING { |
|
|
|
maxPos, err = shipOrderStatusHistoryDao.GetMaxPos(shipOrderId) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("获取发运单状态变更历史位置失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
shipOrderStatusHistory := model.ShipOrderStatusHistory{ |
|
|
|
ShipOrderId: shipOrderId, |
|
|
|
Pos: maxPos + 1, |
|
|
|
StatusChangeType: model.SHIP_STATUS_CHANGE_TYPE_SHIP, |
|
|
|
FromStatus: shipOrder.ShipOrderStatus.Status, |
|
|
|
ToStatus: model.SHIP_STATUS_RUNNING, |
|
|
|
ChangeTime: grmi.DateTime(time.Now()), |
|
|
|
} |
|
|
|
err = shipOrderStatusHistoryDao.InsertOne(&shipOrderStatusHistory) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("保存发运单状态变更历史失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
shipOrder.ShipOrderStatus.Status = model.SHIP_STATUS_RUNNING |
|
|
|
err = shipOrderStatusDao.UpdateOne(&shipOrder.ShipOrderStatus) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("更新发运单状态变更历史失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
err = shipOrderDao.UpdateOne(&shipOrder.ShipOrder) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("更新发运单数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
maxPos, err = shipOrderLstDao.GetMaxPos(shipOrderId) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
@ -1256,9 +1020,49 @@ func (impl *ShipOrderServiceImplement) ScanBarCode(user *global.User, barCode st |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("写入发运单数据项失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
var isClosed = false |
|
|
|
status := model.SHIP_STATUS_RUNNING |
|
|
|
shipOrder.ShipOrder.ActQty += 1 |
|
|
|
shipOrder.ShipOrder.Operator = user.UserId |
|
|
|
if shipOrder.ShipOrder.PlanQty == shipOrder.ShipOrder.ActQty { |
|
|
|
isClosed = true |
|
|
|
shipOrder.ShipOrder.CloseTime = grmi.DateTime(time.Now()) |
|
|
|
status = model.SHIP_STATUS_CLOSED |
|
|
|
} |
|
|
|
err = shipOrderDao.UpdateOne(&shipOrder.ShipOrder) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("更新发运单数据失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
if status != shipOrder.ShipOrderStatus.Status { |
|
|
|
maxPos, err = shipOrderStatusHistoryDao.GetMaxPos(shipOrderId) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("获取发运单状态变更历史位置失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
shipOrderStatusHistory := model.ShipOrderStatusHistory{ |
|
|
|
ShipOrderId: shipOrderId, |
|
|
|
Pos: maxPos + 1, |
|
|
|
StatusChangeType: model.SHIP_STATUS_CHANGE_TYPE_SHIP, |
|
|
|
FromStatus: shipOrder.ShipOrderStatus.Status, |
|
|
|
ToStatus: status, |
|
|
|
ChangeTime: grmi.DateTime(time.Now()), |
|
|
|
} |
|
|
|
err = shipOrderStatusHistoryDao.InsertOne(&shipOrderStatusHistory) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("保存发运单状态变更历史失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
shipOrder.ShipOrderStatus.Status = status |
|
|
|
err = shipOrderStatusDao.UpdateOne(&shipOrder.ShipOrderStatus) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return nil, grmi.NewBusinessError("更新发运单状态变更历史失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
_ = session.Commit() |
|
|
|
result.Message = "扫描完成,扫描包装单ID:" + packOrder.PackOrder.PackOrderId + ", 当前发运单ID:" + shipOrderId |
|
|
|
result.IsClosed = false |
|
|
|
result.IsClosed = isClosed |
|
|
|
err = impl.PermitTrough(workPlaceConfig) |
|
|
|
if err != nil { |
|
|
|
result.PLCResult = false |
|
|
|