From 0cb5abb2ef66c649d16cd4c7eb572c94a08fc555 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 28 Jun 2023 15:58:41 +0800 Subject: [PATCH 1/2] =?UTF-8?q?wms=20=E7=94=9F=E6=88=90=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Consts/WmsWareHouseConst.cs | 4 ++ .../Tnb.WarehouseMgr/WareHouseService.cs | 31 ++++++++++- .../Tnb.WarehouseMgr/WmsInStockService.cs | 55 +++++++++++++++++++ .../Tnb.WarehouseMgr/WmsOutStockService.cs | 27 +++++++-- .../Tnb.WarehouseMgr/WmsPDAInStockService.cs | 1 + 5 files changed, 111 insertions(+), 7 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs index 83daa894..53b76564 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs @@ -23,6 +23,10 @@ namespace Tnb.WarehouseMgr.Entities.Consts /// public const string WMS_PRETASK_H_ENCODE = "PreTaskGen"; /// + /// 载具移入生成Encode + /// + public const string WMS_CARRYMOINSTK_ENCODE = "CarryMoInStk"; + /// /// 任务执行ENCODE /// public const string WMS_TASK_EXECUTE_ENCODE = "WmsTaskRequest"; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index ffae366f..812656cc 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -270,7 +270,7 @@ namespace Tnb.WarehouseMgr } //获取所有未下发的预任务申请 - var preTasks = await _db.Queryable().InnerJoin((a, b) => a.startlocation_id == b.location_id) + var preTasks = await _db.Queryable().InnerJoin((a, b) => a.startlocation_id == b.location_id && a.carry_id == b.id) .InnerJoin((a, b, c) => a.area_id == c.id) .Where(a => a.status == WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID) .OrderBy(a => new { priority = SqlFunc.Desc(a.priority), a.bill_code }) @@ -279,15 +279,20 @@ namespace Tnb.WarehouseMgr move_num = c.move_num }, true) .ToListAsync(); + var ids = preTasks.Select(x => x.id).Distinct().ToList(); + var preTaskCodes = await _db.Queryable().Where(it => ids.Contains(it.bill_id)).ToListAsync(); if (preTasks.Count > 0) { //根据预任务管理区分组,获取到所有分组后的预任务,遍历每个预任务 是否为任务链,通过管理区ID var preTaskGroups = preTasks.GroupBy(g => g.area_code).ToList(); List disTasks = new(); + List distaskCodes = new(); foreach (var itGroup in preTaskGroups) { var moveNum = itGroup.First().move_num; var items = itGroup.Adapt>(); + + items.ForEach(x => SnowflakeIdHelper.NextId()); items.ForEach(x => { x.status = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID; @@ -325,14 +330,34 @@ namespace Tnb.WarehouseMgr await _taskChainAttrHandle(items, areaPreTasks, moveNum); } } + if (preTaskCodes?.Count > 0) + { + foreach (var disTask in items) + { + var curPreTaskCodes = preTaskCodes.FindAll(x => x.bill_id == disTask.pretask_id); + var curDisTaskCodes = curPreTaskCodes.Adapt>(); + curPreTaskCodes.ForEach(x => + { + x.id = SnowflakeIdHelper.NextId(); + x.bill_id = disTask.id; + x.create_time = DateTime.Now; + }); + distaskCodes.AddRange(curDisTaskCodes); + } + } + disTasks.AddRange(items); } try { await _db.Ado.BeginTranAsync(); - disTasks.ForEach(x => x.id = SnowflakeIdHelper.NextId()); + //disTasks.ForEach(x => x.id = SnowflakeIdHelper.NextId()); var row = await _db.Insertable(disTasks).ExecuteCommandAsync(); + if (preTaskCodes?.Count > 0) + { + row = await _db.Insertable(distaskCodes).ExecuteCommandAsync(); + } if (row > 0) { var preTaskIds = preTasks.Select(x => x.id).ToList(); @@ -462,7 +487,7 @@ namespace Tnb.WarehouseMgr { carryStatus = ((int)EnumCarryStatus.空闲).ToString(); } - var cStatus =carryStatus.ParseToInt(); + var cStatus = carryStatus.ParseToInt(); await _db.Updateable().SetColumns(it => new BasLocation { is_use = cStatus, is_lock = 0 }).Where(it => it.id == multis[i].endlocation_id).ExecuteCommandAsync(); } //更新业务主表的单据状态 diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs index d26a486a..ff57cc39 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs @@ -12,7 +12,9 @@ using NPOI.SS.Formula.Functions; 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.Interfaces; @@ -21,8 +23,10 @@ namespace Tnb.WarehouseMgr /// /// 入库申请服务 /// + [ServiceModule(BizTypeId)] public class WmsInStockService : BaseWareHouseService, IWmsInStockService { + private const string BizTypeId = "26191496816421"; private readonly ISqlSugarClient _db; private readonly IDictionaryDataService _dictionaryDataService; private readonly IUserManager _userManager; @@ -155,5 +159,56 @@ namespace Tnb.WarehouseMgr return barCode; } + + public override async Task ModifyAsync(WareHouseUpInput input) + { + if (input == null) throw new ArgumentNullException("input"); + //更具distaskCode的barcode 更新 instockcode 的 is_end 为 1 + try + { + await _db.Ado.BeginTranAsync(); + + if (input.distaskCodes?.Count > 0) + { + var barCodes = input.distaskCodes.Select(x => x.barcode); + await _db.Updateable().SetColumns(it => new WmsInstockCode { is_end = 1 }).Where(it => barCodes.Contains(it.barcode)).ExecuteCommandAsync(); + var instockCodes = await _db.Queryable().Where(it => barCodes.Contains(it.barcode)).Select(it => new + { + id = it.bill_d_id, + barcode_qty = it.codeqty, + }).ToListAsync(); + var dic = instockCodes.GroupBy(g => g.id).ToDictionary(x => x.Key, x => x.Select(d => d.barcode_qty).ToList()); + var ids = instockCodes.Select(it => it.id).ToList(); + var instockDetails = await _db.Queryable().Where(it => ids.Contains(it.id)).ToListAsync(); + + foreach (var item in instockDetails) + { + if (dic.ContainsKey(item.id)) + { + item.qty += dic[item.id].Sum(x => x); + if (item.qty >= item.pr_qty) + { + item.line_status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID; + } + } + } + await _db.Updateable(instockDetails).ExecuteCommandAsync(); + var allInstockDetails = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); + if (allInstockDetails.All(x => x.line_status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)) + { + await _db.Updateable().SetColumns(it => new WmsInstockH { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID }).Where(it => it.id == input.requireId).ExecuteCommandAsync(); + //如果是自动单据,需要回更上层系统 + } + } + + await _db.Ado.CommitTranAsync(); + } + catch (Exception) + { + await _db.Ado.RollbackTranAsync(); + throw; + } + } + } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs index d7ddf2b2..1641dc39 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs @@ -286,17 +286,21 @@ namespace Tnb.WarehouseMgr try { + + await _db.Ado.BeginTranAsync(); + var carryId = input.carryIds[^input.carryIds.Count]; var carry = await _db.Queryable().SingleAsync(it => it.id == carryId); if (carry != null) { + var otds = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); var outStatus = carry.out_status.ToEnum(); if (outStatus == EnumOutStatus.全部出) { //当前载具对应的所有条码插入 var carryCodes = await _db.Queryable().Where(it => it.carry_id == carryId).ToListAsync(); var outStockCodes = carryCodes.Adapt>(); - var otds = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); + outStockCodes.ForEach(x => { var billDId = otds?.Find(xx => xx.material_id == x.material_id && xx.code_batch == x.code_batch)?.id; @@ -340,7 +344,20 @@ namespace Tnb.WarehouseMgr if (input.distaskCodes?.Count > 0) { var osCodes = input.distaskCodes.Adapt>(); - osCodes.ForEach(x => x.id = SnowflakeIdHelper.NextId()); + osCodes.ForEach(x => + { + var billDId = otds?.Find(xx => xx.material_id == x.material_id && xx.code_batch == x.code_batch)?.id; + if (billDId.IsNullOrEmpty()) + { + billDId = otds?.Find(xx => xx.material_id == x.material_id)?.id; + } + x.id = SnowflakeIdHelper.NextId(); + x.bill_id = input.requireId; + x.bill_d_id = billDId; + x.org_id = _userManager.User.OrganizeId; + x.create_id = _userManager.UserId; + x.create_time = DateTime.Now; + }); await _db.Insertable(osCodes).ExecuteCommandAsync(); var carryCodes = await _db.Queryable().Where(it => input.carryIds.Contains(it.carry_id)).ToListAsync(); @@ -386,17 +403,19 @@ namespace Tnb.WarehouseMgr [nameof(WmsPointH.location_id)] = outStockH.location_id, [nameof(WmsCarryD.carry_id)] = input.carryIds.First(), [nameof(WmsHandleH.biz_type)] = input.bizTypeId, - [nameof(WmsHandleH.bill_code)] = outStockH.bill_code, + [nameof(WmsHandleH.bill_code)] = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_CARRYMOINSTK_ENCODE).GetAwaiter().GetResult(), }; await _wmsCarryMoveInStockService.CarryMoveIn(visulDevInput); } } + + await _db.Ado.CommitTranAsync(); } } catch (Exception ex) { - + await _db.Ado.RollbackTranAsync(); throw; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs index 8a5b86ab..59d85c04 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs @@ -150,6 +150,7 @@ namespace Tnb.WarehouseMgr } } } + //生成预任务,同时如果包含条码信息同时插入条码记录 var isOk = await _wareHouseService.GenPreTask(preTasks, pretaskCodes); if (isOk) From 380804ee47b5e63417283b13279a13eebe594396 Mon Sep 17 00:00:00 2001 From: qianjiawei <1184704771@qq.com> Date: Wed, 28 Jun 2023 16:01:26 +0800 Subject: [PATCH 2/2] 1 --- .../Dto/BasCalendar/CalendarInput.cs | 9 +++++ .../Dto/BasCalendar/CalendarOut.cs | 7 +++- .../IBasCalendarService.cs | 9 ++++- BasicData/Tnb.BasicData/BasCalendarService.cs | 38 +++++++++++++++++-- 4 files changed, 57 insertions(+), 6 deletions(-) diff --git a/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarInput.cs b/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarInput.cs index 915cb3c6..9b6e9271 100644 --- a/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarInput.cs +++ b/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarInput.cs @@ -13,4 +13,13 @@ namespace Tnb.BasicData.Entities.Dto public string? workhour { get; set; } public string? worktype { get; set; } } + public class CalendarBatchInput + { + public string? startday { get; set; } + public string? endday { get; set; } + public int[]? weekday { get; set; } + public string? datetype { get; set; } + public string? workhour { get; set; } + public string? worktype { get; set; } + } } diff --git a/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarOut.cs b/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarOut.cs index a400d134..403d753a 100644 --- a/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarOut.cs +++ b/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarOut.cs @@ -10,7 +10,12 @@ namespace Tnb.BasicData.Entities.Dto.BasCalendar { public string? datetext { get; set; } public string? datetype { get; set; } - public string? workhour { get; set; } + public List? workhour { get; set; } public string? worktype { get; set; } } + public class WorkHour + { + public string? start { get; set; } + public string? end { get; set; } + } } diff --git a/BasicData/Tnb.BasicData.Interfaces/IBasCalendarService.cs b/BasicData/Tnb.BasicData.Interfaces/IBasCalendarService.cs index 3dab5f33..4eaf8a89 100644 --- a/BasicData/Tnb.BasicData.Interfaces/IBasCalendarService.cs +++ b/BasicData/Tnb.BasicData.Interfaces/IBasCalendarService.cs @@ -18,7 +18,14 @@ namespace Tnb.BasicData.Interfaces /// /// 获取工作日历 /// + /// /// - public Task GetWorkData(); + public Task GetWorkData(CalendarInput CalendarInput); + /// + /// 批量保存工作日历 + /// + /// + /// + public Task SaveBatchData(CalendarBatchInput CalendarBatchInput); } } diff --git a/BasicData/Tnb.BasicData/BasCalendarService.cs b/BasicData/Tnb.BasicData/BasCalendarService.cs index 6834c494..c05bec9c 100644 --- a/BasicData/Tnb.BasicData/BasCalendarService.cs +++ b/BasicData/Tnb.BasicData/BasCalendarService.cs @@ -8,6 +8,7 @@ using JNPF.Common.Core.Manager; using JNPF.Common.Models.VisualDev; using JNPF.DependencyInjection; using JNPF.DynamicApiController; +using JNPF.JsonSerialization; using JNPF.Systems.Interfaces.System; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; @@ -43,6 +44,7 @@ namespace Tnb.BasicData public async Task SaveData(CalendarInput CalendarInput) { var db = _repository.AsSugarClient(); + await db.Deleteable(p=>p.datetext== CalendarInput.datetext).ExecuteCommandAsync(); BasCalendar BasCalendar = new BasCalendar(); BasCalendar.datetext = CalendarInput.datetext; BasCalendar.datetype = CalendarInput.datetype; @@ -56,22 +58,50 @@ namespace Tnb.BasicData /// 获取工作日历 /// /// - [HttpGet] - public async Task GetWorkData() + [HttpPost] + public async Task GetWorkData(CalendarInput CalendarInput) { var db = _repository.AsSugarClient(); - var lists = await db.Queryable().ToListAsync(); + var lists = await db.Queryable().Where(p=>p.worktype== CalendarInput.worktype).ToListAsync(); List CalendarOuts = new List(); foreach (var list in lists) { CalendarOut CalendarOut = new CalendarOut(); CalendarOut.datetext = list.datetext; CalendarOut.datetype = list.datetype; - CalendarOut.workhour = list.workhour; + CalendarOut.workhour = JSON.Deserialize>(list.workhour); CalendarOut.worktype = list.worktype; CalendarOuts.Add(CalendarOut); } return CalendarOuts; } + /// + /// 批量保存工作日历 + /// + /// + /// + public async Task SaveBatchData(CalendarBatchInput CalendarBatchInput) + { + var db = _repository.AsSugarClient(); + DateTime start = DateTime.Parse(CalendarBatchInput.startday!); + DateTime end = DateTime.Parse(CalendarBatchInput.endday!); + List BasCalendars = new List(); + for (DateTime date = start; date <= end; date.AddDays(1)) + { + if (CalendarBatchInput.weekday!.Contains((int)date.DayOfWeek)) + { + BasCalendar BasCalendar = new BasCalendar(); + BasCalendar.datetext = date.ToString("yyyy-MM-dd"); + BasCalendar.datetype = CalendarBatchInput.datetype; + BasCalendar.workhour = CalendarBatchInput.workhour; + BasCalendar.worktype = CalendarBatchInput.worktype; + BasCalendar.create_id = _userManager.UserId; + BasCalendar.create_time = DateTime.Now; + BasCalendars.Add(BasCalendar); + } + } + await db.Deleteable(p => BasCalendars.Select(p => p.datetext).ToList().Contains(p.datetext)).ExecuteCommandAsync(); + await db.Insertable(BasCalendars).ExecuteCommandAsync(); + } } }