DelegationInfoRepository.cs 59 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442
  1. using AutoMapper;
  2. using OASystem.Domain;
  3. using OASystem.Domain.AesEncryption;
  4. using OASystem.Domain.Dtos.Financial;
  5. using OASystem.Domain.Dtos.Groups;
  6. using OASystem.Domain.Entities.Customer;
  7. using OASystem.Domain.Entities.Groups;
  8. using OASystem.Domain.ViewModels.Groups;
  9. using OASystem.Infrastructure.Repositories.System;
  10. namespace OASystem.Infrastructure.Repositories.Groups
  11. {
  12. /// <summary>
  13. /// 接团信息
  14. /// </summary>
  15. public class DelegationInfoRepository : BaseRepository<Grp_DelegationInfo, DelegationInfoView>
  16. {
  17. private readonly SetDataRepository _setDataRepository;
  18. private readonly UsersRepository _usersRepository;
  19. private readonly TaskAssignmentRepository _taskAssignmentRep;
  20. private readonly IMapper _mapper;
  21. //private readonly TeamRateRepository _teamRateRep;
  22. //public readonly Logs _logs;
  23. public DelegationInfoRepository(SqlSugarClient sqlSugar, SetDataRepository setDataRepository, UsersRepository usersRepository,
  24. TaskAssignmentRepository taskAssignmentRep, IMapper mapper)
  25. : base(sqlSugar)
  26. {
  27. _setDataRepository = setDataRepository;
  28. _usersRepository = usersRepository;
  29. _taskAssignmentRep = taskAssignmentRep;
  30. _mapper = mapper;
  31. //_teamRateRep = teamRateRep;
  32. }
  33. #region 团组信息 团组详情共享Api
  34. /// <summary>
  35. /// 查询团组简略详情列表
  36. /// Page 根据Ctable And User 返回可操作的团
  37. /// </summary>
  38. /// <param name="dto"></param>
  39. /// <returns></returns>
  40. public async Task<JsonView> ListByCTableAndUserId(GroupListByCTableAndUserIdDto dto)
  41. {
  42. var view = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作失败!" };
  43. if (dto.CTable < 1)
  44. {
  45. view.Msg = MsgTips.UserId;
  46. return view;
  47. }
  48. if (dto.CTable < 1)
  49. {
  50. view.Msg = "请输入正确的CTable Id !76 酒店预订<br/>77 行程<br/>79 车/导游地接<br/>80 签证<br/>81 邀请/公务活动<br/>82 团组客户保险<br/>85 机票预订<br/>98 其他款项<br/>751 酒店早餐";
  51. return view;
  52. }
  53. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3)
  54. {
  55. //2025-02-17 更改团组列表排序功能 按照团出访时间排序(降序)
  56. string sql = string.Format(@"Select row_number() over(order by di.VisitStartDate Desc) as Row_Number,
  57. di.Id,di.TeamName,di.TourCode,di.ClientName,di.VisitCountry,di.VisitStartDate,
  58. di.VisitEndDate,di.VisitDays,di.VisitPNumber,di.CreateTime
  59. From Grp_GroupsTaskAssignment gta
  60. Inner Join Grp_DelegationInfo di On gta.DIId = di.Id
  61. Where gta.IsDel = 0 And di.IsDel = 0 And gta.IsEnable = 1
  62. And gta.CTId = {0} And gta.UId = {1}", dto.CTable, dto.UserId);
  63. if (!string.IsNullOrEmpty(dto.TeamName))
  64. {
  65. sql = string.Format($"{sql} And di.TeamName Like '%{dto.TeamName}%'");
  66. }
  67. //去重
  68. sql = $"{sql} GROUP BY di.Id,di.TeamName,di.TourCode,di.ClientName,di.VisitCountry,di.VisitStartDate,di.VisitEndDate,di.VisitDays,di.VisitPNumber,di.CreateTime";
  69. RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解
  70. var data = await _sqlSugar.SqlQueryable<GroupListByCTableAndUserIdView>(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total); //ToPageAsync
  71. foreach (var item in data)
  72. {
  73. item.VisitStartDate = item.VisitStartDate == "" ? "" : Convert.ToDateTime(item.VisitStartDate).ToString("yyyy-MM-dd");
  74. item.VisitEndDate = item.VisitEndDate == "" ? "" : Convert.ToDateTime(item.VisitEndDate).ToString("yyyy-MM-dd");
  75. item.VisitCountry = !string.IsNullOrEmpty(item.VisitCountry) && item.VisitCountry.Contains("|") ? item.VisitCountry.Replace("|", "、") : item.VisitCountry;
  76. }
  77. view.Code = StatusCodes.Status200OK;
  78. view.Msg = "操作成功!";
  79. view.Data = data;
  80. view.Count = total;
  81. return view;
  82. }
  83. else
  84. {
  85. view.Msg = "请输入正确的PortType 1 Web 2 Android 3 IOS ";
  86. return view;
  87. }
  88. }
  89. /// <summary>
  90. /// 团组信息 团组预览详情共享Api
  91. /// </summary>
  92. /// <param name="dto"></param>
  93. /// <returns></returns>
  94. public async Task<JsonView> PostShareGroupInfo(ShareGroupInfoDto dto)
  95. {
  96. var view = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作失败!" };
  97. string sql = string.Format(@"Select Id,TeamName,TourCode,ClientName,VisitCountry,VisitStartDate,VisitEndDate,VisitDays,VisitPNumber
  98. From Grp_DelegationInfo Where Id = {0} And IsDel = 0", dto.Id);
  99. if (dto.PortType == 1) //Web
  100. {
  101. var _DelegationInfo = await _sqlSugar.SqlQueryable<Web_ShareGroupInfoView>(sql).FirstAsync();
  102. if (_DelegationInfo != null)
  103. {
  104. _DelegationInfo.VisitCountry = FormartTeamName(_DelegationInfo.VisitCountry);
  105. }
  106. else
  107. {
  108. view.Msg = "暂无该团组信息";
  109. return view;
  110. }
  111. view.Data = _DelegationInfo;
  112. }
  113. else if (dto.PortType == 2 || dto.PortType == 3) //IOS Or Android
  114. {
  115. var _DelegationInfo = await _sqlSugar.SqlQueryable<IOSOrAndroid_ShareGroupInfoView>(sql).FirstAsync();
  116. if (_DelegationInfo != null)
  117. {
  118. _DelegationInfo.VisitCountry = FormartTeamName(_DelegationInfo.VisitCountry);
  119. view.Data = _DelegationInfo;
  120. }
  121. else
  122. {
  123. view.Msg = "暂无该团组信息";
  124. return view;
  125. }
  126. view.Data = _DelegationInfo;
  127. }
  128. else
  129. {
  130. view.Msg = "请输入正确的端口号。1 Web 2 Android 3 IOS";
  131. return view;
  132. }
  133. view.Code = StatusCodes.Status200OK;
  134. view.Msg = "成功!";
  135. return view;
  136. }
  137. /// <summary>
  138. /// 团组信息List 团组预览详情共享Api
  139. /// </summary>
  140. /// <param name="dto"></param>
  141. /// <returns></returns>
  142. public async Task<Result> PostShareGroupInfos(int portType)
  143. {
  144. var result = new Result() { Code = -2, Msg = "未知错误", Data = new List<object>() { } };
  145. string sql = string.Format(@"Select Id,TeamName,TourCode,ClientName,VisitCountry,VisitStartDate,VisitEndDate,VisitDays,VisitPNumber
  146. From Grp_DelegationInfo With(NoLock) Where IsDel = 0 Order By VisitStartDate Desc");
  147. var _DelegationInfo = await _sqlSugar.SqlQueryable<Web_ShareGroupInfoView>(sql).ToListAsync();
  148. if (_DelegationInfo.Count > 0)
  149. {
  150. foreach (var item in _DelegationInfo)
  151. {
  152. item.VisitCountry = FormartTeamName(item.VisitCountry);
  153. }
  154. }
  155. else { result.Msg = "暂无该团组信息"; return result; }
  156. if (portType == 1) //Web
  157. {
  158. result.Data = _DelegationInfo;
  159. }
  160. else if (portType == 2 || portType == 3) //IOS Or Android
  161. {
  162. result.Data = _DelegationInfo;
  163. }
  164. else { result.Msg = "请输入正确的端口号。1 Web 2 Android 3 IOS"; return result; }
  165. result.Code = 0;
  166. result.Msg = "成功!";
  167. return result;
  168. }
  169. #endregion
  170. /// <summary>
  171. /// 获取接团信息Info
  172. /// </summary>
  173. /// <param name="dto"></param>
  174. /// <returns></returns>
  175. public async Task<Result> PostGroupInfo(GroupInfoDto dto)
  176. {
  177. var result = new Result() { Code = -2, Msg = "未知错误" };
  178. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //Web Or Android
  179. {
  180. string sql = string.Format(@"Select Id,SalesQuoteNo,TourCode,JietuanOperator,TeamLevSId,TeamDid,TeamName,ClientName,
  181. ClientUnit,VisitCountry,VisitDate,VisitDays,VisitPNumber,TontractTime,
  182. PayDay,PaymentMoney,VisitPurpose,SpecialNeeds,OtherNeeds,CGRWSPBMMC,CGRWSPWH,
  183. ZZSCBMMC,ZZSCSPWH,Remark,TellPhone,Officialneeds
  184. From Grp_DelegationInfo Where Id = {0} And IsDel = 0", dto.Id);
  185. var _DelegationInfo = await _sqlSugar.SqlQueryable<DelegationInfoWebView>(sql).FirstAsync();
  186. if (_DelegationInfo != null)
  187. {
  188. _DelegationInfo.TeamName = FormartTeamName(_DelegationInfo.TeamName);
  189. result.Code = 0;
  190. result.Msg = "成功!";
  191. result.Data = _DelegationInfo;
  192. }
  193. else result.Msg = "暂无该团组信息";
  194. }
  195. return result;
  196. }
  197. #region 团组
  198. /// <summary>
  199. /// 统一团组国家分割字符
  200. /// </summary>
  201. /// <param name="teamName"></param>
  202. /// <returns></returns>
  203. public string FormartTeamName(string? teamName)
  204. {
  205. string str = "";
  206. if (!string.IsNullOrEmpty(teamName))
  207. {
  208. str = teamName;
  209. var searchreplaces = new List<string>() { "|", " ", "/", ",", "," };
  210. foreach (var item in searchreplaces)
  211. {
  212. if (str.Contains(item))
  213. {
  214. str = str.Replace(item, "、");
  215. break;
  216. }
  217. }
  218. }
  219. return str.Trim();
  220. }
  221. /// <summary>
  222. /// 团组国家分割字符
  223. /// 返回 国家数组
  224. /// </summary>
  225. /// <param name="visitCountry"></param>
  226. /// <returns></returns>
  227. public List<string> GroupSplitCountry(string visitCountry)
  228. {
  229. var countrys = new List<string>();
  230. if (!string.IsNullOrEmpty(visitCountry))
  231. {
  232. if (visitCountry.Contains("、")) countrys = visitCountry.Split("、").ToList();
  233. else if (visitCountry.Contains("|")) countrys = visitCountry.Split("|").ToList();
  234. else countrys.Add(visitCountry);
  235. }
  236. return countrys;
  237. }
  238. /// <summary>
  239. /// 获取接团信息 Page List
  240. /// </summary>
  241. /// <param name="dto"></param>
  242. /// <returns></returns>
  243. public async Task<Result> GetGroupPageList(GroupCommissionDto dto)
  244. {
  245. var result = new Result() { Code = -2, Msg = "未知错误" };
  246. var groupsInfoPageList = new ListViewBase<DelegationPageListView>()
  247. {
  248. ReceiveDt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
  249. };
  250. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web
  251. {
  252. int startIndex = (dto.PageIndex - 1) * dto.PageSize + 1;
  253. int endIndex = startIndex + dto.PageSize - 1;
  254. //int taskUserId = -1;
  255. string taskGroupIds = string.Empty;
  256. #region 处理用户团组操作权限
  257. if (dto.UserId != -1)
  258. {
  259. }
  260. #endregion
  261. string sql = string.Format(@"Select * From(Select row_number() over (order by gdi.Id Desc) as RowNumber,
  262. gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,ssd1.Id TeamLevId,
  263. ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,VisitDate,VisitDays,VisitPNumber,
  264. su.CnName JietuanOperator,IsSure
  265. From Grp_DelegationInfo gdi
  266. Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id
  267. Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id
  268. Left Join Sys_Users su On gdi.CreateUserId = su.Id
  269. Where gdi.IsDel = 0
  270. )temp Where RowNumber Between {0} and {1}", startIndex, endIndex);
  271. string sqlCount = string.Format(@"Select Count(1) as Count From Grp_DelegationInfo gdi
  272. Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id
  273. Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id
  274. Left Join Sys_Users su On gdi.CreateUserId = su.Id
  275. Where gdi.IsDel = 0 ");
  276. List<DelegationPageListView> _DeleInfoList = await _sqlSugar.SqlQueryable<DelegationPageListView>(sql).ToListAsync();
  277. DelegationPageCountView _DeleCount = await _sqlSugar.SqlQueryable<DelegationPageCountView>(sqlCount).FirstAsync();
  278. int count = _DeleCount.Count;
  279. groupsInfoPageList = new ListViewBase<DelegationPageListView>
  280. {
  281. CurrPageIndex = dto.PageIndex,
  282. CurrPageSize = dto.PageSize,
  283. DataCount = count,
  284. DataList = _DeleInfoList
  285. };
  286. result.Code = 0;
  287. result.Msg = "成功!";
  288. result.Data = groupsInfoPageList;
  289. }
  290. return result;
  291. }
  292. /// <summary>
  293. /// 获取接团信息List
  294. /// </summary>
  295. /// <param name="dto"></param>
  296. /// <returns></returns>
  297. public async Task<Result> GetGroupList(GroupListDto dto)
  298. {
  299. var result = new Result() { Code = -2, Msg = "未知错误" };
  300. if (dto.PortType == 1)
  301. {
  302. string sql = string.Format(@"Select gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,VisitDate,VisitDays,VisitPNumber,su.CnName JietuanOperator,IsSure
  303. ,gs.Id as GrpScheduleId
  304. From Grp_DelegationInfo gdi
  305. Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id
  306. Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id
  307. Left Join Sys_Users su On gdi.CreateUserId = su.Id
  308. left Join Grp_Schedule gs On gdi.Id = gs.DiId
  309. Where gdi.IsDel = 0
  310. Order By gdi.CreateTime Desc");
  311. var _DelegationList = await _sqlSugar.SqlQueryable<DelegationListView>(sql).ToListAsync();
  312. if (_DelegationList.Count > 0)
  313. {
  314. result.Code = 0;
  315. result.Msg = "成功!";
  316. result.Data = _DelegationList;
  317. }
  318. else
  319. {
  320. result.Msg = "暂无该团组信息";
  321. }
  322. }
  323. else if (dto.PortType == 2 || dto.PortType == 3) //web
  324. {
  325. string sql = string.Format(@"Select gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,VisitDate,VisitDays,VisitPNumber,su.CnName JietuanOperator,IsSure
  326. From Grp_DelegationInfo gdi
  327. Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id
  328. Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id
  329. Left Join Sys_Users su On gdi.CreateUserId = su.Id
  330. Where gdi.IsDel = 0
  331. Order By gdi.CreateTime Desc");
  332. var _DelegationList = await _sqlSugar.SqlQueryable<DelegationListView>(sql).ToListAsync();
  333. if (_DelegationList.Count > 0)
  334. {
  335. result.Code = 0;
  336. result.Msg = "成功!";
  337. result.Data = _DelegationList;
  338. }
  339. else
  340. {
  341. result.Msg = "暂无该团组信息";
  342. }
  343. }
  344. return result;
  345. }
  346. /// <summary>
  347. /// 获取接团信息Info
  348. /// </summary>
  349. /// <param name="dto"></param>
  350. /// <returns></returns>
  351. public async Task<Result> GetGroupInfo(GroupInfoDto dto)
  352. {
  353. var result = new Result() { Code = -2, Msg = "未知错误" };
  354. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //Web Or Android
  355. {
  356. string sql = string.Format(@"Select Id,CityId,SalesQuoteNo,TourCode,JietuanOperator,TeamLevSId,TeamDid,TeamName,ClientName,
  357. ClientUnit,VisitCountry,VisitDate,VisitDays,VisitPNumber,TontractTime,IsBid,
  358. PayDay,PaymentMoney,VisitPurpose,SpecialNeeds,OtherNeeds,CGRWSPBMMC,CGRWSPWH,
  359. ZZSCBMMC,ZZSCSPWH,Remark,TellPhone,WeChatNo,OpRoyaltyLv,OpRoyaltyRemark,Officialneeds
  360. From Grp_DelegationInfo Where Id = {0} And IsDel = 0", dto.Id);
  361. var _DelegationInfo = await _sqlSugar.SqlQueryable<DelegationInfoWebView>(sql).FirstAsync();
  362. if (_DelegationInfo != null)
  363. {
  364. _DelegationInfo.TeamName = FormartTeamName(_DelegationInfo.TeamName);
  365. _DelegationInfo.VisitCountry = FormartTeamName(_DelegationInfo.VisitCountry);
  366. //验证城市值 不存在则设置默认值
  367. var cityInfo = await CityInfoById(_DelegationInfo.CityId);
  368. if (cityInfo != null)
  369. {
  370. _DelegationInfo.CityName = cityInfo.Name;
  371. }
  372. else
  373. {
  374. _DelegationInfo.CityId = 3505;
  375. _DelegationInfo.CityName = "四川-成都";
  376. }
  377. //if (_DelegationInfo.TontractTime)
  378. //{
  379. //}
  380. result.Code = 0;
  381. result.Msg = "成功!";
  382. result.Data = _DelegationInfo;
  383. if (dto.PortType == 2)
  384. {
  385. var GroupProcessOperationDtoParam = new GroupProcessOperationDto();
  386. GroupProcessOperationDtoParam = _mapper.Map<DelegationInfoWebView, GroupProcessOperationDto>(_DelegationInfo);
  387. List<Crm_DeleClient> DeleClientArr = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0).ToListAsync(); //客户信息
  388. List<Grp_TourClientList> _DeleClients = await _sqlSugar.Queryable<Grp_TourClientList>().Where(it => it.IsDel == 0 && it.DiId == dto.Id).ToListAsync(); // 接团客户名单
  389. List<Crm_CustomerCert> _CustomerCerts = await _sqlSugar.Queryable<Crm_CustomerCert>().Where(it => it.IsDel == 0 && it.SdId == 773).ToListAsync(); // 身份证类型证件信息
  390. List<Crm_CustomerCompany> CompanyArr = await _sqlSugar.Queryable<Crm_CustomerCompany>().Where(it => it.IsDel == 0).ToListAsync();
  391. var TourClientListInfoArr = new List<TourClientListProcessInfo>();
  392. var timeParam = new DateTime();
  393. foreach (var item in _DeleClients)
  394. {
  395. var param = new TourClientListProcessInfo();
  396. var clientInfo = DeleClientArr.FirstOrDefault(x => x.Id == item.ClientId);
  397. clientInfo ??= new Crm_DeleClient();
  398. var clientIDInfo = _CustomerCerts.FirstOrDefault(x => x.DcId == item.ClientId); //身份证信息
  399. clientIDInfo ??= new Crm_CustomerCert();
  400. var Company = CompanyArr.FirstOrDefault(x => x.Id == clientInfo.CrmCompanyId);
  401. Company ??= new Crm_CustomerCompany();
  402. param.IDCardNo = clientIDInfo.CertNo;
  403. param.Remark = item.Remark;
  404. param.BirthDay = clientInfo.BirthDay == null ? "" : DateTime.TryParse(Convert.ToDateTime(clientInfo.BirthDay).ToString("yyyy-MM-dd"), out timeParam) ? timeParam.ToString("yyyy-MM-dd") : "";
  405. param.FirstName = clientInfo.FirstName;
  406. param.LastName = clientInfo.LastName;
  407. param.CompanyFullName = Company.CompanyFullName;
  408. param.Job = clientInfo.Job;
  409. param.Sex = clientInfo.Sex;
  410. param.Phone = clientInfo.Phone;
  411. param.Pinyin = clientInfo.Pinyin;
  412. param.HotelSpecialNeeds = item.HotelSpecialNeeds;
  413. param.MealSpecialNeeds = item.MealSpecialNeeds;
  414. param.ShippingSpaceSpecialNeeds = item.ShippingSpaceSpecialNeeds;
  415. param.ShippingSpaceTypeId = item.ShippingSpaceTypeId;
  416. param.Id = clientInfo.Id;
  417. EncryptionProcessor.DecryptProperties(param);
  418. TourClientListInfoArr.Add(param);
  419. }
  420. GroupProcessOperationDtoParam.PortType = dto.PortType;
  421. GroupProcessOperationDtoParam.TourClientListInfos = TourClientListInfoArr;
  422. GroupProcessOperationDtoParam.VisitDate = DateTime.TryParse(GroupProcessOperationDtoParam.VisitDate, out timeParam) ? timeParam.ToString("yyyy-MM-dd") : "";
  423. GroupProcessOperationDtoParam.VisitDate = DateTime.TryParse(GroupProcessOperationDtoParam.VisitDate, out timeParam) ? timeParam.ToString("yyyy-MM-dd") : "";
  424. GroupProcessOperationDtoParam.TontractTime = DateTime.TryParse(GroupProcessOperationDtoParam.TontractTime, out timeParam) ? timeParam.ToString("yyyy-MM-dd") : "";
  425. result.Data = GroupProcessOperationDtoParam;
  426. }
  427. else if (dto.PortType == 3)
  428. {
  429. var GroupProcessOperationDtoParam = new GroupProcessOperationDto();
  430. GroupProcessOperationDtoParam = _mapper.Map<DelegationInfoWebView, GroupProcessOperationDto>(_DelegationInfo);
  431. List<Crm_DeleClient> DeleClientArr = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0).ToListAsync(); //客户信息
  432. List<Grp_TourClientList> _DeleClients = await _sqlSugar.Queryable<Grp_TourClientList>().Where(it => it.IsDel == 0 && it.DiId == dto.Id).ToListAsync(); // 接团客户名单
  433. List<Crm_CustomerCert> _CustomerCerts = await _sqlSugar.Queryable<Crm_CustomerCert>().Where(it => it.IsDel == 0 && it.SdId == 773).ToListAsync(); // 身份证类型证件信息
  434. List<Crm_CustomerCompany> CompanyArr = await _sqlSugar.Queryable<Crm_CustomerCompany>().Where(it => it.IsDel == 0).ToListAsync();
  435. var TourClientListInfoArr = new List<TourClientListProcessInfo>();
  436. var timeParam = new DateTime();
  437. foreach (var item in _DeleClients)
  438. {
  439. var param = new TourClientListProcessInfo();
  440. var clientInfo = DeleClientArr.FirstOrDefault(x => x.Id == item.ClientId);
  441. clientInfo ??= new Crm_DeleClient();
  442. var clientIDInfo = _CustomerCerts.FirstOrDefault(x => x.DcId == item.ClientId); //身份证信息
  443. clientIDInfo ??= new Crm_CustomerCert();
  444. var Company = CompanyArr.FirstOrDefault(x => x.Id == clientInfo.CrmCompanyId);
  445. Company ??= new Crm_CustomerCompany();
  446. param.IDCardNo = clientIDInfo.CertNo;
  447. param.Remark = item.Remark;
  448. param.BirthDay = clientInfo.BirthDay == null ? "" : DateTime.TryParse(Convert.ToDateTime(clientInfo.BirthDay).ToString("yyyy-MM-dd"), out timeParam) ? timeParam.ToString("yyyy-MM-dd") : "";
  449. param.FirstName = clientInfo.FirstName;
  450. param.LastName = clientInfo.LastName;
  451. param.CompanyFullName = Company.CompanyFullName;
  452. param.Job = clientInfo.Job;
  453. param.Sex = clientInfo.Sex;
  454. param.Phone = clientInfo.Phone;
  455. param.Pinyin = clientInfo.Pinyin;
  456. param.HotelSpecialNeeds = item.HotelSpecialNeeds;
  457. param.MealSpecialNeeds = item.MealSpecialNeeds;
  458. param.ShippingSpaceSpecialNeeds = item.ShippingSpaceSpecialNeeds;
  459. param.ShippingSpaceTypeId = item.ShippingSpaceTypeId;
  460. param.Id = item.Id;
  461. EncryptionProcessor.DecryptProperties(param);
  462. TourClientListInfoArr.Add(param);
  463. }
  464. GroupProcessOperationDtoParam.PortType = dto.PortType;
  465. GroupProcessOperationDtoParam.TourClientListInfos = TourClientListInfoArr;
  466. GroupProcessOperationDtoParam.VisitDate = DateTime.TryParse(GroupProcessOperationDtoParam.VisitDate, out timeParam) ? timeParam.ToString("yyyy-MM-dd") : "";
  467. GroupProcessOperationDtoParam.TontractTime = DateTime.TryParse(GroupProcessOperationDtoParam.TontractTime, out timeParam) ? timeParam.ToString("yyyy-MM-dd") : "";
  468. result.Data = GroupProcessOperationDtoParam;
  469. }
  470. }
  471. else result.Msg = "暂无该团组信息";
  472. }
  473. return result;
  474. }
  475. /// <summary>
  476. /// 获取接团信息 编辑
  477. /// 城市基础 数据源
  478. /// </summary>
  479. /// <param name="dto"></param>
  480. /// <returns></returns>
  481. public async Task<List<CityTree>> ProvinceCityBasicSource()
  482. {
  483. var data = await _sqlSugar.Queryable<CityTree>().AS("Sys_Cities")
  484. .Where(x => x.IsDel == 0 && x.CountriesId == 44)
  485. .ToTreeAsync(it => it.Child, it => it.ParentId, 0);
  486. if (data.Any())
  487. {
  488. //移动指定数据在最前面
  489. data = MoveElementToFront(data, "云南");
  490. data = MoveElementToFront(data, "贵州");
  491. data = MoveElementToFront(data, "重庆");
  492. data = MoveElementToFront(data, "四川");
  493. }
  494. return data;
  495. }
  496. /// <summary>
  497. /// 获取接团信息 编辑
  498. /// 省份基础 数据源
  499. /// </summary>
  500. /// <param name="dto"></param>
  501. /// <returns></returns>
  502. public async Task<GroupCityBasicSourceView[]> ProvinceBasicSource()
  503. {
  504. var list = Array.Empty<GroupCityBasicSourceView>();
  505. var data = await ProvinceCityBasicSource();
  506. if (data.Any())
  507. {
  508. //移动指定数据在最前面
  509. data = MoveElementToFront(data, "北京");
  510. data = MoveElementToFront(data, "云南");
  511. data = MoveElementToFront(data, "贵州");
  512. data = MoveElementToFront(data, "重庆");
  513. data = MoveElementToFront(data, "四川");
  514. list = data.Select(x => new GroupCityBasicSourceView() { Id = x.Id, Name = x.Name_CN }).ToArray();
  515. }
  516. return list;
  517. }
  518. /// <summary>
  519. /// 获取接团信息 编辑
  520. /// 城市基础 数据源
  521. /// </summary>
  522. /// <param name="dto"></param>
  523. /// <returns></returns>
  524. public async Task<GroupCityBasicSourceView[]> CityBasicSource()
  525. {
  526. var list = new List<GroupCityBasicSourceView>();
  527. var data = await ProvinceCityBasicSource();
  528. if (data.Any())
  529. {
  530. //移动指定数据在最前面
  531. data = MoveElementToFront(data, "云南");
  532. data = MoveElementToFront(data, "贵州");
  533. data = MoveElementToFront(data, "重庆");
  534. data = MoveElementToFront(data, "四川");
  535. foreach (var province in data)
  536. {
  537. foreach (var city in province.Child)
  538. {
  539. list.Add(new GroupCityBasicSourceView()
  540. {
  541. Id = city.Id,
  542. Name = $"{province.Name_CN}-{city.Name_CN}"
  543. });
  544. }
  545. }
  546. //四川成都放在最前面
  547. var cdInfo = list.FirstOrDefault(x => x.Name.Equals("四川-成都"));
  548. if (cdInfo != null)
  549. {
  550. list.Remove(cdInfo);
  551. list.Insert(0, cdInfo);
  552. }
  553. }
  554. return list.ToArray();
  555. }
  556. /// <summary>
  557. /// 获取接团信息 编辑
  558. /// 基础 数据源
  559. /// </summary>
  560. /// <param name="dto"></param>
  561. /// <returns></returns>
  562. public async Task<GroupCityBasicSourceView> CityInfoById(int id)
  563. {
  564. var list = await CityBasicSource();
  565. var info = list.FirstOrDefault(x => x.Id == id);
  566. return info;
  567. }
  568. private static List<CityTree> MoveElementToFront(List<CityTree> list, string elementName)
  569. {
  570. var element = list.FirstOrDefault(x => x.Name_CN == elementName);
  571. if (element != null)
  572. {
  573. list.Remove(element);
  574. list.Insert(0, element);
  575. }
  576. return list;
  577. }
  578. /// <summary>
  579. /// 获取接团信息 编辑
  580. /// 基础 数据源
  581. /// </summary>
  582. /// <param name="dto"></param>
  583. /// <returns></returns>
  584. public async Task<Result> GroupEditBasicSource(GroupListDto dto)
  585. {
  586. var result = new Result() { Code = -2, Msg = "未知错误" };
  587. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web
  588. {
  589. dynamic? teamTypeData1 = null;
  590. string teamTypeSql = string.Format(@"Select Id,Name From Sys_SetData Where STid = {0} And IsDel = {1}", 10, 0);
  591. var teamTypeData = await _sqlSugar.SqlQueryable<SetDataInfoView>(teamTypeSql).ToListAsync(); ; //团组分类 10
  592. if (teamTypeData.Any())
  593. {
  594. teamTypeData1 = teamTypeData;
  595. if (teamTypeData.Any(x => x.Name.Equals("前期沟通")))
  596. {
  597. var info = teamTypeData.Find(x => x.Name.Equals("前期沟通"));
  598. if (info != null)
  599. {
  600. teamTypeData.Remove(info);
  601. teamTypeData.Insert(2, info);
  602. }
  603. }
  604. }
  605. dynamic? teamLevData1 = null;
  606. string teamLevSql = string.Format(@"Select Id,Name From Sys_SetData Where STid = {0} And IsDel = {1}", 56, 0);
  607. var teamLevData = await _sqlSugar.SqlQueryable<SetDataInfoView>(teamLevSql).ToListAsync(); ; //团组等级 56
  608. if (teamLevData.Any())
  609. {
  610. teamLevData1 = teamLevData;
  611. }
  612. dynamic? userData1 = null;
  613. string userSql = string.Format(@"Select Id,CnName From Sys_Users Where IsDel = {0}", 0);
  614. var userData = await _sqlSugar.SqlQueryable<UserNameView>(userSql).ToListAsync();
  615. if (userData.Any())
  616. {
  617. userData1 = userData;
  618. }
  619. //客户单位数据源 来源市场客户资料
  620. dynamic? clientData1 = null;
  621. string clientSql = $@"Select Client,Contact,Telephone,WeChat From Crm_NewClientData Where IsDel = 0";
  622. var clientData = await _sqlSugar.SqlQueryable<Crm_NewClientData>(clientSql).ToListAsync();
  623. if (clientData.Any())
  624. {
  625. clientData1 = clientData.Select(it => new
  626. {
  627. Client = AesEncryptionHelper.Decrypt(it.Client),
  628. Contact = AesEncryptionHelper.Decrypt(it.Contact),
  629. Telephone = AesEncryptionHelper.Decrypt(it.Telephone),
  630. Wechat = AesEncryptionHelper.Decrypt(it.Wechat)
  631. }).ToList();
  632. }
  633. var userDepDatas = new List<TextView>();
  634. userDepDatas.Insert(0, new TextView() { Text = "全部", Value = "全部" });
  635. userDepDatas.Insert(1, new TextView() { Text = "国交部", Value = "国交部" });
  636. userDepDatas.Insert(2, new TextView() { Text = "市场部", Value = "市场部" });
  637. userDepDatas.Insert(3, new TextView() { Text = "策划部", Value = "策划部" });
  638. var rankDatas = await _sqlSugar.Queryable<Sys_SetData>().Where(x => x.IsDel == 0 && x.STid == 56).Select(x => new TextView { Value = x.Id.ToString(), Text = x.Name }).ToListAsync();
  639. rankDatas.Insert(0, new TextView { Value = "0", Text = "全部" });
  640. result.Code = 0;
  641. result.Msg = "成功!";
  642. result.Data = new
  643. {
  644. teamTypeData = teamTypeData1,
  645. teamLevData = teamLevData1,
  646. userData = userData1,
  647. clientData = clientData1,
  648. depData = userDepDatas,
  649. rankData = rankDatas,
  650. cityData = await CityBasicSource()
  651. };
  652. }
  653. return result;
  654. }
  655. /// <summary>
  656. /// 团组信息操作
  657. /// </summary>
  658. /// <param name="dto"></param>
  659. /// <returns></returns>
  660. public async Task<Result> GroupOperation(GroupOperationDto dto)
  661. {
  662. var result = new Result() { Code = -2, Msg = "未知错误" };
  663. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web
  664. {
  665. #region 添加出访起止时间
  666. var startTime = new DateTime();
  667. var endTime = new DateTime();
  668. if (DateTime.TryParse(dto.VisitDate, out startTime))
  669. {
  670. endTime = startTime.AddDays(dto.VisitDays - 1);//含当天
  671. }
  672. #endregion
  673. if (dto.Status == 1) //添加
  674. {
  675. string selectSql = string.Format(@"Select * From Grp_DelegationInfo
  676. Where IsDel = 0
  677. And TeamName = '{0}'
  678. And ClientName = '{1}'
  679. And ClientUnit ='{2}'
  680. And VisitDate ='{3}'", dto.TeamName, dto.ClientName, dto.ClientUnit, dto.VisitDate);
  681. var selectGroupInfo = _sqlSugar.SqlQueryable<Grp_DelegationInfo>(selectSql).First();
  682. if (selectGroupInfo != null)
  683. {
  684. result.Msg = "数据已存在,请勿重复添加!";
  685. return result;
  686. }
  687. //string teamCodeSql = string.Format("Select SalesQuoteNo From Grp_DelegationInfo");
  688. //var teamCodeItem = await _sqlSugar.SqlQueryable<TeamCodeView>(teamCodeSql).ToListAsync();
  689. //string SalesQuoteNo = "";
  690. //while (true)
  691. //{
  692. // SalesQuoteNo = Tools.CommonFun.GetRandomStr(6);
  693. // if (!teamCodeItem.Equals(SalesQuoteNo))
  694. // {
  695. // break;
  696. // }
  697. //}
  698. string countrys = string.Empty;
  699. string countryReq = dto.VisitCountry;
  700. if (!string.IsNullOrEmpty(countryReq))
  701. {
  702. if (countryReq.Contains(",")) countrys = countryReq.Replace(',', '|');
  703. else if (countryReq.Contains(",")) countrys = countryReq.Replace(',', '|');
  704. else if (countryReq.Contains(" ")) countrys = countryReq.Replace(' ', '|');
  705. else if (countryReq.Contains("、")) countrys = countryReq.Replace('、', '|');
  706. else if (countryReq.Contains(".")) countrys = countryReq.Replace('.', '|');
  707. else countrys = countryReq;
  708. }
  709. //建团时 默认出团 设置 团组code
  710. string teamCode = "";
  711. string teamCodeSql = string.Format("Select TourCode From Grp_DelegationInfo");
  712. var teamCodeItem = await _sqlSugar.SqlQueryable<TeamCodeView>(teamCodeSql).ToListAsync();
  713. while (true)
  714. {
  715. teamCode = Tools.CommonFun.GetRandomAllStr(6);
  716. if (!teamCodeItem.Equals(teamCode))
  717. {
  718. break;
  719. }
  720. }
  721. var delegationInfo = new Grp_DelegationInfo()
  722. {
  723. CityId = dto.CityId,
  724. SalesQuoteNo = dto.SalesQuoteNo,
  725. TeamLevSId = dto.TeamLevSId,
  726. ClientName = dto.ClientName,
  727. ClientUnit = dto.ClientUnit,
  728. TeamName = dto.TeamName,
  729. TeamDid = dto.TeamDid,
  730. VisitDate = Convert.ToDateTime(dto.VisitDate),
  731. VisitCountry = countrys,
  732. VisitPurpose = dto.VisitPurpose,
  733. VisitDays = dto.VisitDays,
  734. VisitPNumber = dto.VisitPNumber,
  735. SpecialNeeds = dto.SpecialNeeds,
  736. OtherNeeds = dto.OtherNeeds,
  737. Remark = dto.Remark,
  738. JietuanOperator = dto.JietuanOperator,
  739. TellPhone = dto.TellPhone,
  740. WeChatNo = dto.WeChatNo,
  741. CGRWSPBMMC = dto.CGRWSPBMMC,
  742. CGRWSPWH = dto.CGRWSPWH,
  743. ZZSCBMMC = dto.ZZSCBMMC,
  744. ZZSCSPWH = dto.ZZSCSPWH,
  745. TontractTime = string.IsNullOrEmpty(dto.TontractTime) ? null : Convert.ToDateTime(dto.TontractTime),
  746. IsBid = dto.IsBid,
  747. PaymentMoney = dto.PaymentMoney,
  748. PayDay = dto.PayDay,
  749. TourCode = teamCode,
  750. GroupsOperator = dto.UserId,
  751. GroupsTime = DateTime.Now,
  752. SalesDate = DateTime.Now,
  753. IsState = 0, //默认团组未完成 0
  754. JietuanTime = DateTime.Now,
  755. IsDel = 0,
  756. BudgetCost = 0.00M,
  757. HotelComplain = 0,
  758. OPComplain = 0,
  759. OAComplain = 0,
  760. AirComplain = 0,
  761. VisaComplain = 0,
  762. CreateUserId = dto.UserId,
  763. CreateTime = DateTime.Now,
  764. DeleteUserId = null,
  765. DeleteTime = new DateTime(1990, 1, 1).ToString("yyyy-MM-dd HH:mm:ss"),
  766. OpRoyaltyLv = dto.OpRoyaltyLv,
  767. OpRoyaltyRemark = dto.opRoyaltyRemark,
  768. Officialneeds = dto.Officialneeds,
  769. VisitStartDate = startTime,
  770. VisitEndDate = endTime,
  771. };
  772. var addId = _sqlSugar.Insertable(delegationInfo).ExecuteReturnIdentity();
  773. if (addId > 0)
  774. {
  775. result.Code = 0;
  776. result.Msg = "添加成功!";
  777. result.Data = addId;
  778. }
  779. else
  780. {
  781. result.Msg = "添加失败!";
  782. }
  783. }
  784. else if (dto.Status == 2) //修改
  785. {
  786. var updateStatus = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_DelegationInfo
  787. {
  788. CityId = dto.CityId,
  789. SalesQuoteNo = dto.SalesQuoteNo,
  790. TeamLevSId = dto.TeamLevSId,
  791. ClientName = dto.ClientName,
  792. ClientUnit = dto.ClientUnit,
  793. TeamName = dto.TeamName,
  794. TeamDid = dto.TeamDid,
  795. VisitDate = Convert.ToDateTime(dto.VisitDate),
  796. VisitCountry = dto.VisitCountry,
  797. VisitPurpose = dto.VisitPurpose,
  798. VisitDays = dto.VisitDays,
  799. VisitPNumber = dto.VisitPNumber,
  800. SpecialNeeds = dto.SpecialNeeds,
  801. OtherNeeds = dto.OtherNeeds,
  802. Remark = dto.Remark,
  803. JietuanOperator = dto.JietuanOperator,
  804. TellPhone = dto.TellPhone,
  805. WeChatNo = dto.WeChatNo,
  806. CGRWSPBMMC = dto.CGRWSPBMMC,
  807. CGRWSPWH = dto.CGRWSPWH,
  808. ZZSCBMMC = dto.ZZSCBMMC,
  809. ZZSCSPWH = dto.ZZSCSPWH,
  810. TontractTime = string.IsNullOrEmpty(dto.TontractTime) ? null : Convert.ToDateTime(dto.TontractTime),
  811. IsBid = dto.IsBid,
  812. PaymentMoney = dto.PaymentMoney,
  813. PayDay = dto.PayDay,
  814. OpRoyaltyLv = dto.OpRoyaltyLv,
  815. OpRoyaltyRemark = dto.opRoyaltyRemark,
  816. Officialneeds = dto.Officialneeds,
  817. VisitStartDate = startTime,
  818. VisitEndDate = endTime,
  819. });
  820. if (updateStatus)
  821. {
  822. result.Code = 0;
  823. result.Msg = "修改成功!";
  824. }
  825. else
  826. {
  827. result.Msg = "修改失败!";
  828. }
  829. }
  830. else if (dto.Status == 3) //删除
  831. {
  832. var deleteStatus = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_DelegationInfo
  833. {
  834. DeleteUserId = dto.UserId,
  835. DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  836. IsDel = 1
  837. });
  838. if (deleteStatus)
  839. {
  840. result.Code = 0;
  841. result.Msg = "删除成功!";
  842. }
  843. else
  844. {
  845. result.Msg = "删除失败!";
  846. }
  847. }
  848. }
  849. return result;
  850. }
  851. /// <summary>
  852. /// 团组信息操作 - 删除
  853. /// </summary>
  854. /// <param name="dto"></param>
  855. /// <returns></returns>
  856. public async Task<Result> GroupDel(GroupDelDto dto)
  857. {
  858. var result = new Result() { Code = -2, Msg = "未知错误" };
  859. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web
  860. {
  861. var deleteStatus = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_DelegationInfo
  862. {
  863. DeleteUserId = dto.UserId,
  864. DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  865. IsDel = 1
  866. });
  867. if (deleteStatus)
  868. {
  869. result.Code = 0;
  870. result.Msg = "删除成功!";
  871. }
  872. else
  873. {
  874. result.Msg = "删除失败!";
  875. }
  876. }
  877. return result;
  878. }
  879. /// <summary>
  880. /// 获取销售报价号
  881. /// </summary>
  882. /// <returns></returns>
  883. public async Task<Result> GetGroupSalesQuoteNo()
  884. {
  885. var result = new Result() { Code = -2, Msg = "未知错误" };
  886. string teamCodeSql = string.Format("Select SalesQuoteNo From Grp_DelegationInfo");
  887. var teamCodeItem = await _sqlSugar.SqlQueryable<SalesQuoteNoView>(teamCodeSql).ToListAsync();
  888. string teamCode;
  889. while (true)
  890. {
  891. teamCode = Tools.CommonFun.GetRandomAllStr(6);
  892. if (!teamCodeItem.Equals(teamCode))
  893. {
  894. break;
  895. }
  896. }
  897. result.Code = 0;
  898. result.Msg = "成功!";
  899. result.Data = teamCode;
  900. return result;
  901. }
  902. /// <summary>
  903. /// 团组删除
  904. /// </summary>
  905. /// <returns></returns>
  906. public async Task<Result> GroupDeleteById()
  907. {
  908. var result = new Result() { Code = -2, Msg = "未知错误" };
  909. string teamCodeSql = string.Format("Select TourCode From Grp_DelegationInfo");
  910. var teamCodeItem = await _sqlSugar.SqlQueryable<TeamCodeView>(teamCodeSql).ToListAsync();
  911. string teamCode;
  912. while (true)
  913. {
  914. teamCode = Tools.CommonFun.GetRandomAllStr(6);
  915. if (!teamCodeItem.Equals(teamCode))
  916. {
  917. break;
  918. }
  919. }
  920. result.Code = 0;
  921. result.Msg = "成功!";
  922. result.Data = teamCode;
  923. return result;
  924. }
  925. /// <summary>
  926. /// 团组确认出团
  927. /// </summary>
  928. /// <returns></returns>
  929. public async Task<Result> ConfirmationGroup(ConfirmationGroupDto dto)
  930. {
  931. var result = new Result() { Code = -2, Msg = "未知错误" };
  932. string teamCode = "";
  933. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web
  934. {
  935. string teamCodeSql = string.Format("Select TourCode From Grp_DelegationInfo");
  936. var teamCodeItem = await _sqlSugar.SqlQueryable<TeamCodeView>(teamCodeSql).ToListAsync();
  937. while (true)
  938. {
  939. teamCode = Tools.CommonFun.GetRandomAllStr(6);
  940. if (!teamCodeItem.Equals(teamCode))
  941. {
  942. break;
  943. }
  944. }
  945. var deleteStatus = await UpdateAsync(a => a.Id == dto.GroupId, a => new Grp_DelegationInfo
  946. {
  947. TourCode = teamCode,
  948. GroupsOperator = dto.GroupsOperator,
  949. GroupsTime = DateTime.Now
  950. });
  951. if (deleteStatus)
  952. {
  953. result.Code = 0;
  954. result.Msg = "确认出团设置成功!";
  955. }
  956. else
  957. {
  958. result.Msg = "确认出团设置失败!";
  959. }
  960. }
  961. result.Code = 0;
  962. result.Msg = "成功!";
  963. result.Data = teamCode;
  964. return result;
  965. }
  966. /// <summary>
  967. /// 获取接团名称List
  968. /// </summary>
  969. /// <param name="dto"></param>
  970. /// <returns></returns>
  971. public async Task<JsonView> GetGroupNameList(GroupNameDto dto)
  972. {
  973. var view = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作失败!" };
  974. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web
  975. {
  976. //2025-02-17 更改团组列表排序功能 按照团出访时间排序(降序)
  977. string sql = string.Format(@"Select Id,TeamName GroupName From Grp_DelegationInfo
  978. Where TeamName != '' And IsDel = 0
  979. Order By VisitStartDate Desc");
  980. var _groupNameList = await _sqlSugar.SqlQueryable<GroupNameView>(sql).ToListAsync();
  981. if (_groupNameList.Any())
  982. {
  983. for (int i = 0; i < _groupNameList.Count; i++)
  984. {
  985. var info = _groupNameList[i];
  986. _groupNameList[i].GroupName = FormartTeamName(info.GroupName);
  987. }
  988. //_groupNameList.Insert(0, new GroupNameView() { Id = 0, GroupName = "未选择" });
  989. view.Code = StatusCodes.Status200OK;
  990. view.Msg = "成功!";
  991. view.Data = _groupNameList;
  992. }
  993. else
  994. {
  995. view.Msg = "暂无团组信息";
  996. }
  997. }
  998. return view;
  999. }
  1000. //PostGroupNameScreen
  1001. /// <summary>
  1002. /// 获取接团名称 Page List
  1003. /// </summary>
  1004. /// <param name="dto"></param>
  1005. /// <returns></returns>
  1006. public async Task<JsonView> GetGroupNameList(int portType, int pageIndex, int pageSize, string groupName, int userId)
  1007. {
  1008. var _res = new JsonView() { Code = 400, Msg = MsgTips.Fail };
  1009. string sql = "";
  1010. string sqlWhere = "";
  1011. string mobileSqlWhere = "";
  1012. if (!string.IsNullOrEmpty(groupName))
  1013. {
  1014. sqlWhere += string.Format($@"And TeamName Like '%{groupName}%'");
  1015. mobileSqlWhere += string.Format($@"GroupName Like '%{groupName}%'");
  1016. }
  1017. var userIds = new List<int>() { -1, 21 };
  1018. if (!userIds.Contains(userId))
  1019. {
  1020. sqlWhere += string.Format($@"And JietuanOperator = {userId}");
  1021. }
  1022. sql = string.Format($@"Select ROW_NUMBER()Over(Order By Id Desc) as RowNumber,Id,TeamName GroupName From Grp_DelegationInfo
  1023. Where IsDel = 0 {sqlWhere}");
  1024. if (portType == 1) //web
  1025. { }
  1026. else if (portType == 2 || portType == 3)
  1027. {
  1028. //国交部 7 (主管 22,经理 32)团操操作权限 市场部 6 接团人
  1029. var userInfo = await _sqlSugar.Queryable<Sys_Users>().Where(it => it.Id == userId && it.IsDel == 0).FirstAsync();
  1030. if (userInfo != null)
  1031. {
  1032. if (userInfo.DepId == 7)
  1033. {
  1034. if (userInfo.JobPostId != 22 || userInfo.JobPostId != 32)
  1035. {
  1036. if (!string.IsNullOrEmpty(mobileSqlWhere)) mobileSqlWhere = $" Where {mobileSqlWhere}";
  1037. sql = string.Format($@"Select
  1038. ROW_NUMBER()Over(Order By Id Desc) as RowNumber,
  1039. Id,
  1040. GroupName
  1041. From (
  1042. Select
  1043. distinct
  1044. di.Id,
  1045. di.TeamName GroupName
  1046. From Grp_GroupsTaskAssignment gta With(NoLock)
  1047. Inner Join Grp_DelegationInfo di With(NoLock) On gta.DIId = di.Id
  1048. Where gta.IsDel = 0 And di.IsDel = 0 And gta.UId = {userId}
  1049. ) Temp {mobileSqlWhere}");
  1050. }
  1051. }
  1052. }
  1053. }
  1054. RefAsync<int> total = 0;
  1055. var groupNamePageData = await _sqlSugar.SqlQueryable<GroupNamePageView>(sql).ToPageListAsync(pageIndex, pageSize, total);
  1056. _res.Code = 200;
  1057. _res.Data = groupNamePageData;
  1058. _res.Msg = MsgTips.Succeed;
  1059. _res.Count = total;
  1060. return _res;
  1061. }
  1062. /// <summary>
  1063. /// 获取接团名称List And 签证国别
  1064. /// </summary>
  1065. /// <param name="dto"></param>
  1066. /// <returns></returns>
  1067. public async Task<Result> GetGroupNameAndVisaNationality(GroupNameDto dto)
  1068. {
  1069. var result = new Result() { Code = -2, Msg = "未知错误" };
  1070. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web
  1071. {
  1072. string sql = string.Format(@"Select Id,TeamName GroupName From Grp_DelegationInfo
  1073. Where TeamName != '' And IsDel = 0
  1074. Order By Id Desc");
  1075. var _groupNameList = await _sqlSugar.SqlQueryable<GroupNameView>(sql).ToListAsync();
  1076. string visaSql = string.Format(@"Select Id,Name From Sys_SetData Where STid = 41 And IsDel = 0");
  1077. var _setDataList = await _sqlSugar.SqlQueryable<SetDataInfoView>(visaSql).ToListAsync();
  1078. var data = new
  1079. {
  1080. groupNameData = _groupNameList,
  1081. visaNationalityData = _setDataList
  1082. };
  1083. result.Data = data;
  1084. result.Code = 0;
  1085. }
  1086. return result;
  1087. }
  1088. #endregion
  1089. #region 团组&签证
  1090. /// <summary>
  1091. /// 根据团组Id查询客户
  1092. /// </summary>
  1093. /// <param name="dto"></param>
  1094. /// <returns></returns>
  1095. public async Task<Result> GetCrmByGroupId(ClientByGroupIdDto dto)
  1096. {
  1097. var result = new Result() { Code = -2 };
  1098. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3)
  1099. {
  1100. string sql = string.Format(@"Select gdjc.GrpDCId grpId,cdc.Id,cdc.LastName+cdc.FirstName clientName,cdc.Tel,ccc.CertNo CerdNo
  1101. From Grp_DelegationJoinCustomer gdjc
  1102. Inner join Crm_DeleClient cdc On gdjc.CrmDCId = cdc.Id
  1103. Left Join Crm_CustomerCert ccc On ccc.SdId = 773 And cdc.Id = ccc.DcId
  1104. Where gdjc.GrpDCId = {0}", dto.GroupId);
  1105. var clientList = await _sqlSugar.SqlQueryable<CrmByGroupIdView>(sql).ToListAsync();
  1106. if (clientList.Count > 0)
  1107. {
  1108. result.Code = 0;
  1109. result.Msg = "成功!";
  1110. result.Data = clientList;
  1111. }
  1112. else
  1113. {
  1114. result.Msg = "暂无数据!";
  1115. }
  1116. }
  1117. return result;
  1118. }
  1119. #endregion
  1120. #region 团组&出入境费用
  1121. /// <summary>
  1122. /// 获取单组名称并验证出入境费用明细是否填写
  1123. /// </summary>
  1124. /// <param name="dto"></param>
  1125. /// <returns></returns>
  1126. public async Task<EnterExitCostGroupNameView[]> EnterExitCostGroupNameAsync()
  1127. {
  1128. var groupSql = string.Format(@$"SELECT
  1129. Id,
  1130. TeamName GroupName,
  1131. CityId ProvinceId,
  1132. CASE
  1133. WHEN (
  1134. SELECT
  1135. COUNT(*)
  1136. FROM
  1137. Grp_EnterExitCost
  1138. WHERE
  1139. IsDel = 0
  1140. AND DiId = di.Id
  1141. ) > 0 THEN 'false'
  1142. ELSE 'true'
  1143. END AS [IsNull]
  1144. FROM
  1145. Grp_DelegationInfo di
  1146. WHERE
  1147. di.Isdel = 0
  1148. ORDER BY
  1149. VisitStartDate Desc");
  1150. var groupDatas = await _sqlSugar.SqlQueryable<EnterExitCostGroupNameView>(groupSql).ToArrayAsync();
  1151. var provCityDatas = await ProvinceCityBasicSource();
  1152. if (provCityDatas.Any() && groupDatas.Any())
  1153. {
  1154. foreach (var item in groupDatas)
  1155. {
  1156. var provinceId = item.ProvinceId;
  1157. var isDefualtVal = true;
  1158. if (provinceId > 0)
  1159. {
  1160. var parentId = FindParentIdByChildId(provCityDatas, provinceId);
  1161. if (parentId != null)
  1162. {
  1163. isDefualtVal = false;
  1164. item.ProvinceId = (int)parentId;
  1165. }
  1166. }
  1167. if (isDefualtVal)
  1168. {
  1169. item.ProvinceId = 122; //默认四川
  1170. }
  1171. }
  1172. }
  1173. return groupDatas;
  1174. }
  1175. /// <summary>
  1176. /// 获取单组名称并验证出入境费用明细是否填写
  1177. /// </summary>
  1178. /// <param name="dto"></param>
  1179. /// <returns></returns>
  1180. public async Task<EnterExitCostGroupNameView> EnterExitCostGroupNameInfoAsync(int groupId)
  1181. {
  1182. var groupSql = string.Format(@$"SELECT
  1183. Id,
  1184. TeamName GroupName,
  1185. CityId ProvinceId,
  1186. CASE
  1187. WHEN (
  1188. SELECT
  1189. COUNT(*)
  1190. FROM
  1191. Grp_EnterExitCost
  1192. WHERE
  1193. IsDel = 0
  1194. AND DiId = di.Id
  1195. ) > 0 THEN 'false'
  1196. ELSE 'true'
  1197. END AS [IsNull]
  1198. FROM
  1199. Grp_DelegationInfo di
  1200. WHERE
  1201. di.Isdel = 0
  1202. And Id = {groupId} ");
  1203. var groupData = await _sqlSugar.SqlQueryable<EnterExitCostGroupNameView>(groupSql).FirstAsync();
  1204. var provCityDatas = await ProvinceCityBasicSource();
  1205. if (provCityDatas.Any() && groupData != null)
  1206. {
  1207. var provinceId = groupData.ProvinceId;
  1208. var isDefualtVal = true;
  1209. if (provinceId > 0)
  1210. {
  1211. var parentId = FindParentIdByChildId(provCityDatas, provinceId);
  1212. if (parentId != null)
  1213. {
  1214. isDefualtVal = false;
  1215. groupData.ProvinceId = (int)parentId;
  1216. }
  1217. }
  1218. if (isDefualtVal)
  1219. {
  1220. groupData.ProvinceId = 0; //
  1221. }
  1222. }
  1223. return groupData;
  1224. }
  1225. /// <summary>
  1226. /// 递归地遍历树状结构,查找子项的父类 Id。
  1227. /// </summary>
  1228. /// <param name="tree"></param>
  1229. /// <param name="childId"></param>
  1230. /// <returns></returns>
  1231. public int? FindParentIdByChildId(List<CityTree> tree, int childId)
  1232. {
  1233. foreach (var node in tree)
  1234. {
  1235. if (node.Child != null && node.Child.Any())
  1236. {
  1237. if (node.Child.Any(c => c.Id == childId))
  1238. {
  1239. return node.Id;
  1240. }
  1241. var parentId = FindParentIdByChildId(node.Child, childId);
  1242. if (parentId.HasValue)
  1243. {
  1244. return parentId;
  1245. }
  1246. }
  1247. }
  1248. return null;
  1249. }
  1250. #endregion
  1251. }
  1252. }