xiaojiao
2026-01-12 c3b60d865c3457c35054446e81b352e93e00a696
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA.Core/Utilities/EPPlusHelper.cs
@@ -1,8 +1,12 @@
using OfficeOpenXml;
using Microsoft.Extensions.Configuration;
using OfficeOpenXml;
using OfficeOpenXml.Style;
using Renci.SshNet;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Linq;
@@ -11,12 +15,74 @@
using WIDESEA.Core.DBManager;
using WIDESEA.Core.Extensions;
using WIDESEA.Core.Infrastructure;
using WIDESEA.Core.ManageUser;
using WIDESEA.Entity.DomainModels;
using static Dapper.SqlMapper;
//using WIDESEA.Services.Repositories;
namespace WIDESEA.Core.Utilities
{
    public class EPPlusHelper
    {
        // å…¨å±€é…ç½®å¯¹è±¡ï¼ˆæŽ¨èæ³¨å…¥ï¼Œæ­¤å¤„为简化直接读取)
        private static readonly IConfiguration _configuration;
        // é™æ€æž„造函数:初始化配置读取
        static EPPlusHelper()
        {
            // æž„建配置读取器,读取appsettings.json
            _configuration = new ConfigurationBuilder()
                .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) // è®¾ç½®é…ç½®æ–‡ä»¶æ‰€åœ¨ç›®å½•
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) // å¿…须存在,支持热重载
                .Build();
        }
        public static List<Dt_EmptyPallet> GetAllUsers()
        {
            //string _connectionString = "Server=.;Database=BJ_ZCWIDESEA_ZCJWMS;User Id=sa;Password=123;TrustServerCertificate=True;";
            string _connectionString = _configuration["Connection:DbConnectionString"];
            // 1. ç¼–写SQL语句
            string sql = "SELECT * FROM Dt_EmptyPallet;";
            // 2. åˆ›å»ºæ•°æ®åº“连接并执行查询
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                // 3. è°ƒç”¨Dapper的Query方法,自动映射到User实体列表
                // Query<T> æ˜¯Dapper核心方法,T是你要映射的实体类型
                List<Dt_EmptyPallet> users = connection.Query<Dt_EmptyPallet>(sql).ToList();
                return users;
            } // using块结束会自动释放连接,无需手动Close
        }
        public static void UpdateEmptyPallet(int EmptyPallet_id, string EmptyPallet_palletweight)
        {
            // è¯»å–连接字符串
            string _connectionString = _configuration["Connection:DbConnectionString"];
            // æ ¸å¿ƒä¿®æ”¹ï¼šä½¿ç”¨å‚数化SQL,绝对不要拼接字符串
            string sql = "UPDATE Dt_EmptyPallet SET EmptyPallet_palletweight = @EmptyPallet_palletweight WHERE EmptyPallet_id = @EmptyPallet_id;";
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                // æ‰§è¡Œæ›´æ–°å¹¶æŽ¥æ”¶å—影响行数
                int affectedRows = connection.Execute(sql, new
                {
                    EmptyPallet_id = EmptyPallet_id,
                    EmptyPallet_palletweight = EmptyPallet_palletweight
                });
                // å¯é€‰ï¼šæ‰“印结果,方便排查
                if (affectedRows == 0)
                {
                    Console.WriteLine($"修改失败:未找到EmptyPallet_id={EmptyPallet_id}的记录,或字段值未变化");
                }
                else
                {
                    Console.WriteLine($"修改成功!共更新{affectedRows}条记录");
                }
            }
        }
        /// <summary>
        /// å¯¼å…¥æ¨¡æ¿(仅限框架导出模板使用)(202.05.07)
        /// </summary>
