diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs index 5f5d2c05..cb64203f 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs @@ -44,6 +44,9 @@ using Newtonsoft.Json; using Tnb.BasicData.Entities.Dto; using NPOI.SS.Formula.Functions; using Tnb.PerMgr.Entities; +using Tnb.QcMgr.Interfaces; +using Tnb.QcMgr.Entities.Dto; +using Tnb.QcMgr.Entities.Enums; // using Tnb.PerMgr.Entities; @@ -67,7 +70,7 @@ namespace Tnb.ProductionMgr private static Dictionary _dicProcess = new Dictionary(); private readonly ISqlSugarClient _db; private readonly IBillRullService _billRuleService; - + private readonly IQcCheckPlanService _qcCheckPlanService; public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); public PrdMoTaskService( @@ -76,7 +79,8 @@ namespace Tnb.ProductionMgr IDictionaryDataService dictionaryDataService, IRunService runService, IBillRullService billRullService, - IVisualDevService visualDevService + IVisualDevService visualDevService, + IQcCheckPlanService qcCheckPlanService ) { _repository = repository; @@ -88,7 +92,7 @@ namespace Tnb.ProductionMgr OverideFuncs.DeleteAsync = Delete; OverideFuncs.GetListAsync = GetList; _billRuleService = billRullService; - + _qcCheckPlanService=qcCheckPlanService; } #region Get @@ -1299,7 +1303,19 @@ namespace Tnb.ProductionMgr row = await db.Insertable(report).ExecuteCommandAsync(); - + #region 质检模块 + //质检模块 + TriggerPlanEntity entity = new TriggerPlanEntity(); + entity.materialid = prdMoTask.material_id; + entity.processid = prdMoTask.process_id; + entity.workid = prdMoTask.workstation_id; + var reported = prdMoTask.reported_work_qty == null ? 0 : prdMoTask.reported_work_qty; + var scrap = prdMoTask.scrap_qty == null ? 0 : prdMoTask.scrap_qty; + entity.oldpronum = reported+ scrap; + entity.newpronum = input.reported_qty; + entity.triggerevent = EnumTriggerEvent.生产检定量; + await _qcCheckPlanService.CreateTask(entity); + #endregion if (prdMoTask.reported_work_qty == null) { await db.Updateable() @@ -1482,6 +1498,20 @@ namespace Tnb.ProductionMgr var scrapQty = db.Queryable().Where(it => it.mo_task_id == input.mo_task_id)?.Sum(d => d.defective_item_qty); if (scrapQty.HasValue && scrapQty.Value > 0)//更新生产任务表报废数量 { + #region 质检模块 + //质检模块 + var prdMoTask = await db.Queryable().SingleAsync(x => x.id == input.mo_task_id); + TriggerPlanEntity entity = new TriggerPlanEntity(); + entity.materialid = prdMoTask.material_id; + entity.processid = prdMoTask.process_id; + entity.workid = prdMoTask.workstation_id; + var reported = prdMoTask.reported_work_qty == null ? 0 : prdMoTask.reported_work_qty; + var scrap = prdMoTask.scrap_qty == null ? 0 : prdMoTask.scrap_qty; + entity.oldpronum = reported + scrap; + entity.newpronum = input.scrap_qty; + entity.triggerevent = EnumTriggerEvent.生产检定量; + await _qcCheckPlanService.CreateTask(entity); + #endregion await db.Updateable().SetColumns(it => new PrdMoTask { scrap_qty = scrapQty.Value }).Where(it => it.id == input.mo_task_id).ExecuteCommandAsync(); } var defectRecord = await db.Queryable().FirstAsync(it => it.mo_task_id == input.mo_task_id); diff --git a/ProductionMgr/Tnb.ProductionMgr/Tnb.ProductionMgr.csproj b/ProductionMgr/Tnb.ProductionMgr/Tnb.ProductionMgr.csproj index 6aa07278..1e9a332b 100644 --- a/ProductionMgr/Tnb.ProductionMgr/Tnb.ProductionMgr.csproj +++ b/ProductionMgr/Tnb.ProductionMgr/Tnb.ProductionMgr.csproj @@ -13,6 +13,7 @@ + diff --git a/QcMgr/Tnb.QcMgr.Entities/Dto/CheckPlan.cs b/QcMgr/Tnb.QcMgr.Entities/Dto/CheckPlan.cs index e19c59f6..08231e28 100644 --- a/QcMgr/Tnb.QcMgr.Entities/Dto/CheckPlan.cs +++ b/QcMgr/Tnb.QcMgr.Entities/Dto/CheckPlan.cs @@ -13,6 +13,7 @@ namespace Tnb.QcMgr.Entities public string? addid { get; set; } public string? triggertype { get; set; } public string? content { get; set; } + public int? number { get; set; } public List? checktypes { get; set; } } public class CheckPlanTypeInput @@ -38,10 +39,11 @@ namespace Tnb.QcMgr.Entities { public string? id { get; set; } public bool hasadd { get; set; } - public bool hasitem{ get; set; } + public bool hasitem { get; set; } public string? addid { get; set; } public string? triggertype { get; set; } public string? content { get; set; } + public int? number { get; set; } public List? checktypes { get; set; } } public class CheckPlanTypeOut diff --git a/QcMgr/Tnb.QcMgr.Entities/Dto/Trigger.cs b/QcMgr/Tnb.QcMgr.Entities/Dto/Trigger.cs index 65de98c4..c58ec94c 100644 --- a/QcMgr/Tnb.QcMgr.Entities/Dto/Trigger.cs +++ b/QcMgr/Tnb.QcMgr.Entities/Dto/Trigger.cs @@ -37,5 +37,18 @@ namespace Tnb.QcMgr.Entities.Dto /// 触发条件 /// public EnumTriggerEvent? triggerevent { get; set; } + + /// + /// 原先生产数量 + /// + public int? oldpronum { get; set; } + /// + /// 新生产数量 + /// + public int? newpronum { get; set; } + /// + /// 生产次数 + /// + public int? pronum { get; set; } } } diff --git a/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckPlanAdd.cs b/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckPlanAdd.cs index 57df112f..9cbba68d 100644 --- a/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckPlanAdd.cs +++ b/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckPlanAdd.cs @@ -34,5 +34,10 @@ namespace Tnb.QcMgr.Entities /// 主表编号 /// public string? mainid { get; set; } + + /// + /// 频次/数量 + /// + public int? number { get; set; } } } diff --git a/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs b/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs index 9ef65818..6a534904 100644 --- a/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs +++ b/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; +using System.Reflection; using System.Text; using System.Threading.Tasks; @@ -14,18 +16,48 @@ namespace Tnb.QcMgr.Entities.Enums } public enum EnumTriggerEvent { + [Remark("首件检", "换模具")] 首件检换模具 = 1, + [Remark("首件检", "换物料批号")] 首件检换物料批号 = 2, + [Remark("首件检", "换物料编号")] 首件检换物料编号 = 3, + [Remark("首件检", "新的生产任务")] 首件检新的生产任务 = 4, + [Remark("首件检", "生产任务暂停")] 首件检生产任务暂停 = 5, + [Remark("出厂检", "按入厂频次")] 出厂检按入厂频次 = 6, + [Remark("入厂检", "按物料频次")] 入厂检按物料频次 = 7, + [Remark("入厂检", "按物料编号")] 入厂检按物料编号 = 8, + [Remark("生产检", "定量")] 生产检定量 = 9, + [Remark("生产检", "定码")] 生产检定码 = 10, + [Remark("生产检", "产出频次")] 生产检产出频次 = 11, + [Remark("生产检", "固定次数")] 生产检固定次数 = 12, + [Remark("生产检", "按流转卡")] 生产检按流转卡 = 13 } + public class RemarkAttribute : Attribute + { + public string CheckType { get; set; } + public string CheckContent { get; set; } + + public RemarkAttribute(string checkType, string checkContent) + { + this.CheckType = checkType; + this.CheckContent = checkContent; + } + public static RemarkAttribute GetRemark(EnumTriggerEvent? enumTriggerEvent) + { + FieldInfo fi = enumTriggerEvent!.GetType().GetField(enumTriggerEvent.ToString()!)!; + object[] attributes = fi.GetCustomAttributes(typeof(RemarkAttribute), false); + return ((RemarkAttribute)attributes[0]); + } + } } diff --git a/QcMgr/Tnb.QcMgr.Interfaces/IQcCheckPlanService.cs b/QcMgr/Tnb.QcMgr.Interfaces/IQcCheckPlanService.cs index 14102ccc..2192f330 100644 --- a/QcMgr/Tnb.QcMgr.Interfaces/IQcCheckPlanService.cs +++ b/QcMgr/Tnb.QcMgr.Interfaces/IQcCheckPlanService.cs @@ -31,5 +31,12 @@ namespace Tnb.QcMgr.Interfaces /// public Task GetTriggerPlans(); + /// + /// 根据计划生成任务 + /// + /// + /// + public Task CreateTask(TriggerPlanEntity entity); + } } diff --git a/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs b/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs index 5717a3f5..a9f95453 100644 --- a/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs +++ b/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs @@ -7,6 +7,7 @@ using System.Text; using System.Threading.Tasks; using Aspose.Cells.Drawing; using COSXML.Model.Tag; +using JNPF.Common.Contracts; using JNPF.Common.Core.Manager; using JNPF.Common.Enums; using JNPF.Common.Security; @@ -93,6 +94,7 @@ namespace Tnb.QcMgr CheckPlansOut.addid = QcCheckPlanAdd.id; CheckPlansOut.triggertype = QcCheckPlanAdd.triggertype!; CheckPlansOut.content = QcCheckPlanAdd.content!; + CheckPlansOut.number= QcCheckPlanAdd.number; } if (QcCheckPlanDs != null && QcCheckPlanDs.Count > 0) { @@ -191,6 +193,7 @@ namespace Tnb.QcMgr QcCheckPlanAdd.mainid = CheckPlanInput.mainid; QcCheckPlanAdd.triggertype = CheckPlanInput.triggertype; QcCheckPlanAdd.content = CheckPlanInput.content; + QcCheckPlanAdd.number = CheckPlanInput.number; List QcCheckPlanDs = new List(); if (CheckPlanInput.checktypes != null) { @@ -276,49 +279,93 @@ namespace Tnb.QcMgr JoinType.Left,a.id == d.planid, JoinType.Left,a.id == e.planid, }); - GetQuery(Query, entity.triggerevent); + GetQuery(Query, entity); var list = await Query .WhereIF(!string.IsNullOrEmpty(entity.materialid), (a, b, c, d, e) => c.materialid == entity.materialid) .WhereIF(!string.IsNullOrEmpty(entity.processid), (a, b, c, d, e) => d.processid == entity.processid) .WhereIF(!string.IsNullOrEmpty(entity.workid), (a, b, c, d, e) => e.workid == entity.workid).ToListAsync(); + Filter(list, entity); if (list.Count > 0) await SaveTask(list, entity); } - private void GetQuery(ISugarQueryable Query, EnumTriggerEvent? enumTriggerEvent) + private void GetQuery(ISugarQueryable Query, TriggerPlanEntity entity) { - var DictionaryData = _repository.AsSugarClient().Queryable ((a, b) => new object[] { JoinType.Left, a.DictionaryTypeId == b.Id, }) .Where((a, b) => b.FullName == "质量方案类型").ToList(); var TriggerEvent = new QcTriggerEvent(); - if (enumTriggerEvent == EnumTriggerEvent.首件检换模具) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "首件检").First().Id && p.name == "换模具").First(); - if (enumTriggerEvent == EnumTriggerEvent.首件检换物料批号) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "首件检").First().Id && p.name == "换物料批号").First(); - if (enumTriggerEvent == EnumTriggerEvent.首件检换物料编号) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "首件检").First().Id && p.name == "换物料编号").First(); - if (enumTriggerEvent == EnumTriggerEvent.首件检新的生产任务) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "首件检").First().Id && p.name == "新的生产任务").First(); - if (enumTriggerEvent == EnumTriggerEvent.首件检生产任务暂停) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "首件检").First().Id && p.name == "生产任务暂停").First(); - if (enumTriggerEvent == EnumTriggerEvent.出厂检按入厂频次) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "出厂检").First().Id && p.name == "按入厂频次").First(); - if (enumTriggerEvent == EnumTriggerEvent.入厂检按物料频次) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "入厂检").First().Id && p.name == "按物料频次").First(); - if (enumTriggerEvent == EnumTriggerEvent.入厂检按物料编号) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "入厂检").First().Id && p.name == "按物料编号").First(); - if (enumTriggerEvent == EnumTriggerEvent.生产检定量) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "生产检").First().Id && p.name == "定量").First(); - if (enumTriggerEvent == EnumTriggerEvent.生产检定码) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "生产检").First().Id && p.name == "定码").First(); - if (enumTriggerEvent == EnumTriggerEvent.生产检产出频次) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "生产检").First().Id && p.name == "产出频次").First(); - if (enumTriggerEvent == EnumTriggerEvent.生产检固定次数) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "生产检").First().Id && p.name == "固定次数").First(); - if (enumTriggerEvent == EnumTriggerEvent.生产检按流转卡) - TriggerEvent = _repository.AsSugarClient().Queryable().Where(p => p.type == DictionaryData.Where(p => p.FullName == "生产检").First().Id && p.name == "按流转卡").First(); + 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(); Query = Query.Where((a, b, c, d, e) => b.triggertype == "3" && b.content!.Contains(TriggerEvent.id)); } + private void Filter(List QcCheckPlanHs, TriggerPlanEntity entity) + { + var removePlanHs = new List(); + var enumTriggerEvent = entity.triggerevent; + foreach (var plan in QcCheckPlanHs) + { + if (enumTriggerEvent == EnumTriggerEvent.首件检换模具) + { + + } + if (enumTriggerEvent == EnumTriggerEvent.首件检换物料批号) + { + + } + + if (enumTriggerEvent == EnumTriggerEvent.首件检换物料编号) + { + + } + if (enumTriggerEvent == EnumTriggerEvent.首件检新的生产任务) + { + + } + if (enumTriggerEvent == EnumTriggerEvent.首件检生产任务暂停) + { + + } + + if (enumTriggerEvent == EnumTriggerEvent.出厂检按入厂频次) + { + + } + if (enumTriggerEvent == EnumTriggerEvent.入厂检按物料频次) + { + + } + if (enumTriggerEvent == EnumTriggerEvent.入厂检按物料编号) + { + + } + if (enumTriggerEvent == EnumTriggerEvent.生产检定量) + { + var number = _repository.AsSugarClient().Queryable().Where(p => p.mainid == plan.id).First().number; + if ((entity.newpronum + entity.oldpronum / number) <= (entity.oldpronum / number)) + removePlanHs.Add(plan); + } + if (enumTriggerEvent == EnumTriggerEvent.生产检定码) + { + + } + if (enumTriggerEvent == EnumTriggerEvent.生产检产出频次) + { + var number = _repository.AsSugarClient().Queryable().Where(p => p.mainid == plan.id).First().number; + if ((entity.pronum % number) != 0) + removePlanHs.Add(plan); + } + if (enumTriggerEvent == EnumTriggerEvent.生产检固定次数) + { + + } + if (enumTriggerEvent == EnumTriggerEvent.生产检按流转卡) + { + + } + } + removePlanHs.ForEach(p => { QcCheckPlanHs.Remove(p); }); + } private async Task SaveTask(List planhs, TriggerPlanEntity entity) { var DictionaryData = _repository.AsSugarClient().Queryable