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