InvReceivableServiceImpl.java 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715
  1. package com.ydtech.modules.inv.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.ydtech.core.page.HttpResult;
  7. import com.ydtech.core.page.PageRequest;
  8. import com.ydtech.modules.esm.model.EsmInsCompany;
  9. import com.ydtech.modules.inv.dao.InvChannelAccountMapper;
  10. import com.ydtech.modules.inv.dao.InvReceivableMapper;
  11. import com.ydtech.modules.inv.dao.InvSettlementSourceMapper;
  12. import com.ydtech.modules.inv.dao.InvSourceMapper;
  13. import com.ydtech.modules.inv.model.InvAccount;
  14. import com.ydtech.modules.inv.model.po.InvChannelAccount;
  15. import com.ydtech.modules.inv.model.po.InvSettlementSource;
  16. import com.ydtech.modules.inv.model.po.InvSource;
  17. import com.ydtech.modules.inv.model.po.QueryInvChannelAccount;
  18. import com.ydtech.modules.inv.model.vo.*;
  19. import com.ydtech.modules.inv.service.InvChannelAccountService;
  20. import com.ydtech.modules.inv.service.InvReceivableService;
  21. import com.ydtech.modules.inv.service.InvSourceService;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Service;
  24. import java.math.BigDecimal;
  25. import java.math.RoundingMode;
  26. import java.time.MonthDay;
  27. import java.time.YearMonth;
  28. import java.time.format.DateTimeFormatter;
  29. import java.util.ArrayList;
  30. import java.util.Arrays;
  31. import java.util.HashMap;
  32. import java.util.List;
  33. import java.util.stream.Collectors;
  34. /**
  35. * @author Administrator
  36. * @description 针对表【inv_channel_account(渠道账户表)】的数据库操作Service实现
  37. * @createDate 2024-01-20 10:29:30
  38. */
  39. @Service
  40. public class InvReceivableServiceImpl implements InvReceivableService {
  41. @Autowired
  42. InvReceivableMapper invReceivableMapper;
  43. @Autowired
  44. InvSourceService invSourceService;
  45. @Autowired
  46. InvSourceMapper invSourceMapper;
  47. @Autowired
  48. InvSettlementSourceMapper invSettlementSourceMapper;
  49. @Override
  50. public List<ReceivableResultVo> getReceivableList(String startTime, String endTime,String insuranceId) {
  51. return invReceivableMapper.getReceivableList(startTime,endTime,insuranceId);
  52. }
  53. @Override
  54. public List<SigningSourceResultVo> getSigningSourceResult(String yearMonthStr,String startTime, String endTime) {
  55. List<SigningSourceResultVo> signingSources = invReceivableMapper.getSigningSourceResult(startTime, endTime);
  56. List<SigningSourceResultVo> signingSourceResult = new ArrayList<>();
  57. Float jqPremiumTax = 0f;
  58. Float syPremiumTax = 0f;
  59. Float nonCarPremiumTax = 0f;
  60. Float writtenPremium = 0f;
  61. Float settlementAmount = 0f;
  62. for(int i=1;i<=12;i++){
  63. //查找day是否有数据
  64. String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i);
  65. boolean countBol = signingSources.stream().filter(x -> finalI.equals(x.getDay())).count() > 0 ? true : false;
  66. if(countBol)
  67. {
  68. signingSourceResult.add(signingSources.stream().filter(x -> String.valueOf(finalI).equals(x.getDay())).findFirst().get());
  69. }else{
  70. SigningSourceResultVo signingSourceResultVo = new SigningSourceResultVo();
  71. signingSourceResultVo.setDay(finalI);
  72. signingSourceResultVo.setYearmonth(yearMonthStr + "-" + finalI);
  73. signingSourceResult.add(signingSourceResultVo);
  74. }
  75. }
  76. //处理合计
  77. for(SigningSourceResultVo vo : signingSourceResult){
  78. jqPremiumTax = Float.parseFloat(vo.getJqPremiumTax()) + jqPremiumTax;
  79. syPremiumTax = Float.parseFloat(vo.getSyPremiumTax()) + syPremiumTax;
  80. nonCarPremiumTax = Float.parseFloat(vo.getNonCarPremiumTax()) + nonCarPremiumTax;
  81. writtenPremium = Float.parseFloat(vo.getWrittenPremium()) + writtenPremium;
  82. settlementAmount = Float.parseFloat(vo.getTotalAmountReceivable()) + settlementAmount;
  83. }
  84. SigningSourceResultVo vo = new SigningSourceResultVo();
  85. vo.setYearmonth("合计");
  86. vo.setJqPremiumTax(String.format("%.2f", jqPremiumTax));
  87. vo.setSyPremiumTax(String.format("%.2f", syPremiumTax));
  88. vo.setNonCarPremiumTax(String.format("%.2f", nonCarPremiumTax));
  89. vo.setWrittenPremium(String.format("%.2f", writtenPremium));
  90. vo.setTotalAmountReceivable(String.format("%.2f", settlementAmount));
  91. signingSourceResult.add(vo);
  92. return signingSourceResult;
  93. }
  94. @Override
  95. public List<SigningSourceResultVo> getSigningSourceDayResult(String yearMonthStr, String startTime, String endTime,String insuranceId) {
  96. List<SigningSourceResultVo> signingSources = invReceivableMapper.getSigningSourceDayResult(startTime, endTime,insuranceId);
  97. List<SigningSourceResultVo> signingSourceResult = new ArrayList<>();
  98. // 定义日期时间格式
  99. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
  100. // 将字符串解析为YearMonth对象
  101. YearMonth yearMonth = YearMonth.parse(yearMonthStr, formatter);
  102. int maxDays = yearMonth.lengthOfMonth();
  103. Float jqPremiumTax = 0f;
  104. Float syPremiumTax = 0f;
  105. Float nonCarPremiumTax = 0f;
  106. Float writtenPremium = 0f;
  107. Float settlementAmount = 0f;
  108. for(int i=1;i<=maxDays;i++){
  109. //查找day是否有数据
  110. String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i);
  111. boolean countBol = signingSources.stream().filter(x -> finalI.equals(x.getDay())).count() > 0 ? true : false;
  112. if(countBol)
  113. {
  114. signingSourceResult.add(signingSources.stream().filter(x -> String.valueOf(finalI).equals(x.getDay())).findFirst().get());
  115. }else{
  116. SigningSourceResultVo signingSourceResultVo = new SigningSourceResultVo();
  117. signingSourceResultVo.setDay(finalI);
  118. signingSourceResultVo.setYearmonth(yearMonthStr + "-" + finalI);
  119. signingSourceResult.add(signingSourceResultVo);
  120. }
  121. }
  122. //处理合计
  123. for(SigningSourceResultVo vo : signingSourceResult){
  124. jqPremiumTax = Float.parseFloat(vo.getJqPremiumTax()) + jqPremiumTax;
  125. syPremiumTax = Float.parseFloat(vo.getSyPremiumTax()) + syPremiumTax;
  126. nonCarPremiumTax = Float.parseFloat(vo.getNonCarPremiumTax()) + nonCarPremiumTax;
  127. writtenPremium = Float.parseFloat(vo.getWrittenPremium()) + writtenPremium;
  128. settlementAmount = Float.parseFloat(vo.getTotalAmountReceivable()) + settlementAmount;
  129. }
  130. SigningSourceResultVo vo = new SigningSourceResultVo();
  131. vo.setYearmonth("合计");
  132. vo.setJqPremiumTax(String.format("%.2f", jqPremiumTax));
  133. vo.setSyPremiumTax(String.format("%.2f", syPremiumTax));
  134. vo.setNonCarPremiumTax(String.format("%.2f", nonCarPremiumTax));
  135. vo.setWrittenPremium(String.format("%.2f", writtenPremium));
  136. vo.setTotalAmountReceivable(String.format("%.2f", settlementAmount));
  137. signingSourceResult.add(vo);
  138. return signingSourceResult;
  139. }
  140. public static String[] getNext12MonthsDates(YearMonth startYearMonth) {
  141. String[] next12MonthsDates = new String[12];
  142. for (int i = 0; i < 12; i++) {
  143. YearMonth nextYearMonth = startYearMonth.plusMonths(i);
  144. String formattedDate = nextYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"));
  145. next12MonthsDates[i] = formattedDate;
  146. }
  147. return next12MonthsDates;
  148. }
  149. @Override
  150. public List<SettlementSourceResultVo> getSettlementSourceResult(String yearMonthStr, String insuranceId) {
  151. // 定义日期时间格式
  152. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
  153. // 将字符串解析为YearMonth对象
  154. YearMonth yearMonth = YearMonth.parse(yearMonthStr, formatter);
  155. String[] next12MonthsDates = getNext12MonthsDates(yearMonth);
  156. int maxDays = yearMonth.lengthOfMonth();
  157. //获取签单数据
  158. List<SigningSourceResultVo> signingSources = invReceivableMapper.getSigningSourceDayResult(yearMonthStr + "-01", yearMonthStr + "-" + maxDays,insuranceId);
  159. //转换类型
  160. List<SettlementSourceResultVo> settlementSourcesTmp = new ArrayList<>();
  161. List<SettlementSourceResultVo> settlementSources = new ArrayList<>();
  162. signingSources.forEach(signing->{
  163. SettlementSourceResultVo settlementSourceResultVo = new SettlementSourceResultVo();
  164. settlementSourceResultVo.setDay(signing.getDay());
  165. settlementSourceResultVo.setSignDate(signing.getYearmonth());
  166. settlementSourceResultVo.setSignPremium(new BigDecimal(signing.getWrittenPremium()));
  167. settlementSourceResultVo.setSignReceivableAmount(new BigDecimal(signing.getTotalAmountReceivable()));
  168. settlementSourceResultVo.setSettlementData(new ArrayList<>());
  169. settlementSourcesTmp.add(settlementSourceResultVo);
  170. });
  171. for(int i=1;i<=maxDays;i++)
  172. {
  173. //查找day是否有数据
  174. String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i);
  175. boolean countBol = settlementSourcesTmp.stream().filter(x -> finalI.equals(x.getDay())).count() > 0 ? true : false;
  176. if(!countBol)
  177. {
  178. SettlementSourceResultVo settlementSourceResultVo = new SettlementSourceResultVo();
  179. settlementSourceResultVo.setDay(finalI);
  180. settlementSourceResultVo.setSignDate(yearMonthStr + "-" + finalI);
  181. settlementSources.add(settlementSourceResultVo);
  182. }else{
  183. settlementSources.add(settlementSourcesTmp.stream().filter(x -> finalI.equals(x.getDay())).findFirst().get());
  184. }
  185. }
  186. int year = yearMonth.getYear();
  187. //遍历结算数据
  188. settlementSources.forEach(signing->{
  189. // String startTime = String.valueOf(year) + "-01-01";
  190. // String endTime = String.valueOf(year) + "-12-31";
  191. String startTime = next12MonthsDates[0] + "-01";
  192. int day = YearMonth.parse(next12MonthsDates[11], formatter).lengthOfMonth();
  193. String endTime = next12MonthsDates[11] + "-" + day;
  194. List<SettlementSourceDataVo> settlementSourceResultTmp =
  195. invReceivableMapper.getSettlementSourceResult(signing.getSignDate(),startTime, endTime, insuranceId);
  196. List<SettlementSourceDataVo> settlementSourceResult = new ArrayList<>();
  197. System.out.printf("1");
  198. //补齐数据
  199. for(int i=0;i<12;i++)
  200. {
  201. //查找day是否有数据
  202. String month = next12MonthsDates[i];
  203. boolean countBol = settlementSourceResultTmp.stream().filter(x -> month.equals(x.getSettlementDate())).count() > 0 ? true : false;
  204. if(!countBol)
  205. {
  206. SettlementSourceDataVo settlementSourceData = new SettlementSourceDataVo();
  207. settlementSourceData.setDay(month);
  208. settlementSourceData.setSettlementDate(next12MonthsDates[i]);
  209. settlementSourceResult.add(settlementSourceData);
  210. }else{
  211. settlementSourceResult.add(settlementSourceResultTmp.stream().filter(x -> month.equals(x.getSettlementDate())).findFirst().get());
  212. }
  213. }
  214. signing.setSettlementData(settlementSourceResult);
  215. });
  216. //计算每个日期的签单保费 和代理人佣金
  217. settlementSources.forEach(settlementSource->{
  218. int length = settlementSource.getSettlementData().size();
  219. BigDecimal settlementPremium = new BigDecimal(0);
  220. BigDecimal agentCommission = new BigDecimal(0);
  221. //横向计算
  222. for(int i=0;i<length;i++){
  223. SettlementSourceDataVo settlementSourceData = settlementSource.getSettlementData().get(i);
  224. settlementPremium = settlementPremium.add(settlementSourceData.getSettlementPremium());
  225. agentCommission = agentCommission.add(settlementSourceData.getAgentCommission());
  226. }
  227. SettlementSourceDataVo settlementSourceData = new SettlementSourceDataVo();
  228. settlementSourceData.setSettlementPremium(settlementPremium);
  229. settlementSourceData.setAgentCommission(agentCommission);
  230. settlementSourceData.setSettlementDate("合计");
  231. settlementSource.getSettlementData().add(settlementSourceData);
  232. //竖向计算
  233. // settlementSource.getSettlementData().stream().filter(x-> x.getDay().equals("01")).count()
  234. });
  235. // 计算每个日期的签单保费 和代理人佣金 竖向计算
  236. List<SettlementSourceDataVo> settlementSourceDataSum = new ArrayList<>();
  237. for(int i=0;i<12;i++){
  238. //提取每个月的数据
  239. // String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i);
  240. String month = next12MonthsDates[i];
  241. List<SettlementSourceDataVo> settlementSourceDataVos = new ArrayList<>();
  242. BigDecimal settlementPremium = new BigDecimal(0);
  243. BigDecimal agentCommission = new BigDecimal(0);
  244. for(int j=0;j<settlementSources.size();j++){
  245. List<SettlementSourceDataVo> collect = settlementSources.get(j).getSettlementData().stream().filter(x -> x.getSettlementDate() != null && x.getSettlementDate().equals(month)).collect(Collectors.toList());
  246. for(int k=0;k<collect.size();k++)
  247. {
  248. settlementPremium = settlementPremium.add(collect.get(k).getAgentCommission());
  249. agentCommission = agentCommission.add(collect.get(k).getAgentCommission());
  250. }
  251. }
  252. SettlementSourceDataVo settlementSourceDataVo = new SettlementSourceDataVo();
  253. settlementSourceDataVo.setDay(month);
  254. settlementSourceDataVo.setSettlementPremium(settlementPremium);
  255. settlementSourceDataVo.setAgentCommission(agentCommission);
  256. settlementSourceDataSum.add(settlementSourceDataVo);
  257. }
  258. //未结算签单保费 与 已结算利润计算
  259. settlementSources.forEach(settlementSource -> {
  260. SettlementSourceDataVo settlementSourceDataVo = settlementSource.getSettlementData().stream().filter(x -> !"合计".equals(x.getSettlementDate())).findFirst().get();
  261. settlementSource.setUnCalculatedAmount(settlementSource.getSignPremium().subtract(settlementSourceDataVo.getSettlementPremium()));
  262. settlementSource.setSettledProfit(settlementSource.getSignReceivableAmount().subtract(settlementSourceDataVo.getAgentCommission()));
  263. });
  264. //计算代理人佣金
  265. List<HashMap> maxReceivable = invReceivableMapper.getMaxReceivable(yearMonthStr + "-01", yearMonthStr + "-" + maxDays);
  266. settlementSources.forEach(settlementSource -> {
  267. Boolean b = maxReceivable.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().isPresent();
  268. if(!b)
  269. {
  270. settlementSource.setAgentAmount(new BigDecimal(0));
  271. }else{
  272. HashMap max = maxReceivable.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().get();
  273. SettlementSourceDataVo settlementSourceDataVo = settlementSource.getSettlementData().get(settlementSource.getSettlementData().size() - 1);
  274. settlementSource.setAgentAmount(new BigDecimal(max.get("receivable").toString()).subtract(settlementSourceDataVo.getAgentCommission()));
  275. }
  276. });
  277. //计算未结算利润测算
  278. List<HashMap> unsettledProfitCalculation = invReceivableMapper.getUnsettledProfitCalculation(yearMonthStr + "-01", yearMonthStr + "-" + maxDays);
  279. settlementSources.forEach(settlementSource -> {
  280. Boolean b = unsettledProfitCalculation.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().isPresent();
  281. if(!b)
  282. {
  283. settlementSource.setUnsettledProfitCalculation(new BigDecimal(0));
  284. }else{
  285. HashMap max = unsettledProfitCalculation.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().get();
  286. settlementSource.setUnsettledProfitCalculation(new BigDecimal(max.get("unsettled_profit_calculation").toString()));
  287. }
  288. });
  289. //计算签单合计 (第一层)
  290. int length = settlementSources.size();
  291. BigDecimal signPremium = new BigDecimal(0);
  292. BigDecimal signReceivableAmount = new BigDecimal(0);
  293. BigDecimal unCalculatedAmount = new BigDecimal(0);
  294. BigDecimal settledProfit = new BigDecimal(0);
  295. BigDecimal agentAmount = new BigDecimal(0);
  296. BigDecimal unsettledProfitCalculationSum = new BigDecimal(0);
  297. for (int i = 0; i < length; i++) {
  298. SettlementSourceResultVo settlementSource = settlementSources.get(i);
  299. signPremium = signPremium.add(settlementSource.getSignPremium());
  300. signReceivableAmount = signReceivableAmount.add(settlementSource.getSignReceivableAmount());
  301. unCalculatedAmount = unCalculatedAmount.add(settlementSource.getUnCalculatedAmount());
  302. settledProfit = settledProfit.add(settlementSource.getSettledProfit());
  303. agentAmount = agentAmount.add(settlementSource.getAgentAmount());
  304. unsettledProfitCalculationSum = unsettledProfitCalculationSum.add(settlementSource.getUnsettledProfitCalculation());
  305. }
  306. //合计
  307. SettlementSourceResultVo settlementSourceResultVo = new SettlementSourceResultVo();
  308. settlementSourceResultVo.setSignDate("合计");
  309. settlementSourceResultVo.setSignPremium(signPremium);
  310. settlementSourceResultVo.setSettlementData(settlementSourceDataSum);
  311. settlementSourceResultVo.setSignReceivableAmount(signReceivableAmount);
  312. settlementSourceResultVo.setUnCalculatedAmount(unCalculatedAmount);
  313. settlementSourceResultVo.setSettledProfit(settledProfit);
  314. settlementSourceResultVo.setAgentAmount(agentAmount);
  315. settlementSourceResultVo.setUnsettledProfitCalculation(unsettledProfitCalculationSum);
  316. settlementSources.add(settlementSourceResultVo);
  317. return settlementSources;
  318. }
  319. @Override
  320. public IPage<InvSource> getRecivablePage(InvSourceQueryVo invSourceQueryVo) {
  321. PageRequest pageRequest = new PageRequest();
  322. pageRequest.setPageNum(invSourceQueryVo.getPageNum());
  323. pageRequest.setPageSize(invSourceQueryVo.getPageSize());
  324. Page page = PageRequest.buildPageRequest(pageRequest);
  325. LambdaQueryWrapper<InvSource> queryWrapper = new LambdaQueryWrapper<>();
  326. if(invSourceQueryVo.getLicenseno() != null && !"".equals(invSourceQueryVo.getLicenseno())){
  327. queryWrapper.eq(InvSource::getLicenseno,invSourceQueryVo.getLicenseno());
  328. }
  329. if(invSourceQueryVo.getJqPolicyId() != null && !"".equals(invSourceQueryVo.getJqPolicyId())){
  330. queryWrapper.eq(InvSource::getJqPolicyId,invSourceQueryVo.getJqPolicyId());
  331. }
  332. if(invSourceQueryVo.getSyPolicyId() != null && !"".equals(invSourceQueryVo.getSyPolicyId())){
  333. queryWrapper.eq(InvSource::getSyPolicyId,invSourceQueryVo.getSyPolicyId());
  334. }
  335. if(invSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSourceQueryVo.getNonCarPolicyId())){
  336. queryWrapper.eq(InvSource::getNonCarPolicyId,invSourceQueryVo.getNonCarPolicyId());
  337. }
  338. if(invSourceQueryVo.getInsuranceId() != null && !"".equals(invSourceQueryVo.getInsuranceId())){
  339. queryWrapper.in(InvSource::getInsuranceId,invSourceQueryVo.getInsuranceId());
  340. }
  341. if(invSourceQueryVo.getRisk() != null && !"".equals(invSourceQueryVo.getRisk())){
  342. queryWrapper.eq(InvSource::getRisk,invSourceQueryVo.getRisk());
  343. }
  344. if(invSourceQueryVo.getInsuredName() != null && !"".equals(invSourceQueryVo.getInsuredName())){
  345. queryWrapper.like(InvSource::getInsuredName,invSourceQueryVo.getInsuredName());
  346. }
  347. if(invSourceQueryVo.getClearingTime() != null && !"".equals(invSourceQueryVo.getClearingTime())){
  348. String[] split = invSourceQueryVo.getClearingTime().split(",");
  349. queryWrapper.between(InvSource::getClearingTime,split[0],split[1]);
  350. }
  351. if(invSourceQueryVo.getSigningTime() != null && !"".equals(invSourceQueryVo.getSigningTime())){
  352. String[] split = invSourceQueryVo.getSigningTime().split(",");
  353. queryWrapper.between(InvSource::getSigningTime,split[0],split[1]);
  354. }
  355. if(invSourceQueryVo.getInsuranceDept() != null && !"".equals(invSourceQueryVo.getInsuranceDept())){
  356. queryWrapper.eq(InvSource::getInsuranceDept,invSourceQueryVo.getInsuranceDept());
  357. }
  358. if(invSourceQueryVo.getClearingState() != null && !"".equals(invSourceQueryVo.getClearingState()))
  359. {
  360. queryWrapper.eq(InvSource::getClearingState,invSourceQueryVo.getClearingState());
  361. }
  362. if(invSourceQueryVo.getInsuranceClearingState() != null && !"".equals(invSourceQueryVo.getInsuranceClearingState()))
  363. {
  364. queryWrapper.eq(InvSource::getInsuranceClearingState,invSourceQueryVo.getInsuranceClearingState());
  365. }
  366. Page pageData = invSourceMapper.selectPage(page, queryWrapper);
  367. List<InvSource> records = pageData.getRecords();
  368. records.forEach(x->{
  369. if("0".equals(x.getClearingState())){
  370. x.setClearingState("未结算");
  371. }else if("1".equals(x.getClearingState()))
  372. {
  373. x.setClearingState("已结算");
  374. }
  375. if("0".equals(x.getInsuranceClearingState())){
  376. x.setInsuranceClearingState("未结算");
  377. }else if("1".equals(x.getInsuranceClearingState()))
  378. {
  379. x.setInsuranceClearingState("已结算");
  380. }
  381. });
  382. pageData.setRecords(records);
  383. return pageData;
  384. }
  385. @Override
  386. public List<InvSource> getRecivableList(InvSourceQueryVo invSourceQueryVo) {
  387. LambdaQueryWrapper<InvSource> queryWrapper = new LambdaQueryWrapper<>();
  388. if(invSourceQueryVo.getLicenseno() != null && !"".equals(invSourceQueryVo.getLicenseno())){
  389. queryWrapper.eq(InvSource::getLicenseno,invSourceQueryVo.getLicenseno());
  390. }
  391. if(invSourceQueryVo.getJqPolicyId() != null && !"".equals(invSourceQueryVo.getJqPolicyId())){
  392. queryWrapper.eq(InvSource::getJqPolicyId,invSourceQueryVo.getJqPolicyId());
  393. }
  394. if(invSourceQueryVo.getSyPolicyId() != null && !"".equals(invSourceQueryVo.getSyPolicyId())){
  395. queryWrapper.eq(InvSource::getSyPolicyId,invSourceQueryVo.getSyPolicyId());
  396. }
  397. if(invSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSourceQueryVo.getNonCarPolicyId())){
  398. queryWrapper.eq(InvSource::getNonCarPolicyId,invSourceQueryVo.getNonCarPolicyId());
  399. }
  400. if(invSourceQueryVo.getInsuranceId() != null && !"".equals(invSourceQueryVo.getInsuranceId())){
  401. queryWrapper.in(InvSource::getInsuranceId,invSourceQueryVo.getInsuranceId());
  402. }
  403. if(invSourceQueryVo.getRisk() != null && !"".equals(invSourceQueryVo.getRisk())){
  404. queryWrapper.eq(InvSource::getRisk,invSourceQueryVo.getRisk());
  405. }
  406. if(invSourceQueryVo.getInsuredName() != null && !"".equals(invSourceQueryVo.getInsuredName())){
  407. queryWrapper.like(InvSource::getInsuredName,invSourceQueryVo.getInsuredName());
  408. }
  409. if(invSourceQueryVo.getClearingTime() != null && !"".equals(invSourceQueryVo.getClearingTime())){
  410. String[] split = invSourceQueryVo.getClearingTime().split(",");
  411. queryWrapper.between(InvSource::getClearingTime,split[0],split[1]);
  412. }
  413. if(invSourceQueryVo.getInsuranceDept() != null && !"".equals(invSourceQueryVo.getInsuranceDept())){
  414. queryWrapper.eq(InvSource::getInsuranceDept,invSourceQueryVo.getInsuranceDept());
  415. }
  416. if(invSourceQueryVo.getSigningTime() != null && !"".equals(invSourceQueryVo.getSigningTime())){
  417. String[] split = invSourceQueryVo.getSigningTime().split(",");
  418. queryWrapper.between(InvSource::getSigningTime,split[0],split[1]);
  419. }
  420. List<InvSource> pageData = invSourceMapper.selectList(queryWrapper);
  421. pageData.forEach(x->{
  422. if("0".equals(x.getClearingState())){
  423. x.setClearingState("未结算");
  424. }else if("1".equals(x.getClearingState()))
  425. {
  426. x.setClearingState("已结算");
  427. }
  428. if("0".equals(x.getInsuranceClearingState())){
  429. x.setInsuranceClearingState("未结算");
  430. }else if("1".equals(x.getInsuranceClearingState()))
  431. {
  432. x.setInsuranceClearingState("已结算");
  433. }
  434. });
  435. return pageData;
  436. }
  437. @Override
  438. public Boolean updateRecivable(InvSource invSource) {
  439. BigDecimal tax = new BigDecimal(1.06);
  440. //处理交强不含税
  441. invSource.setJqPremium(invSource.getJqPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  442. //处理商业不含税
  443. invSource.setSyPremium(invSource.getSyPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  444. //处理非车不含税
  445. invSource.setNonCarPremium(invSource.getNonCarPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  446. //处理手续费金额
  447. invSource.setPremium(
  448. invSource.getJqPremium().multiply(invSource.getJqPremiumRatio())
  449. .add(invSource.getSyPremium().multiply(invSource.getSyPremiumRatio()))
  450. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarPremiumRatio())));
  451. //处理非跟单金额
  452. invSource.setNonCopying(
  453. invSource.getJqPremium().multiply(invSource.getJqNonCopyingRatio())
  454. .add(invSource.getSyPremium().multiply(invSource.getSyNonCopyingRatio()))
  455. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarNonCopyingRatio())));
  456. //处理保司应收金额
  457. invSource.setReceivable(
  458. invSource.getJqPremium().multiply(invSource.getJqReceivableRatio())
  459. .add(invSource.getSyPremium().multiply(invSource.getSyReceivableRatio()))
  460. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarReceivableRatio())));
  461. //处理补贴金额
  462. invSource.setSubsidyAmount(
  463. invSource.getJqPremiumTax().multiply(invSource.getSubsidyRatio())
  464. .add(invSource.getSyPremiumTax().multiply(invSource.getSubsidyRatio()))
  465. .add(invSource.getNonCarPremiumTax().multiply(invSource.getSubsidyRatio())));
  466. //处理应收总金额
  467. invSource.setTotalReceivableAmount(
  468. invSource.getReceivable().add(invSource.getSubsidyAmount()));
  469. //处理最大应付金额
  470. invSource.setMaxReceivable(
  471. invSource.getJqPremiumTax().multiply(invSource.getMaxJqReceivableRatio())
  472. .add(invSource.getSyPremiumTax().multiply(invSource.getMaxSyReceivableRatio()))
  473. .add(invSource.getNonCarPremiumTax().multiply(invSource.getMaxNonCarReceivableRatio())));
  474. invSource.setClearingState("未结算".equals(invSource.getClearingState()) ? "0" :
  475. "已结算".equals(invSource.getClearingState()) ? "1" : invSource.getClearingState());
  476. invSource.setInsuranceClearingState("未结算".equals(invSource.getClearingState()) ? "0" :
  477. "已结算".equals(invSource.getClearingState()) ? "1" : invSource.getClearingState());
  478. return invSourceMapper.updateById(invSource) > 0 ? true : false;
  479. }
  480. @Override
  481. public IPage<InvSettlementSource> getSettlementPage(InvSettlementSourceQueryVo invSettlementSourceQueryVo) {
  482. PageRequest pageRequest = new PageRequest();
  483. pageRequest.setPageNum(invSettlementSourceQueryVo.getPageNum());
  484. pageRequest.setPageSize(invSettlementSourceQueryVo.getPageSize());
  485. Page page = PageRequest.buildPageRequest(pageRequest);
  486. LambdaQueryWrapper<InvSettlementSource> queryWrapper = new LambdaQueryWrapper<>();
  487. if(invSettlementSourceQueryVo.getLicenseno() != null && !"".equals(invSettlementSourceQueryVo.getLicenseno())){
  488. queryWrapper.eq(InvSettlementSource::getLicenseno,invSettlementSourceQueryVo.getLicenseno());
  489. }
  490. if(invSettlementSourceQueryVo.getJqPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getJqPolicyId())){
  491. queryWrapper.eq(InvSettlementSource::getJqPolicyId,invSettlementSourceQueryVo.getJqPolicyId());
  492. }
  493. if(invSettlementSourceQueryVo.getSyPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getSyPolicyId())){
  494. queryWrapper.eq(InvSettlementSource::getSyPolicyId,invSettlementSourceQueryVo.getSyPolicyId());
  495. }
  496. if(invSettlementSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getNonCarPolicyId())){
  497. queryWrapper.eq(InvSettlementSource::getNonCarPolicyId,invSettlementSourceQueryVo.getNonCarPolicyId());
  498. }
  499. if(invSettlementSourceQueryVo.getInsuranceId() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceId())){
  500. queryWrapper.in(InvSettlementSource::getInsuranceId,invSettlementSourceQueryVo.getInsuranceId());
  501. }
  502. if(invSettlementSourceQueryVo.getInsuranceType() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceType())){
  503. queryWrapper.eq(InvSettlementSource::getInsuranceType,invSettlementSourceQueryVo.getInsuranceType());
  504. }
  505. if(invSettlementSourceQueryVo.getSignDate() != null && !"".equals(invSettlementSourceQueryVo.getSignDate()))
  506. {
  507. String[] split = invSettlementSourceQueryVo.getSignDate().split(",");
  508. queryWrapper.between(InvSettlementSource::getSignDate,split[0],split[1]);
  509. }
  510. if(invSettlementSourceQueryVo.getAgencySettlementTime() != null && !"".equals(invSettlementSourceQueryVo.getAgencySettlementTime()))
  511. {
  512. String[] split = invSettlementSourceQueryVo.getAgencySettlementTime().split(",");
  513. queryWrapper.between(InvSettlementSource::getAgencySettlementTime,split[0],split[1]);
  514. }
  515. if(invSettlementSourceQueryVo.getChannel() != null && !"".equals(invSettlementSourceQueryVo.getChannel()))
  516. {
  517. queryWrapper.eq(InvSettlementSource::getChannel,invSettlementSourceQueryVo.getChannel());
  518. }
  519. if(invSettlementSourceQueryVo.getChannelClassification() != null && !"".equals(invSettlementSourceQueryVo.getChannelClassification()))
  520. {
  521. queryWrapper.eq(InvSettlementSource::getChannelClassification,invSettlementSourceQueryVo.getChannelClassification());
  522. }
  523. if(invSettlementSourceQueryVo.getInsuredName() != null && !"".equals(invSettlementSourceQueryVo.getInsuredName())){
  524. queryWrapper.like(InvSettlementSource::getInsuredName,invSettlementSourceQueryVo.getInsuredName());
  525. }
  526. Page pageData = invSettlementSourceMapper.selectPage(page, queryWrapper);
  527. return pageData;
  528. }
  529. @Override
  530. public List<InvSettlementSource> getSettlementList(InvSettlementSourceQueryVo invSettlementSourceQueryVo) {
  531. LambdaQueryWrapper<InvSettlementSource> queryWrapper = new LambdaQueryWrapper<>();
  532. if(invSettlementSourceQueryVo.getLicenseno() != null && !"".equals(invSettlementSourceQueryVo.getLicenseno())){
  533. queryWrapper.eq(InvSettlementSource::getLicenseno,invSettlementSourceQueryVo.getLicenseno());
  534. }
  535. if(invSettlementSourceQueryVo.getJqPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getJqPolicyId())){
  536. queryWrapper.eq(InvSettlementSource::getJqPolicyId,invSettlementSourceQueryVo.getJqPolicyId());
  537. }
  538. if(invSettlementSourceQueryVo.getSyPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getSyPolicyId())){
  539. queryWrapper.eq(InvSettlementSource::getSyPolicyId,invSettlementSourceQueryVo.getSyPolicyId());
  540. }
  541. if(invSettlementSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getNonCarPolicyId())){
  542. queryWrapper.eq(InvSettlementSource::getNonCarPolicyId,invSettlementSourceQueryVo.getNonCarPolicyId());
  543. }
  544. if(invSettlementSourceQueryVo.getInsuranceId() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceId())){
  545. queryWrapper.in(InvSettlementSource::getInsuranceId,invSettlementSourceQueryVo.getInsuranceId());
  546. }
  547. if(invSettlementSourceQueryVo.getInsuranceType() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceType())){
  548. queryWrapper.eq(InvSettlementSource::getInsuranceType,invSettlementSourceQueryVo.getInsuranceType());
  549. }
  550. if(invSettlementSourceQueryVo.getSignDate() != null && !"".equals(invSettlementSourceQueryVo.getSignDate()))
  551. {
  552. String[] split = invSettlementSourceQueryVo.getSignDate().split(",");
  553. queryWrapper.between(InvSettlementSource::getSignDate,split[0],split[1]);
  554. }
  555. List<InvSettlementSource> pageData = invSettlementSourceMapper.selectList(queryWrapper);
  556. return pageData;
  557. }
  558. @Override
  559. public Boolean updateSettlement(InvSettlementSource invSettlementSource) {
  560. //处理结算金额
  561. invSettlementSource.setSettlementAmount(invSettlementSource.getJqPremiumTax().multiply(invSettlementSource.getCompulsoryExportRatio()
  562. .add(invSettlementSource.getSyPremiumTax().multiply(invSettlementSource.getCommercialExportRatio()))
  563. .add(invSettlementSource.getNonCarPremiumTax().multiply(invSettlementSource.getNonVehicleExportRatio()))));
  564. return invSettlementSourceMapper.updateById(invSettlementSource) > 0 ? true : false;
  565. }
  566. @Override
  567. public Integer syncStatus() {
  568. Integer i = invSourceMapper.syncStatus();
  569. return i;
  570. }
  571. @Override
  572. public List<EsmInsCompany> getInsureCompany() {
  573. List<EsmInsCompany> insureCompany = invReceivableMapper.getInsureCompany();
  574. return insureCompany;
  575. }
  576. @Override
  577. public Page<ReceivableAndSettlementVo> getReceivableAndSettlementPage(ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo) {
  578. Page page = new Page();
  579. page.setCurrent(receivableAndSettlementQueryVo.getPageNum());
  580. page.setSize(receivableAndSettlementQueryVo.getPageSize());
  581. Page<ReceivableAndSettlementVo> receivableAndSettlementPage = invReceivableMapper.getReceivableAndSettlementPage(page, receivableAndSettlementQueryVo);
  582. return receivableAndSettlementPage;
  583. }
  584. @Override
  585. public List<ReceivableAndSettlementVo> getReceivableAndSettlementList(ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo) {
  586. List<ReceivableAndSettlementVo> receivableAndSettlementVoList = invReceivableMapper.getReceivableAndSettlementPage(receivableAndSettlementQueryVo);
  587. return receivableAndSettlementVoList;
  588. }
  589. @Override
  590. public Boolean deleteReceivable(String[] ids) {
  591. return invReceivableMapper.deleteReceivable(String.join(",",ids));
  592. }
  593. @Override
  594. public Boolean updateRecivableBatch(InvSource invSource) {
  595. List<String> list = Arrays.asList(invSource.getIds());
  596. List<InvSource> invSources = invSourceMapper.selectBatchIds(list);
  597. invSources.forEach(x -> {
  598. x.setInsuranceClearingState(invSource.getInsuranceClearingState());
  599. invSourceMapper.updateById(x);
  600. });
  601. return true;
  602. }
  603. @Override
  604. public Boolean updateSettlementBatch(InvSettlementSource invSettlementSource) {
  605. List<String> list = Arrays.asList(invSettlementSource.getIds());
  606. List<InvSettlementSource> invSettlementSources = invSettlementSourceMapper.selectBatchIds(list);
  607. invSettlementSources.forEach(x -> {
  608. x.setBusinessOwner(invSettlementSource.getBusinessOwner());
  609. x.setCompulsoryExportRatio(invSettlementSource.getCompulsoryExportRatio());
  610. x.setCommercialExportRatio(invSettlementSource.getCommercialExportRatio());
  611. x.setNonVehicleExportRatio(invSettlementSource.getNonVehicleExportRatio());
  612. invSettlementSourceMapper.updateById(x);
  613. });
  614. return true;
  615. }
  616. @Override
  617. public Boolean addReceivable(InvSource invSource) {
  618. BigDecimal tax = new BigDecimal(1.06);
  619. //处理交强不含税
  620. invSource.setJqPremium(invSource.getJqPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  621. //处理商业不含税
  622. invSource.setSyPremium(invSource.getSyPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  623. //处理非车不含税
  624. invSource.setNonCarPremium(invSource.getNonCarPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  625. //处理手续费金额
  626. invSource.setPremium(
  627. invSource.getJqPremium().multiply(invSource.getJqPremiumRatio())
  628. .add(invSource.getSyPremium().multiply(invSource.getSyPremiumRatio()))
  629. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarPremiumRatio())));
  630. //处理非跟单金额
  631. invSource.setNonCopying(
  632. invSource.getJqPremium().multiply(invSource.getJqNonCopyingRatio())
  633. .add(invSource.getSyPremium().multiply(invSource.getSyNonCopyingRatio()))
  634. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarNonCopyingRatio())));
  635. //处理保司应收金额
  636. invSource.setReceivable(
  637. invSource.getJqPremium().multiply(invSource.getJqReceivableRatio())
  638. .add(invSource.getSyPremium().multiply(invSource.getSyReceivableRatio()))
  639. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarReceivableRatio())));
  640. //处理补贴金额
  641. invSource.setSubsidyAmount(
  642. invSource.getJqPremiumTax().multiply(invSource.getSubsidyRatio())
  643. .add(invSource.getSyPremiumTax().multiply(invSource.getSubsidyRatio()))
  644. .add(invSource.getNonCarPremiumTax().multiply(invSource.getSubsidyRatio())));
  645. //处理应收总金额
  646. invSource.setTotalReceivableAmount(
  647. invSource.getReceivable().add(invSource.getSubsidyAmount()));
  648. //处理最大应付金额
  649. invSource.setMaxReceivable(
  650. invSource.getJqPremiumTax().multiply(invSource.getMaxJqReceivableRatio())
  651. .add(invSource.getSyPremiumTax().multiply(invSource.getMaxSyReceivableRatio()))
  652. .add(invSource.getNonCarPremiumTax().multiply(invSource.getMaxNonCarReceivableRatio())));
  653. boolean save = invSourceService.save(invSource);
  654. return save;
  655. }
  656. }