using Admin.NET.Core.Service; using Admin.NET.Application.Entity; using Microsoft.AspNetCore.Http; using System.Data; using System.Web; using System.Text; using System.Linq.Dynamic.Core; using System.Linq; using Admin.NET.Application.CommonHelper; using Admin.NET.Application.Service.WmsBase.WmsBatchRuleDetail.Dto; namespace Admin.NET.Application; /// /// 批次属性规则明细服务 /// [ApiDescriptionSettings(ApplicationConst.WmsBaseGroupName, Order = 100)] public class WmsBatchRuleDetailService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _rep; private readonly SqlSugarRepository _wmsMaterialRep; public WmsBatchRuleDetailService(SqlSugarRepository rep, SqlSugarRepository wmsMaterialRep) { _rep = rep; _wmsMaterialRep = wmsMaterialRep; } /// /// 分页查询批次属性规则明细 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Page")] [Description("WmsBatchRuleDetail/Page")] public async Task> Page(WmsBatchRuleDetailInput input) { var query = CommonPageFilter(input); return await query.OrderBuilder(input, "", "Id").ToPagedListAsync(input.Page, input.PageSize); } /// /// 分页查询批次属性规则明细 - ly 分组 父子集合 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "PageGroup")] [Description("WmsBatchRuleDetail/PageGroup")] public async Task> PageGroup(WmsBatchRuleDetailInput input) { var BatchList = new SqlSugarPagedList(); var items = new List(); var batchModel = new WmsBatchRuleDetailOutputGroup(); var WmsBatchRuleModel = await _rep.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u => u.RuleCode.Contains(input.SearchKey.Trim()) || u.RuleName.Contains(input.SearchKey.Trim()) ) .WhereIF(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled) .WhereIF(!string.IsNullOrWhiteSpace(input.RuleCode), p => p.RuleCode == input.RuleCode) .WhereIF(!string.IsNullOrWhiteSpace(input.RuleName), p => p.RuleName == input.RuleName) .Select().ToListAsync(); var newList = WmsBatchRuleModel.GroupBy(it => new { it.RuleCode, it.RuleName }).Select(s => new { s.Key.RuleCode , s.Key.RuleName }).ToList(); List resultList = newList.Adapt>(); var groupList = resultList.OrderBy(o=>o.RuleCode).ToPagedList(input.Page, input.PageSize); foreach (var item in groupList.Items) { var detailsList = _rep.AsQueryable().Where(p => p.RuleCode == item.RuleCode).OrderBy(o=>o.Priority).Select().ToList(); ////batchModel.RuleCode = item.RuleCode; ////batchModel.RuleName = item.RuleName; ////batchModel.WmsBatchRuleDetailOutputsList = detailsList; //if (detailsList.Count() > 1) //{ // item.WmsBatchRuleDetailOutputsList = new List() // { // detailsList[0] // }; //} //else //{ // item.WmsBatchRuleDetailOutputsList = detailsList; //} ////items.Add(batchModel); /// //update by liuwq 20240718 item.WmsBatchRuleDetailOutputsList = detailsList; } BatchList.Items = items; return groupList; } /// /// 不分页查询批次属性规则明细 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "List")] [Description("WmsBatchRuleDetail/List")] public async Task> List([FromQuery] WmsBatchRuleDetailInput input) { var query = CommonPageFilter(input); return await query.OrderBuilder(input, "", "Id").Select().ToListAsync(); } /// /// 根据批次规则获取批次规则属性格式 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "GetAttrForamtEnumList")] [Description("WmsBatchRuleDetail/GetAttrForamtEnumList")] public List GetAttrForamtEnumList([FromQuery] BatchRuleEnum batchRule) { return BatchRuleHelper.GetAttrForamtEnumList(batchRule); } /// /// 不分页分组查询批次属性规则明细 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "GroupList")] [Description("WmsBatchRuleDetail/GroupList")] public async Task> GroupList([FromQuery] WmsBatchRuleDetailInput input) { var query = CommonPageFilter(input); return await query.OrderBuilder(input, "", "Id").Select().ToListAsync(); } /// /// 增加批次属性规则明细 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Add")] [Description("WmsBatchRuleDetail/Add")] public async Task Add(List input) { if (input is null || input.Count == 0) { throw Oops.Oh("输入参不能为空"); } var dbOrder = await _rep.GetFirstAsync(w => w.RuleCode == input[0].RuleCode); if (dbOrder != null) { throw Oops.Oh($"规则编号{dbOrder.RuleCode}已存在"); } dbOrder = await _rep.GetFirstAsync(w => w.RuleName == input[0].RuleName); if (dbOrder != null) { throw Oops.Oh($"规则名称{dbOrder.RuleName}已存在"); } var warehousDetails = input.Adapt>(); CheckDetails(warehousDetails); foreach (var w in warehousDetails) { w.IsDisabled = false; w.IsDelete = false; } try { await _rep.AsTenant().BeginTranAsync(); await _rep.InsertRangeAsync(warehousDetails);//插入 await _rep.AsTenant().CommitTranAsync(); } catch { await _rep.AsTenant().RollbackTranAsync(); throw; } return 200; //var entity = input.Adapt(); ////重复性验证 //await CheckExist(entity); //await _rep.InsertAsync(entity); //return entity.Id; } private static void CheckDetails(List warehousDetails) { var index = 0; foreach (var w in warehousDetails) { index++; string indexString = $"第{index}行"; if (w.RuleName == null) { throw Oops.Oh($"{indexString}规则名称不能为空"); } if (w.BatchRuleType == 0) { throw Oops.Oh($"{indexString}批次规则不能为空"); } if (w.AttrForamt == 0) { throw Oops.Oh($"{indexString}属性格式不能为空"); } if (w.InputControl == 0) { throw Oops.Oh($"{indexString}输入控制不能为空"); } if (!w.Priority.HasValue) { throw Oops.Oh($"{indexString}优先级不能为空"); } if (w.BatchRuleType == BatchRuleEnum.收货日期 && w.AttrForamt == AttrForamtEnum.字符) { throw Oops.Oh($"{indexString}批次规则是{BatchRuleEnum.收货日期.GetDescription()},批次规则属性格式不能是{AttrForamtEnum.字符.GetDescription()}"); } else if (w.BatchRuleType == BatchRuleEnum.物料颜色 && w.AttrForamt != AttrForamtEnum.字符) { throw Oops.Oh($"{indexString}批次规则是{BatchRuleEnum.物料颜色.GetDescription()},批次规则属性格式只能是{AttrForamtEnum.字符.GetDescription()}"); } } } /// /// 删除批次属性规则明细 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Delete")] [Description("WmsBatchRuleDetail/Delete")] public async Task Delete(DeleteWmsBatchRuleDetailInput input) { var entity = await _rep.GetFirstAsync(u => u.RuleCode == input.ruleCode) ?? throw Oops.Oh(ErrorCodeEnum.D1002); var wmsMaterialentity = await _wmsMaterialRep.GetFirstAsync(u => u.BatchRuleCode == entity.RuleCode && u.IsDelete == false); if (wmsMaterialentity != null) { throw Oops.Oh($"存在绑定关系,不可删除"); } //await _rep.FakeDeleteAsync(entity); //假删除 await _rep.DeleteAsync(entity); //真删除 } /// /// 更新批次属性规则明细 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Update")] [Description("WmsBatchRuleDetail/Update")] public async Task Update(List input) { if (input is null || input.Count == 0) { throw Oops.Oh("输入参不能为空"); } var dbOrder = await _rep.GetFirstAsync(w => w.RuleCode == input[0].RuleCode); if (dbOrder == null) { throw Oops.Oh($"规则编号{dbOrder.RuleCode}不存在"); } //直接新增 var warehousDetails = input.Adapt>(); //删除旧的数据 var dbOrderDetails = await _rep.GetListAsync(w => w.RuleCode == input[0].RuleCode); CheckDetails(warehousDetails); foreach (var w in warehousDetails) { w.Id = 0; w.IsDisabled = false; w.IsDelete = false; } try { await _rep.AsTenant().BeginTranAsync(); await _rep.InsertRangeAsync(warehousDetails); await _rep.DeleteAsync(dbOrderDetails); await _rep.AsTenant().CommitTranAsync(); } catch { await _rep.AsTenant().RollbackTranAsync(); throw; } //var entity = input.Adapt(); ////重复性验证 //await CheckExist(entity,true); //await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); } /// /// 获取批次属性规则明细 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "Detail")] [Description("WmsBatchRuleDetail/Detail")] public async Task Detail([FromQuery] QueryByIdWmsBatchRuleDetailInput input) { return await _rep.GetFirstAsync(u => u.Id == input.Id); } #region 私有方法 /// /// 公共查询批次属性规则明细条件 /// /// /// private ISugarQueryable CommonPageFilter(WmsBatchRuleDetailInput input) { var query = _rep.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u => u.RuleCode.Contains(input.SearchKey.Trim()) || u.RuleName.Contains(input.SearchKey.Trim()) || u.BatchTag.Contains(input.SearchKey.Trim()) || u.RFTag.Contains(input.SearchKey.Trim()) || u.KeyAttr.Contains(input.SearchKey.Trim()) || u.RuleDesc.Contains(input.SearchKey.Trim()) || u.CreateUserName.Contains(input.SearchKey.Trim()) || u.UpdateUserName.Contains(input.SearchKey.Trim()) ) .WhereIF(!string.IsNullOrWhiteSpace(input.RuleCode), u => u.RuleCode.Contains(input.RuleCode.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.RuleCodeAccurate), u => u.RuleCode == input.RuleCodeAccurate) //ly-物料信息页面 精准查询 .WhereIF(!string.IsNullOrWhiteSpace(input.RuleName), u => u.RuleName.Contains(input.RuleName.Trim())) .WhereIF(input.BatchRuleType.HasValue, u => u.BatchRuleType == input.BatchRuleType) .WhereIF(!string.IsNullOrWhiteSpace(input.BatchTag), u => u.BatchTag.Contains(input.BatchTag.Trim())) .WhereIF(input.AttrForamt.HasValue, u => u.AttrForamt == input.AttrForamt) .WhereIF(input.AttrOption.HasValue, u => u.AttrOption == input.AttrOption) .WhereIF(input.InputControl.HasValue, u => u.InputControl == input.InputControl) .WhereIF(input.Priority.HasValue, u => u.Priority == input.Priority) .WhereIF(!string.IsNullOrWhiteSpace(input.RFTag), u => u.RFTag.Contains(input.RFTag.Trim())) .WhereIF(input.RFShow.HasValue, u => u.RFShow == input.RFShow) .WhereIF(!string.IsNullOrWhiteSpace(input.KeyAttr), u => u.KeyAttr.Contains(input.KeyAttr.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.RuleDesc), u => u.RuleDesc.Contains(input.RuleDesc.Trim())) .WhereIF(input.IsDisabled.HasValue, u => u.IsDisabled == input.IsDisabled) .Select(); return query; } /// /// 重复性验证 /// /// 验证对象 /// 是否是编辑 /// private async Task CheckExist(WmsBaseBatchRule input, bool isEdit = false) { //没有配置组合校验,不需要验重 //没有配置单独校验,不需要验重 } /// /// 根据组合校验和单独校验验证数据是否已存在-导入时验证 /// /// /// private async Task CheckExisitForImport(List inputs) { if (inputs?.Count <= 0) { throw Oops.Oh($"导入数据不能为空"); } //根据组合校验验证表格中中是否已存在相同数据 //根据单独校验验证表格中中是否已存在相同数据 } #endregion }