Browse Source

团组成本 提示 op 下调5% 注释

leiy 10 months ago
parent
commit
7f712bedc9

+ 14 - 14
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -5066,8 +5066,6 @@ namespace OASystem.API.Controllers
             return Ok(JsonView(false, "操作失败"));
         }
 
-
-
         /// <summary>
         /// 团组模块 - 出入境费用 - 子项删除
         /// </summary>
@@ -8640,19 +8638,21 @@ namespace OASystem.API.Controllers
                 {
                     decimal _rate = 1;
                     decimal _rate1 = item.Rate;
-                    decimal _scale = 0.95M;
+                    decimal _scale = 1;
+
+                    //decimal _scale = 0.95M; 雷怡 2024-06-11 10:06:08  屏蔽
                     #region 处理地接价格比例 总经理 国交部经理 主管 不下调 其他人 下调 5% 
-                    var userInfo = _usersRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0 && it.Id == dto.UserId).First();
-                    if (userInfo != null)
-                    {
-                        if (userInfo.DepId == 1 || userInfo.DepId == 7)
-                        {
-                            if (userInfo.JobPostId == 1 || userInfo.JobPostId == 22 || userInfo.JobPostId == 32)
-                            {
-                                _scale = 1.00M;
-                            }
-                        }
-                    }
+                    //var userInfo = _usersRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0 && it.Id == dto.UserId).First();
+                    //if (userInfo != null)
+                    //{
+                    //    if (userInfo.DepId == 1 || userInfo.DepId == 7)
+                    //    {
+                    //        if (userInfo.JobPostId == 1 || userInfo.JobPostId == 22 || userInfo.JobPostId == 32)
+                    //        {
+                    //            _scale = 1.00M;
+                    //        }
+                    //    }
+                    //}
                     #endregion
 
 

+ 156 - 77
OASystem/OASystem.Api/Controllers/ResourceController.cs

@@ -1757,7 +1757,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
         /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> OfficialActivitiesFileDownload(AskFileDownloadDto dto)
+        public async Task<IActionResult> OfficialActivitiesFileDownload(OfficialActivitiesFileDownload dto)
         {
             #region 参数验证
 
@@ -1768,9 +1768,10 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
             //团组基础信息
             var groupInfo = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0 && it.Id == dto.DiId).First();
             if (groupInfo == null) return Ok(JsonView(false, "该团组基本信息不存在"));
+            groupInfo.VisitCountry = groupInfo.VisitCountry.Replace("|", "、");
 
             //团组公务信息
-            var obDatas = _sqlSugar.Queryable<Res_OfficialActivities>().Where(it => it.IsDel == 0 && it.DiId == dto.DiId).ToList();
+            var obDatas = _sqlSugar.Queryable<Res_OfficialActivities>().Where(it => it.IsDel == 0 && it.DiId == dto.DiId).OrderBy(it => it.Date).ToList();
             if (obDatas.Count < 1) return Ok(JsonView(false, "请先录入公务信息!"));
 
             //请示数据库范例数据
@@ -1780,100 +1781,178 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
             List<TourClientListByDiIdView> guestInfos = new List<TourClientListByDiIdView>();
             if (guestResult.Result.Code == 0) guestInfos = guestResult.Result.Data as List<TourClientListByDiIdView>;
 
