using System; using SqlSugar; using Infrastructure.Attribute; using Infrastructure.Extensions; using DOAN.Model; using DOAN.Model.Dto; using DOAN.Repository; using DOAN.Model.MES.mm.Dto; using DOAN.Model.MES.mm; using DOAN.Service.group.IService; using SqlSugar.Extensions; using DOAN.Model.MES.product; using DOAN.Model.MES.base_; using Microsoft.Extensions.Logging; using NPOI; namespace DOAN.Service.group { /// /// 物料需求计划Service业务层处理 /// [AppService(ServiceType = typeof(IMmRequirePlanService), ServiceLifetime = LifeTime.Transient)] public class MmRequirePlanService : BaseService, IMmRequirePlanService { /// /// 生成物料需求计划 /// /// /// /// public int GenerateMmRequirePlan(DateTime plan_date, string name) { int result = 0; plan_date = plan_date.Date; Dictionary need_Materials = new Dictionary(); List mmRequirePlans = new List(); //获取当天所有工单 List ProWorkorderList = Context.Queryable().Where(it => it.WorkorderDate == plan_date).ToList(); if (ProWorkorderList != null && ProWorkorderList.Count > 0) { foreach (var workorder_item in ProWorkorderList) { //遍历每个工单的产品 if (!string.IsNullOrEmpty(workorder_item.ProductionCode)) { //每个产品的原材料 BOM //var query= Context.Queryable().Where(it => it.InvCode == workorder_item.ProductionCode); List boms = Context.Queryable().Where(it => it.InvCode == workorder_item.ProductionCode).ToList(); if (boms != null && boms.Count > 0) { //遍历所有子件 foreach (var item in boms) { float need_num = (workorder_item.DeliveryNum ?? 1) * (float.Parse(item.Iusequantity)); if (need_Materials.ContainsKey(item.SubInvCode)) { float pre_num = need_Materials[item.SubInvCode]; need_Materials[item.SubInvCode] = pre_num + need_num; } else { need_Materials.Add(item.SubInvCode, need_num); } } } } } } if (need_Materials.Count > 0) { string[] SubInvCode = need_Materials.Keys.ToArray(); List baseMaterialList = Context.Queryable().Where(it => SubInvCode.Contains(it.Code)).ToList(); if (baseMaterialList != null && baseMaterialList.Count() > 0) { foreach (var item in baseMaterialList) { MmRequirePlan mmRequirePlan = new MmRequirePlan(); mmRequirePlan.Id = XueHua; mmRequirePlan.MaterialCode = item.Code; mmRequirePlan.MaterialName = item.Name; mmRequirePlan.RequireNum = (decimal)(need_Materials.TryGetValue(item.Code, out float value) ? value : default(float)); mmRequirePlan.RequireDate = plan_date; mmRequirePlan.IsSufficient = 0; mmRequirePlan.CreatedBy = name; mmRequirePlan.CreatedTime = DateTime.Now; mmRequirePlans.Add(mmRequirePlan); } } } if (mmRequirePlans.Count > 0) { UseTran2(() => { Context.Deleteable().Where(it => it.RequireDate == plan_date).ExecuteCommand(); result = Context.Insertable(mmRequirePlans).ExecuteCommand(); }); } return result; } /// /// 查询物料需求计划列表 /// /// /// public PagedInfo GetList(MmRequirePlanQueryDto parm) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.MaterialCode), it => it.MaterialCode.Contains(parm.MaterialCode)) .AndIF(!string.IsNullOrEmpty(parm.MaterialName), it => it.MaterialName.Contains(parm.MaterialName)) .AndIF(parm.RequireDate != null && parm.RequireDate > DateTime.MinValue, it => it.RequireDate == parm.RequireDate.Value.ToLocalTime().Date) ; var response = Queryable() .Where(predicate.ToExpression()) .ToPage(parm); return response; } /// /// 获取详情 /// /// /// public MmRequirePlan GetInfo(string Id) { var response = Queryable() .Where(x => x.Id == Id) .First(); return response; } /// /// 添加物料需求计划 /// /// /// public MmRequirePlan AddMmRequirePlan(MmRequirePlan model) { model.Id = XueHua; model.RequireDate = model.RequireDate.Value.Date; return Context.Insertable(model).ExecuteReturnEntity(); } /// /// 修改物料需求计划 /// /// /// public int UpdateMmRequirePlan(MmRequirePlan model) { //var response = Update(w => w.Id == model.Id, it => new MmRequirePlan() //{ // MaterialCode = model.MaterialCode, // MaterialName = model.MaterialName, // RequireNum = model.RequireNum, // RequireDate = model.RequireDate, // IsSufficient = model.IsSufficient, // SufficientTime = model.SufficientTime, // CreatedBy = model.CreatedBy, // CreatedTime = model.CreatedTime, // UpdatedBy = model.UpdatedBy, // UpdatedTime = model.UpdatedTime, // Name = model.Name, //}); //return response; return Update(model, true); } /// /// 更新物料状态 /// /// /// /// /// public int UpdateMaterialStatus(string id, int status, string name) { return Context.Updateable().SetColumns(it => it.IsSufficient == status) .SetColumns(it => it.UpdatedBy == name) .SetColumns(it => it.UpdatedTime == DateTime.Now) .SetColumns(it=>it.Name== name) .SetColumns(it=>it.SufficientTime == DateTime.Now.ToLocalTime()) .Where(it => it.Id == id) .ExecuteCommand(); } public int AllUpdateMaterialStatus(DateTime? handledate, int status, string name) { return Context.Updateable().SetColumns(it => it.IsSufficient == status) .SetColumns(it => it.UpdatedBy == name) .SetColumns(it => it.UpdatedTime == DateTime.Now) .SetColumns(it => it.Name == name) .SetColumns(it => it.SufficientTime == DateTime.Now.ToLocalTime()) .Where(it => it.RequireDate == handledate.Value.ToLocalTime()) .ExecuteCommand(); } } }