Преглед изворни кода

增加日付申请下载Excel

leiy пре 1 година
родитељ
комит
30e1e28651

+ 82 - 1
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -1,10 +1,13 @@
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using OASystem.API.OAMethodLib.File;
 using OASystem.Domain;
 using OASystem.Domain.Dtos.Financial;
 using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.ViewModels.Financial;
 using OASystem.Domain.ViewModels.Groups;
 using OASystem.Infrastructure.Repositories.Financial;
+using System.Data;
 
 namespace OASystem.API.Controllers
 {
@@ -18,15 +21,19 @@ namespace OASystem.API.Controllers
         private readonly IMapper _mapper;
         private readonly IConfiguration _config;
         private readonly DailyFeePaymentRepository _daiRep;
+        private readonly SqlSugarClient _sqlSugar;
+        private readonly SetDataTypeRepository _setDataTypeRep;
 
         /// <summary>
         /// 初始化
         /// </summary>
-        public FinancialController(IMapper mapper, IConfiguration configuration, DailyFeePaymentRepository daiRep) 
+        public FinancialController(IMapper mapper, IConfiguration configuration, DailyFeePaymentRepository daiRep, SqlSugarClient sqlSugar, SetDataTypeRepository setDataTypeRep) 
         {
             this._mapper = mapper;
             this._config = configuration;
             this._daiRep = daiRep;
+            this._sqlSugar = sqlSugar;
+            this._setDataTypeRep = setDataTypeRep;
         }
 
         #region 日付申请
@@ -163,6 +170,80 @@ namespace OASystem.API.Controllers
             return Ok(JsonView(true));
         }
 
+        /// <summary>
+        /// 日付申请 Single Excel Download
+        /// </summary>
+        /// <param name="dto"> dto </param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostExcelDailyPaymentDownload(SearchDailyFeePaymentDto dto)
+        {
+            if (dto.PortType == 1 || dto.PortType == 2)
+            {
+                Fin_DailyFeePaymentInfolView feeData = new Fin_DailyFeePaymentInfolView();
+
+                string feeSql = string.Format(@"Select * From Fin_DailyFeePayment 
+                                                Where IsDel=0 And Id = {0} ", dto.Id);
+                feeData = await _sqlSugar.SqlQueryable<Fin_DailyFeePaymentInfolView>(feeSql).FirstAsync();
+                if (feeData == null)
+                {
+                    return Ok(JsonView(false, "暂无数据!"));
+                }
+
+                string feeContentSql = string.Format(@"Select * From Fin_DailyFeePaymentContent 
+                                                        Where IsDel=0 And DFPId = {0} ", dto.Id);
+                feeData.FeeContents = await _sqlSugar.SqlQueryable<Fin_DailyFeePaymentContentInfolView>(feeContentSql).ToListAsync();
+
+                if (feeData != null)
+                {
+
+                    string userName = string.Empty;
+                    string userSql = string.Format("Select * From  Sys_Users Where Id={0} And Isdel = {1}", feeData.CreateUserId, 0);
+                    Sys_Users user = await _sqlSugar.SqlQueryable<Sys_Users>(userSql).FirstAsync();
+                    if (user != null) { userName = user.CnName; }
+
+                    var setData = _setDataTypeRep.QueryDto<Sys_SetData, Fin_DailyFeePaymentPagePriceSubTypeView>().ToList();
+                    //48人员费用  49办公费用 50 销售费用 51 其他费用 55 大运会
+                    var priceSubTypeData = setData.Where(s => s.STid == 55).ToList();
+
+                    Dictionary<string, object> pairs = new Dictionary<string, object>();
+                    List<DataTable> datas = new List<DataTable>();
+
+                    //if (priceSubTypeData.Where(s => s.Id == feeData.PriceTypeId).ToList().Count() > 0)//大运会专属模板
+                    //{
+                        
+                    //    //AsposeHelper.ExpertExcelToModel("日常费用付款申请模板-大运会数据.xls", "DailyPayment", "大运会所有日常费用付款申请.xls",
+                    //    //    pairs, datas);
+                    //}
+                    //else  //日付常规模板
+                    //{
+                        pairs.Clear();
+                        pairs.Add("Opertor", userName);
+                        pairs.Add("DateTime", feeData.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")); 
+                        pairs.Add("FAuditStatus", feeData.FAuditDesc); 
+                        pairs.Add("MAuditStatus", feeData.MAuditDesc);
+                        pairs.Add("SumPrice", feeData.SumPrice);
+
+                        DataTable data = AsposeHelper.ListToDataTable("DailyFeePayment", feeData.FeeContents);
+                        datas.Clear();
+                        datas.Add(data);
+                        string fileName = string.Format("{0}-日常费用付款申请.xlsx", feeData.Instructions);
+                        string msg = AsposeHelper.ExpertExcelToModel("日常费用付款申请模板.xlsx", "DailyPayment", fileName, pairs, datas);
+
+                        return Ok(JsonView(true, msg));
+                    //}
+                   
+                }
+                else
+                {
+                    return Ok(JsonView(false, "暂无数据!"));
+                }
+            }
+
+           
+            return Ok(JsonView(true));
+        }
         #endregion
     }
 }

+ 36 - 14
OASystem/OASystem.Api/Controllers/SmallFunController.cs

@@ -190,20 +190,42 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false,"待自动补全的文本为空!"));
             }
 
