From c47f8e11ba22aec0806dceac497936906fcdf28e Mon Sep 17 00:00:00 2001 From: zhangxin Date: Fri, 19 Aug 2022 17:10:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BB=8E=E5=A4=87=E4=BB=BD?= =?UTF-8?q?=E5=BA=93=E6=8F=90=E5=8F=96=E6=95=B0=E6=8D=AE=E5=88=B0=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/om/SerialOrder.service.go | 2 + .../om/implments/SerialOrder.Logic.impl.go | 150 ++++++++++++++++++ web/controllers/om/SerialOrder.rest.go | 25 +++ web/controllers/om/om.go | 2 + 4 files changed, 179 insertions(+) diff --git a/services/om/SerialOrder.service.go b/services/om/SerialOrder.service.go index 7750913..1ff5d5d 100644 --- a/services/om/SerialOrder.service.go +++ b/services/om/SerialOrder.service.go @@ -460,6 +460,8 @@ type SerialOrderService interface { BreakUp(user *global.User, barcode string) (err error) // ReturnToFactoryWithoutRepair 返厂非线上返修 ReturnToFactoryWithoutRepair(user *global.User, barcode string) (err error) + // ExtractArchiveData 从备份库提取工单数据到生产库 + ExtractArchiveData(user *global.User, serialOrderId string) (err error) } /****************************************************************************** diff --git a/services/om/implments/SerialOrder.Logic.impl.go b/services/om/implments/SerialOrder.Logic.impl.go index f4af2de..14be3a4 100644 --- a/services/om/implments/SerialOrder.Logic.impl.go +++ b/services/om/implments/SerialOrder.Logic.impl.go @@ -692,4 +692,154 @@ func (impl *SerialOrderServiceImplement) ReturnToFactoryWithoutRepair(user *glob return grmi.NewBusinessError("更新工单包装单状态失败, 错误:" + err.Error()) } return nil +} + + +// ExtractArchiveData 从备份库提取工单数据到生产库 +func (impl *SerialOrderServiceImplement) ExtractArchiveData(user *global.User, serialOrderId string) (err error) { + engine := db.Eloquent.Master() + session := engine.NewSession() + defer session.Close() + slaveEngine := db.Eloquent.Slaves()[3] + slaveSession := slaveEngine.NewSession() + defer slaveSession.Close() + orderDao := dal.NewSerialOrderDAO(session, user.PlantNr, user.UserId) + slaveOrderDao := dal.NewSerialOrderDAO(slaveSession, user.PlantNr, user.UserId) + statusDao := dal.NewSerialOrderStatusDAO(session, user.PlantNr, user.UserId) + slaveStatusDao := dal.NewSerialOrderStatusDAO(slaveSession, user.PlantNr, user.UserId) + poDao := dal.NewSerialOrderPOLstDAO(session, user.PlantNr, user.UserId) + slavePoDao := dal.NewSerialOrderPOLstDAO(slaveSession, user.PlantNr, user.UserId) + stepDao := dal.NewSerialOrderStepLstDAO(session, user.PlantNr, user.UserId) + slaveStepDao := dal.NewSerialOrderStepLstDAO(slaveSession, user.PlantNr, user.UserId) + opDetailDao := dal.NewSerialOrderOPDetailDAO(session, user.PlantNr, user.UserId) + slaveOpDetailDao := dal.NewSerialOrderOPDetailDAO(slaveSession, user.PlantNr, user.UserId) + serialOrder, err := orderDao.SelectOne(serialOrderId) + if err != nil { + return grmi.NewBusinessError("从生产库查询工单失败,错误:" + err.Error()) + } + if serialOrder != nil { + return grmi.NewBusinessError("工单数据当前存在于主库中") + } + serialOrder, err = slaveOrderDao.SelectOne(serialOrderId) + if err != nil { + return grmi.NewBusinessError("从备份库查询工单失败, 错误:" + err.Error()) + } + if serialOrder == nil { + return grmi.NewBusinessError("工单数据不存在于主库和备份库中") + } + if serialOrder.GenerateFlag { + return grmi.NewBusinessError("该工单条码已失效, 请扫描最新工单条码") + } + serialOrderLi, err := orderDao.Select([]grmi.Predicate{ + meta.SerialOrder_OriginSerialOrderId.NewPredicate(grmi.Equal, serialOrderId), + }, nil) + if err != nil { + return grmi.NewBusinessError("查询工单关联的原始工单失败, 错误:" + err.Error()) + } + recoverSerialOrderLi := append(serialOrderLi, *serialOrder) + serialOrderIdLi := make([]interface{}, 0, len(recoverSerialOrderLi)) + for index, order := range recoverSerialOrderLi { + order.ShipBackFlush = false + recoverSerialOrderLi[index] = order + serialOrderIdLi = append(serialOrderIdLi, order.SerialOrderId) + } + statusLi, err := slaveStatusDao.Select([]grmi.Predicate{ + meta.SerialOrderStatus_SerialOrderId.NewPredicate(grmi.Include, serialOrderIdLi...), + }, nil) + if err != nil { + return grmi.NewBusinessError("查询工单状态失败, 错误:" + err.Error()) + } + poLi, err := slavePoDao.Select([]grmi.Predicate{ + meta.SerialOrderPOLst_SerialOrderId.NewPredicate(grmi.Include, serialOrderIdLi...), + }, nil) + if err != nil { + return grmi.NewBusinessError("查询工单工序失败, 错误:" + err.Error()) + } + stepLi, err := slaveStepDao.Select([]grmi.Predicate{ + meta.SerialOrderStepLst_SerialOrderId.NewPredicate(grmi.Include, serialOrderIdLi...), + }, nil) + if err != nil { + return grmi.NewBusinessError("查询工单工步失败, 错误:" + err.Error()) + } + opDetailLi, err := slaveOpDetailDao.Select([]grmi.Predicate{ + meta.SerialOrderOPDetail_SerialOrderId.NewPredicate(grmi.Include, serialOrderIdLi...), + }, []grmi.Field{meta.SerialOrderOPDetail_DetailId}) + if err != nil { + return grmi.NewBusinessError("查询工单工艺失败, 错误:" + err.Error()) + } + for index, opDetail := range opDetailLi { + opDetail.DetailId = 0 + opDetailLi[index] = opDetail + } + if err = session.Begin(); err != nil { + return grmi.NewBusinessError("开启事务失败") + } + defer func() { + if err != nil { + _ = session.Rollback() + } else { + _ = session.Commit() + } + }() + if err = slaveSession.Begin(); err != nil { + return grmi.NewBusinessError("开启事务失败") + } + defer func() { + if err != nil { + _ = slaveSession.Rollback() + } else { + _ = slaveSession.Commit() + } + }() + err = orderDao.Insert(&recoverSerialOrderLi) + if err != nil { + return grmi.NewBusinessError("恢复到生产库失败, 错误:" + err.Error()) + } + err = statusDao.Insert(&statusLi) + if err != nil { + return grmi.NewBusinessError("恢复到生产库失败, 错误:" + err.Error()) + } + err = poDao.Insert(&poLi) + if err != nil { + return grmi.NewBusinessError("恢复到生产库失败, 错误:" + err.Error()) + } + err = stepDao.Insert(&stepLi) + if err != nil { + return grmi.NewBusinessError("恢复到生产库失败, 错误:" + err.Error()) + } + err = opDetailDao.Insert(&opDetailLi) + if err != nil { + return grmi.NewBusinessError("恢复到生产库失败, 错误:" + err.Error()) + } + err = slaveOrderDao.DeleteWhere([]grmi.Predicate{ + meta.SerialOrder_SerialOrderId.NewPredicate(grmi.Include, serialOrderIdLi...), + }) + if err != nil { + return grmi.NewBusinessError("删除备份库数据失败, 错误:" + err.Error()) + } + err = slaveStatusDao.DeleteWhere([]grmi.Predicate{ + meta.SerialOrderStatus_SerialOrderId.NewPredicate(grmi.Include, serialOrderIdLi...), + }) + if err != nil { + return grmi.NewBusinessError("删除备份库数据失败, 错误:" + err.Error()) + } + err = slavePoDao.DeleteWhere([]grmi.Predicate{ + meta.SerialOrderPOLst_SerialOrderId.NewPredicate(grmi.Include, serialOrderIdLi...), + }) + if err != nil { + return grmi.NewBusinessError("删除备份库数据失败, 错误:" + err.Error()) + } + err = slaveStepDao.DeleteWhere([]grmi.Predicate{ + meta.SerialOrderStepLst_SerialOrderId.NewPredicate(grmi.Include, serialOrderIdLi...), + }) + if err != nil { + return grmi.NewBusinessError("删除备份库数据失败, 错误:" + err.Error()) + } + err = slaveOpDetailDao.DeleteWhere([]grmi.Predicate{ + meta.SerialOrderOPDetail_SerialOrderId.NewPredicate(grmi.Include, serialOrderIdLi...), + }) + if err != nil { + return grmi.NewBusinessError("删除备份库数据失败, 错误:" + err.Error()) + } + return nil } \ No newline at end of file diff --git a/web/controllers/om/SerialOrder.rest.go b/web/controllers/om/SerialOrder.rest.go index 654fd87..53ba4d4 100644 --- a/web/controllers/om/SerialOrder.rest.go +++ b/web/controllers/om/SerialOrder.rest.go @@ -1299,6 +1299,31 @@ func RegisterGetProductTraceDataReport(party router.Party, path string, method f // RegisterBreakUp 骨架拆解 func RegisterBreakUp(party router.Party, path string, method func(user *global.User, barcode string) (err error)) { + party.Post(path, func(ctx iris.Context) { + user, ok := jwts.ParseToken(ctx) + if !ok { + return + } + type Req struct { + Barcode string `json:"barcode"` + } + var data Req + if err := ctx.ReadJSON(&data); err != nil { + supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil) + return + } + err := method(user, data.Barcode) + if err != nil { + supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil) + return + } + supports.Ok(ctx, supports.OptionSuccess, nil) + }) +} + +// RegisterExtractArchiveData 从备份库提取工单数据到生产库 +func RegisterExtractArchiveData(party router.Party, path string, method func(user *global.User, serialOrderId string) (err error) ) { + party.Post(path, func(ctx iris.Context) { user, ok := jwts.ParseToken(ctx) if !ok { diff --git a/web/controllers/om/om.go b/web/controllers/om/om.go index e6f664d..e5d04ac 100644 --- a/web/controllers/om/om.go +++ b/web/controllers/om/om.go @@ -237,6 +237,8 @@ func RegisterRoutes() { RegisterBreakUp(serialorder, "/breakup", serviceOfSerialOrder.BreakUp) // serialOrder 座椅返厂不返修 RegisterBreakUp(serialorder, "/returnfactorywithoutrepair", serviceOfSerialOrder.ReturnToFactoryWithoutRepair) + // serialOrder 从备份库提取工单数据到生产库 + RegisterExtractArchiveData(serialorder, "/extract", serviceOfSerialOrder.ExtractArchiveData) // SerialOrderStatus的路由组 serialorderstatus := party.Party("/serialorderstatus")