Browse Source

成本返回通知状态,
成本添加生成行程Api,
成本数据初始化添加判断是否存在行程

yuanrf 9 months ago
parent
commit
649b7b6dde

+ 48 - 3
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -7104,6 +7104,15 @@ namespace OASystem.API.Controllers
 
             var groupChecks = _checkBoxs.GetCheckBoxsByDiid(diid);  //团组选中信息  可枚举
             var groupCost = _GroupCostRepository.GetAllByDiid(diid);  //团组列表信息  
+
+            var create = _GroupCostRepository.
+                        CreateGroupCostByBlackCode(dto.Diid);
+
+            if (groupCost.Count == 0 && create.Code == 0)
+            {
+                groupCost = (create.Data as List<Grp_GroupCost>) ?? new List<Grp_GroupCost>();
+            }
+
             var groupCostMap = _mapper.Map<List<Grp_GroupCostDto>>(groupCost);
             var hotelNumber = _CostTypeHotelNumberRepository.GetCostTypeHotelNumberByDiid(diid); //酒店数量 可枚举
             var GroupCostParameter = _GroupCostParameterRepository.GetGroupCostParameterListByDiid(diid); //成本系数 可枚举
@@ -7134,8 +7143,9 @@ namespace OASystem.API.Controllers
                     x.VisaPrice,
                     x.Id,
                 }).ToList(),
-                baoPi = _GroupCostParameterRepository.GetBaoPi(diid)
-            }));
+                baoPi = _GroupCostParameterRepository.GetBaoPi(diid),
+                blackCodeIsTrue = create.Code == 0 ? true : false
+            })) ;
         }
 
         /// <summary>
@@ -7278,7 +7288,7 @@ namespace OASystem.API.Controllers
                         msg = "通知成功,其他模块操作人员可见此成本信息!";
                     }
 
-                    jw = JsonView(isTrue, msg);
+                    jw = JsonView(isTrue, msg, new { IsShare });
                 }
                 else
                 {
@@ -8949,6 +8959,41 @@ namespace OASystem.API.Controllers
             }
         }
 
+        /// <summary>
+        /// 根据黑屏代码重新生成行程
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public IActionResult CraeteGroupCostTravel(GroupCostInItDto dto)
+        {
+            var jw = JsonView(false);
+            var Create =_GroupCostRepository.
+                CreateGroupCostByBlackCode(dto.Diid);
+
+            jw.Msg = Create.Msg;
+            if (Create.Code == 0)
+            {
+                jw.Code = 200;
+                jw.Data = new
+                {
+                    groupCost = Create.Data,
+                    blackCodeIsTrue = true
+                };
+            }
+            else
+            {
+                jw.Code = 400;
+                jw.Data = new
+                {
+                    groupCost = Create.Data,
+                    blackCodeIsTrue = false,
+                };
+            }
+
+            return Ok(jw);
+        }
+
         #endregion
 
         #region 酒店预定 保留

+ 388 - 1
OASystem/OASystem.Infrastructure/Repositories/Groups/GroupCostRepository.cs

@@ -1,4 +1,6 @@
-using OASystem.Domain.Entities.Groups;
+using OASystem.Domain;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.Entities.Resource;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -48,6 +50,391 @@ namespace OASystem.Infrastructure.Repositories.Groups
             return  DeleteAsync(x => x.Diid == diid);
         }
 
