kyy
7 天以前 5c45b5f97c1365b6f89da2a0897a7c93fe16cb63
WebApi/Gs.Warehouse/Services/MesDepotsManager.cs
@@ -1,4 +1,5 @@
using System.Data;
using System.Data.SqlClient;
using System.Text;
using Gs.Entity.BaseInfo;
using Gs.Entity.Sys;
@@ -8,6 +9,7 @@
using Gs.Toolbox.ApiCore.Group;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using NPOI.SS.Formula.Functions;
using SqlSugar;
@@ -40,8 +42,7 @@
        try
        {
            var _sbWhere = new StringBuilder(" 1=1" + query.keyWhere);
            var _sbBy =
                new StringBuilder(query.sortName + " " + query.sortOrder);
            var _sbBy = new StringBuilder(query.sortName + " " + query.sortOrder);
            var totalCount = 0;
            var itemsList = Db.Queryable<MesDepots, SysOrganization, MesStaff, MesCustomer, MesSupplier, SysDepartment>(
                    (a, Org, c, d, f, g) => new object[]
@@ -87,6 +88,96 @@
    }
    /// <summary>
    ///     查询列表,支持分页
    /// </summary>
    /// <param name="query"></param>
    /// <returns></returns>
    [RequestMethod(RequestMethods.POST)]
    public ReturnDto<PageList<MesDepots>> GetListPage3(PageQuery query)
    {
        var pageList = new PageList<MesDepots>();
        try
        {
            // 构建查询条件
            var whereClause = "1=1" + (string.IsNullOrEmpty(query.keyWhere) ? "" : query.keyWhere);
            var orderBy = $"{query.sortName ?? "DepotCode"} {query.sortOrder ?? "ASC"}";
            var totalCount = 0;
            // 修正后的查询语法 - 注意LeftJoin的参数
            var queryable = Db.Queryable<MesDepots>()
                .LeftJoin<SysOrganization>((a, Org) => a.FSubsidiary == Org.Fid)
                .LeftJoin<MesStaff>((a, Org, MesStaff) => a.CreateBy == MesStaff.Id.ToString())  // 修正这一行
                .LeftJoin<MesCustomer>((a, Org, MesStaff, d) => d.Id.ToString() == a.ClientId.ToString())  // 修正参数
                .LeftJoin<MesSupplier>((a, Org, MesStaff, d, f) => f.Id.ToString() == a.SuppLierId.ToString())  // 修正参数
                .LeftJoin<SysDepartment>((a, Org, MesStaff, d, f, g) => g.Id.ToString() == a.department.ToString())  // 修正参数
                .LeftJoin<MesItems>((a, Org, MesStaff, d, f, g, h) => h.DepotCode.ToString() == a.DepotId.ToString())  // 修正参数
                .Where(whereClause)
                .GroupBy(a => new {
                    a.Guid,
                    a.DepotCode,
                    a.DepotName,
                    a.DepotId,
                    a.FSubsidiary,
                    a.CreateBy,
                    a.ClientId,
                    a.SuppLierId,
                    a.department,
                    a.IsNg,
                    a.DocumentStatus
                })
                .OrderBy(orderBy);
            // 使用更安全的映射方式
            var itemsList = queryable.Select<MesDepots>(a => new MesDepots
            {
                Guid = a.Guid,
                DepotCode = a.DepotCode,
                DepotName = a.DepotName,
                DepotId = a.DepotId,
                FSubsidiary = SqlFunc.Subqueryable<SysOrganization>()
                    .Where(org => org.Fid == a.FSubsidiary)
                    .Select(org => "(" + org.FNumber + ")" + org.Name),
                OrgName = SqlFunc.Subqueryable<SysOrganization>()
                    .Where(org => org.Fid == a.FSubsidiary)
                    .Select(org => org.Name),
                OrgId = SqlFunc.Subqueryable<SysOrganization>()
                    .Where(org => org.Fid == a.FSubsidiary)
                    .Select(org => org.FNumber),
                CreateBy = SqlFunc.Subqueryable<MesStaff>()
                    .Where(staff => staff.Id.ToString() == a.CreateBy)
                    .Select(staff => staff.StaffName),
                ClientId = SqlFunc.Subqueryable<MesCustomer>()
                    .Where(cust => cust.Id.ToString() == a.ClientId)
                    .Select(cust => cust.CustName),
                SuppLierId = SqlFunc.Subqueryable<MesSupplier>()
                    .Where(supp => supp.Id.ToString() == a.SuppLierId)
                    .Select(supp => supp.SuppName),
                department = SqlFunc.Subqueryable<SysDepartment>()
                    .Where(dept => dept.Id.ToString() == a.department)
                    .Select(dept => dept.Departmentname),
                IsNg = a.IsNg + ":" + (a.IsNg == "A" ? "正常" : "禁用"),
                DocumentStatus = a.DocumentStatus + ":" +
                    SqlFunc.IF(a.DocumentStatus == "Z").Return("暂存")
                    .ElseIF(a.DocumentStatus == "A").Return("创建")
                    .ElseIF(a.DocumentStatus == "B").Return("审核中")
                    .ElseIF(a.DocumentStatus == "C").Return("已审核")
                    .ElseIF(a.DocumentStatus == "D").Return("重新审核")
                    .End(a.DocumentStatus)
            })
            .ToPageList(query.currentPage, query.everyPageSize, ref totalCount);
            pageList = new PageList<MesDepots>(itemsList, totalCount, query.everyPageSize);
            return ReturnDto<PageList<MesDepots>>.QuickReturn(pageList, ReturnCode.Success, "读取成功");
        }
        catch (Exception ex)
        {
            return ReturnDto<PageList<MesDepots>>.QuickReturn(pageList,
                ReturnCode.Default, $"系统错误: {ex.Message}");
        }
    }
    /// <summary>
    ///     查询列表,支持分页,用于各种绑定
    /// </summary>
    /// <param name="query"></param>
@@ -99,6 +190,7 @@
        var sortName = string.IsNullOrEmpty(model.sortName) ? "a.PAGE_GROUP" : model.sortName;
        var keyWhere = model.keyWhere;
        string keyType = model.keyType;
        string keyWord = model.keyWord;
        var sbSql = new StringBuilder();
        sbSql.Append("  SELECT * FROM ");
        sbSql.Append(" (SELECT N'(' +[Org].[FNumber] + N')'  +[Org].[NAME]  AS [FSubsidiary2] ,");
@@ -107,12 +199,20 @@
        sbSql.Append(" [f].[supp_name] AS [SuppLierId] , [g].[departmentname] AS [department2] ,");
        sbSql.Append(" ( CASE  WHEN ( [a].[is_ng] = N'A' ) THEN N'正常'  ELSE N'禁用' END ) AS [IsNg] ");
        sbSql.Append(", [a].*,ROW_NUMBER() OVER(ORDER BY org.FNumber asc ,a.depot_code asc) AS RowIndex ");
        if (string.IsNullOrEmpty(keyWord))
        {
            sbSql.Append(",'' as kcQty");
        }
        else
        {
            sbSql.Append(", isnull((select top 1 库存对比 from [dbo].[即时库存差异表] where 物料ID=" + keyWord + " and 仓库ID=[a].[depot_id]),'('+a.depot_name+')0/0') AS [kcQty]  ");
        }
        if (string.IsNullOrEmpty(keyType))
        {
            sbSql.Append(",cast(0 as bit) as chkInt");
        }
        else
            sbSql.Append(",cast( (select count(1)  from SYS_USER_BIND b where b.userGuid='" + keyType + "' and b.aboutGuid=a.guid)  as bit) as chkInt ");
            sbSql.Append(",cast( (select count(1)  from SYS_USER_BIND b where b.userGuid='" + keyType + "' and b.aboutGuid=a.guid  and b.fType='仓库')  as bit) as chkInt ");
        sbSql.Append(" FROM [MES_DEPOTS] [a] Left JOIN [SYS_ORGANIZATION] [Org] ON ( [a].[FSubsidiary] = [Org].[FID] )");
        sbSql.Append(" Left JOIN [MES_STAFF] [c] ON ( [a].[create_by] = CAST([c].[id] AS NVARCHAR(50))) ");
        sbSql.Append(" Left JOIN [MES_CUSTOMER] [d] ON (CAST([d].[id] AS NVARCHAR(50)) = CAST([a].[Client_Id] AS NVARCHAR(50))) ");
@@ -185,7 +285,7 @@
        }
        m.IsNg = m.IsNg + ":" + (m.IsNg == "A" ? "正常" : "禁用");
        var lst = new MesDepotSectionsManager();
        m.list = lst.GetList(it => it.DepotGuid == m.Guid).OrderBy(it => it.DepotSectionCode).ToList();
        m.list = lst.GetList(it => it.DepotGuid == m.Guid).OrderBy(it => it.Xh).ToList();
        if (m != null)
            return ReturnDto<MesDepots>.QuickReturn(m, ReturnCode.Success, "读取成功!");
        return ReturnDto<MesDepots>.QuickReturn(m, ReturnCode.Default, "读取失败!");
