using Apache.NMS;
|
using Newtonsoft.Json;
|
using Rhea.Common;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using Microsoft.AspNetCore.Mvc;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using Tiger.IBusiness;
|
using Tiger.Model;
|
using Tiger.Model.Entitys.WMS.DTOS;
|
using Tiger.IBusiness.WMS.T100ToWMS;
|
|
namespace Tiger.Business.WMS
|
{
|
public partial class BS
|
{
|
/// <summary>
|
/// 创建盘点单号
|
/// </summary>
|
/// <returns></returns>
|
public ApiAction CreateBillCode()
|
{
|
var action = new ApiAction();
|
|
Result ruleResult = Biz.CodeRule["PD001"].Generate("PD"); //iWMS.GetBillNoByType("CI");
|
if (!ruleResult.IsSuccessed)
|
{
|
throw new Exception(ruleResult.ExceptionMsg.Message);
|
}
|
|
|
action.Data = ruleResult.Data;
|
return action;
|
}
|
/// <summary>
|
/// 盘点单明细
|
/// </summary>
|
/// <param name="count"></param>
|
/// <returns></returns>
|
public ApiAction SummaryCount(WMS_COUNT count)
|
{
|
var action = new ApiAction();
|
|
var items = Biz.Db.Queryable<V_ITEM_COUNT>().Where(q => q.STATUS == WMS_ITEM.STATUSs.InStore.GetValue() && q.AUTH_ORG == count.AUTH_ORG)
|
.WhereIF(count.ItemCodeList.Any(), q => count.ItemCodeList.Contains(q.ITEM_CODE))
|
.Where(q => (count.WhIdList.Contains(q.WH_ID) || count.RegionIdList.Contains(q.REGION_ID) || count.ShelfIdList.Contains(q.SHELF_ID))).GroupBy(q => q.ITEM_CODE).Select(q => new
|
{
|
ITEM_CODE = q.ITEM_CODE,
|
ITEM_NAME = SqlFunc.AggregateMax(q.ITEM_NAME),
|
ITEM_DESC = SqlFunc.AggregateMax(q.ITEM_DESC),
|
QTY = SqlFunc.AggregateSum(q.QTY),
|
SN_COUNT = SqlFunc.AggregateCount(q.SN),
|
}).OrderBy(q => q.ITEM_CODE).ToList();
|
|
|
action.Data = items;
|
return action;
|
}
|
|
/// <summary>
|
/// 盘点单明细
|
/// </summary>
|
/// <param name="count"></param>
|
/// <param name="_data"></param>
|
/// <returns></returns>
|
public ApiAction GenerateCount(WMS_COUNT count, List<SaleOutInfoDetailDTO> _data)
|
{
|
var action = new ApiAction();
|
List<WMS_COUNT_MDTL> Count_mdtls = new();
|
List<WMS_COUNT_LDTL> Count_ldtls = new();
|
List<WMS_COUNT_SUM> Count_sums = new();
|
var startTime = DateTime.Now;
|
//物品明细
|
var mdtls = Biz.Db.Queryable<WMS_ITEM>().Where(q => q.STATUS == WMS_ITEM.STATUSs.InStore.GetValue())
|
.WhereIF(count.ItemCodeList.Any(), q => count.ItemCodeList.Contains(q.ITEM_CODE))
|
.Where(q => (count.WhIdList.Contains(q.WH_ID) || count.RegionIdList.Contains(q.REGION_ID) || count.ShelfIdList.Contains(q.SHELF_ID)))
|
.Select(q => new WMS_COUNT_MDTL()
|
{
|
CREATE_USER = count.CREATE_USER,
|
CREATE_TIME = DateTime.Now,
|
UPDATE_USER = count.UPDATE_USER,
|
UPDATE_TIME = DateTime.Now,
|
AUTH_ORG = count.AUTH_ORG,
|
COUNT_NO = count.COUNT_NO,
|
ITEM_CODE = q.ITEM_CODE,
|
SN = q.SN,
|
UNIT = q.UNIT,
|
QTY = q.QTY,
|
PROD_DATE = q.PROD_DATE,
|
FIRST_IN_DATE = q.FIRST_IN_DATE,
|
SUPP_CODE = q.SUPP_CODE,
|
SUPP_LOTNO = q.SUPP_LOTNO,
|
WH_ID = q.WH_ID,
|
REGION_ID = q.REGION_ID,
|
SHELF_ID = q.SHELF_ID,
|
LOCATION_ID = q.LOCATION_ID,
|
ERP_WH = q.ERP_WH,
|
})
|
.OrderBy(q => q.ITEM_CODE).ToList();
|
if (mdtls.Count > 0)
|
{
|
Count_mdtls = mdtls;
|
}
|
//储位明细
|
var ldtls = Biz.Db.Queryable<WMS_ITEM>().Where(q => q.STATUS == WMS_ITEM.STATUSs.InStore.GetValue())
|
.WhereIF(count.ItemCodeList.Any(), q => count.ItemCodeList.Contains(q.ITEM_CODE))
|
.Where(q => (count.WhIdList.Contains(q.WH_ID) || count.RegionIdList.Contains(q.REGION_ID) || count.ShelfIdList.Contains(q.SHELF_ID)))
|
.GroupBy(q => new { q.ITEM_CODE, q.WH_ID, q.REGION_ID, q.SHELF_ID, q.LOCATION_ID, q.ERP_WH })
|
.Select(q => new WMS_COUNT_LDTL()
|
{
|
CREATE_USER = count.CREATE_USER,
|
CREATE_TIME = DateTime.Now,
|
UPDATE_USER = count.UPDATE_USER,
|
UPDATE_TIME = DateTime.Now,
|
COUNT_NO = count.COUNT_NO,
|
AUTH_ORG = count.AUTH_ORG,
|
WH_ID = q.WH_ID,
|
SHELF_ID = q.SHELF_ID,
|
REGION_ID = q.REGION_ID,
|
LOCATION_ID = q.LOCATION_ID,
|
ERP_WH = q.ERP_WH,
|
ITEM_CODE = q.ITEM_CODE,
|
UNIT = SqlFunc.AggregateMax(q.UNIT),
|
SN_QTY = SqlFunc.AggregateCount(q.SN),
|
QTY = SqlFunc.AggregateSum(q.QTY),
|
}).OrderBy(q => q.ITEM_CODE).ToList();
|
if (ldtls.Count() > 0)
|
{
|
Count_ldtls = ldtls;
|
}
|
//结果明细
|
var sums = Biz.Db.Queryable<WMS_ITEM>().Where(q => q.STATUS == WMS_ITEM.STATUSs.InStore.GetValue())
|
.WhereIF(count.ItemCodeList.Any(), q => count.ItemCodeList.Contains(q.ITEM_CODE))
|
.Where(q => (count.WhIdList.Contains(q.WH_ID) || count.RegionIdList.Contains(q.REGION_ID) || count.ShelfIdList.Contains(q.SHELF_ID)))
|
.GroupBy(q => new { q.ITEM_CODE, q.ERP_WH })
|
.Select(q => new WMS_COUNT_SUM()
|
{
|
CREATE_USER = count.CREATE_USER,
|
CREATE_TIME = DateTime.Now,
|
UPDATE_USER = count.UPDATE_USER,
|
UPDATE_TIME = DateTime.Now,
|
AUTH_ORG = count.AUTH_ORG,
|
COUNT_NO = count.COUNT_NO,
|
ERP_WH = q.ERP_WH,
|
ITEM_CODE = q.ITEM_CODE,
|
UNIT = SqlFunc.AggregateMax(q.UNIT),
|
QTY = SqlFunc.AggregateSum(q.QTY),
|
SN_QTY = SqlFunc.AggregateCount(q.SN),
|
}).OrderBy(q => q.ITEM_CODE).ToList();
|
//t100库存数量
|
|
//var t100_sums = _stockBus.GetStockInfo(_data);
|
|
|
|
if (sums.Count > 0)
|
{
|
foreach (var sum in sums)
|
{
|
foreach (var item in _data)
|
{
|
if (sum.ITEM_CODE == item.inag001 && sum.ERP_WH == item.inag004)
|
{
|
sum.ERP_QTY = item.inag009;
|
}
|
}
|
}
|
Count_sums = sums;
|
}
|
|
//保存数据库
|
var startSaveTime = DateTime.Now;
|
var db = Biz.Db;
|
var dbTran = db.UseTran(() =>
|
{
|
db.Deleteable<WMS_COUNT_LDTL>(false).Where(q => q.COUNT_NO == count.COUNT_NO).ExecuteCommand();
|
db.Deleteable<WMS_COUNT_MDTL>(false).Where(q => q.COUNT_NO == count.COUNT_NO).ExecuteCommand();
|
db.Deleteable<WMS_COUNT_SUM>(false).Where(q => q.COUNT_NO == count.COUNT_NO).ExecuteCommand();
|
db.Fastest<WMS_COUNT_LDTL>().BulkCopy(Count_ldtls);
|
db.Fastest<WMS_COUNT_MDTL>().BulkCopy(Count_mdtls);
|
db.Fastest<WMS_COUNT_SUM>().BulkCopy(Count_sums);
|
});
|
if (!dbTran.IsSuccess)
|
{
|
action.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"生成盘点单[{count.COUNT_NO}]明细异常");
|
}
|
action.Message = $"生成盘点单[{count.COUNT_NO}]明细成功,总耗时{(DateTime.Now - startTime).TotalSeconds}毫秒,保存耗时{(DateTime.Now - startSaveTime).TotalSeconds}毫秒";
|
return action;
|
}
|
}
|
}
|