@@ -34,8 +100,58 @@
            if (!file.Exists) return responseContent.Error("未找到上传的文件,请重新上传");
            List<T> entities = new List<T>();
            List<Dt_EmptyPallet> TempList = GetAllUsers();
            using (ExcelPackage package = new ExcelPackage(file))
            {
                ExcelWorksheet sheet2 = package.Workbook.Worksheets.FirstOrDefault();
                if (typeof(T).Name == "Dt_EmptyPallet")
                {
                    for (int m = sheet2.Dimension.Start.Row + 1, n = sheet2.Dimension.End.Row; m <= n; m++)
                    {
                        T entity = Activator.CreateInstance<T>();
                        string barcode = "";
                        string weight = "";
                        for (int j = 1, k = 2; j <= k; j++)
                        {
                            if (j == 1)
                            {
                                barcode = sheet2.Cells[m, j].Value?.ToString();
                            }
                            else
                            {
                                weight = sheet2.Cells[m, j].Value?.ToString();
                            }
                        }
                        if (barcode == "" || barcode == null || weight == "" || weight == null)
                        {
                            continue;
                        }
                        Dt_EmptyPallet Temps =  TempList.Where(x => x.EmptyPallet_name == barcode).FirstOrDefault();
                        if (Temps != null)
                        {
                            // è¯´æ˜Žåº“存中有 é‚£å°±ä¿®æ”¹ä»–的重量
                            UpdateEmptyPallet(Temps.EmptyPallet_id, weight);
                            continue;
                        }
                        //var emptyPalletRepo = Dt_EmptyPalletRepository.Instance;
                        // UserContext.Current.UserTrueName;
                        Dt_EmptyPallet dt_Empty = new Dt_EmptyPallet();
                        dt_Empty.EmptyPallet_name = barcode;
                        dt_Empty.EmptyPallet_palletweight = weight;
                        dt_Empty.EmptyPallet_creator = UserContext.Current.UserTrueName;
                        dt_Empty.EmptyPallet_createtime = DateTime.Now;
                        dt_Empty.EmptyPallet_modifier = UserContext.Current.UserTrueName;
                        dt_Empty.EmptyPallet_modifiertime = DateTime.Now;
                        //Dt_EmptyPalletRepository.Instance.Add(dt_Empty, true);
                        dt_Empty.SetCreateDefaultVal();
                        entities.Add((T)(object)dt_Empty);
                    }
                    return responseContent.OK("上传成功", entities);
                }
                if (package.Workbook.Worksheets.Count == 0 ||
                    package.Workbook.Worksheets.FirstOrDefault().Dimension.End.Row <= 1)
                    return responseContent.Error("未导入数据");
@@ -451,6 +567,23 @@
            return fullPath;
        }
        public static Dictionary<string, string> TempDict = new Dictionary<string, string>();
        // å®šä¹‰èŽ·å–å­—æ®µä¿¡æ¯çš„æ–¹æ³•
        public static void GetEntityFieldInfo<T>() where T : class
        {
            // èŽ·å–å®žä½“ç±»çš„æ‰€æœ‰å±žæ€§
            PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (var prop in properties)
            {
                // 1. èŽ·å–å­—æ®µåç§°ï¼ˆå±žæ€§åï¼‰
                string fieldName = prop.Name;
                // 2. èŽ·å–Display特性的Name值(注释)
                var displayAttr = prop.GetCustomAttribute<DisplayAttribute>();
                string comment = displayAttr?.Name ?? "无注释";
                TempDict[fieldName] = comment;
            }
        }
        /// <summary>
        /// èŽ·å–å¯¼å‡ºçš„åˆ—çš„æ•°æ®ä¿¡æ¯
        /// </summary>
@@ -473,16 +606,38 @@
            {
                query = query.Where(x => x.IsDisplay == 1);
            }
            List<CellOptions> cellOptions = query.OrderByDescending(r => r.OrderNo).Select(c => new CellOptions()
            List<CellOptions> cellOptions = new List<CellOptions>();
            if (tableName == "Dt_EmptyPallet")
            {
                ColumnName = c.ColumnName,
                ColumnCNName = c.ColumnCnName,
                DropNo = c.DropNo,
                Requierd = c.IsNull > 0 ? false : true,
                ColumnWidth = c.ColumnWidth ?? 90,
                EditType = c.EditType,
                SearchType = c.SearchType
            }).ToList();
                GetEntityFieldInfo<Dt_EmptyPallet>();
                foreach (KeyValuePair<string, string> kvp in TempDict)
                {
                    cellOptions.Add(new CellOptions()
                    {
                        ColumnName = kvp.Key,
                        ColumnCNName = kvp.Value,
                        DropNo = null,
                        Requierd = false,
                        ColumnWidth = 120,
                        EditType = null,
                        SearchType = null
                    });
                }
            }
            else
            {
                cellOptions = query.OrderByDescending(r => r.OrderNo).Select(c => new CellOptions()
                {
                    ColumnName = c.ColumnName,
                    ColumnCNName = c.ColumnCnName,
                    DropNo = c.DropNo,
                    Requierd = c.IsNull > 0 ? false : true,
                    ColumnWidth = c.ColumnWidth ?? 90,
                    EditType = c.EditType,
                    SearchType = c.SearchType
                }).ToList();
            }
            if (temlate) return cellOptions;