From 8177d05cd27cbb3482144152c1ccc339c75dcd25 Mon Sep 17 00:00:00 2001
From: majian <780924089@qq.com>
Date: Thu, 27 Jun 2024 11:15:07 +0800
Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E9=80=80=E6=96=99=E5=BC=80?=
=?UTF-8?q?=E5=8F=91=E7=AD=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Entity/WmsPrdReturnD.cs | 72 ++++
.../Entity/WmsPrdReturnH.cs | 67 +++
.../Tnb.ProductionMgr/PrdFeedingService.cs | 6 +-
.../Tnb.ProductionMgr/RedisBackGround.cs | 7 +-
.../Consts/ModuleConsts.cs | 3 +
.../Consts/WmsWareHouseConst.cs | 8 +-
.../Dto/Inputs/PrdReturnInput.cs | 32 ++
.../IWmsCarryBindService.cs | 2 -
.../IWmsCarryUnbindService.cs | 15 +
.../IWmsPrdReturnService.cs | 14 +
.../Tnb.WarehouseMgr/DeviceProviderService.cs | 24 +-
.../Tnb.WarehouseMgr/WareHouseService.cs | 5 +-
.../Tnb.WarehouseMgr/WmsCarryBindService.cs | 111 +----
.../Tnb.WarehouseMgr/WmsCarryUnbindService.cs | 120 +++++-
.../WmsMaterialTransferService.cs | 75 ++--
.../WmsPDACarryBindService.cs | 5 +-
.../Tnb.WarehouseMgr/WmsPrdReturnService.cs | 381 ++++++++++++++++++
17 files changed, 788 insertions(+), 159 deletions(-)
create mode 100644 ProductionMgr/Tnb.ProductionMgr.Entities/Entity/WmsPrdReturnD.cs
create mode 100644 ProductionMgr/Tnb.ProductionMgr.Entities/Entity/WmsPrdReturnH.cs
create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/PrdReturnInput.cs
create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsCarryUnbindService.cs
create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsPrdReturnService.cs
create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/WmsPrdReturnD.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/WmsPrdReturnD.cs
new file mode 100644
index 00000000..72ae739a
--- /dev/null
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/WmsPrdReturnD.cs
@@ -0,0 +1,72 @@
+using JNPF.Common.Contracts;
+using JNPF.Common.Security;
+using SqlSugar;
+
+namespace Tnb.WarehouseMgr.Entities.Entity;
+
+///
+/// wms生产退料单明细
+///
+[SugarTable("wms_prd_return_d")]
+public partial class WmsPrdReturnD : BaseEntity
+{
+ public WmsPrdReturnD()
+ {
+ id = SnowflakeIdHelper.NextId();
+ }
+ ///
+ /// 创建用户
+ ///
+ public string? create_id { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? create_time { get; set; }
+
+ ///
+ /// 修改用户
+ ///
+ public string? modify_id { get; set; }
+
+ ///
+ /// 修改时间
+ ///
+ public DateTime? modify_time { get; set; }
+
+ ///
+ /// 生产退料单id
+ ///
+ public string? bill_id { get; set; }
+
+ ///
+ /// 物料
+ ///
+ public string? material_id { get; set; }
+
+ ///
+ /// 物料编码
+ ///
+ public string? material_code { get; set; }
+
+ ///
+ /// 物料名称
+ ///
+ public string? material_name { get; set; }
+
+ ///
+ /// 数量
+ ///
+ public decimal? qty { get; set; }
+
+ ///
+ /// 已退料数量
+ ///
+ public decimal? ytqty { get; set; }
+
+ ///
+ /// 单位
+ ///
+ public string? unit_id { get; set; }
+
+}
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/WmsPrdReturnH.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/WmsPrdReturnH.cs
new file mode 100644
index 00000000..65a73231
--- /dev/null
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/WmsPrdReturnH.cs
@@ -0,0 +1,67 @@
+using JNPF.Common.Contracts;
+using JNPF.Common.Security;
+using SqlSugar;
+
+namespace Tnb.WarehouseMgr.Entities.Entity;
+
+///
+/// wms生产退料单
+///
+[SugarTable("wms_prd_return_h")]
+public partial class WmsPrdReturnH : BaseEntity
+{
+ public WmsPrdReturnH()
+ {
+ id = SnowflakeIdHelper.NextId();
+ }
+ ///
+ /// 载具
+ ///
+ public string? carry_id { get; set; }
+
+ ///
+ /// 载具编码
+ ///
+ public string? carry_code { get; set; }
+
+ ///
+ /// 载具规格
+ ///
+ public string? carrystd_id { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ public string? create_id { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? create_time { get; set; }
+
+ ///
+ /// 修改用户
+ ///
+ public string? modify_id { get; set; }
+
+ ///
+ /// 修改时间
+ ///
+ public DateTime? modify_time { get; set; }
+
+ ///
+ /// 入库仓库
+ ///
+ public string? warehouse_id { get; set; }
+
+ ///
+ /// 生产退料单号
+ ///
+ public string? bill_code { get; set; }
+
+ ///
+ /// 单据状态
+ ///
+ public string? status { get; set; }
+
+}
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs
index 7f04e793..0ddde12e 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs
@@ -15,6 +15,7 @@ using Tnb.EquipMgr.Entities;
using Tnb.ProductionMgr.Entities;
using Tnb.ProductionMgr.Entities.Dto;
using Tnb.ProductionMgr.Interfaces;
+using Tnb.WarehouseMgr;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Interfaces;
@@ -34,6 +35,7 @@ namespace Tnb.ProductionMgr
private readonly IBillRullService _billRullService;
private readonly IDictionaryDataService _dictionaryDataService;
private readonly IWmsCarryBindService _wmsCarryBindService;
+ private readonly IWmsCarryUnbindService _wmsCarryUnbindService;
// private readonly WmsSignForDeliveryService _wmsSignForDeliveryService;
@@ -45,6 +47,7 @@ namespace Tnb.ProductionMgr
// WmsSignForDeliveryService wmsSignForDeliveryService,
IDictionaryDataService dictionaryDataService,
IWmsCarryBindService wmsCarryBindService,
+ IWmsCarryUnbindService wmsCarryUnbindService,
IUserManager userManager
)
{
@@ -55,6 +58,7 @@ namespace Tnb.ProductionMgr
_dictionaryDataService = dictionaryDataService;
_billRullService = billRullService;
_wmsCarryBindService = wmsCarryBindService;
+ _wmsCarryUnbindService = wmsCarryUnbindService;
}
@@ -457,7 +461,7 @@ namespace Tnb.ProductionMgr
_ = await db.Insertable(prdFeedingH).ExecuteCommandAsync();
_ = await db.Insertable(list).ExecuteCommandAsync();
- _wmsCarryBindService.CarryCodeUnbind(new CarryCodeUnbindInput()
+ _wmsCarryUnbindService.CarryCodeUnbind(new CarryCodeUnbindInput()
{
carry_id = carry.id
});
diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
index 6546c700..5e8fb7db 100644
--- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
@@ -106,6 +106,7 @@ namespace Tnb.ProductionMgr
private readonly IBillRullService _billRullService;
private readonly IWareHouseService _wareHouseService;
private readonly IWmsCarryBindService _wmsCarryBindService;
+ private readonly IWmsCarryUnbindService _wmsCarryUnbindService;
private readonly IWmsEmptyOutstockService _wmsEmptyOutstockService;
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build();
@@ -114,7 +115,8 @@ namespace Tnb.ProductionMgr
#region 构造函数
public RedisBackGround(StackExRedisHelper redisData, IPrdInstockService prdInstockService, ISqlSugarRepository repository, IWmsPDAScanInStockService wmsPDAScanInStock
- , IUserManager userManager, IBillRullService billRullService, IWareHouseService wareHouseService, IWmsCarryBindService wmsCarryBindService, IWmsEmptyOutstockService wmsEmptyOutstockService)
+ , IUserManager userManager, IBillRullService billRullService, IWareHouseService wareHouseService, IWmsCarryBindService wmsCarryBindService,
+ IWmsCarryUnbindService wmsCarryUnbindService, IWmsEmptyOutstockService wmsEmptyOutstockService)
{
_redisData = redisData;
_prdInstockService = prdInstockService;
@@ -125,6 +127,7 @@ namespace Tnb.ProductionMgr
_wareHouseService = wareHouseService;
_wmsCarryBindService = wmsCarryBindService;
_wmsEmptyOutstockService = wmsEmptyOutstockService;
+ _wmsCarryUnbindService = wmsCarryUnbindService;
db_CheckGettimer = repository.CopyNew();
db_Scantimer = repository.CopyNew();
@@ -1456,7 +1459,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
carryBindInput.carry_code = wmsMechanicalArmH.rackcode;
carryBindInput.source_code = wmsMechanicalArmH.outbill;
- await _wmsCarryBindService.CarryUnbind(carryBindInput);
+ await _wmsCarryUnbindService.CarryUnbind(carryBindInput);
// 锁住终点库位
await db_Floor2timer移走下升降区未生成预任务且空托的料架.Updateable(r => new BasLocation
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
index 2bd672f1..0486c45f 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
@@ -103,6 +103,9 @@ public class ModuleConsts
/// 模块标识-载具解绑
public const string MODULE_WMSCARRYUNBIND_ID = "26106270092325";
///
+ /// 模块标识-生产退料单 todo
+ public const string MODULE_WMSPRDRETURN_ID = "MODULE_WMSPRDRETURN_ID";
+ ///
/// 模块标识-载具绑定
///
public const string MODULE_WMSCARRYBIND_ID = "26105163614501";
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
index 15065e3a..e21c5c76 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
@@ -224,14 +224,18 @@
///
public const string BIZTYPE_WMSDELIVERY_ID = "26585291847957";
///
- /// 预任务生成业务类型-销售出库下发
+ /// 预任务生成业务类型-销售出库
///
public const string BIZTYPE_WMSSALERELEASE_ID = "25104446664213";
///
- /// 预任务生成业务类型-原材料转库单下发 todo
+ /// 预任务生成业务类型-原材料转库单 todo
///
public const string BIZTYPE_WMSMATERIALTRANSFER_ID = "34354738929685";
///
+ /// 预任务生成业务类型-生产退料单 todo
+ ///
+ public const string BIZTYPE_PRDRETURN_ID = "BIZTYPE_PRDRETURN_ID";
+ ///
/// 预任务生成业务类型-载具绑定
///
public const string BIZTYPE_WMSCARRYBIND_ID = "27118595509525";
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/PrdReturnInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/PrdReturnInput.cs
new file mode 100644
index 00000000..86b1812f
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/PrdReturnInput.cs
@@ -0,0 +1,32 @@
+namespace Tnb.WarehouseMgr.Entities.Dto
+{
+ ///
+ /// 库房业务更新输入参数
+ ///
+ public class PrdReturnInput
+ {
+ ///
+ /// 组织ID
+ ///
+ public string org_id { get; set; }
+ ///
+ /// 创建用户
+ ///
+ public string create_id { get; set; }
+
+ ///
+ /// 料架号
+ ///
+ public string? carry_code { get; set; }
+
+ ///
+ /// 起始库位
+ ///
+ public string? startlocation_id { get; set; }
+
+ ///
+ /// 生产退料单id
+ ///
+ public string source_id { get; set; }
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsCarryBindService.cs
index 6bbbf338..66161ecd 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsCarryBindService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsCarryBindService.cs
@@ -12,7 +12,5 @@ namespace Tnb.WarehouseMgr.Interfaces
Task CarryBind(VisualDevModelDataCrInput input);
Task CarryBind(CarryBindInput input);
- Task CarryUnbind(CarryBindInput input);
- Task CarryCodeUnbind(CarryCodeUnbindInput input);
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsCarryUnbindService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsCarryUnbindService.cs
new file mode 100644
index 00000000..7892d91d
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsCarryUnbindService.cs
@@ -0,0 +1,15 @@
+using JNPF.Common.Dtos.VisualDev;
+using Tnb.WarehouseMgr.Entities.Dto.Inputs;
+using Tnb.WarehouseMgr.Entities.Dto.Outputs;
+
+namespace Tnb.WarehouseMgr.Interfaces
+{
+ ///
+ /// 载具绑定服务接口
+ ///
+ public interface IWmsCarryUnbindService
+ {
+ Task CarryUnbind(CarryBindInput input);
+ Task CarryCodeUnbind(CarryCodeUnbindInput input);
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsPrdReturnService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsPrdReturnService.cs
new file mode 100644
index 00000000..be81ed7d
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWmsPrdReturnService.cs
@@ -0,0 +1,14 @@
+using JNPF.Common.Dtos.VisualDev;
+using Tnb.WarehouseMgr.Entities.Dto.Inputs;
+using Tnb.WarehouseMgr.Entities.Dto.Outputs;
+
+namespace Tnb.WarehouseMgr.Interfaces
+{
+ ///
+ /// 载具绑定服务接口
+ ///
+ public interface IWmsPrdReturnService
+ {
+
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
index 438918aa..3b1fec2e 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
@@ -19,6 +19,7 @@ using Newtonsoft.Json;
using Org.BouncyCastle.Crypto.Agreement;
using Senparc.CO2NET.Cache;
using SqlSugar;
+using Tnb.BasicData.Entities;
using Tnb.Common.Extension;
using Tnb.EquipMgr.Entities;
using Tnb.WarehouseMgr.Entities;
@@ -399,11 +400,9 @@ namespace Tnb.WarehouseMgr
{
Logger.Information("开始处理WCS上传的取消任务");
-
-
int row = await _db.Updateable().SetColumns(r => new WmsDistaskH
{
- agreement = "WCS上传取消(CANCELLED)信号 取消时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+ agreement = "WCS上传取消(CANCELLED)信号",
status = WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID
}).Where(P => P.bill_code.Contains(input.taskChainCode)).ExecuteCommandAsync();
if (row > 0)
@@ -420,11 +419,24 @@ namespace Tnb.WarehouseMgr
await WmsElevatorUnlock(wmsElevatorUnlockInput);
Logger.Information($"WCS取消任务{wmsDistaskH.bill_code},自动解占用电梯{wmsDistaskH.device_id}");
}
+ else
+ {
+ // 排除电梯任务 其他任务取消时自动解锁终点库位
+ int unlockRow = await _db.Updateable().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.endlocation_code).ExecuteCommandAsync();
+ if (unlockRow > 0)
+ {
+ Logger.Information($"成功解锁库位{wmsDistaskH.endlocation_code}");
+ }
+ else
+ {
+ Logger.Information($"未成功解锁库位{wmsDistaskH.endlocation_code}");
+ }
+ }
}
await _db.Updateable().SetColumns(r => new WmsPretaskH
{
- note = "WCS上传取消(CANCELLED)信号 取消时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+ note = "WCS上传取消(CANCELLED)信号",
status = WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
}).Where(P => wmsDistaskHCodes.Contains(P.bill_code)).ExecuteCommandAsync();
Logger.Information("成功处理WCS上传的取消任务");
@@ -441,7 +453,7 @@ namespace Tnb.WarehouseMgr
Logger.Information("开始处理WCS上传的失败任务");
int row = await _db.Updateable().SetColumns(r => new WmsDistaskH
{
- agreement = "WCS上传失败(FAILURE)信号 失败时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+ agreement = "WCS上传失败(FAILURE)信号",
status = WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID
}).Where(P => P.bill_code.Contains(input.taskChainCode)).ExecuteCommandAsync();
if (row > 0)
@@ -450,7 +462,7 @@ namespace Tnb.WarehouseMgr
await _db.Updateable().SetColumns(r => new WmsPretaskH
{
- note = "WCS上传失败(FAILURE)信号 取消时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+ note = "WCS上传失败(FAILURE)信号",
status = WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
}).Where(P => wmsDistaskHCodes.Contains(P.bill_code)).ExecuteCommandAsync();
Logger.Information("成功处理WCS上传的失败任务");
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index 5c2b10a9..1079447b 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -67,6 +67,7 @@ namespace Tnb.WarehouseMgr
private readonly ICacheManager _cacheManager;
private readonly IElevatorControlService _elevatorControlService;
private readonly IWmsCarryBindService _wmsCarryBindService;
+ private readonly IWmsCarryUnbindService _wmsCarryUnbindService;
private static readonly Dictionary _elevatorAgvCtlStatusMap = new(StringComparer.OrdinalIgnoreCase);
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build();
private static Dictionary locMap = new Dictionary(StringComparer.OrdinalIgnoreCase);
@@ -86,6 +87,7 @@ namespace Tnb.WarehouseMgr
public WareHouseService(ISqlSugarRepository repository, IDictionaryDataService dictionaryDataService, StackExRedisHelper redisData,
IBillRullService billRullService, IUserManager userManager, ICacheManager cacheManager, IElevatorControlService elevatorControlService,
IWmsCarryBindService wmsCarryBindService,
+ IWmsCarryUnbindService wmsCarryUnbindService,
IRunService runService,
IVisualDevService visualDevService
//IConfiguration configuration
@@ -99,6 +101,7 @@ namespace Tnb.WarehouseMgr
_elevatorControlService = elevatorControlService;
_redisData = redisData;
_wmsCarryBindService = wmsCarryBindService;
+ _wmsCarryUnbindService = wmsCarryUnbindService;
_runService = runService;
_visualDevService = visualDevService;
//_configuration = configuration;
@@ -2133,7 +2136,7 @@ namespace Tnb.WarehouseMgr
CarryCodeUnbindInput carryCodeUnbindInput = new CarryCodeUnbindInput();
carryCodeUnbindInput.carry_id = dt.carry_id;
- await _wmsCarryBindService.CarryCodeUnbind(carryCodeUnbindInput);
+ await _wmsCarryUnbindService.CarryCodeUnbind(carryCodeUnbindInput);
}
}
// 成品调拨入库
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs
index 70351ca4..33ff504f 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs
@@ -266,116 +266,7 @@ namespace Tnb.WarehouseMgr
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.OK, "成功");
}
- ///
- /// 解绑定料箱到料架
- ///
- ///
- ///
- ///
- ///
- [NonAction]
- public async Task CarryUnbind(CarryBindInput input)
- {
- bool isOk = false;
- try
- {
- if (input == null)
- {
- throw new ArgumentNullException(nameof(input));
- }
-
- WmsCarryH? carry = await _db.Queryable().SingleAsync(it => it.id == input.carry_id);
- if (carry != null)
- {
- int row = await _db.Deleteable().Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync();
- isOk = row > 0;
-
- if (!isOk)
- {
- throw Oops.Oh(ErrorCode.COM1001);
- }
-
-
- // 插入子载具绑定记录
- VisualDevModelDataCrInput visualDevModelCrInput = new() { data = new Dictionary() };
- visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_id)] = input.carry_id;
- visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_code)] = input.carry_code;
- visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_id)] = input.membercarry_id;
- visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_code)] = input.membercarry_code;
- visualDevModelCrInput.data[nameof(WmsCarrybindH.type)] = 0;
- visualDevModelCrInput.data[nameof(WmsCarrybindH.carrystd_id)] = carry.carrystd_id;
- if (!string.IsNullOrEmpty(input.create_id))
- visualDevModelCrInput.data[nameof(WmsCarrybindH.create_id)] = input.create_id;
-
- visualDevModelCrInput.data[nameof(WmsCarrybindH.create_time)] = DateTime.Now;
- visualDevModelCrInput.data[nameof(WmsCarrybindH.loc)] = 1;
- VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSCARRYUNBIND_ID, true);
- await _runService.Create(templateEntity, visualDevModelCrInput);
-
- await _db.Ado.CommitTranAsync();
- }
- else
- {
- if (carry == null)
- {
- throw new AppFriendlyException("没有可用的主载具", 500);
- }
- }
- }
- catch (Exception ex)
- {
- Logger.LogError($"【CarryUnbind】 {ex.Message}");
- Logger.LogError($"【CarryUnbind】 {ex.StackTrace}");
- await _db.Ado.RollbackTranAsync();
- return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
- }
-
- return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.OK, "成功");
- }
-
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- [NonAction]
- public async Task CarryCodeUnbind(CarryCodeUnbindInput input)
- {
- bool isOk = false;
- try
- {
- if (input == null)
- {
- throw new ArgumentNullException(nameof(input));
- }
-
- WmsCarryH? carry = await _db.Queryable().SingleAsync(it => it.id == input.carry_id);
- if (carry != null)
- {
- int row = await _db.Deleteable().Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync();
- isOk = row > 0;
-
- if (!isOk)
- {
- throw Oops.Oh(ErrorCode.COM1001);
- }
- }
- else
- {
- if (carry == null)
- {
- throw new AppFriendlyException("没有可用的主载具", 500);
- }
- }
- }
- catch (Exception ex)
- {
- return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
- }
- return Task.FromResult(true);
- }
+
/* public override async Task ModifyAsync(WareHouseUpInput input)
{
if (input == null) throw new ArgumentNullException(nameof(input));
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryUnbindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryUnbindService.cs
index 34923f99..2f779bf1 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryUnbindService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryUnbindService.cs
@@ -6,8 +6,12 @@ using JNPF.FriendlyException;
using JNPF.VisualDev;
using JNPF.VisualDev.Entitys;
using JNPF.VisualDev.Interfaces;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
using SqlSugar;
using Tnb.WarehouseMgr.Entities;
+using Tnb.WarehouseMgr.Entities.Dto.Inputs;
+using Tnb.WarehouseMgr.Entities.Dto.Outputs;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
@@ -17,25 +21,22 @@ namespace Tnb.WarehouseMgr
/// 载具解绑
///
[OverideVisualDev(ModuleConsts.MODULE_WMSCARRYUNBIND_ID)]
- public class WmsCarryUnbindService : BaseWareHouseService
+ public class WmsCarryUnbindService : BaseWareHouseService, IWmsCarryUnbindService
{
private readonly ISqlSugarClient _db;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
private readonly IUserManager _userManager;
- private readonly IWareHouseService _wareHouseService;
public WmsCarryUnbindService(
ISqlSugarRepository repository,
IRunService runService,
IVisualDevService visualDevService,
- IWareHouseService wareHouseService,
IUserManager userManager)
{
_db = repository.AsSugarClient();
_runService = runService;
_visualDevService = visualDevService;
_userManager = userManager;
- _wareHouseService = wareHouseService;
OverideFuncs.CreateAsync = CarryUnbind;
}
private async Task CarryUnbind(VisualDevModelDataCrInput input)
@@ -119,5 +120,116 @@ namespace Tnb.WarehouseMgr
var isOk = await _db.Updateable().SetColumns(it => new WmsCarryReplaceH { status = input.bizTypeId }).Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
if (!isOk) throw Oops.Oh(ErrorCode.COM1001);
}*/
+
+ ///
+ /// 解绑定料箱到料架
+ ///
+ ///
+ ///
+ ///
+ ///
+ [NonAction]
+ public async Task CarryUnbind(CarryBindInput input)
+ {
+ bool isOk = false;
+ try
+ {
+ if (input == null)
+ {
+ throw new ArgumentNullException(nameof(input));
+ }
+
+ WmsCarryH? carry = await _db.Queryable().SingleAsync(it => it.id == input.carry_id);
+ if (carry != null)
+ {
+ int row = await _db.Deleteable().Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync();
+ isOk = row > 0;
+
+ if (!isOk)
+ {
+ throw Oops.Oh(ErrorCode.COM1001);
+ }
+
+
+ // 插入子载具绑定记录
+ VisualDevModelDataCrInput visualDevModelCrInput = new() { data = new Dictionary() };
+ visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_id)] = input.carry_id;
+ visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_code)] = input.carry_code;
+ visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_id)] = input.membercarry_id;
+ visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_code)] = input.membercarry_code;
+ visualDevModelCrInput.data[nameof(WmsCarrybindH.type)] = 0;
+ visualDevModelCrInput.data[nameof(WmsCarrybindH.carrystd_id)] = carry.carrystd_id;
+ if (!string.IsNullOrEmpty(input.create_id))
+ visualDevModelCrInput.data[nameof(WmsCarrybindH.create_id)] = input.create_id;
+
+ visualDevModelCrInput.data[nameof(WmsCarrybindH.create_time)] = DateTime.Now;
+ visualDevModelCrInput.data[nameof(WmsCarrybindH.loc)] = 1;
+ VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSCARRYUNBIND_ID, true);
+ await _runService.Create(templateEntity, visualDevModelCrInput);
+
+ await _db.Ado.CommitTranAsync();
+ }
+ else
+ {
+ if (carry == null)
+ {
+ throw new AppFriendlyException("没有可用的主载具", 500);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Logger.LogError($"【CarryUnbind】 {ex.Message}");
+ Logger.LogError($"【CarryUnbind】 {ex.StackTrace}");
+ await _db.Ado.RollbackTranAsync();
+ return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
+ }
+
+ return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.OK, "成功");
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [NonAction]
+ public async Task CarryCodeUnbind(CarryCodeUnbindInput input)
+ {
+ bool isOk = false;
+ try
+ {
+ if (input == null)
+ {
+ throw new ArgumentNullException(nameof(input));
+ }
+
+ WmsCarryH? carry = await _db.Queryable().SingleAsync(it => it.id == input.carry_id);
+ if (carry != null)
+ {
+ int row = await _db.Deleteable().Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync();
+ isOk = row > 0;
+
+ if (!isOk)
+ {
+ throw Oops.Oh(ErrorCode.COM1001);
+ }
+ }
+ else
+ {
+ if (carry == null)
+ {
+ throw new AppFriendlyException("没有可用的主载具", 500);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
+ }
+ return Task.FromResult(true);
+ }
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
index d7831dee..a1bad1c1 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
@@ -49,7 +49,7 @@ namespace Tnb.WarehouseMgr
[ServiceModule(BizTypeId)]
public class WmsMaterialTransferService : BaseWareHouseService
{
- private const string BizTypeId = "34354738929685";
+ private const string BizTypeId = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
private readonly ISqlSugarClient _db;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
@@ -57,6 +57,7 @@ namespace Tnb.WarehouseMgr
private readonly IBillRullService _billRullService;
private readonly IUserManager _userManager;
private readonly IWmsCarryBindService _wmsCarryBindService;
+ private readonly IWmsCarryUnbindService _wmsCarryUnbindService;
public static SemaphoreSlim s_taskDistributeToZCC = new(1);
@@ -67,7 +68,8 @@ namespace Tnb.WarehouseMgr
IWareHouseService wareHouseService,
IUserManager userManager,
IBillRullService billRullService,
- IEventPublisher eventPublisher,
+ IEventPublisher eventPublisher,
+ IWmsCarryUnbindService wmsCarryUnbindService,
IWmsCarryBindService wmsCarryBindService)
{
_db = repository.AsSugarClient();
@@ -77,6 +79,7 @@ namespace Tnb.WarehouseMgr
_userManager = userManager;
_billRullService = billRullService;
_wmsCarryBindService = wmsCarryBindService;
+ _wmsCarryUnbindService = wmsCarryUnbindService;
OverideFuncs.GetListAsync = GetList;
}
@@ -565,33 +568,45 @@ namespace Tnb.WarehouseMgr
{
throw new ArgumentNullException(nameof(input));
}
- List wmsCarryCodes = await _db.Queryable().Where(r => r.carry_id == input.carryIds[0]).ToListAsync();
- if (wmsCarryCodes.Count == 0)
+
+ try
{
- Logger.LogWarning($"【ModifyAsync】载具{input.carryIds[0]}没有绑定物料条码");
- return;
+ List wmsCarryCodes = await _db.Queryable().Where(r => r.carry_id == input.carryIds[0]).ToListAsync();
+ if (wmsCarryCodes.Count == 0)
+ {
+ Logger.LogWarning($"【WmsMaterialTransferService ModifyAsync】载具{input.carryIds[0]}没有绑定物料条码");
+ return;
+ }
+ await _db.Ado.BeginTranAsync();
+ // 更新已转数量
+ bool isOk = await _db.Updateable().SetColumns(it => new WmsMaterialTransferD { yzqty = it.yzqty + wmsCarryCodes.Sum(r => r.codeqty) })
+ .Where(it => it.id == input.source_id).ExecuteCommandHasChangeAsync();
+
+ // 如果所有明细已完成 更新主表状态为完成
+ WmsMaterialTransferD wmsMaterialTransferd = await _db.Queryable().Where(r => r.id == input.source_id).SingleAsync();
+ List wmsMaterialTransferDs = _db.Queryable()
+ .Where(a => a.bill_id == wmsMaterialTransferd.bill_id && a.yzqty < a.qty).ToList();
+ bool isOk2 = true;
+ if (wmsMaterialTransferDs.Count == 0)
+ {
+ isOk2 = await _db.Updateable().SetColumns(it => new WmsMaterialTransfer { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID })
+ .Where(it => it.id == wmsMaterialTransferd.bill_id).ExecuteCommandHasChangeAsync();
+ }
+
+ // require_code是任务单
+ //string mo_task_code = input.require_code;
+
+ if (!isOk || !isOk2)
+ {
+ throw Oops.Oh(ErrorCode.COM1001);
+ }
+ await _db.Ado.CommitTranAsync();
}
- // 更新已转数量
- bool isOk = await _db.Updateable().SetColumns(it => new WmsMaterialTransferD { yzqty = it.yzqty + wmsCarryCodes.Sum(r => r.codeqty)})
- .Where(it => it.id == input.source_id).ExecuteCommandHasChangeAsync();
-
- // 如果所有明细已完成 更新主表状态为完成
- WmsMaterialTransferD wmsMaterialTransferd = await _db.Queryable().Where(r => r.id == input.source_id).SingleAsync();
- List wmsMaterialTransferDs = _db.Queryable()
- .Where(a => a.bill_id == wmsMaterialTransferd.bill_id && a.yzqty < a.qty).ToList();
- bool isOk2 = true;
- if (wmsMaterialTransferDs.Count == 0)
+ catch(Exception ex)
{
- isOk2 = await _db.Updateable().SetColumns(it => new WmsMaterialTransfer { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID })
- .Where(it => it.id == wmsMaterialTransferd.bill_id).ExecuteCommandHasChangeAsync();
- }
-
- // require_code是任务单
- //string mo_task_code = input.require_code;
-
- if (!isOk || !isOk2)
- {
- throw Oops.Oh(ErrorCode.COM1001);
+ Logger.LogError("【WmsPrdReturnService ModifyAsync】" + ex.Message);
+ Logger.LogError("【WmsPrdReturnService ModifyAsync】" + ex.StackTrace);
+ await _db.Ado.RollbackTranAsync();
}
}
@@ -999,7 +1014,7 @@ namespace Tnb.WarehouseMgr
CarryBindInput carryBindInput = new();
carryBindInput.carry_id = wmsCarryH.id;
carryBindInput.carry_code = wmsCarryH.carry_code;
- var resCarryUnbind = await _wmsCarryBindService.CarryUnbind(carryBindInput);
+ var resCarryUnbind = await _wmsCarryUnbindService.CarryUnbind(carryBindInput);
if (resCarryUnbind.code != JNPF.Common.Enums.HttpStatusCode.OK)
{
throw new AppFriendlyException($"解除绑定料箱到料架失败 载具 {input.carry_code}", 500);
@@ -1021,7 +1036,7 @@ namespace Tnb.WarehouseMgr
}
}
- Logger.LogWarning($"【RackEmptyInstock】开始生成预任务");
+ Logger.LogWarning($"【RackInstock】开始生成预任务");
CommonCreatePretaskInput commonCreatePretaskInput = new();
commonCreatePretaskInput.startlocation_id = startlocation.id;
commonCreatePretaskInput.endlocation_id = endlocation.id;
@@ -1080,7 +1095,7 @@ namespace Tnb.WarehouseMgr
await _db.Ado.BeginTranAsync();
- Logger.LogWarning($"【RackEmptyInstock】开始生成预任务");
+ Logger.LogWarning($"【RackInstock】开始生成预任务");
CommonCreatePretaskInput commonCreatePretaskInput = new();
commonCreatePretaskInput.startlocation_id = startlocation.id;
commonCreatePretaskInput.endlocation_id = endlocation.id;
@@ -1095,7 +1110,7 @@ namespace Tnb.WarehouseMgr
Logger.LogInformation($"【RackInstock】生成预任务失败 载具 {input.carry_code}");
throw new AppFriendlyException($"生成预任务失败 载具 {input.carry_code}", 500);
}
- Logger.LogWarning($"【RackEmptyInstock】生成预任务成功");
+ Logger.LogWarning($"【RackInstock】生成预任务成功");
await _db.Ado.CommitTranAsync();
}
catch (Exception ex)
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs
index 0ba19ac5..ab216e5d 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs
@@ -35,6 +35,7 @@ namespace Tnb.WarehouseMgr
private readonly IBillRullService _billRullService;
private readonly IWareHouseService _wareHouseService;
private readonly IWmsCarryBindService _wmsCarryBindService;
+ private readonly IWmsCarryUnbindService _wmsCarryUnbindService;
private readonly IWmsCarryService _wmsCarryService;
@@ -47,6 +48,7 @@ namespace Tnb.WarehouseMgr
IWareHouseService wareHouseService,
IBillRullService billRullService,
IWmsCarryBindService wmsCarryBindService,
+ IWmsCarryUnbindService wmsCarryUnbindService,
IWmsCarryService wmsCarryService)
{
_db = repository.AsSugarClient();
@@ -56,6 +58,7 @@ namespace Tnb.WarehouseMgr
_billRullService = billRullService;
_wareHouseService = wareHouseService;
_wmsCarryBindService = wmsCarryBindService;
+ _wmsCarryUnbindService = wmsCarryUnbindService;
_wmsCarryService = wmsCarryService;
OverideFuncs.CreateAsync = PDACarryBind;
}
@@ -401,7 +404,7 @@ namespace Tnb.WarehouseMgr
WmsCarryH wmsCarryH = _db.Queryable().Where(r => r.location_id == input.location_id).First();
CarryCodeUnbindInput carryCodeUnbindInput = new CarryCodeUnbindInput();
carryCodeUnbindInput.carry_id = wmsCarryH.id;
- await _wmsCarryBindService.CarryCodeUnbind(carryCodeUnbindInput);
+ await _wmsCarryUnbindService.CarryCodeUnbind(carryCodeUnbindInput);
await _db.Ado.CommitTranAsync();
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs
new file mode 100644
index 00000000..a1d69bb7
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs
@@ -0,0 +1,381 @@
+using System.Security.Cryptography.X509Certificates;
+using JNPF.Common.Core.Manager;
+using JNPF.Common.Dtos.VisualDev;
+using JNPF.Common.Enums;
+using JNPF.Common.Security;
+using JNPF.FriendlyException;
+using JNPF.VisualDev;
+using JNPF.VisualDev.Entitys;
+using JNPF.VisualDev.Interfaces;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using NPOI.POIFS.Storage;
+using SqlSugar;
+using Tnb.BasicData.Entities;
+using Tnb.WarehouseMgr.Entities;
+using Tnb.WarehouseMgr.Entities.Attributes;
+using Tnb.WarehouseMgr.Entities.Consts;
+using Tnb.WarehouseMgr.Entities.Dto;
+using Tnb.WarehouseMgr.Entities.Dto.Inputs;
+using Tnb.WarehouseMgr.Entities.Dto.Outputs;
+using Tnb.WarehouseMgr.Entities.Entity;
+using Tnb.WarehouseMgr.Entities.Enums;
+using Tnb.WarehouseMgr.Interfaces;
+
+namespace Tnb.WarehouseMgr
+{
+ ///
+ /// 载具解绑
+ ///
+ [OverideVisualDev(ModuleConsts.MODULE_WMSPRDRETURN_ID)]
+ [ServiceModule(BizTypeId)]
+ public class WmsPrdReturnService : BaseWareHouseService, IWmsPrdReturnService
+ {
+ private const string BizTypeId = WmsWareHouseConst.BIZTYPE_PRDRETURN_ID;
+ private readonly ISqlSugarClient _db;
+ private readonly IRunService _runService;
+ private readonly IVisualDevService _visualDevService;
+ private readonly IUserManager _userManager;
+ private readonly IWareHouseService _wareHouseService;
+ public WmsPrdReturnService(
+ ISqlSugarRepository repository,
+ IRunService runService,
+ IVisualDevService visualDevService,
+ IWareHouseService wareHouseService,
+ IUserManager userManager)
+ {
+ _db = repository.AsSugarClient();
+ _runService = runService;
+ _visualDevService = visualDevService;
+ _userManager = userManager;
+ _wareHouseService = wareHouseService;
+ }
+
+ ///
+ /// 从产线呼叫装料架到暂存仓/缓存仓
+ ///
+ ///
+ ///
+ [HttpPost, NonUnify, AllowAnonymous]
+ public async Task PrdReturn(PrdReturnInput input)
+ {
+ WmsPrdReturnH wmsPrdReturnH = await _db.Queryable().Where(r => r.id == input.source_id).FirstAsync();
+ if (wmsPrdReturnH == null)
+ {
+ Logger.LogWarning($"【PrdReturn】不存在id为{input.source_id}的生产退料单!");
+ throw new AppFriendlyException($"【PrdReturn】不存在id为{input.startlocation_id}的生产退料单!", 500);
+ }
+ if (wmsPrdReturnH.status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)
+ {
+ Logger.LogWarning($"【PrdReturn】生产退料单{wmsPrdReturnH.bill_code}状态为已完成!");
+ throw new AppFriendlyException($"【PrdReturn】生产退料单{wmsPrdReturnH.bill_code}状态为已完成!", 500);
+ }
+ if (wmsPrdReturnH.status == WmsWareHouseConst.BILLSTATUS_CANCEL_ID)
+ {
+ Logger.LogWarning($"【PrdReturn】生产退料单{wmsPrdReturnH.bill_code}状态为已取消!");
+ throw new AppFriendlyException($"【PrdReturn】生产退料单{wmsPrdReturnH.bill_code}状态为已取消!", 500);
+ }
+
+ WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.carry_code == input.carry_code).FirstAsync();
+
+ // 料架到暂存仓
+ if (wmsCarryH.carrystd_id == "26037267399717")
+ {
+ return await Return_到暂存仓(input, wmsCarryH, wmsPrdReturnH);
+ }
+ // 载运小车和载运料架到缓存仓
+ else if (wmsCarryH.carrystd_id == "26103233723941" || wmsCarryH.carrystd_id == "34995839046677")
+ {
+ return await Return_到缓存仓(input, wmsCarryH, wmsPrdReturnH);
+ }
+ else
+ {
+ Logger.LogError($"【PrdReturn】当前载具的规格id是{wmsCarryH.carrystd_id} 无法处理此类型的载具!");
+ return await ToApiResult(HttpStatusCode.InternalServerError, $"【PrdReturn】当前载具的规格id是{wmsCarryH.carrystd_id} 无法处理此类型的载具!");
+ }
+ }
+
+
+ async Task Return_到暂存仓(PrdReturnInput input, WmsCarryH wmsCarryH, WmsPrdReturnH wmsPrdReturnH)
+ {
+ try
+ {
+ BasLocation startlocation = _db.Queryable().Where(r => r.id == input.startlocation_id).First();
+ if (startlocation == null)
+ {
+ Logger.LogWarning($"【PrdReturn】不存在id为{input.startlocation_id}的库位!");
+ throw new AppFriendlyException($"【PrdReturn】不存在id为{input.startlocation_id}的库位!", 500);
+ }
+ if (string.IsNullOrEmpty(input.carry_code))
+ {
+ Logger.LogWarning($"【PrdReturn】料架不能为空!{input.carry_code}");
+ throw new AppFriendlyException($"【PrdReturn】料架不能为空!{input.carry_code}!", 500);
+ }
+
+ // 找到未占用且未锁定的库位
+ ISugarQueryable rackEndLocations =
+ _db.Queryable()
+ .Where(r => r.wh_id == "33780009364245" && r.is_use == "0" && r.is_lock == 0 && r.is_type == "0").OrderBy(a => a.id).Take(1);
+
+ if (rackEndLocations.Count() == 0)
+ {
+ Logger.LogWarning($"【PrdReturn】没有可用的终点库位");
+ throw new AppFriendlyException($"【PrdReturn】没有可用的终点库位!", 500);
+ }
+
+ BasLocation endlocation = rackEndLocations.First();
+
+ var memberCarryCodes = _db.Queryable()
+ .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) => new
+ {
+ carry_code = b.carry_code,
+ barcode = c.barcode,
+ material_id = c.material_id,
+ material_code = c.material_code,
+ }).ToList();
+
+ List matIds = memberCarryCodes.Select(r => r.material_id).Distinct().ToList();
+
+ // 匹配生产退料单明细的物料种类
+ List existsMatIds = _db.Queryable().Where(r => r.bill_id == input.source_id).Select(r => r.material_id).Distinct().ToList();
+ List notExistsMatIds = matIds.Where(r => !existsMatIds.Contains(r)).ToList();
+
+ if (notExistsMatIds.Count() > 0)
+ {
+ var existsMat = memberCarryCodes.Where(r => notExistsMatIds.Contains(r.material_id)).Select(r => new
+ {
+ carry_code = r.carry_code,
+ barcode = r.barcode,
+ });
+
+ string msg = "";
+ foreach (var row in existsMat)
+ {
+ msg += $",料箱{row.carry_code} 条码{row.barcode}";
+ }
+ Logger.LogWarning($"【PrdReturn】存在装有与生产退料单明细不匹配物料的料箱,请检查! {msg.Trim(',')}");
+ throw new AppFriendlyException($"【PrdReturn】存在装有与生产退料单明细不匹配物料的料箱,请检查!{msg.Trim(',')}", 500);
+ }
+
+ WmsPretaskH wmsPretaskH = _db.Queryable().Where(r => r.carry_code == wmsCarryH.carry_code && r.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID).First();
+ if (wmsPretaskH != null)
+ {
+ Logger.LogWarning($"【CallRackToProductionLine】此料架{wmsCarryH.carry_code}存在未完成的预任务{wmsPretaskH.bill_code}!");
+ throw new AppFriendlyException($"此料架{wmsCarryH.carry_code}存在未完成的预任务{wmsPretaskH.bill_code}!", 500);
+ }
+
+ await _db.Ado.BeginTranAsync();
+
+ Logger.LogWarning($"【PrdReturn】开始生成预任务");
+ CommonCreatePretaskInput commonCreatePretaskInput = new();
+ commonCreatePretaskInput.startlocation_id = startlocation.id;
+ commonCreatePretaskInput.endlocation_id = endlocation.id;
+ commonCreatePretaskInput.source_id = input.source_id;
+ commonCreatePretaskInput.carry_id = wmsCarryH.id;
+ commonCreatePretaskInput.carry_code = input.carry_code;
+ commonCreatePretaskInput.task_type = "";
+ commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_PRDRETURN_ID;
+
+ var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
+ if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
+ {
+ Logger.LogInformation($"【PrdReturn】生成预任务失败 载具 {input.carry_code}");
+ throw new AppFriendlyException($"生成预任务失败 载具 {input.carry_code}", 500);
+ }
+ Logger.LogWarning($"【PrdReturn】生成预任务成功");
+ await _db.Ado.CommitTranAsync();
+ }
+ catch (Exception ex)
+ {
+ Logger.LogError("【PrdReturn】" + ex.Message);
+ Logger.LogError("【PrdReturn】" + ex.StackTrace);
+ await _db.Ado.RollbackTranAsync();
+ return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
+ }
+ return await ToApiResult(HttpStatusCode.OK, "成功");
+ }
+
+ async Task Return_到缓存仓(PrdReturnInput input, WmsCarryH wmsCarryH, WmsPrdReturnH wmsPrdReturnH)
+ {
+ try
+ {
+ BasLocation startlocation = _db.Queryable().Where(r => r.id == input.startlocation_id).First();
+ if (startlocation == null)
+ {
+ Logger.LogWarning($"【PrdReturn】不存在id为{input.startlocation_id}的库位!");
+ throw new AppFriendlyException($"【PrdReturn】不存在id为{input.startlocation_id}的库位!", 500);
+ }
+ if (string.IsNullOrEmpty(input.carry_code))
+ {
+ Logger.LogWarning($"【PrdReturn】料架不能为空!{input.carry_code}");
+ throw new AppFriendlyException($"【PrdReturn】料架不能为空!{input.carry_code}!", 500);
+ }
+
+ // 找到未占用且未锁定的库位
+ ISugarQueryable rackEndLocations =
+ _db.Queryable()
+ .Where(r => r.wh_id == "26103348825381" && r.is_use == "0" && r.is_lock == 0 && r.is_type == "0").OrderBy(a => a.id).Take(1);
+
+ if (rackEndLocations.Count() == 0)
+ {
+ Logger.LogWarning($"【PrdReturn】没有可用的终点库位");
+ throw new AppFriendlyException($"【PrdReturn】没有可用的终点库位!", 500);
+ }
+
+ BasLocation endlocation = rackEndLocations.First();
+
+ var memberCarryCodes = _db.Queryable()
+ .InnerJoin((a, b) => a.id == b.carry_id)
+ .Where((a, b) => a.id == wmsCarryH.id).Select((a, b) => new
+ {
+ carry_code = a.carry_code,
+ barcode = b.barcode,
+ material_id = b.material_id,
+ material_code = b.material_code,
+ }).ToList();
+
+ List matIds = memberCarryCodes.Select(r => r.material_id).Distinct().ToList();
+
+ // 匹配生产退料单明细的物料种类
+ List existsMatIds = _db.Queryable().Where(r => r.bill_id == input.source_id).Select(r => r.material_id).Distinct().ToList();
+ List notExistsMatIds = matIds.Where(r => !existsMatIds.Contains(r)).ToList();
+
+ if (notExistsMatIds.Count() > 0)
+ {
+ var existsMat = memberCarryCodes.Where(r => notExistsMatIds.Contains(r.material_id)).Select(r => new
+ {
+ carry_code = r.carry_code,
+ barcode = r.barcode,
+ });
+
+ string msg = "";
+ foreach (var row in existsMat)
+ {
+ msg += $",料箱{row.carry_code} 条码{row.barcode}";
+ }
+ Logger.LogWarning($"【PrdReturn】存在装有与生产退料单明细不匹配物料的料箱,请检查! {msg.Trim(',')}");
+ throw new AppFriendlyException($"【PrdReturn】存在装有与生产退料单明细不匹配物料的料箱,请检查!{msg.Trim(',')}", 500);
+ }
+
+ WmsPretaskH wmsPretaskH = _db.Queryable().Where(r => r.carry_code == wmsCarryH.carry_code && r.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID).First();
+ if (wmsPretaskH != null)
+ {
+ Logger.LogWarning($"【CallRackToProductionLine】此料架{wmsCarryH.carry_code}存在未完成的预任务{wmsPretaskH.bill_code}!");
+ throw new AppFriendlyException($"此料架{wmsCarryH.carry_code}存在未完成的预任务{wmsPretaskH.bill_code}!", 500);
+ }
+
+ await _db.Ado.BeginTranAsync();
+
+ Logger.LogWarning($"【PrdReturn】开始生成预任务");
+ CommonCreatePretaskInput commonCreatePretaskInput = new();
+ commonCreatePretaskInput.startlocation_id = startlocation.id;
+ commonCreatePretaskInput.endlocation_id = endlocation.id;
+ commonCreatePretaskInput.source_id = input.source_id;
+ commonCreatePretaskInput.carry_id = wmsCarryH.id;
+ commonCreatePretaskInput.carry_code = input.carry_code;
+ commonCreatePretaskInput.task_type = "";
+ commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_PRDRETURN_ID;
+
+ var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
+ if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
+ {
+ Logger.LogInformation($"【PrdReturn】生成预任务失败 载具 {input.carry_code}");
+ throw new AppFriendlyException($"生成预任务失败 载具 {input.carry_code}", 500);
+ }
+ Logger.LogWarning($"【PrdReturn】生成预任务成功");
+ await _db.Ado.CommitTranAsync();
+ }
+ catch (Exception ex)
+ {
+ Logger.LogError("【PrdReturn】" + ex.Message);
+ Logger.LogError("【PrdReturn】" + ex.StackTrace);
+ await _db.Ado.RollbackTranAsync();
+ return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
+ }
+ return await ToApiResult(HttpStatusCode.OK, "成功");
+ }
+
+ 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();
+
+ List wmsCarryCodes = null;
+ // 料架到暂存仓
+ if (wmsCarryH.carrystd_id == "26037267399717")
+ {
+ wmsCarryCodes = _db.Queryable()
+ .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();
+ }
+ // 载运小车和载运料架到缓存仓
+ else if (wmsCarryH.carrystd_id == "26103233723941" || wmsCarryH.carrystd_id == "34995839046677")
+ {
+
+ 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;
+ }
+
+ if (wmsCarryCodes.Count == 0)
+ {
+ Logger.LogWarning($"【WmsPrdReturnService ModifyAsync】载具{input.carryIds[0]}没有绑定物料条码");
+ return;
+ }
+
+ await _db.Ado.BeginTranAsync();
+ // 更新已转数量
+ List wmsPrdReturnDs = _db.Queryable().Where(r => r.bill_id == input.source_id).ToList();
+ foreach (WmsPrdReturnD wmsPrdReturnD in wmsPrdReturnDs)
+ {
+ decimal qty = wmsCarryCodes.Where(r => r.material_id == wmsPrdReturnD.material_id).Sum(r => r.codeqty);
+ wmsPrdReturnD.ytqty = wmsPrdReturnD.ytqty + qty;
+ }
+
+
+ bool isOk = await _db.Updateable(wmsPrdReturnDs).UpdateColumns(r => r.ytqty).ExecuteCommandAsync() > 0;
+
+ // 如果所有明细已完成 更新主表状态为完成
+ wmsPrdReturnDs = _db.Queryable()
+ .Where(a => a.bill_id == input.source_id && a.ytqty < a.qty).ToList();
+ bool isOk2 = true;
+ if (wmsPrdReturnDs.Count == 0)
+ {
+ isOk2 = await _db.Updateable().SetColumns(it => new WmsPrdReturnH { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID })
+ .Where(it => it.id == input.source_id).ExecuteCommandHasChangeAsync();
+ }
+
+ // require_code是任务单
+ //string mo_task_code = input.require_code;
+
+ if (!isOk || !isOk2)
+ {
+ throw Oops.Oh(ErrorCode.COM1001);
+ }
+ await _db.Ado.CommitTranAsync();
+ }
+ catch(Exception ex)
+ {
+ Logger.LogError("【WmsPrdReturnService ModifyAsync】" + ex.Message);
+ Logger.LogError("【WmsPrdReturnService ModifyAsync】" + ex.StackTrace);
+ await _db.Ado.RollbackTranAsync();
+ }
+
+ }
+ }
+}