From 27b160362f18dd2cec227e5e17ccd11b3074d27e Mon Sep 17 00:00:00 2001 From: zhangxin Date: Mon, 20 Jun 2022 14:00:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=93=E6=95=A3=E7=9A=84?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../om/implments/SerialOrder.Logic.impl.go | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/services/om/implments/SerialOrder.Logic.impl.go b/services/om/implments/SerialOrder.Logic.impl.go index 64b6d80..07b74d7 100644 --- a/services/om/implments/SerialOrder.Logic.impl.go +++ b/services/om/implments/SerialOrder.Logic.impl.go @@ -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 +}