using System; using SqlSugar; using Infrastructure.Attribute; using Infrastructure.Extensions; using ZR.Model; using ZR.Model.Dto; using ZR.Model.MES.wms; using ZR.Repository; using ZR.Service.Business.IBusinessService; using System.Linq; using ZR.Service.mes.wms.IService; using ZR.Model.MES.wms.Dto; using System.Text.Json; using MimeKit.Utils; using System.Collections.Generic; using Org.BouncyCastle.Crypto; namespace ZR.Service.Business { /// /// 仓库操作日志Service业务层处理 /// [AppService(ServiceType = typeof(IWmGoodsActionService), ServiceLifetime = LifeTime.Transient)] public class WmGoodsActionService : BaseService, IWmGoodsActionService { public WmGoodsChangeLog doConsolidationGoods(WmGoodsConsolidationDto parm) { List list = parm.PackageList; string description = ""; // 拼箱计数器 int num = 0; int? quantityCount = 0; // 第二箱录入数量(限制只能输入两箱) int secondNum = parm.secondNum; int? secondHas = 0; bool isDelete = false; string secondId = ""; // 箱验证 foreach (ResultionPackageCodeDto package in list) { num++; // 有第二箱录入数量的情况下只能两箱拼 if (num == 3) { return null; } WmGoodsNowProduction check1 = Context.Queryable().Where(it => it.PackageCodeClient == package.PatchCode).First(); if (check1 == null) { return null; } if (num == 1) { description = "\n主箱:" + package.PatchCode + ",\n次箱:"; quantityCount += package.Quantity; continue; } if(num==2) { secondId = check1.Id; description += package.PatchCode + ","; } // 第二箱数量为正数且比箱子总数量小 if (num == 2 && secondNum < package.Quantity && secondNum > 0) { isDelete = false; secondHas = package.Quantity - secondNum; quantityCount += secondNum; } else { isDelete = true; secondHas = 0; quantityCount += package.Quantity; } } ResultionPackageCodeDto mainPackage = list[0]; // 短批次 string shortPatchCode = mainPackage.PatchCode.Split('_')[0]; // 该批次最后一个拼箱记录 WmGoodsNowProduction lastConsolidationPackage = Context.Queryable().Where(it => it.PackageCodeClient.Contains(shortPatchCode + "_4")).OrderBy(it => it.PackageCodeClient, OrderByType.Desc).First(); string newPatchCode = shortPatchCode; int lastCode = 400; if (lastConsolidationPackage == null) { newPatchCode += "_401"; } else { if (int.TryParse(lastConsolidationPackage.PackageCodeClient.Split('_')[1], out lastCode)) { if (lastCode > 400) { newPatchCode += "_" + (lastCode + 1); } else { newPatchCode += "_401"; } } } description += "\n拼箱结果:" + newPatchCode; DateTime nowTime = DateTime.Now.ToLocalTime(); var jsonObject = new { packageList = list, newPatchCode = newPatchCode, newQuantityCount = quantityCount, time = DateUtils.FormatDate(nowTime) }; // 日志记录 WmGoodsChangeLog log = new() { CreatedBy = parm.CreateBy, CreatedTime = nowTime, Description = description, JsonMsg = JsonSerializer.Serialize(jsonObject), Type = 1 }; Context.Insertable(log).ExecuteReturnEntity(); // 执行修改 // 1.主箱查出并修改参数 WmGoodsNowProduction nowProduction = Context.Queryable() .Where(it => it.PackageCodeClient == mainPackage.PatchCode).First(); if (nowProduction == null) { return null; } nowProduction.UpdatedBy = parm.CreateBy; nowProduction.UpdatedTime = nowTime; nowProduction.PackageCodeClient = newPatchCode; nowProduction.PackageCodeOriginal = "Code=" + newPatchCode + "^ItemNumber=" + nowProduction.Partnumber + "^Order=" + newPatchCode.Split('_')[0].Substring(2) + "^Qty=" + quantityCount; nowProduction.GoodsNumLogic = quantityCount; nowProduction.GoodsNumAction = quantityCount; nowProduction.Remark = "拼箱整箱"; // 修改主箱 Context.Updateable(nowProduction).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); // 次箱操作 if (isDelete) { // 删除次箱 Context.Deleteable().Where(it=>it.Id == secondId).ExecuteCommand(); } else { // 修改次箱子 WmGoodsNowProduction nowProduction2 = Context.Queryable() .Where(it => it.Id == secondId).First(); if (nowProduction2 == null) { return null; } nowProduction2.UpdatedBy = parm.CreateBy; nowProduction2.UpdatedTime = nowTime; nowProduction2.PackageCodeOriginal = "Code=" + nowProduction2.PackageCodeClient + "^ItemNumber=" + nowProduction2.Partnumber + "^Order=" + nowProduction2.PackageCodeClient.Split('_')[0].Substring(2) + "^Qty=" + secondHas; nowProduction2.GoodsNumLogic = secondHas; nowProduction2.GoodsNumAction = secondHas; nowProduction2.Remark = "拼箱零头箱"; Context.Updateable(nowProduction2).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); } return log; } public WmGoodsChangeLog doUnpackingGoods(WmGoodsUnpackingDto parm) { string description = ""; // 待拆箱 ResultionPackageCodeDto mainPackage = parm.Package; // 验证 WmGoodsNowProduction mainNowProduction = Context.Queryable().Where(it => it.PackageCodeClient == mainPackage.PatchCode).First(); if (mainNowProduction == null) { return null; } description += "\n由主箱:" + mainPackage.PatchCode + "拆分:"; // 短批次 string shortPatchCode = mainPackage.PatchCode.Split('_')[0]; // 该批次最后一个拼箱记录 WmGoodsNowProduction lastConsolidationPackage = Context.Queryable().Where(it => it.PackageCodeClient.Contains(shortPatchCode + "_4")).OrderBy(it => it.PackageCodeClient, OrderByType.Desc).First(); string newPatchCode1 = shortPatchCode; string newPatchCode2 = shortPatchCode; int lastCode = 400; if (lastConsolidationPackage == null) { newPatchCode1 += "_401"; newPatchCode2 += "_402"; } else { if (int.TryParse(lastConsolidationPackage.PackageCodeClient.Split('_')[1], out lastCode)) { if (lastCode > 400) { newPatchCode1 += "_" + (lastCode + 1); newPatchCode2 += "_" + (lastCode + 2); } else { newPatchCode1 += "_401"; newPatchCode2 += "_402"; } } } int firstNum = parm.firstNum; int? secondNum = mainNowProduction.GoodsNumAction - firstNum; if (secondNum <= 0) { return null; } description += "\n拆箱结果1:" + newPatchCode1 + "数量为" + firstNum + "个"; description += "\n拆箱结果2:" + newPatchCode2 + "数量为" + secondNum + "个"; DateTime nowTime = DateTime.Now.ToLocalTime(); var jsonObject = new { mainPackage = mainPackage, newPatchCode1 = newPatchCode1, newPatchCode2 = newPatchCode2, firstNum = firstNum, secondNum = secondNum, time = DateUtils.FormatDate(nowTime) }; // 日志记录 WmGoodsChangeLog log = new() { CreatedBy = parm.CreateBy, CreatedTime = nowTime, Description = description, JsonMsg = JsonSerializer.Serialize(jsonObject), Type = 2 }; Context.Insertable(log).ExecuteReturnEntity(); // 执行修改 // 1.主箱修改为1号分箱参数 WmGoodsNowProduction newPackage1 = mainNowProduction; newPackage1.UpdatedBy = parm.CreateBy; newPackage1.UpdatedTime = nowTime; newPackage1.PackageCodeClient = newPatchCode1; newPackage1.PackageCodeOriginal = "Code=" + newPatchCode1 + "^ItemNumber=" + newPackage1.Partnumber + "^Order=" + newPatchCode1.Split('_')[0].Substring(2) + "^Qty=" + firstNum; newPackage1.GoodsNumLogic = firstNum; newPackage1.GoodsNumAction = firstNum; newPackage1.Remark = "拆箱"; // 修改主箱 Context.Updateable(newPackage1).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); // 2.添加一个分箱 WmGoodsNowProduction newPackage2 = mainNowProduction; newPackage2.CreatedBy = parm.CreateBy; newPackage2.CreatedTime = nowTime; newPackage2.PackageCodeClient = newPatchCode2; newPackage2.PackageCodeOriginal = "Code=" + newPatchCode2 + "^ItemNumber=" + newPackage2.Partnumber + "^Order=" + newPatchCode2.Split('_')[0].Substring(2) + "^Qty=" + secondNum; newPackage2.GoodsNumLogic = secondNum; newPackage2.GoodsNumAction = secondNum; newPackage2.Remark = "拆箱"; newPackage2.Id = SnowFlakeSingle.Instance.NextId().ToString(); // 修改主箱 Context.Insertable(newPackage1).ExecuteCommand(); // TODO修改打印记录 return log; } } }