cdk
6 天以前 f1d1d3b67316c4dd7d36c15a82df5e66fde74a69
service/Wom/WomdaaManager.cs
@@ -2,6 +2,7 @@
using System.Data.SqlClient;
using System.Text;
using Masuit.Tools;
using Masuit.Tools.Hardware;
using Microsoft.SqlServer.Server;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
@@ -17,7 +18,7 @@
    //这里面写的代码不会给覆盖,如果要重新生成请删除 WomdaaManager.cs
    //获取工单号
    public List<string> GetProductionPickDaa001(WarehouseQuery query,string orgId)
    public List<string> GetProductionPickDaa001(WarehouseQuery query, dynamic requestInfo)
    {
        var sql =
            "SELECT DAA001 FROM WOMDAA A LEFT JOIN (SELECT COUNT(1) UN_NUM, PID FROM WOMDAB  WHERE DAB006 > DAB007 GROUP BY DAB002) B ON A.GUID = B.daaGuid WHERE DAA001 = " +
@@ -28,9 +29,57 @@
    }
    //根据工单号返回产品型号和待领物料
    public ProductionPickDto GetItemsByDaa001(WarehouseQuery query,string OrgId)
    public dynamic GetItemsByDaa001(WarehouseQuery query, dynamic requestInfo)
    {
        return getDaa001(query);
        if (string.IsNullOrEmpty(query.daa001))
            throw new Exception("请选工单号!");
        if (query == null)
            throw new ArgumentNullException(nameof(query), "参数对象不能为null");
        if (string.IsNullOrEmpty(query.daa001?.ToString()))
            throw new ArgumentException("工单号不能为空", nameof(query.daa001));
        var orgId = requestInfo.OrgId;
        if (orgId == null)
            throw new Exception("组织不存在!");
        // 调用存储过程获取物料明细
        var parameters = new[]
        {
            new SugarParameter("@daa001", query.daa001),
            new SugarParameter("@pi_orgId",orgId),
            new SugarParameter("@inP1", null),
            new SugarParameter("@inP2", null),
            new SugarParameter("@inP3", null),
            new SugarParameter("@inP4", null)
        };
        var womdabs = Db.Ado.SqlQuery<ItemDetailModel>("EXEC prc_pda_scll_detailList @daa001", parameters);
        var DS_list = womdabs.Where(s => s.DSQty > 0).ToList();
        var YS_list = womdabs.Where(s => s.SQty > 0).ToList();
        // 修复:补充获取 womdaa 对象
        var daa001Value = query.daa001?.ToString();
        var womdaa = Db.Ado.SqlQuery<dynamic>("EXEC prc_pda_getDaaInfo @daa001", parameters).First();
        if (womdaa == null)
        {
            throw new Exception("该工单信息不存在,请核对!");
        }
        var dto = new ProductionPickDto
        {
            daa001 = query.daa001,
            daaInfo = womdaa,
            PlanNo = womdaa.workNo,
            startTime = womdaa.startTime,
            items = DS_list,
            Ysitems = YS_list
        };
        return dto;
    }
    public ProductionPickDto ScanCode(WarehouseQuery query)
