namespace NewPdaSqlServer.service.@base
|
{
|
using NewPdaSqlServer.Dto.service;
|
using NewPdaSqlServer.entity;
|
using SqlSugar;
|
using System;
|
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
|
using System.Data;
|
using NewPdaSqlServer.DB;
|
|
using System.Data.SqlClient;
|
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
|
|
public class MesPrintMangeer : Repository<dynamic>
|
{
|
public dynamic getPrintInfo(dynamic query)
|
{
|
|
// 使用参数化查询防止SQL注入
|
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 = '打印机'";
|
|
var printInfo = Db.Ado.SqlQuery<dynamic>(sql1, sqlParams);
|
|
if (printInfo.Count < 1 ) throw new Exception("当前用户未绑定打印机,请维护后使用拆分功能!");
|
|
return printInfo;
|
}
|
|
|
public dynamic getCfInfo(dynamic query) // 使用具体类型替代dynamic
|
{
|
// 参数校验
|
if (string.IsNullOrEmpty(query?.cfBarcode))
|
throw new ArgumentException("拆分条码不能为空");
|
if (string.IsNullOrEmpty(query?.barcode))
|
throw new ArgumentException("原始条码不能为空");
|
|
// 使用强类型参数
|
var sqlParams = new List<SugarParameter> {
|
new("@cfBar", query.cfBarcode.Trim()),
|
new("@oldBar", query.barcode.Trim())
|
};
|
|
var sql = @"SELECT TOP 1 C.ITEM_NO,C.item_name,C.item_model,B.OLDQTY as QUANTITY,B.CREATE_DATE, '拆分条码' AS BarType,A.ITEM_BARCODE,GETDATE() as print_date
|
FROM MES_INV_ITEM_STOCKS A
|
LEFT JOIN MES_INV_ITEM_BARCODES B ON A.ITEM_BARCODE = B.ITEM_BARCODE
|
LEFT JOIN MES_ITEMS C ON C.item_id = B.ITEM_ID
|
WHERE A.ITEM_BARCODE = @cfBar
|
|
UNION ALL
|
|
SELECT TOP 1 C.ITEM_NO,C.item_name,C.item_model,A.QUANTITY as QUANTITY,B.CREATE_DATE, '原始条码' AS BarType,A.ITEM_BARCODE,GETDATE() as print_date
|
FROM MES_INV_ITEM_STOCKS A
|
LEFT JOIN MES_INV_ITEM_BARCODES B ON A.ITEM_BARCODE = B.ITEM_BARCODE
|
LEFT JOIN MES_ITEMS C ON C.item_id = B.ITEM_ID
|
WHERE A.ITEM_BARCODE = @oldBar";
|
|
var mergedData = Db.Ado.SqlQuery<dynamic>(sql, sqlParams);
|
|
if (mergedData.Count < 2) throw new Exception("条码信息存在异常,请联系管理员!");
|
|
return mergedData;
|
}
|
|
// // 现场收料展示列表
|
// public class PrintBarInfo
|
// {
|
// public List<dynamic> cfBarInfo { get; set; }
|
// public List<dynamic> oldBarInfo { get; set; }
|
// }
|
|
public dynamic getCfBeforeInfo(dynamic query) // 使用具体类型替代dynamic
|
{
|
// 参数校验
|
if (string.IsNullOrEmpty(query?.cfBarcode))
|
throw new ArgumentException("拆分条码不能为空");
|
if (string.IsNullOrEmpty(query?.barcode))
|
throw new ArgumentException("原始条码不能为空");
|
|
// 使用强类型参数
|
var sqlParams = new List<SugarParameter> {
|
new("@cfBar", query.cfBarcode.Trim()),
|
new("@oldBar", query.barcode.Trim())
|
};
|
|
var sql = @"SELECT TOP 1 C.ITEM_NO,C.item_name,C.item_model,B.OLDQTY as QUANTITY,B.CREATE_DATE, '拆分条码' AS BarType,B.ITEM_BARCODE,GETDATE() as print_date
|
FROM MES_INV_ITEM_BARCODES B
|
LEFT JOIN MES_ITEMS C ON C.item_id = B.ITEM_ID
|
WHERE B.ITEM_BARCODE = @cfBar
|
|
UNION ALL
|
|
SELECT TOP 1 C.ITEM_NO,C.item_name,C.item_model,B.QUANTITY as QUANTITY,B.CREATE_DATE, '原始条码' AS BarType,B.ITEM_BARCODE,GETDATE() as print_date
|
FROM MES_INV_ITEM_BARCODES B
|
LEFT JOIN MES_ITEMS C ON C.item_id = B.ITEM_ID
|
WHERE B.ITEM_BARCODE = @oldBar";
|
|
var mergedData = Db.Ado.SqlQuery<dynamic>(sql, sqlParams);
|
|
if (mergedData.Count < 2) throw new Exception("条码信息存在异常,请联系管理员!");
|
|
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;
|
}
|
|
}
|
}
|