库存报表,日志完善

This commit is contained in:
2024-07-09 14:06:59 +08:00
parent d333b62dfa
commit d39859c105
12 changed files with 549 additions and 13 deletions

View File

@@ -1021,7 +1021,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
// 开始码垛
bool result_开始码垛 = await Floor2UpDownMachinecode_SetTag(MechanicalArmConsts., target.stackingposition.ToString());
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】码垛结果 {result_开始码垛}");
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】码垛位{target.stackingposition}码垛结果 {result_开始码垛}");
if (!result_开始码垛)
{
throw new Exception($@"【上升降机】码垛结果 {result_开始码垛}");

View File

@@ -166,6 +166,10 @@ public class ModuleConsts
/// </summary>
public const string MODULE_WMSSTOCKREPORT_ID = "27895417124373";
/// <summary>
/// 模块标识-载具库存报表 todo
/// </summary>
public const string MODULE_WMSCARRYSTOCKREPORT_ID = "MODULE_WMSCARRYSTOCKREPORT_ID";
/// <summary>
/// 模块标识-载具台账
/// </summary>
public const string MODULE_WMSCARRY_ID = "26038721525029";

View File

@@ -41,6 +41,21 @@
/// </summary>
public const string WAREHOUSE_ZZXBK_ID = "26257716248101";
/// <summary>
/// 四楼包材库
/// </summary>
public const string WAREHOUSE_BCK_ID = "35410826423061";
/// <summary>
/// 四楼待灭菌仓
/// </summary>
public const string WAREHOUSE_DMJC_ID = "35412479754517";
/// <summary>
/// 四楼灭菌仓
/// </summary>
public const string WAREHOUSE_MJC_ID = "35412482304021";
/// <summary>
/// 长管出库
/// </summary>

View File

@@ -0,0 +1,8 @@
using JNPF.Common.Filter;
namespace Tnb.WarehouseMgr.Entities.Dto
{
public class CarryStockInput : PageInputBase
{
}
}

View File

@@ -139,5 +139,9 @@ public partial class WmsCarryH : BaseEntity<string>
/// 配送工位
/// </summary>
public string? work_station { get; set; }
/// <summary>
/// 入库时间
/// </summary>
public DateTime? instock_time { get; set; }
}

View File

