TicketBlackCodeRepository.cs 18 KB

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