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; using DOAN.Service.MES.mm.line; 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) { //线边库入库 MmLineInventoryService mmLineInventoryService = new MmLineInventoryService(); 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); mmLineInventoryService.putInLineMaterial(1,form.lineCode, item.MaterialCode,"001","001", item.Quantity); } } UseTran2(() => { Context.Insertable(TaskDetailsinserted).ExecuteCommand(); result = Context.Insertable(newMmPreparationTask).ExecuteCommand(); }); return result; } public int DeletePreparationMaterialTask(string 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(); 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(); //TODO 重新入库 string LineCode= Context.Queryable().LeftJoin((t, i) => t.TaskCode == i.FkTaskCode&&i.Id==id) .Select((t,i)=>t.LineCode).First(); return result; } } }