GroupCostRepository.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. using OASystem.Domain;
  2. using OASystem.Domain.Entities.Groups;
  3. using OASystem.Domain.Entities.Resource;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace OASystem.Infrastructure.Repositories.Groups
  10. {
  11. public class GroupCostRepository:BaseRepository<Grp_GroupCost, GroupCostView>
  12. {
  13. public GroupCostRepository(SqlSugarClient sqlSugar) : base(sqlSugar)
  14. {}
  15. public List<Grp_GroupCost> GetAllByDiid(int diid)
  16. {
  17. return Query(x => x.Diid == diid).ToList();
  18. }
  19. public List<Grp_GroupCost> GetAll()
  20. {
  21. return Query(x=> x.IsDel < 1).ToList();
  22. }
  23. public async Task<bool> SaveGroupCostList(List<Grp_GroupCost> costList,int diid)
  24. {
  25. BeginTran();
  26. bool isTrue = await DeleteGroupCostList(diid);
  27. if (costList.Count > 0)
  28. {
  29. isTrue = Adds(costList) > 0;
  30. }
  31. if (isTrue)
  32. {
  33. CommitTran();
  34. }
  35. else
  36. {
  37. RollbackTran();
  38. }
  39. return isTrue;
  40. }
  41. public Task<bool> DeleteGroupCostList(int diid)
  42. {
  43. return DeleteAsync(x => x.Diid == diid);
  44. }
  45. public Result CreateGroupCostByBlackCode(int diid)
  46. {
  47. Result rt = new Result();
  48. List<Grp_GroupCost> returnArr = new List<Grp_GroupCost>();
  49. DataTable resultTable = null;
  50. try
  51. {
  52. resultTable = GetTableByBlackCode(diid);
  53. if (resultTable.Rows.Count == 0 || string.IsNullOrWhiteSpace(resultTable.Rows[0][1].ToString()))
  54. {
  55. string msg = string.Empty;
  56. if (resultTable.Rows.Count > 0)
  57. {
  58. msg = resultTable.Rows[0]["Error"].ToString();
  59. }
  60. rt.Msg = "黑屏代码有误! " + msg;
  61. rt.Data = returnArr;
  62. rt.Code = -1;
  63. }
  64. else
  65. {
  66. var timeArr = GetTimeListByDataTable(resultTable);
  67. var dayIndex = 1;
  68. var stopCity = string.Empty;
  69. foreach (var item in timeArr)
  70. {
  71. var tabSelect = resultTable.Select(string.Format("Day = '{0}'", item));
  72. var itin = string.Empty;
  73. if (tabSelect.Length > 0)
  74. {
  75. var threeCodeValue = new List<string>(4);
  76. foreach (var tabRow in tabSelect)
  77. {
  78. var threeCode = tabRow["Three"].ToString();
  79. var start = threeCode.Substring(0, 3);
  80. var end = threeCode.Substring(3, 3);
  81. stopCity = end;
  82. if (start == stopCity)
  83. {
  84. threeCodeValue.Add(end);
  85. }
  86. else
  87. {
  88. threeCodeValue.Add(start);
  89. threeCodeValue.Add(end);
  90. }
  91. itin = $@"{threeCodeValue[0]}/{threeCodeValue[threeCodeValue.Count - 1]}
  92. {tabRow["Fliagtcode"].ToString()}
  93. {tabRow["StartTime"].ToString()}/{tabRow["EndTime"].ToString()}";
  94. }
  95. }
  96. else
  97. {
  98. itin = stopCity;
  99. }
  100. Grp_GroupCost ggc = new Grp_GroupCost();
  101. ggc.DAY = dayIndex.ToString();
  102. ggc.Date = item;
  103. ggc.ITIN = itin;
  104. returnArr.Add(ggc);
  105. dayIndex++;
  106. }
  107. rt.Data = returnArr;
  108. if (returnArr.Count > 0)
  109. {
  110. rt.Code = 0;
  111. rt.Msg = "生成成功!";
  112. }
  113. else
  114. {
  115. rt.Code = -1;
  116. rt.Msg = "生成失败!" + "请检查机票黑屏代码!";
  117. }
  118. }
  119. }
  120. catch (Exception ex)
  121. {
  122. rt.Code = -1;
  123. rt.Msg = ex.Message;
  124. rt.Data = ex.StackTrace;
  125. }
  126. return rt;
  127. }
  128. /// <summary>
  129. ///根据机票黑屏代码整理DataTable
  130. /// </summary>
  131. /// <param name="diid"></param>
  132. /// <returns></returns>
  133. public DataTable GetTableByBlackCode(int diid)
  134. {
  135. string[] excludeArr = new string[] { "[中转]", "[转机]" };
  136. //黑屏代码信息
  137. List<Air_TicketBlackCode> listcode = _sqlSugar.Queryable<Air_TicketBlackCode>().Where(x => x.DiId == diid && x.IsDel == 0).ToList();
  138. //测试数据为序号,航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间
  139. //1.3U8391 TU17NOV CTUCAI 0220 0715 T1 T2 330 10H55M
  140. DataTable dt = new DataTable();
  141. dt.Columns.Add("Fliagtcode", typeof(string)); //航班号
  142. dt.Columns.Add("Date", typeof(string));//起飞日期
  143. dt.Columns.Add("Three", typeof(string));//三字码
  144. dt.Columns.Add("StartTime", typeof(string));//起飞时刻
  145. dt.Columns.Add("EndTime", typeof(string));//到达时刻
  146. dt.Columns.Add("StartBuilding", typeof(string));//出发航站楼
  147. dt.Columns.Add("EndBuilding", typeof(string));//到达航站楼
  148. dt.Columns.Add("AirModel", typeof(string)); //机型
  149. dt.Columns.Add("FlightTime", typeof(string));//飞行时间
  150. dt.Columns.Add("Day", typeof(string));//整理的起飞日期;作为排序依据
  151. dt.Columns.Add("ArrivedDate", typeof(string));//整理的到达日期
  152. dt.Columns.Add("Error", typeof(string));//整理的到达日期
  153. dt.Columns.Add("Sign", typeof(string));//标识:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码
  154. //添加转机标识
  155. dt.Columns.Add("isTransitShipment", typeof(bool));
  156. //判断是否录入黑屏代码
  157. if (listcode.Count() == 0 || listcode == null)
  158. {
  159. dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "黑屏代码未录入!", null, false);
  160. }
  161. else
  162. {
  163. //读取单段黑屏代码
  164. for (int i = 0; i < listcode.Count; i++)
  165. {
  166. //去除序号
  167. string[] CodeList = Regex.Split(listcode[i].BlackCode, "\\d+\\.", RegexOptions.IgnoreCase);
  168. //去除多余空格,方法一Linq扩展方法
  169. CodeList = CodeList.Where(str => !string.IsNullOrWhiteSpace(str)).ToArray();
  170. //读取单条黑屏代码
  171. for (int j = 0; j < CodeList.Count(); j++)
  172. {
  173. //去除多余空格,方法二使用Split()方法进行分割,分割有一个选项是RemoveEmptyEntries
  174. CodeList[j] = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty).TrimStart().TrimEnd();
  175. string[] Info = CodeList[j].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  176. //去除多余空格
  177. Info = Info.Where(str => !string.IsNullOrWhiteSpace(str)).ToArray();
  178. //判断黑屏代码是否正确拆分; 理应拆成9段
  179. if (Info.TakeWhile((x) =>
  180. {
  181. return !excludeArr.Contains(x);
  182. }).Count() != 9)
  183. {
  184. dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "本团组第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误,请联系机票同事核对", null, false);
  185. //MessageBoxEx.Show("第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误, 请联系机票同事核对");
  186. return dt;
  187. }
  188. else
  189. {
  190. try
  191. {
  192. var monthEn = Info[1].Substring(4, 3);
  193. //月
  194. int month = Convert.ToInt32(GetLonger(monthEn));
  195. //日
  196. int day = Convert.ToInt32(Info[1].Substring(2, 2));
  197. var time = new DateTime(DateTime.Now.Year, month, day); //
  198. var isExist = Info.Contains("[中转]");
  199. if (!isExist)
  200. {
  201. isExist = Info.Contains("[转机]");
  202. }
  203. //dt.Columns.Add("Fliagtcode", typeof(string)); //航班号
  204. //dt.Columns.Add("Date", typeof(string));//起飞日期
  205. //dt.Columns.Add("Three", typeof(string));//三字码
  206. //dt.Columns.Add("StartTime", typeof(string));//起飞时刻
  207. //dt.Columns.Add("EndTime", typeof(string));//到达时刻
  208. //dt.Columns.Add("StartBuilding", typeof(string));//出发航站楼
  209. //dt.Columns.Add("EndBuilding", typeof(string));//到达航站楼
  210. //dt.Columns.Add("AirModel", typeof(string)); //机型
  211. //dt.Columns.Add("FlightTime", typeof(string));//飞行时间
  212. //dt.Columns.Add("Day", typeof(string));//整理的起飞日期;作为排序依据
  213. //dt.Columns.Add("ArrivedDate", typeof(string));//整理的到达日期
  214. //dt.Columns.Add("Error", typeof(string));//整理的到达日期
  215. //dt.Columns.Add("Sign", typeof(string));//标识:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码
  216. dt.Rows.Add(Info[0],
  217. Info[1],
  218. Info[2],
  219. Info[3],
  220. Info[4],
  221. Info[5],
  222. Info[6],
  223. Info[7],
  224. Info[8],
  225. time.ToString("yyyy-MM-dd"),
  226. time.ToString("yyyy-MM-dd"),
  227. "",
  228. "0",
  229. isExist
  230. );
  231. }
  232. catch (Exception ex)
  233. {
  234. string exstr = ex.Message.ToString();
  235. }
  236. }
  237. }
  238. //排序
  239. dt.DefaultView.Sort = "Day asc";
  240. dt = dt.DefaultView.ToTable();
  241. }
  242. }
  243. return dt;
  244. }
  245. public string GetLonger(string temp)
  246. {
  247. string str = "";
  248. switch (temp.ToUpper())
  249. {
  250. case "美元":
  251. str = "USD";
  252. break;
  253. case "日元":
  254. str = "JPY";
  255. break;
  256. case "英镑":
  257. str = "GBP";
  258. break;
  259. case "欧元":
  260. str = "EUR";
  261. break;
  262. case "港币":
  263. str = "HKD";
  264. break;
  265. case "MO":
  266. str = "星期一";
  267. break;
  268. case "TU":
  269. str = "星期二";
  270. break;
  271. case "WE":
  272. str = "星期三";
  273. break;
  274. case "TH":
  275. str = "星期四";
  276. break;
  277. case "FR":
  278. str = "星期五";
  279. break;
  280. case "SA":
  281. str = "星期六";
  282. break;
  283. case "SU":
  284. str = "星期天";
  285. break;
  286. case "JAN":
  287. str = "01";
  288. break;
  289. case "FEB":
  290. str = "02";
  291. break;
  292. case "MAR":
  293. str = "03";
  294. break;
  295. case "APR":
  296. str = "04";
  297. break;
  298. case "MAY":
  299. str = "05";
  300. break;
  301. case "JUN":
  302. str = "06";
  303. break;
  304. case "JUL":
  305. str = "07";
  306. break;
  307. case "AUG":
  308. str = "08";
  309. break;
  310. case "SEP":
  311. str = "09";
  312. break;
  313. case "OCT":
  314. str = "10";
  315. break;
  316. case "NOV":
  317. str = "11";
  318. break;
  319. case "DEC":
  320. str = "12";
  321. break;
  322. case "MONDAY":
  323. str = "星期一";
  324. break;
  325. case "TUESDAY":
  326. str = "星期二";
  327. break;
  328. case "WEDNESDAY":
  329. str = "星期三";
  330. break;
  331. case "THURSDAY":
  332. str = "星期四";
  333. break;
  334. case "FRIDAY":
  335. str = "星期五";
  336. break;
  337. case "SATURDAY":
  338. str = "星期六";
  339. break;
  340. case "SUNDAY":
  341. str = "星期日";
  342. break;
  343. case "01":
  344. str = "JAN";
  345. break;
  346. case "02":
  347. str = "FEB";
  348. break;
  349. case "03":
  350. str = "MAR";
  351. break;
  352. case "04":
  353. str = "APR";
  354. break;
  355. case "05":
  356. str = "MAY";
  357. break;
  358. case "06":
  359. str = "JUN";
  360. break;
  361. case "07":
  362. str = "JUL";
  363. break;
  364. case "08":
  365. str = "AUG";
  366. break;
  367. case "09":
  368. str = "SEP";
  369. break;
  370. case "10":
  371. str = "OCT";
  372. break;
  373. case "11":
  374. str = "NOV";
  375. break;
  376. case "12":
  377. str = "DEC";
  378. break;
  379. case "2":
  380. str = "空客A";
  381. break;
  382. case "3":
  383. str = "空客A";
  384. break;
  385. case "7":
  386. str = "波音";
  387. break;
  388. }
  389. return str;
  390. }
  391. public List<string> GetTimeListByDataTable(DataTable dt)
  392. {
  393. DateTime datestart = Convert.ToDateTime(dt.Rows[0]["Day"].ToString());
  394. DateTime dateend = Convert.ToDateTime(dt.Rows[dt.Rows.Count - 1]["ArrivedDate"].ToString());
  395. List<string> timeList = new List<string>();
  396. while (datestart <= dateend)
  397. {
  398. timeList.Add(datestart.ToString("yyyy-MM-dd"));
  399. datestart = datestart.AddDays(1);
  400. }
  401. return timeList;
  402. }
  403. }
  404. }