// Copyright (c) Shenyang Leading Edge Intelligent Technology Co., Ltd. All rights reserved. package implments import ( "fmt" baseDal "leit.com/LAPP_CHEERSSON_BACKEND/dao/base" dal "leit.com/LAPP_CHEERSSON_BACKEND/dao/me" "leit.com/LAPP_CHEERSSON_BACKEND/db" "leit.com/LAPP_CHEERSSON_BACKEND/global" "leit.com/LAPP_CHEERSSON_BACKEND/grmi" meta "leit.com/LAPP_CHEERSSON_BACKEND/meta/me" baseModel "leit.com/LAPP_CHEERSSON_BACKEND/models/base" model "leit.com/LAPP_CHEERSSON_BACKEND/models/me" "leit.com/LAPP_CHEERSSON_BACKEND/utils" ) /****************************************************************************** * * @Description : BomLst的默认查询条件 * * @Author : 代码生成器创建 * * @Date : 2021-08-09 14:13:50 * ******************************************************************************/ var DefaultConditionOfBomLst = grmi.NewCondition( map[string]grmi.ConditionItem{ meta.BomLst_BomId.UrlParameterName: grmi.NewConditionItem(meta.BomLst_BomId, grmi.Equal, true), meta.BomLst_FmatNr.UrlParameterName: grmi.NewConditionItem(meta.BomLst_FmatNr, grmi.Equal, true), meta.BomLst_CmatNr.UrlParameterName: grmi.NewConditionItem(meta.BomLst_CmatNr, grmi.Equal, true), meta.BomLst_FmatName.UrlParameterName: grmi.NewConditionItem(meta.BomLst_FmatName, grmi.Equal, false), meta.BomLst_FmatSpec.UrlParameterName: grmi.NewConditionItem(meta.BomLst_FmatSpec, grmi.Equal, false), meta.BomLst_FmatQty.UrlParameterName: grmi.NewConditionItem(meta.BomLst_FmatQty, grmi.Equal, false), meta.BomLst_FmatUom.UrlParameterName: grmi.NewConditionItem(meta.BomLst_FmatUom, grmi.Equal, false), meta.BomLst_CmatName.UrlParameterName: grmi.NewConditionItem(meta.BomLst_CmatName, grmi.Equal, false), meta.BomLst_CmatQty.UrlParameterName: grmi.NewConditionItem(meta.BomLst_CmatQty, grmi.Equal, false), meta.BomLst_CmatUom.UrlParameterName: grmi.NewConditionItem(meta.BomLst_CmatUom, grmi.Equal, false), meta.BomLst_CmatType.UrlParameterName: grmi.NewConditionItem(meta.BomLst_CmatType, grmi.Equal, false), meta.BomLst_Position.UrlParameterName: grmi.NewConditionItem(meta.BomLst_Position, grmi.Equal, false), meta.BomLst_LeadTime.UrlParameterName: grmi.NewConditionItem(meta.BomLst_LeadTime, grmi.Equal, false), meta.BomLst_TimeUom.UrlParameterName: grmi.NewConditionItem(meta.BomLst_TimeUom, grmi.Equal, false), meta.BomLst_LossRate.UrlParameterName: grmi.NewConditionItem(meta.BomLst_LossRate, grmi.Equal, false), meta.BomLst_BackFlushItem.UrlParameterName: grmi.NewConditionItem(meta.BomLst_BackFlushItem, grmi.Equal, false), meta.BomLst_CriticalItem.UrlParameterName: grmi.NewConditionItem(meta.BomLst_CriticalItem, grmi.Equal, false), meta.BomLst_ValidFrom.UrlParameterName: grmi.NewConditionItem(meta.BomLst_ValidFrom, grmi.Equal, false), meta.BomLst_ValidTo.UrlParameterName: grmi.NewConditionItem(meta.BomLst_ValidTo, grmi.Equal, false), meta.BomLst_BomlstCval1.UrlParameterName: grmi.NewConditionItem(meta.BomLst_BomlstCval1, grmi.Equal, false), meta.BomLst_BomlstCval2.UrlParameterName: grmi.NewConditionItem(meta.BomLst_BomlstCval2, grmi.Equal, false), meta.BomLst_BomlstIval1.UrlParameterName: grmi.NewConditionItem(meta.BomLst_BomlstIval1, grmi.Equal, false), meta.BomLst_BomlstIval2.UrlParameterName: grmi.NewConditionItem(meta.BomLst_BomlstIval2, grmi.Equal, false), meta.BomLst_LevelNr.UrlParameterName: grmi.NewConditionItem(meta.BomLst_LevelNr, grmi.Equal, false), meta.BomLst_LastModify.UrlParameterName: grmi.NewConditionItem(meta.BomLst_LastModify, grmi.Approximate, false), meta.BomLst_LastUser.UrlParameterName: grmi.NewConditionItem(meta.BomLst_LastUser, grmi.Equal, false), meta.BomLst_CreateTime.UrlParameterName: grmi.NewConditionItem(meta.BomLst_CreateTime, grmi.Approximate, false), }, nil, ) /****************************************************************************** * * @Description : BomLst的默认分页查询条件 * * @Author : 代码生成器创建 * * @Date : 2021-08-09 14:13:50 * ******************************************************************************/ var DefaultConditionOfBomLstAndPaging = grmi.NewCondition( DefaultConditionOfBomLst.Items, grmi.NewPaging(), ) /****************************************************************************** * * @Struct Name : BomLstServiceImplement *----------------------------------------------------------------------------- * * @Description : BomLst的服务实现 * * @Author : 代码生成器创建 * * @Date : 2021-08-09 14:13:50 * ******************************************************************************/ type BomLstServiceImplement struct { } /****************************************************************************** * * @Function Name : NewBomLstDAOImplement *----------------------------------------------------------------------------- * * @Description : 创建一个BomLstDAOImplement实例 * * @Return Value : BomLstDAOImplement实例 * * @Author : 代码生成器创建 * * @Date : 2021-08-09 14:13:50 * ******************************************************************************/ func NewBomLstServiceImplement() *BomLstServiceImplement { return &BomLstServiceImplement{} } func (impl *BomLstServiceImplement) ImportBomList(response map[int][][]interface{}) { grmi.Log(nil, "/services/me/implments/BomLst.service.impl.go", "ImportBomList", "导入bomlist") engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() if err := session.Begin(); err != nil { fmt.Println(err.Error()) return } dao := dal.NewBomLstDAO(session, baseModel.PlantNr, "System") articleDao := baseDal.NewArticleDAO(session, baseModel.PlantNr, "System") headDao := dal.NewBomHeadDAO(session, baseModel.PlantNr, "System") articleMap := make(map[string]baseModel.Article) sonArticleMap := make(map[string]baseModel.Article) headMap := make(map[string]*model.BomHead) _ = session.Begin() var dataArr []model.BomLst var headArr []model.BomHead for _, v := range response { for k, _v := range v { //查询物料 if _, ok := articleMap[utils.ValueToString(_v[15], "")]; !ok { _article, err := articleDao.SelectOne(utils.ValueToString(_v[15], "")) if err != nil || _article == nil { continue } articleMap[utils.ValueToString(_v[15], "")] = *_article sonArticleMap[utils.ValueToString(_v[15], "")] = *_article } else { if k == 0 { //不存重复物料bom break } } _article := articleMap[utils.ValueToString(_v[15], "")] if k == 0 { //先删除零件下所有bom _ = dao.DeleteWhere([]grmi.Predicate{ meta.BomLst_BomId.NewPredicate(grmi.Equal, _article.ArtId), }) //查询head _headInfo := &model.BomHead{} if _info, ok := headMap[_article.ArtId]; ok { _headInfo = _info } else { _info, err := headDao.SelectOne(_article.ArtId) if err != nil { continue } _headInfo = _info } if _headInfo == nil { _headInfo = &model.BomHead{ PlantNr: baseModel.PlantNr, BomId: _article.ArtId, MatNr: _article.ArtId, Descr: _article.Descr1, } headMap[_article.ArtId] = _headInfo headArr = append(headArr, *_headInfo) } } //子物料 if _, ok := sonArticleMap[utils.ValueToString(_v[16], "")]; !ok { _article, err := articleDao.SelectOne(utils.ValueToString(_v[16], "")) if err != nil || _article == nil { continue } sonArticleMap[utils.ValueToString(_v[16], "")] = *_article } _sonArticel := sonArticleMap[utils.ValueToString(_v[16], "")] //插入 dataArr = append(dataArr, model.BomLst{ PlantNr: baseModel.PlantNr, BomId: _article.ArtId, FmatNr: _article.ArtId, FmatName: _article.Descr1, FmatSpec: _article.ArtSpec2, FmatQty: 1, FmatUom: utils.ValueToString(_v[17], ""), CmatNr: _sonArticel.ArtId, CmatName: _sonArticel.Descr1, CmatQty: utils.ValueToFloat(_v[6], 0) / utils.ValueToFloat(_v[7], 0), CmatUom: utils.ValueToString(_v[18], ""), CmatType: utils.ValueToString(_v[9], ""), Position: utils.ValueToInt(_v[12], 0), TimeUom: utils.ValueToString(_v[10], ""), LossRate: utils.ValueToFloat(_v[11], 0), ValidFrom: utils.ValueToString(_v[13], ""), ValidTo: utils.ValueToString(_v[14], ""), }) } } _ = session.Begin() //写入数据库 if len(dataArr) > 20 { var _detail []model.BomLst for k, v := range dataArr { _detail = append(_detail, v) if (k > 0 && k%20 == 0) || k+1 == len(dataArr) { err := dao.Insert(&_detail) if err != nil { _ = session.Rollback() panic(err.Error()) } _detail = []model.BomLst{} } } } else { err := dao.Insert(&dataArr) if err != nil { _ = session.Rollback() panic(err) } } if len(headArr) > 20 { var _detail []model.BomHead for k, v := range headArr { _detail = append(_detail, v) if (k > 0 && k%20 == 0) || k+1 == len(headArr) { err := headDao.Insert(&_detail) if err != nil { _ = session.Rollback() panic(err.Error()) } _detail = []model.BomHead{} } } } else { err := headDao.Insert(&headArr) if err != nil { _ = session.Rollback() } } _ = session.Commit() } /****************************************************************************** * * @Reference LAPP_GAAS_GFrame_BACKEND/services/me/BomLstService.InsertOne * ******************************************************************************/ func (impl *BomLstServiceImplement) InsertOne(user *global.User, entity *model.BomLst) error { grmi.Log(user, "/services/me/implments/BomLst.service.impl.go", "InsertOneBomLst", "插入一个BomLst") engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() if err := session.Begin(); err != nil { fmt.Println(err.Error()) return err } dao := dal.NewBomLstDAO(session, user.PlantNr, user.UserId) headDao := dal.NewBomHeadDAO(session, user.PlantNr, user.UserId) record, err := dao.SelectOne(entity.BomId, entity.FmatNr, entity.CmatNr) if err != nil { return err } if record != nil { _ = session.Rollback() return grmi.NewBusinessError("已经存在相同主键的记录!") } err = dao.InsertOne(entity) if err != nil { _ = session.Rollback() return err } articleDao := baseDal.NewArticleDAO(session, user.PlantNr, user.UserId) article, err := articleDao.SelectOne(entity.FmatNr) if err != nil { _ = session.Rollback() return grmi.NewBusinessError("查询物料数据失败, error:" + err.Error()) } if article == nil { _ = session.Rollback() return grmi.NewBusinessError("不存在对应的物料数据") } //if article.ArtSpec1 != baseModel.ART_TYPE_FINISHED && article.ArtSpec1 != baseModel.ART_TYPE_VIRTUAL { // _ = session.Rollback() // return grmi.NewBusinessError("传递的物料不是总成或虚拟物料ID,artId:" + article.ArtId) //} article2, err := articleDao.SelectOne(entity.CmatNr) if err != nil { _ = session.Rollback() return grmi.NewBusinessError("查询物料数据失败, error:" + err.Error()) } if article2 == nil { _ = session.Rollback() return grmi.NewBusinessError("不存在对应的物料数据") } //if article.ArtSpec1 == baseModel.ART_TYPE_VIRTUAL{ // if article2.ArtSpec1 != baseModel.ART_TYPE_FINISHED { // _ = session.Rollback() // return grmi.NewBusinessError("传递的子物料不是总成, artId:" + article2.ArtId) // } //} else { // if article2.ArtSpec1 == baseModel.ART_TYPE_FINISHED || article2.ArtSpec1 == baseModel.ART_TYPE_VIRTUAL { // _ = session.Rollback() // return grmi.NewBusinessError("传递的物料是总成或虚拟物料ID, artId:" + article2.ArtId) // } //} if entity.FmatNr == entity.CmatNr || entity.CmatNr == entity.BomId { _ = session.Rollback() return grmi.NewBusinessError("上级和下级物料ID相同") } bomHead, err := headDao.SelectOne(entity.BomId) if err != nil { _ = session.Rollback() return err } if bomHead == nil { article, err := articleDao.SelectOne(entity.BomId) if err != nil { _ = session.Rollback() return err } if article == nil { _ = session.Rollback() return grmi.NewBusinessError("总成不存在") } if article.ArtTypeId != baseModel.ART_TYPE_FINISHED { _ = session.Rollback() return grmi.NewBusinessError("传递的物料不是成品!") } headData := model.BomHead{ BomId: entity.BomId, MatNr: entity.BomId, Descr: article.Descr1, } err = headDao.InsertOne(&headData) if err != nil { _ = session.Rollback() return err } } _ = session.Commit() return nil } /****************************************************************************** * * @Reference LAPP_GAAS_GFrame_BACKEND/services/me/BomLstService.DeleteOne * ******************************************************************************/ func (impl *BomLstServiceImplement) DeleteOne(user *global.User, bomId string, fmatNr string, cmatNr string) error { grmi.Log(user, "/services/me/implments/BomLst.service.impl.go", "DeleteOneBomLst", "删除一个BomLst") engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() if err := session.Begin(); err != nil { return err } dao := dal.NewBomLstDAO(session, user.PlantNr, user.UserId) headDao := dal.NewBomHeadDAO(session, user.PlantNr, user.UserId) record, err := dao.SelectOne(bomId, fmatNr, cmatNr) if err != nil { _ = session.Rollback() return err } if record == nil { _ = session.Rollback() return grmi.NewBusinessError("不存在指定记录!") } err = dao.DeleteOne(bomId, fmatNr, cmatNr) if err != nil { _ = session.Rollback() return err } lstLi, err := dao.Select([]grmi.Predicate{meta.BomLst_BomId.NewPredicate(grmi.Equal, bomId)}, nil) if err != nil { _ = session.Rollback() return err } if len(lstLi) == 0 { err = headDao.DeleteOne(bomId) if err != nil { _ = session.Rollback() return err } } _ = session.Commit() return nil } /****************************************************************************** * * @Reference LAPP_GAAS_GFrame_BACKEND/services/me/BomLstService.SelectOne * ******************************************************************************/ func (impl *BomLstServiceImplement) SelectOne(user *global.User, bomId string, fmatNr string, cmatNr string) (*model.BomLst, error) { grmi.Log(user, "/services/me/implments/BomLst.service.impl.go", "SelectOneBomLst", "查询一个BomLst") engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() dao := dal.NewBomLstDAO(session, user.PlantNr, user.UserId) result, err := dao.SelectOne(bomId, fmatNr, cmatNr) if err != nil { return nil, err } return result, nil } /****************************************************************************** * * @Reference LAPP_GAAS_GFrame_BACKEND/services/me/BomLstService.UpdateOne * ******************************************************************************/ func (impl *BomLstServiceImplement) UpdateOne(user *global.User, entity *model.BomLst) error { grmi.Log(user, "/services/me/implments/BomLst.service.impl.go", "UpdateOneBomLst", "修改一个BomLst") engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() dao := dal.NewBomLstDAO(session, user.PlantNr, user.UserId) record, err := dao.SelectOne(entity.BomId, entity.FmatNr, entity.CmatNr) if err != nil { return err } if record == nil { return grmi.NewBusinessError("不存在指定记录!") } err = dao.UpdateOne(entity) if err != nil { return err } return nil } /****************************************************************************** * * @Reference LAPP_GAAS_GFrame_BACKEND/services/me/BomLstService.Insert * ******************************************************************************/ func (impl *BomLstServiceImplement) Insert(user *global.User, entities *[]model.BomLst) error { grmi.Log(user, "/services/me/implments/BomLst.service.impl.go", "InsertBomLst", "插入多个BomLst") engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() dao := dal.NewBomLstDAO(session, user.PlantNr, user.UserId) for _, entity := range *entities { record, err := dao.SelectOne(entity.BomId, entity.FmatNr, entity.CmatNr) if err != nil { return err } if record != nil { return grmi.NewBusinessError("已经存在相同主键的记录!") } } err := dao.Insert(entities) if err != nil { return err } return nil } /****************************************************************************** * * @Reference LAPP_GAAS_GFrame_BACKEND/services/me/BomLstService.Delete * ******************************************************************************/ func (impl *BomLstServiceImplement) Delete(user *global.User, entities *[]model.BomLst) error { grmi.Log(user, "/services/me/implments/BomLst.service.impl.go", "DeleteBomLst", "删除多个BomLst") engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() dao := dal.NewBomLstDAO(session, user.PlantNr, user.UserId) for _, entity := range *entities { record, err := dao.SelectOne(entity.BomId, entity.FmatNr, entity.CmatNr) if err != nil { return err } if record == nil { return grmi.NewBusinessError("不存在指定记录!") } } err := dao.Delete(entities) if err != nil { return err } return nil } /****************************************************************************** * * @Reference leit.com/LAPP_CHEERSSON_BACKEND/services/me/BomLstService.Select * ******************************************************************************/ func (impl *BomLstServiceImplement) Select(user *global.User, urlParameters map[string]string) ([]model.BomLst, error) { grmi.Log(user, "/services/me/implments/BomLst.service.impl.go", "SelectBomLst", "查询BomLst") condition := DefaultConditionOfBomLstAndPaging engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() predicates, err := condition.BuildPredicates(urlParameters) if err != nil { return nil, err } dao := dal.NewBomLstDAO(session, user.PlantNr, user.UserId) result, err := dao.Select(predicates, condition.OrderByFields) if err != nil { return nil, err } return result, nil } /****************************************************************************** * * @Reference leit.com/LAPP_CHEERSSON_BACKEND/services/me/BomLstService.SelectAndPaging * ******************************************************************************/ func (impl *BomLstServiceImplement) SelectAndPaging(user *global.User, urlParameters map[string]string) (grmi.PagingResult, error) { grmi.Log(user, "/services/me/implments/BomLst.service.impl.go", "SelectBomLst", "查询BomLst") condition := DefaultConditionOfBomLstAndPaging engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() predicates, err := condition.BuildPredicates(urlParameters) if err != nil { return grmi.EmptyPagingResult, err } dao := dal.NewBomLstDAO(session, user.PlantNr, user.UserId) condition.Fill(urlParameters) result, err := dao.SelectAndPaging(condition.Paging, predicates, condition.OrderByFields) if err != nil { return grmi.EmptyPagingResult, err } return result, nil } /****************************************************************************** * * @Reference LAPP_ACURA_MOM_BACKEND/services/me/BomLstService.Update * ******************************************************************************/ func (impl *BomLstServiceImplement) Update(user *global.User, entities *[]model.BomLst) error { grmi.Log(user, "/services/me/implments/BomLst.service.impl.go", "UpdateBomLst", "修改多个BomLst") engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() dao := dal.NewBomLstDAO(session, user.PlantNr, user.UserId) for _, entity := range *entities { record, err := dao.SelectOne(entity.BomId, entity.FmatNr, entity.CmatNr) if err != nil { return err } if record == nil { return grmi.NewBusinessError("不存在指定记录!") } } err := dao.Update(entities) if err != nil { return err } return nil }