using Admin.NET.Core.Service; using Admin.NET.Application.Entity; using Microsoft.AspNetCore.Http; using System.Data; using System.Web; using System.Text; using DocumentFormat.OpenXml.Office.CustomUI; namespace Admin.NET.Application; /// /// 跟踪码打印记录服务 /// [ApiDescriptionSettings(ApplicationConst.PrintCenterGroupName, Order = 100)] public class WmsRecordSncodePrintService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _rep; private readonly SqlSugarRepository _WmsOrderAsnDetailsRep; private readonly SqlSugarRepository _wmsMaterialRep; public WmsRecordSncodePrintService( SqlSugarRepository wmsMaterialRep, SqlSugarRepository rep, SqlSugarRepository wmsOrderAsnDetailsRep) { _wmsMaterialRep = wmsMaterialRep; _rep = rep; _WmsOrderAsnDetailsRep = wmsOrderAsnDetailsRep; } /// /// 分页查询跟踪码打印记录 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Page")] [Description("WmsRecordSncodePrint/Page")] public async Task> Page(WmsRecordSncodePrintInput input) { var query = CommonPageFilter(input); return await query.OrderBuilder(input, "", "Id").ToPagedListAsync(input.Page, input.PageSize); } /// /// 不分页查询跟踪码打印记录 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "List")] [Description("WmsRecordSncodePrint/List")] public async Task> List([FromQuery] WmsRecordSncodePrintInput input) { var query = CommonPageFilter(input); return await query.OrderBuilder(input, "", "Id").Select().ToListAsync(); } /// /// 增加跟踪码打印记录 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Add")] [Description("WmsRecordSncodePrint/Add")] public async Task Add(List input) { //------------ly asn单打印 查找关联单号 关联行号----------- List handleListAsn = new List(); List queryCodeListForAsn = input.Select(v => v.SNCode).Distinct().ToList(); //ly 特殊情况: 跟踪码是拆分物料 HB_ 开头 if (queryCodeListForAsn.Count > 0) { handleListAsn = await _WmsOrderAsnDetailsRep.GetListAsync(u => queryCodeListForAsn.Contains(u.SN_1d) || queryCodeListForAsn.Contains(u.SN_2d)); } //--------------ly asn单打印 查找关联单号 关联行号---------- WmsOrderAsnDetails itemForWlcf = new WmsOrderAsnDetails(); //物料拆分 存值用 WmsOrderAsnDetails itemForWlhb = new WmsOrderAsnDetails();//物料合并 存值用 //---------------物料拆分 物料合并 能从asn单中查到的值 foreach (var w in input) { //物料拆分 关联单号 关联行号赋值相同的值 if (w.TypeForPda == 1) { w.PrintSource = PrintSourceEnum.物料拆分打印; if (handleListAsn.Count == 1) { itemForWlcf = handleListAsn.FirstOrDefault(); } } //物料合并 if (w.TypeForPda == 2) { w.PrintSource = PrintSourceEnum.物料合并打印; } } //---------------物料拆分 物料合并 var warehousOrderDetails1 = input.Adapt>(); foreach (var w in warehousOrderDetails1) { if (w.PrintSheetNum == 0) { w.PrintSheetNum = 1; } if (w.PrintSource == PrintSourceEnum.ASN单跟踪码打印) { var items = handleListAsn.FirstOrDefault(x => x.SN_1d == w.SNCode || x.SN_2d == w.SNCode); if (items != null) { w.OrderNo = items.AsnNo; w.RelationNo = items.PoNo; w.RelationNoLineNumber = items.PoLineNumber; w.OrderNoLineNumber = items.AsnLineNumber; } } else { if (w.PrintType == PrintTypeEnum.物料跟踪码) { if (itemForWlcf != null) { w.OrderNo = itemForWlcf.AsnNo; w.RelationNo = itemForWlcf.PoNo; w.RelationNoLineNumber = itemForWlcf.PoLineNumber; w.OrderNoLineNumber = itemForWlcf.AsnLineNumber; } else { //物料合并 无单号行号 w.OrderNo = ""; w.RelationNo = ""; w.RelationNoLineNumber = ""; w.OrderNoLineNumber = ""; } } if (w.MaterialCode == null) { throw Oops.Oh("创建失败:物料不能为空"); } if (w.Quantity == 0) { throw Oops.Oh("创建失败:数量需要大于0"); } w.PrintStatus = PrintStatuEnum.未打印; //验证 if (w.PrintType == PrintTypeEnum.看板卡) { if (w.Quantity == 0) { throw Oops.Oh("创建失败:数量需要大于0"); } if (w.KanBanCardNo == null) { throw Oops.Oh("创建失败:看板卡号不能为空"); } //查询单位 var material = await _wmsMaterialRep.GetFirstAsync(x => x.MaterialCode == w.MaterialCode); if (material == null) { throw Oops.Oh($"创建失败:物料{w.MaterialCode}信息不存在"); } w.MaterialUnit = material.MaterialUnit; w.POUnit = material.POUnit; w.SNCode = " "; } else if (w.PrintType == PrintTypeEnum.物料跟踪码) { if (w.MaterialUnit == null) { throw Oops.Oh("创建失败:单位不能为空"); } if (w.SNCode == null) { throw Oops.Oh("创建失败:跟踪码不能为空"); } } } } try { await _rep.AsTenant().BeginTranAsync(); await _rep.InsertRangeAsync(warehousOrderDetails1); //插入 await _rep.AsTenant().CommitTranAsync(); } catch { await _rep.AsTenant().RollbackTranAsync(); throw; } return 200; } /// /// 删除跟踪码打印记录 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Delete")] [Description("WmsRecordSncodePrint/Delete")] public async Task Delete(DeleteWmsRecordSncodePrintInput input) { var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002); //await _rep.FakeDeleteAsync(entity); //假删除 await _rep.DeleteAsync(entity); //真删除 } /// /// 更新跟踪码打印记录 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Update")] [Description("WmsRecordSncodePrint/Update")] public async Task Update(UpdateWmsRecordSncodePrintInput input) { throw Oops.Oh($"该方法不支持"); var entity = input.Adapt(); //重复性验证 await CheckExist(entity, true); await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); } /// /// 获取跟踪码打印记录 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "Detail")] [Description("WmsRecordSncodePrint/Detail")] public async Task Detail([FromQuery] QueryByIdWmsRecordSncodePrintInput input) { return await _rep.GetFirstAsync(u => u.Id == input.Id); } #region 私有方法 /// /// 公共查询跟踪码打印记录条件 /// /// /// private ISugarQueryable CommonPageFilter(WmsRecordSncodePrintInput input) { var query = _rep.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u => u.MaterialCode.Contains(input.SearchKey.Trim()) || u.MaterialName.Contains(input.SearchKey.Trim()) || u.PlaceCode.Contains(input.SearchKey.Trim()) || u.PlaceName.Contains(input.SearchKey.Trim()) || u.SNCode.Contains(input.SearchKey.Trim()) || u.MaterialUnit.Contains(input.SearchKey.Trim()) || u.OrderNo.Contains(input.SearchKey.Trim()) || u.RelationNo.Contains(input.SearchKey.Trim()) || u.OrderNoLineNumber.Contains(input.SearchKey.Trim()) || u.RelationNoLineNumber.Contains(input.SearchKey.Trim()) || u.Remarks.Contains(input.SearchKey.Trim()) || u.CreateUserName.Contains(input.SearchKey.Trim()) || u.UpdateUserName.Contains(input.SearchKey.Trim()) ) .WhereIF(input.PrintType.HasValue, u => u.PrintType == input.PrintType) .WhereIF(!string.IsNullOrWhiteSpace(input.MaterialCode), u => u.MaterialCode.Contains(input.MaterialCode.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.MaterialName), u => u.MaterialName.Contains(input.MaterialName.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.PlaceCode), u => u.PlaceCode.Contains(input.PlaceCode.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.PlaceName), u => u.PlaceName.Contains(input.PlaceName.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.SNCode), u => u.SNCode.Contains(input.SNCode.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.MaterialUnit), u => u.MaterialUnit.Contains(input.MaterialUnit.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.OrderNo), u => u.OrderNo.Contains(input.OrderNo.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.RelationNo), u => u.RelationNo.Contains(input.RelationNo.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.OrderNoLineNumber), u => u.OrderNoLineNumber.Contains(input.OrderNoLineNumber.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.RelationNoLineNumber), u => u.RelationNoLineNumber.Contains(input.RelationNoLineNumber.Trim())) .WhereIF(input.PrintSheetNum > 0, u => u.PrintSheetNum == input.PrintSheetNum) .WhereIF(input.PrintNum > 0, u => u.PrintNum == input.PrintNum) .WhereIF(input.PrintStatus.HasValue, u => u.PrintStatus == input.PrintStatus) .WhereIF(input.IsAllowPrint.HasValue, u => u.IsAllowPrint == input.IsAllowPrint) .WhereIF(!string.IsNullOrWhiteSpace(input.Remarks), u => u.Remarks.Contains(input.Remarks.Trim())) .Select(); return query; } /// /// 重复性验证 /// /// 验证对象 /// 是否是编辑 /// private async Task CheckExist(WmsRecordSncodePrint input, bool isEdit = false) { //没有配置组合校验,不需要验重 //没有配置单独校验,不需要验重 } /// /// 根据组合校验和单独校验验证数据是否已存在-导入时验证 /// /// /// private async Task CheckExisitForImport(List inputs) { if (inputs?.Count <= 0) { throw Oops.Oh($"导入数据不能为空"); } //根据组合校验验证表格中中是否已存在相同数据 //根据单独校验验证表格中中是否已存在相同数据 } #endregion }