南骏 池
2025-05-28 1cf4ec89a5b30f90627e5e49dc1746426f04cf56
1.现场投料——PDA开发
已修改2个文件
213 ■■■■■ 文件已修改
Controllers/Wom/WomdaaController.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Wom/WomdaaManager.cs 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/Wom/WomdaaController.cs
@@ -532,5 +532,56 @@
        }
    }
    //GetItemsXctl
    /// <summary>
    ///     根据工单号获取待投料物料明细
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetItemsXctl")]
    public ResponseResult GetItemsXctl(WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetItemsXctl(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    //GetItemsXcsl
    /// <summary>
    ///     物料条码投料
    /// </summary>
    /// <returns></returns>
    [HttpPost("ScanXctl")]
    public ResponseResult ScanXctl(dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.ScanXctl(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    #endregion
}
service/Wom/WomdaaManager.cs
@@ -920,4 +920,166 @@
    }
    public XcslResultDto GetItemsXctl(WarehouseQuery query)
    {
        if (string.IsNullOrEmpty(query.daa001)) throw new Exception("工单号为空");
        var womdaa = Db.Queryable<Womdaa, MesItems>((a, i) =>
                new JoinQueryInfos(JoinType.Left,
                    a.Daa002 == i.ItemId.ToString()))
            .Where((a, i) => a.Daa001 == query.daa001
                    && a.Fstatus == 1)
            .Select((a, i) => new
            {
                a.Daa001,
                a.CaaGuid,
                a.Daa008
            }).First();
        if (womdaa?.Daa001 == null) throw new Exception("工单号不存在");
        // 使用参数化查询防止SQL注入
        var sqlParams = new List<SugarParameter> { new("@daa001", query.daa001) };
        var sql1 = @"SELECT A.item_out_no,
       SUM(B.QUANTITY)          AS BL_Num,
       ISNULL(SL_SUM.JS_Sum, 0) AS JS_Num,
       ISNULL(TL_SUM.JS_Sum, 0) AS TR_Num,
       C.item_no,
       C.item_name,
       C.item_model
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 (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
) AS SL_SUM ON SL_SUM.ITEM_ID = C.item_id
         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_CXTR, '0') = 1
                    GROUP BY B1.ITEM_ID
) AS TL_SUM ON TL_SUM.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(SL_SUM.JS_Sum, 0),
         ISNULL(TL_SUM.JS_Sum, 0);";
        var XcslItem = Db.Ado.SqlQuery<dynamic>(sql1, sqlParams);
        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_CXTR,'0') = 0";
        var XcslWjsBar = Db.Ado.SqlQuery<dynamic>(sql2, sqlParams);
        var sql3 = @"SELECT B.ITEM_BARCODE ,B.QUANTITY,C.item_no,C.item_name,D.USER_NAME,B.CXTR_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.CXTR_CREATE_BY = D.ACCOUNT
WHERE out_type = '生产领料'
AND A.task_no = @daa001
AND ISNULL(IS_CXTR,'0') = 1";
        var XcslYjsBar = Db.Ado.SqlQuery<dynamic>(sql3, sqlParams);
        var dto = new XcslResultDto
        {
            GD_Num = womdaa.Daa008,
            XcslItemList = XcslItem,
            XcslWjsBarList = XcslWjsBar,
            XcslYjsBarList = XcslYjsBar
        };
        return dto;
    }
    public dynamic ScanXctl(dynamic query)
    {
        if (query == null) throw new ArgumentNullException(nameof(query), "参数对象不能为 null");
        // 参数校验(根据存储过程新增参数)
        if (string.IsNullOrEmpty(query.userAccount?.ToString()))
            throw new ArgumentException("用户名不允许为空", nameof(query.userAccount));
        if (string.IsNullOrEmpty(query.Bar?.ToString()))
            throw new ArgumentException("物料条码不允许为空", nameof(query.Bar));
        if (string.IsNullOrEmpty(query.DAA001?.ToString()))
            throw new ArgumentException("工单单号不允许为空", nameof(query.DAA001));
        var _strMsg = "";
        var _status = -1;
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("prc_pda_ScanXctl", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    // 根据存储过程调整参数顺序和命名
                    SqlParameter[] parameters =
                    {
                        new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userAccount },
                        new("@pi_barcode", SqlDbType.NVarChar, 100) { Value = query.Bar },
                        new("@pi_daa001", SqlDbType.NVarChar, 100) { Value = query.DAA001 },
                        new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
                        new("@po_outStatus", SqlDbType.Int) { Direction = ParameterDirection.Output }
                    };
                    foreach (var parameter in parameters)
                        cmd.Parameters.Add(parameter);
                    cmd.ExecuteNonQuery();
                    _strMsg = parameters[3].Value?.ToString() ?? "";
                    _status = Convert.ToInt32(parameters[4].Value ?? -1);
                    if (_status <= 0) throw new Exception(_strMsg);
                    return new
                    {
                        message = _strMsg,
                        status = _status,
                        daa001 = query.DAA001,
                        barCode = query.Bar
                    };
                }
                catch (Exception ex)
                {
                    throw new Exception($"产线收料失败:{ex.Message}");
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
}