zhuangpei-mesbackend/DOAN.Service/MES/mm/MmRequirePlanService.cs
2024-08-31 09:59:48 +08:00

198 lines
7.1 KiB
C#

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
{
/// <summary>
/// 物料需求计划Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IMmRequirePlanService), ServiceLifetime = LifeTime.Transient)]
public class MmRequirePlanService : BaseService<MmRequirePlan>, IMmRequirePlanService
{
/// <summary>
/// 生成物料需求计划
/// </summary>
/// <param name="plan_date"></param>
/// <param name="name"></param>
/// <returns></returns>
public int GenerateMmRequirePlan(DateTime plan_date, string name)
{
int result = 0;
plan_date = plan_date.Date;
Dictionary<string, float> need_Materials = new Dictionary<string, float>();
List<MmRequirePlan> mmRequirePlans = new List<MmRequirePlan>();
//获取当天所有工单
List<ProWorkorder> ProWorkorderList = Context.Queryable<ProWorkorder>().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<BaseMaterialBom>().Where(it => it.InvCode == workorder_item.ProductionCode);
List<BaseMaterialBom> boms = Context.Queryable<BaseMaterialBom>().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.Value) * (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> baseMaterialList = Context.Queryable<BaseMaterialList>().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<MmRequirePlan>().Where(it => it.RequireDate == plan_date).ExecuteCommand();
result = Context.Insertable(mmRequirePlans).ExecuteCommand();
});
}
return result;
}
/// <summary>
/// 查询物料需求计划列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<MmRequirePlanDto> GetList(MmRequirePlanQueryDto parm)
{
var predicate = Expressionable.Create<MmRequirePlan>()
.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<MmRequirePlan, MmRequirePlanDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public MmRequirePlan GetInfo(string Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加物料需求计划
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public MmRequirePlan AddMmRequirePlan(MmRequirePlan model)
{
model.Id = XueHua;
model.RequireDate = model.RequireDate.Value.Date;
return Context.Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改物料需求计划
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
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);
}
}
}