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