InvReceivableServiceImpl.java 39 KB

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