PaymentRefundAndOtherMoneyRepository.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. using AutoMapper;
  2. using Newtonsoft.Json;
  3. using OASystem.Domain;
  4. using OASystem.Domain.Dtos;
  5. using OASystem.Domain.Dtos.Financial;
  6. using OASystem.Domain.Dtos.UserDto;
  7. using OASystem.Domain.Entities.Financial;
  8. using OASystem.Domain.Entities.Groups;
  9. using OASystem.Domain.ViewModels.Financial;
  10. using OASystem.Infrastructure.Repositories.Groups;
  11. using OASystem.Infrastructure.Repositories.System;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Linq;
  15. using System.Security.Cryptography;
  16. using System.Text;
  17. using System.Threading.Tasks;
  18. namespace OASystem.Infrastructure.Repositories.Financial
  19. {
  20. /// <summary>
  21. /// 财务 - 收款退还与其他款项
  22. /// </summary>
  23. public class PaymentRefundAndOtherMoneyRepository:BaseRepository<Fin_PaymentRefundAndOtherMoney, Fin_PaymentRefundAndOtherMoneyView>
  24. {
  25. private readonly IMapper _mapper;
  26. private readonly Result _result;
  27. private readonly SetDataRepository _setDataRep;
  28. private readonly TeamRateRepository _teamRateRep;
  29. /// <summary>
  30. /// 初始化
  31. /// </summary>
  32. /// <param name="sqlSugar"></param>
  33. /// <param name="mapper"></param>
  34. public PaymentRefundAndOtherMoneyRepository(SqlSugarClient sqlSugar, IMapper mapper, SetDataRepository setDataRep, TeamRateRepository teamRateRep)
  35. : base(sqlSugar)
  36. {
  37. _mapper = mapper;
  38. _result = new Result() { Code = -2 };
  39. _setDataRep = setDataRep;
  40. _teamRateRep = teamRateRep;
  41. }
  42. /// <summary>
  43. /// 根据团组ID 查询
  44. /// </summary>
  45. /// <param name="diId"></param>
  46. /// <returns></returns>
  47. public async Task<Result> PostItemByDiId(int diId)
  48. {
  49. string sql = string.Format(@"Select prom.Id,prom.PriceName,prom.Price,sd.Name As CurrencyCode,
  50. prom.Remark,ccp.IsAuditGM,u.CnName As CreateUserName,prom.CreateTime
  51. From Fin_PaymentRefundAndOtherMoney prom
  52. Left Join Sys_Users u On u.Id = prom.CreateUserId
  53. Left Join Sys_SetData sd On prom.CurrencyId = sd.Id
  54. Left Join Grp_CreditCardPayment ccp
  55. On ccp.CTable = 285 And ccp.CId = prom.Id And ccp.DIId = prom.DiId
  56. Where prom.IsDel = 0 And u.IsDel = 0 And sd.IsDel = 0 And ccp.IsDel = 0
  57. And prom.DiId = {0}", diId);
  58. var data = await _sqlSugar.SqlQueryable<Fin_PaymentRefundAndOtherMoneyItemView>(sql).ToListAsync();
  59. _result.Data = data;
  60. _result.Code = 0;
  61. _result.Msg = "查询成功!";
  62. return _result;
  63. }
  64. /// <summary>
  65. /// 删除
  66. /// </summary>
  67. /// <param name="diId"></param>
  68. /// <returns></returns>
  69. public async Task<Result> _Del(PaymentRefundAndOtherMoneyDelDto dto)
  70. {
  71. Fin_PaymentRefundAndOtherMoney _PaymentRefundAndOtherMoney = new Fin_PaymentRefundAndOtherMoney() {
  72. Id = dto.Id,
  73. DeleteUserId = dto.UserId,
  74. DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  75. IsDel = 1
  76. };
  77. _sqlSugar.BeginTran();
  78. var prom_del = await _sqlSugar.Updateable( _PaymentRefundAndOtherMoney )
  79. .UpdateColumns(it => new { it.DeleteUserId,it.DeleteTime,it.IsDel })
  80. .WhereColumns(it => new { it.Id})
  81. .ExecuteCommandAsync();
  82. Fin_PaymentRefundAndOtherMoney _PaymentRefundAndOtherMoneyInfo = new Fin_PaymentRefundAndOtherMoney();
  83. _PaymentRefundAndOtherMoneyInfo = await _sqlSugar.Queryable<Fin_PaymentRefundAndOtherMoney>().Where(it => it.Id == dto.Id).FirstAsync();
  84. if (_PaymentRefundAndOtherMoneyInfo != null)
  85. {
  86. Grp_CreditCardPayment _CreditCardPayment = new Grp_CreditCardPayment() {
  87. Id = _PaymentRefundAndOtherMoneyInfo.Id,
  88. DeleteUserId = dto.UserId,
  89. DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  90. IsDel = 1
  91. };
  92. var ccp_del = await _sqlSugar.Updateable(_CreditCardPayment)
  93. .UpdateColumns(it => new { it.DeleteUserId, it.DeleteTime, it.IsDel })
  94. .WhereColumns(it => new { it.Id })
  95. .ExecuteCommandAsync();
  96. }
  97. if (prom_del > 0 )
  98. {
  99. _result.Code = 0;
  100. _result.Msg = "操作成功!";
  101. }
  102. else
  103. {
  104. _result.Msg = "操作失败!";
  105. }
  106. _sqlSugar.CommitTran();
  107. return _result;
  108. }
  109. /// <summary>
  110. /// 详情 数据源
  111. /// </summary>
  112. /// <param name="diId"></param>
  113. /// <returns></returns>
  114. public async Task<Result> _InfoDataSource(PortDtoBase dto)
  115. {
  116. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //1 Web 2 Android 3 Ios
  117. {
  118. dynamic _currencyData = null, _payTypeData = null;
  119. Result currencyData = await _setDataRep.GetSetDataBySTId(_setDataRep, 66); //币种类型
  120. if (currencyData != null)
  121. {
  122. if (currencyData.Code == 0)
  123. {
  124. _currencyData = currencyData.Data;
  125. }
  126. }
  127. Result payTypeData = await _setDataRep.GetSetDataBySTId(_setDataRep, 14); //支付类型
  128. if (payTypeData != null)
  129. {
  130. if (payTypeData.Code == 0)
  131. {
  132. _payTypeData = payTypeData.Data;
  133. }
  134. }
  135. List<dynamic> _priceTypeDatas = new List<dynamic>();
  136. _priceTypeDatas.Add(new { Id = 0, Name = "其他", Remark = "" });
  137. _priceTypeDatas.Add(new { Id = 1, Name = "退多付款", Remark = "" });
  138. List<dynamic> _orbitalPrivateTransferDatas = new List<dynamic>();
  139. _orbitalPrivateTransferDatas.Add(new { Id = 0, Name = "公转", Remark = "" });
  140. _orbitalPrivateTransferDatas.Add(new { Id = 1, Name = "私转", Remark = "" });
  141. dynamic _InfoDataSource = new
  142. {
  143. CurrencyDatas = _currencyData,
  144. PayTypeDatas = _payTypeData,
  145. OrbitalPrivateTransferDatas = _orbitalPrivateTransferDatas,
  146. PriceTypeDatas = _priceTypeDatas
  147. };
  148. _result.Data = _InfoDataSource;
  149. _result.Code = 0;
  150. _result.Msg = "查询成功!";
  151. }
  152. else
  153. {
  154. _result.Msg = "请输入正确的端口号! 1 Web 2 Android 3 Ios;";
  155. }
  156. return _result;
  157. }
  158. /// <summary>
  159. /// 详情
  160. /// </summary>
  161. /// <param name="diId"></param>
  162. /// <returns></returns>
  163. public async Task<Result> _Info(PaymentRefundAndOtherMoneyInfoDto dto)
  164. {
  165. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //1 Web 2 Android 3 Ios
  166. {
  167. string sql = string.Format(@"Select prom.Id,ccp.Id CcpId,prom.DiId,prom.PriceName,prom.Price,prom.CurrencyId,ccp.Payee,ccp.PayDId,
  168. ccp.OrbitalPrivateTransfer,ccp.ConsumptionPatterns,prom.PayType,prom.Remark
  169. From Fin_PaymentRefundAndOtherMoney prom
  170. Left Join Grp_CreditCardPayment ccp On ccp.CId = prom.id And ccp.CTable = 285 And ccp.IsDel = 0
  171. Where prom.IsDel = 0 And ccp.DIId = prom.DiId And prom.Id = {0}", dto.Id);
  172. var data = await _sqlSugar.SqlQueryable<Fin_PaymentRefundAndOtherMoneyInfoView>(sql).FirstAsync();
  173. if (data != null)
  174. {
  175. _result.Data = data;
  176. _result.Code = 0;
  177. _result.Msg = "查询成功!";
  178. }
  179. else
  180. {
  181. _result.Msg = "查询失败!";
  182. }
  183. }
  184. else
  185. {
  186. _result.Msg = "请输入正确的端口号! 1 Web 2 Android 3 Ios;";
  187. }
  188. return _result;
  189. }
  190. /// <summary>
  191. /// 操作(Add Or Edit)
  192. /// </summary>
  193. /// <param name="diId"></param>
  194. /// <returns></returns>
  195. public async Task<Result> _AddOrEdit(PaymentRefundAndOtherMoneyAddOrEditDto dto)
  196. {
  197. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //1 Web 2 Android 3 Ios
  198. {
  199. #region 参数处理
  200. Fin_PaymentRefundAndOtherMoney _PaymentRefundAndOtherMoney = new Fin_PaymentRefundAndOtherMoney() {
  201. //Id = dto.Id,
  202. DiId = dto.DiId,
  203. PriceName = dto.PriceName.Trim(),
  204. Price = dto.Price,
  205. CurrencyId = dto.CurrencyId,
  206. PayType = dto.PayType,
  207. //PriceType = dto.PriceType,
  208. CreateUserId = dto.UserId,
  209. Remark = dto.Remark
  210. };
  211. //处理团组汇率
  212. decimal dayRate = 0.00M;
  213. decimal CNY_Price = 0.00M;
  214. decimal payThenMoney = 0.00M;
  215. #region 其他款项 团组汇率 验证
  216. if (dto.CurrencyId == 836) //人民币币种Id
  217. {
  218. dayRate = 1.0000M;
  219. CNY_Price = dto.Price;
  220. payThenMoney = dto.Price;
  221. }
  222. else //其他币种Id
  223. {
  224. List<TeamRateModelView> teamReteDatas = await _teamRateRep.PostGroupRateInfoByDiId(dto.DiId);
  225. if (teamReteDatas.Count <= 0)
  226. {
  227. _result.Msg = "该团未设置团组汇率,请先设置!";
  228. return _result;
  229. }
  230. var teamReteData1 = teamReteDatas.Where(it => it.CTableId == 285).FirstOrDefault();
  231. if (teamReteData1 == null)
  232. {
  233. _result.Msg = "该团下的“其他款项”未设置团组汇率,请先设置!";
  234. return _result;
  235. }
  236. var teamReteData2 = teamReteData1.TeamRates.Where(it => it.CurrencyCode == dto.CurrencyCode).FirstOrDefault();
  237. if (teamReteData2 == null)
  238. {
  239. _result.Msg = @"该团下的“其他款项”币种 “"+ dto.CurrencyCode + "”未设置团组汇率,请先设置!";
  240. return _result;
  241. }
  242. dayRate = teamReteData2.Rate;
  243. CNY_Price = dayRate * dayRate;
  244. payThenMoney = dayRate * dayRate;
  245. }
  246. #endregion
  247. Grp_CreditCardPayment _CreditCardPayment = new Grp_CreditCardPayment() {
  248. //Id = dto.CcpId,
  249. //CId = dto.CcpId,
  250. DIId = dto.DiId,
  251. CTable = 285,
  252. PayDId = dto.PayDId,
  253. ConsumptionPatterns = dto.ConsumptionPatterns,
  254. ConsumptionDate = string.Empty,
  255. CTDId = 0,
  256. BankNo = string.Empty,
  257. CardholderName = string.Empty,
  258. PayMoney = dto.Price,
  259. PaymentCurrency = dto.CurrencyId,
  260. DayRate = dayRate,
  261. CompanyBankNo = string.Empty,
  262. OtherBankName = string.Empty,
  263. OtherSideNo = string.Empty,
  264. OtherSideName = string.Empty,
  265. MFOperator = 0,
  266. MFOperatorDate = string.Empty,
  267. IsAuditDM = 0,
  268. AuditDMOperate = 0,
  269. AuditDMDate = string.Empty,
  270. IsAuditMF = 0,
  271. AuditMFOperate = 0,
  272. AuditMFDate = string.Empty,
  273. IsAuditGM = 0,
  274. AuditGMOperate = 0,
  275. AuditGMDate = string.Empty,
  276. IsPay = 0,
  277. PayPercentage = 100.00M,
  278. PayThenMoney = payThenMoney,
  279. PayPercentageOld = 0.00M,
  280. PayThenMoneyOld = 0.00M,
  281. UpdateDate = string.Empty,
  282. Payee = dto.Payee,
  283. RMBPrice = CNY_Price,
  284. OrbitalPrivateTransfer = dto.OrbitalPrivateTransfer,
  285. ExceedBudget = 0.00M,
  286. CreateUserId = dto.UserId,
  287. DeleteUserId = null,
  288. DeleteTime = string.Empty,
  289. Remark = string.Empty,
  290. IsDel = 0
  291. };
  292. #endregion
  293. if (dto.Status == 1) //添加
  294. {
  295. #region 添加数据验证
  296. string sql = string.Format(@"Select prom.Id,ccp.Id CcpId,prom.DiId,prom.PriceName,prom.Price,prom.CurrencyId,ccp.Payee,ccp.PayDId,
  297. ccp.OrbitalPrivateTransfer,ccp.ConsumptionPatterns,prom.PayType,prom.Remark
  298. From Fin_PaymentRefundAndOtherMoney prom
  299. Left Join Grp_CreditCardPayment ccp On ccp.CId = prom.id And ccp.CTable = 285
  300. Where prom.IsDel = 0 And ccp.IsDel = 0 And ccp.DIId = prom.DiId And prom.PriceName = '{0}'",
  301. _PaymentRefundAndOtherMoney.PriceName);
  302. var data = await _sqlSugar.SqlQueryable<Fin_PaymentRefundAndOtherMoneyInfoView>(sql).FirstAsync();
  303. if (data != null)
  304. {
  305. _result.Msg = "费用名称已存在,请勿重新添加!";
  306. return _result;
  307. }
  308. #endregion
  309. _sqlSugar.BeginTran();
  310. var addReturnId = await _sqlSugar.Insertable(_PaymentRefundAndOtherMoney).ExecuteReturnIdentityAsync();
  311. if (addReturnId <= 0)
  312. {
  313. _result.Msg = "操作失败!收款退还与其他款项添加失败!";
  314. _sqlSugar.RollbackTran();
  315. return _result;
  316. }
  317. _CreditCardPayment.CId = addReturnId;
  318. var addStatus = await _sqlSugar.Insertable(_CreditCardPayment).ExecuteReturnIdentityAsync();
  319. if (addStatus <= 0)
  320. {
  321. _result.Msg = "操作失败!付款类型添加失败!";
  322. _sqlSugar.RollbackTran();
  323. return _result;
  324. }
  325. _sqlSugar.CommitTran();
  326. _result.Msg = "操作成功!";
  327. _result.Code = 0;
  328. }
  329. else if (dto.Status == 2) //修改
  330. {
  331. _PaymentRefundAndOtherMoney.Id = dto.Id;
  332. _CreditCardPayment.Id = dto.CcpId;
  333. _CreditCardPayment.CId = dto.Id;
  334. _sqlSugar.BeginTran();
  335. var prom_update = await _sqlSugar.Updateable(_PaymentRefundAndOtherMoney)
  336. .IgnoreColumns(it => new { it.CreateUserId, it.CreateTime, it.DeleteUserId, it.DeleteTime, it.IsDel })
  337. .WhereColumns(it => new { it.Id })
  338. .ExecuteCommandAsync();
  339. if (prom_update <= 0)
  340. {
  341. _result.Msg = "操作失败!收款退还与其他款项修改失败!";
  342. _sqlSugar.RollbackTran();
  343. return _result;
  344. }
  345. var ccp_update = await _sqlSugar.Updateable(_CreditCardPayment)
  346. .UpdateColumns(it => new
  347. {
  348. it.ConsumptionPatterns,
  349. it.PayMoney,
  350. it.PaymentCurrency,
  351. it.DayRate,
  352. it.PayThenMoney,
  353. it.Payee,
  354. it.OrbitalPrivateTransfer
  355. })
  356. .WhereColumns(it => new { it.Id })
  357. .ExecuteCommandAsync();
  358. if (ccp_update <= 0)
  359. {
  360. _result.Msg = "操作失败!付款信息修改失败!";
  361. _sqlSugar.RollbackTran();
  362. return _result;
  363. }
  364. _sqlSugar.CommitTran();
  365. _result.Msg = "操作成功!";
  366. _result.Code = 0;
  367. }
  368. else
  369. {
  370. _result.Msg = "请输入正确的操作状态! 1 添加 2 修改;";
  371. }
  372. }
  373. else
  374. {
  375. _result.Msg = "请输入正确的端口号! 1 Web 2 Android 3 Ios;";
  376. }
  377. return _result;
  378. }
  379. }
  380. }