@@ -0,0 +1,257 @@
using JNPF.Common.Contracts;
using JNPF.Common.Security;
using SqlSugar;
namespace Tnb.WarehouseMgr.Entities;
/// <summary>
/// 载具库存集合
/// </summary>
public partial class WmsCarryStockReport
{
public int { get; set; }
///// <summary>
///// 所属组织
///// </summary>
//public string? 组织 { get; set; }
/// <summary>
/// 载具ID
/// </summary>
public string? carry_id { get; set; }
/// <summary>
/// 载具编码
/// </summary>
public string? { get; set; }
/// <summary>
/// 载具名称
/// </summary>
public string? { get; set; }
/// <summary>
/// 子载具编码
/// </summary>
public string? { get; set; }
/// <summary>
/// 子载具名称
/// </summary>
public string? { get; set; }
/// <summary>
/// 物料ID
/// </summary>
public string? material_id { get; set; }
/// <summary>
/// 物料编码
/// </summary>
public string? { get; set; }
/// <summary>
/// 物料名称
/// </summary>
public string? { get; set; }
/// <summary>
/// 仓库名称
/// </summary>
public string? { get; set; }
/// <summary>
/// 库位编码
/// </summary>
public string? { get; set; }
/// <summary>
/// 库位名称
/// </summary>
public string? { get; set; }
/// <summary>
/// 载具状态
/// </summary>
public string? { get; set; }
/// <summary>
/// 库位状态
/// </summary>
public string? { get; set; }
/// <summary>
/// 载具类型
/// </summary>
public string? { get; set; }
/// <summary>
/// 入库时间
/// </summary>
public string? { get; set; }
/// <summary>
/// 条码
/// </summary>
public string? { get; set; }
/// <summary>
/// 批次
/// </summary>
public string? { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal? { get; set; }
/// <summary>
/// 单位
/// </summary>
public string? { get; set; }
/// <summary>
/// 操作用户
/// </summary>
public string? { get; set; }
/// <summary>
/// 绑定时间
/// </summary>
public string? { get; set; }
}
/// <summary>
/// 载具库存报表
/// </summary>
public partial class WmsCarryStockReportH
{
public int { get; set; }
///// <summary>
///// 所属组织
///// </summary>
//public string? 组织 { get; set; }
///// <summary>
///// 载具ID
///// </summary>
//public string? carry_id { get; set; }
/// <summary>
/// 载具编码
/// </summary>
public string? { get; set; }
/// <summary>
/// 载具名称
/// </summary>
public string? { get; set; }
/// <summary>
/// 仓库名称
/// </summary>
public string? { get; set; }
/// <summary>
/// 库位编码
/// </summary>
public string? { get; set; }
/// <summary>
/// 库位名称
/// </summary>
public string? { get; set; }
/// <summary>
/// 载具状态
/// </summary>
public string? { get; set; }
/// <summary>
/// 库位状态
/// </summary>
public string? { get; set; }
/// <summary>
/// 载具类型
/// </summary>
public string? { get; set; }
/// <summary>
/// 入库时间
/// </summary>
public string? { get; set; }
public List<WmsCarryStockReportCode> Details { get; set; }
}
/// <summary>
/// 载具库存报表条码表
/// </summary>
public partial class WmsCarryStockReportCode
{
public int { get; set; }
///// <summary>
///// 载具ID
///// </summary>
//public string? carry_id { get; set; }
/// <summary>
/// 载具编码
/// </summary>
public string? { get; set; }
/// <summary>
/// 载具名称
/// </summary>
public string? { get; set; }
///// <summary>
///// 物料ID
///// </summary>
//public string? material_id { get; set; }
/// <summary>
/// 物料编号
/// </summary>
public string? { get; set; }
/// <summary>
/// 物料名称
/// </summary>
public string? { get; set; }
/// <summary>
/// 条码编号
/// </summary>
public string? { get; set; }
/// <summary>
/// 批次
/// </summary>
public string? { get; set; }
/// <summary>
/// 条码数量
/// </summary>
public decimal? { get; set; }
/// <summary>
/// 单位
/// </summary>
public string? { get; set; }
///// <summary>
///// 操作用户
///// </summary>
//public string? 创建用户 { get; set; }
/// <summary>
/// 绑定时间
/// </summary>
public string? { get; set; }
}

View File

@@ -494,6 +494,7 @@ namespace Tnb.WarehouseMgr
}
#region 60 59 60 6018060 60 60
var itemsASC = await cyDb.Queryable<WmsCarryH>().LeftJoin<WmsCarryCode>((a, b) => a.id == b.carry_id)
.LeftJoin<BasLocation>((a, b, c) => a.location_id == c.id)
.Where(whereExpr)
@@ -527,6 +528,7 @@ namespace Tnb.WarehouseMgr
WmsCarryCode _wmsCarryCode = itemsASC[j].wmsCarryCode;
if (_wmsCarryCode.codeqty == input.needOut)
{
input.needOut -= _wmsCarryCode.codeqty;
WmsCarryH _wmsCarryH = itemsASC[j].wmsCarryH;
BasLocation _endlocation_ssx = await _db.Queryable<BasLocation>().Where(r => new string[2] { "32609229889045", "32609238573589" }.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
@@ -2125,7 +2127,8 @@ namespace Tnb.WarehouseMgr
id = multiList[i].carry_id,
is_lock = 0,
location_id = multiList[i].endlocation_id,
location_code = multiList[i].endlocation_code
location_code = multiList[i].endlocation_code,
instock_time = DateTime.Now
};
string endLocId = multiList[i].endlocation_id;
@@ -2172,7 +2175,7 @@ namespace Tnb.WarehouseMgr
locIts.Add(loc);
}
_ = await _db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code }).ExecuteCommandAsync();
_ = await _db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code, it.instock_time }).ExecuteCommandAsync();
Logger.Information($"【TaskComplate】 更新载具 {JsonConvert.SerializeObject(carryIts)}");
//更新条码的库位和仓库信息
_ = await _db.Updateable(carryCodeIts).UpdateColumns(it => new { it.warehouse_id, it.location_id, it.location_code }).Where(it => multiList.Select(x => x.carry_id).Contains(it.carry_id)).ExecuteCommandAsync();