-            //载入模板
-            string tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/省外办出访请示 - 模板.docx";
-            var doc = new Document(tempPath);
-            DocumentBuilder builder = new DocumentBuilder(doc);
+            if (dto.FileType == 1)
+            {
+                //载入模板
+                string tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/省外办出访请示 - 模板.docx";
+                var doc = new Document(tempPath);
+                DocumentBuilder builder = new DocumentBuilder(doc);
 
-            //键值对存放数据
-            Dictionary<string, string> dic = new Dictionary<string, string>();
+                //键值对存放数据
+                Dictionary<string, string> dic = new Dictionary<string, string>();
 
-            //××(组团单位):接团客户信息团组
-            dic.Add("GroupClient", groupInfo.ClientUnit);
+                //××(组团单位):接团客户信息团组
+                dic.Add("GroupClient", groupInfo.ClientUnit);
 
-            //关于××(职务、姓名)等×人赴××(国家或地区)进行×××(出访目的)的请示
-            string guestName = "";
-            string guestJob = "";
-            string guestInfoStr = "";
-            var guestFirstInfo = guestInfos.FirstOrDefault();
-            if (guestFirstInfo != null)
-            {
-                guestName = guestFirstInfo.LastName + guestFirstInfo.FirstName;
-                guestJob = guestFirstInfo.Job;
-                guestInfoStr = $@"{guestJob}、{guestName}";
-            }
-            string askTitle = $@"关于{guestInfoStr}等{guestInfos.Count}人赴{groupInfo.VisitCountry}进行{groupInfo.VisitPurpose}的请示";
-            dic.Add("AskTitle", askTitle);
+                //关于××(职务、姓名)等×人赴××(国家或地区)进行×××(出访目的)的请示
+                string guestName = "";
+                string guestJob = "";
+                string guestInfoStr = "";
+                var guestFirstInfo = guestInfos.FirstOrDefault();
+                if (guestFirstInfo != null)
+                {
+                    guestName = guestFirstInfo.LastName + guestFirstInfo.FirstName;
+                    guestJob = guestFirstInfo.Job;
+                    guestInfoStr = $@"{guestJob}、{guestName}";
+                }
+                string askTitle = $@"关于{guestInfoStr}等{guestInfos.Count}人赴{groupInfo.VisitCountry}进行{groupInfo.VisitPurpose}的请示";
+                dic.Add("AskTitle", askTitle);
 
-            //应×××(邀请方名称+邀请人职务和姓名)的邀请,我单位拟派×××(职务、姓名)等×人(人数)于×××年×××月×××日赴×××(国家或地区)进行×××(出访目的)。现请示如下。
-            string visitDateStr = @$"{groupInfo.VisitDate.Year}年{groupInfo.VisitDate.Month}月{groupInfo.VisitDate.Day}日";
-            string obInfoStr = "";
-            foreach (var ob in obDatas)
-            {
-                obInfoStr += @$"{ob.Client}{ob.Job}{ob.Contact}、";
-            }
-            if (obInfoStr.Length > 0)
-            {
-                obInfoStr = obInfoStr.Substring(0, obInfoStr.Length - 1);
-            }
+                //应×××(邀请方名称+邀请人职务和姓名)的邀请,我单位拟派×××(职务、姓名)等×人(人数)于×××年×××月×××日赴×××(国家或地区)进行×××(出访目的)。现请示如下。
+                string visitDateStr = @$"{groupInfo.VisitDate.Year}年{groupInfo.VisitDate.Month}月{groupInfo.VisitDate.Day}日";
+                string obInfoStr = "";
+                string obBackgroundStr = "";//出访背景
+                foreach (var ob in obDatas)
+                {
+                    obInfoStr += @$"{ob.Client}{ob.Job}{ob.Contact}、";
+
+                    obBackgroundStr += $"{ob.Client}\r\n \t {ob.Setting}\r\n";
+
+                }
+                if (obInfoStr.Length > 0)
+                {
+                    obInfoStr = obInfoStr.Substring(0, obInfoStr.Length - 1);
+                }
+                string askSubTitle = $@"应{obInfoStr}的邀请,我单位拟派{guestInfoStr}等{guestInfos.Count}人于{visitDateStr}赴{groupInfo.VisitCountry}进行{groupInfo.VisitPurpose}。现请示如下。";
+                dic.Add("AskSubTitle", askSubTitle);
 
-            string askSubTitle = $@"应{obInfoStr}的邀请,我单位拟派{guestInfoStr}等{guestInfos.Count}人于{visitDateStr}赴{groupInfo.VisitCountry}进行{groupInfo.VisitPurpose}。现请示如下。";
-            dic.Add("AskSubTitle", askSubTitle);
+                //出访背景
+                dic.Add("OBSetting", obBackgroundStr);
 
-            //出访背景
-            dic.Add("AskTitle", askTitle);
+                //出访目的
+                dic.Add("VisitPurpose", groupInfo.VisitPurpose);
 
-            #region 填充word模板书签内容
-            foreach (var key in dic.Keys)
-            {
-                builder.MoveToBookmark(key);
-                builder.Write(dic[key]);
-            }
-            #endregion
+                //出访任务
+                //(一)××(国家或地区)
+                //1.拜访×××(机构名称)×××(姓名、职务)洽谈(或调研、推动等)×××(项目或机构名称等)。(例:拜会×××经济与发展司司长×××,商讨“×××活动”相关筹备工作。)
+                //2.拜访×××(机构名称)×××(姓名、职务)洽谈(或调研、推动等)×××(项目或机构名称等)。(例:拜会×××经济与发展司司长×××,商讨“×××活动”相关筹备工作。)
 
-            //获取word里所有表格
-            NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);
-            //获取所填表格的序数
-            Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;
+                string taskStr = "";
+                List<string> countrys = groupInfo.VisitCountry.Split("、").ToList();
+                int countryIndex = 1;
+                foreach (var item in countrys)
+                {
+                    string taskTitle = $"({GetToUpperNumber(countryIndex)}){item}\r\n";
+
+                    string taskContent = "";
+                    var countryObDatas = obDatas.Where(it => it.Client.Contains(item)).ToList();
+                    int obIndex = 1;
+                    foreach (var obInfo in countryObDatas)
+                    {
+                        taskContent += $"{obIndex}. 拜访{obInfo.Client}({obInfo.Contact}、{obInfo.Job})洽谈“{groupInfo.VisitPurpose}”相关工作。\r\n";
+                    }
 
-            var rowStart = tableOne.Rows[0]; //获取第1行
+                    taskStr += $"{taskTitle}{taskContent}";
 
-            //循环赋值
-            for (int i = 0; i < guestInfos.Count; i++)
-            {
-                var guestInfo = guestInfos[i];
-                builder.MoveToCell(0, i + 1, 0, 0);
-                builder.Write(guestInfo.LastName + guestInfo.FirstName);
+                    countryIndex++;
+                }
+                //出访任务
+                dic.Add("TaskContent", taskStr);
 
-                builder.MoveToCell(0, i + 1, 1, 0);
-                int sex = guestInfo.Sex;
-                string sexStr = string.Empty;
-                if (sex == 0) sexStr = "男";
-                else if (sex == 1) sexStr = "女";
-                else sexStr = "未设置";
-                builder.Write(sexStr);
+                //出访时间
+                //代表团拟于××年×月×日—×月×日出访,在外停留×天。其中,××国家(或地区)×天,××国家(或地区)×天。
+                string visitCountryStr = $"[OP行程单读取]";
+                string visitTimeQuantumStr = $"代表团拟于{groupInfo.VisitStartDate.Year}年{groupInfo.VisitStartDate.Month}月{groupInfo.VisitStartDate.Day}日—{groupInfo.VisitEndDate.Month}月{groupInfo.VisitEndDate.Day}日出访,在外停留{groupInfo.VisitDays}天。其中,{visitCountryStr}。";
+                //出访时间
+                dic.Add("TimeQuantum", visitTimeQuantumStr);
 
-                builder.MoveToCell(0, i + 1, 2, 0);
-                builder.Write(guestInfo.CompanyFullName + guestInfo.Job);
+                //出访路线
+                //成都—××(出境城市名称)—××(转机不出机场)—××(公务所在城市)……—××(入境城市名称)—成都。(例:成都—法兰克福<转机不出机场>—巴黎—巴塞罗那—阿姆斯特丹<转机不出机场>-成都)
+                string lineStr = GeneralMethod.GetGroupCityLine(groupInfo.Id, "—");
+                dic.Add("Line", lineStr);
 
+                //TripInfo
+                dic.Add("Line", lineStr);
 
-                builder.MoveToCell(0, i + 1, 3, 0);
-                string birthDay = "";
-                string birthDayStr = string.Empty;
-                if (!string.IsNullOrEmpty(birthDay))
+                #region 填充word模板书签内容
+                foreach (var key in dic.Keys)
                 {
-                    birthDayStr = Convert.ToDateTime(birthDay).ToString("yyyy-MM-dd");
+                    builder.MoveToBookmark(key);
+                    builder.Write(dic[key]);
                 }
-                builder.Write(birthDayStr);
+                #endregion
+
+                //获取word里所有表格
+                NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);
+                //获取所填表格的序数
+                Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;
+
+                var rowStart = tableOne.Rows[0]; //获取第1行
+
+                //循环赋值
+                for (int i = 0; i < guestInfos.Count; i++)
+                {
+                    var guestInfo = guestInfos[i];
+                    builder.MoveToCell(0, i + 1, 0, 0);
+                    builder.Write(guestInfo.LastName + guestInfo.FirstName);
+
+                    builder.MoveToCell(0, i + 1, 1, 0);
+                    int sex = guestInfo.Sex;
+                    string sexStr = string.Empty;
+                    if (sex == 0) sexStr = "男";
+                    else if (sex == 1) sexStr = "女";
+                    else sexStr = "未设置";
+                    builder.Write(sexStr);
+
+                    builder.MoveToCell(0, i + 1, 2, 0);
+                    builder.Write(guestInfo.CompanyFullName + guestInfo.Job);
+
+
+                    builder.MoveToCell(0, i + 1, 3, 0);
+                    string birthDay = "";
+                    string birthDayStr = string.Empty;
+                    if (!string.IsNullOrEmpty(birthDay))
+                    {
+                        birthDayStr = Convert.ToDateTime(birthDay).ToString("yyyy-MM-dd");
+                    }
+                    builder.Write(birthDayStr);
+
+                }
+
+                var fileDir = AppSettingsHelper.Get("WordBasePath");
+                string fileName = $"{groupInfo.TeamName}省外办出访请示.docx";
+                string filePath = fileDir + $@"OfficialActivities/{fileName}";
+                doc.Save(filePath);
+
+                string Url = $@"{AppSettingsHelper.Get("WordBaseUrl")}Office/Word/OfficialActivities/{fileName}";
+                return Ok(JsonView(true, "操作成功!", Url));
+            }
+            else if (dto.FileType == 2)
+            {
 
             }
 
