using Admin.NET.Plugin.AiDOP.Dto.S0.Warehouse; using Admin.NET.Plugin.AiDOP.Entity.S0.Supply; using Admin.NET.Plugin.AiDOP.Entity.S0.Warehouse; using Admin.NET.Plugin.AiDOP.Infrastructure; namespace Admin.NET.Plugin.AiDOP.Controllers.S0.Warehouse; /// /// S0 条码规则主数据(BarCodeNbr 语义) /// [ApiController] [Route("api/s0/warehouse/barcode-rules")] [AllowAnonymous] [NonUnify] public class AdoS0BarcodeRulesController : ControllerBase { private readonly SqlSugarRepository _rep; private readonly SqlSugarRepository _suppRep; public AdoS0BarcodeRulesController( SqlSugarRepository rep, SqlSugarRepository suppRep) { _rep = rep; _suppRep = suppRep; } [HttpGet] public async Task GetPagedAsync([FromQuery] AdoS0BarcodeRuleQueryDto q) { (q.Page, q.PageSize) = PagingGuard.Normalize(q.Page, q.PageSize); var query = _rep.AsQueryable() .WhereIF(q.CompanyRefId.HasValue, x => x.CompanyRefId == q.CompanyRefId!.Value) .WhereIF(q.FactoryRefId.HasValue, x => x.FactoryRefId == q.FactoryRefId!.Value) .WhereIF(!string.IsNullOrWhiteSpace(q.DomainCode), x => x.DomainCode == q.DomainCode) .WhereIF(!string.IsNullOrWhiteSpace(q.Customer), x => x.Customer != null && x.Customer.Contains(q.Customer!)) .WhereIF(!string.IsNullOrWhiteSpace(q.Type), x => x.Type != null && x.Type.Contains(q.Type!)) .WhereIF(!string.IsNullOrWhiteSpace(q.Keyword), x => (x.Customer != null && x.Customer.Contains(q.Keyword!)) || (x.Type != null && x.Type.Contains(q.Keyword!))); var total = await query.CountAsync(); var list = await query .OrderByDescending(x => x.CreateTime) .Skip((q.Page - 1) * q.PageSize) .Take(q.PageSize) .ToListAsync(); await ApplySuppNameAsync(list); return Ok(new { total, page = q.Page, pageSize = q.PageSize, list }); } [HttpGet("{id:long}")] public async Task GetAsync(long id) { var item = await _rep.GetByIdAsync(id); if (item == null) return NotFound(); await ApplySuppNameAsync(new List { item }); return Ok(item); } [HttpPost] public async Task CreateAsync([FromBody] AdoS0BarcodeRuleUpsertDto dto) { var entity = MapToEntity(dto); entity.CreateTime = DateTime.Now; await _rep.AsInsertable(entity).ExecuteReturnEntityAsync(); return Ok(entity); } [HttpPut("{id:long}")] public async Task UpdateAsync(long id, [FromBody] AdoS0BarcodeRuleUpsertDto dto) { var entity = await _rep.GetByIdAsync(id); if (entity == null) return NotFound(); entity.CompanyRefId = dto.CompanyRefId; entity.FactoryRefId = dto.FactoryRefId; entity.DomainCode = dto.DomainCode ?? string.Empty; entity.Customer = dto.Customer; entity.Type = dto.Type; entity.WaterRules = dto.WaterRules; entity.WaterLen = dto.WaterLen; entity.Separator = dto.Separator; entity.FirmLength = dto.FirmLength; CopyFirmStrings(dto, entity); entity.UpdateUser = dto.UpdateUser; entity.UpdateTime = DateTime.Now; await _rep.AsUpdateable(entity).ExecuteCommandAsync(); return Ok(entity); } [HttpDelete("{id:long}")] public async Task DeleteAsync(long id) { var item = await _rep.GetByIdAsync(id); if (item == null) return NotFound(); await _rep.DeleteAsync(item); return Ok(new { message = "删除成功" }); } private static AdoS0BarCodeNbr MapToEntity(AdoS0BarcodeRuleUpsertDto dto) { var e = new AdoS0BarCodeNbr { CompanyRefId = dto.CompanyRefId, FactoryRefId = dto.FactoryRefId, DomainCode = dto.DomainCode ?? string.Empty, Customer = dto.Customer, Type = dto.Type, WaterRules = dto.WaterRules, WaterLen = dto.WaterLen, Separator = dto.Separator, FirmLength = dto.FirmLength, CreateUser = dto.CreateUser }; CopyFirmStrings(dto, e); return e; } private static void CopyFirmStrings(AdoS0BarcodeRuleUpsertDto dto, AdoS0BarCodeNbr e) { e.FirmString1 = dto.FirmString1; e.FirmStringLen1 = dto.FirmStringLen1; e.FirmString1Note = dto.FirmString1Note; e.FirmString2 = dto.FirmString2; e.FirmStringLen2 = dto.FirmStringLen2; e.FirmString2Note = dto.FirmString2Note; e.FirmString3 = dto.FirmString3; e.FirmStringLen3 = dto.FirmStringLen3; e.FirmString3Note = dto.FirmString3Note; e.FirmString4 = dto.FirmString4; e.FirmStringLen4 = dto.FirmStringLen4; e.FirmString4Note = dto.FirmString4Note; e.FirmString5 = dto.FirmString5; e.FirmStringLen5 = dto.FirmStringLen5; e.FirmString5Note = dto.FirmString5Note; e.FirmString6 = dto.FirmString6; e.FirmStringLen6 = dto.FirmStringLen6; e.FirmString6Note = dto.FirmString6Note; e.FirmString7 = dto.FirmString7; e.FirmStringLen7 = dto.FirmStringLen7; e.FirmString7Note = dto.FirmString7Note; e.FirmString8 = dto.FirmString8; e.FirmStringLen8 = dto.FirmStringLen8; e.FirmString8Note = dto.FirmString8Note; e.FirmString9 = dto.FirmString9; e.FirmStringLen9 = dto.FirmStringLen9; e.FirmString9Note = dto.FirmString9Note; e.FirmString10 = dto.FirmString10; e.FirmStringLen10 = dto.FirmStringLen10; e.FirmString10Note = dto.FirmString10Note; e.FirmString11 = dto.FirmString11; e.FirmStringLen11 = dto.FirmStringLen11; e.FirmString11Note = dto.FirmString11Note; e.FirmString12 = dto.FirmString12; e.FirmStringLen12 = dto.FirmStringLen12; e.FirmString12Note = dto.FirmString12Note; } private async Task ApplySuppNameAsync(List rules) { if (rules.Count == 0) return; var customerCodes = rules .Select(r => r.Customer) .Where(c => !string.IsNullOrWhiteSpace(c)) .Distinct() .ToList(); if (customerCodes.Count == 0) return; var supps = await _suppRep.AsQueryable() .Where(s => customerCodes.Contains(s.Supp)) .ToListAsync(); foreach (var rule in rules) { if (string.IsNullOrWhiteSpace(rule.Customer)) continue; var supp = supps.Find(s => string.Equals(s.Supp, rule.Customer, StringComparison.OrdinalIgnoreCase)); rule.SuppName = supp?.SortName; } } }