CustomersRepository.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498
  1. using AutoMapper;
  2. using NPOI.POIFS.Crypt.Dsig;
  3. using OASystem.Domain;
  4. using OASystem.Domain.Dtos.Financial;
  5. using OASystem.Domain.Dtos.Groups;
  6. using OASystem.Domain.Entities.Customer;
  7. using OASystem.Domain.Entities.Financial;
  8. using OASystem.Domain.Entities.Groups;
  9. using OASystem.Domain.ViewModels.Financial;
  10. using OASystem.Domain.ViewModels.Groups;
  11. using OASystem.Domain.ViewModels.QiYeWeChat;
  12. using OASystem.Infrastructure.Tools;
  13. using SqlSugar;
  14. using System;
  15. using System.Collections.Generic;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. namespace OASystem.Infrastructure.Repositories.Groups
  20. {
  21. public class CustomersRepository : BaseRepository<Grp_Customers, Grp_Ommission>
  22. {
  23. private readonly IMapper _mapper;
  24. private readonly TeamRateRepository _teamRateRep;
  25. public CustomersRepository(SqlSugarClient sqlSugar, IMapper mapper, TeamRateRepository teamRateRep)
  26. : base(sqlSugar)
  27. {
  28. _mapper = mapper;
  29. _teamRateRep = teamRateRep;
  30. }
  31. /// <summary>
  32. /// 根据团组Id查询保险费用列表
  33. /// </summary>
  34. /// <param name="dto"></param>
  35. /// <returns></returns>
  36. public async Task<Result> CustomersByDiId(CustomersByDiIdDto dto)
  37. {
  38. Result result = new Result() { Code = -2, Msg = "未知错误" };
  39. try
  40. {
  41. string UserId = "";
  42. List<Grp_GroupsTaskAssignment> gtaUIdList = _sqlSugar.Queryable<Grp_GroupsTaskAssignment>().Where(a => a.DIId == dto.DiId && a.IsDel == 0 && a.CTId == 82).ToList();
  43. foreach (Grp_GroupsTaskAssignment gta in gtaUIdList)
  44. UserId += gta.UId + ",";
  45. if (!string.IsNullOrWhiteSpace(UserId))
  46. {
  47. UserId = UserId.Substring(0, UserId.Length - 1);
  48. }
  49. else
  50. {
  51. UserId = "0";
  52. }
  53. string sqlWhere = string.Format(@"Where h.DiId={0} and h.IsDel={1} And h.CreateUserId in ({2})", dto.DiId, 0, UserId);
  54. int startIndex = (dto.PageIndex - 1) * dto.PageSize + 1;
  55. int endIndex = startIndex + dto.PageSize - 1;
  56. if (dto.PortType == 1)
  57. {
  58. string sql = string.Format(@"select h.Id,h.ClientName,InsuranceCosts,Currency,s.Name as CurrencyStr,Attachment,c.OrbitalPrivateTransfer,u.CnName,c.IsAuditGM
  59. From Grp_Customers h
  60. Join Grp_CreditCardPayment c on h.Id=c.CId and c.CTable=82 and c.isdel=0
  61. left Join Sys_SetData s on h.Currency=s.Id
  62. left Join Sys_Users u on u.Id=h.CreateUserId {0} order by c.IsAuditGM,c.PayPercentage,h.CreateTime desc", sqlWhere);
  63. List<CustomersView> Customers = _sqlSugar.SqlQueryable<CustomersView>(sql).ToList();
  64. var parseIntValue = 0;
  65. var CrmIds = (from item in Customers
  66. where item.ClientName.Contains(",") || int.TryParse(item.ClientName, out parseIntValue)
  67. select item.ClientName).ToList();
  68. var strCrmIds = string.Join(',', CrmIds);
  69. List<Crm_DeleClient> clietArr = new List<Crm_DeleClient>();
  70. if (!string.IsNullOrWhiteSpace(strCrmIds))
  71. {
  72. sql = string.Format("SELECT * FROM Crm_DeleClient cdc where id in ({0}) and IsDel = 0", strCrmIds);
  73. clietArr = _sqlSugar.SqlQueryable<Crm_DeleClient>(sql).ToList();
  74. }
  75. foreach (var item in Customers)
  76. {
  77. if (item.IsAuditGM == 0) item.IsAuditGMStr = "未审核";
  78. else if (item.IsAuditGM == 1) item.IsAuditGMStr = "已通过";
  79. else if (item.IsAuditGM == 2) item.IsAuditGMStr = "未通过";
  80. else if (item.IsAuditGM == 3) item.IsAuditGMStr = "自动审核";
  81. if (item.OrbitalPrivateTransfer == 0) item.OrbitalPrivateTransferStr = "公转";
  82. else if (item.OrbitalPrivateTransfer == 1) item.OrbitalPrivateTransferStr = "私转";
  83. if (item.ClientName.Contains(","))
  84. {
  85. var splitArr = item.ClientName.Split(',');
  86. var name = string.Empty;
  87. foreach (var client in splitArr)
  88. {
  89. if (int.TryParse(client, out parseIntValue))
  90. {
  91. var clientObject = clietArr.Find(x => x.Id == parseIntValue);
  92. name += (clientObject?.LastName + clientObject?.FirstName + " ");
  93. }
  94. }
  95. if (!string.IsNullOrWhiteSpace(name))
  96. {
  97. item.ClientName = name;
  98. }
  99. continue;
  100. }
  101. if (int.TryParse(item.ClientName, out parseIntValue))
  102. {
  103. var name = string.Empty;
  104. var clientObject = clietArr.Find(x => x.Id == parseIntValue);
  105. name += (clientObject?.LastName + clientObject?.FirstName);
  106. if (!string.IsNullOrWhiteSpace(name))
  107. {
  108. item.ClientName = name;
  109. }
  110. continue;
  111. }
  112. }
  113. if (!string.IsNullOrWhiteSpace(dto.ClientName))
  114. {
  115. Customers = Customers.Where(x => x.ClientName.Contains(dto.ClientName)).ToList();
  116. }
  117. return result = new Result() { Code = 0, Msg = "查询成功!", Data = Customers };
  118. }
  119. else if (dto.PortType == 2 || dto.PortType == 3)
  120. {
  121. string sql = string.Format(@"Select * From (
  122. Select row_number() over (order by c.IsAuditGM,c.PayPercentage,h.CreateTime desc) as RowNumber,h.Id,h.ClientName,InsuranceCosts,
  123. Currency,s.Name as CurrencyStr,Attachment,c.OrbitalPrivateTransfer,u.CnName,c.IsAuditGM
  124. From Grp_Customers h
  125. Join Grp_CreditCardPayment c on h.Id=c.CId and c.CTable=82 and c.isdel=0
  126. left Join Sys_SetData s on h.Currency=s.Id
  127. left Join Sys_Users u on u.Id=h.CreateUserId {0}
  128. ) temp Where RowNumber Between {1} and {2}", sqlWhere, startIndex, endIndex);
  129. List<CustomersView> Customers = _sqlSugar.SqlQueryable<CustomersView>(sql).ToList();
  130. var parseIntValue = 0;
  131. var CrmIds = (from item in Customers
  132. where item.ClientName.Contains(",") || int.TryParse(item.ClientName, out parseIntValue)
  133. select item.ClientName).ToList();
  134. var strCrmIds = string.Join(',', CrmIds);
  135. List<Crm_DeleClient> clietArr = new List<Crm_DeleClient>();
  136. if (!string.IsNullOrWhiteSpace(strCrmIds))
  137. {
  138. sql = string.Format("SELECT * FROM Crm_DeleClient cdc where id in ({0}) and IsDel = 0", strCrmIds);
  139. clietArr = _sqlSugar.SqlQueryable<Crm_DeleClient>(sql).ToList();
  140. }
  141. foreach (var item in Customers)
  142. {
  143. if (item.IsAuditGM == 0) item.IsAuditGMStr = "未审核";
  144. else if (item.IsAuditGM == 1) item.IsAuditGMStr = "已通过";
  145. else if (item.IsAuditGM == 2) item.IsAuditGMStr = "未通过";
  146. else if (item.IsAuditGM == 3) item.IsAuditGMStr = "自动审核";
  147. if (item.OrbitalPrivateTransfer == 0) item.OrbitalPrivateTransferStr = "公转";
  148. else if (item.OrbitalPrivateTransfer == 1) item.OrbitalPrivateTransferStr = "私转";
  149. if (item.ClientName.Contains(","))
  150. {
  151. var splitArr = item.ClientName.Split(',');
  152. var name = string.Empty;
  153. var i = 0;
  154. while (i < splitArr.Count())
  155. {
  156. if (int.TryParse(splitArr[i], out parseIntValue))
  157. {
  158. var clientObject = clietArr.Find(x => x.Id == parseIntValue);
  159. name += (clientObject?.LastName + clientObject?.FirstName);
  160. }
  161. i++;
  162. if (i < splitArr.Count())
  163. {
  164. name += "[*TuT*]";
  165. }
  166. }
  167. if (!string.IsNullOrWhiteSpace(name))
  168. {
  169. item.ClientName = name.TrimEnd();
  170. }
  171. continue;
  172. }
  173. if (int.TryParse(item.ClientName, out parseIntValue))
  174. {
  175. var name = string.Empty;
  176. var clientObject = clietArr.Find(x => x.Id == parseIntValue);
  177. name += (clientObject?.LastName + clientObject?.FirstName);
  178. if (!string.IsNullOrWhiteSpace(name))
  179. {
  180. item.ClientName = name;
  181. }
  182. continue;
  183. }
  184. }
  185. string CountSql = string.Format(@"Select COUNT(1) as Count From (
  186. select h.Id,h.ClientName,InsuranceCosts,Currency,s.Name as CurrencyStr,Attachment,c.OrbitalPrivateTransfer,u.CnName,c.IsAuditGM
  187. From Grp_Customers h
  188. Join Grp_CreditCardPayment c on h.Id=c.CId and c.CTable=82 and c.isdel=0
  189. left Join Sys_SetData s on h.Currency=s.Id
  190. left Join Sys_Users u on u.Id=h.CreateUserId {0}
  191. ) temp", sqlWhere);
  192. DataCount dataCount = _sqlSugar.SqlQueryable<DataCount>(CountSql).First();
  193. int count = dataCount.Count;
  194. float totalPage = (float)count / dto.PageSize;//总页数
  195. if (totalPage == 0) totalPage = 1;
  196. else totalPage = (int)Math.Ceiling((double)totalPage);
  197. ListViewBase<CustomersView> rst = new ListViewBase<CustomersView>();
  198. rst.DataList = Customers;
  199. rst.DataCount = count;
  200. rst.CurrPageIndex = dto.PageIndex;
  201. rst.CurrPageSize = dto.PageSize;
  202. return result = new Result() { Code = 0, Msg = "查询成功!", Data = rst };
  203. }
  204. else
  205. {
  206. return result = new Result() { Code = -2, Msg = "请传入PortType参数,1 Web 2 Android 3 IOS" };
  207. }
  208. }
  209. catch (Exception ex)
  210. {
  211. return result = new Result() { Code = -2, Msg = "未知错误" };
  212. throw;
  213. }
  214. }
  215. public async Task<Result> CustomersById(CustomersByIdDto dto)
  216. {
  217. Result result = new Result() { Code = -2, Msg = "未知错误" };
  218. try
  219. {
  220. Grp_Customers grp_Customers = _sqlSugar.Queryable<Grp_Customers>().First(a=>a.Id==dto.Id && a.IsDel==0);
  221. CustomersByIdView customersById = _mapper.Map<CustomersByIdView>(grp_Customers);
  222. if (customersById != null)
  223. {
  224. Grp_CreditCardPayment creditCardPayment = _sqlSugar.Queryable<Grp_CreditCardPayment>().First(a => a.CId == dto.Id && a.IsDel == 0 && a.CTable == 82);
  225. CreditCardView creditCardView = _mapper.Map<CreditCardView>(creditCardPayment);
  226. Grp_InsuranceCost Iid = _sqlSugar.Queryable<Grp_InsuranceCost>().First(a => a.IsDel == 0 && a.Id == customersById.Iid);
  227. if (Iid != null)
  228. {
  229. customersById.IidStr = Iid.GName;
  230. string CountSql = string.Format(@"select sum(InsuranceCosts) as CountCost from Grp_Customers where isdel=0 and Iid=" + customersById.Iid);
  231. DataCountCost dataCount = _sqlSugar.SqlQueryable<DataCountCost>(CountSql).First();
  232. customersById.InsuranceBalance = Math.Round(Iid.RechargeCost - dataCount.CountCost, 2);
  233. }
  234. Sys_SetData Currency = _sqlSugar.Queryable<Sys_SetData>().First(a => a.IsDel == 0 && a.Id == customersById.Currency);
  235. if (Currency != null) customersById.CurrencyStr = Currency.Name;
  236. Sys_SetData PayDId = _sqlSugar.Queryable<Sys_SetData>().First(a => a.IsDel == 0 && a.Id == creditCardView.PayDId);
  237. if (PayDId != null) creditCardView.PayDIdStr = PayDId.Name;
  238. Sys_SetData CTDId = _sqlSugar.Queryable<Sys_SetData>().First(a => a.IsDel == 0 && a.Id == creditCardView.CTDId);
  239. if (CTDId != null) creditCardView.CTDIdStr = CTDId.Name;
  240. creditCardView.OrbitalPrivateTransferStr= creditCardView.OrbitalPrivateTransfer== 0 ? "公转" : "私转";
  241. Sys_SetData PaymentCurrency= _sqlSugar.Queryable<Sys_SetData>().First(a => a.IsDel == 0 && a.Id == creditCardView.PaymentCurrency);
  242. if (PaymentCurrency != null) creditCardView.PaymentCurrencyStr = PaymentCurrency.Name;
  243. var data = new
  244. {
  245. customers = customersById,
  246. creditCard = creditCardView
  247. };
  248. return result = new Result() { Code = 0, Msg = "查询成功!", Data = data };
  249. }
  250. var dataN = new
  251. {
  252. customers = new CustomersView(),
  253. creditCard = new CreditCardView()
  254. };
  255. return result = new Result() { Code = 0, Msg = "暂无数据!", Data = dataN };
  256. }
  257. catch (Exception ex)
  258. {
  259. return result = new Result() { Code = -2, Msg = "未知错误" };
  260. throw;
  261. }
  262. }
  263. public async Task<Result> CustomersInitialize(CustomersInitializeDto dto)
  264. {
  265. Result result = new Result() { Code = -2, Msg = "未知错误" };
  266. try
  267. {
  268. List<Sys_SetData> Payment = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 14 && a.IsDel == 0).ToList();
  269. List<SetDataInfoView> _Payment = _mapper.Map<List<SetDataInfoView>>(Payment);
  270. //卡类型
  271. List<Sys_SetData> BankCard = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 15 && a.IsDel == 0).ToList();
  272. List<SetDataCurrencyInfoView> _BankCard = _mapper.Map<List<SetDataCurrencyInfoView>>(BankCard);
  273. //保险名称
  274. List<Grp_InsuranceCost> _InsuranceCosts=_sqlSugar.Queryable<Grp_InsuranceCost>().Where(a=>a.IsDel==0).ToList();
  275. List<InsuranceCostView> insuranceCostViews = new List<InsuranceCostView>();
  276. foreach (var item in _InsuranceCosts)
  277. {
  278. InsuranceCostView costView=new InsuranceCostView();
  279. costView.Id=item.Id;
  280. costView.GName=item.GName;
  281. costView.Balance = 0.00M;
  282. string CountSql = string.Format(@"select sum(InsuranceCosts) as CountCost from Grp_Customers where isdel=0 and Iid=" + item.Id);
  283. DataCountCost dataCount = _sqlSugar.SqlQueryable<DataCountCost>(CountSql).First();
  284. costView.Balance = Math.Round(item.RechargeCost - dataCount.CountCost, 2);
  285. insuranceCostViews.Add(costView);
  286. }
  287. //币种
  288. GeneralTeamRateInfoDto PostGroupTeamRatedto = new GeneralTeamRateInfoDto();
  289. PostGroupTeamRatedto.DiId = dto.DiId;
  290. PostGroupTeamRatedto.CTable = 82;
  291. PostGroupTeamRatedto.PortType = dto.PortType;
  292. var _teamRate = await _teamRateRep.PostGroupTeamRateItemByDiIdAndCTableId(dto.PortType, dto.DiId, 82);
  293. var data = new
  294. {
  295. Payment = _Payment,
  296. CurrencyList = _teamRate,
  297. BankCard = _BankCard,
  298. insuranceCost = insuranceCostViews,
  299. };
  300. return result = new Result() { Code = 0, Msg = "查询成功", Data = data };
  301. }
  302. catch (Exception ex)
  303. {
  304. return result = new Result() { Code = -2, Msg = "未知错误" };
  305. throw;
  306. }
  307. }
  308. public async Task<Result> OpCustomers(OpCustomersDto dto)
  309. {
  310. Result result = new Result() { Code = -2, Msg = "未知错误" };
  311. try
  312. {
  313. BeginTran();
  314. int id = dto.Id;
  315. Grp_Customers cus = _mapper.Map<Grp_Customers>(dto);
  316. Grp_CreditCardPayment c = _mapper.Map<Grp_CreditCardPayment>(dto);
  317. c.Remark = dto.CRemark;
  318. c.PayPercentage = 100;
  319. c.CTable = 82;
  320. c.CId = id;
  321. c.IsAuditGM = 0;
  322. c.PayMoney = cus.InsuranceCosts;
  323. c.PaymentCurrency = cus.Currency;
  324. if (c.PayDId == 72)
  325. {
  326. c.IsPay = 1;
  327. }
  328. c.RMBPrice = cus.InsuranceCosts;
  329. c.DayRate = 1;
  330. Grp_TeamRate _TeamRate = _sqlSugar.Queryable<Grp_TeamRate>().First(a => a.DiId == dto.DiId && a.IsDel == 0 && a.CTable == 82);
  331. List<CurrencyInfo> currencyInfos = new List<CurrencyInfo>();
  332. if (_TeamRate != null)
  333. {
  334. Sys_SetData _SetData = _sqlSugar.Queryable<Sys_SetData>().First(a => a.IsDel == 0 && a.Id == cus.Currency);
  335. if (_SetData != null)
  336. {
  337. currencyInfos = CommonFun.GetCurrencyChinaToList(_TeamRate.Remark);
  338. CurrencyInfo CurrencyRate = currencyInfos.FirstOrDefault(a => a.CurrencyCode == _SetData.Name);
  339. if (CurrencyRate != null)
  340. {
  341. c.RMBPrice = c.PayMoney * Convert.ToDecimal(CurrencyRate.Rate);
  342. c.DayRate = CurrencyRate.Rate;
  343. }
  344. }
  345. }
  346. if (dto.Status == 1)//添加
  347. {
  348. Grp_Customers customers = _sqlSugar.Queryable<Grp_Customers>().First(a => a.IsDel == 0 && a.ClientName == dto.ClientName && a.InsuranceCosts == dto.InsuranceCosts);
  349. if (customers != null)
  350. {
  351. return result = new Result() { Code = -1, Msg = "该笔费用已存在,请勿重复添加!" };
  352. }
  353. else
  354. {
  355. id = await AddAsyncReturnId(cus);
  356. if (id != 0)
  357. {
  358. c.CId = id;
  359. int cId = await _sqlSugar.Insertable(c).ExecuteReturnIdentityAsync();
  360. if (cId != 0)
  361. {
  362. result = new Result() { Code = 0, Msg = "添加成功!" };
  363. }
  364. else
  365. {
  366. RollbackTran();
  367. result = new Result() { Code = -1, Msg = "添加失败!" };
  368. }
  369. }
  370. else
  371. {
  372. RollbackTran();
  373. result = new Result() { Code = -1, Msg = "添加失败,请稍后重试!" };
  374. }
  375. }
  376. }
  377. else if (dto.Status == 2)//修改
  378. {
  379. bool res = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_Customers
  380. {
  381. Iid = cus.Iid,
  382. ClientName = cus.ClientName,
  383. InsuranceCosts = cus.InsuranceCosts,
  384. Currency = cus.Currency,
  385. Attachment = cus.Attachment,
  386. Remark = cus.Remark
  387. });
  388. if (res)
  389. {
  390. int CTable = await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.CId == cus.Id && a.CTable == 82).SetColumns(a => new Grp_CreditCardPayment
  391. {
  392. PayDId = dto.PayDId,
  393. PayMoney = c.PayMoney,
  394. PaymentCurrency = c.PaymentCurrency,
  395. Payee = c.Payee,
  396. OrbitalPrivateTransfer = c.OrbitalPrivateTransfer,
  397. DayRate = c.DayRate,
  398. RMBPrice = c.RMBPrice,
  399. ConsumptionPatterns = c.ConsumptionPatterns,
  400. ConsumptionDate = c.ConsumptionDate,
  401. CTDId = c.CTDId,
  402. CompanyBankNo = c.CompanyBankNo,
  403. OtherBankName = c.OtherBankName,
  404. OtherSideNo = c.OtherSideNo,
  405. OtherSideName = c.OtherSideName,
  406. BankNo = c.BankNo,
  407. CardholderName = c.CardholderName,
  408. Remark = c.Remark,
  409. }).ExecuteCommandAsync();
  410. if (CTable == 0)
  411. {
  412. result = new Result() { Code = -1, Msg = "修改失败!" };
  413. RollbackTran();
  414. }
  415. else
  416. {
  417. result = new Result() { Code = 0, Msg = "修改成功!" };
  418. }
  419. }
  420. else
  421. {
  422. RollbackTran();
  423. result = new Result() { Code = -1, Msg = "修改失败,请稍后重试!" };
  424. }
  425. }
  426. CommitTran();
  427. }
  428. catch (Exception ex)
  429. {
  430. return result = new Result() { Code = -2, Msg = "未知错误" };
  431. throw;
  432. }
  433. return result;
  434. }
  435. }
  436. }