View File

@@ -0,0 +1,191 @@
using JNPF.Common.Core.Manager;
using JNPF.Common.Extension;
using JNPF.Common.Filter;
using JNPF.Common.Security;
using JNPF.VisualDev;
using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Dto.ErpInputs;
using Tnb.WarehouseMgr.Entities.Dto.Outputs;
using Tnb.WarehouseMgr.Entities.Enums;
namespace Tnb.WarehouseMgr
{
/// <summary>
/// 库存报表服务类
/// </summary>
[OverideVisualDev(ModuleConsts.MODULE_WMSCARRYSTOCKREPORT_ID)]
public class WmsCarryStockReportService : BaseWareHouseService
{
private readonly ISqlSugarClient _db;
private readonly IUserManager _userManager;
public WmsCarryStockReportService(ISqlSugarRepository<WmsCarryCode> repository, IUserManager userManager)
{
_db = repository.AsSugarClient();
_userManager = userManager;
}
/// <summary>
/// 转库单
/// </summary>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<dynamic> CarryStock(CarryStockInput input)
{
var warehouse_id = "";
var carry_id = "";
var material_id = "";
if (!input.queryJson.IsNullOrWhiteSpace())
{
warehouse_id = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.warehouse_id));
carry_id = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.carry_id));
material_id = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.material_id));
}
List<WmsCarryStockReport> items = await _db.Queryable<BasLocation>()
.LeftJoin<WmsCarryH>((a, b) => b.location_id == a.id)
.InnerJoin<BasWarehouse>((a, b, c) => a.wh_id == c.id)
.LeftJoin<WmsCarrystd>((a, b, c, d) => d.id == b.carrystd_id)
.LeftJoin<WmsCarryCode>((a, b, c, d, e) => e.carry_id == b.id)
.LeftJoin<BasMaterial>((a, b, c, d, e, f) => f.id == e.material_id)
.Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.).ToString() && a.is_use == "1"
&& ((!string.IsNullOrEmpty(b.carry_code) && b.carry_status != "0" && b.carry_status != "6") || string.IsNullOrEmpty(b.carry_code)))
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id)
.WhereIF(!string.IsNullOrEmpty(carry_id), (a, b, c, d) => b.id == carry_id)
.WhereIF(!string.IsNullOrEmpty(material_id), (a, b, c, d, e, f) => f.id == material_id)
.OrderByDescending((a, b, c, d, e, f) => b.carry_code)
.Select((a, b, c, d, e, f) => new WmsCarryStockReport
{
= c.whname,
carry_id = b.id,
= string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_code,
= string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_name,
= b.is_lock == 1 ? "锁定" : "未锁定",
= d.carrystd_name,
= a.location_code,
= a.location_name,
= b.is_lock == 1 ? "锁定" : "未锁定",
= b.instock_time != null ? b.instock_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : "",
= e.barcode,
= e.code_batch,
= e.codeqty,
material_id = e.material_id,
= e.material_code,
= f.name,
= e.unit_id,
= e.create_id,
= e.create_time != null ? e.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : ""
})
.ToListAsync();
// 料架
List<WmsCarryStockReport> items_LJ = await _db.Queryable<BasLocation>()
.LeftJoin<WmsCarryH>((a, b) => b.location_id == a.id)
.InnerJoin<BasWarehouse>((a, b, c) => a.wh_id == c.id)
.InnerJoin<WmsCarrystd>((a, b, c, d) => d.id == b.carrystd_id)
.InnerJoin<WmsCarryD>((a, b, c, d, e) => e.carry_id == b.id)
.InnerJoin<WmsCarryCode>((a, b, c, d, e, f) => f.carry_id == e.membercarry_id)
.InnerJoin<BasMaterial>((a, b, c, d, e, f, g) => g.id == f.material_id)
.InnerJoin<WmsCarryH>((a, b, c, d, e, f, g, h) => h.id == e.membercarry_id)
.Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.).ToString() && a.is_use == "1" && b.carry_status != "0" && b.carry_status != "6")
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id)
.WhereIF(!string.IsNullOrEmpty(carry_id), (a, b, c, d, e) => b.id == carry_id || e.membercarry_id == carry_id)
.WhereIF(!string.IsNullOrEmpty(material_id), (a, b, c, d, e, f, g) => g.id == material_id)
.Select((a, b, c, d, e, f, g, h) => new WmsCarryStockReport
{
= c.whname,
carry_id = b.id,
= b.carry_code,
= b.carry_name,
= h.carry_code,
= h.carry_name,
= b.is_lock == 1 ? "锁定" : "未锁定",
= d.carrystd_name,
= a.location_code,
= a.location_name,
= b.is_lock == 1 ? "锁定" : "未锁定",
= b.instock_time != null ? b.instock_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : "",
= f.barcode,
= f.code_batch,
= f.codeqty,
material_id = f.material_id,
= f.material_code,
= g.name,
= f.unit_id,
= f.create_id,
= f.create_time != null ? f.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : ""
})
.ToListAsync();
items.AddRange(items_LJ);
// d.carrystd_name != "料架"
var storeMap = items.DistinctBy(x => new { x.carry_id }).ToDictionary(x => new { x.carry_id }, x => x);
IEnumerable<WmsCarryStockReportH> result = items.GroupBy(g => new { g.carry_id }).Select(itGroup =>
{
_ = storeMap.TryGetValue(itGroup.Key, out WmsCarryStockReport? report);
WmsCarryStockReportH stockReport = report.Adapt<WmsCarryStockReportH>();
if (report. != "空托盘堆垛")
{
List<WmsCarryStockReport> curCarryCodes = items.FindAll(x => x.carry_id == itGroup.Key.carry_id);
List<WmsCarryStockReportCode> wmsCarryStockReportCodes = new List<WmsCarryStockReportCode>();
int index = 0;
curCarryCodes.ForEach(x =>
{
index++;
WmsCarryStockReportCode wmsCarryStockReportCode = new();
wmsCarryStockReportCode. = index;
//wmsCarryStockReportCode.carry_id = x.carry_id;
wmsCarryStockReportCode. = !string.IsNullOrEmpty(x.) ? x. : x.;
wmsCarryStockReportCode. = !string.IsNullOrEmpty(x.) ? x. : x.;
//wmsCarryStockReportCode.material_id = x.material_id;
wmsCarryStockReportCode. = x.;
wmsCarryStockReportCode. = x.;
wmsCarryStockReportCode. = x.;
wmsCarryStockReportCode. = x.;
wmsCarryStockReportCode. = x.;
wmsCarryStockReportCode. = x.;
//wmsCarryStockReportCode.创建用户 = x.操作用户;
wmsCarryStockReportCode. = x.;
wmsCarryStockReportCodes.Add(wmsCarryStockReportCode);
});
stockReport.Details = wmsCarryStockReportCodes;
}
return stockReport;
});
int rowIndex = 0;
List<WmsCarryStockReportH> pages = result.Skip((input.currentPage - 1) * input.pageSize).Take(input.pageSize).ToList();
pages.ForEach(page => { rowIndex++; page. = rowIndex; });
SqlSugarPagedList<WmsCarryStockReportH> pagedList = new()
{
list = pages,
pagination = new()
{
CurrentPage = input.currentPage,
PageSize = input.pageSize,
Total = result.Count()
}
};
return PageResult<WmsCarryStockReportH>.SqlSugarPageResult(pagedList);
}
}
}