-            Stopwatch sw = new Stopwatch();
-            sw.Start();
-            Thread.Sleep(999);
-            Console.WriteLine($"程序耗时:{sw.ElapsedMilliseconds}ms.");
-
-            var data = await ChatGPTTools.Completions(dto.Prompt);
-
-            sw.Stop();
-            if (data == null || data.Code != 0)
-            {
-                return Ok(JsonView(false, data.Msg+"【耗时:"+ sw.ElapsedMilliseconds/1000+ "ms】"));
-            }
-
-            return Ok(JsonView(200,  "【耗时:"+ sw.ElapsedMilliseconds/1000 + "s】", data.Data));
+            //Stopwatch sw = new Stopwatch();
+            //sw.Start();
+            //Thread.Sleep(999);
+            //Console.WriteLine($"程序耗时:{sw.ElapsedMilliseconds}ms.");
+
+           // var data = await ChatGPTTools.Completions(dto.Prompt);
+
+            //sw.Stop();
+            //if (data == null || data.Code != 0)
+            //{
+                 // return Ok(JsonView(false, data.Msg+"【耗时:"+ sw.ElapsedMilliseconds/1000+ "ms】"));
+                 //return Ok(JsonView(false, data.Msg ));
+            //}
+            string msg = @"前言
+人工智能领域的发展历程已经为我们带来了很多尖端技术,例如深度学习、自然语言处理等等。其中,GPT(Generative Pre-training Transformer)是一种基于Transformer架构的预训练语言模型,已经在语音识别、机器翻译、语言生成等领域得到广泛应用。本文将从GPT的基本原理、GPT的优缺点、GPT的应用等多个方面来展开探讨。
+GPT的基本原理
+GPT是语言模型的一种形式,它是由OpenAI实验室在2018年提出的。它是基于Transformer架构的预训练语言模型,并且通过处理大量的非标记语料来进行训练。GPT采用了单向的、基于自回归的方式来预测生成下一个单词的概率,也就是说,当输入前面的句子时,GPT可以预测下一个最有可能出现的单词是什么。
+GPT模型的主要组成部分是一个由多个层级堆叠而成的Transformer编码器,与其他基于Transformer的模型一样,它将输入序列转换为隐藏表示,再将其用于下游任务。每个GPT模型都有多个不同的版本,这些版本使用不同数量的层、不同数量的参数来进行训练。
+GPT的优缺点
+1、优点
+首先, GPT模型可以利用大量的非标记语料来进行预训练,这种预训练可以使得模型更好地理解自然语言,并且提高模型在语言生成等任务中的性能。
+其次,GPT模型使用了基于自回归的方式来进行预测,这使得模型在生成文本时具有一定的连贯性和可读性,从而提高了生成文本的质量。
+最后,GPT模型采用了Transformer架构来进行编码,这种编码方式不仅可以很好地处理长文本,而且还可以自适应地调节文本中不同单词之间的重要性,从而提高了模型的性能。
+2、缺点
+虽然GPT模型有很多优点,但是它也存在一些缺点。最明显的一个问题是GPT模型依赖于大量的训练数据,这使得它无法处理那些对数据需求比较大的应用场景。此外,由于GPT是一个生成式模型,因此在生成文本时,它也可能会出现重复、无意义的情况,这也是需要改进的地方。
+GPT的应用
+GPT的应用领域是很广泛的,下面我们将从自然语言处理、机器翻译、问答系统、语音识别等方面来进行介绍。
+1、自然语言处理
+GPT的应用最为广泛的领域之一就是自然语言处理。例如,它可以用于语言模型、文本分类、情感分析等等。其中,语言模型是GPT最基本的应用之一,它可以对一段文本中的下一个单词进行预测。
+2、机器翻译
+机器翻译是另一个GPT的应用领域,它可以将一种语言的文本转换为另一种语言的文本。使用GPT进行机器翻译的一个好处是可以在源语言和目标语言之间进行平滑的转换,从而提高翻译的质量。
+3、问答系统
+GPT可以用于构建问答系统,其基本原理是通过学习训练数据中的问题和答案,将问题转换为特定领域的答案。当输入一个问题时,GPT可以预测出最有可能的答案,从而提高问答系统的质量。
+4、语音识别
+GPT也可以用于语音识别,其原理与文本生成类似。使用GPT进行语音识别的一个好处是可以进行语音到文本的转化,从而将语音转化为可观看的文本内容。";
+            return Ok(JsonView(200,  " ", msg));
         }
 
 

