From d39859c1056444bf97d440305669694623b14631 Mon Sep 17 00:00:00 2001
From: majian <780924089@qq.com>
Date: Tue, 9 Jul 2024 14:06:59 +0800
Subject: [PATCH] =?UTF-8?q?=E5=BA=93=E5=AD=98=E6=8A=A5=E8=A1=A8=EF=BC=8C?=
=?UTF-8?q?=E6=97=A5=E5=BF=97=E5=AE=8C=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Tnb.ProductionMgr/RedisBackGround.cs | 2 +-
.../Consts/ModuleConsts.cs | 4 +
.../Consts/WmsWareHouseConst.cs | 15 +
.../Dto/Inputs/CarryStockInput.cs | 8 +
.../Entity/WmsCarryH.cs | 6 +-
.../Entity/WmsCarryStockReportH.cs | 257 ++++++++++++++++++
.../Tnb.WarehouseMgr/WareHouseService.cs | 7 +-
.../WmsCarryStockReportService.cs | 191 +++++++++++++
.../WmsMaterialTransferService.cs | 7 +-
.../Tnb.WarehouseMgr/WmsPrdReturnService.cs | 25 +-
.../Tnb.WarehouseMgr/WmsSaleReleaseService.cs | 13 +-
.../Tnb.WarehouseMgr/WmsSaleService.cs | 27 ++
12 files changed, 549 insertions(+), 13 deletions(-)
create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryStockInput.cs
create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryStockReportH.cs
create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs
diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
index 72c6e841..fc43353c 100644
--- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
@@ -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_开始码垛}");
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
index 97161545..dddc50e5 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
@@ -166,6 +166,10 @@ public class ModuleConsts
///
public const string MODULE_WMSSTOCKREPORT_ID = "27895417124373";
///
+ /// 模块标识-载具库存报表 todo
+ ///
+ public const string MODULE_WMSCARRYSTOCKREPORT_ID = "MODULE_WMSCARRYSTOCKREPORT_ID";
+ ///
/// 模块标识-载具台账
///
public const string MODULE_WMSCARRY_ID = "26038721525029";
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
index 35e062e1..3e7f663f 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
@@ -41,6 +41,21 @@
///
public const string WAREHOUSE_ZZXBK_ID = "26257716248101";
+ ///
+ /// 四楼包材库
+ ///
+ public const string WAREHOUSE_BCK_ID = "35410826423061";
+ ///
+ /// 四楼待灭菌仓
+ ///
+ public const string WAREHOUSE_DMJC_ID = "35412479754517";
+ ///
+ /// 四楼灭菌仓
+ ///
+ public const string WAREHOUSE_MJC_ID = "35412482304021";
+
+
+
///
/// 长管出库
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryStockInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryStockInput.cs
new file mode 100644
index 00000000..bce45b10
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryStockInput.cs
@@ -0,0 +1,8 @@
+using JNPF.Common.Filter;
+
+namespace Tnb.WarehouseMgr.Entities.Dto
+{
+ public class CarryStockInput : PageInputBase
+ {
+ }
+}
\ No newline at end of file
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
index c83331eb..be1aaa56 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
@@ -139,5 +139,9 @@ public partial class WmsCarryH : BaseEntity
/// 配送工位
///
public string? work_station { get; set; }
-
+
+ ///
+ /// 入库时间
+ ///
+ public DateTime? instock_time { get; set; }
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryStockReportH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryStockReportH.cs
new file mode 100644
index 00000000..d3a98f88
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryStockReportH.cs
@@ -0,0 +1,257 @@
+using JNPF.Common.Contracts;
+using JNPF.Common.Security;
+using SqlSugar;
+
+namespace Tnb.WarehouseMgr.Entities;
+
+///
+/// 载具库存集合
+///
+public partial class WmsCarryStockReport
+{
+ public int 序号 { get; set; }
+ /////
+ ///// 所属组织
+ /////
+ //public string? 组织 { get; set; }
+
+ ///
+ /// 载具ID
+ ///
+ public string? carry_id { get; set; }
+
+ ///
+ /// 载具编码
+ ///
+ public string? 载具编码 { get; set; }
+
+ ///
+ /// 载具名称
+ ///
+ public string? 载具名称 { get; set; }
+
+ ///
+ /// 子载具编码
+ ///
+ public string? 子载具编码 { get; set; }
+
+ ///
+ /// 子载具名称
+ ///
+ public string? 子载具名称 { get; set; }
+
+ ///
+ /// 物料ID
+ ///
+ public string? material_id { get; set; }
+
+ ///
+ /// 物料编码
+ ///
+ public string? 物料编码 { get; set; }
+
+ ///
+ /// 物料名称
+ ///
+ public string? 物料名称 { get; set; }
+
+ ///
+ /// 仓库名称
+ ///
+ public string? 仓库名称 { get; set; }
+
+ ///
+ /// 库位编码
+ ///
+ public string? 库位编码 { get; set; }
+
+ ///
+ /// 库位名称
+ ///
+ public string? 库位名称 { get; set; }
+
+ ///
+ /// 载具状态
+ ///
+ public string? 载具状态 { get; set; }
+
+ ///
+ /// 库位状态
+ ///
+ public string? 库位状态 { get; set; }
+
+ ///
+ /// 载具类型
+ ///
+ public string? 载具类型 { get; set; }
+
+ ///
+ /// 入库时间
+ ///
+ public string? 入库时间 { get; set; }
+
+ ///
+ /// 条码
+ ///
+ public string? 条码 { get; set; }
+
+ ///
+ /// 批次
+ ///
+ public string? 批次 { get; set; }
+
+ ///
+ /// 数量
+ ///
+ public decimal? 数量 { get; set; }
+
+ ///
+ /// 单位
+ ///
+ public string? 单位 { get; set; }
+
+ ///
+ /// 操作用户
+ ///
+ public string? 操作用户 { get; set; }
+
+ ///
+ /// 绑定时间
+ ///
+ public string? 绑定时间 { get; set; }
+
+}
+
+///
+/// 载具库存报表
+///
+public partial class WmsCarryStockReportH
+{
+ public int 序号 { get; set; }
+ /////
+ ///// 所属组织
+ /////
+ //public string? 组织 { get; set; }
+
+ /////
+ ///// 载具ID
+ /////
+ //public string? carry_id { get; set; }
+
+ ///
+ /// 载具编码
+ ///
+ public string? 载具编码 { get; set; }
+
+ ///
+ /// 载具名称
+ ///
+ public string? 载具名称 { get; set; }
+
+ ///
+ /// 仓库名称
+ ///
+ public string? 仓库名称 { get; set; }
+
+ ///
+ /// 库位编码
+ ///
+ public string? 库位编码 { get; set; }
+
+ ///
+ /// 库位名称
+ ///
+ public string? 库位名称 { get; set; }
+
+ ///
+ /// 载具状态
+ ///
+ public string? 载具状态 { get; set; }
+
+ ///
+ /// 库位状态
+ ///
+ public string? 库位状态 { get; set; }
+
+ ///
+ /// 载具类型
+ ///
+ public string? 载具类型 { get; set; }
+
+ ///
+ /// 入库时间
+ ///
+ public string? 入库时间 { get; set; }
+
+ public List Details { get; set; }
+}
+
+
+///
+/// 载具库存报表条码表
+///
+public partial class WmsCarryStockReportCode
+{
+ public int 序号 { get; set; }
+ /////
+ ///// 载具ID
+ /////
+ //public string? carry_id { get; set; }
+
+ ///
+ /// 载具编码
+ ///
+ public string? 载具编码 { get; set; }
+
+ ///
+ /// 载具名称
+ ///
+ public string? 载具名称 { get; set; }
+
+ /////
+ ///// 物料ID
+ /////
+ //public string? material_id { get; set; }
+
+ ///
+ /// 物料编号
+ ///
+ public string? 物料编号 { get; set; }
+
+ ///
+ /// 物料名称
+ ///
+ public string? 物料名称 { get; set; }
+
+ ///
+ /// 条码编号
+ ///
+ public string? 条码 { get; set; }
+
+ ///
+ /// 批次
+ ///
+ public string? 批次 { get; set; }
+
+ ///
+ /// 条码数量
+ ///
+ public decimal? 数量 { get; set; }
+
+ ///
+ /// 单位
+ ///
+ public string? 单位 { get; set; }
+
+ /////
+ ///// 操作用户
+ /////
+ //public string? 创建用户 { get; set; }
+
+ ///
+ /// 绑定时间
+ ///
+ public string? 绑定时间 { get; set; }
+
+}
+
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index 9300b693..3ed458a6 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -494,6 +494,7 @@ namespace Tnb.WarehouseMgr
}
#region 只解决少数情况(比如只有60 59 60 60四个料箱,下发180,要取60 60 60) 其它情况不考虑
+
var itemsASC = await cyDb.Queryable().LeftJoin((a, b) => a.id == b.carry_id)
.LeftJoin((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().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();
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs
new file mode 100644
index 00000000..4c0d1e0d
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs
@@ -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
+{
+ ///
+ /// 库存报表服务类
+ ///
+ [OverideVisualDev(ModuleConsts.MODULE_WMSCARRYSTOCKREPORT_ID)]
+ public class WmsCarryStockReportService : BaseWareHouseService
+ {
+ private readonly ISqlSugarClient _db;
+ private readonly IUserManager _userManager;
+
+ public WmsCarryStockReportService(ISqlSugarRepository repository, IUserManager userManager)
+ {
+ _db = repository.AsSugarClient();
+ _userManager = userManager;
+ }
+
+ ///
+ /// 转库单
+ ///
+ [HttpPost, NonUnify, AllowAnonymous]
+ public async Task CarryStock(CarryStockInput input)
+ {
+ var warehouse_id = "";
+ var carry_id = "";
+ var material_id = "";
+ if (!input.queryJson.IsNullOrWhiteSpace())
+ {
+ warehouse_id = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.warehouse_id));
+ carry_id = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.carry_id));
+ material_id = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.material_id));
+ }
+
+
+
+ List items = await _db.Queryable()
+ .LeftJoin((a, b) => b.location_id == a.id)
+ .InnerJoin((a, b, c) => a.wh_id == c.id)
+ .LeftJoin((a, b, c, d) => d.id == b.carrystd_id)
+ .LeftJoin((a, b, c, d, e) => e.carry_id == b.id)
+ .LeftJoin((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 items_LJ = await _db.Queryable()
+ .LeftJoin((a, b) => b.location_id == a.id)
+ .InnerJoin((a, b, c) => a.wh_id == c.id)
+ .InnerJoin((a, b, c, d) => d.id == b.carrystd_id)
+ .InnerJoin((a, b, c, d, e) => e.carry_id == b.id)
+ .InnerJoin((a, b, c, d, e, f) => f.carry_id == e.membercarry_id)
+ .InnerJoin((a, b, c, d, e, f, g) => g.id == f.material_id)
+ .InnerJoin((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 result = items.GroupBy(g => new { g.carry_id }).Select(itGroup =>
+ {
+ _ = storeMap.TryGetValue(itGroup.Key, out WmsCarryStockReport? report);
+ WmsCarryStockReportH stockReport = report.Adapt();
+
+ if (report.载具编码 != "空托盘堆垛")
+ {
+ List curCarryCodes = items.FindAll(x => x.carry_id == itGroup.Key.carry_id);
+
+ List wmsCarryStockReportCodes = new List();
+ 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 pages = result.Skip((input.currentPage - 1) * input.pageSize).Take(input.pageSize).ToList();
+ pages.ForEach(page => { rowIndex++; page.序号 = rowIndex; });
+
+ SqlSugarPagedList pagedList = new()
+ {
+ list = pages,
+ pagination = new()
+ {
+ CurrentPage = input.currentPage,
+ PageSize = input.pageSize,
+ Total = result.Count()
+ }
+ };
+ return PageResult.SqlSugarPageResult(pagedList);
+ }
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
index d0bffb3d..916f4876 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
@@ -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((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.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;
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs
index befb0b8a..7141ebd5 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs
@@ -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
}
///
- /// 从产线呼叫装料架到暂存仓/缓存仓
+ /// 从产线呼叫装料架到暂存仓/缓存仓(退料)
///
///
///
@@ -350,6 +351,9 @@ namespace Tnb.WarehouseMgr
{
WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.id == input.carryIds[0]).FirstAsync();
+ // 用于回写prd_material_receipt_d is_all_feeding
+ List carryHs = new List();
+
List wmsCarryCodes = null;
// 料架到暂存仓
if (wmsCarryH.carrystd_id == "26037267399717")
@@ -358,28 +362,37 @@ namespace Tnb.WarehouseMgr
.InnerJoin((a, b) => a.membercarry_id == b.id)
.InnerJoin((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()
+ .InnerJoin((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()
.InnerJoin((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().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 wmsPrdReturnDs = _db.Queryable().Where(r => r.bill_id == input.source_id).ToList();
foreach (WmsPrdReturnD wmsPrdReturnD in wmsPrdReturnDs)
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
index f2208b1a..dddc8491 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
@@ -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 Distribute(SaleReleaseDistributeInput input)
{
+ Logger.LogInformation($"【Distribute】 销售出库下发");
try
{
if (input.qty <= 0)
@@ -160,6 +162,7 @@ namespace Tnb.WarehouseMgr
List> items_sorttask = items.Where(r => r.Item1 == "分拣任务").ToList();
List> items_pretask = items.Where(r => r.Item1 == "预任务").ToList();
+ Logger.LogInformation($"【Distribute】 预计生成{items_pretask.Count}条预任务");
// 预任务逻辑
foreach (Tuple item in items_pretask)
{
@@ -167,8 +170,12 @@ namespace Tnb.WarehouseMgr
WmsCarryCode carryCode = item.Item3;
BasLocation startLocation = item.Item4;
// 根据一楼工位任务数平均分配任务 确定一楼工位
- BasLocation endLocation = await _db.Queryable().Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
+ BasLocation endLocation = await _db.Queryable().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 item in items_sorttask)
{
@@ -321,10 +329,13 @@ namespace Tnb.WarehouseMgr
await _db.Updateable().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
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleService.cs
index 4823df98..b7629dfd 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleService.cs
@@ -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(input);
}
+ public override async Task ModifyAsync(WareHouseUpInput input)
+ {
+ //if (input == null)
+ //{
+ // throw new ArgumentNullException(nameof(input));
+ //}
+
+ //try
+ //{
+ // WmsCarryH wmsCarryH = await _db.Queryable().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();
+ //}
+
+ }
}
}