InvReceivableServiceImpl.java 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  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. if(invSourceQueryVo.getSigningTime() != null && !"".equals(invSourceQueryVo.getSigningTime()))
  327. {
  328. String[] split = invSourceQueryVo.getSigningTime().split(",");
  329. invSourceQueryVo.setSigningTimeStartTime(split[0]);
  330. invSourceQueryVo.setSigningTimeEndTime(split[1]);
  331. }
  332. if(invSourceQueryVo.getClearingTime() != null && !"".equals(invSourceQueryVo.getClearingTime()))
  333. {
  334. String[] split1 = invSourceQueryVo.getClearingTime().split(",");
  335. invSourceQueryVo.setClearingTimeStartTime(split1[0]);
  336. invSourceQueryVo.setClearingTimeEndTime(split1[1]);
  337. }
  338. Page<InvSource> pageData = invSourceMapper.getRecivablePage(page, invSourceQueryVo);
  339. List<InvSource> records = pageData.getRecords();
  340. records.forEach(x->{
  341. x.setClearingState("0".equals(x.getClearingState()) ? "未结算" : "1".equals(x.getClearingState()) ? "已结算" :
  342. "2".equals(x.getClearingState()) ? "孤儿单" : x.getClearingState());
  343. x.setInsuranceClearingState("0".equals(x.getInsuranceClearingState()) ? "未结算" :
  344. "1".equals(x.getInsuranceClearingState()) ? "已结算" : x.getInsuranceClearingState());
  345. });
  346. pageData.setRecords(records);
  347. return pageData;
  348. }
  349. @Override
  350. public List<InvSource> getRecivableList(InvSourceQueryVo invSourceQueryVo) {
  351. String[] split = invSourceQueryVo.getSigningTime().split(",");
  352. invSourceQueryVo.setSigningTimeStartTime(split[0]);
  353. invSourceQueryVo.setSigningTimeEndTime(split[1]);
  354. String[] split1 = invSourceQueryVo.getClearingTime().split(",");
  355. invSourceQueryVo.setClearingTimeStartTime(split1[0]);
  356. invSourceQueryVo.setClearingTimeEndTime(split1[1]);
  357. List<InvSource> pageData = invSourceMapper.getRecivableList(invSourceQueryVo);
  358. pageData.forEach(x->{
  359. x.setClearingState("0".equals(x.getClearingState()) ? "未结算" : "1".equals(x.getClearingState()) ? "已结算" :
  360. "2".equals(x.getClearingState()) ? "孤儿单" : x.getClearingState());
  361. x.setInsuranceClearingState("0".equals(x.getInsuranceClearingState()) ? "未结算" :
  362. "1".equals(x.getInsuranceClearingState()) ? "已结算" : x.getInsuranceClearingState());
  363. });
  364. return pageData;
  365. }
  366. @Override
  367. public Boolean updateRecivable(InvSource invSource) {
  368. BigDecimal tax = new BigDecimal(1.06);
  369. //处理交强不含税
  370. invSource.setJqPremium(invSource.getJqPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  371. //处理商业不含税
  372. invSource.setSyPremium(invSource.getSyPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  373. //处理非车不含税
  374. invSource.setNonCarPremium(invSource.getNonCarPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  375. //处理非跟单比例
  376. invSource.setJqNonCopyingRatio(invSource.getJqReceivableRatio().subtract(invSource.getJqPremiumRatio()));
  377. invSource.setSyNonCopyingRatio(invSource.getSyReceivableRatio().subtract(invSource.getSyPremiumRatio()));
  378. invSource.setNonCarNonCopyingRatio(invSource.getNonCarReceivableRatio().subtract(invSource.getNonCarPremiumRatio()));
  379. //处理手续费金额
  380. invSource.setPremium(
  381. invSource.getJqPremium().multiply(invSource.getJqPremiumRatio())
  382. .add(invSource.getSyPremium().multiply(invSource.getSyPremiumRatio()))
  383. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarPremiumRatio())));
  384. //处理非跟单金额
  385. invSource.setNonCopying(
  386. invSource.getJqPremium().multiply(invSource.getJqNonCopyingRatio())
  387. .add(invSource.getSyPremium().multiply(invSource.getSyNonCopyingRatio()))
  388. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarNonCopyingRatio())));
  389. //处理保司应收金额
  390. invSource.setReceivable(
  391. invSource.getJqPremium().multiply(invSource.getJqReceivableRatio())
  392. .add(invSource.getSyPremium().multiply(invSource.getSyReceivableRatio()))
  393. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarReceivableRatio())));
  394. //处理补贴金额
  395. invSource.setSubsidyAmount(
  396. invSource.getJqPremiumTax().multiply(invSource.getSubsidyRatio())
  397. .add(invSource.getSyPremiumTax().multiply(invSource.getSubsidyRatio()))
  398. .add(invSource.getNonCarPremiumTax().multiply(invSource.getSubsidyRatio())));
  399. //处理应收总金额
  400. invSource.setTotalReceivableAmount(
  401. invSource.getReceivable().add(invSource.getSubsidyAmount()));
  402. //处理最大应付金额
  403. invSource.setMaxReceivable(
  404. invSource.getJqPremiumTax().multiply(invSource.getMaxJqReceivableRatio())
  405. .add(invSource.getSyPremiumTax().multiply(invSource.getMaxSyReceivableRatio()))
  406. .add(invSource.getNonCarPremiumTax().multiply(invSource.getMaxNonCarReceivableRatio())));
  407. invSource.setClearingState("未结算".equals(invSource.getClearingState()) ? "0" :
  408. "已结算".equals(invSource.getClearingState()) ? "1" : invSource.getClearingState());
  409. invSource.setInsuranceClearingState("未结算".equals(invSource.getInsuranceClearingState()) ? "0" :
  410. "已结算".equals(invSource.getInsuranceClearingState()) ? "1" : invSource.getInsuranceClearingState());
  411. return invSourceMapper.updateById(invSource) > 0 ? true : false;
  412. }
  413. @Override
  414. public IPage<InvSettlementSource> getSettlementPage(InvSettlementSourceQueryVo invSettlementSourceQueryVo) {
  415. PageRequest pageRequest = new PageRequest();
  416. pageRequest.setPageNum(invSettlementSourceQueryVo.getPageNum());
  417. pageRequest.setPageSize(invSettlementSourceQueryVo.getPageSize());
  418. Page page = PageRequest.buildPageRequest(pageRequest);
  419. LambdaQueryWrapper<InvSettlementSource> queryWrapper = new LambdaQueryWrapper<>();
  420. if(invSettlementSourceQueryVo.getLicenseno() != null && !"".equals(invSettlementSourceQueryVo.getLicenseno())){
  421. queryWrapper.eq(InvSettlementSource::getLicenseno,invSettlementSourceQueryVo.getLicenseno());
  422. }
  423. if(invSettlementSourceQueryVo.getJqPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getJqPolicyId())){
  424. queryWrapper.eq(InvSettlementSource::getJqPolicyId,invSettlementSourceQueryVo.getJqPolicyId());
  425. }
  426. if(invSettlementSourceQueryVo.getSyPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getSyPolicyId())){
  427. queryWrapper.eq(InvSettlementSource::getSyPolicyId,invSettlementSourceQueryVo.getSyPolicyId());
  428. }
  429. if(invSettlementSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getNonCarPolicyId())){
  430. queryWrapper.eq(InvSettlementSource::getNonCarPolicyId,invSettlementSourceQueryVo.getNonCarPolicyId());
  431. }
  432. if(invSettlementSourceQueryVo.getInsuranceId() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceId())){
  433. queryWrapper.in(InvSettlementSource::getInsuranceId,invSettlementSourceQueryVo.getInsuranceId());
  434. }
  435. if(invSettlementSourceQueryVo.getInsuranceType() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceType())){
  436. queryWrapper.eq(InvSettlementSource::getInsuranceType,invSettlementSourceQueryVo.getInsuranceType());
  437. }
  438. if(invSettlementSourceQueryVo.getSignDate() != null && !"".equals(invSettlementSourceQueryVo.getSignDate()))
  439. {
  440. String[] split = invSettlementSourceQueryVo.getSignDate().split(",");
  441. queryWrapper.between(InvSettlementSource::getSignDate,split[0],split[1]);
  442. }
  443. if(invSettlementSourceQueryVo.getAgencySettlementTime() != null && !"".equals(invSettlementSourceQueryVo.getAgencySettlementTime()))
  444. {
  445. String[] split = invSettlementSourceQueryVo.getAgencySettlementTime().split(",");
  446. queryWrapper.between(InvSettlementSource::getAgencySettlementTime,split[0],split[1]);
  447. }
  448. if(invSettlementSourceQueryVo.getChannel() != null && !"".equals(invSettlementSourceQueryVo.getChannel()))
  449. {
  450. queryWrapper.eq(InvSettlementSource::getChannel,invSettlementSourceQueryVo.getChannel());
  451. }
  452. if(invSettlementSourceQueryVo.getChannelClassification() != null && !"".equals(invSettlementSourceQueryVo.getChannelClassification()))
  453. {
  454. queryWrapper.eq(InvSettlementSource::getChannelClassification,invSettlementSourceQueryVo.getChannelClassification());
  455. }
  456. if(invSettlementSourceQueryVo.getInsuredName() != null && !"".equals(invSettlementSourceQueryVo.getInsuredName())){
  457. queryWrapper.like(InvSettlementSource::getInsuredName,invSettlementSourceQueryVo.getInsuredName());
  458. }
  459. Page pageData = invSettlementSourceMapper.selectPage(page, queryWrapper);
  460. return pageData;
  461. }
  462. @Override
  463. public List<InvSettlementSource> getSettlementList(InvSettlementSourceQueryVo invSettlementSourceQueryVo) {
  464. LambdaQueryWrapper<InvSettlementSource> queryWrapper = new LambdaQueryWrapper<>();
  465. if(invSettlementSourceQueryVo.getLicenseno() != null && !"".equals(invSettlementSourceQueryVo.getLicenseno())){
  466. queryWrapper.eq(InvSettlementSource::getLicenseno,invSettlementSourceQueryVo.getLicenseno());
  467. }
  468. if(invSettlementSourceQueryVo.getJqPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getJqPolicyId())){
  469. queryWrapper.eq(InvSettlementSource::getJqPolicyId,invSettlementSourceQueryVo.getJqPolicyId());
  470. }
  471. if(invSettlementSourceQueryVo.getSyPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getSyPolicyId())){
  472. queryWrapper.eq(InvSettlementSource::getSyPolicyId,invSettlementSourceQueryVo.getSyPolicyId());
  473. }
  474. if(invSettlementSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getNonCarPolicyId())){
  475. queryWrapper.eq(InvSettlementSource::getNonCarPolicyId,invSettlementSourceQueryVo.getNonCarPolicyId());
  476. }
  477. if(invSettlementSourceQueryVo.getInsuranceId() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceId())){
  478. queryWrapper.in(InvSettlementSource::getInsuranceId,invSettlementSourceQueryVo.getInsuranceId());
  479. }
  480. if(invSettlementSourceQueryVo.getInsuranceType() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceType())){
  481. queryWrapper.eq(InvSettlementSource::getInsuranceType,invSettlementSourceQueryVo.getInsuranceType());
  482. }
  483. if(invSettlementSourceQueryVo.getSignDate() != null && !"".equals(invSettlementSourceQueryVo.getSignDate()))
  484. {
  485. String[] split = invSettlementSourceQueryVo.getSignDate().split(",");
  486. queryWrapper.between(InvSettlementSource::getSignDate,split[0],split[1]);
  487. }
  488. List<InvSettlementSource> pageData = invSettlementSourceMapper.selectList(queryWrapper);
  489. return pageData;
  490. }
  491. @Override
  492. public Boolean updateSettlement(InvSettlementSource invSettlementSource) {
  493. //处理结算金额
  494. BigDecimal settlementAmount = invSettlementSource.getJqPremiumTax().multiply(invSettlementSource.getCompulsoryExportRatio())
  495. .add(invSettlementSource.getSyPremiumTax().multiply(invSettlementSource.getCommercialExportRatio()))
  496. .add(invSettlementSource.getNonCarPremiumTax().multiply(invSettlementSource.getNonVehicleExportRatio()));
  497. invSettlementSource.setSettlementAmount(settlementAmount);
  498. return invSettlementSourceMapper.updateById(invSettlementSource) > 0 ? true : false;
  499. }
  500. @Override
  501. public Integer syncStatus() {
  502. Integer i = invSourceMapper.syncStatus();
  503. return i;
  504. }
  505. @Override
  506. public List<EsmInsCompany> getInsureCompany() {
  507. List<EsmInsCompany> insureCompany = invReceivableMapper.getInsureCompany();
  508. return insureCompany;
  509. }
  510. @Override
  511. public Page<ReceivableAndSettlementVo> getReceivableAndSettlementPage(ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo) {
  512. Page page = new Page();
  513. page.setCurrent(receivableAndSettlementQueryVo.getPageNum());
  514. page.setSize(receivableAndSettlementQueryVo.getPageSize());
  515. Page<ReceivableAndSettlementVo> receivableAndSettlementPage = invReceivableMapper.getReceivableAndSettlementPage(page, receivableAndSettlementQueryVo);
  516. return receivableAndSettlementPage;
  517. }
  518. @Override
  519. public List<ReceivableAndSettlementVo> getReceivableAndSettlementList(ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo) {
  520. List<ReceivableAndSettlementVo> receivableAndSettlementVoList = invReceivableMapper.getReceivableAndSettlementPage(receivableAndSettlementQueryVo);
  521. return receivableAndSettlementVoList;
  522. }
  523. @Override
  524. public Boolean deleteReceivable(String[] ids) {
  525. return invReceivableMapper.deleteReceivable(String.join(",",ids));
  526. }
  527. @Override
  528. public Boolean updateRecivableBatch(InvSource invSource) {
  529. List<String> list = Arrays.asList(invSource.getIds());
  530. List<InvSource> invSources = invSourceMapper.selectBatchIds(list);
  531. invSources.forEach(x -> {
  532. x.setInsuranceClearingState(invSource.getInsuranceClearingState());
  533. invSourceMapper.updateById(x);
  534. });
  535. return true;
  536. }
  537. @Override
  538. public Boolean updateSettlementBatch(InvSettlementSource invSettlementSource) {
  539. List<String> list = Arrays.asList(invSettlementSource.getIds());
  540. List<InvSettlementSource> invSettlementSources = invSettlementSourceMapper.selectBatchIds(list);
  541. invSettlementSources.forEach(x -> {
  542. x.setBusinessOwner(invSettlementSource.getBusinessOwner());
  543. x.setCompulsoryExportRatio(invSettlementSource.getCompulsoryExportRatio());
  544. x.setCommercialExportRatio(invSettlementSource.getCommercialExportRatio());
  545. x.setNonVehicleExportRatio(invSettlementSource.getNonVehicleExportRatio());
  546. invSettlementSourceMapper.updateById(x);
  547. });
  548. return true;
  549. }
  550. @Override
  551. public Boolean addReceivable(InvSource invSource) {
  552. invSource.setId(IdGenerate.nextId());
  553. invSource.builder();
  554. BigDecimal tax = new BigDecimal(1.06);
  555. //处理交强不含税
  556. invSource.setJqPremium(invSource.getJqPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  557. //处理商业不含税
  558. invSource.setSyPremium(invSource.getSyPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  559. //处理非车不含税
  560. invSource.setNonCarPremium(invSource.getNonCarPremiumTax().divide(tax,2, RoundingMode.HALF_UP));
  561. //处理非跟单比例
  562. invSource.setJqNonCopyingRatio(invSource.getJqReceivableRatio().subtract(invSource.getJqPremiumRatio()));
  563. invSource.setSyNonCopyingRatio(invSource.getSyReceivableRatio().subtract(invSource.getSyPremiumRatio()));
  564. invSource.setNonCarNonCopyingRatio(invSource.getNonCarReceivableRatio().subtract(invSource.getNonCarPremiumRatio()));
  565. //处理手续费金额
  566. invSource.setPremium(
  567. invSource.getJqPremium().multiply(invSource.getJqPremiumRatio())
  568. .add(invSource.getSyPremium().multiply(invSource.getSyPremiumRatio()))
  569. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarPremiumRatio())));
  570. //处理非跟单金额
  571. invSource.setNonCopying(
  572. invSource.getJqPremium().multiply(invSource.getJqNonCopyingRatio())
  573. .add(invSource.getSyPremium().multiply(invSource.getSyNonCopyingRatio()))
  574. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarNonCopyingRatio())));
  575. //处理保司应收金额
  576. invSource.setReceivable(
  577. invSource.getJqPremium().multiply(invSource.getJqReceivableRatio())
  578. .add(invSource.getSyPremium().multiply(invSource.getSyReceivableRatio()))
  579. .add(invSource.getNonCarPremium().multiply(invSource.getNonCarReceivableRatio())));
  580. //处理补贴金额
  581. invSource.setSubsidyAmount(
  582. invSource.getJqPremiumTax().multiply(invSource.getSubsidyRatio())
  583. .add(invSource.getSyPremiumTax().multiply(invSource.getSubsidyRatio()))
  584. .add(invSource.getNonCarPremiumTax().multiply(invSource.getSubsidyRatio())));
  585. //处理应收总金额
  586. invSource.setTotalReceivableAmount(
  587. invSource.getReceivable().add(invSource.getSubsidyAmount()));
  588. //处理最大应付金额
  589. invSource.setMaxReceivable(
  590. invSource.getJqPremiumTax().multiply(invSource.getMaxJqReceivableRatio())
  591. .add(invSource.getSyPremiumTax().multiply(invSource.getMaxSyReceivableRatio()))
  592. .add(invSource.getNonCarPremiumTax().multiply(invSource.getMaxNonCarReceivableRatio())));
  593. boolean save = invSourceMapper.insert (invSource) > 0 ? true : false;
  594. return save;
  595. }
  596. @Override
  597. public List<String> dataMatching() {
  598. List<String> data = invSourceMapper.dataMatching();
  599. return data;
  600. }
  601. }