受托退料:前端界面规范,列表与明细转为存储过程,添加组织隔离、拆分、库位列表、已扫待扫、完结功能
已修改2个文件
259 ■■■■ 文件已修改
Controllers/Warehouse/MesSttlController.cs 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/MesSttlManager.cs 185 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/Warehouse/MesSttlController.cs
@@ -1,9 +1,10 @@
using System.Dynamic;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.service.@base;
using NewPdaSqlServer.service.Warehouse;
using NewPdaSqlServer.util;
using System.Dynamic;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace NewPdaSqlServer.Controllers.Warehouse;
@@ -13,9 +14,11 @@
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class MesSttlController : ControllerBase
public class MesSttlController : BaseController
{
    private readonly MesSttlManager _manager = new();
    private readonly MesPrintMangeer _mCf = new();
    #region 基础
    /***进入模版管理可以修改模版***/
@@ -178,7 +181,7 @@
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = _manager.GetSttlBillNo(query);
            resultInfos.tbBillList = _manager.GetSttlBillNo(query,RequestInfo);
            return new ResponseResult
            {
                status = 0,
@@ -204,7 +207,7 @@
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = _manager.GetMesItemDetailByBillNo(query);
            resultInfos.tbBillList = _manager.GetMesItemDetailByBillNo(query, RequestInfo);
            if (resultInfos.tbBillList.Count < 1)
            {
@@ -262,5 +265,66 @@
        }
    }
    /// <summary>
    ///     受托退料条码拆分
    /// </summary>
    /// <param name="query">查询参数</param>
    /// <returns>拆分结果和待处理列表</returns>
    /// <remarks>
    ///     请求示例:
    ///     POST /api/MesItemBl/SplitBarcode
    ///     {
    ///     "billNo": "WO202401010001",  // 工单号(必填)
    ///     "barcode": "BC001",          // 条码号(必填)
    ///     "userName": "admin",          // 用户名(必填)
    ///     "blNo": "BL202401010001",    // 补料单号(必填)
    ///     "Num": 10                    // 拆分数量(必填,必须大于0)
    ///     }
    ///     业务处理:
    ///     - 验证补料单状态
    ///     - 验证条码库存信息
    ///     - 验证拆分数量是否合理
    ///     - 执行条码拆分事务处理
    ///     - 更新工单和补料单相关数量
    ///     返回数据包含:
    ///     - success: 拆分是否成功
    ///     - pendingList: 待处理明细列表,包含:
    ///     * Bld012: 物料ID
    ///     * Bld002: 物料编号
    ///     * Bld003: 物料名称
    ///     * Bld004: 物料规格
    ///     * Bld007: 计划数量
    ///     * Bld008: 已补数量
    /// </remarks>
    /// <response code="200">拆分成功</response>
    /// <response code="400">拆分失败,返回具体错误信息</response>
    [HttpPost("SplitBarcode")]
    public ResponseResult SplitBarcode(WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = new ExpandoObject();
            resultInfos.tbBillList.printInfo = _mCf.getPrintInfo(query);
            var scanResult = _manager.SplitBarcode(query);
            resultInfos.tbBillList.cfBarInfo = _mCf.getCfInfo(scanResult);
            //dynamic resultInfos = new ExpandoObject();
            //var (success, pendingList) = _manager.SplitBarcode(query);
            //resultInfos.success = success;
            //resultInfos.pendingList = pendingList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
}
service/Warehouse/MesSttlManager.cs
@@ -8,6 +8,7 @@
using OracleInternal.Sharding;
using SqlSugar;
using SqlSugar.Extensions;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
@@ -20,13 +21,33 @@
    ///     获取受托退料申请列表
    /// </summary>
    /// <returns>受托退料申请列表</returns>
    public List<string> GetSttlBillNo(WarehouseQuery query)
    public List<string> GetSttlBillNo(WarehouseQuery query, dynamic RequestInfo)
    {
        var list = Db.Queryable<MesShouTui>()
            .Where(s => s.IsCheck == true && s.IsFinish == false)
            .Select(s => s.BillNo).ToList();
        var orgId = RequestInfo.OrgId;
        return list;
        if (orgId == null)
            throw new Exception("组织不存在!");
        // 获取未完成的退料单号列表
        var parameters = new[]
        {
        new SugarParameter("@pi_orgId", orgId),
        new SugarParameter("@inP1", null),
        new SugarParameter("@inP2", null),
        new SugarParameter("@inP3", null),
        new SugarParameter("@inP4", null)
        };
        try
        {
            // 返回单号字符串列表Get_Qt_ck_List
            var list = Db.Ado.SqlQuery<string>(
                "EXEC prc_pda_sttl_list @pi_orgId,@inP1,@inP2,@inP3,@inP4", parameters);
            return list;
        }
        catch (Exception ex)
        {
            throw new Exception($"{ex.Message}");
        }
    }
    /// <summary>
@@ -34,39 +55,65 @@
    /// </summary>
    /// <param name="query">仓库查询参数</param>
    /// <returns>物料明细列表</returns>
    public List<ItemDetailModel> GetMesItemDetailByBillNo(
        WarehouseQuery query)
    public dynamic GetMesItemDetailByBillNo(WarehouseQuery query, dynamic RequestInfo)
    {
        // 关联查询物料表、物料明细表和物料基础信息表
        var mesItemTblDetails = Db
            .Queryable<MesShouTui, MesShouTuiDetail, MesItems>(
                (a, b, c) => new JoinQueryInfos(
                    JoinType.Left,
                    a.Guid == b.PGuid,
                    JoinType.Left,
                    b.FMaterialId == c.Id.ToString())
            ).Where((a, b, c) => a.BillNo == query.billNo && a.IsCheck == true)
            .Select<ItemDetailModel>((a, b, c) => new ItemDetailModel
        if (string.IsNullOrEmpty(query.billNo))
            throw new Exception("请选单据号!");
        if (query == null)
            throw new ArgumentNullException(nameof(query), "参数对象不能为null");
        if (string.IsNullOrEmpty(query.billNo?.ToString()))
            throw new ArgumentException("单据号不能为空", nameof(query.billNo));
        var orgId = RequestInfo.OrgId;
        if (orgId == null)
            throw new Exception("组织不存在!");
        // 获取未完成的发货通知单明细
        var parameters = new[]
{
        new SugarParameter("@billNo", query.billNo),
        new SugarParameter("@pi_orgId",orgId),
        new SugarParameter("@inP1", null),
        new SugarParameter("@inP2", null),
        new SugarParameter("@inP3", null),
        new SugarParameter("@inP4", null)
    };
        try
        {
            List<dynamic>? blDetails = Db.Ado.SqlQuery<dynamic>(
                "EXEC prc_pda_sttl_detailList @billNo,@pi_orgId,@inP1,@inP2,@inP3,@inP4", parameters);
            var items = blDetails.Where(x => x.DSQty > 0).ToList();    // 待扫物料
            var ysitems = blDetails.Where(x => x.SQty > 0).ToList();   // 已扫物料
            // 这里返回所有明细列表
            var result = blDetails.Select(b => new ItemDetailModel
            {
                ItemNo = c.ItemNo,
                ItemName = c.ItemName,
                ItemModel = c.ItemModel,
                FQty = b.FQty, // 申请数量
                SQty = b.SQty, // 已扫数量
                Pid = b.PGuid.ToString(),
                ItemNo = b.ItemNo,
                ItemName = b.ItemName,
                ItemModel = b.ItemModel,
                FQty = b.FQty,
                SQty = b.SQty,
                DSQty = b.DSQty,
                Pid = b.Pid,
                FMaterialId = b.FMaterialId,
                Id = b.Guid.ToString()
                Id = b.Id,
                RecoKw=b.RecoKw,
                ItemId = b.FMaterialId
            }).ToList();
        // 筛选出待退数量大于已退数量的记录
        //var itemTblDetails = mesItemTblDetails
        //    .Where(s => (s.Tld005 ?? 0) - (s.Tld006 ?? 0) > 0).ToList();
        return mesItemTblDetails;
            return result;
        }
        catch (Exception ex)
        {
            // 保留原有异常处理逻辑
            throw new Exception($"{ex.Message}");
        }
    }
    /// <summary>
    /// 受托退料入库
    /// 受托退料
    /// </summary>
    /// <param name="query"></param>
    /// <returns></returns>
@@ -136,4 +183,80 @@
            }
        }
    }
    /// <summary>
    ///     受托退料条码拆分 prc_rf_pda_prnt_zout_barcode2
    /// </summary>
    /// <param name="query">查询参数</param>
    /// <returns>(成功标志, 待处理列表)</returns>
    /// <remarks>
    ///     前台需要传入的参数:
    ///     - userName: 用户名(必填)
    ///     - billNo: 工单号(必填)
    ///     - barcode: 物料条码(必填)
    ///     - Num: 发料数量(必填,必须大于0)
    ///     - blNo: 发货通知单号(必填)
    /// </remarks>
    public ProductionPickDto SplitBarcode(WarehouseQuery query)
    {
        if (query.userName.IsNullOrEmpty()) throw new Exception("用户名不允许为空");
        if (query.billNo.IsNullOrEmpty()) throw new Exception("申请单号不允许为空");
        if (query.barcode.IsNullOrEmpty()) throw new Exception("条码不允许为空");
        if (query.Num is null or 0) throw new Exception("条码拆分数不允许为空或者为0");
        var _strMsg = "";
        var _intSum = "";
        var _cfBar = "";//拆分后条码
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("[prc_pda_STTL_CF]", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new("@outMsg", SqlDbType.NVarChar, 2000),
                        new("@outSum", SqlDbType.NVarChar, 300),
                        new("@outCfBar", SqlDbType.NVarChar, 300),
                        new("@c_user", query.userName),
                        new("@p_biLL_no", query.billNo),
                        new("@p_item_barcode", query.barcode),
                        new("@NUM", query.Num)
                    };
                    parameters[0].Direction = ParameterDirection.Output;
                    parameters[1].Direction = ParameterDirection.Output;
                    parameters[2].Direction = ParameterDirection.Output;
                    foreach (var parameter in parameters)
                        cmd.Parameters.Add(parameter);
                    cmd.ExecuteNonQuery();
                    _strMsg = parameters[0].Value.ToString();
                    _intSum = parameters[1].Value.ToString();
                    _cfBar = parameters[2].Value.ToString();
                    var result = Convert.ToInt32(_intSum);
                    if (result <= 0) throw new Exception(_strMsg);
                    var dto = new ProductionPickDto
                    {
                        daa001 = query.billNo,
                        barcode = query.barcode,//原条码
                        cfBarcode = _cfBar//拆分后条码
                    };
                    return dto;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
}