From 61cb12747acfd029bf87a3d138d41c77d2b1c76d Mon Sep 17 00:00:00 2001 From: "qianhao.xu" Date: Wed, 13 Nov 2024 13:20:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=A6=E9=97=B4=E5=91=86=E6=BB=9E=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MES/mm/MmSlowMoveMaterialController.cs | 125 ++++++++++++ .../MES/mm/Dto/MmSlowMoveMaterialDto.cs | 43 ++++ .../mm/IService/IMmSlowMoveMaterialService.cs | 25 +++ .../MES/mm/MmSlowMoveMaterialService.cs | 183 ++++++++++++++++++ 4 files changed, 376 insertions(+) create mode 100644 DOAN.Admin.WebApi/Controllers/MES/mm/MmSlowMoveMaterialController.cs create mode 100644 DOAN.Model/MES/mm/Dto/MmSlowMoveMaterialDto.cs create mode 100644 DOAN.Service/MES/mm/IService/IMmSlowMoveMaterialService.cs create mode 100644 DOAN.Service/MES/mm/MmSlowMoveMaterialService.cs diff --git a/DOAN.Admin.WebApi/Controllers/MES/mm/MmSlowMoveMaterialController.cs b/DOAN.Admin.WebApi/Controllers/MES/mm/MmSlowMoveMaterialController.cs new file mode 100644 index 0000000..0e7f688 --- /dev/null +++ b/DOAN.Admin.WebApi/Controllers/MES/mm/MmSlowMoveMaterialController.cs @@ -0,0 +1,125 @@ +using Microsoft.AspNetCore.Mvc; +using DOAN.Model.Dto; + +using DOAN.Admin.WebApi.Filters; +using DOAN.Model.MES.mm; +using DOAN.Model.MES.mm.Dto; +using DOAN.Service.MES.mm.IService; +using Infrastructure.Converter; + +//创建时间:2024-11-12 +namespace DOAN.Admin.WebApi.Controllers +{ + /// + /// 车间呆滞品盘点 + /// + [Verify] + [Route("mes/materialManagement/SlowMoveMaterial")] + public class MmSlowMoveMaterialController : BaseController + { + /// + /// 车间呆滞品盘点接口 + /// + private readonly IMmSlowMoveMaterialService _MmSlowMoveMaterialService; + + public MmSlowMoveMaterialController(IMmSlowMoveMaterialService MmSlowMoveMaterialService) + { + _MmSlowMoveMaterialService = MmSlowMoveMaterialService; + } + + + //TODO 生成车间呆滞品 + /// + /// 生成车间呆滞品 + /// + /// + /// + [HttpGet("generate_shop_moveSlow_material")] + public IActionResult GenerateShopFloorSluggishProducts(DateTime selecDate) + { + selecDate= DOANConvertDateTime.ConvertLocalDate(selecDate); + + var response = _MmSlowMoveMaterialService.GenerateShopFloorSluggishProducts(selecDate,HttpContext.GetName()); + return SUCCESS(response); + + } + + + /// + /// 查询车间呆滞品盘点列表 + /// + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "materialManagement:mmslowmovematerial:list")] + public IActionResult QueryMmSlowMoveMaterial([FromQuery] MmSlowMoveMaterialQueryDto parm) + { + var response = _MmSlowMoveMaterialService.GetList(parm); + return SUCCESS(response); + } + + + /// + /// 查询车间呆滞品盘点详情 + /// + /// + /// + [HttpGet("{Id}")] + [ActionPermissionFilter(Permission = "materialManagement:mmslowmovematerial:query")] + public IActionResult GetMmSlowMoveMaterial(string Id) + { + var response = _MmSlowMoveMaterialService.GetInfo(Id); + + var info = response.Adapt(); + return SUCCESS(info); + } + + /// + /// 添加车间呆滞品盘点 + /// + /// + [HttpPost] + [ActionPermissionFilter(Permission = "materialManagement:mmslowmovematerial:add")] + [Log(Title = "车间呆滞品盘点", BusinessType = BusinessType.INSERT)] + public IActionResult AddMmSlowMoveMaterial([FromBody] MmSlowMoveMaterialDto parm) + { + var modal = parm.Adapt().ToCreate(HttpContext); + + var response = _MmSlowMoveMaterialService.AddMmSlowMoveMaterial(modal); + + return SUCCESS(response); + } + + /// + /// 更新车间呆滞品盘点 + /// + /// + [HttpPut] + [ActionPermissionFilter(Permission = "materialManagement:mmslowmovematerial:edit")] + [Log(Title = "车间呆滞品盘点", BusinessType = BusinessType.UPDATE)] + public IActionResult UpdateMmSlowMoveMaterial([FromBody] MmSlowMoveMaterialDto parm) + { + var modal = parm.Adapt().ToUpdate(HttpContext); + var response = _MmSlowMoveMaterialService.UpdateMmSlowMoveMaterial(modal); + + return ToResponse(response); + } + + /// + /// 删除车间呆滞品盘点 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "materialManagement:mmslowmovematerial:delete")] + [Log(Title = "车间呆滞品盘点", BusinessType = BusinessType.DELETE)] + public IActionResult DeleteMmSlowMoveMaterial(string ids) + { + int[] idsArr = Tools.SpitIntArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + + var response = _MmSlowMoveMaterialService.Delete(idsArr); + + return ToResponse(response); + } + } +} \ No newline at end of file diff --git a/DOAN.Model/MES/mm/Dto/MmSlowMoveMaterialDto.cs b/DOAN.Model/MES/mm/Dto/MmSlowMoveMaterialDto.cs new file mode 100644 index 0000000..41cde6d --- /dev/null +++ b/DOAN.Model/MES/mm/Dto/MmSlowMoveMaterialDto.cs @@ -0,0 +1,43 @@ +using System.ComponentModel.DataAnnotations; + +namespace DOAN.Model.MES.mm.Dto +{ + /// + /// 车间呆滞品盘点查询对象 + /// + public class MmSlowMoveMaterialQueryDto : PagerInfo + {} + + /// + /// 车间呆滞品盘点输入输出对象 + /// + public class MmSlowMoveMaterialDto + { + [Required(ErrorMessage = "雪花不能为空")] + public string Id { get; set; } + + public string LineCode { get; set; } + + public DateTime? CheckDate { get; set; } + + public string MaterialCode { get; set; } + + public string MaterialName { get; set; } + + public string Specification { get; set; } + + public decimal LogicQuantity { get; set; } + + public decimal ActualQuantity { get; set; } + + public string Unit { get; set; } + + public string CreatedBy { get; set; } + + public DateTime? CreatedTime { get; set; } + + public string UpdatedBy { get; set; } + + public DateTime? UpdatedTime { get; set; } + } +} \ No newline at end of file diff --git a/DOAN.Service/MES/mm/IService/IMmSlowMoveMaterialService.cs b/DOAN.Service/MES/mm/IService/IMmSlowMoveMaterialService.cs new file mode 100644 index 0000000..53a2480 --- /dev/null +++ b/DOAN.Service/MES/mm/IService/IMmSlowMoveMaterialService.cs @@ -0,0 +1,25 @@ +using System; +using DOAN.Model; +using DOAN.Model.Dto; + +using System.Collections.Generic; +using DOAN.Model.MES.mm; +using DOAN.Model.MES.mm.Dto; + +namespace DOAN.Service.MES.mm.IService +{ + /// + /// 车间呆滞品盘点service接口 + /// + public interface IMmSlowMoveMaterialService : IBaseService + { + bool GenerateShopFloorSluggishProducts(DateTime selecDate,string CreatedBy); + PagedInfo GetList(MmSlowMoveMaterialQueryDto parm); + + MmSlowMoveMaterial GetInfo(string Id); + + MmSlowMoveMaterial AddMmSlowMoveMaterial(MmSlowMoveMaterial parm); + + int UpdateMmSlowMoveMaterial(MmSlowMoveMaterial parm); + } +} diff --git a/DOAN.Service/MES/mm/MmSlowMoveMaterialService.cs b/DOAN.Service/MES/mm/MmSlowMoveMaterialService.cs new file mode 100644 index 0000000..bf3caa0 --- /dev/null +++ b/DOAN.Service/MES/mm/MmSlowMoveMaterialService.cs @@ -0,0 +1,183 @@ +using System; +using SqlSugar; +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using DOAN.Model; +using DOAN.Model.Dto; +using DOAN.Model.MES.mm.Dto; +using DOAN.Model.MES.mm; +using DOAN.Repository; +using DOAN.Model.MES.mm.Dto; +using System.Linq; +using DOAN.Model.MES.base_; +using DOAN.Model.MES.product; +using DOAN.Service.MES.mm.IService; + +namespace DOAN.Service.MES.mm +{ + /// + /// 车间呆滞品盘点Service业务层处理 + /// + [AppService(ServiceType = typeof(IMmSlowMoveMaterialService), ServiceLifetime = LifeTime.Transient)] + public class MmSlowMoveMaterialService : BaseService, IMmSlowMoveMaterialService + { + /// + /// 生成车间呆滞品 + /// + /// + /// + public bool GenerateShopFloorSluggishProducts(DateTime selecDate,string CreatedBy) + { + List list = new List(); + // 计算 仓库发料 + var WarehouseSendMaterial= Context.Queryable() + .LeftJoin((task, info) => task.TaskCode == info.FkTaskCode) + .Where((task, info) => task.TaskDate == selecDate) + .GroupBy((task, info) => new {task.LineCode, info.MaterialCode, info.MaterialName, info.Specification,info.Unit }) + .Select((task, info) => new + { + LineCode=task.LineCode, + MaterialCode = info.MaterialCode, + MaterialName = info.MaterialName, + Specification = info.Specification, + Unit = info.Unit, + Quantity =SqlFunc.AggregateSum(info.Quantity) , + }).ToList(); + + // 计算 理论消耗 + var logicConsumeMaterial= Context.Queryable() + .LeftJoin((work, report) => work.Workorder == report.FkWorkorder) + .LeftJoin((work, report, bom) => work.ProductionCode == bom.InvCode) + .LeftJoin((work, report, bom,list) =>bom.InvCode==list.Code) + .Where((work, report, bom,list) => work.WorkorderDate == selecDate) + .GroupBy((work, report, bom,list) => new { work.LineCode, bom.SubInvCode,bom.SubInvName,list.Specification,list.Unit }) + .Select((work, report, bom,list) => new + { + LineCode = work.LineCode, + MaterialName=bom.SubInvName, + MaterialCode = bom.SubInvCode, + Specification=list.Specification, + unit=list.Unit, + Quantity = SqlFunc.AggregateSum(report.FinishedNum ?? 0) * + SqlFunc.AggregateSum(Convert.ToInt16(bom.Iusequantity)), + }).ToList(); + for (int i = 0; i < logicConsumeMaterial.Count; i++) + { + MmSlowMoveMaterial mmSlowMoveMaterial = new MmSlowMoveMaterial(); + mmSlowMoveMaterial.Id = XueHua; + mmSlowMoveMaterial.CheckDate = selecDate; + mmSlowMoveMaterial.LineCode = logicConsumeMaterial[i].LineCode; + mmSlowMoveMaterial.MaterialCode = logicConsumeMaterial[i].MaterialCode; + mmSlowMoveMaterial.MaterialName = logicConsumeMaterial[i].MaterialName; + mmSlowMoveMaterial.Specification = logicConsumeMaterial[i].Specification; + mmSlowMoveMaterial.LogicQuantity=logicConsumeMaterial[i].Quantity; + mmSlowMoveMaterial.Unit = logicConsumeMaterial[i].unit; + mmSlowMoveMaterial.CreatedBy = CreatedBy; + mmSlowMoveMaterial.CreatedTime = DateTime.Now; + + for (int j = 0; j < WarehouseSendMaterial.Count; j++) + { + if (WarehouseSendMaterial[j].LineCode == logicConsumeMaterial[i].LineCode) + { + if (WarehouseSendMaterial[j].MaterialCode == logicConsumeMaterial[i].MaterialCode) + { + mmSlowMoveMaterial.LogicQuantity= WarehouseSendMaterial[j].Quantity - logicConsumeMaterial[j].Quantity; + } + } + } + + list.Add(mmSlowMoveMaterial); + + } + + int result = 0; + + + if (list.Count > 0) + { + UseTran2(() => + { + Context.Deleteable().Where(it => it.CheckDate == selecDate).ExecuteCommand(); + result = Context.Insertable(list).ExecuteCommand(); + + }); + + } + + return result > 0; + + + + + + + } + + /// + /// 查询车间呆滞品盘点列表 + /// + /// + /// + public PagedInfo GetList(MmSlowMoveMaterialQueryDto parm) + { + var predicate = Expressionable.Create(); + + var response = Queryable() + .Where(predicate.ToExpression()) + .ToPage(parm); + + return response; + } + + + /// + /// 获取详情 + /// + /// + /// + public MmSlowMoveMaterial GetInfo(string Id) + { + var response = Queryable() + .Where(x => x.Id == Id) + .First(); + + return response; + } + + /// + /// 添加车间呆滞品盘点 + /// + /// + /// + public MmSlowMoveMaterial AddMmSlowMoveMaterial(MmSlowMoveMaterial model) + { + return Context.Insertable(model).ExecuteReturnEntity(); + } + + /// + /// 修改车间呆滞品盘点 + /// + /// + /// + public int UpdateMmSlowMoveMaterial(MmSlowMoveMaterial model) + { + //var response = Update(w => w.Id == model.Id, it => new MmSlowMoveMaterial() + //{ + // LineCode = model.LineCode, + // CheckDate = model.CheckDate, + // MaterialCode = model.MaterialCode, + // MaterialName = model.MaterialName, + // Specification = model.Specification, + // LogicQuantity = model.LogicQuantity, + // ActualQuantity = model.ActualQuantity, + // Unit = model.Unit, + // CreatedBy = model.CreatedBy, + // CreatedTime = model.CreatedTime, + // UpdatedBy = model.UpdatedBy, + // UpdatedTime = model.UpdatedTime, + //}); + //return response; + return Update(model, true); + } + } +} \ No newline at end of file