@@ -297,4 +397,67 @@
        }
        return j;
    }
    /// <summary>
    ///     查询列表,支持分页(保持输出参数方式)
    /// </summary>
    [RequestMethod(RequestMethods.POST)]
    public ReturnDto<PageList<dynamic>> GetListCgy(PageQuery model)
    {
        string currentId = "";//默认采购员
        int currentPage = model.currentPage;
        int everyPageSize = model.everyPageSize;
        string sortName = model.sortName;
        string keyWhere = model.keyWhere;
        SqlParameter[] parameters =
        {
                new("@inCurrentPage", currentPage),
                new("@inEveryPageSize", everyPageSize),
                new("@inSortName", sortName),
                new("@inSortOrder", ""),
                new("@inQueryWhere", keyWhere),
                new("@inFid", ""),
                new("@inP1", ""),
                new("@inP2", ""),
                new("@inP3", ""),
                new("@inP4", _userGuid)//当前登录用户guid,将根据他读取仓管员
            };
        var dset = new DataSet();
        var _pglist = new PageList<dynamic>
        {
            total = 0,
            everyPageSize = 0,
            pages = 0,
            list = new List<dynamic>()
        };
        try
        {
            dset = DbHelperSQL.RunProcedure("prc_cgy_lst", parameters, "0");
            if (dset != null && dset.Tables.Count > 0 &&
                dset.Tables[0].Rows.Count > 0) //有数据
            {
                var intTotal = int.Parse(dset.Tables[1].Rows[0]["intTotal"].ToString());
                var pages = intTotal % everyPageSize != 0
                    ? intTotal / everyPageSize + 1
                    : intTotal / everyPageSize;
                _pglist.total = intTotal;
                _pglist.everyPageSize = everyPageSize;
                _pglist.pages = pages;
                var _dy = dset.Tables[0].TableToDynamicList();
                _pglist.list = _dy;
                currentId = dset.Tables[1].Rows[0]["mrCgy"].ToString();
            }
        }
        catch (Exception ex)
        {
            LogHelper.Debug(ToString(), ex.Message);
            return ReturnDto<PageList<dynamic>>.QuickReturn(_pglist,
          ReturnCode.Exception,"-1");
        }
        return ReturnDto<PageList<dynamic>>.QuickReturn(_pglist,
            ReturnCode.Success, currentId);
    }
}