11
啊鑫
2025-01-13 cb23d88faf0bd112db57816c5cc02e47eb685324
11
已修改2个文件
234 ■■■■■ 文件已修改
Controllers/Warehouse/TransferOutController.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/TransferOutManager.cs 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/Warehouse/TransferOutController.cs
@@ -43,6 +43,57 @@
    #endregion
    #region 调拨入库业务
    /// <summary>
    ///     扫描条码进行调拨入库处理
    /// </summary>
    /// <param name="query">查询参数</param>
    /// <returns>处理结果和待处理明细</returns>
    /// <remarks>
    ///     请求示例:
    ///     POST /api/TransferOut/ScanReceiveBarcode
    ///     {
    ///     "billNo": "DB202401010001",  // 调拨单号(必填)
    ///     "userName": "admin",          // 用户名(必填)
    ///     "barcode": "BC001"           // 条码号(必填)
    ///     }
    ///     业务处理:
    ///     - 验证调拨单状态
    ///     - 验证条码库存信息
    ///     - 验证仓库一致性
    ///     - 验证数量是否超出未扫数量
    ///     - 执行调拨入库事务处理
    ///     返回数据包含:
    ///     - form: 处理结果表单
    ///     - items: 待处理明细列表
    /// </remarks>
    /// <response code="200">扫描成功</response>
    /// <response code="400">扫描失败,返回具体错误信息</response>
    [HttpPost("ScanReceiveBarcode")]
    public ResponseResult ScanReceiveBarcode([FromBody] WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var (form, items) = _manager.ScanReceiveBarcode(query);
            resultInfos.form = form;
            resultInfos.items = items;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    #endregion
    #region 调拨出库业务
    /// <summary>
@@ -162,5 +213,49 @@
        }
    }
    /// <summary>
    ///     分割条码进行调拨出库处理
    /// </summary>
    /// <param name="query">查询参数</param>
    /// <returns>处理结果和待处理明细</returns>
    /// <remarks>
    ///     请求示例:
    ///     POST /api/TransferOut/SplitBarcode
    ///     {
    ///     "billNo": "DB202401010001",  // 调拨单号(必填)
    ///     "userName": "admin",          // 用户名(必填)
    ///     "barcode": "BC001"           // 条码号(必填)
    ///     "fum": "1"                  // 拆分数(必填)
    ///     }
    ///     业务处理:
    ///     - 验证调拨单状态
    ///     - 验证条码库存信息
    ///     - 验证仓库一致性
    ///     - 验证数量是否超出未扫数量
    ///     - 执行分割条码的调拨出库事务处理
    /// </remarks>
    /// <response code="200">分割成功</response>
    /// <response code="400">分割失败,返回具体错误信息</response>
    [HttpPost("SplitBarcode")]
    public ResponseResult SplitBarcode([FromBody] WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var message = _manager.SplitBarcode(query);
            resultInfos.tbBillList = message;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    #endregion
}
service/Warehouse/TransferOutManager.cs
@@ -171,4 +171,143 @@
            }
        }
    }
    /// <summary>
    ///     扫描条码进行调拨入库处理
    /// </summary>
    /// <param name="query">包含单据号、用户名和条码信息的查询参数</param>
    /// <returns>处理后的表单和待处理明细列表</returns>
    public (WarehouseQuery form, List<TransferOutDetail> items)
        ScanReceiveBarcode(WarehouseQuery query)
    {
        var p_bill_no = query.billNo;
        var p_item_barcode = query.barcode;
        // 验证单据号
        if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("请选取单据号!");
        // 查询出库单并验证状态
        var transferOut = Db.Queryable<TransferOut>()
            .Where(x => x.BillNo == p_bill_no && x.Status == 1)
            .First();
        if (transferOut == null) throw new Exception("未找到调拨申请单或者调拨申请单没审核");
        // 查询条码库存信息并验证
        var stock = Db.Queryable<MesInvItemStocks>()
            .Where(x => x.ItemBarcode == p_item_barcode
                        && x.Quantity > 0
                        && !string.IsNullOrEmpty(x.DepotsCode))
            .First();
        if (stock == null) throw new Exception($"库存中无此条码,请核对!{p_item_barcode}");
        // 查询物料信息
        var item = Db.Queryable<MesItems>()
            .Where(x => x.Id == stock.ItemId)
            .First();
        if (item == null) throw new Exception("未找到物料");
        var _strMsg = "";
        var _intSum = "";
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("[prc_pda_DBRK]", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new("@outMsg", SqlDbType.NVarChar, 300),
                        new("@outSum", SqlDbType.NVarChar, 300),
                        new("@barcode_num", SqlDbType.NVarChar, 300),
                        new("@split_num", SqlDbType.NVarChar, 300),
                        new("@c_user", query.userName),
                        new("@p_bill_no", p_bill_no),
                        new("@p_item_barcode", p_item_barcode),
                        new("@p_depot_section_code", query.sectionCode),
                    };
                    parameters[0].Direction = ParameterDirection.Output;
                    parameters[1].Direction = ParameterDirection.Output;
                    parameters[2].Direction = ParameterDirection.Output;
                    parameters[3].Direction = ParameterDirection.Output;
                    foreach (var parameter in parameters)
                        cmd.Parameters.Add(parameter);
                    cmd.ExecuteNonQuery();
                    _strMsg = parameters[0].Value.ToString();
                    _intSum = parameters[1].Value.ToString();
                    var barcodeNum = parameters[2].Value.ToString();
                    var splitNum = parameters[3].Value.ToString();
                    var result = Convert.ToInt32(_intSum);
                    if (result <= 0) throw new Exception(_strMsg);
                    query.itemNo = item.ItemNo;
                    query.Num = Convert.ToDecimal(barcodeNum);
                    query.Fum = Convert.ToDecimal(splitNum);
                    // 返回更新后的表单和待处理明细
                    return (query, GetTransferOutDetailListByBillNo(query));
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    //调拨出库拆分 prc_pda_DBCK_CF
    public string SplitBarcode(WarehouseQuery query)
    {
        var _strMsg = "";
        var _intSum = "";
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("[prc_pda_DBRK]", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new("@outMsg", SqlDbType.NVarChar, 300),
                        new("@outSum", SqlDbType.NVarChar, 300),
                        new("@c_user", query.userName),
                        new("@p_bill_no", query.billNo),
                        new("@p_item_barcode", query.barcode),
                        new("@NUM", query.Fum),
                    };
                    parameters[0].Direction = ParameterDirection.Output;
                    parameters[1].Direction = ParameterDirection.Output;
                    foreach (var parameter in parameters)
                        cmd.Parameters.Add(parameter);
                    cmd.ExecuteNonQuery();
                    _strMsg = parameters[0].Value.ToString();
                    _intSum = parameters[1].Value.ToString();
                    var result = Convert.ToInt32(_intSum);
                    if (result <= 0) throw new Exception(_strMsg);
                    return _strMsg;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
}