Bladeren bron

Merge branch 'develop' of http://132.232.92.186:3000/XinXiBu/OA2023 into develop

LEIYI 7 maanden geleden
bovenliggende
commit
b32b65e82d

+ 9 - 0
OASystem/OASystem.Api/Controllers/ResourceController.cs

@@ -2711,6 +2711,15 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
 
             try
             {
+
+                var tongzhi = _ticketBlackCodeRep.DescBlackToVisa(dto.DiId);
+                if (tongzhi.Code == 0)
+                {
+                    var info = tongzhi.Data.GetType().GetProperty("info").GetValue(tongzhi.Data) as List<string>;
+                    if (info != null)
+                        await AppNoticeLibrary.SendUserMsg_blackAirInfo_ToVisaUser(dto.DiId, info.ToArray());
+                }
+
                 //行程代码变更通知
                 await AppNoticeLibrary.SendUserMsg_GroupShare_ToDP(dto.DiId, dto.CreateUserId);
             }

+ 31 - 0
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Config.cs

@@ -495,6 +495,28 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
 
             return result;
         }
+
+
+        public static string BlackCodeInfo_ToVisaUser(BlackCodeInfo_ToVisaUser info)
+        {
+            string result = string.Format(@" `国家出入时间通知`  
+
+<font color='info'>详细时间</font>
+
+>团组名称:{0}
+>更新时间:<font color='warning'>{1}</font>
+
+ ", info.TeamName, info.RefreshDate);
+
+
+            foreach (var item in info.info)
+            {
+                result += $@"
+><font color='comment'>{item}</font>";
+            }
+
+            return result;
+        }
     }
 
 
@@ -605,6 +627,15 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
         public string ClientName { get; set; }
     }
 
+    public class BlackCodeInfo_ToVisaUser
+    {
+        public string TeamName { get; set; }
+
+        public string[] info { get; set; }
+
+        public string RefreshDate { get; set; }
+    }
+
     #endregion
 
 }

+ 27 - 0
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Library.cs

@@ -1076,6 +1076,33 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
             return true;
         }
 
+        public static async Task<bool> SendUserMsg_blackAirInfo_ToVisaUser(int diId , string[] arr)
+        {
+            Grp_DelegationInfo groupInfo = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == diId).First();
+
+            List<string> userIds = new List<string>() { "235" };
+            List<string> qwUserIdList = GetQiyeChatUserIdList(userIds);
+
+            BlackCodeInfo_ToVisaUser info = new BlackCodeInfo_ToVisaUser()
+            {
+                RefreshDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm"),
+                TeamName = groupInfo.TeamName,
+                info = arr
+            };
+
+            if (qwUserIdList.Count > 0)
+            {
+                ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.BlackCodeInfo_ToVisaUser(info));
+                if (result.errcode != 0)
+                {
+                    //抄送日志 
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
 
         #endregion
 

+ 281 - 0
OASystem/OASystem.Infrastructure/Repositories/Resource/TicketBlackCodeRepository.cs

@@ -1,11 +1,15 @@
 using AutoMapper;
+using EyeSoft.Collections.Generic;
+using EyeSoft.Extensions;
 using OASystem.Domain;
 using OASystem.Domain.Dtos.Resource;
 using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.Entities.Resource;
 using OASystem.Domain.ViewModels.Groups;
 using OASystem.Domain.ViewModels.Resource;
+using SqlSugar.Extensions;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -210,5 +214,282 @@ namespace OASystem.Infrastructure.Repositories.Resource
 
             return new Result() { Code = -1,Msg="操作失败" };
         }
