| | |
| | | var sqlParams = new List<SugarParameter> { new("@userAccount", query.userName) }; |
| | | |
| | | var sql1 = @"SELECT TOP 1 ip,port fROM print_info A |
| | | left join SYS_USER_BIND B on A.guid = B.aboutGuid |
| | | left join SYS_USER C ON C.GUID = B.userGuid |
| | | WHERE C.ACCOUNT = @userAccount AND B.fType = '打印机'"; |
| | | left join SYS_USER_BIND B on A.guid = B.aboutGuid |
| | | left join SYS_USER C ON C.GUID = B.userGuid |
| | | WHERE C.ACCOUNT = @userAccount AND B.fType = '打印机'"; |
| | | |
| | | var printInfo = Db.Ado.SqlQuery<dynamic>(sql1, sqlParams); |
| | | |
| | |
| | | |
| | | return mergedData; |
| | | } |
| | | /*-------------------------------2025-10-25 重写拆分条码返回信息新增打印人信息返回----------------------------------*/ |
| | | |
| | | |
| | | |
| | | } |
| | | public dynamic getCfInfo(dynamic query, dynamic unity) // 使用具体类型替代dynamic |
| | | { |
| | | // 参数校验 |
| | | if (string.IsNullOrEmpty(query?.cfBarcode)) |
| | | throw new ArgumentException("拆分条码不能为空"); |
| | | if (string.IsNullOrEmpty(query?.barcode)) |
| | | throw new ArgumentException("原始条码不能为空"); |
| | | |
| | | var printUser = GetPrinterUserNameByAccount(unity.userName.Trim()); |
| | | |
| | | // 使用强类型参数 |
| | | var sqlParams = new List<SugarParameter> { |
| | | new("@cfBar", query.cfBarcode.Trim()), |
| | | new("@oldBar", query.barcode.Trim()), |
| | | new("@printBy", printUser) |
| | | }; |
| | | |
| | | // 3. 执行SQL查询(通过UNION ALL合并原始条码与拆分后条码的信息) |
| | | var sql = @"SELECT TOP 1 |
| | | C.ITEM_NO, |
| | | C.item_name, |
| | | C.item_model, |
| | | @printBy AS printBy, |
| | | B.OLDQTY AS QUANTITY, |
| | | B.CREATE_DATE, |
| | | '拆分条码' AS barType, |
| | | B.ITEM_BARCODE, |
| | | u.fname AS unit, |
| | | GETDATE() AS print_date |
| | | FROM MES_INV_ITEM_BARCODES B |
| | | LEFT JOIN MES_ITEMS C ON C.item_id = B.ITEM_ID |
| | | LEFT JOIN MES_UNIT u ON u.id = C.storeunit |
| | | WHERE B.ITEM_BARCODE = @cfBar |
| | | |
| | | UNION ALL |
| | | |
| | | SELECT TOP 1 |
| | | C.ITEM_NO, |
| | | C.item_name, |
| | | C.item_model, |
| | | @printBy AS printBy, |
| | | B.QUANTITY AS QUANTITY, |
| | | B.CREATE_DATE, |
| | | '原始条码' AS barType, |
| | | B.ITEM_BARCODE, |
| | | u.fname AS unit, |
| | | GETDATE() AS print_date |
| | | FROM MES_INV_ITEM_BARCODES B |
| | | LEFT JOIN MES_ITEMS C ON C.item_id = B.ITEM_ID |
| | | LEFT JOIN MES_UNIT u ON u.id = C.storeunit |
| | | WHERE B.ITEM_BARCODE = @oldBar"; |
| | | |
| | | var mergedData = Db.Ado.SqlQuery<dynamic>(sql, sqlParams); |
| | | |
| | | if (mergedData.Count < 2) throw new Exception("条码信息存在异常,请联系管理员!"); |
| | | |
| | | return mergedData; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取入库前拆分的条码信息(含原始条码与拆分后条码的物料、打印相关数据) |
| | | /// </summary> |
| | | /// <param name="query">拆分结果对象(需包含原始条码barcode、拆分后条码cfBarcode)</param> |
| | | /// <param name="unity">查询参数对象(需包含打印人userName)</param> |
| | | /// <returns>合并后的条码信息列表(原始条码+拆分后条码,共2条数据)</returns> |
| | | /// <exception cref="ArgumentException">参数为空时抛出</exception> |
| | | /// <exception cref="Exception">条码信息异常时抛出</exception> |
| | | public dynamic getCfBeforeInfo(dynamic query, dynamic unity) // 注:建议后续替换为具体实体类型(如BarSplitResult、WarehouseQuery) |
| | | { |
| | | // 1. 参数合法性校验(确保核心条码和打印人信息不为空) |
| | | if (string.IsNullOrEmpty(query?.cfBarcode?.Trim())) |
| | | throw new ArgumentException("拆分后条码不能为空"); |
| | | |
| | | if (string.IsNullOrEmpty(query?.barcode?.Trim())) |
| | | throw new ArgumentException("原始条码不能为空"); |
| | | |
| | | if (string.IsNullOrEmpty(unity?.userName?.Trim())) |
| | | throw new ArgumentException("打印人(userName)不能为空"); |
| | | |
| | | var printUser = GetPrinterUserNameByAccount(unity.userName.Trim()); |
| | | // 2. 构建SQL参数(避免SQL注入,统一处理参数空格) |
| | | var sqlParams = new List<SugarParameter> |
| | | { |
| | | new("@cfBar", query.cfBarcode.Trim()), // 拆分后的新条码 |
| | | new("@oldBar", query.barcode.Trim()), // 拆分前的原始条码 |
| | | new("@printBy", printUser) // 执行打印操作的用户 |
| | | }; |
| | | |
| | | // 3. 执行SQL查询(通过UNION ALL合并原始条码与拆分后条码的信息) |
| | | var sql = @"SELECT TOP 1 |
| | | C.ITEM_NO, |
| | | C.item_name, |
| | | C.item_model, |
| | | @printBy AS printBy, |
| | | B.OLDQTY AS QUANTITY, |
| | | B.CREATE_DATE, |
| | | '拆分条码' AS barType, |
| | | B.ITEM_BARCODE, |
| | | u.fname AS unit, |
| | | GETDATE() AS print_date |
| | | FROM MES_INV_ITEM_BARCODES B |
| | | LEFT JOIN MES_ITEMS C ON C.item_id = B.ITEM_ID |
| | | LEFT JOIN MES_UNIT u ON u.id = C.storeunit |
| | | WHERE B.ITEM_BARCODE = @cfBar |
| | | |
| | | UNION ALL |
| | | |
| | | SELECT TOP 1 |
| | | C.ITEM_NO, |
| | | C.item_name, |
| | | C.item_model, |
| | | @printBy AS printBy, |
| | | B.QUANTITY AS QUANTITY, |
| | | B.CREATE_DATE, |
| | | '原始条码' AS barType, |
| | | B.ITEM_BARCODE, |
| | | u.fname AS unit, |
| | | GETDATE() AS print_date |
| | | FROM MES_INV_ITEM_BARCODES B |
| | | LEFT JOIN MES_ITEMS C ON C.item_id = B.ITEM_ID |
| | | LEFT JOIN MES_UNIT u ON u.id = C.storeunit |
| | | WHERE B.ITEM_BARCODE = @oldBar"; |
| | | |
| | | // 4. 执行查询并处理结果 |
| | | var mergedData = Db.Ado.SqlQuery<dynamic>(sql, sqlParams); |
| | | |
| | | // 校验结果:需同时获取到原始条码和拆分后条码的信息(共2条数据) |
| | | if (mergedData?.Count != 2) |
| | | throw new Exception("条码信息存在异常(未查询到完整的原始/拆分条码数据),请联系管理员!"); |
| | | |
| | | return mergedData; |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 公共方法:根据用户账号查询对应的打印机用户名 |
| | | /// </summary> |
| | | /// <param name="userAccount">用户账号(即原unity.userName)</param> |
| | | /// <param name="userPrinterMainTable">用户-打印机关联表名(默认值可根据实际表名配置)</param> |
| | | /// <returns>匹配的打印机用户名</returns> |
| | | /// <exception cref="ArgumentException">入参为空时抛出</exception> |
| | | /// <exception cref="Exception">未查询到数据或结果为空时抛出</exception> |
| | | public string GetPrinterUserNameByAccount(string userAccount) |
| | | { |
| | | // 1. 入参校验 |
| | | if (string.IsNullOrEmpty(userAccount?.Trim())) |
| | | throw new ArgumentException("查询打印机用户的入参【userAccount】不能为空"); |
| | | |
| | | |
| | | // 2. 构建参数化查询(防SQL注入) |
| | | var userParams = new List<SugarParameter> |
| | | { |
| | | new("@userAccount", userAccount.Trim()) |
| | | |
| | | }; |
| | | |
| | | // 3. 动态表名的SQL(适配不同表名场景) |
| | | var userSql = @"SELECT C.USER_NAME FROM SYS_USER C WHERE C.ACCOUNT = @userAccount "; |
| | | |
| | | // 4. 执行查询 |
| | | var printUsers = Db.Ado.SqlQuery<dynamic>(userSql, userParams); |
| | | if (printUsers == null || printUsers.Count == 0) |
| | | throw new Exception($"未查询到账号【{userAccount}】对应的打印机用户信息"); |
| | | |
| | | // 5. 提取并校验结果(取第一个匹配值,可根据业务调整为多值处理) |
| | | var printUser = printUsers.First()?.USER_NAME?.Trim(); |
| | | if (string.IsNullOrEmpty(printUser)) |
| | | throw new Exception($"账号【{userAccount}】查询到的打印机用户名为空"); |
| | | |
| | | return printUser; |
| | | } |
| | | |
| | | } |
| | | } |