广汽安道拓Acura项目MES后台
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.
 
 

765 lines
27 KiB

// Copyright (c) Shenyang Leading Edge Intelligent Technology Co., Ltd. All rights reserved.
package implments
import (
dal "LAPP_ACURA_MOM_BACKEND/dao/wm"
"LAPP_ACURA_MOM_BACKEND/db"
"LAPP_ACURA_MOM_BACKEND/global"
"LAPP_ACURA_MOM_BACKEND/grmi"
meta "LAPP_ACURA_MOM_BACKEND/meta/wm"
model "LAPP_ACURA_MOM_BACKEND/models/wm"
"LAPP_ACURA_MOM_BACKEND/utils"
"fmt"
"time"
)
/******************************************************************************
*
* @Description : InventoryCheckHead的默认查询条件
*
* @Author : 代码生成器创建
*
* @Date : 2021-06-29 10:57:04
*
******************************************************************************/
var DefaultConditionOfInventoryCheckHead = grmi.NewCondition(
map[string]grmi.ConditionItem{
meta.InventoryCheckHead_InventoryCheckId.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_InventoryCheckId, grmi.Equal, true),
meta.InventoryCheckHead_Descr.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_Descr, grmi.Equal, false),
meta.InventoryCheckHead_CheckDate.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_CheckDate, grmi.Approximate, false),
meta.InventoryCheckHead_CheckTime.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_CheckTime, grmi.Approximate, false),
meta.InventoryCheckHead_CheckType.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_CheckType, grmi.Equal, false),
meta.InventoryCheckHead_CheckPerson.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_CheckPerson, grmi.Equal, false),
meta.InventoryCheckHead_ICCtrlPara1.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_ICCtrlPara1, grmi.Equal, false),
meta.InventoryCheckHead_ICCtrlPara2.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_ICCtrlPara2, grmi.Equal, false),
meta.InventoryCheckHead_ICCtrlPara3.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_ICCtrlPara3, grmi.Equal, false),
meta.InventoryCheckHead_ICCtrlPara4.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_ICCtrlPara4, grmi.Equal, false),
meta.InventoryCheckHead_ICCtrlPara5.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_ICCtrlPara5, grmi.Equal, false),
meta.InventoryCheckHead_ICCtrlPara6.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_ICCtrlPara6, grmi.Equal, false),
meta.InventoryCheckHead_Status.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_Status, grmi.Equal, false),
meta.InventoryCheckHead_WareHouseId.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_WareHouseId, grmi.Equal, false),
meta.InventoryCheckHead_StorageAreaId.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_StorageAreaId, grmi.Equal, false),
meta.InventoryCheckHead_StorageRackId.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_StorageRackId, grmi.Equal, false),
meta.InventoryCheckHead_LastModify.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_LastModify, grmi.Approximate, false),
meta.InventoryCheckHead_LastUser.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_LastUser, grmi.Equal, false),
meta.InventoryCheckHead_CreateTime.UrlParameterName: grmi.NewConditionItem(meta.InventoryCheckHead_CreateTime, grmi.Approximate, false),
},
nil,
)
/******************************************************************************
*
* @Description : InventoryCheckHead的默认分页查询条件
*
* @Author : 代码生成器创建
*
* @Date : 2021-06-29 10:57:04
*
******************************************************************************/
var DefaultConditionOfInventoryCheckHeadAndPaging = grmi.NewCondition(
DefaultConditionOfInventoryCheckHead.Items,
grmi.NewPaging(),
)
/******************************************************************************
*
* @Struct Name : InventoryCheckHeadServiceImplement
*-----------------------------------------------------------------------------
*
* @Description : InventoryCheckHead的服务实现
*
* @Author : 代码生成器创建
*
* @Date : 2021-06-29 10:57:04
*
******************************************************************************/
type InventoryCheckHeadServiceImplement struct {
}
/******************************************************************************
*
* @Function Name : NewInventoryCheckHeadDAOImplement
*-----------------------------------------------------------------------------
*
* @Description : 创建一个InventoryCheckHeadDAOImplement实例
*
* @Return Value : InventoryCheckHeadDAOImplement实例
*
* @Author : 代码生成器创建
*
* @Date : 2021-06-29 10:57:04
*
******************************************************************************/
func NewInventoryCheckHeadServiceImplement() *InventoryCheckHeadServiceImplement {
return &InventoryCheckHeadServiceImplement{}
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/services/wm/InventoryCheckHeadService.InsertOne
*
******************************************************************************/
func (impl *InventoryCheckHeadServiceImplement) InsertOne(user *global.User, entity *model.InventoryCheckHead) error {
grmi.Log(user, "/services/wm/implments/InventoryCheckHead.service.impl.go", "InsertOneInventoryCheckHead", "插入一个InventoryCheckHead")
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
if err := session.Begin(); err != nil {
return err
}
dao := dal.NewInventoryCheckHeadDAO(session, user.UserId)
binDao := dal.NewStorageBinDAO(session, user.UserId)
daoWorkAreaUserLst := dal.NewWorkAreaUserLstDAO(session, user.UserId)
daoWorkArea := dal.NewWorkAreaDAO(session, user.UserId)
var workAreaCheck model.WorkAreaCheck
detailLi := entity.InventoryCheckDetailLi
if len(detailLi) == 0 {
_ = session.Rollback()
return grmi.NewBusinessError("未指定库位数据")
}
if entity.WareHouseId == "" || entity.StorageAreaId == "" || entity.StorageRackId == "" {
_ = session.Rollback()
return grmi.NewBusinessError("位置数据不完整")
}
for _, detail := range detailLi {
workAreaCheck.StorageBinIdList = utils.AddListOnce(workAreaCheck.StorageBinIdList, detail.StorageBinId)
workAreaCheck.WarehouseIdList = utils.AddListOnce(workAreaCheck.WarehouseIdList, detail.WarehouseId)
workAreaCheck.StorageAreaIdList = utils.AddListOnce(workAreaCheck.StorageAreaIdList, entity.StorageAreaId)
workAreaCheck.StorageRackIdList = utils.AddListOnce(workAreaCheck.StorageRackIdList, entity.StorageRackId)
bin, err := binDao.SelectOne(detail.StorageBinId, detail.WarehouseId)
if err != nil {
_ = session.Rollback()
return err
}
if bin == nil {
_ = session.Rollback()
return grmi.NewBusinessError("不存在选择的库位")
}
if bin.Status == model.BIN_STAUTS_CHECK {
_ = session.Rollback()
return grmi.NewBusinessError("该库位正在盘点中")
}
bin.Status = model.BIN_STAUTS_CHECK
err = binDao.UpdateOne(bin)
if err != nil {
_ = session.Rollback()
return err
}
}
if model.WM_AUTH_CHECK == model.WM_AUTH_CHECK_ON {
//权限
selectWorkAreaUserLst, err := daoWorkAreaUserLst.Select([]grmi.Predicate{meta.WorkAreaUserLst_UserId.NewPredicate(grmi.Equal, user.UserId)}, nil)
if err != nil {
session.Rollback()
return err
}
if len(selectWorkAreaUserLst) == 0 {
session.Rollback()
return nil
}
var workAreaList []*model.WorkArea
for _, info := range selectWorkAreaUserLst {
selectWorkArea, err := daoWorkArea.SelectOne(info.WorkAreaId)
if err != nil || selectWorkArea == nil {
continue
}
workAreaList = append(workAreaList, selectWorkArea)
}
err = model.WM_Check(workAreaCheck, workAreaList)
if err != nil {
session.Rollback()
fmt.Println(err)
return err
}
}
snr := new(models.Snrtab)
snr.Finr = user.PlantNr
checkId, err := snr.GetNextSnrWithSession(session, "Inventory")
if err != nil {
_ = session.Rollback()
return err
}
for k, _ := range entity.InventoryCheckDetailLi {
entity.InventoryCheckDetailLi[k].InventoryCheckId = checkId
entity.InventoryCheckDetailLi[k].ICDPos = k + 1
for k2, _ := range entity.InventoryCheckDetailLi[k].InventoryCheckLstLi {
entity.InventoryCheckDetailLi[k].InventoryCheckLstLi[k2].InventoryCheckId = checkId
entity.InventoryCheckDetailLi[k].InventoryCheckLstLi[k2].ICDPos = entity.InventoryCheckDetailLi[k].ICDPos
entity.InventoryCheckDetailLi[k].InventoryCheckLstLi[k2].ICLPos = k2 + 1
}
}
entity.CheckPerson = user.UserId
entity.CheckDate = grmi.Date(time.Now())
entity.CheckTime = grmi.DateTime(time.Now())
entity.InventoryCheckId = checkId
err = dao.InsertOne(entity)
if err != nil {
_ = session.Rollback()
return err
}
dao2 := dal.NewInventoryCheckDetailDAO(session, user.UserId)
err = dao2.Insert(&entity.InventoryCheckDetailLi)
if err != nil {
session.Rollback()
fmt.Println(err)
return err
}
_ = session.Commit()
return nil
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/services/wm/InventoryCheckHeadService.DeleteOne
*
******************************************************************************/
func (impl *InventoryCheckHeadServiceImplement) DeleteOne(user *global.User, inventoryCheckId string) error {
grmi.Log(user, "/services/wm/implments/InventoryCheckHead.service.impl.go", "DeleteOneInventoryCheckHead", "删除一个InventoryCheckHead")
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
if err := session.Begin(); err != nil {
return err
}
dao := dal.NewInventoryCheckHeadDAO(session, user.UserId)
detailDao := dal.NewInventoryCheckDetailDAO(session, user.UserId)
binDao := dal.NewStorageBinDAO(session, user.UserId)
daoWorkAreaUserLst := dal.NewWorkAreaUserLstDAO(session, user.UserId)
daoWorkArea := dal.NewWorkAreaDAO(session, user.UserId)
var workAreaCheck model.WorkAreaCheck
record, err := dao.SelectOne(inventoryCheckId)
if err != nil {
_ = session.Rollback()
return err
}
if record == nil {
_ = session.Rollback()
return grmi.NewBusinessError("不存在指定记录!")
}
if record.Status == model.CHECK_STATUS_Accomplish {
_ = session.Rollback()
return grmi.NewBusinessError("该盘点单已完成,不可以删除")
}
detailLi, err := detailDao.Select([]grmi.Predicate{meta.InventoryCheckDetail_InventoryCheckId.NewPredicate(grmi.Equal, inventoryCheckId)}, nil)
if err != nil {
_ = session.Rollback()
return err
}
pos := 1
for _, detail := range detailLi {
workAreaCheck.StorageBinIdList = utils.AddListOnce(workAreaCheck.StorageBinIdList, detail.StorageBinId)
workAreaCheck.WarehouseIdList = utils.AddListOnce(workAreaCheck.WarehouseIdList, detail.WarehouseId)
bin, err := binDao.SelectOne(detail.StorageBinId, detail.WarehouseId)
if err != nil {
_ = session.Rollback()
return err
}
if bin == nil {
_ = session.Rollback()
return grmi.NewBusinessError("盘点单中指定的库位不存在")
}
bin.Status = model.BIN_STATUS_ON
err = binDao.UpdateOne(bin)
if err != nil {
_ = session.Rollback()
return err
}
detail.ICDPos = pos
pos++
}
if model.WM_AUTH_CHECK == model.WM_AUTH_CHECK_ON {
//权限
selectWorkAreaUserLst, err := daoWorkAreaUserLst.Select([]grmi.Predicate{meta.WorkAreaUserLst_UserId.NewPredicate(grmi.Equal, user.UserId)}, nil)
if err != nil {
session.Rollback()
return err
}
if len(selectWorkAreaUserLst) == 0 {
session.Rollback()
return nil
}
var workAreaList []*model.WorkArea
for _, info := range selectWorkAreaUserLst {
selectWorkArea, err := daoWorkArea.SelectOne(info.WorkAreaId)
if err != nil || selectWorkArea == nil {
continue
}
workAreaList = append(workAreaList, selectWorkArea)
}
err = model.WM_Check(workAreaCheck, workAreaList)
if err != nil {
session.Rollback()
fmt.Println(err)
return err
}
}
err = detailDao.DeleteWhere([]grmi.Predicate{meta.InventoryCheckDetail_InventoryCheckId.NewPredicate(grmi.Equal, inventoryCheckId)})
if err != nil {
_ = session.Rollback()
return err
}
err = dao.DeleteOne(inventoryCheckId)
if err != nil {
_ = session.Rollback()
return err
}
_ = session.Commit()
return nil
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/services/wm/InventoryCheckHeadService.SelectOne
*
******************************************************************************/
func (impl *InventoryCheckHeadServiceImplement) SelectOne(user *global.User, inventoryCheckId string) (*model.InventoryCheckHead, error) {
grmi.Log(user, "/services/wm/implments/InventoryCheckHead.service.impl.go", "SelectOneInventoryCheckHead", "查询一个InventoryCheckHead")
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
dao := dal.NewInventoryCheckHeadDAO(session, user.UserId)
detailDao := dal.NewInventoryCheckDetailDAO(session, user.UserId)
lstDao := dal.NewInventoryCheckLstDAO(session, user.UserId)
result, err := dao.SelectOne(inventoryCheckId)
if err != nil {
return nil, err
}
if result == nil {
return nil, grmi.NewBusinessError("不存在查询的盘点单")
}
detailLi, err := detailDao.Select([]grmi.Predicate{meta.InventoryCheckDetail_InventoryCheckId.NewPredicate(grmi.Equal, result.InventoryCheckId)}, nil)
if err != nil {
return nil, err
}
for index, detail := range detailLi {
lstLi, err := lstDao.Select([]grmi.Predicate{meta.InventoryCheckLst_InventoryCheckId.NewPredicate(grmi.Equal, detail.InventoryCheckId, meta.InventoryCheckLst_ICDPos.NewPredicate(grmi.Equal, detail.ICDPos))}, nil)
if err != nil {
return nil, err
}
detail.InventoryCheckLstLi = lstLi
detailLi[index] = detail
}
result.InventoryCheckDetailLi = detailLi
return result, nil
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/services/wm/InventoryCheckHeadService.UpdateOne
*
******************************************************************************/
func (impl *InventoryCheckHeadServiceImplement) UpdateOne(user *global.User, entity *model.InventoryCheckHead) error {
grmi.Log(user, "/services/wm/implments/InventoryCheckHead.service.impl.go", "UpdateOneInventoryCheckHead", "修改一个InventoryCheckHead")
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
dao := dal.NewInventoryCheckHeadDAO(session, user.UserId)
record, err := dao.SelectOne(entity.InventoryCheckId)
if err != nil {
return err
}
if record == nil {
return grmi.NewBusinessError("不存在指定记录!")
}
err = dao.UpdateOne(entity)
if err != nil {
return err
}
return nil
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/services/wm/InventoryCheckHeadService.Insert
*
******************************************************************************/
func (impl *InventoryCheckHeadServiceImplement) Insert(user *global.User, entities *[]model.InventoryCheckHead) error {
grmi.Log(user, "/services/wm/implments/InventoryCheckHead.service.impl.go", "InsertInventoryCheckHead", "插入多个InventoryCheckHead")
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
dao := dal.NewInventoryCheckHeadDAO(session, user.UserId)
for _, entity := range *entities {
record, err := dao.SelectOne(entity.InventoryCheckId)
if err != nil {
return err
}
if record != nil {
return grmi.NewBusinessError("已经存在相同主键的记录!")
}
}
err := dao.Insert(entities)
if err != nil {
return err
}
return nil
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/services/wm/InventoryCheckHeadService.Delete
*
******************************************************************************/
func (impl *InventoryCheckHeadServiceImplement) Delete(user *global.User, entities *[]model.InventoryCheckHead) error {
grmi.Log(user, "/services/wm/implments/InventoryCheckHead.service.impl.go", "DeleteInventoryCheckHead", "删除多个InventoryCheckHead")
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
dao := dal.NewInventoryCheckHeadDAO(session, user.UserId)
for _, entity := range *entities {
record, err := dao.SelectOne(entity.InventoryCheckId)
if err != nil {
return err
}
if record == nil {
return grmi.NewBusinessError("不存在指定记录!")
}
}
err := dao.Delete(entities)
if err != nil {
return err
}
return nil
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/services/wm/InventoryCheckHeadService.Select
*
******************************************************************************/
func (impl *InventoryCheckHeadServiceImplement) Select(user *global.User, urlParameters map[string]string) (interface{}, error) {
grmi.Log(user, "/services/wm/implments/InventoryCheckHead.service.impl.go", "SelectInventoryCheckHead", "查询InventoryCheckHead")
condition := DefaultConditionOfInventoryCheckHeadAndPaging
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
predicates, err := condition.BuildPredicates(urlParameters)
if err != nil {
return nil, err
}
dao := dal.NewInventoryCheckHeadDAO(session, user.UserId)
if condition.Fill(urlParameters) {
result, err := dao.SelectAndPaging(condition.Paging, predicates, condition.OrderByFields)
if err != nil {
return nil, err
}
return result, nil
} else {
result, err := dao.Select(predicates, condition.OrderByFields)
if err != nil {
return nil, err
}
return result, nil
}
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/services/wm/InventoryCheckHeadService.Update
*
******************************************************************************/
func (impl *InventoryCheckHeadServiceImplement) Update(user *global.User, entities *[]model.InventoryCheckHead) error {
grmi.Log(user, "/services/wm/implments/InventoryCheckHead.service.impl.go", "UpdateInventoryCheckHead", "修改多个InventoryCheckHead")
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
dao := dal.NewInventoryCheckHeadDAO(session, user.UserId)
for _, entity := range *entities {
record, err := dao.SelectOne(entity.InventoryCheckId)
if err != nil {
return err
}
if record == nil {
return grmi.NewBusinessError("不存在指定记录!")
}
}
err := dao.Update(entities)
if err != nil {
return err
}
return nil
}
/******************************************************************************
*
* @Reference LAPP_ACURA_MOM_BACKEND/services/wm/InventoryCheckHeadService.AccomplishCheckHead
*
******************************************************************************/
func (impl *InventoryCheckHeadServiceImplement) AccomplishCheckHead(user *global.User, entity *model.InventoryCheckHead) error {
grmi.Log(user, "/services/wm/implments/InventoryCheckHead.service.impl.go", "AccomplishCheckHead", "完成盘点单")
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
if err := session.Begin(); err != nil {
return err
}
dao := dal.NewInventoryCheckHeadDAO(session, user.UserId)
detailDao := dal.NewInventoryCheckDetailDAO(session, user.UserId)
binDao := dal.NewStorageBinDAO(session, user.UserId)
lstDao := dal.NewInventoryCheckLstDAO(session, user.UserId)
bookDao := dal.NewInventoryBookDAO(session, user.UserId)
artDao := dal.NewArticleDAO(session, user.UserId)
replenishDao := dal.NewReplenishOrderDAO(session, user.UserId)
daoWorkAreaUserLst := dal.NewWorkAreaUserLstDAO(session, user.UserId)
daoWorkArea := dal.NewWorkAreaDAO(session, user.UserId)
var workAreaCheck model.WorkAreaCheck
record, err := dao.SelectOne(entity.InventoryCheckId)
if err != nil {
_ = session.Rollback()
return err
}
if record == nil {
_ = session.Rollback()
return grmi.NewBusinessError("不存在指定记录!")
}
if record.Status == model.CHECK_STATUS_Accomplish {
_ = session.Rollback()
return grmi.NewBusinessError("该盘点单已完成盘点")
}
originDetailLi, err := detailDao.Select([]grmi.Predicate{meta.InventoryCheckDetail_InventoryCheckId.NewPredicate(grmi.Equal, record.InventoryCheckId)}, nil)
if err != nil {
_ = session.Rollback()
return err
}
originDetailMap := make(map[int]interface{}, len(originDetailLi))
for _, detail := range originDetailLi {
originDetailMap[detail.ICDPos] = nil
}
detailLi := entity.InventoryCheckDetailLi
for _, detail := range detailLi {
_, exist := originDetailMap[detail.ICDPos]
if !exist {
_ = session.Rollback()
return grmi.NewBusinessError("数据中有盘点单中不存在的库位")
}
bin, err := binDao.SelectOne(detail.StorageBinId, detail.WarehouseId)
if err != nil {
_ = session.Rollback()
return err
}
if bin == nil {
_ = session.Rollback()
return grmi.NewBusinessError("盘点单中指定的库位不存在")
}
bin.Status = model.BIN_STATUS_ON
err = binDao.UpdateOne(bin)
if err != nil {
_ = session.Rollback()
return err
}
lstLi := detail.InventoryCheckLstLi
pos := 1
for index, lst := range lstLi {
workAreaCheck.StorageBinIdList = utils.AddListOnce(workAreaCheck.StorageBinIdList, lst.StorageBinId)
workAreaCheck.WarehouseIdList = utils.AddListOnce(workAreaCheck.WarehouseIdList, lst.WarehouseId)
workAreaCheck.StorageAreaIdList = utils.AddListOnce(workAreaCheck.StorageAreaIdList, entity.StorageAreaId)
workAreaCheck.StorageRackIdList = utils.AddListOnce(workAreaCheck.StorageRackIdList, entity.StorageRackId)
if lst.WarehouseId != detail.WarehouseId || lst.StorageBinId != detail.StorageBinId {
_ = session.Rollback()
return grmi.NewBusinessError("盘点库位详情数据与盘点库位不一致")
}
book, err := bookDao.SelectOne(lst.StorageBinId, lst.WarehouseId, lst.ArtId)
if err != nil {
_ = session.Rollback()
return err
}
if book == nil {
book = &model.InventoryBook{
StorageBinId: lst.StorageBinId,
WarehouseId: lst.WarehouseId,
ArtId: lst.ArtId,
StorageAreaId: bin.StorageAreaId,
StorageRackId: bin.StorageRackId,
ArtName: lst.ArtName,
ArtType: lst.ArtType,
QtyUom: lst.QtyUom,
}
err = bookDao.InsertOne(book)
if err != nil {
_ = session.Rollback()
return err
}
}
lst.OriginQty = book.Qty
lst.ICLPos = pos
pos++
if lst.ActQty == book.Qty {
lst.CheckResult = model.CHECK_RESULT_EQUAL
} else if lst.ActQty > book.Qty {
lst.CheckResult = model.CHECK_RESULT_MORE
} else {
lst.CheckResult = model.CHECK_RESULT_LESS
}
if lst.ActQty != book.Qty {
article, err := artDao.SelectOne(lst.ArtId)
if err != nil {
_ = session.Rollback()
return err
}
if article == nil {
_ = session.Rollback()
return grmi.NewBusinessError("不存在对应的物料")
}
article.Qty = article.Qty + (lst.ActQty - book.Qty)
err = artDao.UpdateOne(article)
if err != nil {
_ = session.Rollback()
return err
}
if article.Qty < article.ArticleReplenish.MinQty {
orderLi, err := replenishDao.Select([]grmi.Predicate{meta.ReplenishOrder_ArtId.NewPredicate(grmi.Equal, lst.ArtId), meta.ReplenishOrder_Status.NewPredicate(grmi.Equal, model.REPLENISH_ORDER_STATUS_ON)}, nil)
if err != nil {
_ = session.Rollback()
return err
}
if len(orderLi) == 0 {
snr := new(models.Snrtab)
snr.Finr = user.PlantNr
orderId, err := snr.GetNextSnrWithSession(session, "ReplenishOrder")
if err != nil {
_ = session.Rollback()
return err
}
replenishOrder := model.ReplenishOrder{
ReplenishId: orderId,
ArtId: lst.ArtId,
Qty: article.ArticleReplenish.ReplenishQty,
Uom: article.Uom,
ReplenishTime: grmi.DateTime(time.Now()),
ArtType: article.ArtType,
ArtName: article.Descr1,
Status: model.REPLENISH_ORDER_STATUS_ON,
}
err = replenishDao.InsertOne(&replenishOrder)
if err != nil {
_ = session.Rollback()
return err
}
}
}
}
book.Qty = lst.ActQty
book.LastCheckDate = grmi.DateTime(time.Now())
book.LastCheckPerson = user.UserId
err = bookDao.UpdateOne(book)
if err != nil {
_ = session.Rollback()
return err
}
lst.InventoryCheckId = entity.InventoryCheckId
lstLi[index] = lst
}
err = lstDao.Insert(&lstLi)
if err != nil {
_ = session.Rollback()
return err
}
}
if model.WM_AUTH_CHECK == model.WM_AUTH_CHECK_ON {
//权限
selectWorkAreaUserLst, err := daoWorkAreaUserLst.Select([]grmi.Predicate{meta.WorkAreaUserLst_UserId.NewPredicate(grmi.Equal, user.UserId)}, nil)
if err != nil {
session.Rollback()
return err
}
if len(selectWorkAreaUserLst) == 0 {
session.Rollback()
return nil
}
var workAreaList []*model.WorkArea
for _, info := range selectWorkAreaUserLst {
selectWorkArea, err := daoWorkArea.SelectOne(info.WorkAreaId)
if err != nil || selectWorkArea == nil {
continue
}
workAreaList = append(workAreaList, selectWorkArea)
}
err = model.WM_Check(workAreaCheck, workAreaList)
if err != nil {
session.Rollback()
fmt.Println(err)
return err
}
}
entity.Status = model.CHECK_STATUS_Accomplish
err = dao.UpdateOne(entity)
if err != nil {
_ = session.Rollback()
return err
}
_ = session.Commit()
return nil
}
func (impl *InventoryCheckHeadServiceImplement) ExportExcel(user *global.User, urlParameters map[string]string) (interface{}, error) {
grmi.Log(user, "/services/wm/implments/InventoryCheckHead.service.impl.go", "ExportExcel", "导出excel表")
condition := DefaultConditionOfInventoryCheckHeadAndPaging
engine := db.Eloquent.Master()
session := engine.NewSession()
defer session.Close()
predicates, err := condition.BuildPredicates(urlParameters)
if err != nil {
return nil, err
}
dao := dal.NewInventoryCheckHeadDAO(session, user.UserId)
//condition.OrderByFields = append(condition.OrderByFields, meta.InventoryCheckHead_InventoryCheckId)
result, err := dao.Select(predicates, condition.OrderByFields)
if err != nil {
return nil, err
}
temp := make([]interface{}, len(result))
for index, item := range result {
temp[index] = item
}
titleList := []string{}
filepath, err := grmi.SaveExcelFile(temp, titleList, "盘点", "盘点")
if err != nil {
return nil, grmi.NewBusinessError(fmt.Sprintf("导出报表失败,请重试, errors: %s", err.Error()))
}
return filepath, nil
}