diff --git a/ZR.Admin.WebApi/Controllers/mes/wm/MaterialReceiptController.cs b/ZR.Admin.WebApi/Controllers/mes/wm/MaterialReceiptController.cs new file mode 100644 index 00000000..e62ae098 --- /dev/null +++ b/ZR.Admin.WebApi/Controllers/mes/wm/MaterialReceiptController.cs @@ -0,0 +1,68 @@ +using Microsoft.AspNetCore.Mvc; +using ZR.Model.MES.wm; +using ZR.Model.MES.wm.DTO; +using ZR.Service.mes.wm.IService; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace ZR.Admin.WebApi.Controllers.mes.wm +{ + [Route("mes/wm/mrt")] + public class MaterialReceiptController : BaseController + { + private readonly IMaterialReceiptService materialReceiptService; + + public MaterialReceiptController(IMaterialReceiptService materialReceiptService) + { + this.materialReceiptService = materialReceiptService; + } + + /// + /// 生成并查询原材料入库单 + /// + /// + /// + /// + /// + /// + /// + [HttpGet("getMaterialReceiptList")] + public IActionResult GetMaterialReceiptList(int pageNum, int pageSize, int year = -1, int week = -1, int date = -1) + { + (List, int) data = materialReceiptService.GetWmMaterialReceiptList(pageNum, pageSize, year, week, date); + return ToResponse(new ApiResult(200, "success", data)); + } + + /// + /// 保存单条数据 + /// + /// 一条记录参数 + /// + [HttpPost("saveOneMaterialReceipt")] + public IActionResult saveOneMaterialReceipt([FromBody] WmMaterialReceiptDTO wmMaterialReceiptDTO) + { + int resultInt = materialReceiptService.SaveOneMaterialReceipt(wmMaterialReceiptDTO); + if (resultInt == 0) + { + return ToResponse(new ApiResult((int)ResultCode.GLOBAL_ERROR, "保存失败,数据库操作异常", "保存失败")); + } + if (resultInt == -1) + { + return ToResponse(new ApiResult((int)ResultCode.GLOBAL_ERROR, "保存失败,传入参数异常", "保存失败")); + } + return ToResponse(new ApiResult((int)ResultCode.SUCCESS, "success", "保存成功")); + + } + + /// + /// 保存整页数据 + /// + /// 整页数据 + /// + [HttpPost("savePageMaterialReceipts")] + public IActionResult savePageMaterialReceipts([FromBody] List list) + { + string resultStr = materialReceiptService.SavePageMaterialReceipts(list); + return ToResponse(new ApiResult((int)ResultCode.SUCCESS, "success", resultStr)); + } + } +} diff --git a/ZR.Model/MES/wm/DTO/WmMaterialReceiptDTO.cs b/ZR.Model/MES/wm/DTO/WmMaterialReceiptDTO.cs new file mode 100644 index 00000000..5c588c17 --- /dev/null +++ b/ZR.Model/MES/wm/DTO/WmMaterialReceiptDTO.cs @@ -0,0 +1,101 @@ +using MiniExcelLibs.Attributes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZR.Model.MES.wm.DTO +{ + public class WmMaterialReceiptDTO + { + /// + /// 主键(雪花生成) + /// + public string Id { get; set; } + + /// + /// 工单号(外键) + /// + public string FkWorkorderId { get; set; } + + /// + /// 工单号排序 + /// + public int Sort { get; set; } + + /// + /// 毛坯号 + /// + public string BlankNumber { get; set; } + + /// + /// 上件数 + /// + public int PreviousNumber { get; set; } + + /// + /// 实收 + /// + public int? ActualNumber { get; set; } + + /// + /// 抽检数 + /// + public int? SampleNumber { get; set; } + + /// + /// 合格数 + /// + public int? QualifiedNumber { get; set; } + + /// + /// 合格率 + /// + public decimal PassRate { get; set; } + + /// + /// 仓库号 + /// + public string WarehouseNumber { get; set; } + /// + /// 货架号 + /// + public string ShelfNumber { get; set; } + /// + /// 层号 + /// + public string LayerNumber { get; set; } + /// + /// 库位号 + /// + public string LocationNumber { get; set; } + + /// + /// 状态(0-初态 1-合格 2-不合格) + /// + public int? Status { get; set; } = 0; + + /// + /// 年 + /// + public int? Year { get; set; } + + /// + /// 周 + /// + public int? Week { get; set; } + + /// + /// 星期几 + /// + public int? Day { get; set; } + + /// + /// 操作人 + /// + public string Operator { get; set; } + + + } +} diff --git a/ZR.Model/MES/wm/WmMaterialReceipt.cs b/ZR.Model/MES/wm/WmMaterialReceipt.cs new file mode 100644 index 00000000..604a5ed7 --- /dev/null +++ b/ZR.Model/MES/wm/WmMaterialReceipt.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SqlSugar; + +namespace ZR.Model.MES.wm +{ + /// + /// 原材料入库(毛坯入库表) + /// + [SugarTable("wm_material_receipt", TableDescription = "原材料入库(毛坯入库表)")] + public class WmMaterialReceipt + { + /// + /// 主键(雪花生成) + /// + [SugarColumn(ColumnName = "id", IsIdentity = false, IsPrimaryKey = true)] + public string Id { get; set; } + + /// + /// 工单号(外键) + /// + + [SugarColumn(ColumnName = "fk_workorder2_id")] + public string FkWorkorder2Id { get; set; } + + /// + /// 实收 + /// + [SugarColumn(ColumnName = "actual_number")] + public int? ActualNumber { get; set; } + + /// + /// 抽检数 + /// + /// + [SugarColumn(ColumnName = "sample_number")] + public int? SampleNumber { get; set; } + + /// + /// 合格数 + /// + /// + [SugarColumn(ColumnName = "qualified_number")] + public int? QualifiedNumber { get; set; } + + /// + /// 合格率 + /// + /// + [SugarColumn(ColumnName = "pass_rate")] + public decimal PassRate { get; set; } + + /// + /// 库位号 + /// + /// + [SugarColumn(ColumnName = "fk_warehouse_id")] + public string FkWarehouseId { get; set; } + + /// + /// 状态(0-初态 1-合格 2-不合格) + /// + /// + [SugarColumn(ColumnName = "status")] + public int? Status { get; set; } + + /// + /// 创建人 + /// + [SugarColumn(ColumnName = "CREATED_BY")] + public string CreatedBy { get; set; } + /// + /// 创建时间 + /// + [SugarColumn(ColumnName = "CREATED_TIME")] + public DateTime? CreatedTime { get; set; } + /// + /// 更新人 + /// + [SugarColumn(ColumnName = "UPDATED_BY")] + public string UpdatedBy { get; set; } + /// + /// 更新时间 + /// + [SugarColumn(ColumnName = "UPDATED_TIME")] + public DateTime? UpdatedTime { get; set; } + } +} diff --git a/ZR.Service/ZR.Service.csproj b/ZR.Service/ZR.Service.csproj index fc2336e0..fa263b74 100644 --- a/ZR.Service/ZR.Service.csproj +++ b/ZR.Service/ZR.Service.csproj @@ -4,6 +4,11 @@ net7.0 + + + + + diff --git a/ZR.Service/mes/qc/FirstFQCService.cs b/ZR.Service/mes/qc/FirstFQCService.cs index 8373564c..417b16f4 100644 --- a/ZR.Service/mes/qc/FirstFQCService.cs +++ b/ZR.Service/mes/qc/FirstFQCService.cs @@ -1582,3 +1582,4 @@ namespace ZR.Service.mes.qc } } } +#endregion \ No newline at end of file diff --git a/ZR.Service/mes/wm/IService/IMaterialReceiptService.cs b/ZR.Service/mes/wm/IService/IMaterialReceiptService.cs new file mode 100644 index 00000000..c22a1448 --- /dev/null +++ b/ZR.Service/mes/wm/IService/IMaterialReceiptService.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZR.Model.MES.wm; +using ZR.Model.MES.wm.DTO; + +namespace ZR.Service.mes.wm.IService +{ + public interface IMaterialReceiptService + { + public (List, int) GetWmMaterialReceiptList(int pageNum, int pageSize, int year, int week, int day); + + public int SaveOneMaterialReceipt(WmMaterialReceiptDTO wmMaterialReceiptDTO); + + public string SavePageMaterialReceipts(List list); + + } +} diff --git a/ZR.Service/mes/wm/IService/IMdMaterialReceiptService.cs b/ZR.Service/mes/wm/IService/IMdMaterialReceiptService.cs new file mode 100644 index 00000000..ca0d98fb --- /dev/null +++ b/ZR.Service/mes/wm/IService/IMdMaterialReceiptService.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZR.Service.mes.md.IService +{ + internal interface IMdMaterialReceiptService + { + } +} diff --git a/ZR.Service/mes/wm/MaterialReceiptService.cs b/ZR.Service/mes/wm/MaterialReceiptService.cs new file mode 100644 index 00000000..d4d81980 --- /dev/null +++ b/ZR.Service/mes/wm/MaterialReceiptService.cs @@ -0,0 +1,144 @@ +using Infrastructure.Attribute; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZR.Model.MES.pro; +using ZR.Model.MES.wm; +using ZR.Model.MES.wm.DTO; +using ZR.Service.mes.wm.IService; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace ZR.Service.mes.wm +{ + [AppService(ServiceType = typeof(IMaterialReceiptService), ServiceLifetime = LifeTime.Transient)] + public class MaterialReceiptService : BaseService, IMaterialReceiptService + { + /// + /// 生成并查询原材料入库单 + /// 根据生产工单进行生成,以生产工单为主 + /// + public (List, int) GetWmMaterialReceiptList(int pageNum, int pageSize, int year, int week, int date) + { + var predicate = Expressionable.Create() + .AndIF(year > 0, pw2 => pw2.Year == year) + .AndIF(week > 0, pw2 => pw2.Week == week) + .AndIF(date > 0, pw2 => pw2.Date == date) + .ToExpression(); + + int totalCount = 0; + List list = Context.Queryable((pw2, wmr) => new object[] + { + JoinType.Left, + pw2.Id == wmr.FkWorkorder2Id + }) + .Where(predicate) + .Select((pw2,wmr) => new WmMaterialReceiptDTO + { + FkWorkorderId = pw2.Id, + BlankNumber = pw2.BlankNumber, + PreviousNumber = pw2.PreviousNumber, + Sort = pw2.Sort, + Id = wmr.Id, + ActualNumber = wmr.ActualNumber, + SampleNumber = wmr.SampleNumber, + QualifiedNumber = wmr.QualifiedNumber, + PassRate = wmr.PassRate, + Status=wmr.Status + }) + .OrderBy(pw2 => pw2.Sort) + .ToPageList(pageNum, pageSize, ref totalCount); + return (list, totalCount); + } + + /// + /// 保存一条原材料入库单数据 + /// 如果传来的id为空则新增 + /// 否则就修改 + /// 0 =数据库操作异常 + /// -1=传入参数异常 + /// + + public int SaveOneMaterialReceipt(WmMaterialReceiptDTO wmMaterialReceiptDTO) + { + if(wmMaterialReceiptDTO == null) + { + return -1; + } + if(wmMaterialReceiptDTO.FkWorkorderId == null) + { + return -1; + } + WmMaterialReceipt wmMaterialReceipt = new WmMaterialReceipt(); + wmMaterialReceipt.FkWorkorder2Id = wmMaterialReceiptDTO.FkWorkorderId; + wmMaterialReceipt.ActualNumber = wmMaterialReceiptDTO.ActualNumber; + wmMaterialReceipt.SampleNumber = wmMaterialReceiptDTO.SampleNumber; + wmMaterialReceipt.QualifiedNumber = wmMaterialReceiptDTO.QualifiedNumber; + wmMaterialReceipt.FkWarehouseId = wmMaterialReceiptDTO.FkWorkorderId; + wmMaterialReceipt.Status = wmMaterialReceiptDTO.Status; + + if (IsIdNull(wmMaterialReceiptDTO)) + { + // XXX 雪花算法WorkId需要不同,可能会出现未知异常; + // SnowFlakeSingle.WorkId = 22; + wmMaterialReceipt.Id = SnowFlakeSingle.Instance.NextId().ToString(); + wmMaterialReceipt.CreatedBy = wmMaterialReceiptDTO.Operator; + wmMaterialReceipt.UpdatedBy = wmMaterialReceiptDTO.Operator; + // XXX 时间为粗略时间 + wmMaterialReceipt.CreatedTime = DateTime.Now; + wmMaterialReceipt.UpdatedTime = DateTime.Now; + int effectId = Context.Insertable(wmMaterialReceipt).ExecuteCommand(); + return effectId; + } + else + { + wmMaterialReceipt.Id = wmMaterialReceiptDTO.Id; + wmMaterialReceipt.UpdatedBy = wmMaterialReceiptDTO.Operator; + wmMaterialReceipt.UpdatedTime = DateTime.Now; + int effectId = Context.Updateable(wmMaterialReceipt).ExecuteCommand(); + return effectId; + } + } + /// + /// 保存前端一整页(多条)原材料入库单数据 + /// + public string SavePageMaterialReceipts(List list) + { + int successCount = 0; + int totalCount = list.Count; + if(list == null || list.Count == 0) + { + return $"保存成功:无数据变动!"; + } + for(int index = 1; index <= list.Count; index++) + { + int effectId = SaveOneMaterialReceipt(list[index]); + if (effectId < 1) + { + return $"保存异常:总共{totalCount}条数据已成功保存{successCount}条数据,异常行数{index}"; + } + } + return $"保存成功:成功保存{totalCount}条数据"; + + } + + /// + /// 判断id是否为空 + /// + /// + public bool IsIdNull(WmMaterialReceiptDTO wmMaterialReceiptDTO) + { + if (wmMaterialReceiptDTO.Id is null) + { + return true; + } + if ("".Equals(wmMaterialReceiptDTO.Id)) + { + return true; + } + return false; + } + } +}