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
{
///
/// 创建盘点单号
///
///
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;
}
///
/// 盘点单明细
///
///
///
public ApiAction SummaryCount(WMS_COUNT count)
{
var action = new ApiAction();
var items = Biz.Db.Queryable().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;
}
///
/// 盘点单明细
///
///
///
///
public ApiAction GenerateCount(WMS_COUNT count, List _data)
{
var action = new ApiAction();
List Count_mdtls = new();
List Count_ldtls = new();
List Count_sums = new();
var startTime = DateTime.Now;
//物品明细
var mdtls = Biz.Db.Queryable().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().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().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(false).Where(q => q.COUNT_NO == count.COUNT_NO).ExecuteCommand();
db.Deleteable(false).Where(q => q.COUNT_NO == count.COUNT_NO).ExecuteCommand();
db.Deleteable(false).Where(q => q.COUNT_NO == count.COUNT_NO).ExecuteCommand();
db.Fastest().BulkCopy(Count_ldtls);
db.Fastest().BulkCopy(Count_mdtls);
db.Fastest().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;
}
}
}