using Infrastructure.Attribute; using DOAN.Service.Mobile.IService; using DOAN.Model.MES.mm; using DOAN.Model.MES.base_; using DOAN.Model.MES.product; using DOAN.Model.Mobile.Dto; using DOAN.Common.Mobile; using Mapster; using System; using DOAN.Model.MES.product.Dto; using DOAN.Infrastructure; namespace DOAN.Service.Mobile { [AppService(ServiceType = typeof(IPreparationTaskService), ServiceLifetime = LifeTime.Transient)] public class PreparationTaskService : BaseService, IPreparationTaskService { public List GetLines() { return Context.Queryable().Where(it => it.Status == 1).ToList(); } public List GetWorkOrderList(DateTime HandleDate, string route_code) { HandleDate = HandleDate.ToLocalTime().Date; return Context.Queryable().Where(it => it.WorkorderDate == HandleDate) .Where(it => it.LineCode == route_code).ToList(); } public MaterialModel ParseMaterialCode(string materialCode) { //1 解析原码 string materialCode_true = null; materialCode_true = ParselabelHelper.ParseLabel01(materialCode); //1 返回 物料详情 BaseMaterialList baseMaterial = Context.Queryable().Where(it => it.Code == materialCode_true).First(); TypeAdapterConfig.NewConfig() .Map(dest => dest.MaterialName, (src) => src.Name) .Map(dest => dest.Partnumber, (src) => src.Code) .Map(dest => dest.Batchnumber, (src) => "") .Map(dest => dest.quantity, (src) => 0) .Map(dest => dest.Code, (src) => "") .Map(dest => dest.Color, (src) => src.Color) .Map(dest => dest.Specification, (src) => src.Specification) .Map(dest => dest.Unit, (src) => src.Unit) .Map(dest => dest.Description, (src) => src.Description); return baseMaterial.Adapt(); } public List GetWorkorderTask(string workorder) { return Context.Queryable().Where(it => it.FkWorkorder == workorder) .OrderBy(it => it.SerialNum).ToList(); } public List GetTaskInfos(string task_code) { return Context.Queryable().Where(it => it.FkTaskCode == task_code).ToList(); } public int GenerateIngredientTask(IngredientTaskRequestForm form) { int result = 0; // 生成任务 MmPreparationTask Max_task = Context.Queryable() .Where(it => it.FkWorkorder == form.workorder) .OrderByDescending(it => it.SerialNum) .First(); int SerialNumMax = 0; if (Max_task != null) { SerialNumMax = Max_task.SerialNum; } MmPreparationTask newMmPreparationTask = new MmPreparationTask(); newMmPreparationTask.Id = XueHua; newMmPreparationTask.SerialNum = SerialNumMax + 1; newMmPreparationTask.TaskCode = form.workorder + "_" + newMmPreparationTask.SerialNum; newMmPreparationTask.FkWorkorder = form.workorder; newMmPreparationTask.PreparationStatus = 2; newMmPreparationTask.CreatedBy = "PDA"; newMmPreparationTask.CreatedTime = DateTime.Now; List TaskDetailsinserted = new List(); //生成配料任务详情 if (form.Ingredient_task != null && form.Ingredient_task.Count() > 0) { foreach (var item in form.Ingredient_task) { MmTaskMaterialInfo materialInfo = new MmTaskMaterialInfo(); materialInfo.Id = XueHua; materialInfo.FkTaskCode = newMmPreparationTask.TaskCode; materialInfo.MaterialCode = item.MaterialCode; materialInfo.MaterialName = item.MaterialName; materialInfo.Specification = item.Specification; materialInfo.Quantity = item.Quantity; materialInfo.Unit = item.Unit; materialInfo.CreatedBy = "PDA"; materialInfo.CreatedTime = DateTime.Now; TaskDetailsinserted.Add(materialInfo); } } UseTran2(() => { Context.Insertable(TaskDetailsinserted).ExecuteCommand(); result = Context.Insertable(newMmPreparationTask).ExecuteCommand(); }); return result; } public List CheckMaterialIsInDateAndLine(CheckMaterialDto checkMaterial) { List CheckMaterialResultList = new List(); //查询 日期 线 下所有工单 if (checkMaterial.HandelDate.Kind == DateTimeKind.Utc) { checkMaterial.HandelDate = checkMaterial.HandelDate.ToLocalTime(); } checkMaterial.HandelDate = checkMaterial.HandelDate.Date; // 查询工单下所有bom List bomss = Context.Queryable().Where(ib => SqlFunc .Subqueryable().Where(it => it.WorkorderDate == checkMaterial.HandelDate) .Where(it => it.LineCode == checkMaterial.LineCode).Where(it => it.ProductionCode == ib.InvCode) .Any()) .ToList(); if (bomss != null && bomss.Count > 0) { if (checkMaterial.MatetialCodeArray.Length > 0) { for (int i = 0; i < checkMaterial.MatetialCodeArray.Length; i++) { if (bomss.Any(it => it.SubInvCode == checkMaterial.MatetialCodeArray[i])) { //materialResult.result = true; } else { CheckMaterialResult materialResult = new CheckMaterialResult(); materialResult.MatetialCode = checkMaterial.MatetialCodeArray[i]; materialResult.result = false; CheckMaterialResultList.Add(materialResult); } } } } return CheckMaterialResultList; } public bool CheckAnyPerationMaterialRequirement(DateTime handleDate, string line_code) { handleDate = ConvertDateTime.ConvertLocalDate(handleDate); return Context.Queryable().Where(it => it.WorkorderDate == handleDate) .Where(it => it.LineCode == line_code).Any(); } public List SearchTaskByLine(string lineCode, DateTime hadleDate) { return Context.Queryable().Where(it => it.LineCode == lineCode) .Where(it => it.TaskDate == hadleDate).OrderBy(it => it.SerialNum).ToList(); } public List GetTaskInfosByLine(string task_code) { return Context.Queryable().Where(it => it.FkTaskCode == task_code).ToList(); } public int GenerateIngredientTaskByline(IngredientTaskRequestForm2 form) { int result = 0; // 生成任务 form.HandleDate = form.HandleDate.ToLocalTime().Date; MmPreparationTaskLine Max_task = Context.Queryable() .Where(it => it.LineCode == form.lineCode) .Where(it => it.TaskDate == form.HandleDate) .OrderByDescending(it => it.SerialNum) .First(); int SerialNumMax = 0; if (Max_task != null) { SerialNumMax = Max_task.SerialNum.Value; } MmPreparationTaskLine newMmPreparationTask = new MmPreparationTaskLine(); newMmPreparationTask.Id = XueHua; newMmPreparationTask.SerialNum = SerialNumMax + 1; newMmPreparationTask.TaskCode = form.HandleDate.ToString("yyyyMMdd") + "_" + form.lineCode + "_" + newMmPreparationTask.SerialNum; newMmPreparationTask.LineCode = form.lineCode; newMmPreparationTask.TaskDate = form.HandleDate; newMmPreparationTask.PreparationStatus = 2; newMmPreparationTask.CreatedBy = "PDA"; newMmPreparationTask.CreatedTime = DateTime.Now; List TaskDetailsinserted = new List(); //生成配料任务详情 if (form.Ingredient_task != null && form.Ingredient_task.Count() > 0) { foreach (var item in form.Ingredient_task) { MmTaskMaterialInfoByLine materialInfo = new MmTaskMaterialInfoByLine(); materialInfo.Id = XueHua; materialInfo.FkTaskCode = newMmPreparationTask.TaskCode; materialInfo.MaterialCode = item.MaterialCode; materialInfo.MaterialName = item.MaterialName; materialInfo.Specification = item.Specification; materialInfo.Quantity = item.Quantity; materialInfo.Unit = item.Unit; materialInfo.CreatedBy = "PDA"; materialInfo.CreatedTime = DateTime.Now; TaskDetailsinserted.Add(materialInfo); } } //TODO 线边库入库 inbound(TaskDetailsinserted, form.lineCode); UseTran2(() => { Context.Insertable(TaskDetailsinserted).ExecuteCommand(); result = Context.Insertable(newMmPreparationTask).ExecuteCommand(); }); return result; } public int DeletePreparationMaterialTask(string task_code) { //TODO 取消入库 CancelInbound(task_code); int rt = 0; UseTran2(() => { rt = Context.Deleteable().Where(it => it.TaskCode == task_code).ExecuteCommand(); Context.Deleteable().Where(it => it.FkTaskCode == task_code).ExecuteCommand(); }); return rt; } public int DeletePreparationMaterialInfo(string id) { //TODO 取消入库 string task_code = Context.Queryable().Where(it => it.Id == id) .Select(it => it.FkTaskCode).First(); CancelInbound(task_code); return Context.Deleteable().Where(it => it.Id == id).ExecuteCommand(); } public int UpdatePreParationMaterialNum(string id, decimal num) { int result= Context.Updateable().Where(it => it.Id == id) .SetColumns(it => it.Quantity == num).ExecuteCommand(); // TODO 取消入库 string task_code = Context.Queryable().Where(it => it.Id == id) .Select(it => it.FkTaskCode).First(); CancelInbound(task_code); //TODO 重新入库 string LineCode= Context.Queryable().LeftJoin((t, i) => t.TaskCode == i.FkTaskCode&&i.Id==id) .Select((t,i)=>t.LineCode).First(); inbound(Context.Queryable( ).Where(it=>it.Id == id).ToList(),LineCode); return result; } /// /// 线边库入库 /// private void inbound(List TaskDetailsinserted, string lineCode) { if (TaskDetailsinserted.Count() > 0) { string[] inboundMaterialArray = TaskDetailsinserted.Select(it => it.MaterialCode).ToArray(); //新增库容 var InventoryMaterialList = Context.Queryable() .Where(it => it.LineCode == lineCode) .Where(it => inboundMaterialArray.Contains(it.MaterialCode)) .ToList(); // 入库日志 // List insertMmLinesidebarInventoryInbound = new List(); foreach (var materialInfo in TaskDetailsinserted) { if (InventoryMaterialList.Where(it => it.MaterialCode == materialInfo.MaterialCode).Any()) { //更新 Context.Updateable() .SetColumns(it => it.LogicQuantity == it.LogicQuantity + materialInfo.Quantity) .Where(it => it.MaterialCode == materialInfo.MaterialCode) .Where(it => it.LineCode == lineCode) .ExecuteCommand(); } else { //新增 MmLinesidebarInventory inventory = new MmLinesidebarInventory(); inventory.Id = XueHua; inventory.MaterialCode = materialInfo.MaterialCode; inventory.MaterialName = materialInfo.MaterialName; inventory.LogicQuantity = materialInfo.Quantity; inventory.LineCode = lineCode; inventory.CreatedBy = "PDA"; inventory.CreatedTime = DateTime.Now; Context.Insertable(inventory).ExecuteCommand(); } MmLinesidebarInventoryOutboundAndInbound inbound = new MmLinesidebarInventoryOutboundAndInbound(); inbound.Id = XueHua; inbound.LineCode = lineCode; inbound.MaterialCode = materialInfo.MaterialCode; inbound.MaterialName = materialInfo.MaterialName; inbound.Action = 3; inbound.TaskCode = materialInfo.FkTaskCode; inbound.Quantity = materialInfo.Quantity; //新增入库数量 inbound.CreatedBy = "PDA"; inbound.CreatedTime = DateTime.Now; Context.Insertable(inbound).ExecuteCommand(); } } } /// /// 取消入库 /// /// private void CancelInbound(string task_code) { //查询日志 ,这个任务下 所有产线 对应 物料 var result = Context.Queryable() .LeftJoin((t, i) => t.TaskCode == i.FkTaskCode) .Where((t, i) => t.TaskCode == task_code) .Select((t, i) => new { t.LineCode, i.MaterialCode, i.MaterialName, i.Quantity, }) .ToList(); if (result.Count() > 0) { foreach (var item in result) { MmLinesidebarInventory inventory_Reduce = new MmLinesidebarInventory(); inventory_Reduce.LineCode = item.LineCode; inventory_Reduce.MaterialCode = item.MaterialCode; inventory_Reduce.LogicQuantity = item.Quantity; Context.Updateable() .Where(it => it.LineCode == inventory_Reduce.LineCode) .Where(it => it.MaterialCode == inventory_Reduce.MaterialCode) .SetColumns(it => it.LogicQuantity == it.LogicQuantity - inventory_Reduce.LogicQuantity) .ExecuteCommand(); MmLinesidebarInventoryOutboundAndInbound inbound = new MmLinesidebarInventoryOutboundAndInbound(); inbound.Id = XueHua; inbound.LineCode = item.LineCode; inbound.TaskCode = task_code; inbound.MaterialCode = item.MaterialCode; inbound.MaterialName = item.MaterialName; inbound.Quantity = inventory_Reduce.LogicQuantity; inbound.Action = 4; inbound.CreatedBy = "PDA"; inbound.Remark = $"人工删除任务,取消入库,任务号为{task_code}"; inbound.CreatedTime = DateTime.Now; } } } } }