From 58dbda9430d3aae4e3f02b38cb05a35781def212 Mon Sep 17 00:00:00 2001 From: zhou keda <1315948824@qq.com> Date: Mon, 2 Sep 2024 15:50:23 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=9C=AB=E5=B7=A1=E6=A3=80=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=87=AA=E6=A3=80=E6=8A=A5=E5=BA=9F=20=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E7=9B=B8=E5=85=B3=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Consts/DictConst.cs | 4 + .../Dto/EqpFaultReportOutput.cs | 13 +++ .../Dto/EqpMaintainReportOutput.cs | 13 +++ .../Dto/EqpRepairReportOutput.cs | 13 +++ .../Tnb.EquipMgr/EqpFaultReportService.cs | 81 +++++++++++++++++++ .../Tnb.EquipMgr/EqpMaintainReportService.cs | 76 +++++++++++++++++ .../Tnb.EquipMgr/EqpRepairReportService.cs | 76 +++++++++++++++++ .../IPrdMoTaskService.cs | 2 + .../Tnb.ProductionMgr/MesForErpService.cs | 69 +++++++++++++--- .../Tnb.ProductionMgr/PrdMoTaskService.cs | 62 +++++++++++--- QcMgr/Tnb.QcMgr/QcCheckPlanService.cs | 7 ++ QcMgr/Tnb.QcMgr/QcCheckTaskService.cs | 23 +++++- .../Tnb.WarehouseMgr/WmsPrdInstockHService.cs | 7 ++ 13 files changed, 421 insertions(+), 25 deletions(-) create mode 100644 EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpFaultReportOutput.cs create mode 100644 EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainReportOutput.cs create mode 100644 EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpRepairReportOutput.cs create mode 100644 EquipMgr/Tnb.EquipMgr/EqpFaultReportService.cs create mode 100644 EquipMgr/Tnb.EquipMgr/EqpMaintainReportService.cs create mode 100644 EquipMgr/Tnb.EquipMgr/EqpRepairReportService.cs diff --git a/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs b/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs index ba022ebb..c5a89f52 100644 --- a/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs +++ b/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs @@ -323,6 +323,10 @@ public static class DictConst /// 设备生命周期 /// public const string EquipmentLife = "EquipmentLife"; + /// + /// 设备故障类型 + /// + public const string FaultType = "FaultType"; #endregion } \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpFaultReportOutput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpFaultReportOutput.cs new file mode 100644 index 00000000..217d357d --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpFaultReportOutput.cs @@ -0,0 +1,13 @@ +namespace Tnb.EquipMgr.Entities.Dto +{ + public class EqpFaultReportOutput + { + public string id { get; set; } + public string fault_name { get; set; } + public string fault_type_name { get; set; } + public string equip_type_name { get; set; } + public string month { get; set; } + public int count { get; set; } + public decimal? repair_take_time { get; set; } + } +} \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainReportOutput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainReportOutput.cs new file mode 100644 index 00000000..b50e77fe --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainReportOutput.cs @@ -0,0 +1,13 @@ +namespace Tnb.EquipMgr.Entities.Dto +{ + public class EqpMaintainReportOutput + { + public string id { get; set; } + public string code { get; set; } + public string name { get; set; } + public string workshop_name { get; set; } + public string month { get; set; } + public int execute_num { get; set; } + public int unqualified_num { get; set; } + } +} \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpRepairReportOutput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpRepairReportOutput.cs new file mode 100644 index 00000000..15f1925d --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpRepairReportOutput.cs @@ -0,0 +1,13 @@ +namespace Tnb.EquipMgr.Entities.Dto +{ + public class EqpRepairReportOutput + { + public string id { get; set; } + public string code { get; set; } + public string name { get; set; } + public string workshop_name { get; set; } + public string month { get; set; } + public int fault_num { get; set; } + public int repair_completed_num { get; set; } + } +} \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr/EqpFaultReportService.cs b/EquipMgr/Tnb.EquipMgr/EqpFaultReportService.cs new file mode 100644 index 00000000..4ecd14f0 --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr/EqpFaultReportService.cs @@ -0,0 +1,81 @@ +using JNPF.Common.Core.Manager; +using JNPF.Common.Filter; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +using JNPF.Systems.Entitys.Permission; +using JNPF.Systems.Entitys.System; +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; +using SqlSugar; +using Tnb.BasicData; +using Tnb.EquipMgr.Entities; +using Tnb.EquipMgr.Entities.Dto; + +namespace Tnb.EquipMgr +{ + /// + /// 设备故障统计报表 + /// + [ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)] + [Route("api/[area]/[controller]/[action]")] + [OverideVisualDev(ModuleId)] + public class EqpFaultReportService: IOverideVisualDevService,IDynamicApiController, ITransient + { + private const string ModuleId = "27897732990485"; + private readonly ISqlSugarRepository _repository; + private readonly IVisualDevService _visualDevService; + private readonly IRunService _runService; + private readonly IUserManager _userManager; + private readonly IBillRullService _billRuleService; + + public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); + + public EqpFaultReportService(ISqlSugarRepository repository, + IRunService runService, + IVisualDevService visualDevService, + IBillRullService billRuleService, + IUserManager userManager) + { + _repository = repository; + _visualDevService = visualDevService; + _runService = runService; + _userManager = userManager; + _billRuleService = billRuleService; + OverideFuncs.GetListAsync = GetList; + } + + private async Task GetList(VisualDevModelListQueryInput input) + { + ISqlSugarClient db = _repository.AsSugarClient(); + Dictionary? queryJson = !string.IsNullOrEmpty(input.queryJson) ? JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); + string month = queryJson != null && queryJson.ContainsKey("month") ? queryJson["month"].ToString() : ""; + string name = queryJson != null && queryJson.ContainsKey("name") ? queryJson["name"].ToString() : ""; + string userId = _userManager.UserId; + month = !string.IsNullOrEmpty(month) ? month : DateTime.Now.ToString("yyyy-MM"); + SqlSugarPagedList result = await db.Queryable() + .LeftJoin((a,b)=>1==1) + .LeftJoin((a,b,c)=>c.EnCode==DictConst.FaultType) + .LeftJoin((a,b,c,d)=>c.Id==d.DictionaryTypeId && b.fault_type_id==d.EnCode) + .WhereIF(!string.IsNullOrEmpty("name"), (a, b) => b.fault_name.Contains(name)) + .OrderBy((a,b,c,d)=>a.name) + .OrderBy((a,b,c,d)=>b.fault_name) + .OrderBy((a,b,c,d)=>d.FullName) + .Select((a, b,c,d) => new EqpFaultReportOutput + { + id = a.id, + month = month, + fault_name = b.fault_name, + fault_type_name = d.FullName, + equip_type_name = a.name, + count = SqlFunc.Subqueryable().InnerJoin((x,y)=>x.id==y.equip_id).Where((x,y)=>x.equip_type_id==a.id && y.create_time.Value.ToString("yyyy-MM")==month).Count(), + repair_take_time = SqlFunc.Subqueryable().InnerJoin((x,y)=>x.id==y.equip_id).Where((x,y)=>x.equip_type_id==a.id && y.create_time.Value.ToString("yyyy-MM")==month).Sum((x,y)=>SqlFunc.IsNull(y.repair_take_time,0)) + }).ToPagedListAsync(input.currentPage, input.pageSize); + + return PageResult.SqlSugarPageResult(result); + } + } +} \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr/EqpMaintainReportService.cs b/EquipMgr/Tnb.EquipMgr/EqpMaintainReportService.cs new file mode 100644 index 00000000..3db5e305 --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr/EqpMaintainReportService.cs @@ -0,0 +1,76 @@ +using JNPF.Common.Core.Manager; +using JNPF.Common.Filter; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +using JNPF.Systems.Entitys.Permission; +using JNPF.Systems.Entitys.System; +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; +using SqlSugar; +using Tnb.EquipMgr.Entities; +using Tnb.EquipMgr.Entities.Dto; + +namespace Tnb.EquipMgr +{ + /// + /// 设备保养统计报表 + /// + [ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)] + [Route("api/[area]/[controller]/[action]")] + [OverideVisualDev(ModuleId)] + public class EqpMaintainReportService: IOverideVisualDevService,IDynamicApiController, ITransient + { + private const string ModuleId = "27897660420117"; + private readonly ISqlSugarRepository _repository; + private readonly IVisualDevService _visualDevService; + private readonly IRunService _runService; + private readonly IUserManager _userManager; + private readonly IBillRullService _billRuleService; + + public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); + + public EqpMaintainReportService(ISqlSugarRepository repository, + IRunService runService, + IVisualDevService visualDevService, + IBillRullService billRuleService, + IUserManager userManager) + { + _repository = repository; + _visualDevService = visualDevService; + _runService = runService; + _userManager = userManager; + _billRuleService = billRuleService; + OverideFuncs.GetListAsync = GetList; + } + + private async Task GetList(VisualDevModelListQueryInput input) + { + ISqlSugarClient db = _repository.AsSugarClient(); + Dictionary? queryJson = !string.IsNullOrEmpty(input.queryJson) ? JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); + string month = queryJson != null && queryJson.ContainsKey("month") ? queryJson["month"].ToString() : ""; + string name = queryJson != null && queryJson.ContainsKey("name") ? queryJson["name"].ToString() : ""; + string userId = _userManager.UserId; + month = !string.IsNullOrEmpty(month) ? month : DateTime.Now.ToString("yyyy-MM"); + SqlSugarPagedList result = await db.Queryable() + .LeftJoin((a,b)=>a.use_department_id==b.Id) + .WhereIF(!string.IsNullOrEmpty("name"), (a, b) => a.name.Contains(name)) + .OrderBy((a,b)=>a.code) + .Select((a, b) => new EqpMaintainReportOutput + { + id = a.id, + code = a.code, + name = a.name, + workshop_name = b.FullName, + month = month, + execute_num = SqlFunc.Subqueryable().Where(x=>x.equip_id==a.id && x.status!="1" && x.create_time.Value.ToString("yyyy-MM")==month).Count(), + unqualified_num = SqlFunc.Subqueryable().Where(x=>x.equip_id==a.id && (x.repeat_result=="2" || (x.result=="2" && x.repeat_result==null)) && x.create_time.Value.ToString("yyyy-MM")==month).Count(), + }).ToPagedListAsync(input.currentPage, input.pageSize); + + return PageResult.SqlSugarPageResult(result); + } + } +} \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr/EqpRepairReportService.cs b/EquipMgr/Tnb.EquipMgr/EqpRepairReportService.cs new file mode 100644 index 00000000..8afba16b --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr/EqpRepairReportService.cs @@ -0,0 +1,76 @@ +using JNPF.Common.Core.Manager; +using JNPF.Common.Filter; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +using JNPF.Systems.Entitys.Permission; +using JNPF.Systems.Entitys.System; +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; +using SqlSugar; +using Tnb.EquipMgr.Entities; +using Tnb.EquipMgr.Entities.Dto; + +namespace Tnb.EquipMgr +{ + /// + /// 设备维修统计报表 + /// + [ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)] + [Route("api/[area]/[controller]/[action]")] + [OverideVisualDev(ModuleId)] + public class EqpRepairReportService: IOverideVisualDevService,IDynamicApiController, ITransient + { + private const string ModuleId = "27897802470421"; + private readonly ISqlSugarRepository _repository; + private readonly IVisualDevService _visualDevService; + private readonly IRunService _runService; + private readonly IUserManager _userManager; + private readonly IBillRullService _billRuleService; + + public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); + + public EqpRepairReportService(ISqlSugarRepository repository, + IRunService runService, + IVisualDevService visualDevService, + IBillRullService billRuleService, + IUserManager userManager) + { + _repository = repository; + _visualDevService = visualDevService; + _runService = runService; + _userManager = userManager; + _billRuleService = billRuleService; + OverideFuncs.GetListAsync = GetList; + } + + private async Task GetList(VisualDevModelListQueryInput input) + { + ISqlSugarClient db = _repository.AsSugarClient(); + Dictionary? queryJson = !string.IsNullOrEmpty(input.queryJson) ? JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); + string month = queryJson != null && queryJson.ContainsKey("month") ? queryJson["month"].ToString() : ""; + string name = queryJson != null && queryJson.ContainsKey("name") ? queryJson["name"].ToString() : ""; + string userId = _userManager.UserId; + month = !string.IsNullOrEmpty(month) ? month : DateTime.Now.ToString("yyyy-MM"); + SqlSugarPagedList result = await db.Queryable() + .LeftJoin((a,b)=>a.use_department_id==b.Id) + .WhereIF(!string.IsNullOrEmpty("name"), (a, b) => a.name.Contains(name)) + .OrderBy((a,b)=>a.code) + .Select((a, b) => new EqpRepairReportOutput + { + id = a.id, + code = a.code, + name = a.name, + workshop_name = b.FullName, + month = month, + fault_num = SqlFunc.Subqueryable().Where(x=>x.equip_id==a.id && x.status!=null && x.create_time.Value.ToString("yyyy-MM")==month).Count(), + repair_completed_num = SqlFunc.Subqueryable().Where(x=>x.equip_id==a.id && x.status=="6" && x.create_time.Value.ToString("yyyy-MM")==month).Count(), + }).ToPagedListAsync(input.currentPage, input.pageSize); + + return PageResult.SqlSugarPageResult(result); + } + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoTaskService.cs index 514a27a9..b8a5df43 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoTaskService.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoTaskService.cs @@ -74,5 +74,7 @@ namespace Tnb.ProductionMgr.Interfaces /// /// Task PrdTaskRelease2(PrdTaskReleaseUpInput input, ISqlSugarClient db = null); + + public Task SelfTestScrapped2(SelfTestScrappedInput input, ISqlSugarClient db = null); } } diff --git a/ProductionMgr/Tnb.ProductionMgr/MesForErpService.cs b/ProductionMgr/Tnb.ProductionMgr/MesForErpService.cs index 13a4194a..cf5e9f8b 100644 --- a/ProductionMgr/Tnb.ProductionMgr/MesForErpService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/MesForErpService.cs @@ -60,36 +60,74 @@ namespace Tnb.ProductionMgr List extendFieldList = new List(); foreach (var item in input) { - if(string.IsNullOrEmpty(item.mo_code)) + if (string.IsNullOrEmpty(item.mo_code)) + { + Log.Error("【SavePrdMo】工单代码不能为空"); throw Oops.Bah("工单代码不能为空"); - if(string.IsNullOrEmpty(item.mo_type)) + } + + if (string.IsNullOrEmpty(item.mo_type)) + { + Log.Error("【SavePrdMo】工单类型不能为空"); throw Oops.Bah("工单类型不能为空"); - if(item.plan_start_date==null) + } + + if (item.plan_start_date == null) + { + Log.Error("【SavePrdMo】计划开始日期不能为空"); throw Oops.Bah("计划开始日期不能为空"); - if(item.plan_end_date==null) + } + + if (item.plan_end_date == null) + { + Log.Error("【SavePrdMo】计划结束日期不能为空"); throw Oops.Bah("计划结束日期不能为空"); - if(string.IsNullOrEmpty(item.material_code)) + } + + if (string.IsNullOrEmpty(item.material_code)) + { + Log.Error("【SavePrdMo】物料编号不能为空"); throw Oops.Bah("物料编号不能为空"); - if(string.IsNullOrEmpty(item.unit_id)) + } + + if (string.IsNullOrEmpty(item.unit_id)) + { + Log.Error("【SavePrdMo】单位不能为空"); throw Oops.Bah("单位不能为空"); - if(item.plan_qty==null || item.plan_qty<=0) + } + + if (item.plan_qty == null || item.plan_qty <= 0) + { + Log.Error("【SavePrdMo】计划数量不能为空"); throw Oops.Bah("计划数量不能为空"); - if(item.ebom_version==null || item.ebom_version.IsEmpty()) + } + + if (item.ebom_version == null || item.ebom_version.IsEmpty()) + { + Log.Error("【SavePrdMo】物料清单版本不能为空"); throw Oops.Bah("物料清单版本不能为空"); + } BasMaterial basMaterial = await _db.Queryable().SingleAsync(x => x.code == item.material_code); - if(basMaterial==null) + if (basMaterial == null) + { + Log.Error($"【SavePrdMo】未找到物料编号为{item.material_code}的物料"); throw Oops.Bah($"未找到物料编号为{item.material_code}的物料"); + } List basMaterialUnits = await _db.Queryable().Where(x => x.material_id == basMaterial.id).ToListAsync(); List units = basMaterialUnits.Select(x => x.auxiliary_unit_id).Distinct().ToList(); if(units!=null && !string.IsNullOrEmpty(basMaterial.unit_id)) units.Add(basMaterial.unit_id); - - if(!units.Contains(item.unit_id)) + + if (!units.Contains(item.unit_id)) + { + Log.Error($"【SavePrdMo】{basMaterial.name}不存在{item.unit_id}该单位"); throw Oops.Bah($"{basMaterial.name}不存在{item.unit_id}该单位"); + } if (!await _db.Queryable().AnyAsync(x => x.material_id == basMaterial.id && x.version == item.ebom_version)) { + Log.Error($"【SavePrdMo】系统中无法找到物料清单{item.ebom_version}版本"); throw Oops.Bah($"系统中无法找到物料清单{item.ebom_version}版本"); } @@ -114,6 +152,15 @@ namespace Tnb.ProductionMgr { await _db.Insertable(moList).ExecuteCommandAsync(); }); + if (result.IsSuccess) + { + Log.Information($"【SavePrdMo】生产工单保存成功"); + } + else + { + Log.Error($"【SavePrdMo】{result.ErrorMessage}"); + throw Oops.Bah($"{result.ErrorMessage}"); + } return !result.IsSuccess ? result.ErrorMessage : "保存成功"; } diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs index 556e20a6..2239e252 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs @@ -73,6 +73,7 @@ namespace Tnb.ProductionMgr private static readonly Dictionary _dicProcess = new(); private readonly ISqlSugarClient _db; private ISqlSugarClient _db2; + private ISqlSugarClient _db3; private readonly IBillRullService _billRuleService; private readonly IPrdInstockService _prdInstockService; private readonly WmsPrdInstockHService _wmsPrdInstockHService; @@ -1666,15 +1667,22 @@ namespace Tnb.ProductionMgr if (qcCheckPlanAdds.Count == 1) { - int hour = int.Parse(qcCheckPlanAdds[0].content.Split(" ")[2].Split("/")[1]); - int minute = int.Parse(qcCheckPlanAdds[0].content.Split(" ")[1].Split("/")[1]); - if (minute > 0) + int hour = 0; + int minute = 0; + string hourStr = qcCheckPlanAdds[0].content.Split(" ")[2]; + string minuteStr = qcCheckPlanAdds[0].content.Split(" ")[1]; + if (hourStr.Contains("/")) { - TimerPoolHelper.GetInstance().StartTimer(TimeCallback2,list.Where(p => p.mo_task_status == "Pause" || p.mo_task_status == "ToBeStarted").ToList(),TimeSpan.FromMinutes(minute),TimeSpan.FromMinutes(minute),false); - }else if (hour > 0) - { - TimerPoolHelper.GetInstance().StartTimer(TimeCallback2,list.Where(p => p.mo_task_status == "Pause" || p.mo_task_status == "ToBeStarted").ToList(),TimeSpan.FromHours(hour),TimeSpan.FromHours(hour),false); + hour = int.Parse(hourStr.Split("/")[1]); } + + if (minuteStr.Contains("/")) + { + minute = int.Parse(minuteStr.Split("/")[1]); + } + + int totalMonute = hour * 60 + minute; + TimerPoolHelper.GetInstance().StartTimer(TimeCallback2,list.Where(p => p.mo_task_status == "Pause" || p.mo_task_status == "ToBeStarted").ToList(),TimeSpan.FromMinutes(totalMonute),TimeSpan.FromMinutes(totalMonute),false); } } @@ -1710,7 +1718,14 @@ namespace Tnb.ProductionMgr await PrdTaskRelease(input); return "保存成功"; } - + + public async Task SelfTestScrapped2(SelfTestScrappedInput input, ISqlSugarClient db = null) + { + this._db3 = db; + await SelfTestScrapped(input); + return "保存成功"; + } + public async void TimeCallback(object args) { try @@ -2089,7 +2104,8 @@ namespace Tnb.ProductionMgr throw Oops.Bah($"提报失败,载具异常"); } - bool isCheckFlag = !basMaterial.category_id.Contains("ZZCP"); + // bool isCheckFlag = !basMaterial.category_id.Contains("ZZCP"); + bool isCheckFlag = !basMaterial.category_id.Contains("ZSJ"); #region 质检模块 //质检模块 @@ -2648,13 +2664,26 @@ namespace Tnb.ProductionMgr [HttpPost] public async Task SelfTestScrapped(SelfTestScrappedInput input) { - ISqlSugarClient db = _repository.AsSugarClient(); + bool tranFlag = true; + ISqlSugarClient db = null; + if (_db3!=null) + { + tranFlag = false; + db = _db3; + } + else + { + db = _repository.AsSugarClient(); + } + if (await db.Queryable().AnyAsync(x => x.id == input.mo_task_id && x.mo_task_status == DictConst.MoStatusPauseCode)) { throw Oops.Bah("暂停的任务单无法报废"); } - DbResult result = await db.Ado.UseTranAsync(async () => + if(tranFlag) await db.Ado.BeginTranAsync(); + + try { List destDefects = new(); string batch = DateTime.Now.ToString("yyyyMMddHHmmss"); @@ -2772,9 +2801,16 @@ namespace Tnb.ProductionMgr .Where(x => x.id == input.mo_task_id).ExecuteCommandAsync(); } } + if(tranFlag) await db.Ado.CommitTranAsync(); + } + catch (Exception e) + { + if(tranFlag) await db.Ado.RollbackTranAsync(); + Log.Error(e.Message,e); + throw Oops.Bah(e.Message); + } - }); - return result.IsSuccess; + return true; } /// /// 修改组装、包装,生产任务信息 diff --git a/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs b/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs index 63f6c4d5..c6162291 100644 --- a/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs +++ b/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs @@ -6,6 +6,7 @@ using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; using JNPF.JsonSerialization; +using JNPF.Logging; using JNPF.Systems.Entitys.System; using JNPF.Systems.Interfaces.System; using JNPF.TaskScheduler; @@ -446,6 +447,12 @@ namespace Tnb.QcMgr { throw Oops.Bah($"{entity.triggerevent.ToString()}找到多个质检方案"); } + + if (list[0].status == "0") + { + Log.Error($"{list[0].id}已停用"); + return; + } // List removes = new(); // foreach (QcCheckPlanH data in list) diff --git a/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs b/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs index 7269c28b..9008ee4e 100644 --- a/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs +++ b/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs @@ -393,12 +393,33 @@ namespace Tnb.QcMgr { PrdMoTask prdMoTask = await db.Queryable().Where(x=>x.mo_task_code==QcCheckExecH.mo_task_code && x.id!=null).FirstAsync(); string pauseReason = QcCheckExecH.checktype == WmsWareHouseConst.XUNJIAN_ID ? "巡检不合格" : QcCheckExecH.checktype == WmsWareHouseConst.SHOUJIAN_ID ? "首检不合格" : "末检不合格"; - await _prdMoTaskService.PrdTaskRelease2(new PrdTaskReleaseUpInput() + await _prdMoTaskService.PrdTaskRelease2(new PrdTaskReleaseUpInput() { TaskIds = NPOI.Util.Arrays.AsList(prdMoTask.id), Behavior = "Pause", PauseReeson = pauseReason },db); + await _prdMoTaskService.SelfTestScrapped2(new SelfTestScrappedInput() + { + mo_task_id = prdMoTask.id, + scrap_qty = rqty, + remark = "抽样不合格报废", + categoryItems = new List() + { + new SelfTestScrappedInputItem() + { + category_id = "25574005966629", + items = new List() + { + new defectItem() + { + defective_item = "抽样不合格报废", + defective_item_qty = rqty + } + } + } + } + },db); List carryCodes = await db.Queryable().Where(x=>x.mo_task_id==prdMoTask.id).Select(x=>x.material_box_code).Distinct().ToListAsync(); await db.Updateable() .SetColumns(x => x.is_check == ((int)EnumCheckConclusion.暂控).ToString()) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs index b3076bb0..e062c792 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs @@ -350,6 +350,13 @@ namespace Tnb.WarehouseMgr // BasWarehouse scWarehouse = await _db.Queryable().SingleAsync(x=>x.id==wmsPrdInstockD.scwarehouse_id); // BasWarehouse kcWarehouse = await _db.Queryable().SingleAsync(x=>x.id==wmsPrdInstockD.warehouse_id); PrdReport prdReport = await _db.Queryable().SingleAsync(x => x.id == instock.prd_report_id); + PrdMoTask prdMoTask = await _db.Queryable().SingleAsync(x => x.id == prdReport.mo_task_id); + PrdMo prdMo = await _db.Queryable().SingleAsync(x => x.id == prdMoTask.mo_id); + //来源erp才产成品入库 + if (prdMo.mo_source != "1") + { + return; + } List allInstockDetails = await _db.Queryable().Where(it => it.prd_instock_id == instock.id).ToListAsync();