@@ -425,10 +474,11 @@
        if (string.IsNullOrEmpty(query.Kbbarcode?.ToString()))
            throw new ArgumentException("卡板条码不允许为空", nameof(query.userName));
        var sql = string.Format(@"SELECT QUANTITY,
        var sql = string.Format(@"SELECT QUANTITY,agvPostion,
       ISNULL((SELECT COUNT(1) FROM MES_INV_ITEM_BARCODES_TBMX WHERE ABOUT_TB_BARCODE = '{0}'), 0) AS YSum,
       DAA001
FROM MES_INV_ITEM_BARCODES A LEFT JOIN WOMDAA B ON A.ABOUT_GUID = B.guid
left join MES_WORKSHOP_LINE C ON DAA015 = C.id AND iSAgV = 1
WHERE ITEM_BARCODE = '{0}' ",  query.Kbbarcode);
        var ZsBarInfo = Db.Ado.SqlQuery<dynamic>(sql);
@@ -706,7 +756,7 @@
    //根据工单号返回产品型号和待领物料
    public XcslResultDto GetItemsXcsl(WarehouseQuery query)
    public dynamic GetItemsXcsl(WarehouseQuery query)
    {
        if (string.IsNullOrEmpty(query.daa001)) throw new Exception("工单号为空");
@@ -725,73 +775,49 @@
        if (womdaa?.Daa001 == null) throw new Exception("工单号不存在");
        // 使用参数化查询防止SQL注入
        var sqlParams = new List<SugarParameter> { new("@daa001", query.daa001) };
        if (womdaa?.Daa001 == null) throw new Exception("工单号不存在");
        var sql1 = @"SELECT A.item_out_no,
       SUM(B.QUANTITY)         AS BL_Num,
       ISNULL(Sub.JS_Sum, 0) AS JS_Num, -- 使用LEFT JOIN子查询的结果
       C.item_no,
       C.item_name,
       C.item_model,
       D.USER_NAME
FROM MES_INV_ITEM_OUTS A
         LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B ON A.GUID = B.ITEM_OUT_ID
         LEFT JOIN MES_ITEMS C ON B.ITEM_ID = C.item_id
         LEFT JOIN SYS_USER D ON A.create_by = D.ACCOUNT
-- 新增LEFT JOIN聚合子查询
         LEFT JOIN (SELECT B1.ITEM_ID,
                           SUM(B1.QUANTITY) AS JS_Sum
                    FROM MES_INV_ITEM_OUTS A1
                             LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B1 ON A1.GUID = B1.ITEM_OUT_ID
                    WHERE A1.out_type = '生产领料'
                      AND A1.task_no = @daa001
                      AND ISNULL(B1.IS_XCSL, '0') = 1
                    GROUP BY B1.ITEM_ID -- 按ITEM_ID提前聚合
) AS Sub ON Sub.ITEM_ID = C.item_id
WHERE A.out_type = '生产领料'
  AND A.task_no = @daa001
GROUP BY A.item_out_no,
         C.item_no,
         C.item_name,
         C.item_model,
         D.USER_NAME,
         C.item_id,
         ISNULL(Sub.JS_Sum, 0);";
        // 使用ADO.NET直接调用存储过程
        var ds = new DataSet();
        var XcslItem = Db.Ado.SqlQuery<dynamic>(sql1, sqlParams);
        // 假设您使用的是SQL Server,创建SqlConnection
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            conn.Open();
        var sql2 = @"SELECT B.ITEM_BARCODE ,B.QUANTITY,C.item_no,C.item_name,D.USER_NAME,A.create_date
FROM MES_INV_ITEM_OUTS A
LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B ON A.GUID = B.ITEM_OUT_ID
LEFT JOIN MES_ITEMS C ON B.ITEM_ID = C.item_id
LEFT JOIN SYS_USER D ON A.create_by = D.ACCOUNT
WHERE out_type = '生产领料'
AND A.task_no = @daa001
AND ISNULL(IS_XCSL,'0') = 0";
            using (var cmd = new SqlCommand("prc_pda_xcsl_detailList", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
        var XcslWjsBar = Db.Ado.SqlQuery<dynamic>(sql2, sqlParams);
                // 添加参数
                cmd.Parameters.Add(new SqlParameter("@daa001", query.daa001));
                cmd.Parameters.Add(new SqlParameter("@pi_orgId", DBNull.Value));
                cmd.Parameters.Add(new SqlParameter("@inP1", DBNull.Value));
                cmd.Parameters.Add(new SqlParameter("@inP2", DBNull.Value));
                cmd.Parameters.Add(new SqlParameter("@inP3", DBNull.Value));
                cmd.Parameters.Add(new SqlParameter("@inP4", DBNull.Value));
        var sql3 = @"SELECT B.ITEM_BARCODE ,B.QUANTITY,C.item_no,C.item_name,D.USER_NAME,B.XCSL_CREATE_DATE
FROM MES_INV_ITEM_OUTS A
LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B ON A.GUID = B.ITEM_OUT_ID
LEFT JOIN MES_ITEMS C ON B.ITEM_ID = C.item_id
LEFT JOIN SYS_USER D ON B.XCSL_CREATE_BY = D.ACCOUNT
WHERE out_type = '生产领料'
AND A.task_no = @daa001
AND ISNULL(IS_XCSL,'0') = 1";
                using (var adapter = new System.Data.SqlClient.SqlDataAdapter(cmd))
                {
                    adapter.Fill(ds);
                }
            }
        }
        var XcslYjsBar = Db.Ado.SqlQuery<dynamic>(sql3, sqlParams);
        // 转换结果
        var XcslItem = Db.Utilities.DataTableToDynamic(ds.Tables[0]);
        var XcslWjsBar = Db.Utilities.DataTableToDynamic(ds.Tables[1]);
        var XcslYjsBar = Db.Utilities.DataTableToDynamic(ds.Tables[2]);
        var daaInfo = Db.Utilities.DataTableToDynamic(ds.Tables[3]);
        var dto = new XcslResultDto
        var dto = new
        {
            GD_Num = womdaa.Daa008,
            workNo = womdaa.Daa021,
            XcslItemList = XcslItem,
            XcslWjsBarList = XcslWjsBar,
            XcslYjsBarList = XcslYjsBar
            XcslYjsBarList = XcslYjsBar,
            DaaInfoList = daaInfo
        };
        return dto;
@@ -935,32 +961,45 @@
        }
    }
    public dynamic GetXcslDaa(dynamic unity)
    public dynamic GetXcslDaa(dynamic unity,dynamic RequestInfo)
    {
        var sqlParams = new List<SugarParameter> { };
        //var sqlParams = new List<SugarParameter> { };
        var sql2 = new StringBuilder(@"
        SELECT '['+DAA001+']['+DAA021+']' AS daaInfo,DAA001,DAA021
        FROM WOMDAA
        WHERE daa018 <>'W:完工'");
        //var sql2 = new StringBuilder(@"
        //SELECT '['+DAA001+']['+DAA021+']' AS daaInfo,DAA001,DAA021
        //FROM WOMDAA
        //WHERE daa018 <>'W:完工'");
        if (!string.IsNullOrWhiteSpace(unity.selectKey?.ToString()))
        //if (!string.IsNullOrWhiteSpace(unity.selectKey?.ToString()))
        //{
        //    sqlParams.Add(new("@selectKey", unity.selectKey));
        //    sql2.Append(@"
        //    AND (DAA001 LIKE '%' + @selectKey + '%'
        //    OR DAA021 LIKE '%' + @selectKey + '%')");
        //}
        //var XcslItem = Db.Ado.SqlQuery<dynamic>(sql2.ToString(), sqlParams);
        //if (XcslItem == null)
        //{
        //    throw new Exception("该条件下无对应工单信息,请重新输入!");
        //}
        var orgId = RequestInfo.OrgId;
        var parameters = new List<SugarParameter>
        {
            sqlParams.Add(new("@selectKey", unity.selectKey));
            sql2.Append(@"
            AND (DAA001 LIKE '%' + @selectKey + '%'
            OR DAA021 LIKE '%' + @selectKey + '%')");
        }
            new SugarParameter("@selectKey", unity.selectKey),
            new SugarParameter("@inP1", orgId), // 可选参数
            new SugarParameter("@inP2", unity.selDaaType), // 可选参数
            new SugarParameter("@inP3", null), // 可选参数
            new SugarParameter("@inP4", null), // 可选参数
            // ...其他可选参数
        };
        var XcslItem = Db.Ado.SqlQuery<dynamic>(sql2.ToString(), sqlParams);
        var result = Db.Ado.SqlQuery<dynamic>("EXEC prc_pda_getWorkOrderInfo @selectKey, @inP1, @inP2, @inP3, @inP4", parameters);
        if (XcslItem == null)
        {
            throw new Exception("该条件下无对应工单信息,请重新输入!");
        }
        return XcslItem;
        return result;
    }
@@ -1342,7 +1381,8 @@
        var sqlParams = new List<SugarParameter> { };
        var sql2 = new StringBuilder(@"SELECT NAME,line_no FROM MES_WORKSHOP_LINE WHERE isAgv = 1 ORDER BY line_no");
        var sql2 = new StringBuilder(@"
SELECT NAME,line_no FROM MES_WORKSHOP_LINE WHERE isAgv = 1 ORDER BY line_no");
        var XtItem = Db.Ado.SqlQuery<dynamic>(sql2.ToString(), sqlParams);
@@ -1382,6 +1422,7 @@
                {
                    new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userAccount },
                    new("@pi_kb_barcode", SqlDbType.NVarChar, 100) { Value = query.KbBar },
                    new("@in1", SqlDbType.NVarChar, 100) { Value = query.AgvDw },
                    new("@outMsg", SqlDbType.NVarChar, 2500) { Direction = ParameterDirection.Output },
                    new("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output }
                };