GroupsController.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767
  1. using Microsoft.AspNetCore.Mvc;
  2. using Newtonsoft.Json.Serialization;
  3. using OASystem.API.OAMethodLib;
  4. using OASystem.Domain.Dtos.Groups;
  5. using OASystem.Domain.Entities.Business;
  6. using OASystem.Domain.Entities.Groups;
  7. using OASystem.Domain.ViewModels.Groups;
  8. using OASystem.Infrastructure.Repositories.Groups;
  9. using TencentCloud.Ocr.V20181119.Models;
  10. using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
  11. namespace OASystem.API.Controllers
  12. {
  13. /// <summary>
  14. /// 团组相关
  15. /// </summary>
  16. //[Authorize]
  17. [Route("api/[controller]/[action]")]
  18. public class GroupsController : ControllerBase
  19. {
  20. private readonly GrpScheduleRepository _grpScheduleRep;
  21. private readonly IMapper _mapper;
  22. private readonly DelegationInfoRepository _groupRepository;
  23. private readonly TaskAssignmentRepository _taskAssignmentRep;
  24. private readonly AirTicketResRepository _airTicketResRep;
  25. public GroupsController(IMapper mapper, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository, TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep)
  26. {
  27. _mapper = mapper;
  28. _grpScheduleRep = grpScheduleRep;
  29. _groupRepository = groupRepository;
  30. _taskAssignmentRep = taskAssignmentRep;
  31. _airTicketResRep = airTicketResRep;
  32. }
  33. #region 流程管控
  34. /// <summary>
  35. /// 获取团组流程管控信息
  36. /// </summary>
  37. /// <param name="paras">参数Json字符串</param>
  38. /// <returns></returns>
  39. [HttpPost]
  40. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  41. public async Task<IActionResult> PostSearchGrpSchedule(JsonDtoBase _jsonDto)
  42. {
  43. if (string.IsNullOrEmpty(_jsonDto.Paras))
  44. {
  45. return Ok(JsonView(false, "参数为空"));
  46. }
  47. Grp_ScheduleDto _ScheduleDto = JsonConvert.DeserializeObject<Grp_ScheduleDto>(_jsonDto.Paras);
  48. if (_ScheduleDto != null)
  49. {
  50. if (_ScheduleDto.SearchType == 2)//获取列表
  51. {
  52. List<Grp_ScheduleView> _grpScheduleViewList = await _grpScheduleRep.GetViewList_GrpSchedule(_ScheduleDto);
  53. return Ok(JsonView(_grpScheduleViewList));
  54. }
  55. else//获取对象
  56. {
  57. Grp_ScheduleCombinView _grpScheduleView = await _grpScheduleRep.GetView_GrpSchedule(_ScheduleDto);
  58. if (_grpScheduleView != null)
  59. {
  60. return Ok(JsonView(_grpScheduleView));
  61. }
  62. }
  63. }
  64. else
  65. {
  66. return Ok(JsonView(false, "参数反序列化失败"));
  67. }
  68. return Ok(JsonView(false, "暂无数据!"));
  69. }
  70. /// <summary>
  71. /// 修改团组流程管控详细表数据
  72. /// </summary>
  73. /// <param name="paras"></param>
  74. /// <returns></returns>
  75. [HttpPost]
  76. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  77. public async Task<IActionResult> PostUpdateGrpScheduleDetail(Grp_ScheduleDetailUpdDto dto)
  78. {
  79. Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);
  80. var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_ScheduleDetailInfo>()
  81. .SetColumns(it => it.Duty == _detail.Duty)
  82. .SetColumns(it => it.ExpectBeginDt == _detail.ExpectBeginDt)
  83. .SetColumns(it => it.ExpectEndDt == _detail.ExpectEndDt)
  84. .SetColumns(it => it.JobContent == _detail.JobContent)
  85. .SetColumns(it => it.Remark == _detail.Remark)
  86. .SetColumns(it => it.StepStatus == _detail.StepStatus)
  87. .Where(s => s.Id == dto.Id)
  88. //.UpdateColumns(s => new { s.Duty, s.ExpectBeginDt, s.ExpectEndDt, s.JobContent, s.Remark, s.StepStatus })
  89. .ExecuteCommandAsync();
  90. if (result > 0)
  91. {
  92. return Ok(JsonView(true, "保存成功!"));
  93. }
  94. return Ok(JsonView(false, "保存失败!"));
  95. }
  96. /// <summary>
  97. /// 删除团组流程管控详细表数据,删除人Id请放在Duty
  98. /// </summary>
  99. /// <param name="dto"></param>
  100. /// <returns></returns>
  101. [HttpPost]
  102. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  103. public async Task<ActionResult> PostDeleteGrpScheduleDetail(Grp_ScheduleDetailUpdDto dto)
  104. {
  105. Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);
  106. _detail.IsDel = 1;
  107. _detail.DeleteUserId = dto.Duty;
  108. _detail.DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  109. var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_ScheduleDetailInfo>()
  110. .SetColumns(it => it.IsDel == _detail.IsDel)
  111. .SetColumns(it => it.DeleteUserId == _detail.DeleteUserId)
  112. .SetColumns(it => it.DeleteTime == _detail.DeleteTime)
  113. .Where(it => it.Id == dto.Id)
  114. //.UpdateColumns(s => new { s.IsDel, s.DeleteUserId, s.DeleteTime })
  115. //.WhereColumns(s => s.Id == dto.Id)
  116. .ExecuteCommandAsync();
  117. if (result > 0)
  118. {
  119. return Ok(JsonView(true, "删除成功!"));
  120. }
  121. return Ok(JsonView(false, "删除失败!"));
  122. }
  123. /// <summary>
  124. /// 增加团组流程管控详细表数据
  125. /// </summary>
  126. /// <param name="dto"></param>
  127. /// <returns></returns>
  128. [HttpPost]
  129. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  130. public async Task<ActionResult> PostInsertGrpScheduleDetail(Grp_ScheduleDetailInsertDto dto)
  131. {
  132. Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);
  133. if (DateTime.Now < _detail.ExpectBeginDt)
  134. {
  135. _detail.StepStatus = 0;
  136. }
  137. else
  138. {//若大于设置时间,不考虑设置的预计结束日期,统一视为进行中
  139. _detail.StepStatus = 1;
  140. }
  141. var result = await _grpScheduleRep._sqlSugar.Insertable(_detail).ExecuteReturnIdentityAsync();
  142. if (result > 0)
  143. {
  144. Grp_ScheduleDetailView _result = await _grpScheduleRep.GetInsertBackData(result);
  145. return Ok(JsonView(true, "添加成功!", _result));
  146. }
  147. return Ok(JsonView(false, "添加失败!"));
  148. }
  149. #endregion
  150. #region 团组基本信息
  151. /// <summary>
  152. /// 接团信息列表
  153. /// </summary>
  154. /// <param name="dto">团组列表请求dto</param>
  155. /// <returns></returns>
  156. [HttpPost]
  157. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  158. public async Task<IActionResult> GetGroupList(GroupListDto dto)
  159. {
  160. var groupData = await _groupRepository.GetGroupList(dto);
  161. if (groupData.Code != 0)
  162. {
  163. return Ok(JsonView(false, groupData.Msg));
  164. }
  165. return Ok(JsonView(groupData.Data));
  166. }
  167. /// <summary>
  168. /// 接团信息详情
  169. /// </summary>
  170. /// <param name="dto">团组info请求dto</param>
  171. /// <returns></returns>
  172. [HttpPost]
  173. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  174. public async Task<IActionResult> GetGroupInfo(GroupInfoDto dto)
  175. {
  176. var groupData = await _groupRepository.GetGroupInfo(dto);
  177. if (groupData.Code != 0)
  178. {
  179. return Ok(JsonView(false, groupData.Msg));
  180. }
  181. return Ok(JsonView(groupData.Data));
  182. }
  183. /// <summary>
  184. /// 接团信息 编辑添加
  185. /// 基础信息数据源
  186. /// </summary>
  187. /// <param name="dto"></param>
  188. /// <returns></returns>
  189. [HttpPost]
  190. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  191. public async Task<IActionResult> GroupEditBasicSource(GroupListDto dto)
  192. {
  193. var groupData = await _groupRepository.GroupEditBasicSource(dto);
  194. if (groupData.Code != 0)
  195. {
  196. return Ok(JsonView(false, groupData.Msg));
  197. }
  198. return Ok(JsonView(groupData.Data));
  199. }
  200. /// <summary>
  201. /// 接团信息 操作(增改)
  202. /// </summary>
  203. /// <param name="dto"></param>
  204. /// <returns></returns>
  205. [HttpPost]
  206. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  207. public async Task<IActionResult> GroupOperation(GroupOperationDto dto)
  208. {
  209. try
  210. {
  211. var groupData = await _groupRepository.GroupOperation(dto);
  212. if (groupData.Code != 0)
  213. {
  214. return Ok(JsonView(false, groupData.Msg));
  215. }
  216. return Ok(JsonView(true));
  217. }
  218. catch (Exception ex)
  219. {
  220. Logs("[response]" + JsonConvert.SerializeObject(dto));
  221. Logs(ex.Message);
  222. return Ok(JsonView(false, ex.Message));
  223. }
  224. }
  225. /// <summary>
  226. /// 接团信息 操作(删除)
  227. /// </summary>
  228. /// <param name="dto"></param>
  229. /// <returns></returns>
  230. [HttpPost]
  231. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  232. public async Task<IActionResult> GroupDel(GroupDelDto dto)
  233. {
  234. try
  235. {
  236. var groupData = await _groupRepository.GroupDel(dto);
  237. if (groupData.Code != 0)
  238. {
  239. return Ok(JsonView(false, groupData.Msg));
  240. }
  241. return Ok(JsonView(true));
  242. }
  243. catch (Exception ex)
  244. {
  245. Logs("[response]" + JsonConvert.SerializeObject(dto));
  246. Logs(ex.Message);
  247. return Ok(JsonView(false, ex.Message));
  248. }
  249. }
  250. /// <summary>
  251. /// 获取团组销售报价号
  252. /// 团组添加时 使用
  253. /// </summary>
  254. /// <returns></returns>
  255. [HttpPost]
  256. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  257. public async Task<IActionResult> GetGroupSalesQuoteNo()
  258. {
  259. var groupData = await _groupRepository.GetGroupSalesQuoteNo();
  260. if (groupData.Code != 0)
  261. {
  262. return Ok(JsonView(false, groupData.Msg));
  263. }
  264. object salesQuoteNo = new
  265. {
  266. SalesQuoteNo = groupData.Data
  267. };
  268. return Ok(JsonView(salesQuoteNo));
  269. }
  270. /// <summary>
  271. /// 设置确认出团
  272. /// </summary>
  273. /// <param name="dto"></param>
  274. /// <returns></returns>
  275. [HttpPost]
  276. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  277. public async Task<IActionResult> SetConfirmationGroup(ConfirmationGroupDto dto)
  278. {
  279. var groupData = await _groupRepository.ConfirmationGroup(dto);
  280. if (groupData.Code != 0)
  281. {
  282. return Ok(JsonView(false, groupData.Msg));
  283. }
  284. GroupStepForDelegation.CreateWorkStep(dto.GroupId); //创建管控流程
  285. return Ok(JsonView(groupData.Data));
  286. }
  287. /// <summary>
  288. /// 获取团组名称 List
  289. /// </summary>
  290. /// <param name="dto"></param>
  291. /// <returns></returns>
  292. [HttpPost]
  293. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  294. public async Task<IActionResult> GetGroupNameList(GroupNameDto dto)
  295. {
  296. var groupData = await _groupRepository.GetGroupNameList(dto);
  297. if (groupData.Code != 0)
  298. {
  299. return Ok(JsonView(false, groupData.Msg));
  300. }
  301. return Ok(JsonView(groupData.Data, groupData.Data.Count));
  302. }
  303. /// <summary>
  304. /// 获取团组名称data And 签证国别Data
  305. /// </summary>
  306. /// <param name="dto"></param>
  307. /// <returns></returns>
  308. [HttpPost]
  309. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  310. public async Task<IActionResult> GetGroupNameAndVisaNationality(GroupNameDto dto)
  311. {
  312. var groupData = await _groupRepository.GetGroupNameAndVisaNationality(dto);
  313. if (groupData.Code != 0)
  314. {
  315. return Ok(JsonView(false, groupData.Msg));
  316. }
  317. return Ok(JsonView(groupData.Data));
  318. }
  319. #endregion
  320. #region 团组&签证
  321. /// <summary>
  322. /// 根据团组Id获取签证客户信息List
  323. /// </summary>
  324. /// <param name="dto">请求dto</param>
  325. /// <returns></returns>
  326. [HttpPost]
  327. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  328. public async Task<IActionResult> GetCrmByGroupId(ClientByGroupIdDto dto)
  329. {
  330. var groupData = await _groupRepository.GetCrmByGroupId(dto);
  331. if (groupData.Code != 0)
  332. {
  333. return Ok(JsonView(false, groupData.Msg));
  334. }
  335. return Ok(JsonView(groupData.Data));
  336. }
  337. #endregion
  338. #region 团组任务分配
  339. /// <summary>
  340. /// 团组任务分配初始化
  341. /// </summary>
  342. /// <param name="dto"></param>
  343. /// <returns></returns>
  344. [HttpPost]
  345. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  346. public async Task<IActionResult> GetTaskAssignmen()
  347. {
  348. var groupData = await _taskAssignmentRep.GetTaskAssignmen();
  349. if (groupData.Code != 0)
  350. {
  351. return Ok(JsonView(false, groupData.Msg));
  352. }
  353. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  354. }
  355. /// <summary>
  356. /// 团组任务分配查询
  357. /// </summary>
  358. /// <param name="dto"></param>
  359. /// <returns></returns>
  360. [HttpPost]
  361. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  362. public async Task<IActionResult> TaskAssignmenQuery(TaskAssignmenQueryDto dto)
  363. {
  364. var groupData = await _taskAssignmentRep.TaskAssignmenQuery(dto);
  365. if (groupData.Code != 0)
  366. {
  367. return Ok(JsonView(false, groupData.Msg));
  368. }
  369. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  370. }
  371. /// <summary>
  372. /// 团组任务分配操作
  373. /// </summary>
  374. /// <param name="dto"></param>
  375. /// <returns></returns>
  376. [HttpPost]
  377. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  378. public async Task<IActionResult> GetTaskAssignmenOp(TaskAssignmenDto dto)
  379. {
  380. Result groupData = await _taskAssignmentRep.GetTaskAssignmenOp(dto);
  381. if (groupData.Code != 0)
  382. {
  383. return Ok(JsonView(false, groupData.Msg));
  384. }
  385. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  386. }
  387. #endregion
  388. #region 团组费用审核
  389. /// <summary>
  390. /// 获取团组费用审核
  391. /// </summary>
  392. /// <param name="paras">参数Json字符串</param>
  393. /// <returns></returns>
  394. [HttpPost]
  395. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  396. public async Task<IActionResult> PostSearchGrpCreditCardPayment(Search_GrpCreditCardPaymentDto _dto)
  397. {
  398. if (_dto.DiId < 1)
  399. {
  400. return Ok(JsonView(false, "团组Id为空"));
  401. }
  402. Grp_CreditCardPaymentView _view = new Grp_CreditCardPaymentView();
  403. #region 团组基本信息
  404. Grp_DelegationInfo _delegation = _groupRepository.Query<Grp_DelegationInfo>(s => s.Id == _dto.DiId).First();
  405. if (_delegation != null)
  406. {
  407. _view.ClientName = _delegation.ClientName;
  408. _view.DiId = _dto.DiId;
  409. _view.TeamName = _delegation.TeamName;
  410. _view.VisitCountry = _delegation.VisitCountry;
  411. _view.VisitDate = _delegation.VisitStartDate.ToString("yyyy-MM-dd") + " ~ " + _delegation.VisitEndDate.ToString("yyyy-MM-dd");
  412. _view.VisitDays = _delegation.VisitDays;
  413. _view.VisitPNumber = _delegation.VisitPNumber;
  414. }
  415. else
  416. {
  417. return Ok(JsonView(false, "团组信息为空"));
  418. }
  419. #endregion
  420. #region 费用清单
  421. var exp = Expressionable.Create<Grp_CreditCardPayment>();
  422. exp.AndIF(_dto.AuditStatus != -1, it => it.IsAuditGM == _dto.AuditStatus);
  423. exp.AndIF(_dto.Label != -1, it => it.CTable == _dto.Label);
  424. //缺少IF的语法糖 CTable
  425. List<Grp_CreditCardPayment> entityList = _groupRepository
  426. .Query<Grp_CreditCardPayment>(s => s.DIId == _dto.DiId && s.IsDel == 0 && s.CreateUserId > 0)
  427. .Where(exp.ToExpression())
  428. .ToList();
  429. List<Grp_CreditCardPaymentDetailView> detailList = new List<Grp_CreditCardPaymentDetailView>();
  430. decimal CNY = 0;
  431. decimal PayCNY = 0;
  432. decimal BalanceCNY = 0;
  433. decimal YSFYCNY = 0;
  434. decimal USD = 0;
  435. decimal PayUSD = 0;
  436. decimal BalanceUSD = 0;
  437. decimal YSFYUSD = 0;
  438. decimal EUR = 0;
  439. decimal PayEUR = 0;
  440. decimal BalanceEUR = 0;
  441. decimal YSFYEUR = 0;
  442. foreach (var entity in entityList)
  443. {
  444. Grp_CreditCardPaymentDetailView _detail = new Grp_CreditCardPaymentDetailView();
  445. _detail.Id = entity.Id;
  446. /*
  447. * Bus名称
  448. */
  449. _detail.BusName = "";
  450. /*
  451. *费用所属
  452. */
  453. switch (entity.CTable)
  454. {
  455. case 85:
  456. Grp_AirTicketReservations jpRes = _groupRepository.Query<Grp_AirTicketReservations>(s => s.Id == entity.CId).First();
  457. if (jpRes != null)
  458. {
  459. string FlightsDescription = jpRes.FlightsDescription;
  460. string PriceDescription = jpRes.PriceDescription;
  461. _detail.PriceMsgContent = "航班号:" + jpRes.FlightsCode + "<br/>城市A-B:" + jpRes.FlightsCity + "<br/>航班描述:" + FlightsDescription.Replace("\r\n", "<br />") + "<br/>" + "价格描述:" + PriceDescription;
  462. _detail.PriceNameContent = "(" + jpRes.FlightsCode + ")";
  463. }
  464. break;
  465. case 79:
  466. _detail.BusName = "待增加";
  467. break;
  468. default:
  469. break;
  470. }
  471. /*
  472. * 费用模块
  473. */
  474. Sys_SetData sdPriceName = _groupRepository.Query<Sys_SetData>(s => s.Id == entity.CTable).First();
  475. if (sdPriceName != null)
  476. {
  477. _detail.PriceName = sdPriceName.Name;
  478. }
  479. /*
  480. * 应付款金额
  481. */
  482. Sys_SetData sdPaymentCurrency_WaitPay = _groupRepository.Query<Sys_SetData>(s => s.Id == entity.PaymentCurrency).First();
  483. string PaymentCurrency_WaitPay = "Unknown";
  484. if (sdPaymentCurrency_WaitPay != null)
  485. {
  486. PaymentCurrency_WaitPay = sdPaymentCurrency_WaitPay.Name;
  487. }
  488. _detail.WaitPay = entity.PayMoney.ToString("#0.00") + " " + PaymentCurrency_WaitPay;
  489. /*
  490. * 此次付款金额
  491. */
  492. decimal CurrPayStr = 0;
  493. if (entity.PayPercentage == 0)
  494. {
  495. if (entity.PayThenMoney != 0)
  496. CurrPayStr = entity.PayThenMoney * decimal.Parse(entity.DayRate);
  497. }
  498. else
  499. {
  500. CurrPayStr = entity.PayMoney * (decimal.Parse(entity.PayPercentage.ToString("#0.00")) / 100 * decimal.Parse(entity.DayRate));
  501. }
  502. _detail.CurrPay = CurrPayStr.ToString("#0.00") + " CNY";
  503. /*
  504. * 剩余尾款
  505. */
  506. decimal BalanceStr = 0;
  507. if (entity.PayMoney - (CurrPayStr / decimal.Parse(entity.DayRate)) < 0.01M)
  508. BalanceStr = 0;
  509. else
  510. BalanceStr = (entity.PayMoney - CurrPayStr / decimal.Parse(entity.DayRate));
  511. _detail.Balance = BalanceStr.ToString("#0.00") + " " + PaymentCurrency_WaitPay;
  512. /*
  513. * 申请人
  514. */
  515. string operatorName = "无";
  516. Sys_Users _opUser = _groupRepository.Query<Sys_Users>(s => s.Id == entity.CreateUserId).First();
  517. if (_opUser != null)
  518. {
  519. operatorName = _opUser.CnName;
  520. }
  521. _detail.OperatorName = operatorName;
  522. /*
  523. * 审核人
  524. */
  525. string auditOperatorName = "Unknown";
  526. if (entity.AuditGMOperate == 0)
  527. auditOperatorName = "无";
  528. else if (entity.AuditGMOperate == 4)
  529. auditOperatorName = "自动审核";
  530. else
  531. {
  532. Sys_Users _adUser = _groupRepository.Query<Sys_Users>(s => s.Id == entity.AuditGMOperate).First();
  533. if (_adUser != null)
  534. {
  535. auditOperatorName = _adUser.CnName;
  536. }
  537. }
  538. _detail.AuditOperatorName = auditOperatorName;
  539. /*
  540. *
  541. * *超预算比例
  542. */
  543. string overBudgetStr = "";
  544. if (entity.ExceedBudget == -1)
  545. overBudgetStr = sdPriceName.Name + "尚无预算";
  546. else if (entity.ExceedBudget == 0)
  547. overBudgetStr = "未超预算";
  548. else
  549. overBudgetStr = entity.ExceedBudget.ToString("P");
  550. _detail.OverBudget = overBudgetStr;
  551. /*
  552. * 费用总计
  553. */
  554. if (entity.PaymentCurrency == 48)
  555. {
  556. CNY += entity.PayMoney;
  557. PayCNY += CurrPayStr;
  558. BalanceCNY += BalanceStr;
  559. YSFYCNY += CurrPayStr;
  560. }
  561. if (entity.PaymentCurrency == 49)
  562. {
  563. USD += entity.PayMoney;
  564. PayUSD += CurrPayStr;
  565. BalanceUSD += BalanceStr;
  566. YSFYUSD += CurrPayStr;
  567. }
  568. if (entity.PaymentCurrency == 51)
  569. {
  570. EUR += entity.PayMoney;
  571. PayEUR += CurrPayStr;
  572. BalanceEUR += BalanceStr;
  573. YSFYEUR += CurrPayStr;
  574. }
  575. _detail.IsAuditGM = entity.IsAuditGM;
  576. detailList.Add(_detail);
  577. }
  578. #endregion
  579. _view.DetailList = new List<Grp_CreditCardPaymentDetailView>(detailList);
  580. _view.TotalStr1 = string.Format(@"应付款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", CNY, USD, EUR);
  581. _view.TotalStr2 = string.Format(@"此次付款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", PayCNY, PayUSD, PayEUR);
  582. _view.TotalStr3 = string.Format(@"目前剩余尾款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", BalanceCNY, BalanceUSD, BalanceEUR);
  583. _view.TotalStr4 = string.Format(@"已审费用总额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", YSFYCNY, YSFYUSD, YSFYEUR);
  584. return Ok(JsonView(_view));
  585. }
  586. /// <summary>
  587. /// 修改团组费用审核状态
  588. /// </summary>
  589. /// <param name="paras">参数Json字符串</param>
  590. /// <returns></returns>
  591. [HttpPost]
  592. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  593. public async Task<IActionResult> PostAuditGrpCreditCardPayment(Edit_GrpCreditCardPaymentDto _dto)
  594. {
  595. List<string> idList = _dto.CreditIdStr.Split(',').ToList();
  596. Grp_CreditCardPayment _detail = _mapper.Map<Grp_CreditCardPayment>(_dto);
  597. DateTime dtNow = DateTime.Now;
  598. _groupRepository.BeginTran();
  599. int rst = 0;
  600. foreach (var item in idList)
  601. {
  602. int CreditId = int.Parse(item);
  603. var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_CreditCardPayment>()
  604. .SetColumns(it => it.IsAuditGM == _dto.AuditCode)
  605. .SetColumns(it => it.AuditGMOperate == _dto.User)
  606. .SetColumns(it => it.AuditGMDate == dtNow)
  607. .Where(s => s.Id == CreditId)
  608. .ExecuteCommandAsync();
  609. if (result < 1)
  610. {
  611. _groupRepository.RollbackTran();
  612. return Ok(JsonView(false, "保存失败并回滚!"));
  613. }
  614. }
  615. _groupRepository.CommitTran();
  616. if (rst == 0)
  617. {
  618. return Ok(JsonView(true, "保存成功!"));
  619. }
  620. return Ok(JsonView(false, "保存失败!"));
  621. }
  622. #endregion
  623. #region 机票费用录入
  624. /// <summary>
  625. /// 机票录入当前登录人可操作团组
  626. /// </summary>
  627. /// <param name="dto"></param>
  628. /// <returns></returns>
  629. [HttpPost]
  630. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  631. public async Task<IActionResult> AirTicketResSelect(AirTicketResDto dto)
  632. {
  633. try
  634. {
  635. Result groupData = await _airTicketResRep.AirTicketResSelect(dto);
  636. if (groupData.Code != 0)
  637. {
  638. return Ok(JsonView(false, groupData.Msg));
  639. }
  640. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  641. }
  642. catch (Exception ex)
  643. {
  644. return Ok(JsonView(false, "程序错误!"));
  645. throw;
  646. }
  647. }
  648. /// <summary>
  649. /// 机票费用录入列表
  650. /// </summary>
  651. /// <param name="dto"></param>
  652. /// <returns></returns>
  653. [HttpPost]
  654. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  655. public async Task<IActionResult> AirTicketResList(AirTicketResListDto dto)
  656. {
  657. try
  658. {
  659. Result groupData = await _airTicketResRep.AirTicketResList(dto);
  660. if (groupData.Code != 0)
  661. {
  662. return Ok(JsonView(false, groupData.Msg));
  663. }
  664. return Ok(JsonView(true, groupData.Msg, groupData.Data));
  665. }
  666. catch (Exception ex)
  667. {
  668. return Ok(JsonView(false, "程序错误!"));
  669. throw;
  670. }
  671. }
  672. #endregion
  673. }
  674. }