From c40ce51e7782b486bfa8ba55ac89aa9278f3d4dd Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Tue, 21 May 2024 15:00:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=9F=E6=9D=90=E6=96=99=E8=BD=AC=E5=BA=93?= =?UTF-8?q?=E3=80=81=E5=87=BA=E5=BA=93=E7=AD=BE=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.ProductionMgr/RedisBackGround.cs | 8 +- .../Consts/ModuleConsts.cs | 4 + .../Consts/WmsWareHouseConst.cs | 20 ++- .../Dto/Inputs/CommonCreatePretaskInput.cs | 3 + .../Inputs/MaterialTransferDistributeInput.cs | 25 +++ .../Entity/WmsMaterialTransfer.cs | 117 ++++++++++++ .../Entity/WmsMaterialTransferD.cs | 89 +++++++++ .../IWareHouseService.cs | 16 ++ .../Tnb.WarehouseMgr/WareHouseService.cs | 103 ++++++----- .../Tnb.WarehouseMgr/WmsCarryBindService.cs | 2 +- .../WmsMaterialTransferService.cs | 170 ++++++++++++++++++ .../WmsPDACarryBindService.cs | 20 ++- .../Configurations/ConnectionStrings.json | 4 +- 13 files changed, 528 insertions(+), 53 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferDistributeInput.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransfer.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferD.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index f9f2706b..aadfd1c1 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -216,7 +216,7 @@ namespace Tnb.ProductionMgr if (DistaskH != null) { - Logger.LogInformation($@"【定时任务CheckGet】 {JsonConvert.SerializeObject(DistaskH)}"); + Logger.LogInformation($@"【定时任务CheckGet】 DistaskH != null"); dynamic reqBody = new ExpandoObject(); reqBody.taskCode = DistaskH.bill_code; reqBody.slotCode = key; @@ -245,7 +245,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } } - else { + else + { + Logger.LogInformation($@"【定时任务CheckGet】 DistaskH == null"); var DistaskH = _repository.AsSugarClient().Queryable().Where(p => p.startlocation_code == key && p.status == WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID && string.IsNullOrEmpty(p.extras)).First(); if (DistaskH != null) { @@ -1697,7 +1699,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA // 供料叠盘机空托盘自动入库 YCLGLDPJInstocktimer = new Timer(YCLGLDPJInstock, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); - //// 外协叠盘机空托盘自动入库 + // 外协叠盘机空托盘自动入库 //YCLWXDPJInstocktimer = new Timer(YCLWXDPJInstock, null, TimeSpan.Zero, TimeSpan.FromSeconds(100000)); // 二楼上升降机 diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs index 5c5478d3..89946d14 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs @@ -221,5 +221,9 @@ public class ModuleConsts /// 模块标识-成品调拨入库单 /// public const string MODULE_WMSTRANSFERINSTOCKH_ID = "34154749548053"; + /// + /// 模块标识-原材料转库单 TODO + /// + public const string MODULE_WMSMATERIALTRANSFER_ID = "123"; } \ No newline at end of file diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs index 7d51555e..7fa52c6a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs @@ -203,9 +203,13 @@ /// public const string BIZTYPE_WMSDELIVERY_ID = "26585291847957"; /// - /// 预任务生成业务类型-销售出库下发(未定) TODO + /// 预任务生成业务类型-销售出库下发 /// - public const string BIZTYPE_WMSSALERELEASE_ID = "BIZTYPE_WMSSALERELEASE_ID"; + public const string BIZTYPE_WMSSALERELEASE_ID = "25104446664213"; + /// + /// 预任务生成业务类型-原材料转库单下发 todo + /// + public const string BIZTYPE_WMSMATERIALTRANSFER_ID = "BIZTYPE_WMSMATERIALTRANSFER_ID"; /// /// 预任务生成业务类型-载具绑定 /// @@ -311,6 +315,18 @@ /// public const string FinishproductOutstockStation3 = "30018217822229"; /// + /// 一楼三工位库位 + /// + public const string Floor1SGWOutstockStation1 = "30773146852476"; + /// + /// 一楼三工位库位 + /// + public const string Floor1SGWOutstockStation2 = "30773146852477"; + /// + /// 一楼三工位库位 + /// + public const string Floor1SGWOutstockStation3 = "30773146852478"; + /// /// 分拣任务生成Encode /// public const string WMS_SORTINGTASK_ENCODE = "Sortingtask"; diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CommonCreatePretaskInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CommonCreatePretaskInput.cs index 66a662f3..be7b61e7 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CommonCreatePretaskInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CommonCreatePretaskInput.cs @@ -20,6 +20,9 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Inputs public string biz_type { get; set; } public string task_type { get; set; } + + public string require_id { get; set; } + } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferDistributeInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferDistributeInput.cs new file mode 100644 index 00000000..2a151a77 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferDistributeInput.cs @@ -0,0 +1,25 @@ +namespace Tnb.WarehouseMgr.Entities.Dto +{ + /// + /// 库房业务更新输入参数 + /// + public class MaterialTransferDistributeInput + { + /// + /// 组织ID + /// + public string org_id { get; set; } + /// + /// 创建用户 + /// + public string create_id { get; set; } + ///// + ///// 物料数量 + ///// + //public decimal qty { get; set; } + /// + /// 来源单据id + /// + public string? source_id { get; set; } + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransfer.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransfer.cs new file mode 100644 index 00000000..549e3cc5 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransfer.cs @@ -0,0 +1,117 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 原材料转库单 +/// +[SugarTable("wms_material_transfer")] +public partial class WmsMaterialTransfer : BaseEntity +{ + public WmsMaterialTransfer() + { + 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; } + + /// + /// 所属组织 + /// + public string? org_id { get; set; } + + /// + /// 租户ID + /// + public string? tenant_id { get; set; } + + /// + /// 时间戳(用于并发控制) + /// + public DateTime? timestamp { get; set; } + + /// + /// 单号 + /// + public string? bill_code { get; set; } + + /// + /// 单据状态 + /// + public string? status { get; set; } + + /// + /// 入库单创建日期 + /// + public DateTime? bill_date { get; set; } + + /// + /// 出库仓库 + /// + public string? warehouse_outstock { get; set; } + + /// + /// 入库仓库 + /// + public string? warehouse_instock { get; set; } + + /// + /// 转库类型 + /// + public string? type { get; set; } + + /// + /// 出库业务员 + /// + public string? biller_out { get; set; } + + /// + /// 出库部门 + /// + public string? depart_out { get; set; } + + /// + /// 入库业务员 + /// + public string? biller_in { get; set; } + + /// + /// 入库部门 + /// + public string? depart_in { get; set; } + + /// + /// 应发货日期 + /// + public DateTime? deliver_date { get; set; } + + /// + /// 应到货日期 + /// + public DateTime? arrival_date { get; set; } + + /// + /// 生产订单号 + /// + public string? order_code { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferD.cs new file mode 100644 index 00000000..cb9dc129 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferD.cs @@ -0,0 +1,89 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 原材料转库单子表 +/// +[SugarTable("wms_material_transfer_d")] +public partial class WmsMaterialTransferD : BaseEntity +{ + public WmsMaterialTransferD() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 流程任务Id + /// + public string? f_flowtaskid { get; set; } + + /// + /// 流程引擎Id + /// + public string? f_flowid { get; set; } + + /// + /// 行号 + /// + public string? lineno { get; set; } + + /// + /// 物品ID + /// + public string? material_id { get; set; } + + /// + /// 物品代码 + /// + public string? material_code { get; set; } + + /// + /// 规格型号 + /// + public string? material_specification { get; set; } + + /// + /// 单位ID + /// + public string? unit_id { get; set; } + + /// + /// 单位代码 + /// + public string? unit_code { get; set; } + + /// + /// 批号 + /// + public string? code_batch { get; set; } + + + /// + /// 工位编码 + /// + public string? station_code { get; set; } + + /// + /// 应转主数量 + /// + public decimal? qty { get; set; } + + /// + /// 已下发数量 + /// + public decimal? yxfqty { get; set; } + + /// + /// 已转数量 + /// + public decimal? yzqty { get; set; } + + + /// + /// 主表ID + /// + public string? bill_id { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs index 5a5a9865..53085f85 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs @@ -1,4 +1,5 @@ using System.Linq.Expressions; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Tnb.BasicData.Entities; using Tnb.WarehouseMgr.Entities; @@ -46,6 +47,13 @@ namespace Tnb.WarehouseMgr.Interfaces /// string[] GetFloor1OutstockLocation(); + /// + /// 是否为三工位库位 + /// + /// + /// + string[] GetFloor1SGWOutstockLocation(); + /// /// 生成预任务 /// @@ -104,5 +112,13 @@ namespace Tnb.WarehouseMgr.Interfaces /// 料架id /// Task Floor2EmptyCarryCreateZZCPretask(string rackid); + + /// + /// 生成预任务接口 CTU需要传task_type + /// + /// + /// + [HttpPost, NonUnify, AllowAnonymous] + Task CommonCreatePretask(CommonCreatePretaskInput input); } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 86caedaa..5ec1ee0c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -227,6 +227,18 @@ namespace Tnb.WarehouseMgr , WmsWareHouseConst.FinishproductOutstockStation3 }; } + /// + /// 是否为三工位库位 + /// + /// + /// + public string[] GetFloor1SGWOutstockLocation() + { + return new string[3] { WmsWareHouseConst.Floor1SGWOutstockStation1 , WmsWareHouseConst.Floor1SGWOutstockStation2 + , WmsWareHouseConst.Floor1SGWOutstockStation3 }; + } + + /// /// 出库策略-销售出库下发 /// @@ -1633,8 +1645,8 @@ namespace Tnb.WarehouseMgr //更新电梯任务数量 _ = await _db.Updateable().SetColumns(it => new WmsElevatorH { task_nums = it.task_nums - 1}).Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ExecuteCommandAsync(); - // 更新中储仓任务数量 - _ = await _db.Updateable().SetColumns(it => new BasLocation { task_nums = it.task_nums - 1 }).Where(it => disTasks.Where(r => r.startlocation_code.Contains("SSX-111-011") || r.startlocation_code.Contains("SSX-111-012")).Select(x => x.startlocation_code).Contains(it.location_code)).ExecuteCommandAsync(); + // 更新任务数量 + _ = await _db.Updateable().SetColumns(it => new BasLocation { task_nums = it.task_nums - 1 }).Where(it => disTasks.Select(x => x.endlocation_code).Contains(it.location_code)).ExecuteCommandAsync(); //更新载具,锁定状态为未锁定,更新载具的库位当前任务的目标库位 @@ -1712,6 +1724,12 @@ namespace Tnb.WarehouseMgr await _db.Updateable().SetColumns(r => r.qty == r.qty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync(); } } + // 原材料转库单 + else if (dt.biz_type == WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID) + { + WmsCarryCode wmsCarryCode = await _db.Queryable().Where(r => r.carry_id == dt.carry_id).FirstAsync(); + await _db.Updateable().SetColumns(r => r.yzqty == r.yzqty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync(); + } List disTaskCodes = await _db.Queryable().Where(it => it.bill_id == dt.id).ToListAsync(); @@ -2312,7 +2330,7 @@ namespace Tnb.WarehouseMgr bill_code = bill_code, status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID, biz_type = WmsWareHouseConst.BIZTYPE_WMSEMPTYINSTOCK_ID, - task_type = "", + task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID, carry_id = wmsCarryD.membercarry_id, carry_code = wmsCarryD.membercarry_code, area_id = sPoint?.area_id!, @@ -2402,46 +2420,51 @@ namespace Tnb.WarehouseMgr //根据获取的路径点生成预任务,生成顺序必须预路径算法返回的起终点的顺序一致(预任务顺序) WmsPretaskH preTask = null; string bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult(); + + string carry_id = ""; + string carry_code = ""; + WmsCarryH wmsCarryH = null; + + + if (!string.IsNullOrEmpty(input.carry_id) && !string.IsNullOrEmpty(input.carry_code)) + { + carry_id = input.carry_id; + carry_code = input.carry_code; + } + // 如果指定了carry_id + else if (!string.IsNullOrEmpty(input.carry_id)) + { + wmsCarryH = _db.Queryable().Where(r => r.id == input.carry_id).First(); + } + // carry_code + else if (!string.IsNullOrEmpty(input.carry_code)) + { + wmsCarryH = _db.Queryable().Where(r => r.carry_code == input.carry_code).First(); + } + // 如果carry_id和carry_code都没有指定,随机取库位上载具记录的一条 + else + { + wmsCarryH = _db.Queryable().InnerJoin((a, b) => a.id == b.location_id) + .Where((a, b) => a.id == sPoint.location_id).Select((a, b) => b).First(); + } + + if (wmsCarryH != null) + { + carry_id = wmsCarryH.id; + carry_code = wmsCarryH.carry_code; + } + + if (string.IsNullOrEmpty(carry_id)) + { + throw new AppFriendlyException("起点库位上没有载具", 500); + } + + List preTasks = points.Where(it => !it.location_id.IsNullOrEmpty()).GroupBy(g => g.area_code).Select(it => { WmsPointH? sPoint = it.FirstOrDefault(); WmsPointH? ePoint = it.LastOrDefault(); - string carry_id = ""; - string carry_code = ""; - WmsCarryH wmsCarryH = null; - if (!string.IsNullOrEmpty(input.carry_id) && !string.IsNullOrEmpty(input.carry_code)) - { - carry_id = input.carry_id; - carry_code = input.carry_code; - } - // 如果指定了carry_id - else if (!string.IsNullOrEmpty(input.carry_id)) - { - wmsCarryH = _db.Queryable().Where(r => r.id == input.carry_id).First(); - } - // carry_code - else if (!string.IsNullOrEmpty(input.carry_code)) - { - wmsCarryH = _db.Queryable().Where(r => r.carry_code == input.carry_code).First(); - } - // 如果carry_id和carry_code都没有指定,随机取库位上载具记录的一条 - else - { - wmsCarryH = _db.Queryable().InnerJoin((a, b) => a.id == b.location_id) - .Where((a, b) => a.id == sPoint.location_id).Select((a, b) => b).First(); - } - - if (wmsCarryH != null) - { - carry_id = wmsCarryH.id; - carry_code = wmsCarryH.carry_code; - } - - if (string.IsNullOrEmpty(carry_id)) - { - throw new AppFriendlyException("起点库位上没有载具", 500); - } preTask = new() { @@ -2464,7 +2487,7 @@ namespace Tnb.WarehouseMgr carry_code = carry_code, area_id = sPoint?.area_id!, area_code = it.Key, - require_id = "", + require_id = input.require_id, require_code = "", create_id = _userManager.UserId, create_time = DateTime.Now @@ -2491,7 +2514,7 @@ namespace Tnb.WarehouseMgr } finally { - await GenTaskExecute(); + GenTaskExecute(); } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs index 22223571..b3b5e44d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs @@ -268,7 +268,7 @@ namespace Tnb.WarehouseMgr } /// - /// 二楼机械手解绑定 + /// /// /// /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs new file mode 100644 index 00000000..64d9cefe --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.Common.Core.Manager; +using JNPF.Common.Filter; +using JNPF.EventBus; +using JNPF.Systems.Interfaces.System; +using JNPF.VisualDev; +using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; +using JNPF.VisualDev.Interfaces; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +using SqlSugar; +using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Attributes; +using Tnb.WarehouseMgr.Entities.Entity; +using Tnb.WarehouseMgr.Interfaces; +using JNPF.Common.Dtos.VisualDev; +using JNPF.Common.Extension; +using JNPF.Common.Security; +using JNPF.FriendlyException; +using JNPF.VisualDev.Entitys; +using Microsoft.AspNetCore.Authorization; +using Tnb.BasicData.Entities; +using Tnb.WarehouseMgr.Entities.Consts; +using Tnb.WarehouseMgr.Entities.Dto; +using Tnb.WarehouseMgr.Entities.Enums; +using JNPF.Common.Enums; +using Tnb.WarehouseMgr.Entities.Dto.Inputs; + +namespace Tnb.WarehouseMgr +{ + /// + /// 原材料转库单 + /// + [OverideVisualDev(ModuleConsts.MODULE_WMSMATERIALTRANSFER_ID)] + [ServiceModule(BizTypeId)] + public class WmsMaterialTransferService : BaseWareHouseService + { + private const string BizTypeId = ""; + private readonly ISqlSugarClient _db; + private readonly IRunService _runService; + private readonly IVisualDevService _visualDevService; + private readonly IWareHouseService _wareHouseService; + private readonly IBillRullService _billRullService; + private readonly IUserManager _userManager; + + public WmsMaterialTransferService( + ISqlSugarRepository repository, + IRunService runService, + IVisualDevService visualDevService, + IWareHouseService wareHouseService, + IUserManager userManager, + IBillRullService billRullService, + IEventPublisher eventPublisher) + { + _db = repository.AsSugarClient(); + _runService = runService; + _visualDevService = visualDevService; + _wareHouseService = wareHouseService; + _userManager = userManager; + _billRullService = billRullService; + + //OverideFuncs.GetListAsync = GetList; + } + + [NonAction] + private async Task GetList(VisualDevModelListQueryInput input) + { + try + { + SqlSugarPagedList result = await _db.Queryable() + .ToPagedListAsync(input.currentPage, input.pageSize); + + var _data = PageResult.SqlSugarPageResult(result); + var json = JsonConvert.SerializeObject(_data); + var data = JsonConvert.DeserializeObject(json); + JArray mainTable = data.list; + + ISugarQueryable wmsTransferInstockDs = _db.Queryable().Where(r => mainTable.Select(r => r["id"].ToString()).ToList().Contains(r.bill_id)); + + foreach (JObject wmsTransferInstockH in mainTable) + { + // todo 改tablefield105 + wmsTransferInstockH["tablefield105"] = JArray.Parse(JsonConvert.SerializeObject(wmsTransferInstockDs.Where(r => r.bill_id == wmsTransferInstockH["id"].ToString()).ToList())); + } + return data; + } + catch (Exception ex) + { + return Task.FromResult(ex); + } + } + + /// + /// 下发 + /// + /// + /// + /// + [HttpPost, NonUnify, AllowAnonymous] + public async Task Distribute(MaterialTransferDistributeInput input) + { + try + { + //if (input.qty <= 0) + //{ + // throw new AppFriendlyException("数量必须大于0", 500); + //} + if (string.IsNullOrEmpty(input.source_id)) + { + throw new AppFriendlyException("来源单据id不可为空", 500); + } + + WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable().FirstAsync(it => it.id == input.source_id); + await s_taskExecuteSemaphore.WaitAsync(); + await _db.Ado.BeginTranAsync(); + //入库取终点 //出库起点 + OutStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_YCL_ID, material_id = wmsMaterialTransferD.material_id, code_batch = wmsMaterialTransferD.code_batch, Size = 1 }; + List items = await _wareHouseService.OutStockStrategy(inStockStrategyInput); + + if (items.Count == 0) + { + throw new AppFriendlyException($@"没有可以出库的载具", 500); + } + + WmsCarryCode wmsCarryCode = await _db.Queryable().Where(r => r.carry_id == items[0].id).FirstAsync(); + BasLocation startLocation = await _db.Queryable().Where(r => r.location_code == items[0].location_code).FirstAsync(); + // 根据三工位任务数平均分配任务 + BasLocation endLocation = await _db.Queryable().Where(r => _wareHouseService.GetFloor1SGWOutstockLocation().Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); + + CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput(); + commonCreatePretaskInput.startlocation_id = startLocation.id; + commonCreatePretaskInput.endlocation_id = endLocation.id; + commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID; + commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID; + commonCreatePretaskInput.require_id = input.source_id; + + Tnb.WarehouseMgr.Entities.Dto.Outputs.Result res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput); + if (res.code == HttpStatusCode.OK) + { + // 更新子表已下发数量 + await _db.Updateable().SetColumns(r => r.yxfqty == r.yxfqty + wmsCarryCode.codeqty).Where(r => r.id == input.source_id).ExecuteCommandAsync(); + + await _db.Ado.CommitTranAsync(); + } + else + { + throw new AppFriendlyException($@"生成预任务失败", 500); + } + } + catch (Exception ex) + { + await _db.Ado.RollbackTranAsync(); + return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message); + } + finally + { + _ = s_taskExecuteSemaphore.Release(); + await InvokeGenPretaskExcute(); + } + + return await ToApiResult(HttpStatusCode.OK, "成功"); + } + + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs index 38a8e726..52b540bd 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryBindService.cs @@ -15,6 +15,7 @@ using Tnb.BasicData.Entities; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Entities.Consts; using Tnb.WarehouseMgr.Entities.Dto; +using Tnb.WarehouseMgr.Entities.Dto.Inputs; using Tnb.WarehouseMgr.Entities.Entity; using Tnb.WarehouseMgr.Entities.Enums; using Tnb.WarehouseMgr.Interfaces; @@ -33,13 +34,16 @@ namespace Tnb.WarehouseMgr private readonly IUserManager _userManager; private readonly IBillRullService _billRullService; private readonly IWareHouseService _wareHouseService; + private readonly IWmsCarryBindService _wmsCarryBindService; + public WmsPDACarryBindService( ISqlSugarRepository repository, IRunService runService, IVisualDevService visualDevService, IUserManager userManager, IWareHouseService wareHouseService, - IBillRullService billRullService) + IBillRullService billRullService, + IWmsCarryBindService wmsCarryBindService) { _db = repository.AsSugarClient(); _runService = runService; @@ -47,6 +51,7 @@ namespace Tnb.WarehouseMgr _userManager = userManager; _billRullService = billRullService; _wareHouseService = wareHouseService; + _wmsCarryBindService = wmsCarryBindService; OverideFuncs.CreateAsync = PDACarryBind; } @@ -365,10 +370,10 @@ namespace Tnb.WarehouseMgr throw new AppFriendlyException("起点id不可为空", 500); } - if (!_wareHouseService.GetFloor1OutstockLocation().Contains(input.location_id)) - { - throw new AppFriendlyException("非一楼出库库位不允许通过此功能解锁", 500); - } + //if (!_wareHouseService.GetFloor1OutstockLocation().Contains(input.location_id)) + //{ + // throw new AppFriendlyException("非一楼出库库位不允许通过此功能解锁", 500); + //} await _db.Ado.BeginTranAsync(); try @@ -384,6 +389,11 @@ namespace Tnb.WarehouseMgr is_lock = 0 }).Where(r => r.location_id == input.location_id).ExecuteCommandAsync(); + 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 _db.Ado.CommitTranAsync(); } catch (Exception ex) diff --git a/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json b/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json index cedc7a1b..3195bfb6 100644 --- a/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json +++ b/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json @@ -2,8 +2,8 @@ "ConnectionStrings": { "ConfigId": "default", "DBType": "PostgreSQL", //MySql;SqlServer;Oracle;PostgreSQL;Dm;Kdbndp;Sqlite; - //"Host": "192.168.11.109", - "Host": "127.0.0.1", + "Host": "192.168.11.109", + //"Host": "127.0.0.1", "Port": "5432", //"DBName": "tianyi_db", //"UserName": "postgres",