+ 48 - 3
OASystem/OASystem.Api/OAMethodLib/File/AsposeHelper.cs

@@ -119,7 +119,8 @@ namespace OASystem.API.OAMethodLib.File
                     {
                         if (item.Rows.Count > 0)
                         {
-                            designer.SetDataSource(item.TableName, item);
+                            //designer.SetDataSource(item.TableName, item);
+                            designer.SetDataSource(item);
                         }
                     }
                 }
@@ -141,11 +142,12 @@ namespace OASystem.API.OAMethodLib.File
                 {
                     System.IO.Directory.CreateDirectory(path);//不存在就创建文件夹
                 }
-                string saveFilePath = string.Format("{0}{1}", path, saveFilName);
+                string saveFilePath = string.Format("{0}/{1}", path, saveFilName);
 
                 //保存合并后的文档
                 wbook.Save(saveFilePath);
-                saveFilePath = saveFilePath.Replace("C:", AppSettingsHelper.Get("OfficeBaseUrl")); //返回下载地址
+                //saveFilePath = saveFilePath.Replace("C:/Server/File/0A2023/", AppSettingsHelper.Get("OfficeBaseUrl")); //返回下载地址
+                saveFilePath = AppSettingsHelper.Get("OfficeBaseUrl") + "/Office/Excel/" + saveFolderName + "/" + saveFilName;
                 return saveFilePath; //返回下载地址
             }
             catch (Exception ex)
@@ -156,5 +158,48 @@ namespace OASystem.API.OAMethodLib.File
 
         #endregion
 
+        #region List<T> 转 Datatbale
+
+        /// <summary>
+        /// 将List转换为DataTable
+        /// </summary>
+        /// <param name="newTableName">newTableName</param>
+        /// <param name="list">请求数据</param>
+        /// <returns></returns>
+        public static DataTable ListToDataTable<T>(string newTableName, List<T> list)
+        {
+            //创建一个名为"tableName"的空表
+            DataTable dt = new DataTable(newTableName);
+
+            //创建传入对象名称的列
+            foreach (var item in list.FirstOrDefault().GetType().GetProperties())
+            {
+                dt.Columns.Add(item.Name);
+            }
+            //循环存储
+            foreach (var item in list)
+            {
+                //新加行
+                DataRow value = dt.NewRow();
+                //根据DataTable中的值,进行对应的赋值
+                foreach (DataColumn dtColumn in dt.Columns)
+                {
+                    int i = dt.Columns.IndexOf(dtColumn);
+                    //基元元素,直接复制,对象类型等,进行序列化
+                    if (value.GetType().IsPrimitive)
+                    {
+                        value[i] = item.GetType().GetProperty(dtColumn.ColumnName).GetValue(item);
+                    }
+                    else
+                    {
+                        value[i] = JsonConvert.SerializeObject(item.GetType().GetProperty(dtColumn.ColumnName).GetValue(item));
+                    }
+                }
+                dt.Rows.Add(value);
+            }
+            return dt;
+        }
+
+        #endregion
     }
 }

