diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdMoFromOneListOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdMoFromOneListOutput.cs index b8de7235..dd579252 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdMoFromOneListOutput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdMoFromOneListOutput.cs @@ -142,7 +142,7 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage } - public class PrdMoReverseFromMaterialput + public class PrdMoReverseFromMaterialoutput { /// /// 物料ID @@ -153,6 +153,14 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage /// public string material_code { get; set; } /// + /// 物料名称 + /// + public string material_name { get; set; } + /// + /// 物料规格 + /// + public string material_standard { get; set; } + /// /// 批次 /// public string code_batch { get; set;} @@ -208,6 +216,12 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage /// 已投数量 /// public decimal feeding_num { get; set; } + /// + /// 使用状态 + /// + public string use_status { get; set; } + public string supplier_name { get; set; } + public string unit_name { get; set; } } /// @@ -234,6 +248,7 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage /// 投料子表id /// public string feeding_detail_id { get; set; } + public string mo_task_code { get; set; } public string feeding_time { get; set; } public decimal num { get; set; } public string check_conclusion { get; set; } diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/AppPrdMoTaskLogListOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/AppPrdMoTaskLogListOutput.cs new file mode 100644 index 00000000..52ad5685 --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/AppPrdMoTaskLogListOutput.cs @@ -0,0 +1,31 @@ +namespace Tnb.ProductionMgr.Entities.Entity +{ + public class AppPrdMoTaskLogListOutput + { + public string id { get; set; } + public string mo_task_code { get; set; } + public string mo_task_status { get; set; } + public string material_id { get; set; } + public string material_id_id { get; set; } + public string material_code { get; set; } + public string material_name { get; set; } + public string mold_id { get; set; } + public string mold_id_id { get; set; } + public string mold_code { get; set; } + public string eqp_id { get; set; } + public string eqp_id_id { get; set; } + public string equip_code { get; set; } + + public string process_id { get; set; } + public string process_id_id { get; set; } + public string process_code { get; set; } + public string mbom_process_id { get; set; } + public int? scheduled_qty { get; set; } + public int? reported_work_qty { get; set; } + public int? scrap_qty { get; set; } + + public string plan_start_date { get; set; } + + public string plan_end_date { get; set; } + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/AppPrdMoTaskOneListOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/AppPrdMoTaskOneListOutput.cs new file mode 100644 index 00000000..e5bd8bee --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/AppPrdMoTaskOneListOutput.cs @@ -0,0 +1,31 @@ +namespace Tnb.ProductionMgr.Entities +{ + public class AppPrdMoTaskOneListOutput + { + public string id { get; set; } + public string mo_task_code { get; set; } + public string mo_task_status { get; set; } + public string material_id { get; set; } + public string material_id_id { get; set; } + public string material_code { get; set; } + public string material_name { get; set; } + public string mold_id { get; set; } + public string mold_id_id { get; set; } + public string mold_code { get; set; } + public string eqp_id { get; set; } + public string eqp_id_id { get; set; } + public string equip_code { get; set; } + + public string process_id { get; set; } + public string process_id_id { get; set; } + public string process_code { get; set; } + public string mbom_process_id { get; set; } + public int? scheduled_qty { get; set; } + public int? reported_work_qty { get; set; } + public int? scrap_qty { get; set; } + + public string plan_start_date { get; set; } + + public string plan_end_date { get; set; } + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTaskLog.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTaskLog.cs index 602beb67..f10ade62 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTaskLog.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTaskLog.cs @@ -73,5 +73,15 @@ public partial class PrdMoTaskLog : BaseEntity /// 任务单编号 /// public string? mo_task_code { get; set; } + + /// + /// 工位编号 + /// + public string? station_code { get; set; } + + /// + /// 工序编号 + /// + public string? process_code { get; set; } } diff --git a/ProductionMgr/Tnb.ProductionMgr/APP/AppPrdMoTaskLogService.cs b/ProductionMgr/Tnb.ProductionMgr/APP/AppPrdMoTaskLogService.cs new file mode 100644 index 00000000..14186d66 --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr/APP/AppPrdMoTaskLogService.cs @@ -0,0 +1,125 @@ +using COSXML.Model.Tag; +using JNPF.Common.Core.Manager; +using JNPF.Common.Filter; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +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 SqlSugar; +using Tnb.ProductionMgr.Entities; +using Tnb.BasicData.Entities; +using Tnb.EquipMgr.Entities; +using Tnb.BasicData; + +namespace Tnb.ProductionMgr.APP +{ + /// + /// 移动端任务单操作记录 + /// + [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)] + [Route("api/[area]/[controller]/[action]")] + [OverideVisualDev(ModuleId)] + public class AppPrdMoTaskLogService : IOverideVisualDevService, IDynamicApiController, ITransient + { + private const string ModuleId = "28491200142101"; + private readonly ISqlSugarRepository _repository; + private readonly IDictionaryDataService _dictionaryDataService; + private readonly IUserManager _userManager; + private readonly IRunService _runService; + private readonly IVisualDevService _visualDevService; + private readonly ISqlSugarClient _db; + private readonly IBillRullService _billRuleService; + + public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); + public AppPrdMoTaskLogService( + ISqlSugarRepository repository, + IDictionaryDataService dictionaryDataService, + IUserManager userManager, + IRunService runService, + IBillRullService billRullService, + IVisualDevService visualDevService + ) + { + _repository = repository; + _userManager = userManager; + _runService = runService; + _visualDevService = visualDevService; + _db = _repository.AsSugarClient(); + OverideFuncs.GetListAsync = GetList; + _dictionaryDataService = dictionaryDataService; + _billRuleService = billRullService; + } + + private async Task GetList(VisualDevModelListQueryInput input) + { + var db = _repository.AsSugarClient(); + Dictionary queryJson = !string.IsNullOrEmpty(input.queryJson) ? Newtonsoft.Json.JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); + string mo_task_code = queryJson.ContainsKey("mo_task_code") ? queryJson["mo_task_code"].ToString() : ""; + string material_code = queryJson.ContainsKey("material_id") ? queryJson["material_id"].ToString() : ""; + string equip_code = queryJson.ContainsKey("eqp_id") ? queryJson["eqp_id"].ToString() : ""; + var result = await db.Queryable() + .LeftJoin((a, b) => a.material_id == b.id) + .LeftJoin((a, b, c) => a.mold_id == c.id) + .LeftJoin((a, b, c, d) => a.eqp_id == d.id) + .LeftJoin((a, b, c, d, e) => e.EnCode == a.mo_task_status && e.DictionaryTypeId == DictConst.PrdTaskStatusTypeId) + .LeftJoin((a,b,c,d,e,f)=>a.process_id==f.id) + .WhereIF(!string.IsNullOrEmpty(mo_task_code), (a, b, c, d, e) => a.mo_task_code.Contains(mo_task_code)) + .WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e) => b.code.Contains(material_code) || b.name.Contains(material_code)) + .WhereIF(!string.IsNullOrEmpty(equip_code), (a, b, c, d, e) => d.code.Contains(equip_code) || d.name.Contains(equip_code)) + .OrderByDescending(a => a.create_time) + .Select((a, b, c, d, e,f) => new AppPrdMoTaskOneListOutput + { + id = a.id, + mo_task_code = a.mo_task_code, + mo_task_status = e.FullName, + material_id_id = a.material_id, + material_id = b.code+"/"+b.name, + material_code = b.code, + material_name = b.name, + mold_id_id = a.mold_id, + mold_id = c.mold_code, + mold_code = c.mold_code, + eqp_id_id = a.eqp_id, + eqp_id = d.code, + equip_code = d.code, + process_id_id = a.process_id, + process_id = f.process_name, + process_code = f.process_code, + mbom_process_id = a.mbom_process_id, + scheduled_qty = a.scheduled_qty, + reported_work_qty = a.reported_work_qty, + scrap_qty = a.scrap_qty, + plan_start_date = a.estimated_start_date==null ? "" : a.estimated_start_date.Value.ToString("yyyy-MM-dd"), + plan_end_date = a.plan_end_date==null ? "" : a.plan_end_date.Value.ToString("yyyy-MM-dd"), + }).ToPagedListAsync(input.currentPage, input.pageSize); + return PageResult.SqlSugarPageResult(result); + } + + /// + /// 根据任务单id获取操作记录 + /// + /// + /// + [HttpPost] + public async Task GetLogById(Dictionary dic) + { + string mo_task_id = dic.ContainsKey("mo_task_id") ? dic["mo_task_id"] : ""; + if (string.IsNullOrEmpty(mo_task_id)) return Array.Empty(); + Dictionary statsDic = await _dictionaryDataService.GetDicByTypeId(DictConst.PrdTaskStatusTypeId); + return await _db.Queryable().Where(x=>x.mo_task_id==mo_task_id) + .OrderBy(x=>x.create_time) + .Mapper(x => + { + if (statsDic.ContainsKey(x.status)) + { + x.status = statsDic[x.status].ToString(); + } + }) + .ToListAsync(); + } + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/APP/AppPrdMoTaskOneService.cs b/ProductionMgr/Tnb.ProductionMgr/APP/AppPrdMoTaskOneService.cs new file mode 100644 index 00000000..82f0bedd --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr/APP/AppPrdMoTaskOneService.cs @@ -0,0 +1,96 @@ +using COSXML.Model.Tag; +using JNPF.Common.Core.Manager; +using JNPF.Common.Filter; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +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 SqlSugar; +using Tnb.ProductionMgr.Entities; +using Tnb.BasicData.Entities; +using Tnb.EquipMgr.Entities; +using Tnb.BasicData; + +namespace Tnb.ProductionMgr.APP +{ + /// + /// 移动端注塑挤出任务管理 + /// + [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)] + [Route("api/[area]/[controller]/[action]")] + [OverideVisualDev(ModuleId)] + public class AppPrdMoTaskOneService : IOverideVisualDevService, IDynamicApiController, ITransient + { + private const string ModuleId = "27890354204949"; + private readonly ISqlSugarRepository _repository; + private readonly IUserManager _userManager; + private readonly IRunService _runService; + private readonly IVisualDevService _visualDevService; + private readonly ISqlSugarClient _db; + private readonly IBillRullService _billRuleService; + + public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); + public AppPrdMoTaskOneService( + ISqlSugarRepository repository, + IUserManager userManager, + IRunService runService, + IBillRullService billRullService, + IVisualDevService visualDevService + ) + { + _repository = repository; + _userManager = userManager; + _runService = runService; + _visualDevService = visualDevService; + _db = _repository.AsSugarClient(); + OverideFuncs.GetListAsync = GetList; + _billRuleService = billRullService; + } + + private async Task GetList(VisualDevModelListQueryInput input) + { + var db = _repository.AsSugarClient(); + Dictionary queryJson = !string.IsNullOrEmpty(input.queryJson) ? Newtonsoft.Json.JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); + string mo_task_code = queryJson.ContainsKey("mo_task_code") ? queryJson["mo_task_code"].ToString() : ""; + string material_code = queryJson.ContainsKey("material_id") ? queryJson["material_id"].ToString() : ""; + string equip_code = queryJson.ContainsKey("eqp_id") ? queryJson["eqp_id"].ToString() : ""; + var result = await db.Queryable() + .LeftJoin((a, b) => a.material_id == b.id) + .LeftJoin((a, b, c) => a.mold_id == c.id) + .LeftJoin((a, b, c, d) => a.eqp_id == d.id) + .LeftJoin((a, b, c, d, e) => e.EnCode == a.mo_task_status && e.DictionaryTypeId == DictConst.PrdTaskStatusTypeId) + .WhereIF(!string.IsNullOrEmpty(mo_task_code), (a, b, c, d, e) => a.mo_task_code.Contains(mo_task_code)) + .WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e) => b.code.Contains(material_code) || b.name.Contains(material_code)) + .WhereIF(!string.IsNullOrEmpty(equip_code), (a, b, c, d, e) => d.code.Contains(equip_code) || d.name.Contains(equip_code)) + .Where(a => a.schedule_type == 1) + .Where(a => (a.mo_task_status==DictConst.ToBeStartedEnCode || a.mo_task_status==DictConst.InProgressEnCode || a.mo_task_status==DictConst.MoStatusExceptionCode || a.mo_task_status==DictConst.MoStatusPauseCode || a.mo_task_status==DictConst.ComplatedEnCode)) + .OrderByDescending(a => a.create_time) + .Select((a, b, c, d, e) => new AppPrdMoTaskOneListOutput + { + id = a.id, + mo_task_code = a.mo_task_code, + mo_task_status = e.FullName, + material_id_id = a.material_id, + material_id = b.code+"/"+b.name, + material_code = b.code, + material_name = b.name, + mold_id_id = a.mold_id, + mold_id = c.mold_code, + mold_code = c.mold_code, + eqp_id_id = a.eqp_id, + eqp_id = d.code, + equip_code = d.code, + scheduled_qty = a.scheduled_qty, + reported_work_qty = a.reported_work_qty, + scrap_qty = a.scrap_qty, + plan_start_date = a.estimated_start_date==null ? "" : a.estimated_start_date.Value.ToString("yyyy-MM-dd"), + plan_end_date = a.plan_end_date==null ? "" : a.plan_end_date.Value.ToString("yyyy-MM-dd"), + }).ToPagedListAsync(input.currentPage, input.pageSize); + return PageResult.SqlSugarPageResult(result); + } + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/APP/AppPrdMoTaskTwoService.cs b/ProductionMgr/Tnb.ProductionMgr/APP/AppPrdMoTaskTwoService.cs new file mode 100644 index 00000000..9499db64 --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr/APP/AppPrdMoTaskTwoService.cs @@ -0,0 +1,101 @@ +using COSXML.Model.Tag; +using JNPF.Common.Core.Manager; +using JNPF.Common.Filter; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +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 SqlSugar; +using Tnb.ProductionMgr.Entities; +using Tnb.BasicData.Entities; +using Tnb.EquipMgr.Entities; +using Tnb.BasicData; + +namespace Tnb.ProductionMgr.APP +{ + /// + /// 移动端组装包装任务管理 + /// + [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)] + [Route("api/[area]/[controller]/[action]")] + [OverideVisualDev(ModuleId)] + public class AppPrdMoTaskTwoService : IOverideVisualDevService, IDynamicApiController, ITransient + { + private const string ModuleId = "28486997557781"; + private readonly ISqlSugarRepository _repository; + private readonly IUserManager _userManager; + private readonly IRunService _runService; + private readonly IVisualDevService _visualDevService; + private readonly ISqlSugarClient _db; + private readonly IBillRullService _billRuleService; + + public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); + public AppPrdMoTaskTwoService( + ISqlSugarRepository repository, + IUserManager userManager, + IRunService runService, + IBillRullService billRullService, + IVisualDevService visualDevService + ) + { + _repository = repository; + _userManager = userManager; + _runService = runService; + _visualDevService = visualDevService; + _db = _repository.AsSugarClient(); + OverideFuncs.GetListAsync = GetList; + _billRuleService = billRullService; + } + + private async Task GetList(VisualDevModelListQueryInput input) + { + var db = _repository.AsSugarClient(); + Dictionary queryJson = !string.IsNullOrEmpty(input.queryJson) ? Newtonsoft.Json.JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); + string mo_task_code = queryJson.ContainsKey("mo_task_code") ? queryJson["mo_task_code"].ToString() : ""; + string material_code = queryJson.ContainsKey("material_id") ? queryJson["material_id"].ToString() : ""; + string equip_code = queryJson.ContainsKey("eqp_id") ? queryJson["eqp_id"].ToString() : ""; + var result = await db.Queryable() + .LeftJoin((a, b) => a.material_id == b.id) + .LeftJoin((a, b, c) => a.mold_id == c.id) + .LeftJoin((a, b, c, d) => a.eqp_id == d.id) + .LeftJoin((a, b, c, d, e) => e.EnCode == a.mo_task_status && e.DictionaryTypeId == DictConst.PrdTaskStatusTypeId) + .LeftJoin((a,b,c,d,e,f)=>a.process_id==f.id) + .WhereIF(!string.IsNullOrEmpty(mo_task_code), (a, b, c, d, e) => a.mo_task_code.Contains(mo_task_code)) + .WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e) => b.code.Contains(material_code) || b.name.Contains(material_code)) + .WhereIF(!string.IsNullOrEmpty(equip_code), (a, b, c, d, e) => d.code.Contains(equip_code) || d.name.Contains(equip_code)) + .Where(a => a.schedule_type == 2) + .Where(a => (a.mo_task_status==DictConst.ToBeStartedEnCode || a.mo_task_status==DictConst.InProgressEnCode || a.mo_task_status==DictConst.MoStatusExceptionCode || a.mo_task_status==DictConst.MoStatusPauseCode || a.mo_task_status==DictConst.ComplatedEnCode)) + .OrderByDescending(a => a.create_time) + .Select((a, b, c, d, e,f) => new AppPrdMoTaskOneListOutput + { + id = a.id, + mo_task_code = a.mo_task_code, + mo_task_status = e.FullName, + material_id_id = a.material_id, + material_id = b.code+"/"+b.name, + material_code = b.code, + material_name = b.name, + mold_id_id = a.mold_id, + mold_id = c.mold_code, + mold_code = c.mold_code, + eqp_id_id = a.eqp_id, + eqp_id = d.code, + equip_code = d.code, + process_id_id = a.process_id, + process_id = f.process_name, + process_code = f.process_code, + mbom_process_id = a.mbom_process_id, + scheduled_qty = a.scheduled_qty, + reported_work_qty = a.reported_work_qty, + scrap_qty = a.scrap_qty, + plan_start_date = a.estimated_start_date==null ? "" : a.estimated_start_date.Value.ToString("yyyy-MM-dd"), + plan_end_date = a.plan_end_date==null ? "" : a.plan_end_date.Value.ToString("yyyy-MM-dd"), + }).ToPagedListAsync(input.currentPage, input.pageSize); + return PageResult.SqlSugarPageResult(result); + } + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs index baffc63b..4f4b9344 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs @@ -873,12 +873,24 @@ namespace Tnb.ProductionMgr } else { - PageResult output = JsonConvert.DeserializeObject>(authResponse.data.ToString(),new Tnb.Common.Utils.DateTimeJsonConverter()); + PageResult output = JsonConvert.DeserializeObject>(authResponse.data.ToString(),new Tnb.Common.Utils.DateTimeJsonConverter()); if (output.list != null && output.list.Count > 0) { + BasMaterial basMaterial = await _db.Queryable().SingleAsync(x=>x.id==output.list[0].material_id); + BasSupplier basSupplier = await _db.Queryable().SingleAsync(x=>x.id==output.list[0].supplier_id); + DictionaryDataEntity unit = await _db.Queryable() + .LeftJoin((a,b)=>a.Id==b.DictionaryTypeId) + .Where((a,b)=>a.EnCode==DictConst.MeasurementUnit && b.EnCode==output.list[0].unit_id) + .Select((a,b)=>b) + .FirstAsync(); output.list[0].feeding_num = await _db.Queryable() .LeftJoin((a, b) => a.id == b.material_receipt_detail_id) .Where((a, b) => a.barcode == barcode).SumAsync((a, b) => b.num); + output.list[0].material_name = basMaterial.name; + output.list[0].material_standard = basMaterial.material_standard; + output.list[0].supplier_name = basSupplier.supplier_name; + output.list[0].unit_name = unit.FullName; + return output.list[0]; } } diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs index 71dcbc55..0158bfca 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs @@ -2062,7 +2062,7 @@ namespace Tnb.ProductionMgr }); if (!result.IsSuccess) throw Oops.Bah(result.ErrorMessage); - return result.IsSuccess ? "延期成功" : result.ErrorMessage; + return result.IsSuccess ? "更换成功" : result.ErrorMessage; } @@ -2109,7 +2109,7 @@ namespace Tnb.ProductionMgr }); if (!result.IsSuccess) throw Oops.Bah(result.ErrorMessage); - return result.IsSuccess ? "延期成功" : result.ErrorMessage; + return result.IsSuccess ? "更换成功" : result.ErrorMessage; } @@ -2156,9 +2156,53 @@ namespace Tnb.ProductionMgr }); if (!result.IsSuccess) throw Oops.Bah(result.ErrorMessage); - return result.IsSuccess ? "延期成功" : result.ErrorMessage; + return result.IsSuccess ? "更换成功" : result.ErrorMessage; } + + /// + /// 根据id获取任务单相关信息 + /// + /// + [HttpPost] + public async Task GetPrdMoTaskInfoById(Dictionary dic) + { + string id = dic.ContainsKey("id") ? dic["id"] : ""; + if (string.IsNullOrEmpty(id)) return null; + var db = _repository.AsSugarClient(); + return await db.Queryable() + .LeftJoin((a, b) => a.material_id == b.id) + .LeftJoin((a, b, c) => a.mold_id == c.id) + .LeftJoin((a, b, c, d) => a.eqp_id == d.id) + .LeftJoin((a,b,c,d,e)=>e.EnCode==a.mo_task_status && e.DictionaryTypeId==DictConst.PrdTaskStatusTypeId) + .LeftJoin((a,b,c,d,e,f)=>a.process_id==f.id) + .LeftJoin((a,b,c,d,e,f,g)=>a.workstation_id==g.Id) + .Where((a, b, c, d) => a.id == id) + .Select((a, b, c, d,e,f,g) => new + { + id = a.id, + mo_task_code = a.mo_task_code, + mo_task_status = e.FullName, + material_id = a.material_id, + material_code = b.code, + material_name = b.name, + mold_id = a.mold_id, + mold_code = c.mold_code, + mold_name = c.mold_name, + schedule_type = a.schedule_type, + equip_code = d.code, + equip_name = d.name, + workstation_id = a.workstation_id, + workstation_code = g.EnCode, + workstation_name = g.FullName, + scheduled_qty = a.scheduled_qty, + reported_work_qty = a.reported_work_qty, + scrap_qty = a.scrap_qty, + process_id = a.process_id, + process_name = f.process_name, + }).FirstAsync(); + + } } } diff --git a/QcMgr/Tnb.QcMgr.Entities/Dto/SpcData.cs b/QcMgr/Tnb.QcMgr.Entities/Dto/SpcData.cs index e5af3a8a..d9b3bf7b 100644 --- a/QcMgr/Tnb.QcMgr.Entities/Dto/SpcData.cs +++ b/QcMgr/Tnb.QcMgr.Entities/Dto/SpcData.cs @@ -107,4 +107,34 @@ namespace Tnb.QcMgr.Entities public float? clmr { get; set; } public float? lclmr { get; set; } } + public class Pchart + { + public float? p { get; set; } + public float? n { get; set; } + public float? ucl { get; set; } + public float? cl { get; set; } + public float? lcl { get; set; } + } + public class Uchart + { + public float? u { get; set; } + public float? n { get; set; } + public float? ucl { get; set; } + public float? cl { get; set; } + public float? lcl { get; set; } + } + public class NPchart + { + public float? np { get; set; } + public float? ucl { get; set; } + public float? cl { get; set; } + public float? lcl { get; set; } + } + public class Cchart + { + public float? c { get; set; } + public float? ucl { get; set; } + public float? cl { get; set; } + public float? lcl { get; set; } + } } diff --git a/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs b/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs index 6a534904..c6d5ccc8 100644 --- a/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs +++ b/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs @@ -16,15 +16,15 @@ namespace Tnb.QcMgr.Entities.Enums } public enum EnumTriggerEvent { - [Remark("首件检", "换模具")] + [Remark("首检", "换模具")] 首件检换模具 = 1, - [Remark("首件检", "换物料批号")] + [Remark("首检", "换物料批号")] 首件检换物料批号 = 2, - [Remark("首件检", "换物料编号")] + [Remark("首检", "换物料编号")] 首件检换物料编号 = 3, - [Remark("首件检", "新的生产任务")] + [Remark("首检", "新的生产任务")] 首件检新的生产任务 = 4, - [Remark("首件检", "生产任务暂停")] + [Remark("首检", "生产任务暂停")] 首件检生产任务暂停 = 5, [Remark("出厂检", "按入厂频次")] 出厂检按入厂频次 = 6, diff --git a/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs b/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs index 15f413e1..8c6c0a34 100644 --- a/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs +++ b/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs @@ -292,11 +292,12 @@ namespace Tnb.QcMgr { var DictionaryData = _repository.AsSugarClient().Queryable ((a, b) => new object[] { JoinType.Left, a.DictionaryTypeId == b.Id, }) - .Where((a, b) => b.FullName == "质量方案类型").ToList(); + .Where((a, b) => b.FullName == "质检类型选择").ToList(); var TriggerEvent = new QcTriggerEvent(); var enumTriggerEvent = entity.triggerevent; var remark = RemarkAttribute.GetRemark(enumTriggerEvent); - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == remark.CheckType).First().Id && p.name == remark.CheckContent).First(); + var type = DictionaryData.Where(p => p.FullName == remark.CheckType).First().Id; + TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == type && p.name == remark.CheckContent).First(); Query = Query.Where((a, b, c, d, e) => b.triggertype == "3" && b.content!.Contains(TriggerEvent.id)); } private void Filter(List QcCheckPlanHs, TriggerPlanEntity entity) diff --git a/QcMgr/Tnb.QcMgr/QcSpcService.cs b/QcMgr/Tnb.QcMgr/QcSpcService.cs index 297b6ca7..36753845 100644 --- a/QcMgr/Tnb.QcMgr/QcSpcService.cs +++ b/QcMgr/Tnb.QcMgr/QcSpcService.cs @@ -11,6 +11,7 @@ using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; using Microsoft.AspNetCore.Mvc; +using Spire.Xls.Core; using SqlSugar; using Tnb.QcMgr.Entities; using Tnb.QcMgr.Entities.Entity; @@ -255,6 +256,84 @@ namespace Tnb.QcMgr }); return XMRchart; } + if (QcSpcH.graphtype == "P图") + { + List pcharts = new List(); + foreach (var QcSpcD in QcSpcDs) + { + Pchart pchart = new Pchart(); + pchart.p = QcSpcD.defectivenum / QcSpcD.checknum; + pchart.n = QcSpcD.checknum; + + pcharts.Add(pchart); + } + var pAverage = (pcharts.Select(p => p.n * p.p).Sum()) / (pcharts.Select(p => p.n).Sum()); + var nAverage = pcharts.Select(p => p.n).Average(); + pcharts.ForEach(p => + { + p.cl = pAverage; + p.ucl = pAverage + (float)(3 * Math.Sqrt((double)(pAverage * (1 - pAverage))!) / Math.Sqrt((double)nAverage!)); + p.lcl = pAverage - (float)(3 * Math.Sqrt((double)(pAverage * (1 - pAverage))!) / Math.Sqrt((double)nAverage!)) < 0 ? 0 : pAverage - (float)(3 * Math.Sqrt((double)(pAverage * (1 - pAverage))!) / Math.Sqrt((double)nAverage!)); + }); + return pcharts; + } + if (QcSpcH.graphtype == "U图") + { + List ucharts = new List(); + foreach (var QcSpcD in QcSpcDs) + { + Uchart uchart = new Uchart(); + uchart.u = QcSpcD.defectivenum / QcSpcD.checknum; + uchart.n = QcSpcD.checknum; + ucharts.Add(uchart); + } + var uAverage = (ucharts.Select(p => p.u).Sum()) / (ucharts.Count()); + var nAverage = ucharts.Select(p => p.n).Average(); + ucharts.ForEach(p => + { + p.cl = uAverage; + p.ucl = uAverage + (float)(3 * Math.Sqrt((double)(uAverage / nAverage)!)); + p.lcl = uAverage - (float)(3 * Math.Sqrt((double)(uAverage / nAverage)!)) < 0 ? 0 : uAverage - (float)(3 * Math.Sqrt((double)(uAverage / nAverage)!)); + }); + return ucharts; + } + if (QcSpcH.graphtype == "nP图") + { + List npcharts = new List(); + foreach (var QcSpcD in QcSpcDs) + { + NPchart npchart = new NPchart(); + npchart.np = QcSpcD.defectivenum; + npcharts.Add(npchart); + } + var npAverage = (npcharts.Select(p => p.np).Sum()) / (npcharts.Count()); + var pAverage = npcharts.Select(p => p.np).Sum() / (npcharts.Count() * QcSpcH.subcapacity); + npcharts.ForEach(p => + { + p.cl = npAverage; + p.ucl = npAverage + (float)(3 * Math.Sqrt((double)(npAverage * (1 - pAverage))!)); + p.lcl = npAverage - (float)(3 * Math.Sqrt((double)(npAverage * (1 - pAverage))!)) < 0 ? 0 : npAverage - (float)(3 * Math.Sqrt((double)(npAverage * (1 - pAverage))!)); + }); + return npcharts; + } + if (QcSpcH.graphtype == "C图") + { + List ccharts = new List(); + foreach (var QcSpcD in QcSpcDs) + { + Cchart cchart = new Cchart(); + cchart.c = QcSpcD.defectivenum; + ccharts.Add(cchart); + } + var cAverage = (ccharts.Select(p => p.c).Sum()) / (ccharts.Count()); + ccharts.ForEach(p => + { + p.cl = cAverage; + p.ucl = cAverage + (float)(3 * Math.Sqrt((double)cAverage!)); + p.lcl = cAverage - (float)(3 * Math.Sqrt((double)cAverage!)) < 0 ? 0 : cAverage - (float)(3 * Math.Sqrt((double)cAverage!)); + }); + return ccharts; + } return null; } //标准差计算