GroupsController.cs 116 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748
  1. using Aspose.Cells;
  2. using Aspose.Cells.Drawing.Texts;
  3. using Aspose.Words;
  4. using Aspose.Words.Tables;
  5. using NPOI.Util;
  6. using OASystem.API.OAMethodLib;
  7. using OASystem.API.OAMethodLib.File;
  8. using OASystem.Domain.Dtos.Groups;
  9. using OASystem.Domain.Entities.Groups;
  10. using OASystem.Domain.ViewModels.Groups;
  11. using OASystem.Infrastructure.Repositories.Groups;
  12. using TencentCloud.Ocr.V20181119.Models;
  13. using OASystem.Infrastructure.Tools;
  14. using System.Web;
  15. using System.Data;
  16. using static OASystem.Infrastructure.Repositories.Groups.AirTicketResRepository;
  17. using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
  18. using Cell = Aspose.Words.Tables.Cell;
  19. using Row = Aspose.Words.Tables.Row;
  20. using System.Runtime.Intrinsics.Arm;
  21. using Microsoft.AspNetCore.Mvc.Filters;
  22. using OASystem.Domain.Entities.Customer;
  23. using NPOI.SS.Formula.Functions;
  24. using OASystem.Domain.Dtos.CRM;
  25. using System.Diagnostics;
  26. using MathNet.Numerics.Statistics.Mcmc;
  27. using AlibabaCloud.OpenApiClient.Models;
  28. using System;
  29. using NPOI.HPSF;
  30. using SqlSugar;
  31. namespace OASystem.API.Controllers
  32. {
  33. /// <summary>
  34. /// 团组相关
  35. /// </summary>
  36. //[Authorize]
  37. [Route("api/[controller]/[action]")]
  38. public class GroupsController : ControllerBase
  39. {
  40. private readonly GrpScheduleRepository _grpScheduleRep;
  41. private readonly IMapper _mapper;
  42. private readonly DelegationInfoRepository _groupRepository;
  43. private readonly TaskAssignmentRepository _taskAssignmentRep;
  44. private readonly AirTicketResRepository _airTicketResRep;
  45. private readonly DecreasePaymentsRepository _decreasePaymentsRep;
  46. private readonly InvitationOfficialActivitiesRepository _InvitationOfficialActivitiesRep;
  47. private readonly DelegationEnDataRepository _delegationEnDataRep;
  48. private readonly DelegationVisaRepository _delegationVisaRep;
  49. private readonly SqlSugarClient _sqlSugar;
  50. private string url;
  51. private string path;
  52. private readonly EnterExitCostRepository _enterExitCostRep;
  53. public GroupsController(IMapper mapper, SqlSugarClient sqlSugar, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository,
  54. TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep, DecreasePaymentsRepository decreasePaymentsRep,
  55. InvitationOfficialActivitiesRepository InvitationOfficialActivitiesRep, DelegationEnDataRepository delegationEnDataRep, EnterExitCostRepository enterExitCostRep
  56. , DelegationVisaRepository delegationVisaRep)
  57. {
  58. _mapper = mapper;
  59. _grpScheduleRep = grpScheduleRep;
  60. _groupRepository = groupRepository;
  61. _taskAssignmentRep = taskAssignmentRep;
  62. _airTicketResRep = airTicketResRep;
  63. _sqlSugar = sqlSugar;
  64. url = AppSettingsHelper.Get("ExcelBaseUrl");
  65. path = AppSettingsHelper.Get("ExcelBasePath");
  66. if (!System.IO.Directory.Exists(path))
  67. {
  68. System.IO.Directory.CreateDirectory(path);//不存在就创建文件夹
  69. }
  70. _decreasePaymentsRep = decreasePaymentsRep;
  71. _InvitationOfficialActivitiesRep = InvitationOfficialActivitiesRep;
  72. _delegationEnDataRep = delegationEnDataRep;
  73. _enterExitCostRep = enterExitCostRep;
  74. _delegationVisaRep = delegationVisaRep;
  75. }
  76. #region 流程管控
  77. /// <summary>
  78. /// 获取团组流程管控信息
  79. /// </summary>
  80. /// <param name="paras">参数Json字符串</param>
  81. /// <returns></returns>
  82. [HttpPost]
  83. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  84. public async Task<IActionResult> PostSearchGrpSchedule(JsonDtoBase _jsonDto)
  85. {
  86. if (string.IsNullOrEmpty(_jsonDto.Paras))
  87. {
  88. return Ok(JsonView(false, "参数为空"));
  89. }
  90. Grp_ScheduleDto _ScheduleDto = JsonConvert.DeserializeObject<Grp_ScheduleDto>(_jsonDto.Paras);
  91. if (_ScheduleDto != null)
  92. {
  93. if (_ScheduleDto.SearchType == 2)//获取列表
  94. {
  95. List<Grp_ScheduleView> _grpScheduleViewList = await _grpScheduleRep.GetViewList_GrpSchedule(_ScheduleDto);
  96. return Ok(JsonView(_grpScheduleViewList));
  97. }
  98. else//获取对象
  99. {
  100. Grp_ScheduleCombinView _grpScheduleView = await _grpScheduleRep.GetView_GrpSchedule(_ScheduleDto);
  101. if (_grpScheduleView != null)
  102. {
  103. return Ok(JsonView(_grpScheduleView));
  104. }
  105. }
  106. }
  107. else
  108. {
  109. return Ok(JsonView(false, "参数反序列化失败"));
  110. }
  111. return Ok(JsonView(false, "暂无数据!"));
  112. }
  113. /// <summary>
  114. /// 修改团组流程管控详细表数据
  115. /// </summary>
  116. /// <param name="paras"></param>
  117. /// <returns></returns>
  118. [HttpPost]
  119. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  120. public async Task<IActionResult> PostUpdateGrpScheduleDetail(Grp_ScheduleDetailUpdDto dto)
  121. {
  122. Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);
  123. var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_ScheduleDetailInfo>()
  124. .SetColumns(it => it.Duty == _detail.Duty)
  125. .SetColumns(it => it.ExpectBeginDt == _detail.ExpectBeginDt)
  126. .SetColumns(it => it.ExpectEndDt == _detail.ExpectEndDt)
  127. .SetColumns(it => it.JobContent == _detail.JobContent)
  128. .SetColumns(it => it.Remark == _detail.Remark)
  129. .SetColumns(it => it.StepStatus == _detail.StepStatus)
  130. .Where(s => s.Id == dto.Id)
  131. //.UpdateColumns(s => new { s.Duty, s.ExpectBeginDt, s.ExpectEndDt, s.JobContent, s.Remark, s.StepStatus })
  132. .ExecuteCommandAsync();
  133. if (result > 0)
  134. {
  135. return Ok(JsonView(true, "保存成功!"));
  136. }
  137. return Ok(JsonView(false, "保存失败!"));
  138. }
  139. /// <summary>
  140. /// 删除团组流程管控详细表数据,删除人Id请放在Duty
  141. /// </summary>
  142. /// <param name="dto"></param>
  143. /// <returns></returns>
  144. [HttpPost]
  145. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  146. public async Task<ActionResult> PostDeleteGrpScheduleDetail(Grp_ScheduleDetailUpdDto dto)
  147. {
  148. Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);
  149. _detail.IsDel = 1;
  150. _detail.DeleteUserId = dto.Duty;
  151. _detail.DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  152. var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_ScheduleDetailInfo>()
  153. .SetColumns(it => it.IsDel == _detail.IsDel)
  154. .SetColumns(it => it.DeleteUserId == _detail.DeleteUserId)
  155. .SetColumns(it => it.DeleteTime == _detail.DeleteTime)
  156. .Where(it => it.Id == dto.Id)
  157. //.UpdateColumns(s => new { s.IsDel, s.DeleteUserId, s.DeleteTime })
  158. //.WhereColumns(s => s.Id == dto.Id)
  159. .ExecuteCommandAsync();
  160. if (result > 0)
  161. {
  162. return Ok(JsonView(true, "删除成功!"));
  163. }
  164. return Ok(JsonView(false, "删除失败!"));
  165. }
  166. /// <summary>
  167. /// 增加团组流程管控详细表数据
  168. /// </summary>
  169. /// <param name="dto"></param>
  170. /// <returns></returns>
  171. [HttpPost]
  172. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  173. public async Task<ActionResult> PostInsertGrpScheduleDetail(Grp_ScheduleDetailInsertDto dto)
  174. {
  175. Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);
  176. if (DateTime.Now < _detail.ExpectBeginDt)
  177. {
  178. _detail.StepStatus = 0;
  179. }
  180. else
  181. {//若大于设置时间,不考虑设置的预计结束日期,统一视为进行中
  182. _detail.StepStatus = 1;
  183. }
  184. var result = await _grpScheduleRep._sqlSugar.Insertable(_detail).ExecuteReturnIdentityAsync();
  185. if (result > 0)
  186. {
  187. Grp_ScheduleDetailView _result = await _grpScheduleRep.GetInsertBackData(result);
  188. return Ok(JsonView(true, "添加成功!", _result));
  189. }
  190. return Ok(JsonView(false, "添加失败!"));
  191. }
  192. #endregion
  193. #region 团组基本信息
  194. /// <summary>
  195. /// 接团信息列表
  196. /// </summary>
  197. /// <param name="dto">团组列表请求dto</param>
  198. /// <returns></returns>
  199. [HttpPost]
  200. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  201. public async Task<IActionResult> GetGroupList(GroupListDto dto)
  202. {
  203. var groupData = await _groupRepository.GetGroupList(dto);
  204. if (groupData.Code != 0)
  205. {
  206. return Ok(JsonView(false, groupData.Msg));
  207. }
  208. return Ok(JsonView(groupData.Data));
  209. }
  210. /// <summary>
  211. /// 接团信息详情
  212. /// </summary>
  213. /// <param name="dto">团组info请求dto</param>
  214. /// <returns></returns>
  215. [HttpPost]
  216. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  217. public async Task<IActionResult> GetGroupInfo(GroupInfoDto dto)
  218. {
  219. var groupData = await _groupRepository.GetGroupInfo(dto);
  220. if (groupData.Code != 0)
  221. {
  222. return Ok(JsonView(false, groupData.Msg));
  223. }
  224. return Ok(JsonView(groupData.Data));
  225. }
  226. /// <summary>
  227. /// 接团信息 编辑添加
  228. /// 基础信息数据源
  229. /// </summary>
  230. /// <param name="dto"></param>
  231. /// <returns></returns>
  232. [HttpPost]
  233. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  234. public async Task<IActionResult> GroupEditBasicSource(GroupListDto dto)
  235. {
  236. var groupData = await _groupRepository.GroupEditBasicSource(dto);
  237. if (groupData.Code != 0)
  238. {
  239. return Ok(JsonView(false, groupData.Msg));
  240. }
  241. return Ok(JsonView(groupData.Data));
  242. }
  243. /// <summary>
  244. /// 接团信息 操作(增改)
  245. /// </summary>
  246. /// <param name="dto"></param>
  247. /// <returns></returns>
  248. [HttpPost]
  249. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  250. public async Task<IActionResult> GroupOperation(GroupOperationDto dto)
  251. {
  252. try
  253. {
  254. var groupData = await _groupRepository.GroupOperation(dto);
  255. if (groupData.Code != 0)
  256. {
  257. return Ok(JsonView(false, groupData.Msg));
  258. }
  259. return Ok(JsonView(true));
  260. }
  261. catch (Exception ex)
  262. {
  263. Logs("[response]" + JsonConvert.SerializeObject(dto));
  264. Logs(ex.Message);
  265. return Ok(JsonView(false, ex.Message));
  266. }
  267. }
  268. /// <summary>
  269. /// 接团信息 操作(删除)
  270. /// </summary>
  271. /// <param name="dto"></param>
  272. /// <returns></returns>
  273. [HttpPost]
  274. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  275. public async Task<IActionResult> GroupDel(GroupDelDto dto)
  276. {
  277. try
  278. {
  279. var groupData = await _groupRepository.GroupDel(dto);
  280. if (groupData.Code != 0)
  281. {
  282. return Ok(JsonView(false, groupData.Msg));
  283. }
  284. return Ok(JsonView(true));
  285. }
  286. catch (Exception ex)
  287. {
  288. Logs("[response]" + JsonConvert.SerializeObject(dto));
  289. Logs(ex.Message);
  290. return Ok(JsonView(false, ex.Message));
  291. }
  292. }
  293. /// <summary>
  294. /// 获取团组销售报价号
  295. /// 团组添加时 使用
  296. /// </summary>
  297. /// <returns></returns>
  298. [HttpPost]
  299. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  300. public async Task<IActionResult> GetGroupSalesQuoteNo()
  301. {
  302. var groupData = await _groupRepository.GetGroupSalesQuoteNo();
  303. if (groupData.Code != 0)
  304. {
  305. return Ok(JsonView(false, groupData.Msg));
  306. }
  307. object salesQuoteNo = new
  308. {
  309. SalesQuoteNo = groupData.Data
  310. };
  311. return Ok(JsonView(salesQuoteNo));
  312. }
  313. /// <summary>
  314. /// 设置确认出团
  315. /// </summary>
  316. /// <param name="dto"></param>
  317. /// <returns></returns>
  318. [HttpPost]
  319. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  320. public async Task<IActionResult> SetConfirmationGroup(ConfirmationGroupDto dto)
  321. {
  322. var groupData = await _groupRepository.ConfirmationGroup(dto);
  323. if (groupData.Code != 0)
  324. {
  325. return Ok(JsonView(false, groupData.Msg));
  326. }
  327. GroupStepForDelegation.CreateWorkStep(dto.GroupId); //创建管控流程
  328. return Ok(JsonView(groupData.Data));
  329. }
  330. /// <summary>
  331. /// 获取团组名称data And 签证国别Data
  332. /// </summary>
  333. /// <param name="dto"></param>
  334. /// <returns></returns>
  335. [HttpPost]
  336. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  337. public async Task<IActionResult> GetGroupNameAndVisaNationality(GroupNameDto dto)
  338. {
  339. var groupData = await _groupRepository.GetGroupNameAndVisaNationality(dto);
  340. if (groupData.Code != 0)
  341. {
  342. return Ok(JsonView(false, groupData.Msg));
  343. }
  344. return Ok(JsonView(groupData.Data));
  345. }
  346. /// <summary>
  347. /// 根据CTable类型返回对应的团组名称及简单数据(APP端)
  348. /// </summary>
  349. /// <returns></returns>
  350. [HttpPost]
  351. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  352. public async Task<IActionResult> PostGroupNameAndEasy(DecreasePaymentsDto dto)
  353. {
  354. try
  355. {
  356. Result groupData = await _decreasePaymentsRep.PostGroupNameAndEasy(dto);
  357. if (groupData.Code != 0)
  358. {
  359. return Ok(JsonView(false, groupData.Msg));
  360. }
  361. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  362. }
  363. catch (Exception ex)
  364. {
  365. return Ok(JsonView(false, "程序错误!"));
  366. throw;
  367. }
  368. }
  369. #endregion
  370. #region 团组&签证
  371. /// <summary>
  372. /// 根据团组Id获取签证客户信息List
  373. /// </summary>
  374. /// <param name="dto">请求dto</param>
  375. /// <returns></returns>
  376. [HttpPost]
  377. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  378. public async Task<IActionResult> GetCrmByGroupId(ClientByGroupIdDto dto)
  379. {
  380. var groupData = await _groupRepository.GetCrmByGroupId(dto);
  381. if (groupData.Code != 0)
  382. {
  383. return Ok(JsonView(false, groupData.Msg));
  384. }
  385. return Ok(JsonView(groupData.Data));
  386. }
  387. /// <summary>
  388. /// IOS获取团组签证拍照上传进度01(团组列表)
  389. /// </summary>
  390. /// <param name="dto">请求dto</param>
  391. /// <returns></returns>
  392. [HttpPost]
  393. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  394. public async Task<IActionResult> PostIOSVisaProgress(IOS_VisaDto dto)
  395. {
  396. if (dto == null)
  397. {
  398. return Ok(JsonView(false, "参数为空"));
  399. }
  400. DelegationVisaViewList visaList = _delegationVisaRep.GetDelegationList(dto);
  401. return Ok(JsonView(visaList));
  402. }
  403. /// <summary>
  404. /// IOS获取团组签证拍照上传进度02(团组签证详情\人员列表\国家)
  405. /// </summary>
  406. /// <returns></returns>
  407. [HttpPost]
  408. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  409. public async Task<ActionResult> PostIOSVisaProgressContent(IOS_VisaCustomerListDto dto)
  410. {
  411. if (dto == null)
  412. {
  413. return Ok(JsonView(false, "请求错误:"));
  414. }
  415. List<DelegationVisaProgressView> list = _delegationVisaRep.GetDelegationProgressList(dto.diId);
  416. return Ok(JsonView(list));
  417. }
  418. /// <summary>
  419. /// IOS获取团组签证拍照上传进度03(相册)
  420. /// </summary>
  421. /// <returns></returns>
  422. [HttpPost]
  423. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  424. public async Task<ActionResult> PostIOSVisaProgressImageList(IOS_VisaImageListDto dto)
  425. {
  426. if (dto == null)
  427. {
  428. return Ok(JsonView(false, "请求错误:"));
  429. }
  430. List<VisaProgressImageView> list = _delegationVisaRep.GetVisaProgressImageList(dto.visaProgressCustomerId, dto.picType);
  431. string url = AppSettingsHelper.Get("VisaProgressImageBaseUrl") + AppSettingsHelper.Get("VisaProgressImageFtpPath");
  432. list.ForEach(s => s.url = url);
  433. return Ok(JsonView(list));
  434. }
  435. /// <summary>
  436. /// IOS获取团组签证拍照上传进度04(图片上传)
  437. /// </summary>
  438. /// <param name="dto"></param>
  439. /// <returns></returns>
  440. [HttpPost]
  441. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  442. public async Task<ActionResult> PostIOSVisaProgressUploadImage(IOS_VisaUploadImageDto dto)
  443. {
  444. //string result = decodeBase64ToImage(dto.base64DataURL, dto.imageName);
  445. //if (!string.IsNullOrEmpty(result))
  446. //{
  447. //}
  448. //else {
  449. // return Ok(JsonView(false, "上传失败"));
  450. //}
  451. DateTime dt1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0);
  452. int sucNum = 0;
  453. try
  454. {
  455. foreach (var item in dto.base64DataList)
  456. {
  457. string imageName = dto.imageName + ((DateTime.Now.Ticks - dt1970.Ticks) / 10000).ToString();
  458. string result = decodeBase64ToImage(item, imageName);
  459. if (!string.IsNullOrEmpty(result))
  460. {
  461. Grp_VisaProgressCustomerPicture pic = new Grp_VisaProgressCustomerPicture();
  462. pic.CreateUserId = dto.CreateUserId;
  463. pic.PicName = imageName;
  464. pic.PicPath = result;
  465. pic.VisaProgressCustomerId = dto.visaProgressCustomerId;
  466. int insertResult = await _delegationVisaRep.AddAsync<Grp_VisaProgressCustomerPicture>(pic);
  467. if (insertResult > 0)
  468. {
  469. sucNum++;
  470. }
  471. }
  472. }
  473. }
  474. catch (Exception ex)
  475. {
  476. return Ok(JsonView(false, ex.Message));
  477. }
  478. string msg = string.Format(@"成功上传{0}张", sucNum);
  479. return Ok(JsonView(true, msg));
  480. }
  481. private string decodeBase64ToImage(string base64DataURL, string imgName)
  482. {
  483. string filename = "";//声明一个string类型的相对路径
  484. String base64 = base64DataURL.Substring(base64DataURL.IndexOf(",") + 1); //将‘,’以前的多余字符串删除
  485. System.Drawing.Bitmap bitmap = null;//定义一个Bitmap对象,接收转换完成的图片
  486. try//会有异常抛出,try,catch一下
  487. {
  488. byte[] arr = Convert.FromBase64String(base64);//将纯净资源Base64转换成等效的8位无符号整形数组
  489. System.IO.MemoryStream ms = new System.IO.MemoryStream(arr);//转换成无法调整大小的MemoryStream对象
  490. bitmap = new System.Drawing.Bitmap(ms);//将MemoryStream对象转换成Bitmap对象
  491. var fileDir = AppSettingsHelper.Get("VisaProgressImageBasePath");
  492. //文件名称
  493. filename = "VisaProgress_" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + imgName + ".jpeg";//所要保存的相对路径及名字
  494. //上传的文件的路径
  495. string filePath = "";
  496. if (!Directory.Exists(fileDir))
  497. {
  498. Directory.CreateDirectory(fileDir);
  499. }
  500. //上传的文件的路径
  501. filePath = fileDir + filename;
  502. //string url = HttpRuntime.AppDomainAppPath.ToString();
  503. //string tmpRootDir = System.Web.HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString()); //获取程序根目录
  504. //string imagesurl2 = tmpRootDir + filename; //转换成绝对路径
  505. bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);//保存到服务器路径
  506. //bitmap.Save(filePath + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
  507. //bitmap.Save(filePath + ".gif", System.Drawing.Imaging.ImageFormat.Gif);
  508. //bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
  509. ms.Close();//关闭当前流,并释放所有与之关联的资源
  510. bitmap.Dispose();
  511. }
  512. catch (Exception e)
  513. {
  514. string massage = e.Message;
  515. Logs("IOS图片上传Error:" + massage);
  516. //filename = e.Message;
  517. }
  518. return filename;//返回相对路径
  519. }
  520. #endregion
  521. #region 团组任务分配
  522. /// <summary>
  523. /// 团组任务分配初始化
  524. /// </summary>
  525. /// <param name="dto"></param>
  526. /// <returns></returns>
  527. [HttpPost]
  528. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  529. public async Task<IActionResult> GetTaskAssignmen()
  530. {
  531. var groupData = await _taskAssignmentRep.GetTaskAssignmen();
  532. if (groupData.Code != 0)
  533. {
  534. return Ok(JsonView(false, groupData.Msg));
  535. }
  536. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  537. }
  538. /// <summary>
  539. /// 团组任务分配查询
  540. /// </summary>
  541. /// <param name="dto"></param>
  542. /// <returns></returns>
  543. [HttpPost]
  544. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  545. public async Task<IActionResult> TaskAssignmenQuery(TaskAssignmenQueryDto dto)
  546. {
  547. var groupData = await _taskAssignmentRep.TaskAssignmenQuery(dto);
  548. if (groupData.Code != 0)
  549. {
  550. return Ok(JsonView(false, groupData.Msg));
  551. }
  552. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  553. }
  554. /// <summary>
  555. /// 团组任务分配操作
  556. /// </summary>
  557. /// <param name="dto"></param>
  558. /// <returns></returns>
  559. [HttpPost]
  560. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  561. public async Task<IActionResult> GetTaskAssignmenOp(TaskAssignmenDto dto)
  562. {
  563. Result groupData = await _taskAssignmentRep.GetTaskAssignmenOp(dto);
  564. if (groupData.Code != 0)
  565. {
  566. return Ok(JsonView(false, groupData.Msg));
  567. }
  568. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  569. }
  570. #endregion
  571. #region 团组费用审核
  572. /// <summary>
  573. /// 获取团组费用审核
  574. /// </summary>
  575. /// <param name="paras">参数Json字符串</param>
  576. /// <returns></returns>
  577. [HttpPost]
  578. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  579. public async Task<IActionResult> PostSearchGrpCreditCardPayment(Search_GrpCreditCardPaymentDto _dto)
  580. {
  581. if (_dto.DiId < 1)
  582. {
  583. return Ok(JsonView(false, "团组Id为空"));
  584. }
  585. Grp_CreditCardPaymentView _view = new Grp_CreditCardPaymentView();
  586. #region 团组基本信息
  587. Grp_DelegationInfo _delegation = _groupRepository.Query<Grp_DelegationInfo>(s => s.Id == _dto.DiId).First();
  588. if (_delegation != null)
  589. {
  590. _view.ClientName = _delegation.ClientName;
  591. _view.DiId = _dto.DiId;
  592. _view.TeamName = _delegation.TeamName;
  593. _view.VisitCountry = _delegation.VisitCountry;
  594. _view.VisitDate = _delegation.VisitStartDate.ToString("yyyy-MM-dd") + " ~ " + _delegation.VisitEndDate.ToString("yyyy-MM-dd");
  595. _view.VisitDays = _delegation.VisitDays;
  596. _view.VisitPNumber = _delegation.VisitPNumber;
  597. }
  598. else
  599. {
  600. return Ok(JsonView(false, "团组信息为空"));
  601. }
  602. #endregion
  603. #region 费用清单
  604. var exp = Expressionable.Create<Grp_CreditCardPayment>();
  605. exp.AndIF(_dto.AuditStatus != -1, it => it.IsAuditGM == _dto.AuditStatus);
  606. exp.AndIF(_dto.Label != -1, it => it.CTable == _dto.Label);
  607. List<Grp_CreditCardPayment> entityList = _groupRepository
  608. .Query<Grp_CreditCardPayment>(s => s.DIId == _dto.DiId && s.IsDel == 0 && s.CreateUserId > 0)
  609. .Where(exp.ToExpression())
  610. .ToList();
  611. List<Grp_CreditCardPaymentDetailView> detailList = new List<Grp_CreditCardPaymentDetailView>();
  612. decimal CNY = 0;
  613. decimal PayCNY = 0;
  614. decimal BalanceCNY = 0;
  615. decimal YSFYCNY = 0;
  616. decimal USD = 0;
  617. decimal PayUSD = 0;
  618. decimal BalanceUSD = 0;
  619. decimal YSFYUSD = 0;
  620. decimal EUR = 0;
  621. decimal PayEUR = 0;
  622. decimal BalanceEUR = 0;
  623. decimal YSFYEUR = 0;
  624. foreach (var entity in entityList)
  625. {
  626. Grp_CreditCardPaymentDetailView _detail = new Grp_CreditCardPaymentDetailView();
  627. _detail.Id = entity.Id;
  628. /*
  629. * Bus名称
  630. */
  631. _detail.BusName = "";
  632. /*
  633. *费用所属
  634. */
  635. switch (entity.CTable)
  636. {
  637. case 85:
  638. Grp_AirTicketReservations jpRes = _groupRepository.Query<Grp_AirTicketReservations>(s => s.Id == entity.CId).First();
  639. if (jpRes != null)
  640. {
  641. string FlightsDescription = jpRes.FlightsDescription;
  642. string PriceDescription = jpRes.PriceDescription;
  643. _detail.PriceMsgContent = "航班号:" + jpRes.FlightsCode + "<br/>城市A-B:" + jpRes.FlightsCity + "<br/>航班描述:" + FlightsDescription.Replace("\r\n", "<br />") + "<br/>" + "价格描述:" + PriceDescription;
  644. _detail.PriceNameContent = "(" + jpRes.FlightsCode + ")";
  645. }
  646. break;
  647. case 79:
  648. _detail.BusName = "待增加";
  649. break;
  650. case 98:
  651. Grp_DecreasePayments gdpRes = _groupRepository.Query<Grp_DecreasePayments>(s => s.Id == entity.CId).First();
  652. if (gdpRes != null)
  653. {
  654. _detail.PriceMsgContent = "备注:" + gdpRes.Remark;
  655. _detail.PriceNameContent = gdpRes.PriceName;
  656. }
  657. break;
  658. default:
  659. break;
  660. }
  661. /*
  662. * 费用模块
  663. */
  664. Sys_SetData sdPriceName = _groupRepository.Query<Sys_SetData>(s => s.Id == entity.CTable).First();
  665. if (sdPriceName != null)
  666. {
  667. _detail.PriceName = sdPriceName.Name;
  668. }
  669. /*
  670. * 应付款金额
  671. */
  672. Sys_SetData sdPaymentCurrency_WaitPay = _groupRepository.Query<Sys_SetData>(s => s.Id == entity.PaymentCurrency).First();
  673. string PaymentCurrency_WaitPay = "Unknown";
  674. if (sdPaymentCurrency_WaitPay != null)
  675. {
  676. PaymentCurrency_WaitPay = sdPaymentCurrency_WaitPay.Name;
  677. }
  678. _detail.WaitPay = entity.PayMoney.ToString("#0.00") + " " + PaymentCurrency_WaitPay;
  679. /*
  680. * 此次付款金额
  681. */
  682. decimal CurrPayStr = 0;
  683. if (entity.PayPercentage == 0)
  684. {
  685. if (entity.PayThenMoney != 0)
  686. CurrPayStr = entity.PayThenMoney * entity.DayRate;
  687. }
  688. else
  689. {
  690. CurrPayStr = entity.PayMoney * (decimal.Parse(entity.PayPercentage.ToString("#0.00")) / 100 * entity.DayRate);
  691. }
  692. _detail.CurrPay = CurrPayStr.ToString("#0.00") + " CNY";
  693. /*
  694. * 剩余尾款
  695. */
  696. decimal BalanceStr = 0;
  697. if (entity.PayMoney - (CurrPayStr / entity.DayRate) < 0.01M)
  698. BalanceStr = 0;
  699. else
  700. BalanceStr = (entity.PayMoney - CurrPayStr / entity.DayRate);
  701. _detail.Balance = BalanceStr.ToString("#0.00") + " " + PaymentCurrency_WaitPay;
  702. /*
  703. * 申请人
  704. */
  705. string operatorName = "无";
  706. Sys_Users _opUser = _groupRepository.Query<Sys_Users>(s => s.Id == entity.CreateUserId).First();
  707. if (_opUser != null)
  708. {
  709. operatorName = _opUser.CnName;
  710. }
  711. _detail.OperatorName = operatorName;
  712. /*
  713. * 审核人
  714. */
  715. string auditOperatorName = "Unknown";
  716. if (entity.AuditGMOperate == 0)
  717. auditOperatorName = "无";
  718. else if (entity.AuditGMOperate == 4)
  719. auditOperatorName = "自动审核";
  720. else
  721. {
  722. Sys_Users _adUser = _groupRepository.Query<Sys_Users>(s => s.Id == entity.AuditGMOperate).First();
  723. if (_adUser != null)
  724. {
  725. auditOperatorName = _adUser.CnName;
  726. }
  727. }
  728. _detail.AuditOperatorName = auditOperatorName;
  729. /*
  730. *
  731. * *超预算比例
  732. */
  733. string overBudgetStr = "";
  734. if (entity.ExceedBudget == -1)
  735. overBudgetStr = sdPriceName.Name + "尚无预算";
  736. else if (entity.ExceedBudget == 0)
  737. overBudgetStr = "未超预算";
  738. else
  739. overBudgetStr = entity.ExceedBudget.ToString("P");
  740. _detail.OverBudget = overBudgetStr;
  741. /*
  742. * 费用总计
  743. */
  744. if (entity.PaymentCurrency == 48)
  745. {
  746. CNY += entity.PayMoney;
  747. PayCNY += CurrPayStr;
  748. BalanceCNY += BalanceStr;
  749. YSFYCNY += CurrPayStr;
  750. }
  751. if (entity.PaymentCurrency == 49)
  752. {
  753. USD += entity.PayMoney;
  754. PayUSD += CurrPayStr;
  755. BalanceUSD += BalanceStr;
  756. YSFYUSD += CurrPayStr;
  757. }
  758. if (entity.PaymentCurrency == 51)
  759. {
  760. EUR += entity.PayMoney;
  761. PayEUR += CurrPayStr;
  762. BalanceEUR += BalanceStr;
  763. YSFYEUR += CurrPayStr;
  764. }
  765. _detail.IsAuditGM = entity.IsAuditGM;
  766. detailList.Add(_detail);
  767. }
  768. #endregion
  769. _view.DetailList = new List<Grp_CreditCardPaymentDetailView>(detailList);
  770. _view.TotalStr1 = string.Format(@"应付款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", CNY, USD, EUR);
  771. _view.TotalStr2 = string.Format(@"此次付款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", PayCNY, PayUSD, PayEUR);
  772. _view.TotalStr3 = string.Format(@"目前剩余尾款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", BalanceCNY, BalanceUSD, BalanceEUR);
  773. _view.TotalStr4 = string.Format(@"已审费用总额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", YSFYCNY, YSFYUSD, YSFYEUR);
  774. return Ok(JsonView(_view));
  775. }
  776. /// <summary>
  777. /// 修改团组费用审核状态
  778. /// </summary>
  779. /// <param name="paras">参数Json字符串</param>
  780. /// <returns></returns>
  781. [HttpPost]
  782. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  783. public async Task<IActionResult> PostAuditGrpCreditCardPayment(Edit_GrpCreditCardPaymentDto _dto)
  784. {
  785. List<string> idList = _dto.CreditIdStr.Split(',').ToList();
  786. Grp_CreditCardPayment _detail = _mapper.Map<Grp_CreditCardPayment>(_dto);
  787. DateTime dtNow = DateTime.Now;
  788. _groupRepository.BeginTran();
  789. int rst = 0;
  790. foreach (var item in idList)
  791. {
  792. int CreditId = int.Parse(item);
  793. var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_CreditCardPayment>()
  794. .SetColumns(it => it.IsAuditGM == _dto.AuditCode)
  795. .SetColumns(it => it.AuditGMOperate == _dto.User)
  796. .SetColumns(it => it.AuditGMDate == dtNow.ToString())
  797. .Where(s => s.Id == CreditId)
  798. .ExecuteCommandAsync();
  799. if (result < 1)
  800. {
  801. rst = -1;
  802. }
  803. else
  804. {
  805. _groupRepository.RollbackTran();
  806. return Ok(JsonView(false, "保存失败并回滚!"));
  807. }
  808. }
  809. _groupRepository.CommitTran();
  810. if (rst == 0)
  811. {
  812. return Ok(JsonView(true, "保存成功!"));
  813. }
  814. return Ok(JsonView(false, "保存失败!"));
  815. }
  816. #endregion
  817. #region 机票费用录入
  818. /// <summary>
  819. /// 机票录入当前登录人可操作团组
  820. /// </summary>
  821. /// <param name="dto"></param>
  822. /// <returns></returns>
  823. [HttpPost]
  824. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  825. public async Task<IActionResult> AirTicketResSelect(AirTicketResDto dto)
  826. {
  827. try
  828. {
  829. Result groupData = await _airTicketResRep.AirTicketResSelect(dto);
  830. if (groupData.Code != 0)
  831. {
  832. return Ok(JsonView(false, groupData.Msg));
  833. }
  834. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  835. }
  836. catch (Exception ex)
  837. {
  838. return Ok(JsonView(false, "程序错误!"));
  839. throw;
  840. }
  841. }
  842. /// <summary>
  843. /// 机票费用录入列表
  844. /// </summary>
  845. /// <param name="dto"></param>
  846. /// <returns></returns>
  847. [HttpPost]
  848. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  849. public async Task<IActionResult> AirTicketResList(AirTicketResDto dto)
  850. {
  851. try
  852. {
  853. Result groupData = await _airTicketResRep.AirTicketResList(dto);
  854. if (groupData.Code != 0)
  855. {
  856. return Ok(JsonView(false, groupData.Msg));
  857. }
  858. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  859. }
  860. catch (Exception ex)
  861. {
  862. return Ok(JsonView(false, "程序错误!"));
  863. throw;
  864. }
  865. }
  866. /// <summary>
  867. /// 根据id查询费用录入信息
  868. /// </summary>
  869. /// <param name="dto"></param>
  870. /// <returns></returns>
  871. [HttpPost]
  872. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  873. public async Task<IActionResult> AirTicketResById(AirTicketResByIdDto dto)
  874. {
  875. try
  876. {
  877. Result groupData = await _airTicketResRep.AirTicketResById(dto);
  878. if (groupData.Code != 0)
  879. {
  880. return Ok(JsonView(false, groupData.Msg));
  881. }
  882. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  883. }
  884. catch (Exception ex)
  885. {
  886. return Ok(JsonView(false, "程序错误!"));
  887. throw;
  888. }
  889. }
  890. /// <summary>
  891. /// 机票费用录入操作(Status:1.新增,2.修改)
  892. /// </summary>
  893. /// <param name="dto"></param>
  894. /// <returns></returns>
  895. [HttpPost]
  896. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  897. public async Task<IActionResult> OpAirTicketRes(AirTicketResOpDto dto)
  898. {
  899. try
  900. {
  901. Result groupData = await _airTicketResRep.OpAirTicketRes(dto);
  902. if (groupData.Code != 0)
  903. {
  904. return Ok(JsonView(false, groupData.Msg));
  905. }
  906. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  907. }
  908. catch (Exception ex)
  909. {
  910. return Ok(JsonView(false, "程序错误!"));
  911. throw;
  912. }
  913. }
  914. /// <summary>
  915. /// 根据舱位类型查询接团客户名单信息
  916. /// </summary>
  917. /// <param name="dto"></param>
  918. /// <returns></returns>
  919. [HttpPost]
  920. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  921. public async Task<IActionResult> tankType(AirTicketResByIdDto dto)
  922. {
  923. try
  924. {
  925. List<Crm_GroupCustomer> crm_Groups = _sqlSugar.Queryable<Crm_GroupCustomer>().Where(a => a.IsDel == 0 && a.AirType == dto.Id).ToList();
  926. if (crm_Groups.Count != 0)
  927. {
  928. List<dynamic> Customer = new List<dynamic>();
  929. foreach (var item in crm_Groups)
  930. {
  931. var data = new
  932. {
  933. Id = item.Id,
  934. Pinyin = item.Pinyin,
  935. Name = item.LastName + item.FirstName
  936. };
  937. Customer.Add(data);
  938. }
  939. return Ok(JsonView(true, "查询成功!", Customer));
  940. }
  941. return Ok(JsonView(true, "暂无数据", crm_Groups));
  942. }
  943. catch (Exception ex)
  944. {
  945. return Ok(JsonView(false, "程序错误!"));
  946. throw;
  947. }
  948. }
  949. /// <summary>
  950. /// 机票费用录入,删除
  951. /// </summary>
  952. /// <param name="dto"></param>
  953. /// <returns></returns>
  954. [HttpPost]
  955. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  956. public async Task<IActionResult> DelAirTicketRes(DelBaseDto dto)
  957. {
  958. try
  959. {
  960. var res = await _airTicketResRep.SoftDeleteByIdAsync<Grp_AirTicketReservations>(dto.Id.ToString(), dto.DeleteUserId);
  961. if (!res)
  962. {
  963. var result = await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.CId == dto.Id && a.CTable == 85).SetColumns(a => new Grp_CreditCardPayment()
  964. {
  965. IsDel = 1,
  966. DeleteUserId = dto.DeleteUserId,
  967. DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
  968. }).ExecuteCommandAsync();
  969. return Ok(JsonView(false, "删除失败"));
  970. }
  971. return Ok(JsonView(true, "删除成功!"));
  972. }
  973. catch (Exception ex)
  974. {
  975. return Ok(JsonView(false, "程序错误!"));
  976. throw;
  977. }
  978. }
  979. /// <summary>
  980. /// 导出机票录入报表
  981. /// </summary>
  982. /// <param name="dto"></param>
  983. /// <returns></returns>
  984. [HttpPost]
  985. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  986. public async Task<IActionResult> DeriveAirTicketRes(AirTicketResDto dto)
  987. {
  988. try
  989. {
  990. Result groupData = await _airTicketResRep.DeriveAirTicketRes(dto);
  991. if (groupData.Code != 0)
  992. {
  993. return Ok(JsonView(false, groupData.Msg));
  994. }
  995. else
  996. {
  997. List<AirTicketReservationsPayView> AirTicketReservations = groupData.Data.GetType().GetProperty("AirTicketRes").GetValue(groupData.Data);
  998. if (AirTicketReservations.Count != 0)
  999. {
  1000. Grp_DelegationInfo DelegationInfo = groupData.Data.GetType().GetProperty("Delegation").GetValue(groupData.Data);
  1001. Sys_Users _Users = groupData.Data.GetType().GetProperty("Users").GetValue(groupData.Data);
  1002. string diCode = DelegationInfo != null ? DelegationInfo.TourCode : "XXX";
  1003. string diName = DelegationInfo != null ? DelegationInfo.TeamName : "XXX";
  1004. WorkbookDesigner designer = new WorkbookDesigner();
  1005. designer.Workbook = new Workbook(AppSettingsHelper.Get("ExcelBasePath") + "Template/机票预订费用报表模板.xlsx");
  1006. decimal countCost = 0;
  1007. foreach (var item in AirTicketReservations)
  1008. {
  1009. if (item.BankType == "其他")
  1010. {
  1011. item.BankNo = "--";
  1012. }
  1013. else
  1014. {
  1015. item.BankNo = item.BankType + ":" + item.BankNo.Substring(0, 3);
  1016. }
  1017. item.PrePrice = System.Decimal.Round(item.PrePrice, 2);
  1018. item.Price = System.Decimal.Round(item.Price, 2);
  1019. countCost += Convert.ToDecimal(item.Price);
  1020. }
  1021. designer.SetDataSource("Export", AirTicketReservations);
  1022. designer.SetDataSource("ExportDiCode", diCode);
  1023. designer.SetDataSource("ExportDiName", diName);
  1024. designer.SetDataSource("ExportOpUserName", _Users.CnName);
  1025. designer.SetDataSource("ExportCountCost", countCost + "(" + AirTicketReservations[0].CurrencyStr);
  1026. designer.Process();
  1027. string fileName = "AirfareStatement/" + diName + "机票费用报表" + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
  1028. designer.Workbook.Save(AppSettingsHelper.Get("ExcelBasePath") + fileName);
  1029. string rst = AppSettingsHelper.Get("ExcelBaseUrl") + AppSettingsHelper.Get("ExcelFtpPath") + fileName;
  1030. return Ok(JsonView(true, "成功", url = rst));
  1031. }
  1032. else
  1033. {
  1034. return Ok(JsonView(false, "暂无数据!"));
  1035. }
  1036. }
  1037. }
  1038. catch (Exception ex)
  1039. {
  1040. return Ok(JsonView(false, "程序错误!"));
  1041. throw;
  1042. }
  1043. }
  1044. Dictionary<string, string> transDic = new Dictionary<string, string>();
  1045. /// <summary>
  1046. /// 行程单导出
  1047. /// </summary>
  1048. /// <param name="dto"></param>
  1049. /// <returns></returns>
  1050. [HttpPost]
  1051. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1052. public async Task<IActionResult> ItineraryAirTicketRes(ItineraryAirTicketResDto dto)
  1053. {
  1054. try
  1055. {
  1056. Result groupData = await _airTicketResRep.ItineraryAirTicketRes(dto);
  1057. if (groupData.Code != 0)
  1058. {
  1059. return Ok(JsonView(false, groupData.Msg));
  1060. }
  1061. else
  1062. {
  1063. List<AirTicketReservationsView> _AirTicketReservations = groupData.Data;
  1064. if (dto.Language == "CN")
  1065. {
  1066. Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_CN.docx");
  1067. DocumentBuilder builder = new DocumentBuilder(doc);
  1068. int tableIndex = 0;//表格索引
  1069. //得到文档中的第一个表格
  1070. Table table = (Table)doc.GetChild(NodeType.Table, tableIndex, true);
  1071. foreach (var item in _AirTicketReservations)
  1072. {
  1073. #region 处理固定数据
  1074. string[] FlightsCode = item.FlightsCode.Split('/');
  1075. if (FlightsCode.Length != 0)
  1076. {
  1077. Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));
  1078. if (_AirCompany != null)
  1079. {
  1080. table.Range.Bookmarks["AirlineCompany"].Text = _AirCompany.CnName;
  1081. }
  1082. else
  1083. {
  1084. table.Range.Bookmarks["AirlineCompany"].Text = "--";
  1085. }
  1086. }
  1087. table.Range.Bookmarks["AirlineRecordCode"].Text = "--";
  1088. table.Range.Bookmarks["ReservationRecordCode"].Text = "--";
  1089. string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase);
  1090. nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();
  1091. string name = "";
  1092. foreach (string clientName in nameArray)
  1093. {
  1094. if (!name.Contains(clientName))
  1095. {
  1096. name += clientName + ",";
  1097. }
  1098. }
  1099. if (!string.IsNullOrWhiteSpace(name))
  1100. {
  1101. table.Range.Bookmarks["ClientName"].Text = name.Substring(0, name.Length - 1);
  1102. }
  1103. else
  1104. {
  1105. table.Range.Bookmarks["ClientName"].Text = "--";
  1106. }
  1107. table.Range.Bookmarks["TicketNumber"].Text = "--";
  1108. table.Range.Bookmarks["IdentificationCode"].Text = "--";
  1109. table.Range.Bookmarks["JointTicket"].Text = "--";
  1110. table.Range.Bookmarks["TimeIssue"].Text = "--";
  1111. table.Range.Bookmarks["DrawingAgent"].Text = "--";
  1112. table.Range.Bookmarks["NavigationCode"].Text = "--";
  1113. table.Range.Bookmarks["AgentsAddress"].Text = "--";
  1114. table.Range.Bookmarks["AgentPhone"].Text = "--";
  1115. table.Range.Bookmarks["AgentFacsimile"].Text = "--";
  1116. #endregion
  1117. #region 循环数据处理
  1118. List<AirInfo> airs = new List<AirInfo>();
  1119. string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase);
  1120. DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray();
  1121. for (int i = 0; i < FlightsCode.Length; i++)
  1122. {
  1123. AirInfo air = new AirInfo();
  1124. string[] tempstr = DayArray[i]
  1125. .Replace("\r\n", string.Empty)
  1126. .Replace("\\r\\n", string.Empty)
  1127. .TrimStart().TrimEnd()
  1128. .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  1129. Res_ThreeCode star_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(0, 3));
  1130. string starCity = "";
  1131. if (star_Three != null)
  1132. {
  1133. starCity = star_Three.AirPort;
  1134. }
  1135. Res_ThreeCode End_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(3, 3));
  1136. string EndCity = "";
  1137. if (End_Three != null)
  1138. {
  1139. EndCity = End_Three.AirPort;
  1140. }
  1141. air.Destination = starCity + "/" + EndCity;
  1142. air.Flight = FlightsCode[i];
  1143. air.SeatingClass = item.CTypeName;
  1144. string dateTime = tempstr[2];
  1145. string DateTemp = dateTime.Substring(2, 5).ToUpper();
  1146. air.FlightDate = DateTemp;
  1147. air.DepartureTime = tempstr[5];
  1148. air.LandingTime = tempstr[6];
  1149. air.ValidityPeriod = DateTemp + "/" + DateTemp;
  1150. air.TicketStatus = "--";
  1151. air.Luggage = "--";
  1152. air.DepartureTerminal = "--";
  1153. air.LandingTerminal = "--";
  1154. airs.Add(air);
  1155. }
  1156. int row = 13;
  1157. for (int i = 0; i < airs.Count; i++)
  1158. {
  1159. if (airs.Count > 2)
  1160. {
  1161. for (int j = 0; j < airs.Count - 2; j++)
  1162. {
  1163. var CopyRow = table.Rows[12].Clone(true);
  1164. table.Rows.Add(CopyRow);
  1165. }
  1166. }
  1167. PropertyInfo[] properties = airs[i].GetType().GetProperties();
  1168. int index = 0;
  1169. foreach (PropertyInfo property in properties)
  1170. {
  1171. string value = property.GetValue(airs[i]).ToString();
  1172. Cell ishcel0 = table.Rows[row].Cells[index];
  1173. Paragraph p = new Paragraph(doc);
  1174. string s = value;
  1175. p.AppendChild(new Run(doc, s));
  1176. p.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
  1177. ishcel0.AppendChild(p);
  1178. ishcel0.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中对齐
  1179. index++;
  1180. }
  1181. row++;
  1182. }
  1183. #endregion
  1184. Paragraph lastParagraph = new Paragraph(doc);
  1185. //第一个表格末尾加段落
  1186. table.ParentNode.InsertAfter(lastParagraph, table);
  1187. //复制第一个表格
  1188. Table cloneTable = (Table)table.Clone(true);
  1189. //在文档末尾段落后面加入复制的表格
  1190. table.ParentNode.InsertAfter(cloneTable, lastParagraph);
  1191. if (item != _AirTicketReservations[_AirTicketReservations.Count - 1])
  1192. {
  1193. int rownewsIndex = 13;
  1194. for (int i = 0; i < 2; i++)
  1195. {
  1196. var CopyRow = table.Rows[12].Clone(true);
  1197. table.Rows.RemoveAt(13);
  1198. table.Rows.Add(CopyRow);
  1199. rownewsIndex++;
  1200. }
  1201. }
  1202. else
  1203. {
  1204. table.Rows.RemoveAt(12);
  1205. }
  1206. cloneTable.Rows.RemoveAt(12);
  1207. }
  1208. if (_AirTicketReservations.Count != 0)
  1209. {
  1210. string[] FlightsCode = _AirTicketReservations[0].FlightsCode.Split('/');
  1211. if (FlightsCode.Length != 0)
  1212. {
  1213. Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));
  1214. if (_AirCompany != null)
  1215. {
  1216. table.Range.Bookmarks["AirlineCompany"].Text = _AirCompany.CnName;
  1217. }
  1218. else
  1219. {
  1220. table.Range.Bookmarks["AirlineCompany"].Text = "--";
  1221. }
  1222. }
  1223. table.Range.Bookmarks["AirlineRecordCode"].Text = "--";
  1224. table.Range.Bookmarks["ReservationRecordCode"].Text = "--";
  1225. string[] nameArray = Regex.Split(_AirTicketReservations[0].ClientName, "\\d+\\.", RegexOptions.IgnoreCase);
  1226. nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();
  1227. string name = "";
  1228. foreach (string clientName in nameArray)
  1229. {
  1230. if (!name.Contains(clientName))
  1231. {
  1232. name += clientName + ",";
  1233. }
  1234. }
  1235. if (!string.IsNullOrWhiteSpace(name))
  1236. {
  1237. table.Range.Bookmarks["ClientName"].Text = name.Substring(0, name.Length - 1);
  1238. }
  1239. else
  1240. {
  1241. table.Range.Bookmarks["ClientName"].Text = "--";
  1242. }
  1243. table.Range.Bookmarks["TicketNumber"].Text = "--";
  1244. table.Range.Bookmarks["IdentificationCode"].Text = "--";
  1245. table.Range.Bookmarks["JointTicket"].Text = "--";
  1246. table.Range.Bookmarks["TimeIssue"].Text = "--";
  1247. table.Range.Bookmarks["DrawingAgent"].Text = "--";
  1248. table.Range.Bookmarks["NavigationCode"].Text = "--";
  1249. table.Range.Bookmarks["AgentsAddress"].Text = "--";
  1250. table.Range.Bookmarks["AgentPhone"].Text = "--";
  1251. table.Range.Bookmarks["AgentFacsimile"].Text = "--";
  1252. }
  1253. doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });
  1254. //保存合并后的文档
  1255. string fileName = "AirItinerary/电子客票中文行程单_CN.docx";
  1256. string rst = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + fileName;
  1257. doc.Save(AppSettingsHelper.Get("WordBasePath") + fileName);
  1258. return Ok(JsonView(true, "成功!", rst));
  1259. }
  1260. else
  1261. {
  1262. Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_EN.docx");
  1263. DocumentBuilder builder = new DocumentBuilder(doc);
  1264. int tableIndex = 0;//表格索引
  1265. //得到文档中的第一个表格
  1266. Table table = (Table)doc.GetChild(NodeType.Table, tableIndex, true);
  1267. List<string> texts = new List<string>();
  1268. foreach (var item in _AirTicketReservations)
  1269. {
  1270. string[] FlightsCode = item.FlightsCode.Split('/');
  1271. if (FlightsCode.Length != 0)
  1272. {
  1273. Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));
  1274. if (_AirCompany != null)
  1275. {
  1276. if (!transDic.ContainsKey(_AirCompany.CnName))
  1277. {
  1278. transDic.Add(_AirCompany.CnName, _AirCompany.EnName);
  1279. }
  1280. }
  1281. else
  1282. {
  1283. if (!transDic.ContainsKey("--"))
  1284. {
  1285. transDic.Add("--", "--");
  1286. }
  1287. }
  1288. }
  1289. string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase);
  1290. nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();
  1291. string name = "";
  1292. foreach (string clientName in nameArray)
  1293. {
  1294. name += clientName + ",";
  1295. }
  1296. if (!texts.Contains(name))
  1297. {
  1298. texts.Add(name);
  1299. }
  1300. List<AirInfo> airs = new List<AirInfo>();
  1301. string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase);
  1302. DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray();
  1303. for (int i = 0; i < FlightsCode.Length; i++)
  1304. {
  1305. AirInfo air = new AirInfo();
  1306. string[] tempstr = DayArray[i]
  1307. .Replace("\r\n", string.Empty)
  1308. .Replace("\\r\\n", string.Empty)
  1309. .TrimStart().TrimEnd()
  1310. .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  1311. Res_ThreeCode star_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(0, 3));
  1312. if (star_Three != null)
  1313. {
  1314. if (!transDic.ContainsKey(star_Three.AirPort))
  1315. {
  1316. transDic.Add(star_Three.AirPort, star_Three.AirPort_En);
  1317. }
  1318. }
  1319. Res_ThreeCode End_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(3, 3));
  1320. if (End_Three != null)
  1321. {
  1322. if (!transDic.ContainsKey(End_Three.AirPort))
  1323. {
  1324. transDic.Add(End_Three.AirPort, End_Three.AirPort_En);
  1325. }
  1326. }
  1327. if (!texts.Contains(item.CTypeName))
  1328. {
  1329. texts.Add(item.CTypeName);
  1330. }
  1331. }
  1332. }
  1333. List<TranslateResult> transData = _airTicketResRep.ReTransBatch(texts, "en");
  1334. if (transData.Count > 0)
  1335. {
  1336. foreach (TranslateResult item in transData)
  1337. {
  1338. if (!transDic.ContainsKey(item.Query))
  1339. {
  1340. transDic.Add(item.Query, item.Translation);
  1341. }
  1342. }
  1343. }
  1344. foreach (var item in _AirTicketReservations)
  1345. {
  1346. #region 处理固定数据
  1347. string[] FlightsCode = item.FlightsCode.Split('/');
  1348. if (FlightsCode.Length != 0)
  1349. {
  1350. Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));
  1351. if (_AirCompany != null)
  1352. {
  1353. string str = "--";
  1354. string translateResult = transDic.Where(s => s.Key == _AirCompany.CnName).FirstOrDefault().Value;
  1355. if (!string.IsNullOrEmpty(translateResult))
  1356. {
  1357. str = translateResult;
  1358. str = _airTicketResRep.Processing(str);
  1359. }
  1360. table.Range.Bookmarks["AirlineCompany"].Text = str;
  1361. }
  1362. else
  1363. {
  1364. table.Range.Bookmarks["AirlineCompany"].Text = "--";
  1365. }
  1366. }
  1367. table.Range.Bookmarks["AirlineRecordCode"].Text = "--";
  1368. table.Range.Bookmarks["ReservationRecordCode"].Text = "--";
  1369. string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase);
  1370. nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();
  1371. string names = "";
  1372. foreach (string clientName in nameArray)
  1373. {
  1374. names += clientName + ",";
  1375. }
  1376. if (!string.IsNullOrWhiteSpace(names))
  1377. {
  1378. string str = "--";
  1379. string translateResult = transDic.Where(s => s.Key == names).FirstOrDefault().Value;
  1380. if (!string.IsNullOrEmpty(translateResult))
  1381. {
  1382. str = translateResult;
  1383. str = _airTicketResRep.Processing(str);
  1384. }
  1385. table.Range.Bookmarks["ClientName"].Text = str;
  1386. }
  1387. else
  1388. {
  1389. table.Range.Bookmarks["ClientName"].Text = "--";
  1390. }
  1391. table.Range.Bookmarks["TicketNumber"].Text = "--";
  1392. table.Range.Bookmarks["IdentificationCode"].Text = "--";
  1393. table.Range.Bookmarks["JointTicket"].Text = "--";
  1394. table.Range.Bookmarks["TimeIssue"].Text = "--";
  1395. table.Range.Bookmarks["DrawingAgent"].Text = "--";
  1396. table.Range.Bookmarks["NavigationCode"].Text = "--";
  1397. table.Range.Bookmarks["AgentsAddress"].Text = "--";
  1398. table.Range.Bookmarks["AgentPhone"].Text = "--";
  1399. table.Range.Bookmarks["AgentFacsimile"].Text = "--";
  1400. #endregion
  1401. #region 循环数据处理
  1402. List<AirInfo> airs = new List<AirInfo>();
  1403. string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase);
  1404. DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray();
  1405. for (int i = 0; i < FlightsCode.Length; i++)
  1406. {
  1407. AirInfo air = new AirInfo();
  1408. string[] tempstr = DayArray[i]
  1409. .Replace("\r\n", string.Empty)
  1410. .Replace("\\r\\n", string.Empty)
  1411. .TrimStart().TrimEnd()
  1412. .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  1413. Res_ThreeCode star_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(0, 3));
  1414. string starCity = "";
  1415. if (star_Three != null)
  1416. {
  1417. string str2 = "--";
  1418. string translateResult2 = transDic.Where(s => s.Key == star_Three.AirPort).FirstOrDefault().Value;
  1419. if (!string.IsNullOrEmpty(translateResult2))
  1420. {
  1421. str2 = translateResult2;
  1422. str2 = _airTicketResRep.Processing(str2);
  1423. }
  1424. starCity = str2;
  1425. }
  1426. Res_ThreeCode End_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(3, 3));
  1427. string EndCity = "";
  1428. if (End_Three != null)
  1429. {
  1430. string str1 = "--";
  1431. string translateResult1 = transDic.Where(s => s.Key == End_Three.AirPort).FirstOrDefault().Value;
  1432. if (!string.IsNullOrEmpty(translateResult1))
  1433. {
  1434. str1 = translateResult1;
  1435. str1 = _airTicketResRep.Processing(str1);
  1436. }
  1437. EndCity = str1;
  1438. }
  1439. air.Destination = starCity + "/" + EndCity;
  1440. air.Flight = FlightsCode[i];
  1441. string str = "--";
  1442. string translateResult = transDic.Where(s => s.Key == item.CTypeName).FirstOrDefault().Value;
  1443. if (!string.IsNullOrEmpty(translateResult))
  1444. {
  1445. str = translateResult;
  1446. str = _airTicketResRep.Processing(str);
  1447. }
  1448. air.SeatingClass = str;
  1449. string dateTime = tempstr[2];
  1450. string DateTemp = dateTime.Substring(2, 5).ToUpper();
  1451. air.FlightDate = DateTemp;
  1452. air.DepartureTime = tempstr[5];
  1453. air.LandingTime = tempstr[6];
  1454. air.ValidityPeriod = DateTemp + "/" + DateTemp;
  1455. air.TicketStatus = "--";
  1456. air.Luggage = "--";
  1457. air.DepartureTerminal = "--";
  1458. air.LandingTerminal = "--";
  1459. airs.Add(air);
  1460. }
  1461. int row = 13;
  1462. for (int i = 0; i < airs.Count; i++)
  1463. {
  1464. if (airs.Count > 2)
  1465. {
  1466. for (int j = 0; j < airs.Count - 2; j++)
  1467. {
  1468. var CopyRow = table.Rows[12].Clone(true);
  1469. table.Rows.Add(CopyRow);
  1470. }
  1471. }
  1472. PropertyInfo[] properties = airs[i].GetType().GetProperties();
  1473. int index = 0;
  1474. foreach (PropertyInfo property in properties)
  1475. {
  1476. string value = property.GetValue(airs[i]).ToString();
  1477. Cell ishcel0 = table.Rows[row].Cells[index];
  1478. Paragraph p = new Paragraph(doc);
  1479. string s = value;
  1480. p.AppendChild(new Run(doc, s));
  1481. p.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
  1482. ishcel0.AppendChild(p);
  1483. ishcel0.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中对齐
  1484. //ishcel0.CellFormat.VerticalAlignment=
  1485. index++;
  1486. }
  1487. row++;
  1488. }
  1489. #endregion
  1490. Paragraph lastParagraph = new Paragraph(doc);
  1491. //第一个表格末尾加段落
  1492. table.ParentNode.InsertAfter(lastParagraph, table);
  1493. //复制第一个表格
  1494. Table cloneTable = (Table)table.Clone(true);
  1495. //在文档末尾段落后面加入复制的表格
  1496. table.ParentNode.InsertAfter(cloneTable, lastParagraph);
  1497. if (item != _AirTicketReservations[_AirTicketReservations.Count - 1])
  1498. {
  1499. int rownewsIndex = 13;
  1500. for (int i = 0; i < 2; i++)
  1501. {
  1502. var CopyRow = table.Rows[12].Clone(true);
  1503. table.Rows.RemoveAt(13);
  1504. table.Rows.Add(CopyRow);
  1505. rownewsIndex++;
  1506. }
  1507. }
  1508. else
  1509. {
  1510. table.Rows.RemoveAt(12);
  1511. }
  1512. cloneTable.Rows.RemoveAt(12);
  1513. }
  1514. if (_AirTicketReservations.Count != 0)
  1515. {
  1516. string[] FlightsCode = _AirTicketReservations[0].FlightsCode.Split('/');
  1517. if (FlightsCode.Length != 0)
  1518. {
  1519. Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));
  1520. if (_AirCompany != null)
  1521. {
  1522. string str = "--";
  1523. string translateResult = transDic.Where(s => s.Key == _AirCompany.CnName).FirstOrDefault().Value;
  1524. if (!string.IsNullOrEmpty(translateResult))
  1525. {
  1526. str = translateResult;
  1527. str = _airTicketResRep.Processing(str);
  1528. }
  1529. table.Range.Bookmarks["AirlineCompany"].Text = str;
  1530. }
  1531. else
  1532. {
  1533. table.Range.Bookmarks["AirlineCompany"].Text = "--";
  1534. }
  1535. }
  1536. table.Range.Bookmarks["AirlineRecordCode"].Text = "--";
  1537. table.Range.Bookmarks["ReservationRecordCode"].Text = "--";
  1538. string[] nameArray = Regex.Split(_AirTicketReservations[0].ClientName, "\\d+\\.", RegexOptions.IgnoreCase);
  1539. nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();
  1540. string names = "";
  1541. foreach (string clientName in nameArray)
  1542. {
  1543. names += clientName + ",";
  1544. }
  1545. if (!string.IsNullOrWhiteSpace(names))
  1546. {
  1547. string str = "--";
  1548. string translateResult = transDic.Where(s => s.Key == names).FirstOrDefault().Value;
  1549. if (!string.IsNullOrEmpty(translateResult))
  1550. {
  1551. str = translateResult;
  1552. str = _airTicketResRep.Processing(str);
  1553. }
  1554. table.Range.Bookmarks["ClientName"].Text = str;
  1555. }
  1556. else
  1557. {
  1558. table.Range.Bookmarks["ClientName"].Text = "--";
  1559. }
  1560. table.Range.Bookmarks["TicketNumber"].Text = "--";
  1561. table.Range.Bookmarks["IdentificationCode"].Text = "--";
  1562. table.Range.Bookmarks["JointTicket"].Text = "--";
  1563. table.Range.Bookmarks["TimeIssue"].Text = "--";
  1564. table.Range.Bookmarks["DrawingAgent"].Text = "--";
  1565. table.Range.Bookmarks["NavigationCode"].Text = "--";
  1566. table.Range.Bookmarks["AgentsAddress"].Text = "--";
  1567. table.Range.Bookmarks["AgentPhone"].Text = "--";
  1568. table.Range.Bookmarks["AgentFacsimile"].Text = "--";
  1569. }
  1570. doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });
  1571. //保存合并后的文档
  1572. string fileName = "AirItinerary/电子客票英文行程单_EN.docx";
  1573. string rst = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + fileName;
  1574. doc.Save(AppSettingsHelper.Get("WordBasePath") + fileName);
  1575. return Ok(JsonView(true, "成功!", rst));
  1576. }
  1577. }
  1578. }
  1579. catch (Exception ex)
  1580. {
  1581. return Ok(JsonView(false, "程序错误!"));
  1582. throw;
  1583. }
  1584. }
  1585. #endregion
  1586. #region 团组增减款项
  1587. /// <summary>
  1588. /// 团组增减款项下拉框绑定
  1589. /// </summary>
  1590. /// <param name="dto"></param>
  1591. /// <returns></returns>
  1592. [HttpPost]
  1593. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1594. public async Task<IActionResult> DecreasePaymentsSelect(DecreasePaymentsDto dto)
  1595. {
  1596. try
  1597. {
  1598. Result groupData = await _decreasePaymentsRep.DecreasePaymentsSelect(dto);
  1599. if (groupData.Code != 0)
  1600. {
  1601. return Ok(JsonView(false, groupData.Msg));
  1602. }
  1603. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  1604. }
  1605. catch (Exception ex)
  1606. {
  1607. return Ok(JsonView(false, "程序错误!"));
  1608. throw;
  1609. }
  1610. }
  1611. /// <summary>
  1612. /// 根据团组Id查询团组增减款项
  1613. /// </summary>
  1614. /// <param name="dto"></param>
  1615. /// <returns></returns>
  1616. [HttpPost]
  1617. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1618. public async Task<IActionResult> DecreasePaymentsList(DecreasePaymentsListDto dto)
  1619. {
  1620. try
  1621. {
  1622. Result groupData = await _decreasePaymentsRep.DecreasePaymentsList(dto);
  1623. if (groupData.Code != 0)
  1624. {
  1625. return Ok(JsonView(false, groupData.Msg));
  1626. }
  1627. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  1628. }
  1629. catch (Exception ex)
  1630. {
  1631. return Ok(JsonView(false, "程序错误!"));
  1632. throw;
  1633. }
  1634. }
  1635. /// <summary>
  1636. /// 团组增减款项操作(Status:1.新增,2.修改)
  1637. /// </summary>
  1638. /// <param name="dto"></param>
  1639. /// <returns></returns>
  1640. [HttpPost]
  1641. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1642. public async Task<IActionResult> OpDecreasePayments(DecreasePaymentsOpDto dto)
  1643. {
  1644. try
  1645. {
  1646. Result groupData = await _decreasePaymentsRep.OpDecreasePayments(dto);
  1647. if (groupData.Code != 0)
  1648. {
  1649. return Ok(JsonView(false, groupData.Msg));
  1650. }
  1651. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  1652. }
  1653. catch (Exception ex)
  1654. {
  1655. return Ok(JsonView(false, "程序错误!"));
  1656. throw;
  1657. }
  1658. }
  1659. /// <summary>
  1660. /// 团组增减款项操作 删除
  1661. /// </summary>
  1662. /// <param name="dto"></param>
  1663. /// <returns></returns>
  1664. [HttpPost]
  1665. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1666. public async Task<IActionResult> DelDecreasePayments(DelBaseDto dto)
  1667. {
  1668. try
  1669. {
  1670. var res = await _decreasePaymentsRep.SoftDeleteByIdAsync<Grp_DecreasePayments>(dto.Id.ToString(), dto.DeleteUserId);
  1671. if (!res)
  1672. {
  1673. var result = await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.CId == dto.Id && a.CTable == 98).SetColumns(a => new Grp_CreditCardPayment()
  1674. {
  1675. IsDel = 1,
  1676. DeleteUserId = dto.DeleteUserId,
  1677. DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
  1678. }).ExecuteCommandAsync();
  1679. return Ok(JsonView(false, "删除失败"));
  1680. }
  1681. return Ok(JsonView(true, "删除成功!"));
  1682. }
  1683. catch (Exception ex)
  1684. {
  1685. return Ok(JsonView(false, "程序错误!"));
  1686. throw;
  1687. }
  1688. }
  1689. /// <summary>
  1690. /// 根据团组增减款项Id查询
  1691. /// </summary>
  1692. /// <param name="dto"></param>
  1693. /// <returns></returns>
  1694. [HttpPost]
  1695. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1696. public async Task<IActionResult> QueryDecreasePaymentsById(DecreasePaymentsByIdDto dto)
  1697. {
  1698. try
  1699. {
  1700. Result groupData = await _decreasePaymentsRep.QueryDecreasePaymentsById(dto);
  1701. if (groupData.Code != 0)
  1702. {
  1703. return Ok(JsonView(false, groupData.Msg));
  1704. }
  1705. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  1706. }
  1707. catch (Exception ex)
  1708. {
  1709. return Ok(JsonView(false, "程序错误!"));
  1710. throw;
  1711. }
  1712. }
  1713. #endregion
  1714. #region 文件上传、删除
  1715. /// <summary>
  1716. /// region 文件上传 可以带参数
  1717. /// </summary>
  1718. /// <param name="file"></param>
  1719. /// <returns></returns>
  1720. [HttpPost]
  1721. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1722. public async Task<IActionResult> UploadProject(IFormFile file)
  1723. {
  1724. try
  1725. {
  1726. var TypeName = Request.Headers["TypeName"].ToString();
  1727. if (file != null)
  1728. {
  1729. var fileDir = AppSettingsHelper.Get("GrpFileBasePath");
  1730. //文件名称
  1731. string projectFileName = file.FileName;
  1732. //上传的文件的路径
  1733. string filePath = "";
  1734. if (TypeName == "A")//A代表团组增减款项
  1735. {
  1736. if (!Directory.Exists(fileDir))
  1737. {
  1738. Directory.CreateDirectory(fileDir);
  1739. }
  1740. //上传的文件的路径
  1741. filePath = fileDir + $@"\团组增减款项相关文件\{projectFileName}";
  1742. }
  1743. else if (TypeName == "B")//B代表商邀相关文件
  1744. {
  1745. if (!Directory.Exists(fileDir))
  1746. {
  1747. Directory.CreateDirectory(fileDir);
  1748. }
  1749. //上传的文件的路径
  1750. filePath = fileDir + $@"\商邀相关文件\{projectFileName}";
  1751. }
  1752. using (FileStream fs = System.IO.File.Create(filePath))
  1753. {
  1754. file.CopyTo(fs);
  1755. fs.Flush();
  1756. }
  1757. return Ok(JsonView(true, "上传成功!", projectFileName));
  1758. }
  1759. else
  1760. {
  1761. return Ok(JsonView(false, "上传失败!"));
  1762. }
  1763. }
  1764. catch (Exception ex)
  1765. {
  1766. return Ok(JsonView(false, "程序错误!"));
  1767. throw;
  1768. }
  1769. }
  1770. /// <summary>
  1771. /// 删除指定文件
  1772. /// </summary>
  1773. /// <param name="dto"></param>
  1774. /// <returns></returns>
  1775. [HttpPost]
  1776. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1777. public async Task<IActionResult> DelFile(DelFileDto dto)
  1778. {
  1779. try
  1780. {
  1781. var TypeName = Request.Headers["TypeName"].ToString();
  1782. string filePath = "";
  1783. var fileDir = AppSettingsHelper.Get("GrpFileBasePath");
  1784. // 返回与指定虚拟路径相对应的物理路径即绝对路径
  1785. int id = 0;
  1786. if (TypeName == "A")
  1787. {
  1788. filePath = fileDir + "/团组增减款项相关文件/" + dto.fileName;
  1789. // 删除该文件
  1790. System.IO.File.Delete(filePath);
  1791. id = await _sqlSugar.Updateable<Grp_DecreasePayments>().Where(a => a.Id == dto.Id).SetColumns(a => new Grp_DecreasePayments { FilePath = "" }).ExecuteCommandAsync();
  1792. }
  1793. else if (TypeName == "B")
  1794. {
  1795. filePath = fileDir + "/商邀相关文件/" + dto.fileName;
  1796. // 删除该文件
  1797. System.IO.File.Delete(filePath);
  1798. id = await _sqlSugar.Updateable<Grp_InvitationOfficialActivities>().Where(a => a.Id == dto.Id).SetColumns(a => new Grp_InvitationOfficialActivities { Attachment = "" }).ExecuteCommandAsync();
  1799. }
  1800. if (id != 0)
  1801. {
  1802. return Ok(JsonView(true, "成功!"));
  1803. }
  1804. else
  1805. {
  1806. return Ok(JsonView(false, "失败!"));
  1807. }
  1808. }
  1809. catch (Exception ex)
  1810. {
  1811. return Ok(JsonView(false, "程序错误!"));
  1812. throw;
  1813. }
  1814. }
  1815. #endregion
  1816. #region 商邀费用录入
  1817. /// <summary>
  1818. /// 根据团组Id查询商邀费用列表
  1819. /// </summary>
  1820. /// <param name="dto"></param>
  1821. /// <returns></returns>
  1822. [HttpPost]
  1823. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1824. public async Task<IActionResult> InvitationOfficialActivitiesList(InvitationOfficialActivitiesListDto dto)
  1825. {
  1826. try
  1827. {
  1828. Result groupData = await _InvitationOfficialActivitiesRep.InvitationOfficialActivitiesList(dto);
  1829. if (groupData.Code != 0)
  1830. {
  1831. return Ok(JsonView(false, groupData.Msg));
  1832. }
  1833. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  1834. }
  1835. catch (Exception ex)
  1836. {
  1837. return Ok(JsonView(false, "程序错误!"));
  1838. throw;
  1839. }
  1840. }
  1841. /// <summary>
  1842. /// 根据商邀费用ID查询C表和商邀费用数据
  1843. /// </summary>
  1844. /// <param name="dto"></param>
  1845. /// <returns></returns>
  1846. [HttpPost]
  1847. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1848. public async Task<IActionResult> InvitationOfficialActivitiesById(InvitationOfficialActivitiesByIdDto dto)
  1849. {
  1850. try
  1851. {
  1852. Result groupData = await _InvitationOfficialActivitiesRep.InvitationOfficialActivitiesById(dto);
  1853. if (groupData.Code != 0)
  1854. {
  1855. return Ok(JsonView(false, groupData.Msg));
  1856. }
  1857. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  1858. }
  1859. catch (Exception ex)
  1860. {
  1861. return Ok(JsonView(false, "程序错误!"));
  1862. throw;
  1863. }
  1864. }
  1865. /// <summary>
  1866. /// 商邀费用录入操作(Status:1.新增,2.修改)
  1867. /// </summary>
  1868. /// <param name="dto"></param>
  1869. /// <returns></returns>
  1870. [HttpPost]
  1871. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1872. public async Task<IActionResult> OpInvitationOfficialActivities(OpInvitationOfficialActivitiesDto dto)
  1873. {
  1874. try
  1875. {
  1876. Result groupData = await _InvitationOfficialActivitiesRep.OpInvitationOfficialActivities(dto);
  1877. if (groupData.Code != 0)
  1878. {
  1879. return Ok(JsonView(false, groupData.Msg));
  1880. }
  1881. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  1882. }
  1883. catch (Exception ex)
  1884. {
  1885. return Ok(JsonView(false, "程序错误!"));
  1886. throw;
  1887. }
  1888. }
  1889. /// <summary>
  1890. /// 商邀删除
  1891. /// </summary>
  1892. /// <param name="dto"></param>
  1893. /// <returns></returns>
  1894. [HttpPost]
  1895. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1896. public async Task<IActionResult> DelInvitationOfficialActivities(DelBaseDto dto)
  1897. {
  1898. try
  1899. {
  1900. var res = await _InvitationOfficialActivitiesRep.SoftDeleteByIdAsync<Grp_InvitationOfficialActivities>(dto.Id.ToString(), dto.DeleteUserId);
  1901. if (!res)
  1902. {
  1903. var result = await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.CId == dto.Id && a.CTable == 81).SetColumns(a => new Grp_CreditCardPayment()
  1904. {
  1905. IsDel = 1,
  1906. DeleteUserId = dto.DeleteUserId,
  1907. DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
  1908. }).ExecuteCommandAsync();
  1909. return Ok(JsonView(false, "删除失败"));
  1910. }
  1911. return Ok(JsonView(true, "删除成功!"));
  1912. }
  1913. catch (Exception ex)
  1914. {
  1915. return Ok(JsonView(false, "程序错误!"));
  1916. throw;
  1917. }
  1918. }
  1919. #endregion
  1920. #region 团组英文资料
  1921. /// <summary>
  1922. /// 查询团组英文所有资料
  1923. /// </summary>
  1924. /// <param name="dto"></param>
  1925. /// <returns></returns>
  1926. [HttpPost]
  1927. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1928. public async Task<IActionResult> QueryDelegationEnData(QueryDelegationEnDataDto dto)
  1929. {
  1930. try
  1931. {
  1932. Result groupData = await _delegationEnDataRep.QueryDelegationEnData(dto);
  1933. if (groupData.Code != 0)
  1934. {
  1935. return Ok(JsonView(false, groupData.Msg));
  1936. }
  1937. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  1938. }
  1939. catch (Exception ex)
  1940. {
  1941. return Ok(JsonView(false, "程序错误!"));
  1942. throw;
  1943. }
  1944. }
  1945. /// <summary>
  1946. /// 团组英文资料操作(Status:1.新增,2.修改)
  1947. /// </summary>
  1948. /// <param name="dto"></param>
  1949. /// <returns></returns>
  1950. [HttpPost]
  1951. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1952. public async Task<IActionResult> OpDelegationEnData(OpDelegationEnDataDto dto)
  1953. {
  1954. try
  1955. {
  1956. Result groupData = await _delegationEnDataRep.OpDelegationEnData(dto);
  1957. if (groupData.Code != 0)
  1958. {
  1959. return Ok(JsonView(false, groupData.Msg));
  1960. }
  1961. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  1962. }
  1963. catch (Exception ex)
  1964. {
  1965. return Ok(JsonView(false, "程序错误!"));
  1966. throw;
  1967. }
  1968. }
  1969. /// <summary>
  1970. /// 团组英文资料Id查询数据
  1971. /// </summary>
  1972. /// <param name="dto"></param>
  1973. /// <returns></returns>
  1974. [HttpPost]
  1975. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  1976. public async Task<IActionResult> QueryDelegationEnDataById(QueryDelegationEnDataByIdDto dto)
  1977. {
  1978. try
  1979. {
  1980. Grp_DelegationEnData _DelegationEnData = await _sqlSugar.Queryable<Grp_DelegationEnData>().FirstAsync(it => it.Id == dto.Id && it.IsDel == 0);
  1981. if (_DelegationEnData != null)
  1982. {
  1983. return Ok(JsonView(true, "查询成功!", _DelegationEnData));
  1984. }
  1985. return Ok(JsonView(true, "暂无数据!", _DelegationEnData));
  1986. }
  1987. catch (Exception ex)
  1988. {
  1989. return Ok(JsonView(false, "程序错误!"));
  1990. throw;
  1991. }
  1992. }
  1993. /// <summary>
  1994. /// 团组英文资料删除
  1995. /// </summary>
  1996. /// <param name="dto"></param>
  1997. /// <returns></returns>
  1998. [HttpPost]
  1999. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2000. public async Task<IActionResult> DelDelegationEnData(DelBaseDto dto)
  2001. {
  2002. try
  2003. {
  2004. var res = await _delegationEnDataRep.SoftDeleteByIdAsync<Grp_DelegationEnData>(dto.Id.ToString(), dto.DeleteUserId);
  2005. if (!res)
  2006. {
  2007. return Ok(JsonView(false, "删除失败"));
  2008. }
  2009. return Ok(JsonView(true, "删除成功!"));
  2010. }
  2011. catch (Exception ex)
  2012. {
  2013. return Ok(JsonView(false, "程序错误!"));
  2014. throw;
  2015. }
  2016. }
  2017. #endregion
  2018. #region 导出邀请函
  2019. /// <summary>
  2020. /// 导出邀请函页面初始化
  2021. /// </summary>
  2022. /// <param name="dto"></param>
  2023. /// <returns></returns>
  2024. [HttpPost]
  2025. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2026. public async Task<IActionResult> QueryinvitationLetter(DecreasePaymentsListDto dto)
  2027. {
  2028. try
  2029. {
  2030. List<Grp_DelegationInfo> grp_Delegations = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(a => a.IsDel == 0).OrderBy(a => a.Id, OrderByType.Desc).ToListAsync();
  2031. List<Crm_DeleClient> crm_Deles = new List<Crm_DeleClient>();
  2032. if (dto.DiId == 0)
  2033. {
  2034. crm_Deles = await _sqlSugar.Queryable<Crm_DeleClient>().Where(a => a.DiId == grp_Delegations[0].Id && a.IsDel == 0).ToListAsync();
  2035. }
  2036. else
  2037. {
  2038. crm_Deles = await _sqlSugar.Queryable<Crm_DeleClient>().Where(a => a.DiId == dto.DiId && a.IsDel == 0).ToListAsync();
  2039. }
  2040. return Ok(JsonView(true, "查询成功!", new
  2041. {
  2042. deleClient = crm_Deles,
  2043. delegations = grp_Delegations
  2044. }));
  2045. }
  2046. catch (Exception ex)
  2047. {
  2048. return Ok(JsonView(false, "程序错误!"));
  2049. throw;
  2050. }
  2051. }
  2052. /// <summary>
  2053. /// 导出邀请函
  2054. /// </summary>
  2055. /// <param name="dto"></param>
  2056. /// <returns></returns>
  2057. [HttpPost]
  2058. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2059. public async Task<IActionResult> invitationLetter(DecreasePaymentsListDto dto)
  2060. {
  2061. try
  2062. {
  2063. Dictionary<string, string> transDic = new Dictionary<string, string>();
  2064. List<Crm_DeleClient> crm_DeleClients = await _sqlSugar.Queryable<Crm_DeleClient>().Where(a => a.DiId == dto.DiId && a.IsDel == 0).ToListAsync();
  2065. List<string> texts = new List<string>();
  2066. if (crm_DeleClients.Count != 0)
  2067. {
  2068. foreach (Crm_DeleClient item in crm_DeleClients)
  2069. {
  2070. if (!string.IsNullOrWhiteSpace(item.Pinyin))
  2071. {
  2072. transDic.Add(item.LastName + item.FirstName, item.Pinyin);
  2073. }
  2074. else
  2075. {
  2076. string name = item.LastName + item.FirstName;
  2077. texts.Add(name);
  2078. }
  2079. if (!string.IsNullOrEmpty(item.Job) && !texts.Contains(item.Job))
  2080. {
  2081. if (!transDic.ContainsKey(item.Job))
  2082. {
  2083. texts.Add(item.Job);
  2084. }
  2085. }
  2086. if (item.CrmCompanyId != 0)
  2087. {
  2088. Crm_CustomerCompany crm_Customer = await _sqlSugar.Queryable<Crm_CustomerCompany>().FirstAsync(a => a.Id == item.CrmCompanyId && a.IsDel == 0);
  2089. if (!transDic.ContainsKey(crm_Customer.CompanyName))
  2090. {
  2091. texts.Add(crm_Customer.CompanyName);
  2092. }
  2093. }
  2094. }
  2095. List<TranslateResult> transData = _airTicketResRep.ReTransBatch(texts, "en");
  2096. if (transData.Count > 0)
  2097. {
  2098. foreach (TranslateResult item in transData)
  2099. {
  2100. if (!transDic.ContainsKey(item.Query))
  2101. {
  2102. transDic.Add(item.Query, item.Translation);
  2103. }
  2104. }
  2105. }
  2106. List<guestList> list = new List<guestList>();
  2107. foreach (Crm_DeleClient dele in crm_DeleClients)
  2108. {
  2109. guestList guestList = new guestList();
  2110. if (!string.IsNullOrWhiteSpace(dele.Pinyin))
  2111. {
  2112. guestList.Name = dele.Pinyin;
  2113. }
  2114. else
  2115. {
  2116. string Name = transDic.Where(s => s.Key == dele.LastName + dele.FirstName).FirstOrDefault().Value;
  2117. guestList.Name = Name;
  2118. }
  2119. if (dele.Sex == 0)
  2120. {
  2121. guestList.Sex = "Male";
  2122. }
  2123. else if (dele.Sex == 1)
  2124. {
  2125. guestList.Sex = "Female";
  2126. }
  2127. guestList.DOB = dele.BirthDay.Replace('-', '.');
  2128. Crm_CustomerCompany crm_Customer = await _sqlSugar.Queryable<Crm_CustomerCompany>().FirstAsync(a => a.Id == dele.CrmCompanyId && a.IsDel == 0);
  2129. string jobName = transDic.Where(s => s.Key == crm_Customer.CompanyName).FirstOrDefault().Value + " " + transDic.Where(s => s.Key == dele.Job).FirstOrDefault().Value;
  2130. guestList.Job = jobName;
  2131. list.Add(guestList);
  2132. }
  2133. //载入模板
  2134. Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/邀请函模板0210.docx");
  2135. DocumentBuilder builder = new DocumentBuilder(doc);
  2136. //获取word里所有表格
  2137. NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);
  2138. //获取所填表格的序数
  2139. Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;
  2140. var rowStart = tableOne.Rows[0]; //获取第1行
  2141. //循环赋值
  2142. for (int i = 0; i < list.Count; i++)
  2143. {
  2144. builder.MoveToCell(0, i + 1, 0, 0);
  2145. builder.Write(list[i].Name.ToString());
  2146. builder.MoveToCell(0, i + 1, 1, 0);
  2147. builder.Write(list[i].Sex.ToString());
  2148. builder.MoveToCell(0, i + 1, 2, 0);
  2149. builder.Write(list[i].DOB.ToString());
  2150. builder.MoveToCell(0, i + 1, 3, 0);
  2151. builder.Write(list[i].Job.ToString());
  2152. }
  2153. //删除多余行
  2154. while (tableOne.Rows.Count > list.Count + 1)
  2155. {
  2156. tableOne.Rows.RemoveAt(list.Count + 1);
  2157. }
  2158. var fileDir = AppSettingsHelper.Get("GrpFileBasePath");
  2159. string fileName = "邀请函" + DateTime.Now.ToString("yyyy-MM-dd") + ".docx";
  2160. string filePath = fileDir + $@"商邀相关文件/{fileName}";
  2161. doc.Save(filePath);
  2162. string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/GrpFile/商邀相关文件" + fileName;
  2163. return Ok(JsonView(true, "成功!", Url));
  2164. }
  2165. else
  2166. {
  2167. return Ok(JsonView(false, "失败,该团组没有客户名单!"));
  2168. }
  2169. }
  2170. catch (Exception ex)
  2171. {
  2172. return Ok(JsonView(false, "程序错误!"));
  2173. throw;
  2174. }
  2175. }
  2176. #endregion
  2177. #region 团组经理模块 出入境费用
  2178. ///// <summary>
  2179. ///// 团组模块 - 出入境费用
  2180. ///// </summary>
  2181. ///// <returns></returns>
  2182. //[HttpPost]
  2183. //[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2184. //public async Task<IActionResult> SetEnterExitCostCurrencyChange()
  2185. //{
  2186. // try
  2187. // {
  2188. // var data = await _enterExitCostRep.SetEnterExitCostCurrencyChange();
  2189. // if (data.Code != 0)
  2190. // {
  2191. // return Ok(JsonView(false, data.Msg));
  2192. // }
  2193. // return Ok(JsonView(true, "查询成功!"));
  2194. // }
  2195. // catch (Exception ex)
  2196. // {
  2197. // return Ok(JsonView(false, ex.Message));
  2198. // throw;
  2199. // }
  2200. //}
  2201. /// <summary>
  2202. /// 团组模块 - 出入境费用 - 子项 地区更改为 nationalTravelFee 的id
  2203. /// </summary>
  2204. /// <returns></returns>
  2205. [HttpPost]
  2206. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2207. public async Task<IActionResult> SetDayAndCostAreaChange()
  2208. {
  2209. try
  2210. {
  2211. var nationalTravelFee = await _sqlSugar.Queryable<Grp_NationalTravelFee>().ToListAsync();
  2212. var dayAndCost = await _sqlSugar.Queryable<Grp_DayAndCost>().Where(it => it.IsDel == 0).ToListAsync();
  2213. var unite = dayAndCost.Where(a => nationalTravelFee.Any(b => a.Place.Trim() == b.City)).ToList(); //交集
  2214. var merge = dayAndCost.Where(a => !nationalTravelFee.Any(b => a.Place.Trim() == b.City)).ToList(); //差集
  2215. foreach (var item in unite) //处理交集数据
  2216. {
  2217. dayAndCost.Where(it => it.Id == item.Id).FirstOrDefault().NationalTravelFeeId = nationalTravelFee.Where(it => it.City.Trim() == item.Place.Trim()).FirstOrDefault().Id;
  2218. }
  2219. foreach (var item in merge) //处理差集数据
  2220. {
  2221. int nationalTravelFeeId = 0;
  2222. var cityData = nationalTravelFee.Where(it => it.City.Trim() == item.Place.Trim()).FirstOrDefault();
  2223. if (cityData != null) nationalTravelFeeId = cityData.Id;
  2224. else
  2225. {
  2226. var countryData = nationalTravelFee.Where(it => it.Country.Trim() == item.Place.Trim()).FirstOrDefault();
  2227. if (countryData != null) nationalTravelFeeId = countryData.Id;
  2228. }
  2229. dayAndCost.Where(it => it.Id == item.Id).FirstOrDefault().NationalTravelFeeId = nationalTravelFeeId;
  2230. }
  2231. //只更新dayAndCost 的 nationalTravelFeeId;
  2232. var result = _sqlSugar.Updateable(dayAndCost).UpdateColumns(it => new { it.NationalTravelFeeId }).ExecuteCommand();
  2233. if (result > 0) return Ok(JsonView(true, "nationalTravelFeeId列更新成功!"));
  2234. else return Ok(JsonView(false, "nationalTravelFeeId列更新失败!"));
  2235. }
  2236. catch (Exception ex)
  2237. {
  2238. return Ok(JsonView(false, ex.Message));
  2239. throw;
  2240. }
  2241. }
  2242. /// <summary>
  2243. /// 团组模块 - 出入境费用 - 基础数据源(团组名称/币种类型)
  2244. /// </summary>
  2245. /// <returns></returns>
  2246. [HttpPost]
  2247. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2248. public async Task<IActionResult> GetEnterExitCostDataSource(PortDtoBase dto)
  2249. {
  2250. try
  2251. {
  2252. var groupNameData = await _groupRepository.GetGroupNameList(new GroupNameDto { PortType = dto.PortType });
  2253. string currencySql = string.Format("Select * From Sys_SetData Where STid = 66 And IsDel = 0");
  2254. var currencyData = await _sqlSugar.SqlQueryable<SetDataInfoView>(currencySql).ToListAsync();
  2255. //string nationalTravelFeeSql = string.Format(@"Select ssd.Name as CurrencyCode, ssd.Remark as CurrencyName,su.CnName as LastUpdateUserName,gntf.* From Grp_NationalTravelFee gntf
  2256. // Left Join Sys_SetData ssd On ssd.STid = 66 And gntf.Currency = ssd.Id
  2257. // Left Join Sys_Users su On gntf.LastUpdateUserId = su.Id
  2258. // Where gntf.Isdel = 0");
  2259. //var nationalTravelFeeData = await _sqlSugar.SqlQueryable<NationalTravelFeeInfoView>(nationalTravelFeeSql).ToListAsync();
  2260. return Ok(JsonView(true, "查询成功!", new
  2261. {
  2262. GroupNameData = groupNameData.Data,
  2263. CurrencyData = currencyData,
  2264. //NationalTravelFeeData = nationalTravelFeeData
  2265. }));
  2266. }
  2267. catch (Exception ex)
  2268. {
  2269. return Ok(JsonView(false, ex.Message));
  2270. throw;
  2271. }
  2272. }
  2273. /// <summary>
  2274. /// 团组模块 - 出入境费用 - Info
  2275. /// </summary>
  2276. /// <returns></returns>
  2277. [HttpPost]
  2278. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2279. public async Task<IActionResult> GetEnterExitCostInfobyDiId(EnterExitCostInfobyDiIdDto dto)
  2280. {
  2281. try
  2282. {
  2283. var data = await _enterExitCostRep.GetEnterExitCostInfoByDiId(dto);
  2284. if (data.Code != 0)
  2285. {
  2286. return Ok(JsonView(false, data.Msg));
  2287. }
  2288. return Ok(JsonView(true, "查询成功!", data.Data));
  2289. }
  2290. catch (Exception ex)
  2291. {
  2292. return Ok(JsonView(false, ex.Message));
  2293. }
  2294. }
  2295. /// <summary>
  2296. /// 团组模块 - 出入境费用 - Add And Update
  2297. /// </summary>
  2298. /// <returns></returns>
  2299. [HttpPost]
  2300. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2301. public async Task<IActionResult> PostEnterExitCostOperate(EnterExitCostOperateDto dto)
  2302. {
  2303. try
  2304. {
  2305. var data = await _enterExitCostRep.PostEnterExitCostOperate(dto);
  2306. if (data.Code != 0)
  2307. {
  2308. return Ok(JsonView(false, data.Msg));
  2309. }
  2310. return Ok(JsonView(true, data.Msg, data.Data));
  2311. }
  2312. catch (Exception ex)
  2313. {
  2314. return Ok(JsonView(false, ex.Message));
  2315. }
  2316. }
  2317. /// <summary>
  2318. /// 团组模块 - 出入境费用 - 子项删除
  2319. /// </summary>
  2320. /// <returns></returns>
  2321. [HttpPost]
  2322. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2323. public async Task<IActionResult> PostEnterExitCostSubItemDel(EnterExitCostSubItemDelDto dto)
  2324. {
  2325. try
  2326. {
  2327. var data = await _enterExitCostRep.PostEnterExitCostSubItemDel(dto);
  2328. if (data.Code != 0)
  2329. {
  2330. return Ok(JsonView(false, data.Msg));
  2331. }
  2332. return Ok(JsonView(true, "操作成功!", data.Data));
  2333. }
  2334. catch (Exception ex)
  2335. {
  2336. return Ok(JsonView(false, ex.Message));
  2337. }
  2338. }
  2339. /// <summary>
  2340. /// 团组模块 - 出入境国家费用标准 List
  2341. /// </summary>
  2342. /// <returns></returns>
  2343. [HttpPost]
  2344. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2345. public async Task<IActionResult> GetNationalTravelFeeData(PortDtoBase dto)
  2346. {
  2347. try
  2348. {
  2349. Stopwatch sw = new Stopwatch();
  2350. sw.Start();
  2351. string nationalTravelFeeSql = string.Format(@"Select ssd.Name as CurrencyCode, ssd.Remark as CurrencyName,su.CnName as LastUpdateUserName,gntf.* From Grp_NationalTravelFee gntf
  2352. Left Join Sys_SetData ssd On ssd.STid = 66 And gntf.Currency = ssd.Id
  2353. Left Join Sys_Users su On gntf.LastUpdateUserId = su.Id
  2354. Where gntf.Isdel = 0");
  2355. var nationalTravelFeeData = await _sqlSugar.SqlQueryable<NationalTravelFeeInfoView>(nationalTravelFeeSql).ToListAsync();
  2356. //var nationalTravel = nationalTravelFeeData.GroupBy(it => it.Country).Select(it1 => it1.FirstOrDefault());
  2357. //List<dynamic> nationalTravelFeeData1 = new List<dynamic>();
  2358. //foreach (var item in nationalTravel)
  2359. //{
  2360. // var cityData = nationalTravelFeeData.Where(it => it.Country == item.Country).ToList();
  2361. // var otherData = cityData.Where(it => it.City.Contains("其他城市")).FirstOrDefault();
  2362. // if (otherData != null)
  2363. // {
  2364. // cityData.Remove(otherData);
  2365. // cityData.Add(otherData);
  2366. // }
  2367. // nationalTravelFeeData1.Add(new
  2368. // {
  2369. // Country = item.Country,
  2370. // CityData = cityData
  2371. // });
  2372. //}
  2373. sw.Stop();
  2374. return Ok(JsonView(true, "查询成功!耗时:" + sw.ElapsedMilliseconds + "ms", nationalTravelFeeData));
  2375. }
  2376. catch (Exception ex)
  2377. {
  2378. return Ok(JsonView(false, ex.Message));
  2379. throw;
  2380. }
  2381. }
  2382. /// <summary>
  2383. /// 团组模块 - 出入境国家费用标准 Page List Data Source
  2384. /// </summary>
  2385. /// <returns></returns>
  2386. [HttpPost]
  2387. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2388. public async Task<IActionResult> GetNationalTravelFeePageDataSource()
  2389. {
  2390. string sql = string.Format(@"Select * From Grp_NationalTravelFee Where Isdel = 0 ");
  2391. var nationalTravelFeeData = await _groupRepository._sqlSugar.SqlQueryable<Grp_NationalTravelFee>(sql).ToListAsync();
  2392. List<string> countryData = new List<string>();
  2393. countryData.AddRange( nationalTravelFeeData.Select(it => it.Country ).ToList());
  2394. countryData = countryData.Distinct().ToList();
  2395. List<dynamic> dataSource = new List<dynamic>();
  2396. foreach (var item in countryData)
  2397. {
  2398. List<string> cityData1 = new List<string>();
  2399. cityData1 = nationalTravelFeeData.Where(it => it.Country == item).Select(it => it.City).ToList();
  2400. var countryData2 = new
  2401. {
  2402. CountryName = item,
  2403. CityData = cityData1
  2404. };
  2405. dataSource.Add(countryData2);
  2406. }
  2407. return Ok(JsonView(true, "查询成功!", dataSource));
  2408. }
  2409. /// <summary>
  2410. /// 团组模块 - 出入境国家费用标准 Page List
  2411. /// </summary>
  2412. /// <returns></returns>
  2413. [HttpPost]
  2414. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2415. public async Task<IActionResult> PostNationalTravelFeePage(NationalTravelFeePageDto dto)
  2416. {
  2417. int portId = dto.PortType;
  2418. if (portId != 1 && portId != 2 && portId != 3) return Ok(JsonView(false, "请输入正确的端口号!\r\n请求端口分类1 Web 2 Android 3 IOS"));
  2419. if (dto.PageIndex == 0) return Ok(JsonView(false, "当前页码数不能为0!"));
  2420. if (dto.PageSize == 0) return Ok(JsonView(false, "每页条数不能0!"));
  2421. string whereSql = string.Empty;
  2422. if (!string.IsNullOrEmpty(dto.Country))
  2423. {
  2424. whereSql += string.Format(@" And gntf.Country ='{0}'", dto.Country);
  2425. }
  2426. if (!string.IsNullOrEmpty(dto.City))
  2427. {
  2428. whereSql += string.Format(@" And gntf.City='{0}'", dto.City);
  2429. }
  2430. string pageSql = string.Format(@"Select * From (
  2431. Select row_number() over(order by gntf.LastUpdateTime Desc) as RowNumber,
  2432. ssd.Name as CurrencyCode, ssd.Remark as CurrencyName,su.CnName as LastUpdateUserName,gntf.*
  2433. From Grp_NationalTravelFee gntf
  2434. Left Join Sys_SetData ssd On ssd.STid = 66 And gntf.Currency = ssd.Id
  2435. Left Join Sys_Users su On gntf.LastUpdateUserId = su.Id
  2436. Where gntf.Isdel = 0 {0} ) temp ", whereSql);
  2437. RefAsync<int> total = 0;
  2438. var nationalTravelFeeData = await _groupRepository._sqlSugar.SqlQueryable<NationalTravelFeePageInfoView>(pageSql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);
  2439. return Ok(JsonView(true, "查询成功!", nationalTravelFeeData, (int)total));
  2440. }
  2441. /// <summary>
  2442. /// 团组模块 - 出入境国家费用标准 - Add Or Update
  2443. /// </summary>
  2444. /// <returns></returns>
  2445. [HttpPost]
  2446. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2447. public async Task<IActionResult> PostNationalTravelFeeOperate(NationalTravelFeeOperateDto dto)
  2448. {
  2449. try
  2450. {
  2451. var data = await _enterExitCostRep.PostNationalTravelFeeOperate(dto);
  2452. if (data.Code != 0)
  2453. {
  2454. return Ok(JsonView(false, data.Msg));
  2455. }
  2456. return Ok(JsonView(true, "操作成功!", data.Data));
  2457. }
  2458. catch (Exception ex)
  2459. {
  2460. return Ok(JsonView(false, ex.Message));
  2461. }
  2462. }
  2463. /// <summary>
  2464. /// 团组模块 - 出入境国家费用标准 - Del
  2465. /// </summary>
  2466. /// <returns></returns>
  2467. [HttpPost]
  2468. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  2469. public async Task<IActionResult> PostNationalTravelFeeDel(NationalTravelFeeDelDto dto)
  2470. {
  2471. try
  2472. {
  2473. Grp_NationalTravelFee _nationalTravelFee = new Grp_NationalTravelFee() {
  2474. Id = dto.Id,
  2475. DeleteUserId = dto.DeleteUserId,
  2476. DeleteTime = DateTime.Now.ToString("yyyy-MM-dd"),
  2477. IsDel = 1
  2478. };
  2479. var delStatus = await _enterExitCostRep._sqlSugar.Updateable<Grp_NationalTravelFee>(_nationalTravelFee)
  2480. .UpdateColumns(it => new { it.DeleteTime, it.DeleteUserId, it.IsDel })
  2481. .WhereColumns(it => new { it.Id })
  2482. .ExecuteCommandAsync();
  2483. if (delStatus <= 0)
  2484. {
  2485. return Ok(JsonView(false, "删除失败!"));
  2486. }
  2487. return Ok(JsonView(true, "操作成功!"));
  2488. }
  2489. catch (Exception ex)
  2490. {
  2491. return Ok(JsonView(false, ex.Message));
  2492. }
  2493. }
  2494. #endregion
  2495. }
  2496. }