+
+        public Result DescBlackToVisa(int diid)
+        {
+            Result rt  = new Result();
+            rt.Data = Array.Empty<string>();
+
+            var group = _sqlSugar.Queryable<Grp_DelegationInfo>()
+                                 .First(x => x.Id == diid && x.IsDel == 0);
+
+            Func<string,string> RemoveSpecialCharacters = ( string input ) => {
+                string pattern = @"[^\u4e00-\u9fa5]+";
+                // 用空字符串替换所有匹配到的字符
+                return Regex.Replace(input, pattern, "|");
+            };
+
+            if (group != null)
+            {
+                var country =  RemoveSpecialCharacters(group.VisitCountry);
+                if (!country.IsNullOrWhiteSpace())
+                {
+                    var countryArr = country.Split('|');
+                    var blackCode = _sqlSugar.Queryable<Air_TicketBlackCode>().First(x => x.IsDel == 0 && x.DiId == diid);
+                    //去除序号
+                    string[] CodeList = Regex.Split(blackCode.BlackCode, "\\d+\\.", RegexOptions.IgnoreCase)
+                        .Where(str => !string.IsNullOrWhiteSpace(str)).ToArray();
+
+                    var threeCodeList = new int[10].Select(x => new
+                    {
+                        code = "",
+                        startTime = DateTime.MinValue,
+                        endTime = DateTime.MinValue,
+                        country = ""
+                    }).ToArray();
+                    
+
+                    //读取单条黑屏代码
+                    for (int j = 0; j < CodeList.Count(); j++)
+                    {
+                        //去除多余空格,方法二使用Split()方法进行分割,分割有一个选项是RemoveEmptyEntries
+                        CodeList[j] = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty).TrimStart().TrimEnd();
+                        string[] Info = CodeList[j].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
+                        var threeCode = Info[2];
+                        var startTimeStr = Info[3];
+                        var endTimeStr = Info[4];
+
+                        var monthEn = Info[1].Substring(4, 3);
+
+                        //月                  
+                        int month = Convert.ToInt32(GetLonger(monthEn));
+                        //日
+                        int day = Convert.ToInt32(Info[1].Substring(2, 2));
+
+                        var startTime = new DateTime(DateTime.Now.Year, month, day, startTimeStr.Substring(0,2).ObjToInt(), startTimeStr.Substring(2, 2).ObjToInt(), 00); //
+
+                        var endTime = new DateTime(DateTime.Now.Year, month, day, endTimeStr.Substring(0, 2).ObjToInt(), endTimeStr.Substring(2, 2).ObjToInt(), 00); //
+
+                        if (!threeCode.IsNullOrWhiteSpace() && threeCode.Length > 5)
+                        {
+                            var start = threeCode.Substring(0, 3).ToLower();
+                            var end = threeCode.Substring(3, 3).ToLower();
+                            if (!threeCodeList.Select(x => x.code).Contains(end)) {
+
+                                var temp = threeCodeList[0] with
+                                {
+                                    code = end,
+                                    startTime = startTime,
+                                    endTime = endTime,
+                                    country = ""
+                                };
+
+                                for (int i = 0; i < threeCodeList.Length; i++)
+                                {
+                                    if (threeCodeList[i].code.IsNullOrWhiteSpace())
+                                    {
+                                        threeCodeList[i] = temp;
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+
+                    var dbThreeCode = _sqlSugar.Queryable<Res_ThreeCode>()
+                                        .Where(x => x.IsDel == 0 && threeCodeList.Select(x => x.code).Contains(x.Three.ToLower()))
+                                        .ToList();
+                    var data = new ArrayList();
+                    var info = new List<string>();
+
+                    foreach (var code in dbThreeCode)
+                    {
+                        for (int i = 0; i < threeCodeList.Length; i++)
+                        {
+                            if (threeCodeList[i].code == code.Three.ToLower()) {
+                                threeCodeList[i] = threeCodeList[i] with
+                                {
+                                     country = code.Country,
+                                };
+                                if (countryArr.Contains(code.Country))
+                                {
+                                    data.Add(threeCodeList[i]);
+                                    try
+                                    {
+                                        info.Add($@"{code.Country} 抵达时间:{threeCodeList[i].endTime.ToString("yyyy-MM-dd HH:mm")}  离开时间:{threeCodeList[i + 1].startTime.ToString("yyyy-MM-dd HH:mm")} ");
+                                    }
+                                    catch (Exception)
+                                    {
+                                        info.Add($@"{code.Country} 抵达时间:{threeCodeList[i].endTime.ToString("yyyy-MM-dd HH:mm")}  离开时间: 未知 ");
+                                    }
+                                   
+                                }
+                                break;
+                            }
+                        }
+                    }
+                    rt.Msg = "SUCCESS!";
+                    rt.Code = 0;
+                    rt.Data = new
+                    {
+                        data = data,
+                        info = info
+                    };
+                }
+
+            }
+
+            
+
+            return rt;
+        }
+
+        public string GetLonger(string temp)
+        {
+            string str = "";
+            switch (temp.ToUpper())
+            {
+                case "美元":
+                    str = "USD";
+                    break;
+                case "日元":
+                    str = "JPY";
+                    break;
+                case "英镑":
+                    str = "GBP";
+                    break;
+                case "欧元":
+                    str = "EUR";
+                    break;
+                case "港币":
+                    str = "HKD";
+                    break;
+                case "MO":
+                    str = "星期一";
+                    break;
+                case "TU":
+                    str = "星期二";
+                    break;
+                case "WE":
+                    str = "星期三";
+                    break;
+                case "TH":
+                    str = "星期四";
+                    break;
+                case "FR":
+                    str = "星期五";
+                    break;
+                case "SA":
+                    str = "星期六";
+                    break;
+                case "SU":
+                    str = "星期天";
+                    break;
+                case "JAN":
+                    str = "01";
+                    break;
+                case "FEB":
+                    str = "02";
+                    break;
+                case "MAR":
+                    str = "03";
+                    break;
+                case "APR":
+                    str = "04";
+                    break;
+                case "MAY":
+                    str = "05";
+                    break;
+                case "JUN":
+                    str = "06";
+                    break;
+                case "JUL":
+                    str = "07";
+                    break;
+                case "AUG":
+                    str = "08";
+                    break;
+                case "SEP":
+                    str = "09";
+                    break;
+                case "OCT":
+                    str = "10";
+                    break;
+                case "NOV":
+                    str = "11";
+                    break;
+                case "DEC":
+                    str = "12";
+                    break;
+                case "MONDAY":
+                    str = "星期一";
+                    break;
+                case "TUESDAY":
+                    str = "星期二";
+                    break;
+                case "WEDNESDAY":
+                    str = "星期三";
+                    break;
+                case "THURSDAY":
+                    str = "星期四";
+                    break;
+                case "FRIDAY":
+                    str = "星期五";
+                    break;
+                case "SATURDAY":
+                    str = "星期六";
+                    break;
+                case "SUNDAY":
+                    str = "星期日";
+                    break;
+                case "01":
+                    str = "JAN";
+                    break;
+                case "02":
+                    str = "FEB";
+                    break;
+                case "03":
+                    str = "MAR";
+                    break;
+                case "04":
+                    str = "APR";
+                    break;
+                case "05":
+                    str = "MAY";
+                    break;
+                case "06":
+                    str = "JUN";
+                    break;
+                case "07":
+                    str = "JUL";
+                    break;
+                case "08":
+                    str = "AUG";
+                    break;
+                case "09":
+                    str = "SEP";
+                    break;
+                case "10":
+                    str = "OCT";
+                    break;
+                case "11":
+                    str = "NOV";
+                    break;
+                case "12":
+                    str = "DEC";
+                    break;
+                case "2":
+                    str = "空客A";
+                    break;
+                case "3":
+                    str = "空客A";
+                    break;
+                case "7":
+                    str = "波音";
+                    break;
+            }
+
+            return str;
+        }
     }
 }