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;
+ }
+ }
+}