苏州瑞玛APS项目web后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

587 lines
20 KiB

// 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
}