+        public Result CreateGroupCostByBlackCode(int diid)
+        {
+            Result rt = new Result();
+            List<Grp_GroupCost> returnArr = new List<Grp_GroupCost>();
+            DataTable resultTable = null;
+            try
+            {
+                resultTable = GetTableByBlackCode(diid);
+                if (resultTable.Rows.Count == 0 || string.IsNullOrWhiteSpace(resultTable.Rows[0][1].ToString()))
+                {
+                    string msg = string.Empty;
+                    if (resultTable.Rows.Count > 0)
+                    {
+                        msg = resultTable.Rows[0]["Error"].ToString();
+                    }
+
+                    rt.Msg = "黑屏代码有误! " + msg;
+                    rt.Data = returnArr;
+                    rt.Code = -1;
+                }
+                else
+                {
+                    var timeArr = GetTimeListByDataTable(resultTable);
+                    var dayIndex = 1;
+                    var stopCity = string.Empty;
+                    foreach (var item in timeArr)
+                    {
+                        var tabSelect = resultTable.Select(string.Format("Day = '{0}'", item));
+                        var itin = string.Empty;
+                        if (tabSelect.Length > 0)
+                        {
+                            var threeCodeValue = new List<string>(4);
+                            foreach (var tabRow in tabSelect)
+                            {
+                                var threeCode = tabRow["Three"].ToString();
+                                var start = threeCode.Substring(0, 3);
+                                var end = threeCode.Substring(3, 3);
+                                stopCity = end;
+                                if (start == stopCity)
+                                {
+                                    threeCodeValue.Add(end);
+                                }
+                                else
+                                {
+                                    threeCodeValue.Add(start);
+                                    threeCodeValue.Add(end);
+                                }
+
+                                itin = $@"{threeCodeValue[0]}/{threeCodeValue[threeCodeValue.Count - 1]}
+{tabRow["Fliagtcode"].ToString()}
+{tabRow["StartTime"].ToString()}/{tabRow["EndTime"].ToString()}";
+
+
+                            }
+                        }
+                        else
+                        {
+                            itin = stopCity;
+                        }
+
+                        Grp_GroupCost ggc = new Grp_GroupCost();
+                        ggc.DAY = dayIndex.ToString();
+                        ggc.Date = item;
+                        ggc.ITIN = itin;
+                        returnArr.Add(ggc);
+
+                        dayIndex++;
+                    }
+
+                    rt.Data = returnArr;
+                    if (returnArr.Count > 0)
+                    {
+                        rt.Code = 0;
+                        rt.Msg = "生成成功!";
+                    }
+                    else
+                    {
+                        rt.Code = -1;
+                        rt.Msg = "生成失败!" + "请检查机票黑屏代码!";
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                rt.Code = -1;
+                rt.Msg = ex.Message;
+                rt.Data = ex.StackTrace;
+            }
+
+            return rt;
+        }
+
+
+        /// <summary>
+        ///根据机票黑屏代码整理DataTable
+        /// </summary>
+        /// <param name="diid"></param>
+        /// <returns></returns>
+        public DataTable GetTableByBlackCode(int diid)
+        {
+            string[] excludeArr = new string[] { "[中转]", "[转机]" };
+            //黑屏代码信息
+            List<Air_TicketBlackCode> listcode = _sqlSugar.Queryable<Air_TicketBlackCode>().Where(x => x.DiId == diid && x.IsDel == 0).ToList();
+
+            //测试数据为序号,航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间
+            //1.3U8391   TU17NOV CTUCAI  0220 0715   T1 T2  330  10H55M
+            DataTable dt = new DataTable();
+            dt.Columns.Add("Fliagtcode", typeof(string)); //航班号
+            dt.Columns.Add("Date", typeof(string));//起飞日期
+            dt.Columns.Add("Three", typeof(string));//三字码
+            dt.Columns.Add("StartTime", typeof(string));//起飞时刻
+            dt.Columns.Add("EndTime", typeof(string));//到达时刻
+            dt.Columns.Add("StartBuilding", typeof(string));//出发航站楼
+            dt.Columns.Add("EndBuilding", typeof(string));//到达航站楼
+            dt.Columns.Add("AirModel", typeof(string)); //机型
+            dt.Columns.Add("FlightTime", typeof(string));//飞行时间
+            dt.Columns.Add("Day", typeof(string));//整理的起飞日期;作为排序依据 
+            dt.Columns.Add("ArrivedDate", typeof(string));//整理的到达日期
+            dt.Columns.Add("Error", typeof(string));//整理的到达日期
+            dt.Columns.Add("Sign", typeof(string));//标识:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码
+
+            //添加转机标识
+            dt.Columns.Add("isTransitShipment", typeof(bool));
+
+            //判断是否录入黑屏代码
+            if (listcode.Count() == 0 || listcode == null)
+            {
+                dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "黑屏代码未录入!", null, false);
+            }
+            else
+            {
+                //读取单段黑屏代码
+                for (int i = 0; i < listcode.Count; i++)
+                {
+                    //去除序号
+                    string[] CodeList = Regex.Split(listcode[i].BlackCode, "\\d+\\.", RegexOptions.IgnoreCase);
+                    //去除多余空格,方法一Linq扩展方法
+                    CodeList = CodeList.Where(str => !string.IsNullOrWhiteSpace(str)).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);
+
+                        //去除多余空格
+                        Info = Info.Where(str => !string.IsNullOrWhiteSpace(str)).ToArray();
+
+                        //判断黑屏代码是否正确拆分; 理应拆成9段
+                        if (Info.TakeWhile((x) =>
+                        {
+                            return !excludeArr.Contains(x);
+                        }).Count() != 9)
+                        {
+                            dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "本团组第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误,请联系机票同事核对", null, false);
+                            //MessageBoxEx.Show("第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误, 请联系机票同事核对");
+                            return dt;
+                        }
+                        else
+                        {
+                            try
+                            {
+                                var monthEn = Info[1].Substring(4, 3);
+
+                                //月                  
+                                int month = Convert.ToInt32(GetLonger(monthEn));
+                                //日
+                                int day = Convert.ToInt32(Info[1].Substring(2, 2));
+
+                                var time = new DateTime(DateTime.Now.Year, month, day); //
+
+                                var isExist = Info.Contains("[中转]");
+                                if (!isExist)
+                                {
+                                    isExist = Info.Contains("[转机]");
+                                }
+
+                                //dt.Columns.Add("Fliagtcode", typeof(string)); //航班号
+                                //dt.Columns.Add("Date", typeof(string));//起飞日期
+                                //dt.Columns.Add("Three", typeof(string));//三字码
+                                //dt.Columns.Add("StartTime", typeof(string));//起飞时刻
+                                //dt.Columns.Add("EndTime", typeof(string));//到达时刻
+                                //dt.Columns.Add("StartBuilding", typeof(string));//出发航站楼
+                                //dt.Columns.Add("EndBuilding", typeof(string));//到达航站楼
+                                //dt.Columns.Add("AirModel", typeof(string)); //机型
+                                //dt.Columns.Add("FlightTime", typeof(string));//飞行时间
+                                //dt.Columns.Add("Day", typeof(string));//整理的起飞日期;作为排序依据 
+                                //dt.Columns.Add("ArrivedDate", typeof(string));//整理的到达日期
+                                //dt.Columns.Add("Error", typeof(string));//整理的到达日期
+                                //dt.Columns.Add("Sign", typeof(string));//标识:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码
+                                dt.Rows.Add(Info[0],
+                                       Info[1],
+                                       Info[2],
+                                       Info[3],
+                                       Info[4],
+                                       Info[5],
+                                       Info[6],
+                                       Info[7],
+                                       Info[8],
+                                       time.ToString("yyyy-MM-dd"),
+                                       time.ToString("yyyy-MM-dd"),
+                                       "",
+                                       "0",
+                                       isExist
+                                       );
+
+                            }
+                            catch (Exception ex)
+                            {
+                                string exstr = ex.Message.ToString();
+                            }
+                        }
+
+                    }
+
+                    //排序
+                    dt.DefaultView.Sort = "Day asc";
+                    dt = dt.DefaultView.ToTable();
+                }
+            }
+
+            return dt;
+        }
+
+        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;
+        }
+
+        public List<string> GetTimeListByDataTable(DataTable dt)
+        {
+            DateTime datestart = Convert.ToDateTime(dt.Rows[0]["Day"].ToString());
+            DateTime dateend = Convert.ToDateTime(dt.Rows[dt.Rows.Count - 1]["ArrivedDate"].ToString());
+
+            List<string> timeList = new List<string>();
+            while (datestart <= dateend)
+            {
+                timeList.Add(datestart.ToString("yyyy-MM-dd"));
+                datestart = datestart.AddDays(1);
+            }
+            return timeList;
+        }
     }
 }