TicketBlackCodeRepository.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. using AutoMapper;
  2. using EyeSoft.Collections.Generic;
  3. using EyeSoft.Extensions;
  4. using OASystem.Domain;
  5. using OASystem.Domain.Dtos.Groups;
  6. using OASystem.Domain.Dtos.Resource;
  7. using OASystem.Domain.Entities.Groups;
  8. using OASystem.Domain.Entities.Resource;
  9. using OASystem.Domain.ViewModels.Groups;
  10. using OASystem.Domain.ViewModels.Resource;
  11. using SqlSugar.Extensions;
  12. using System;
  13. using System.Collections;
  14. using System.Collections.Generic;
  15. using System.Linq;
  16. using System.Text;
  17. using System.Threading.Tasks;
  18. namespace OASystem.Infrastructure.Repositories.Resource
  19. {
  20. public class TicketBlackCodeRepository : BaseRepository<Air_TicketBlackCode, TicketBlackCodeView>
  21. {
  22. private readonly IMapper _mapper;
  23. public TicketBlackCodeRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar)
  24. {
  25. _mapper = mapper;
  26. }
  27. /// <summary>
  28. /// 黑屏代码操作(Status:1.新增,2.修改)
  29. /// </summary>
  30. /// <param name="dto"></param>
  31. /// <returns></returns>
  32. /// <exception cref="NotImplementedException"></exception>
  33. public async Task<Result> OpTicketBlackCode(OpTicketBlackCodeDto dto)
  34. {
  35. Result result = new Result() { Code = -2, Msg = "未知错误" };
  36. try
  37. {
  38. if (dto.Status == 1)//添加
  39. {
  40. Air_TicketBlackCode air_TicketBlack = _mapper.Map<Air_TicketBlackCode>(dto);
  41. int id = await _sqlSugar.Insertable(air_TicketBlack).ExecuteReturnIdentityAsync();
  42. return result = new Result() { Code = 0, Msg = "添加成功!", Data = new { Id = id } };
  43. }
  44. else if (dto.Status == 2)//修改
  45. {
  46. bool res = await UpdateAsync(a => a.Id == dto.Id, a => new Air_TicketBlackCode
  47. {
  48. DiId = dto.DiId,
  49. BlackCode = dto.BlackCode,
  50. Price = dto.Price,
  51. NowPrice = dto.NowPrice,
  52. BCPrice = dto.BCPrice,
  53. ECPrice = dto.ECPrice,
  54. CreateUserId = dto.CreateUserId,
  55. Remark = dto.Remark,
  56. Title = dto.Title,
  57. FCPrice = dto.FCPrice,
  58. FCNowPrice = dto.FCNowPrice
  59. });
  60. if (!res)
  61. {
  62. return result = new Result() { Code = -1, Msg = "修改失败!" };
  63. }
  64. return result = new Result() { Code = 0, Msg = "修改成功!", Data = new { Id = dto.Id } };
  65. }
  66. else
  67. {
  68. return result = new Result() { Code = -1, Msg = "请传入Status参数,1添加 2修改!" };
  69. }
  70. }
  71. catch (Exception ex)
  72. {
  73. return result = new Result() { Code = -2, Msg = $"程序错误!({ex.Message})" };
  74. }
  75. }
  76. public async Task<Result> QueryTicketBlackCodeByDiId(QueryTicketBlackCodeByDiIdDto dto)
  77. {
  78. Result result = new Result() { Code = -2, Msg = "未知错误" };
  79. try
  80. {
  81. string sqlWhere = string.Empty;
  82. sqlWhere += string.Format(@" And a.IsDel={0} And a.DiId={1}", 0, dto.DiId);
  83. if (!string.IsNullOrEmpty(sqlWhere.Trim()))
  84. {
  85. Regex r = new Regex("And");
  86. sqlWhere = r.Replace(sqlWhere, "Where", 1);
  87. }
  88. string sql = string.Format(@"select *,(select CnName from Sys_Users where id=a.CreateUserId) as CreateName from Air_TicketBlackCode a {0}", sqlWhere);
  89. List<TicketBlackCodeView> _TicketBlackCodes = await _sqlSugar.SqlQueryable<TicketBlackCodeView>(sql).ToListAsync();
  90. Grp_DelegationInfo _DelegationInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(a=>a.IsDel==0 && a.Id==dto.DiId);
  91. if (_TicketBlackCodes.Count!=0)
  92. {
  93. return result = new Result()
  94. {
  95. Code = 0,
  96. Msg = "查询成功",
  97. Data = new
  98. {
  99. TicketBlackCodes= _TicketBlackCodes,
  100. DelegationInfo= _DelegationInfo
  101. },
  102. };
  103. }
  104. else
  105. {
  106. return result = new Result()
  107. {
  108. Code = 0,
  109. Msg = "暂无数据",
  110. Data = new
  111. {
  112. TicketBlackCodes = _TicketBlackCodes,
  113. DelegationInfo = _DelegationInfo
  114. },
  115. };
  116. }
  117. }
  118. catch (Exception)
  119. {
  120. return result;
  121. }
  122. }
  123. public async Task<Result> QueryTicketBlackCodeById(QueryTicketBlackCodeByIdDto dto)
  124. {
  125. Result result = new Result() { Code = -2, Msg = "未知错误" };
  126. try
  127. {
  128. //查询成本和团组信息
  129. Grp_GroupCostParameter _GroupCostParameter = _sqlSugar.Queryable<Grp_GroupCostParameter>().First(a => a.DiId == dto.DiId && a.IsDel==0);//团组成本
  130. AirGroupCostParameterView _AirgroupCostParameter = _mapper.Map<AirGroupCostParameterView>(_GroupCostParameter);
  131. Grp_DelegationInfo _DelegationInfo=_sqlSugar.Queryable<Grp_DelegationInfo>().First(a=>a.Id == dto.DiId && a.IsDel==0);//团组信息
  132. Air_TicketBlackCode _TicketBlackCode=new Air_TicketBlackCode();
  133. if (dto.Id > 0)
  134. {
  135. _TicketBlackCode = _sqlSugar.Queryable<Air_TicketBlackCode>().First(a => a.IsDel==0 && a.Id==dto.Id);
  136. return result = new Result()
  137. {
  138. Code = 0,
  139. Msg = "查询成功!",
  140. Data = new
  141. {
  142. GroupCostParameter = _AirgroupCostParameter,
  143. DelegationInfo = _DelegationInfo,
  144. TicketBlackCode = _TicketBlackCode
  145. },
  146. };
  147. }
  148. else
  149. {
  150. return result = new Result()
  151. {
  152. Code = 0,
  153. Msg = "查询成功!",
  154. Data = new
  155. {
  156. GroupCostParameter = _AirgroupCostParameter,
  157. DelegationInfo = _DelegationInfo,
  158. },
  159. };
  160. }
  161. }
  162. catch (Exception)
  163. {
  164. return result;
  165. throw;
  166. }
  167. }
  168. /// <summary>
  169. /// 三公费用提示
  170. /// 使用
  171. /// </summary>
  172. /// <param name="diId"></param>
  173. /// <returns></returns>
  174. public async Task<EntryAndExitTipsView[]> EntryAndExitTips(int diId)
  175. {
  176. if (diId < 1) return Array.Empty<EntryAndExitTipsView>();
  177. var airFees = await _sqlSugar.Queryable<Air_TicketBlackCode>().Where(a => a.IsDel == 0 && a.DiId == diId).ToListAsync();
  178. if (airFees.Any())
  179. {
  180. return airFees.OrderByDescending(x => x.ECPrice + x.BCPrice).Select(x => new EntryAndExitTipsView
  181. {
  182. jjcCurrentRate = x.ECPrice,
  183. gwcCurrentRate = x.BCPrice,
  184. remark = $"经济舱全价:{x.ECPrice.ToString("#0.00")} 元/人 公务舱全价:{x.BCPrice.ToString("#0.00")} 元/人"
  185. }).ToArray();
  186. }
  187. return Array.Empty<EntryAndExitTipsView>();
  188. }
  189. public Result DescBlackToVisa(int diid)
  190. {
  191. Result rt = new Result();
  192. rt.Data = Array.Empty<string>();
  193. var group = _sqlSugar.Queryable<Grp_DelegationInfo>()
  194. .First(x => x.Id == diid && x.IsDel == 0);
  195. Func<string,string> RemoveSpecialCharacters = ( string input ) => {
  196. string pattern = @"[^\u4e00-\u9fa5]+";
  197. // 用空字符串替换所有匹配到的字符
  198. return Regex.Replace(input, pattern, "|");
  199. };
  200. if (group != null)
  201. {
  202. var country = RemoveSpecialCharacters(group.VisitCountry);
  203. if (!country.IsNullOrWhiteSpace())
  204. {
  205. var countryArr = country.Split('|');
  206. var blackCode = _sqlSugar.Queryable<Air_TicketBlackCode>().First(x => x.IsDel == 0 && x.DiId == diid);
  207. //去除序号
  208. string[] CodeList = Regex.Split(blackCode.BlackCode, "\\d+\\.", RegexOptions.IgnoreCase)
  209. .Where(str => !string.IsNullOrWhiteSpace(str)).ToArray();
  210. var threeCodeList = new List<CountryDataTime>();
  211. //读取单条黑屏代码
  212. for (int j = 0; j < CodeList.Count(); j++)
  213. {
  214. //去除多余空格,方法二使用Split()方法进行分割,分割有一个选项是RemoveEmptyEntries
  215. CodeList[j] = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty).TrimStart().TrimEnd();
  216. string[] Info = CodeList[j].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  217. var threeCode = Info[2];
  218. var startTimeStr = Info[3];
  219. var endTimeStr = Info[4];
  220. var monthEn = Info[1].Substring(4, 3);
  221. //月
  222. int month = Convert.ToInt32(GetLonger(monthEn));
  223. //日
  224. int day = Convert.ToInt32(Info[1].Substring(2, 2));
  225. var startTime = new DateTime(DateTime.Now.Year, month, day, startTimeStr.Substring(0,2).ObjToInt(), startTimeStr.Substring(2, 2).ObjToInt(), 00); //
  226. var endTime = new DateTime(DateTime.Now.Year, month, day, endTimeStr.Substring(0, 2).ObjToInt(), endTimeStr.Substring(2, 2).ObjToInt(), 00); //
  227. if (!threeCode.IsNullOrWhiteSpace() && threeCode.Length > 5)
  228. {
  229. var start = threeCode.Substring(0, 3).ToLower();
  230. var end = threeCode.Substring(3, 3).ToLower();
  231. if (!threeCodeList.Select(x => x.Code).Contains(end)) {
  232. var temp = new CountryDataTime
  233. {
  234. Code = end,
  235. StartTime = startTime,
  236. EndTime = endTime,
  237. Country = ""
  238. };
  239. threeCodeList.Add(temp);
  240. }
  241. }
  242. }
  243. var dbThreeCode = _sqlSugar.Queryable<Res_ThreeCode>()
  244. .Where(x => x.IsDel == 0 && threeCodeList.Select(x => x.Code).Contains(x.Three.ToLower()))
  245. .ToList();
  246. var data = new List<CountryDataTime>();
  247. var info = new List<string>();
  248. foreach (var code in dbThreeCode)
  249. {
  250. for (int i = 0; i < threeCodeList.Count; i++)
  251. {
  252. if (threeCodeList[i].Code == code.Three.ToLower()) {
  253. threeCodeList[i].Country = code.Country;
  254. if (countryArr.Contains(code.Country))
  255. {
  256. var copy = new CountryDataTime
  257. {
  258. Code = threeCodeList[i].Code,
  259. EndTime = threeCodeList[i].EndTime,
  260. StartTime = threeCodeList[i].StartTime,
  261. Country = threeCodeList[i].Country,
  262. };
  263. try
  264. {
  265. threeCodeList[i].StartTime = threeCodeList[i].EndTime;
  266. threeCodeList[i].EndTime = threeCodeList[i + 1].StartTime;
  267. info.Add($@"{code.Country} 抵达:{threeCodeList[i].EndTime.ToString("yyyy-MM-dd HH:mm")} 离开:{threeCodeList[i + 1].StartTime.ToString("yyyy-MM-dd HH:mm")} ");
  268. }
  269. catch (Exception)
  270. {
  271. threeCodeList[i] = copy;
  272. info.Add($@"{code.Country} 抵达:{threeCodeList[i].EndTime.ToString("yyyy-MM-dd HH:mm")} 离开: 未知 ");
  273. }
  274. data.Add(threeCodeList[i]);
  275. }
  276. break;
  277. }
  278. }
  279. }
  280. rt.Msg = "SUCCESS!";
  281. rt.Code = 0;
  282. rt.Data = new
  283. {
  284. data = data,
  285. info = info
  286. };
  287. }
  288. }
  289. return rt;
  290. }
  291. public string GetLonger(string temp)
  292. {
  293. string str = "";
  294. switch (temp.ToUpper())
  295. {
  296. case "美元":
  297. str = "USD";
  298. break;
  299. case "日元":
  300. str = "JPY";
  301. break;
  302. case "英镑":
  303. str = "GBP";
  304. break;
  305. case "欧元":
  306. str = "EUR";
  307. break;
  308. case "港币":
  309. str = "HKD";
  310. break;
  311. case "MO":
  312. str = "星期一";
  313. break;
  314. case "TU":
  315. str = "星期二";
  316. break;
  317. case "WE":
  318. str = "星期三";
  319. break;
  320. case "TH":
  321. str = "星期四";
  322. break;
  323. case "FR":
  324. str = "星期五";
  325. break;
  326. case "SA":
  327. str = "星期六";
  328. break;
  329. case "SU":
  330. str = "星期天";
  331. break;
  332. case "JAN":
  333. str = "01";
  334. break;
  335. case "FEB":
  336. str = "02";
  337. break;
  338. case "MAR":
  339. str = "03";
  340. break;
  341. case "APR":
  342. str = "04";
  343. break;
  344. case "MAY":
  345. str = "05";
  346. break;
  347. case "JUN":
  348. str = "06";
  349. break;
  350. case "JUL":
  351. str = "07";
  352. break;
  353. case "AUG":
  354. str = "08";
  355. break;
  356. case "SEP":
  357. str = "09";
  358. break;
  359. case "OCT":
  360. str = "10";
  361. break;
  362. case "NOV":
  363. str = "11";
  364. break;
  365. case "DEC":
  366. str = "12";
  367. break;
  368. case "MONDAY":
  369. str = "星期一";
  370. break;
  371. case "TUESDAY":
  372. str = "星期二";
  373. break;
  374. case "WEDNESDAY":
  375. str = "星期三";
  376. break;
  377. case "THURSDAY":
  378. str = "星期四";
  379. break;
  380. case "FRIDAY":
  381. str = "星期五";
  382. break;
  383. case "SATURDAY":
  384. str = "星期六";
  385. break;
  386. case "SUNDAY":
  387. str = "星期日";
  388. break;
  389. case "01":
  390. str = "JAN";
  391. break;
  392. case "02":
  393. str = "FEB";
  394. break;
  395. case "03":
  396. str = "MAR";
  397. break;
  398. case "04":
  399. str = "APR";
  400. break;
  401. case "05":
  402. str = "MAY";
  403. break;
  404. case "06":
  405. str = "JUN";
  406. break;
  407. case "07":
  408. str = "JUL";
  409. break;
  410. case "08":
  411. str = "AUG";
  412. break;
  413. case "09":
  414. str = "SEP";
  415. break;
  416. case "10":
  417. str = "OCT";
  418. break;
  419. case "11":
  420. str = "NOV";
  421. break;
  422. case "12":
  423. str = "DEC";
  424. break;
  425. case "2":
  426. str = "空客A";
  427. break;
  428. case "3":
  429. str = "空客A";
  430. break;
  431. case "7":
  432. str = "波音";
  433. break;
  434. }
  435. return str;
  436. }
  437. }
  438. }