View File

@@ -97,6 +97,7 @@ namespace Tnb.WarehouseMgr
try
{
JObject queryJson = null;
if (!string.IsNullOrEmpty(input.queryJson))
{
queryJson = JObject.Parse(input.queryJson);
@@ -111,7 +112,8 @@ namespace Tnb.WarehouseMgr
.LeftJoin<DictionaryDataEntity>((a, b, c, d, e, f) => a.type == f.EnCode)
// 只显示未完成的单据
.Where(a => a.status != "25065149810453")
.WhereIF(queryJson != null, a => a.type == queryJson["type"].ToString())
.WhereIF(queryJson != null && queryJson["type"] != null, a => a.type == queryJson["type"].ToString())
.WhereIF(queryJson != null && queryJson["bill_code"] != null, a => a.bill_code.Contains(queryJson["bill_code"].ToString()))
.Select((a, b, c, d, e, f) => new WmsMaterialTransfer
{
id = a.id,
@@ -136,6 +138,7 @@ namespace Tnb.WarehouseMgr
arrival_date = a.arrival_date,
order_code = a.order_code,
})
.OrderBy("a.bill_code desc")
.ToPagedListAsync(input.currentPage, input.pageSize);
var _data = PageResult<WmsMaterialTransfer>.SqlSugarPageResult(result);
@@ -176,7 +179,7 @@ namespace Tnb.WarehouseMgr
foreach (JObject wmsTransferInstockH in mainTable)
{
wmsTransferInstockH["tablefield121"] = JArray.Parse(JsonConvert.SerializeObject(wmsTransferInstockDs.Where(r => r.bill_id == wmsTransferInstockH["id"].ToString())));
wmsTransferInstockH["tablefield120"] = JArray.Parse(JsonConvert.SerializeObject(wmsTransferInstockDs.Where(r => r.bill_id == wmsTransferInstockH["id"].ToString())));
}
return data;
}

View File

@@ -13,6 +13,7 @@ using Microsoft.Extensions.Logging;
using NPOI.POIFS.Storage;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.ProductionMgr.Entities;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Attributes;
using Tnb.WarehouseMgr.Entities.Consts;
@@ -53,7 +54,7 @@ namespace Tnb.WarehouseMgr
}
/// <summary>
/// 从产线呼叫装料架到暂存仓/缓存仓
/// 从产线呼叫装料架到暂存仓/缓存仓(退料)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
@@ -350,6 +351,9 @@ namespace Tnb.WarehouseMgr
{
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.id == input.carryIds[0]).FirstAsync();
// 用于回写prd_material_receipt_d is_all_feeding
List<WmsCarryH> carryHs = new List<WmsCarryH>();
List<WmsCarryCode> wmsCarryCodes = null;
// 料架到暂存仓
if (wmsCarryH.carrystd_id == "26037267399717")
@@ -358,28 +362,37 @@ namespace Tnb.WarehouseMgr
.InnerJoin<WmsCarryH>((a, b) => a.membercarry_id == b.id)
.InnerJoin<WmsCarryCode>((a, b, c) => b.id == c.carry_id)
.Where((a, b, c) => a.carry_id == wmsCarryH.id).Select((a, b, c) => c).ToList();
carryHs = _db.Queryable<WmsCarryD>()
.InnerJoin<WmsCarryH>((a, b) => a.membercarry_id == b.id)
.Where((a, b) => a.carry_id == wmsCarryH.id).Select((a, b) => b).ToList();
}
// 载运小车和载运料架到缓存仓
else if (wmsCarryH.carrystd_id == "26103233723941" || wmsCarryH.carrystd_id == "34995839046677")
{
carryHs.Add(wmsCarryH);
wmsCarryCodes = _db.Queryable<WmsCarryH>()
.InnerJoin<WmsCarryCode>((a, b) => a.id == b.carry_id)
.Where((a, b) => a.id == wmsCarryH.id).Select((a, b) => b).ToList();
}
else
{
Logger.LogError($"【WmsPrdReturnService ModifyAsync】当前载具的规格id是{wmsCarryH.carrystd_id} 无法处理此类型的载具!");
return;
throw new Exception($"【WmsPrdReturnService ModifyAsync】当前载具的规格id是{wmsCarryH.carrystd_id} 无法处理此类型的载具!");
}
if (wmsCarryCodes.Count == 0)
{
Logger.LogWarning($"【WmsPrdReturnService ModifyAsync】载具{input.carryIds[0]}没有绑定物料条码");
return;
throw new Exception($"【WmsPrdReturnService ModifyAsync】载具{input.carryIds[0]}没有绑定物料条码");
}
await _db.Ado.BeginTranAsync();
int row_is_all_feeding = await _db.Updateable<PrdMaterialReceiptD>().SetColumns(r => r.is_all_feeding == 1)
.Where(r => r.is_all_feeding == 0 && carryHs.Select(x => x.id).Contains(r.member_carry_id)).ExecuteCommandAsync();
Logger.LogInformation($"【WmsPrdReturnService ModifyAsync】更新签收表is_all_feeding 影响记录条数 {row_is_all_feeding}条 影响载具为{string.Join(',', carryHs.Select(x => x.carry_code).ToList())}");
// 更新已转数量
List<WmsPrdReturnD> wmsPrdReturnDs = _db.Queryable<WmsPrdReturnD>().Where(r => r.bill_id == input.source_id).ToList();
foreach (WmsPrdReturnD wmsPrdReturnD in wmsPrdReturnDs)

