198 lines
7.1 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
} |