TicketBlackCodeRepository.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  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. public Result DescBlackToVisa(int diid)
  169. {
  170. Result rt = new Result();
  171. rt.Data = Array.Empty<string>();
  172. var group = _sqlSugar.Queryable<Grp_DelegationInfo>()
  173. .First(x => x.Id == diid && x.IsDel == 0);
  174. Func<string,string> RemoveSpecialCharacters = ( string input ) => {
  175. string pattern = @"[^\u4e00-\u9fa5]+";
  176. // 用空字符串替换所有匹配到的字符
  177. return Regex.Replace(input, pattern, "|");
  178. };
  179. if (group != null)
  180. {
  181. var country = RemoveSpecialCharacters(group.VisitCountry);
  182. if (!country.IsNullOrWhiteSpace())
  183. {
  184. var countryArr = country.Split('|');
  185. var blackCode = _sqlSugar.Queryable<Air_TicketBlackCode>().First(x => x.IsDel == 0 && x.DiId == diid);
  186. //去除序号
  187. string[] CodeList = Regex.Split(blackCode.BlackCode, "\\d+\\.", RegexOptions.IgnoreCase)
  188. .Where(str => !string.IsNullOrWhiteSpace(str)).ToArray();
  189. var threeCodeList = new List<CountryDataTime>();
  190. //读取单条黑屏代码
  191. for (int j = 0; j < CodeList.Count(); j++)
  192. {
  193. //去除多余空格,方法二使用Split()方法进行分割,分割有一个选项是RemoveEmptyEntries
  194. CodeList[j] = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty).TrimStart().TrimEnd();
  195. string[] Info = CodeList[j].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  196. var threeCode = Info[2];
  197. var startTimeStr = Info[3];
  198. var endTimeStr = Info[4];
  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 startTime = new DateTime(DateTime.Now.Year, month, day, startTimeStr.Substring(0,2).ObjToInt(), startTimeStr.Substring(2, 2).ObjToInt(), 00); //
  205. var endTime = new DateTime(DateTime.Now.Year, month, day, endTimeStr.Substring(0, 2).ObjToInt(), endTimeStr.Substring(2, 2).ObjToInt(), 00); //
  206. if (!threeCode.IsNullOrWhiteSpace() && threeCode.Length > 5)
  207. {
  208. var start = threeCode.Substring(0, 3).ToLower();
  209. var end = threeCode.Substring(3, 3).ToLower();
  210. if (!threeCodeList.Select(x => x.Code).Contains(end)) {
  211. var temp = new CountryDataTime
  212. {
  213. Code = end,
  214. StartTime = startTime,
  215. EndTime = endTime,
  216. Country = ""
  217. };
  218. threeCodeList.Add(temp);
  219. }
  220. }
  221. }
  222. var dbThreeCode = _sqlSugar.Queryable<Res_ThreeCode>()
  223. .Where(x => x.IsDel == 0 && threeCodeList.Select(x => x.Code).Contains(x.Three.ToLower()))
  224. .ToList();
  225. var data = new List<CountryDataTime>();
  226. var info = new List<string>();
  227. foreach (var code in dbThreeCode)
  228. {
  229. for (int i = 0; i < threeCodeList.Count; i++)
  230. {
  231. if (threeCodeList[i].Code == code.Three.ToLower()) {
  232. threeCodeList[i].Country = code.Country;
  233. if (countryArr.Contains(code.Country))
  234. {
  235. var copy = new CountryDataTime
  236. {
  237. Code = threeCodeList[i].Code,
  238. EndTime = threeCodeList[i].EndTime,
  239. StartTime = threeCodeList[i].StartTime,
  240. Country = threeCodeList[i].Country,
  241. };
  242. try
  243. {
  244. threeCodeList[i].StartTime = threeCodeList[i].EndTime;
  245. threeCodeList[i].EndTime = threeCodeList[i + 1].StartTime;
  246. info.Add($@"{code.Country} 抵达:{threeCodeList[i].EndTime.ToString("yyyy-MM-dd HH:mm")} 离开:{threeCodeList[i + 1].StartTime.ToString("yyyy-MM-dd HH:mm")} ");
  247. }
  248. catch (Exception)
  249. {
  250. threeCodeList[i] = copy;
  251. info.Add($@"{code.Country} 抵达:{threeCodeList[i].EndTime.ToString("yyyy-MM-dd HH:mm")} 离开: 未知 ");
  252. }
  253. data.Add(threeCodeList[i]);
  254. }
  255. break;
  256. }
  257. }
  258. }
  259. rt.Msg = "SUCCESS!";
  260. rt.Code = 0;
  261. rt.Data = new
  262. {
  263. data = data,
  264. info = info
  265. };
  266. }
  267. }
  268. return rt;
  269. }
  270. public string GetLonger(string temp)
  271. {
  272. string str = "";
  273. switch (temp.ToUpper())
  274. {
  275. case "美元":
  276. str = "USD";
  277. break;
  278. case "日元":
  279. str = "JPY";
  280. break;
  281. case "英镑":
  282. str = "GBP";
  283. break;
  284. case "欧元":
  285. str = "EUR";
  286. break;
  287. case "港币":
  288. str = "HKD";
  289. break;
  290. case "MO":
  291. str = "星期一";
  292. break;
  293. case "TU":
  294. str = "星期二";
  295. break;
  296. case "WE":
  297. str = "星期三";
  298. break;
  299. case "TH":
  300. str = "星期四";
  301. break;
  302. case "FR":
  303. str = "星期五";
  304. break;
  305. case "SA":
  306. str = "星期六";
  307. break;
  308. case "SU":
  309. str = "星期天";
  310. break;
  311. case "JAN":
  312. str = "01";
  313. break;
  314. case "FEB":
  315. str = "02";
  316. break;
  317. case "MAR":
  318. str = "03";
  319. break;
  320. case "APR":
  321. str = "04";
  322. break;
  323. case "MAY":
  324. str = "05";
  325. break;
  326. case "JUN":
  327. str = "06";
  328. break;
  329. case "JUL":
  330. str = "07";
  331. break;
  332. case "AUG":
  333. str = "08";
  334. break;
  335. case "SEP":
  336. str = "09";
  337. break;
  338. case "OCT":
  339. str = "10";
  340. break;
  341. case "NOV":
  342. str = "11";
  343. break;
  344. case "DEC":
  345. str = "12";
  346. break;
  347. case "MONDAY":
  348. str = "星期一";
  349. break;
  350. case "TUESDAY":
  351. str = "星期二";
  352. break;
  353. case "WEDNESDAY":
  354. str = "星期三";
  355. break;
  356. case "THURSDAY":
  357. str = "星期四";
  358. break;
  359. case "FRIDAY":
  360. str = "星期五";
  361. break;
  362. case "SATURDAY":
  363. str = "星期六";
  364. break;
  365. case "SUNDAY":
  366. str = "星期日";
  367. break;
  368. case "01":
  369. str = "JAN";
  370. break;
  371. case "02":
  372. str = "FEB";
  373. break;
  374. case "03":
  375. str = "MAR";
  376. break;
  377. case "04":
  378. str = "APR";
  379. break;
  380. case "05":
  381. str = "MAY";
  382. break;
  383. case "06":
  384. str = "JUN";
  385. break;
  386. case "07":
  387. str = "JUL";
  388. break;
  389. case "08":
  390. str = "AUG";
  391. break;
  392. case "09":
  393. str = "SEP";
  394. break;
  395. case "10":
  396. str = "OCT";
  397. break;
  398. case "11":
  399. str = "NOV";
  400. break;
  401. case "12":
  402. str = "DEC";
  403. break;
  404. case "2":
  405. str = "空客A";
  406. break;
  407. case "3":
  408. str = "空客A";
  409. break;
  410. case "7":
  411. str = "波音";
  412. break;
  413. }
  414. return str;
  415. }
  416. }
  417. }