View File

@@ -13,6 +13,7 @@ using JNPF.VisualDev.Interfaces;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.CodeAnalysis;
using Microsoft.Extensions.Logging;
using NPOI.HSSF.Record;
using NPOI.SS.Formula;
using SqlSugar;
@@ -133,6 +134,7 @@ namespace Tnb.WarehouseMgr
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> Distribute(SaleReleaseDistributeInput input)
{
Logger.LogInformation($"【Distribute】 销售出库下发");
try
{
if (input.qty <= 0)
@@ -160,6 +162,7 @@ namespace Tnb.WarehouseMgr
List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> items_sorttask = items.Where(r => r.Item1 == "分拣任务").ToList();
List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> items_pretask = items.Where(r => r.Item1 == "预任务").ToList();
Logger.LogInformation($"【Distribute】 预计生成{items_pretask.Count}条预任务");
// 预任务逻辑
foreach (Tuple<string, WmsCarryH, WmsCarryCode, BasLocation> item in items_pretask)
{
@@ -167,8 +170,12 @@ namespace Tnb.WarehouseMgr
WmsCarryCode carryCode = item.Item3;
BasLocation startLocation = item.Item4;
// 根据一楼工位任务数平均分配任务 确定一楼工位
BasLocation endLocation = await _db.Queryable<BasLocation>().Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
BasLocation endLocation = await _db.Queryable<BasLocation>().Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0").OrderBy("is_lock, task_nums, location_code").FirstAsync();
if (endLocation == null)
{
throw new AppFriendlyException("一楼没有足够的未锁定且空闲的出库工位", 500);
}
WmsPointH sPoint = null!;
WmsPointH ePoint = null!;
@@ -281,6 +288,7 @@ namespace Tnb.WarehouseMgr
}
}
Logger.LogInformation($"【Distribute】 预计生成{items_sorttask.Count}条分拣任务");
// 分拣任务逻辑
foreach (Tuple<string, WmsCarryH, WmsCarryCode, BasLocation> item in items_sorttask)
{
@@ -321,10 +329,13 @@ namespace Tnb.WarehouseMgr
await _db.Updateable<WmsSaleD>().SetColumns(r => r.purchase_arriveqty == r.purchase_arriveqty + input.qty).Where(r => r.id == input.source_id).ExecuteCommandAsync();
await _db.Ado.CommitTranAsync();
Logger.LogInformation($"【Distribute】 销售出库下发完成");
}
catch (Exception ex)
{
await _db.Ado.RollbackTranAsync();
Logger.LogError($"【Distribute】 {ex.Message}");
Logger.LogError($"【Distribute】 {ex.StackTrace}");
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally

View File

@@ -17,6 +17,11 @@ using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Interfaces;
using Tnb.QcMgr.Interfaces;
using Tnb.WarehouseMgr.Entities.Consts;
using JNPF.Common.Enums;
using JNPF.FriendlyException;
using Microsoft.Extensions.Logging;
using Tnb.ProductionMgr.Entities;
using Tnb.WarehouseMgr.Entities.Entity;
namespace Tnb.WarehouseMgr
{
@@ -99,5 +104,27 @@ namespace Tnb.WarehouseMgr
return await UpdateChackStatus<WmsOutstockH>(input);
}
public override async Task ModifyAsync(WareHouseUpInput input)
{
//if (input == null)
//{
// throw new ArgumentNullException(nameof(input));
//}
//try
//{
// WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.id == input.carryIds[0]).FirstAsync();
// await _db.Ado.CommitTranAsync();
//}
//catch (Exception ex)
//{
// Logger.LogError("【WmsSaleService ModifyAsync】" + ex.Message);
// Logger.LogError("【WmsSaleService ModifyAsync】" + ex.StackTrace);
// await _db.Ado.RollbackTranAsync();
//}
}
}
}