-            var fileDir = AppSettingsHelper.Get("WordBasePath");
-            string fileName = $"{groupInfo.TeamName}省外办出访请示.docx";
-            string filePath = fileDir + $@"Ask/{fileName}";
-            doc.Save(filePath);
-            string Url = $@"{AppSettingsHelper.Get("WordBaseUrl")}Office/Word/Ask/{fileName}";
-            return Ok(JsonView(true, "操作成功!", Url));
+
+            return Ok(JsonView(true, "操作失败!"));
+        }
+
+        private string GetToUpperNumber(int num)
+        {
+            string numStr = "";
+
+            if (num == 1) numStr = "一";
+            else if (num == 2) numStr = "二";
+            else if (num == 3) numStr = "三";
+            else if (num == 4) numStr = "四";
+            else if (num == 5) numStr = "五";
+            else if (num == 6) numStr = "六";
+            else if (num == 7) numStr = "七";
+            else if (num == 8) numStr = "八";
+            else if (num == 9) numStr = "九";
+            else if (num == 10) numStr = "十";
+
+
+            return numStr;
         }
 
         #endregion

+ 83 - 0
OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs

@@ -1429,5 +1429,88 @@ namespace OASystem.API.OAMethodLib
 
         #endregion
 
+
+        #region op行程单 
+
+        /// <summary>
+        /// op行程单 团组 城市路径
+        /// </summary>
+        /// <param name="diid">团组Id</param>
+        /// <param name="separator">分隔符</param>
+        /// <returns></returns>
+        public static string GetGroupCityLine(int diid,string separator)
+        {
+            string city = string.Empty;
+            var blackCode = _dirRep._sqlSugar.Queryable<Air_TicketBlackCode>().Where(x => x.IsDel == 0 && x.DiId == diid).ToList();
+            if (blackCode.Count > 0)
+            {
+                var black = blackCode.First();
+                black.BlackCode = black.BlackCode == null ? "" : black.BlackCode;
+                var blackSp = Regex.Split(black.BlackCode, "\\d+\\.", RegexOptions.IgnoreCase).Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
+                if (blackSp.Length > 0)
+                {
+                    try
+                    {
+                        var cityArrCode = new List<string>(20);
+                        foreach (var item in blackSp)
+                        {
+                            var itemSp = item.Split(' ').Where(x => !string.IsNullOrWhiteSpace(x)).ToList();
+                            var IndexSelect = itemSp[2];
+                            var cityArrCodeLength = cityArrCode.Count - 1;
+                            var startCity = IndexSelect.Substring(0, 3);
+                            if (cityArrCodeLength > 0)
+                            {
+                                var arrEndCity = cityArrCode[cityArrCodeLength];
+                                if (arrEndCity != startCity)
+                                {
+                                    cityArrCode.Add(startCity.ToUpper());
+                                }
+                            }
+                            else
+                            {
+                                cityArrCode.Add(startCity.ToUpper());
+                            }
+
+                            var endCity = IndexSelect.Substring(3, 3);
+                            cityArrCode.Add(endCity.ToUpper());
+                        }
+
+                        var cityThree = string.Empty;
+                        cityArrCode.ForEach(x => cityThree += "'" + x + "',");
+                        cityThree = cityThree.TrimEnd(',');
+                        if (string.IsNullOrWhiteSpace(cityThree))
+                        {
+                            throw new Exception("error");
+                        }
+
+                        string sql = $"SELECT * FROM Res_ThreeCode rtc WHERE UPPER(rtc.Three) in ({cityThree}) ";
+                        var cityArr = _dirRep._sqlSugar.SqlQueryable<Res_ThreeCode>(sql).ToList();
+                        foreach (var item in cityArrCode)
+                        {
+                            var find = cityArr.Find(x => x.Three.ToUpper() == item.ToUpper());
+                            if (find != null)
+                            {
+                                city += find.City + separator;
+                            }
+                            else
+                            {
+                                city += item + "[三字码未收录]" + separator;
+                            }
+                        }
+                        city = city.TrimEnd(char.Parse(separator));
+                    }
+                    catch (Exception e)
+                    {
+                        city = "[黑屏代码格式不正确!]";
+                    }
+                }
+            }
+            else city = "[未录入黑屏代码]";
+
+            return city;
+        }
+
+        #endregion
+
     }
 }

