GroupCostRepository.cs 17 KB

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