+ 37 - 0
OASystem/OASystem.Domain/ViewModels/Financial/Fin_DailyFeePaymentView.cs

@@ -165,6 +165,43 @@ namespace OASystem.Domain.ViewModels.Financial
         public string Instructions { get; set; }
         public decimal SumPrice { get; set; }
 
+        public int CreateUserId { get; set; }
+
+        /// <summary>
+        /// 财务审核
+        /// </summary>
+        public int FAudit { get; set; }
+
+        public string FAuditDesc
+        {
+            get
+            {
+                string str = "未审核";
+                if (FAudit == 0) str = "未审核";
+                else if (FAudit == 1) str = "已通过";
+                else if (FAudit == 2) str = "未通过";
+                return str;
+            }
+        }
+
+        /// <summary>
+        /// 总经理审核
+        /// </summary>
+        public int MAudit { get; set; }
+
+        public string MAuditDesc
+        {
+            get
+            {
+                string str = "未审核";
+                if (MAudit == 0) str = "未审核";
+                else if (MAudit == 1) str = "已通过";
+                else if (MAudit == 2) str = "未通过";
+                return str;
+            }
+        }
+
+        public DateTime CreateTime { get; set; }
         public List<Fin_DailyFeePaymentContentInfolView> FeeContents { get; set; }
     }
 

+ 30 - 8
OASystem/OASystem.Infrastructure/Repositories/Financial/DailyFeePaymentRepository.cs

@@ -2,12 +2,9 @@
 using OASystem.Domain;
 using OASystem.Domain.Dtos;
 using OASystem.Domain.Dtos.Financial;
-using OASystem.Domain.Dtos.UserDto;
 using OASystem.Domain.Entities.Financial;
-using OASystem.Domain.ViewModels;
 using OASystem.Domain.ViewModels.Financial;
 using OASystem.Infrastructure.Repositories.System;
-using Org.BouncyCastle.Asn1.Cms;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel.Design;
@@ -256,8 +253,6 @@ namespace OASystem.Infrastructure.Repositories.Financial
                 result.Msg = ex.Message;
             }
 
-
-
             return result;
 
         }
@@ -288,9 +283,34 @@ namespace OASystem.Infrastructure.Repositories.Financial
 
                 List<Fin_DailyFeePaymentContent> _feeContents = _mapper.Map<List<Fin_DailyFeePaymentContent>>(dto.FeeContents);
 
-                int? editFeeContsStatus = await _sqlSugar.Updateable(_feeContents)
-                    .UpdateColumns(a => new { a.PriceName, a.Price, a.Quantity, a.ItemTotal, a.Remark })
-                    .ExecuteCommandAsync();
+
+                await _sqlSugar.Updateable<Fin_DailyFeePaymentContent>()
+                                  .Where(a => a.DFPId == _fee.Id)
+                                  .SetColumns(a => new Fin_DailyFeePaymentContent
+                                  {
+                                      IsDel = 1,
+                                      DeleteUserId = _fee.CreateUserId,
+                                      DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                                  }).ExecuteCommandAsync();
+
+
+                if (_feeContents.Count > 0)
+                {
+                    foreach (var item in _feeContents)
+                    {
+
+                        item.DFPId = _fee.Id;
+                        item.CreateUserId = dto.UserId;
+
+                    }
+
+                    if (_feeContents.Count > 0)
+                    {
+                        await _sqlSugar.Insertable(_feeContents).ExecuteCommandAsync();
+
+                    }
+                }
+
                 _sqlSugar.CommitTran();
                 result.Code = 0;
             }
@@ -365,5 +385,7 @@ namespace OASystem.Infrastructure.Repositories.Financial
             }
             return result;
         }
+
+        
     }
 }

+ 3 - 1
OASystem/OASystem.Infrastructure/Tools/CommonFun.cs

@@ -1,4 +1,6 @@
-namespace OASystem.Infrastructure.Tools;
+using System.Reflection.Metadata;
+
+namespace OASystem.Infrastructure.Tools;
 
 /// <summary>
 /// 工具类