+ 17 - 0
OASystem/OASystem.Domain/Dtos/Resource/OfficialActivitiesDto.cs

@@ -114,4 +114,21 @@ namespace OASystem.Domain.Dtos.Resource
         /// </summary>
         public int IsPay { get; set; }
     }
+
+    /// <summary>
+    /// 导出请示参数
+    /// </summary>
+    public class OfficialActivitiesFileDownload
+    {
+        /// <summary>
+        /// 文件类型
+        /// 1 省外办出访请示
+        /// 2 市外办出访请示
+        /// </summary>
+        public int FileType { get; set; } = 1;
+
+        public int DiId { get; set; }
+
+        public int[] IdList { get; set; }
+    }
 }

+ 1 - 16
OASystem/OASystem.Domain/Dtos/Resource/QueryAskDataDto.cs

@@ -66,20 +66,5 @@ namespace OASystem.Domain.Dtos.Resource
         /// </summary>
         public string Remark { get; set; }
     }
-    /// <summary>
-    /// 导出请示参数
-    /// </summary>
-    public class AskFileDownloadDto
-    {
-        /// <summary>
-        /// 文件类型
-        /// 1 省外办出访请示
-        /// 2 市外办出访请示
-        /// </summary>
-        public int FileType { get; set; } = 1;
-
-        public int DiId { get; set; }
-
-        public int[] IdList { get; set; }
-    }
+   
 }

+ 5 - 0
OASystem/OASystem.Domain/ViewModels/Groups/DelegationInfoView.cs

@@ -10,10 +10,15 @@ using System.Collections.Generic;
 using System.ComponentModel;
 using System.Linq;
 using System.Text;
+using System.Text.Json.Serialization;
 using System.Threading.Tasks;
+using JsonConverter = System.Text.Json.Serialization.JsonConverter;
 
 namespace OASystem.Domain.ViewModels.Groups
 {
+
+
+
     /// <summary>
     /// 接团信息
     /// 返回视图