FinancialController.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using OASystem.API.OAMethodLib;
  4. using OASystem.API.OAMethodLib.File;
  5. using OASystem.Domain;
  6. using OASystem.Domain.Dtos.Financial;
  7. using OASystem.Domain.Entities.Groups;
  8. using OASystem.Domain.ViewModels.Financial;
  9. using OASystem.Domain.ViewModels.Groups;
  10. using OASystem.Infrastructure.Repositories.Financial;
  11. using OASystem.Infrastructure.Repositories.Groups;
  12. using System.Data;
  13. namespace OASystem.API.Controllers
  14. {
  15. /// <summary>
  16. /// 财务模块
  17. /// </summary>
  18. [Route("api/[controller]/[action]")]
  19. [ApiController]
  20. public class FinancialController : ControllerBase
  21. {
  22. private readonly IMapper _mapper;
  23. private readonly IConfiguration _config;
  24. private readonly SqlSugarClient _sqlSugar;
  25. private readonly SetDataTypeRepository _setDataTypeRep;
  26. private readonly DailyFeePaymentRepository _daiRep; //日付申请仓库
  27. private readonly TeamRateRepository _teamRateRep; //团组汇率仓库
  28. private readonly ForeignReceivablesRepository _ForForeignReceivablesRep; //对外收款账单仓库
  29. /// <summary>
  30. /// 初始化
  31. /// </summary>
  32. public FinancialController(IMapper mapper, IConfiguration configuration, DailyFeePaymentRepository daiRep, SqlSugarClient sqlSugar, SetDataTypeRepository setDataTypeRep, TeamRateRepository teamRateRep, ForeignReceivablesRepository ForForeignReceivablesRep)
  33. {
  34. _mapper = mapper;
  35. _config = configuration;
  36. _daiRep = daiRep;
  37. _sqlSugar = sqlSugar;
  38. _setDataTypeRep = setDataTypeRep;
  39. _teamRateRep = teamRateRep;
  40. _ForForeignReceivablesRep = ForForeignReceivablesRep;
  41. }
  42. #region 日付申请
  43. /// <summary>
  44. /// 获取日付申请 基础数据源
  45. /// </summary>
  46. /// <param name="dto"> 日付申请 分页 dto</param>
  47. /// <returns></returns>
  48. [HttpPost]
  49. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  50. public async Task<IActionResult> PostPageSearchDailyPaymentPriceTypeData(PortDtoBase dto)
  51. {
  52. var result = await _daiRep.GetPagePriceTypeData(dto);
  53. if (result == null || result.Code != 0)
  54. {
  55. return Ok(JsonView(false, result.Msg));
  56. }
  57. var data = result.Data;
  58. return Ok(JsonView(data));
  59. }
  60. /// <summary>
  61. /// 日付申请 Page Search
  62. /// </summary>
  63. /// <param name="dto"> 日付申请 分页 dto</param>
  64. /// <returns></returns>
  65. [HttpPost]
  66. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  67. public async Task<IActionResult> PostPageSearchDailyPaymentList(PageDailyFeePaymentDto dto)
  68. {
  69. var result = await _daiRep.GetPageSearchAll(dto);
  70. if (result == null || result.Code != 0)
  71. {
  72. return Ok(JsonView(false, result.Msg));
  73. }
  74. var data = result.Data;
  75. if (data == null)
  76. {
  77. return Ok(JsonView(false, result.Msg));
  78. }
  79. return Ok(JsonView(data));
  80. }
  81. /// <summary>
  82. /// 日付申请 Single Search By Id
  83. /// </summary>
  84. /// <param name="dto"></param>
  85. /// <returns></returns>
  86. [HttpPost]
  87. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  88. public async Task<IActionResult> PostSearchDailyPaymentInfo(SearchDailyFeePaymentDto dto)
  89. {
  90. var result = await _daiRep.GetSearchById(dto);
  91. if (result == null || result.Code != 0)
  92. {
  93. return Ok(JsonView(false, result.Msg));
  94. }
  95. return Ok(JsonView(result.Data));
  96. }
  97. /// <summary>
  98. /// 日付申请 添加
  99. /// </summary>
  100. /// <param name="dto"> 日付申请 添加 dto</param>
  101. /// <returns></returns>
  102. [HttpPost]
  103. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  104. public async Task<IActionResult> PostAddDailyPayment(AddDailyFeePaymentDto dto)
  105. {
  106. var result = await _daiRep.Add(dto);
  107. if (result == null || result.Code != 0)
  108. {
  109. return Ok(JsonView(false, result.Msg));
  110. }
  111. return Ok(JsonView(true));
  112. }
  113. /// <summary>
  114. /// 日付申请 Update
  115. /// </summary>
  116. /// <param name="dto"> 日付申请 修改 dto</param>
  117. /// <returns></returns>
  118. [HttpPost]
  119. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  120. public async Task<IActionResult> PostEditDailyPayment(EditDailyFeePaymentDto dto)
  121. {
  122. var result = await _daiRep.Edit(dto);
  123. if (result == null || result.Code != 0)
  124. {
  125. return Ok(JsonView(false, result.Msg));
  126. }
  127. return Ok(JsonView(true));
  128. }
  129. /// <summary>
  130. /// 日付申请 Del
  131. /// </summary>
  132. /// <param name="dto"> 日付申请 删除 dto</param>
  133. /// <returns></returns>
  134. [HttpPost]
  135. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  136. public async Task<IActionResult> PostDelDailyPayment(DelDailyFeePaymentDto dto)
  137. {
  138. var result = await _daiRep.Del(dto);
  139. if (result == null || result.Code != 0)
  140. {
  141. return Ok(JsonView(false, result.Msg));
  142. }
  143. return Ok(JsonView(true));
  144. }
  145. /// <summary>
  146. /// 日付申请 财务审核
  147. /// </summary>
  148. /// <param name="dto"> dto </param>
  149. /// <returns></returns>
  150. [HttpPost]
  151. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  152. public async Task<IActionResult> PostDelDailyPaymentAudit(DP_AuditStatusDto dto)
  153. {
  154. var result = await _daiRep.DelDailyPaymentAudit(dto);
  155. if (result == null || result.Code != 0)
  156. {
  157. return Ok(JsonView(false, result.Msg));
  158. }
  159. return Ok(JsonView(true));
  160. }
  161. /// <summary>
  162. /// 日付申请 Single Excel Download
  163. /// </summary>
  164. /// <param name="dto"> dto </param>
  165. /// <returns></returns>
  166. [HttpPost]
  167. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  168. public async Task<IActionResult> PostExcelDailyPaymentDownload(SearchDailyFeePaymentDto dto)
  169. {
  170. if (dto.PortType == 1 || dto.PortType == 2)
  171. {
  172. Fin_DailyFeePaymentInfolView feeData = new Fin_DailyFeePaymentInfolView();
  173. string feeSql = string.Format(@"Select * From Fin_DailyFeePayment
  174. Where IsDel=0 And Id = {0} ", dto.Id);
  175. feeData = await _sqlSugar.SqlQueryable<Fin_DailyFeePaymentInfolView>(feeSql).FirstAsync();
  176. if (feeData == null)
  177. {
  178. return Ok(JsonView(false, "暂无数据!"));
  179. }
  180. string feeContentSql = string.Format(@"Select * From Fin_DailyFeePaymentContent
  181. Where IsDel=0 And DFPId = {0} ", dto.Id);
  182. feeData.FeeContents = await _sqlSugar.SqlQueryable<Fin_DailyFeePaymentContentInfolView>(feeContentSql).ToListAsync();
  183. if (feeData != null)
  184. {
  185. string userName = string.Empty;
  186. string userSql = string.Format("Select * From Sys_Users Where Id={0} And Isdel = {1}", feeData.CreateUserId, 0);
  187. Sys_Users user = await _sqlSugar.SqlQueryable<Sys_Users>(userSql).FirstAsync();
  188. if (user != null) { userName = user.CnName; }
  189. var setData = _setDataTypeRep.QueryDto<Sys_SetData, Fin_DailyFeePaymentPagePriceSubTypeView>().ToList();
  190. //48人员费用 49办公费用 50 销售费用 51 其他费用 55 大运会
  191. var priceSubTypeData = setData.Where(s => s.STid == 55).ToList();
  192. Dictionary<string, object> pairs = new Dictionary<string, object>();
  193. List<DataTable> datas = new List<DataTable>();
  194. //if (priceSubTypeData.Where(s => s.Id == feeData.PriceTypeId).ToList().Count() > 0)//大运会专属模板
  195. //{
  196. // //AsposeHelper.ExpertExcelToModel("日常费用付款申请模板-大运会数据.xls", "DailyPayment", "大运会所有日常费用付款申请.xls",
  197. // // pairs, datas);
  198. //}
  199. //else //日付常规模板
  200. //{
  201. pairs.Clear();
  202. pairs.Add("Opertor", userName);
  203. pairs.Add("DateTime", feeData.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"));
  204. pairs.Add("FAuditStatus", feeData.FAuditDesc);
  205. pairs.Add("MAuditStatus", feeData.MAuditDesc);
  206. pairs.Add("SumPrice", feeData.SumPrice);
  207. DataTable data = AsposeHelper.ListToDataTable("DailyFeePayment", feeData.FeeContents);
  208. datas.Clear();
  209. datas.Add(data);
  210. string fileName = string.Format("{0}-日常费用付款申请.xlsx", feeData.Instructions);
  211. string msg = AsposeHelper.ExpertExcelToModel("日常费用付款申请模板.xlsx", "DailyPayment", fileName, pairs, datas);
  212. return Ok(JsonView(true, msg));
  213. //}
  214. }
  215. else
  216. {
  217. return Ok(JsonView(false, "暂无数据!"));
  218. }
  219. }
  220. return Ok(JsonView(true));
  221. }
  222. #endregion
  223. #region 团组提成
  224. /// <summary>
  225. /// 提成 Page Search
  226. /// </summary>
  227. /// <param name="dto"> 提成 分页 dto</param>
  228. /// <returns></returns>
  229. [HttpPost]
  230. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  231. public async Task<IActionResult> PostPageSearchCommissionList(GroupCommissionDto dto)
  232. {
  233. var data = await GroupCommission.GetCommissionPageList(dto);
  234. return Ok(JsonView(data.Data));
  235. }
  236. #endregion
  237. #region 团组汇率
  238. /// <summary>
  239. /// 团组汇率 Select数据源(团组列,汇率列)
  240. /// </summary>
  241. /// <param name="dto"></param>
  242. /// <returns></returns>
  243. [HttpPost]
  244. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  245. public async Task<IActionResult> GetGroupRateDataSources(TeamRateDto dto)
  246. {
  247. try
  248. {
  249. Result teamRateData = await _teamRateRep.GetGroupRateDataSource(dto);
  250. if (teamRateData.Code != 0)
  251. {
  252. return Ok(JsonView(false, teamRateData.Msg));
  253. }
  254. return Ok(JsonView(true, teamRateData.Msg, teamRateData.Data));
  255. }
  256. catch (Exception ex)
  257. {
  258. return Ok(JsonView(false, ex.Message));
  259. throw;
  260. }
  261. }
  262. ///// <summary>
  263. ///// 团组汇率 changge
  264. ///// </summary>
  265. ///// <returns></returns>
  266. //[HttpPost]
  267. //[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  268. //public async Task<IActionResult> ChangeGroupRateInfo()
  269. //{
  270. // try
  271. // {
  272. // Result teamRateData = await _teamRateRep.GetGroupRateChangeData();
  273. // if (teamRateData.Code != 0)
  274. // {
  275. // return Ok(JsonView(false, teamRateData.Msg));
  276. // }
  277. // return Ok(JsonView(true, teamRateData.Msg, teamRateData.Data));
  278. // }
  279. // catch (Exception ex)
  280. // {
  281. // return Ok(JsonView(false, ex.Message));
  282. // throw;
  283. // }
  284. //}
  285. /// <summary>
  286. /// 团组汇率 Select汇率详情
  287. /// </summary>
  288. /// <param name="dto"></param>
  289. /// <returns></returns>
  290. [HttpPost]
  291. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  292. public async Task<IActionResult> GetGroupRateInfo(TeamRateInfoDto dto)
  293. {
  294. try
  295. {
  296. Result teamRateData = await _teamRateRep.GetGroupRateInfoByDiid(dto);
  297. if (teamRateData.Code != 0)
  298. {
  299. return Ok(JsonView(false, teamRateData.Msg));
  300. }
  301. return Ok(JsonView(true, teamRateData.Msg, teamRateData.Data));
  302. }
  303. catch (Exception ex)
  304. {
  305. return Ok(JsonView(false, ex.Message));
  306. throw;
  307. }
  308. }
  309. /// <summary>
  310. /// 团组汇率 添加 or 更新
  311. /// </summary>
  312. /// <param name="dto"></param>
  313. /// <returns></returns>
  314. [HttpPost]
  315. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  316. public async Task<IActionResult> PostGroupRateUpdate(TeamRateUpdateDto dto)
  317. {
  318. try
  319. {
  320. Result teamRateData = await _teamRateRep.PostGroupRateUpdate(dto);
  321. if (teamRateData.Code != 0)
  322. {
  323. return Ok(JsonView(false, teamRateData.Msg));
  324. }
  325. return Ok(JsonView(true, teamRateData.Msg, teamRateData.Data));
  326. }
  327. catch (Exception ex)
  328. {
  329. return Ok(JsonView(false, ex.Message));
  330. throw;
  331. }
  332. }
  333. #endregion
  334. #region 对外收款账单
  335. /// <summary>
  336. /// 对外收款账单 Select数据源(团组名,币种,汇款方式)
  337. /// </summary>
  338. /// <param name="dto"></param>
  339. /// <returns></returns>
  340. [HttpPost]
  341. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  342. public async Task<IActionResult> GetForeignReceivablesDataSources()
  343. {
  344. try
  345. {
  346. Result ffrData = await _ForForeignReceivablesRep.GetDataSource();
  347. if (ffrData.Code != 0)
  348. {
  349. return Ok(JsonView(false, ffrData.Msg));
  350. }
  351. return Ok(JsonView(true, ffrData.Msg, ffrData.Data));
  352. }
  353. catch (Exception ex)
  354. {
  355. return Ok(JsonView(false, ex.Message));
  356. throw;
  357. }
  358. }
  359. /// <summary>
  360. /// 对外收款账单
  361. /// 账单详情
  362. /// </summary>
  363. /// <param name="dto"></param>
  364. /// <returns></returns>
  365. [HttpPost]
  366. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  367. public async Task<IActionResult> GetGroupReceivablesInfoByDiId(ForForeignReceivablesInfoDto dto)
  368. {
  369. try
  370. {
  371. Result ffrData = await _ForForeignReceivablesRep.GetGroupReceivablesInfoByDiId(dto);
  372. if (ffrData.Code != 0)
  373. {
  374. return Ok(JsonView(false, ffrData.Msg));
  375. }
  376. return Ok(JsonView(true, ffrData.Msg, ffrData.Data));
  377. }
  378. catch (Exception ex)
  379. {
  380. return Ok(JsonView(false, ex.Message));
  381. throw;
  382. }
  383. }
  384. /// <summary>
  385. /// 对外收款账单
  386. /// 添加 Or 更新
  387. /// </summary>
  388. /// <param name="dto"></param>
  389. /// <returns></returns>
  390. [HttpPost]
  391. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  392. public async Task<IActionResult> PostGroupReceivablesUpdate(ForForeignReceivablesInfoDto dto)
  393. {
  394. try
  395. {
  396. Result ffrData = await _ForForeignReceivablesRep.GetGroupReceivablesInfoByDiId(dto);
  397. if (ffrData.Code != 0)
  398. {
  399. return Ok(JsonView(false, ffrData.Msg));
  400. }
  401. return Ok(JsonView(true, ffrData.Msg, ffrData.Data));
  402. }
  403. catch (Exception ex)
  404. {
  405. return Ok(JsonView(false, ex.Message));
  406. throw;
  407. }
  408. }
  409. #endregion
  410. }
  411. }