diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index ae11f831..5b2ab182 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -555,20 +555,13 @@ namespace Tnb.WarehouseMgr //根据载具ID,更新是否锁定和赋值起始库位 if (setCarryColumnsExp != null) { - if (input.CarryIds?.Count > 0) - { - await _db.Updateable().SetColumns(setCarryColumnsExp).Where(it => input.CarryIds.Contains(it.id)).ExecuteCommandAsync(); - } - else - { - await _db.Updateable().SetColumns(setCarryColumnsExp).Where(it => it.id == input.CarryId).ExecuteCommandAsync(); - } + Expression> whereExp = input.CarryIds?.Count > 0 ? it => input.CarryIds.Contains(it.id) : it => it.id == input.CarryId; + await _db.Updateable().SetColumns(setCarryColumnsExp).Where(whereExp).ExecuteCommandAsync(); } - //根据所有库位更新库位的锁定状态为“锁定” - if (setLocaionColumbExp != null) + if (setLocaionColumbExp != null && input.LocationIds?.Count > 0) { - await _db.Updateable().SetColumns(setLocaionColumbExp).Where(it => input.LocationIds!.Contains(it.id)).ExecuteCommandAsync(); + await _db.Updateable().SetColumns(setLocaionColumbExp).Where(it => input.LocationIds.Contains(it.id)).ExecuteCommandAsync(); } await _db.Ado.CommitTranAsync(); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs index 5219afc2..357de608 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs @@ -150,7 +150,7 @@ namespace Tnb.WarehouseMgr carryMats = carryMats.OrderBy(o => o.create_time).GroupBy(g => new { g.carry_id, g.material_id, g.code_batch }) .Select(x => { - WmsCarryMat? carryMat = x.FirstOrDefault(); + WmsCarryMat carryMat = new(); carryMat.need_qty = x.Sum(d => d.need_qty); return carryMat; }) @@ -353,11 +353,19 @@ namespace Tnb.WarehouseMgr { List carryMats = new(); List carryCodes = new(); + var whereExp = Expressionable.Create() + .And((a, b, c) => a.is_lock == 0) + .And((a, b, c) => !string.IsNullOrEmpty(a.location_id)) + .And((a, b, c) => a.status == (int)EnumCarryStatus.占用) + .And((a, b, c) => c.is_type == ((int)EnumLocationType.存储库位).ToString()); + foreach (var os in outStockDList) { + whereExp.And((a, b, c) => b.material_id == os.material_id) + .AndIF(!string.IsNullOrEmpty(os.code_batch), (a, b, c) => b.code_batch == os.code_batch); + var carryCodesPart = await _db.Queryable().InnerJoin((a, b) => a.id == b.carry_id).InnerJoin((a, b, c) => a.location_id == c.id) - .Where((a, b, c) => b.material_id == os.material_id && a.is_lock == 0 && !string.IsNullOrEmpty(a.location_id) && a.status == (int)EnumCarryStatus.占用 && c.is_type == ((int)EnumLocationType.存储库位).ToString()) - .WhereIF(!string.IsNullOrEmpty(os.code_batch), (a, b) => b.code_batch == os.code_batch) + .Where(whereExp.ToExpression()) .Select() .ToListAsync(); if (carryCodesPart?.Count > 0) @@ -399,7 +407,7 @@ namespace Tnb.WarehouseMgr carryMats = carryMats.OrderBy(o => o.create_time).GroupBy(g => new { g.carry_id, g.material_id, g.code_batch }) .Select(x => { - WmsCarryMat? carryMat = x.FirstOrDefault()!; + WmsCarryMat carryMat = new(); carryMat.need_qty = x.Sum(d => d.need_qty); return carryMat; }) @@ -435,10 +443,8 @@ namespace Tnb.WarehouseMgr List locIds = new(); foreach (var carry in carrys) { - WmsPointH sPoint = null!; - WmsPointH ePoint = null!; - sPoint = await _db.Queryable().FirstAsync(it => it.location_id == carry.location_id); - ePoint = await _db.Queryable().FirstAsync(it => it.location_id == outstock.location_id.ToString()); + WmsPointH sPoint = await _db.Queryable().FirstAsync(it => it.location_id == carry.location_id); + WmsPointH ePoint = await _db.Queryable().FirstAsync(it => it.location_id == outstock.location_id.ToString()); if (sPoint != null && ePoint != null) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs index 7b5c05af..282556f8 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs @@ -50,7 +50,7 @@ namespace Tnb.WarehouseMgr /// /// [HttpPost] - public async Task PackSortingByAdd() + public async Task PackSortingByAdd(WmsCarryMat? carryMat) { var setSortings = await _db.Queryable() .Where(a => a.status == WmsWareHouseConst.BILLSTATUS_ADD_ID).OrderBy(a => a.seq) @@ -142,10 +142,11 @@ namespace Tnb.WarehouseMgr List preTasks = new(); List locIds = new(); string firstLocationId = "27010980724501", secondLocationId = "27010987857941"; - if (carrys.Length > 6) + var mid = 6; + if (carrys.Length > mid) { - var leftCarrys = carrys[..6]; - var rightCarrys = carrys[6..]; + var leftCarrys = carrys[..mid]; + var rightCarrys = carrys[mid..]; await InnerGenPreTask(leftCarrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks); await InnerGenPreTask(rightCarrys, locIds, secondLocationId, singleSorting.id, singleSorting.bill_code, preTasks); } @@ -167,7 +168,7 @@ namespace Tnb.WarehouseMgr pretaskCodes.AddRange(curPreTaskCodes); } await _wareHouseService.GenPreTask(preTasks, pretaskCodes); - await _db.Updateable().SetColumns(it => new WmsSetsortingH { status = WmsWareHouseConst.BILLSTATUS_ON_ID }).Where(it=> it.id == singleSorting.id).ExecuteCommandAsync(); + await _db.Updateable().SetColumns(it => new WmsSetsortingH { status = WmsWareHouseConst.BILLSTATUS_ON_ID }).Where(it => it.id == singleSorting.id).ExecuteCommandAsync(); GenPreTaskUpInput genPreTaskAfterUpInput = new(); genPreTaskAfterUpInput.CarryIds = preTasks.Select(x => x.carry_id).ToList(); genPreTaskAfterUpInput.LocationIds = new HashSet(locIds).ToList(); @@ -298,7 +299,7 @@ namespace Tnb.WarehouseMgr var carry = await _db.Queryable().SingleAsync(it => it.id == carryId); if (carry != null) { - if (carry!.location_id!.IsNotEmptyOrNull()) + if (carry.location_id?.IsNotEmptyOrNull() ?? false) { await _db.Updateable().SetColumns(it => new BasLocation { is_use = ((int)EnumCarryStatus.空闲).ToString() }).Where(it => it.id == carry.location_id).ExecuteCommandAsync(); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index 38aefcb1..95aefa47 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -76,11 +76,11 @@ namespace Tnb.WarehouseMgr if (carrys?.Count > 0) { var firstCarry = carrys.FirstOrDefault(); - GenPreTaskUpInput genPreTaskInput = new() { CarryId = firstCarry!.id! }; + GenPreTaskUpInput genPreTaskInput = new() { CarryId = firstCarry?.id }; await _warehouseService.GenInStockTaskHandleAfter(genPreTaskInput, it => new WmsCarryH { is_lock = 1 }, null!); ko.status = WmsWareHouseConst.BILLSTATUS_TOBESHIPPED_ID; - ko.carry_id = firstCarry.id; - ko.carry_code = firstCarry.carry_code; + ko.carry_id = firstCarry?.id; + ko.carry_code = firstCarry?.carry_code; await _db.Updateable(ko).UpdateColumns(it => new { it.status, it.carry_id, it.carry_code }).ExecuteCommandAsync(); } else @@ -165,26 +165,28 @@ namespace Tnb.WarehouseMgr var sPoint = it.FirstOrDefault(); var ePoint = it.LastOrDefault(); - WmsPretaskH preTask = new(); - preTask.org_id = _userManager.User.OrganizeId; - preTask.startlocation_id = sPoint?.location_id!; - preTask.startlocation_code = sPoint?.location_code!; - preTask.endlocation_id = ePoint?.location_id!; - preTask.endlocation_code = ePoint?.location_code!; - preTask.start_floor = sPoint?.floor.ToString(); - preTask.end_floor = ePoint?.floor.ToString(); - preTask.bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult(); - preTask.status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID; - preTask.biz_type = ko.biz_type; - preTask.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; - preTask.carry_id = ko!.carry_id!; - preTask.carry_code = ko!.carry_code!; - preTask.area_id = sPoint?.area_id!; - preTask.area_code = it.Key; - preTask.require_id = ko.id; - preTask.require_code = ko.bill_code; - preTask.create_id = _userManager.UserId; - preTask.create_time = DateTime.Now; + WmsPretaskH preTask = new() + { + org_id = _userManager.User.OrganizeId, + startlocation_id = sPoint?.location_id!, + startlocation_code = sPoint?.location_code!, + endlocation_id = ePoint?.location_id!, + endlocation_code = ePoint?.location_code!, + start_floor = sPoint?.floor.ToString(), + end_floor = ePoint?.floor.ToString(), + bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult(), + status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID, + biz_type = ko.biz_type, + task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID, + carry_id = ko!.carry_id!, + carry_code = ko!.carry_code!, + area_id = sPoint?.area_id!, + area_code = it.Key, + require_id = ko.id, + require_code = ko.bill_code, + create_id = _userManager.UserId, + create_time = DateTime.Now + }; return preTask; }).ToList(); await _warehouseService.GenPreTask(preTasks, null!); diff --git a/taskschedule/Tnb.TaskScheduler/Listener/QcTaskTimeWorker.cs b/taskschedule/Tnb.TaskScheduler/Listener/QcTaskTimeWorker.cs index 060bc1a5..11cff9c6 100644 --- a/taskschedule/Tnb.TaskScheduler/Listener/QcTaskTimeWorker.cs +++ b/taskschedule/Tnb.TaskScheduler/Listener/QcTaskTimeWorker.cs @@ -22,74 +22,80 @@ namespace Tnb.TaskScheduler.Listener /// /// 生成质检任务 /// - public class QcTaskTimeWorker //: ISpareTimeWorker + public class QcTaskTimeWorker : ISpareTimeWorker { - private ISqlSugarClient repository => App.GetService(); + private ISqlSugarRepository repository => App.GetService>(); - //[SpareTime("0 0 0 * * ?", "生成质检任务", ExecuteType = SpareTimeExecuteTypes.Serial, StartNow = false)] + [SpareTime("0 0 0 * * ?", "生成质检任务", ExecuteType = SpareTimeExecuteTypes.Serial, StartNow = false)] public async void CreateTask(SpareTimer timer, long count) { - var timeTaskEntity = await repository.Queryable().Where(p => p.Id == timer.WorkerName && p.EnabledMark == 1).FirstAsync(); - if (timeTaskEntity == null) - return; - ContentModel? comtentModel = timeTaskEntity.ExecuteContent.ToObject(); - var PlanH = await repository.Queryable().Where(p => p.id == comtentModel.parameter.Where(p => p.field == "id").First().value).FirstAsync(); - var PlanDs = await repository.Queryable().Where(p => p.mainid == PlanH.id).ToListAsync(); - if (PlanH == null || PlanDs.Count == 0) - return; - var PlanMaterials = repository.Queryable().Where(p => p.planid == PlanH.id).Select(p => p.materialid).ToList(); - var PlanProcesss = repository.Queryable().Where(p => p.planid == PlanH.id).Select(p => p.processid).ToList(); - var PlanWork = repository.Queryable().Where(p => p.planid == PlanH.id).Select(p => p.workid).ToList(); - //物料工序工位不能同时为空 - if (PlanMaterials.Count == 0 && PlanProcesss.Count == 0 && PlanWork.Count == 0) - return; - var PrdMoTasks = await repository.Queryable() - .WhereIF(PlanMaterials.Count > 0, p => PlanMaterials.Contains(p.material_id)) - .WhereIF(PlanProcesss.Count > 0, p => PlanProcesss.Contains(p.process_id)) - .WhereIF(PlanWork.Count > 0, p => PlanWork.Contains(p.workstation_id)) - .Where(p => p.mo_task_status == "InProgress")//进行中 - .ToListAsync(); - - var DictionaryType = await repository.Queryable().Where(p => p.FullName == "质检状态").FirstAsync(); - var DictionaryData = await repository.Queryable().Where(p => p.DictionaryTypeId == DictionaryType.Id && p.FullName == "待执行").FirstAsync(); - foreach (var PrdMoTask in PrdMoTasks) + try { - QcCheckExecH qcCheckExecH = new QcCheckExecH(); - qcCheckExecH.id = SnowflakeIdHelper.NextId(); - qcCheckExecH.checktype = PlanH.checktype; - qcCheckExecH.status = DictionaryData.Id; - qcCheckExecH.tasktime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - qcCheckExecH.materialid = PrdMoTask.material_id; - qcCheckExecH.processid = PrdMoTask.process_id; - qcCheckExecH.workid = PrdMoTask.workstation_id; - var ExecDs = new List(); - foreach (var PlanD in PlanDs) + var timeTaskEntity = await repository.AsSugarClient().Queryable().Where(p => p.Id == timer.WorkerName && p.EnabledMark == 1).FirstAsync(); + if (timeTaskEntity == null) + return; + ContentModel? comtentModel = timeTaskEntity.ExecuteContent.ToObject(); + var PlanH = await repository.AsSugarClient().Queryable().Where(p => p.id == comtentModel.parameter.Where(p => p.field == "id").First().value).FirstAsync(); + var PlanDs = await repository.AsSugarClient().Queryable().Where(p => p.mainid == PlanH.id).ToListAsync(); + if (PlanH == null || PlanDs.Count == 0) + return; + var PlanMaterials = repository.AsSugarClient().Queryable().Where(p => p.planid == PlanH.id).Select(p => p.materialid).ToList(); + var PlanProcesss = repository.AsSugarClient().Queryable().Where(p => p.planid == PlanH.id).Select(p => p.processid).ToList(); + var PlanWork = repository.AsSugarClient().Queryable().Where(p => p.planid == PlanH.id).Select(p => p.workid).ToList(); + //物料工序工位不能同时为空 + if (PlanMaterials.Count == 0 && PlanProcesss.Count == 0 && PlanWork.Count == 0) + return; + var PrdMoTasks = await repository.AsSugarClient().Queryable() + .WhereIF(PlanMaterials.Count > 0, p => PlanMaterials.Contains(p.material_id)) + .WhereIF(PlanProcesss.Count > 0, p => PlanProcesss.Contains(p.process_id)) + .WhereIF(PlanWork.Count > 0, p => PlanWork.Contains(p.workstation_id)) + .Where(p => p.mo_task_status == "InProgress")//进行中 + .ToListAsync(); + + var DictionaryType = await repository.AsSugarClient().Queryable().Where(p => p.FullName == "质检状态").FirstAsync(); + var DictionaryData = await repository.AsSugarClient().Queryable().Where(p => p.DictionaryTypeId == DictionaryType.Id && p.FullName == "待执行").FirstAsync(); + foreach (var PrdMoTask in PrdMoTasks) { - QcCheckExecD QcCheckExecD = new QcCheckExecD(); - QcCheckExecD.mainid = qcCheckExecH.id; - QcCheckExecD.extype = PlanD.extype; - QcCheckExecD.excontent = PlanD.excontent; - QcCheckExecD.check = PlanD.check; - QcCheckExecD.errorcause = PlanD.errorcause; - QcCheckExecD.errorlevel = PlanD.errorlevel; - QcCheckExecD.remark = PlanD.remark; - QcCheckExecD.attachment = PlanD.attachment; - QcCheckExecD.isexec = PlanD.isexec; - QcCheckExecD.custom = PlanD.custom; - QcCheckExecD.typeid = PlanD.typeid; - QcCheckExecD.itemid = PlanD.itemid; - ExecDs.Add(QcCheckExecD); + QcCheckExecH qcCheckExecH = new QcCheckExecH(); + qcCheckExecH.id = SnowflakeIdHelper.NextId(); + qcCheckExecH.checktype = PlanH.checktype; + qcCheckExecH.status = DictionaryData.Id; + qcCheckExecH.tasktime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + qcCheckExecH.materialid = PrdMoTask.material_id; + qcCheckExecH.processid = PrdMoTask.process_id; + qcCheckExecH.workid = PrdMoTask.workstation_id; + var ExecDs = new List(); + foreach (var PlanD in PlanDs) + { + QcCheckExecD QcCheckExecD = new QcCheckExecD(); + QcCheckExecD.mainid = qcCheckExecH.id; + QcCheckExecD.extype = PlanD.extype; + QcCheckExecD.excontent = PlanD.excontent; + QcCheckExecD.check = PlanD.check; + QcCheckExecD.errorcause = PlanD.errorcause; + QcCheckExecD.errorlevel = PlanD.errorlevel; + QcCheckExecD.remark = PlanD.remark; + QcCheckExecD.attachment = PlanD.attachment; + QcCheckExecD.isexec = PlanD.isexec; + QcCheckExecD.custom = PlanD.custom; + QcCheckExecD.typeid = PlanD.typeid; + QcCheckExecD.itemid = PlanD.itemid; + ExecDs.Add(QcCheckExecD); + } + await repository.AsSugarClient().Insertable(qcCheckExecH).ExecuteCommandAsync(); + await repository.AsSugarClient().Insertable(ExecDs).ExecuteCommandAsync(); + } + //只执行一次的 修改EnabledMark字段 + var InterfaceParameter = comtentModel.parameter.Where(p => p.field == "doonce").FirstOrDefault(); + if (InterfaceParameter != null && bool.Parse(InterfaceParameter.value)) + { + timeTaskEntity.EnabledMark = 0; + await repository.AsSugarClient().Updateable(timeTaskEntity).ExecuteCommandAsync(); + SpareTime.Cancel(timeTaskEntity.Id); } - await repository.Insertable(qcCheckExecH).ExecuteCommandAsync(); - await repository.Insertable(ExecDs).ExecuteCommandAsync(); } - //只执行一次的 修改EnabledMark字段 - var InterfaceParameter = comtentModel.parameter.Where(p => p.field == "doonce").FirstOrDefault(); - if (InterfaceParameter != null && bool.Parse(InterfaceParameter.value)) - { - timeTaskEntity.EnabledMark = 0; - await repository.Updateable(timeTaskEntity).ExecuteCommandAsync(); - SpareTime.Cancel(timeTaskEntity.Id); + catch (Exception) + { } }