| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- using Admin.NET.Plugin.AiDOP.MaterialWarehouse.Dto;
- namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse;
- /// <summary>
- /// S5 暂收在检列表 只读 list 服务。
- ///
- /// 数据源:aidopdev.MissedPrint(Status='I' 暂收待检、Qty>0、Location 空),忠实复刻旧系统存储过程
- /// pr_WMS_GetMissedTempQty:LEFT JOIN qms_qcp_inspecapplyn/qms_qcp_insappnentry 取检验状态,按
- /// Supply/PurOrd/PurLine/ShipperNbr/ItemNum/LotSerial 聚合(MAX Shelf/SUM Qty/MAX CheckNo/MAX FINSPECTSTATUS),
- /// 再 LEFT JOIN ItemMaster(描述/单位)、SuppMaster(简称),clfs='3' 追加“-挑选使用”。
- /// Domain 由 GeneralizedCodeMaster(SystemConfig/CompanyCode) 解析,默认 8010。
- ///
- /// 本服务仅 SELECT:无新增/编辑/删除/库存事务/状态流转;MissedPrint 无 tenant_id,不做租户过滤。
- /// </summary>
- [ApiDescriptionSettings(Order = 301, Description = "暂收在检列表")]
- [Route("api/S5PendingInspection")]
- [AllowAnonymous]
- [NonUnify]
- public class PendingInspectionService : IDynamicApiController, ITransient
- {
- private readonly ISqlSugarClient _db;
- public PendingInspectionService(ISqlSugarClient db)
- {
- _db = db;
- }
- /// <summary>解析公司域(GeneralizedCodeMaster SystemConfig/CompanyCode,默认 8010)。</summary>
- private async Task<string> ResolveDomainAsync()
- {
- var list = await _db.Ado.SqlQueryAsync<string>(
- "SELECT Domain FROM GeneralizedCodeMaster WHERE FldName='SystemConfig' AND Val='CompanyCode' ORDER BY RecID LIMIT 1");
- var domain = list.FirstOrDefault();
- return string.IsNullOrWhiteSpace(domain) ? "8010" : domain;
- }
- /// <summary>
- /// 暂收在检列表(只读分页查询)。
- /// </summary>
- [DisplayName("暂收在检列表")]
- [HttpGet("list")]
- public async Task<object> GetList([FromQuery] PendingInspectionListInput input)
- {
- var page = input.Page <= 0 ? 1 : input.Page;
- var pageSize = input.PageSize <= 0 ? 10 : input.PageSize;
- var offset = (page - 1) * pageSize;
- var domain = await ResolveDomainAsync();
- var where = new List<string>
- {
- "m.Domain = @Domain",
- "m.Status = 'I'",
- "m.Qty > 0",
- "IFNULL(m.Location,'') = ''",
- };
- var pars = new List<SugarParameter> { new("@Domain", domain) };
- if (!string.IsNullOrWhiteSpace(input.DemandNo))
- {
- where.Add("m.PurOrd LIKE @DemandNo");
- pars.Add(new SugarParameter("@DemandNo", $"%{input.DemandNo.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.Shelf))
- {
- where.Add("m.Shelf LIKE @Shelf");
- pars.Add(new SugarParameter("@Shelf", $"%{input.Shelf.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.BatchNo))
- {
- where.Add("m.LotSerial LIKE @BatchNo");
- pars.Add(new SugarParameter("@BatchNo", $"%{input.BatchNo.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.MaterialCode))
- {
- where.Add("m.ItemNum LIKE @MaterialCode");
- pars.Add(new SugarParameter("@MaterialCode", $"%{input.MaterialCode.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.InspectStatus))
- {
- where.Add("d.FINSPECTSTATUS = @InspectStatus");
- pars.Add(new SugarParameter("@InspectStatus", input.InspectStatus.Trim()));
- }
- if (!string.IsNullOrWhiteSpace(input.Supplier))
- {
- where.Add("m.Supply = @Supplier");
- pars.Add(new SugarParameter("@Supplier", input.Supplier.Trim()));
- }
- var whereSql = string.Join(" AND ", where);
- // 复刻存储过程 @tbLocDet 聚合层
- var groupedInner =
- $"""
- SELECT m.Supply, m.PurOrd, m.PurLine, m.ItemNum, m.ShipperNbr, m.LotSerial,
- MAX(m.Shelf) AS Shelf, SUM(m.Qty) AS Qty, MAX(m.CheckNo) AS CheckNo,
- MAX(IFNULL(d.FINSPECTSTATUS,'')) AS FINSPECTSTATUS
- FROM MissedPrint m
- LEFT JOIN qms_qcp_inspecapplyn q ON m.CheckNo = q.FBILLNO
- LEFT JOIN qms_qcp_insappnentry d ON q.id = d.glid
- WHERE {whereSql}
- GROUP BY m.Supply, m.PurOrd, m.PurLine, m.ShipperNbr, m.ItemNum, m.LotSerial
- """;
- var total = await _db.Ado.GetIntAsync($"SELECT COUNT(1) FROM ({groupedInner}) t", pars);
- var grandList = await _db.Ado.SqlQueryAsync<decimal>($"SELECT IFNULL(SUM(t.Qty),0) FROM ({groupedInner}) t", pars);
- var grandTotalQty = grandList.FirstOrDefault();
- var list = await _db.Ado.SqlQueryAsync<PendingInspectionListRow>(
- $"""
- SELECT
- t.PurOrd AS DemandNo,
- t.PurLine AS DemandLineNo,
- t.ItemNum AS MaterialCode,
- i.Descr AS MaterialName,
- t.LotSerial AS BatchNo,
- t.Qty AS Qty,
- i.UM AS Unit,
- t.Shelf AS PendingShelf,
- t.ShipperNbr AS DeliveryNo,
- t.CheckNo AS InspectNo,
- CONCAT(t.FINSPECTSTATUS,
- CASE WHEN (SELECT MAX(ib.clfs) FROM qms_qcp_inspbill ib WHERE ib.lydjbh = t.CheckNo) = '3'
- THEN '-挑选使用' ELSE '' END) AS InspectStatus,
- t.Supply AS Supplier,
- s.SortName AS SupplierShortName
- FROM ({groupedInner}) t
- LEFT JOIN ItemMaster i ON i.Domain = @Domain AND t.ItemNum = i.ItemNum
- LEFT JOIN SuppMaster s ON s.Domain = @Domain AND t.Supply = s.Supp
- ORDER BY t.Supply, t.PurOrd, t.PurLine
- LIMIT {pageSize} OFFSET {offset}
- """,
- pars);
- return new { total, page, pageSize, list, grandTotalQty };
- }
- /// <summary>
- /// 检验状态下拉选项(qms_qcp_insappnentry.FINSPECTSTATUS distinct,只读)。
- /// </summary>
- [DisplayName("暂收在检检验状态选项")]
- [HttpGet("status-options")]
- public async Task<object> GetStatusOptions()
- {
- var list = await _db.Ado.SqlQueryAsync<PendingInspectionStatusOption>(
- """
- SELECT DISTINCT FINSPECTSTATUS AS Val
- FROM qms_qcp_insappnentry
- WHERE IFNULL(FINSPECTSTATUS,'') <> ''
- ORDER BY FINSPECTSTATUS
- """);
- return list;
- }
- /// <summary>
- /// 供应商下拉选项(暂收在检集合内 distinct Supply + SuppMaster.SortName,只读)。
- /// </summary>
- [DisplayName("暂收在检供应商选项")]
- [HttpGet("supplier-options")]
- public async Task<object> GetSupplierOptions()
- {
- var domain = await ResolveDomainAsync();
- var list = await _db.Ado.SqlQueryAsync<PendingInspectionSupplierOption>(
- """
- SELECT DISTINCT m.Supply AS Val, s.SortName AS Label
- FROM MissedPrint m
- LEFT JOIN SuppMaster s ON s.Domain = @Domain AND m.Supply = s.Supp
- WHERE m.Domain = @Domain AND m.Status = 'I' AND m.Qty > 0 AND IFNULL(m.Location,'') = ''
- AND IFNULL(m.Supply,'') <> ''
- ORDER BY m.Supply
- """,
- new List<SugarParameter> { new("@Domain", domain) });
- return list;
- }
- }
|