RepalBillServiceImpl.java 70 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246
  1. package com.winhc.repal.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.NumberUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import com.alibaba.fastjson.JSON;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  9. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  10. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  11. import com.winhc.common.base.ApiDataResult;
  12. import com.winhc.common.enums.CodeMsg;
  13. import com.winhc.common.exception.CommonException;
  14. import com.winhc.common.model.base.VOPage;
  15. import com.winhc.repal.cloud.DataMiddlewareService;
  16. import com.winhc.repal.cloud.InCaseService;
  17. import com.winhc.repal.cloud.dto.GetCompanyRiskNumDTO;
  18. import com.winhc.repal.cloud.dto.GetCreditPunishmentLabelDTO;
  19. import com.winhc.repal.cloud.dto.GetFinanceDynamicNumDTO;
  20. import com.winhc.repal.cloud.dto.QueryV8DynamicDTO;
  21. import com.winhc.repal.cloud.vo.*;
  22. import com.winhc.repal.entity.*;
  23. import com.winhc.repal.enums.*;
  24. import com.winhc.repal.model.bo.*;
  25. import com.winhc.repal.model.dto.*;
  26. import com.winhc.repal.model.vo.*;
  27. import com.winhc.repal.repository.RepalBillMapper;
  28. import com.winhc.repal.repository.RepalChangeRecordMapper;
  29. import com.winhc.repal.repository.RepalResponsiblePersonMapper;
  30. import com.winhc.repal.service.*;
  31. import com.winhc.repal.util.DiagnosisUtil;
  32. import com.winhc.repal.util.RepalBillStatusUtil;
  33. import com.winhc.repal.util.ThreadPoolUtil;
  34. import com.winhc.repal.util.UserContextUtil;
  35. import org.slf4j.Logger;
  36. import org.slf4j.LoggerFactory;
  37. import org.springframework.beans.BeanUtils;
  38. import org.springframework.beans.factory.annotation.Autowired;
  39. import org.springframework.stereotype.Service;
  40. import org.springframework.transaction.annotation.Transactional;
  41. import java.math.BigDecimal;
  42. import java.math.RoundingMode;
  43. import java.time.DayOfWeek;
  44. import java.time.LocalDate;
  45. import java.time.LocalDateTime;
  46. import java.time.LocalTime;
  47. import java.time.format.DateTimeFormatter;
  48. import java.time.temporal.TemporalAdjusters;
  49. import java.util.*;
  50. import java.util.function.Function;
  51. import java.util.stream.Collectors;
  52. /**
  53. * @description RepalBill 接口实现类
  54. * @author Generator
  55. * @date 2022-04-08
  56. */
  57. @Service
  58. public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill> implements RepalBillService {
  59. public static final Logger LOGGER = LoggerFactory.getLogger(RepalBillServiceImpl.class);
  60. @Autowired
  61. private RepalBillMapper repalBillMapper;
  62. @Autowired
  63. private RepalResponsiblePersonService repalResponsiblePersonService;
  64. @Autowired
  65. private RepalGroupMemberService repalGroupMemberService;
  66. @Autowired
  67. private RepalCustomerService repalCustomerService;
  68. @Autowired
  69. private DataMiddlewareService dataMiddlewareService;
  70. @Autowired
  71. private InCaseService inCaseService;
  72. @Autowired
  73. private RepalBillDiagnosisService repalBillDiagnosisService;
  74. @Autowired
  75. private RepalChangeRecordService repalChangeRecordService;
  76. @Autowired
  77. private RepalBookService repalBookService;
  78. @Autowired
  79. private RepalRolePermissionService repalRolePermissionService;
  80. @Autowired
  81. private RepalRemindHistoryService repalRemindHistoryService;
  82. @Autowired
  83. private RepalRemindReadInfoService repalRemindReadInfoService;
  84. @Autowired
  85. private RepalBillOperLogService repalBillOperLogService;
  86. @Autowired
  87. private UserExtService userExtService;
  88. @Autowired
  89. private RepalResponsiblePersonMapper repalResponsiblePersonMapper;
  90. @Autowired
  91. private RepalDynamicService repalDynamicService;
  92. @Autowired
  93. private RepalVipService repalVipService;
  94. @Autowired
  95. private RepalCustChargeRelService repalCustChargeRelService;
  96. @Autowired
  97. private CompanyService companyService;
  98. @Autowired
  99. private MessageNoticeService messageNoticeService;
  100. @Override
  101. public RepalBillInfoVO getRepalBillPage(GetRepalBillPageDTO dto) {
  102. long userId = UserContextUtil.getUser().getUserId();
  103. Long groupId = repalGroupMemberService.getUserGroupId(userId);
  104. VOPage<RepalBillPageVO> voPage = new VOPage<>();
  105. voPage.setPageSize(dto.getPageSize());
  106. voPage.setPageNum(dto.getPageNum());
  107. RepalBillInfoVO infoVO = new RepalBillInfoVO();
  108. boolean allFlag = repalRolePermissionService.checkUserPermission(userId,
  109. RepalBillTypeEnum.RECEIVABLE.getCode().equals(dto.getRepalBillType()) ? PermissionEnum.QUERY_ALL_RECEIVABLE.getCode() : PermissionEnum.QUERY_ALL_RECEIPT.getCode());
  110. // 分页数据
  111. Page<RepalBill> repalBillPage = new Page<>(dto.getPageNum(),dto.getPageSize());
  112. BillPageBO billPageBO = new BillPageBO();
  113. BeanUtils.copyProperties(dto, billPageBO);
  114. billPageBO.setUserId(userId);
  115. billPageBO.setAllFlag(allFlag);
  116. billPageBO.setRepalGroupId(groupId);
  117. // 对应1-4到期时间
  118. if (Objects.nonNull(dto.getOverdueType())) {
  119. switch (dto.getOverdueType()) {
  120. case 1:
  121. billPageBO.setStartDate(LocalDate.now());
  122. billPageBO.setEndDate(billPageBO.getStartDate());
  123. break;
  124. case 2:
  125. billPageBO.setStartDate(LocalDate.now().minusDays(7));
  126. billPageBO.setEndDate(LocalDate.now());
  127. break;
  128. case 3:
  129. billPageBO.setStartDate(LocalDate.now().minusDays(30));
  130. billPageBO.setEndDate(LocalDate.now());
  131. break;
  132. case 4:
  133. billPageBO.setStartDate(LocalDate.now().with(TemporalAdjusters.firstDayOfYear()));
  134. billPageBO.setEndDate(LocalDate.now().with(TemporalAdjusters.lastDayOfYear()));
  135. break;
  136. default:
  137. break;
  138. }
  139. }
  140. LOGGER.info("allFlag:[{}]", allFlag);
  141. TotalMoneyBO totalMoneyBO;
  142. TotalMoneyBO overdueBO = new TotalMoneyBO();
  143. TotalMoneyBO totalBO;
  144. BillPageBO totalQueryBO = new BillPageBO();
  145. BillPageBO totalOverdueQueryBO = new BillPageBO();
  146. BillPageBO totalSumBO = new BillPageBO();
  147. BeanUtils.copyProperties(billPageBO, totalQueryBO);
  148. BeanUtils.copyProperties(billPageBO, totalOverdueQueryBO);
  149. BeanUtils.copyProperties(billPageBO, totalSumBO);
  150. totalQueryBO.setOverdueStatus(Objects.isNull(dto.getOverdueStatus()) ? 6 : dto.getOverdueStatus());
  151. totalQueryBO.setTotalFlag(false);
  152. if (Objects.isNull(dto.getOverdueStatus()) || OverdueStatusEnum.已逾期.getCode().equals(dto.getOverdueStatus())) {
  153. totalOverdueQueryBO.setOverdueStatus(OverdueStatusEnum.已逾期.getCode());
  154. }
  155. if (allFlag) {
  156. totalQueryBO.setUserId(null);
  157. totalOverdueQueryBO.setUserId(null);
  158. totalSumBO.setUserId(null);
  159. }
  160. totalMoneyBO = repalBillMapper.getTotalMoneyByGroup(totalQueryBO);
  161. if (OverdueStatusEnum.已逾期.getCode().equals(totalOverdueQueryBO.getOverdueStatus())) {
  162. totalOverdueQueryBO.setTotalFlag(false);
  163. overdueBO = repalBillMapper.getTotalMoneyByGroup(totalOverdueQueryBO);
  164. }
  165. totalSumBO.setTotalFlag(true);
  166. totalBO = repalBillMapper.getTotalMoneyByGroup(totalSumBO);
  167. infoVO.setTotalBillMoneyStr(totalMoneyBO.getTotalMoney().stripTrailingZeros().toPlainString());
  168. infoVO.setTotalBillCount(totalMoneyBO.getTotalCount());
  169. if (OverdueStatusEnum.已逾期.getCode().equals(totalOverdueQueryBO.getOverdueStatus())) {
  170. infoVO.setTotalOverdueCount(overdueBO.getTotalCount());
  171. infoVO.setTotalOverdueStr(overdueBO.getTotalMoney().stripTrailingZeros().toPlainString());
  172. } else {
  173. infoVO.setTotalOverdueStr("0");
  174. infoVO.setTotalOverdueCount(0);
  175. }
  176. if (OverdueStatusEnum.已结清.getCode().equals(dto.getOverdueStatus()) || OverdueStatusEnum.已终止.getCode().equals(dto.getOverdueStatus())) {
  177. infoVO.setTotalBillCount(0);
  178. infoVO.setTotalBillMoneyStr("0");
  179. }
  180. infoVO.setTotalCount(totalBO.getTotalCount());
  181. infoVO.setTotalStr(totalBO.getTotalMoney().stripTrailingZeros().toPlainString());
  182. repalBillPage = repalBillMapper.getRepalBillPage(repalBillPage, billPageBO);
  183. voPage.setTotalPage(Math.toIntExact(repalBillPage.getPages()));
  184. voPage.setTotalNum(repalBillPage.getTotal());
  185. voPage.setDataList(new ArrayList<>());
  186. infoVO.setPage(voPage);
  187. if (CollUtil.isEmpty(repalBillPage.getRecords())) {
  188. return infoVO;
  189. }
  190. // 未读消息
  191. List<Long> billIdList = repalBillPage.getRecords().stream().map(RepalBill::getId).collect(Collectors.toList());
  192. Map<Long, RepalBillRemindUnReadVO> unreadMap = new HashMap<>();
  193. repalBillPage.getRecords().parallelStream().forEach(repalBill -> {
  194. RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userId,repalBill.getId(),repalBill.getRepalBookId());
  195. RepalBillRemindUnReadVO readVO = repalRemindHistoryService.getBillRemindUnReadVO(repalRemindReadInfo.getRiskRemindId(),
  196. repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId(),
  197. repalRemindReadInfo.getFinanceRemindId(),repalBill.getRepalBookId(),repalBill.getId(),
  198. Objects.isNull(billPageBO.getStartDate()) ? null : LocalDateTime.of(billPageBO.getStartDate(), LocalTime.MIN),
  199. Objects.isNull(billPageBO.getEndDate()) ? null : LocalDateTime.of(billPageBO.getEndDate(), LocalTime.MAX));
  200. unreadMap.put(repalBill.getId(), readVO);
  201. });
  202. Map<Long, List<String>> nameMap = repalResponsiblePersonService.getResponsiblePersonNameList(billIdList);
  203. List<RepalCustomer> customerList = repalCustomerService.list(Wrappers.lambdaQuery(RepalCustomer.class).in(RepalCustomer::getCustId,
  204. repalBillPage.getRecords().stream().map(RepalBill::getCustomerId).distinct().collect(Collectors.toList())));
  205. Map<Long, Integer> custMap = customerList.stream().collect(Collectors.toMap(RepalCustomer::getCustId, RepalCustomer::getCustProperty));
  206. voPage.setDataList(repalBillPage.getRecords().stream().map(repalBill -> {
  207. RepalBillPageVO vo = new RepalBillPageVO();
  208. BeanUtils.copyProperties(repalBill, vo);
  209. vo.setRepalBillId(repalBill.getId());
  210. if (nameMap.containsKey(repalBill.getId())) {
  211. vo.setResponsiblePersonNames(String.join("、", nameMap.get(repalBill.getId())));
  212. }
  213. vo.setRepalOverdueStatus(repalBill.getRepalBillStatus() > 1 ? repalBill.getRepalBillStatus() + 1 : repalBill.getRepalBillStatus());
  214. if (RepalBillStatusEnum.PROGRESSING.getCode().equals(vo.getRepalOverdueStatus()) && LocalDate.now().plusDays(3).equals(vo.getEndDate())) {
  215. vo.setRepalOverdueStatus(2);
  216. }
  217. vo.setCustName(repalBill.getCustomerName());
  218. vo.setCustProperty(custMap.get(repalBill.getCustomerId()));
  219. vo.setTotalMoneyStr(repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  220. vo.setReceivableMoneyStr(repalBill.getReceivable().stripTrailingZeros().toPlainString());
  221. // 评分趋势
  222. vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(repalBill.getPreDiagnosisScore(), repalBill.getDiagnosisScore(), repalBill.getPreDiagnosisGrade(), repalBill.getDiagnosisGrade()));
  223. if (Objects.nonNull(repalBill.getDiagnosisScore())) {
  224. vo.setDiagnosisScore(repalBill.getDiagnosisScore().stripTrailingZeros().toPlainString());
  225. }
  226. RepalBillRemindUnReadVO unReadVO = unreadMap.get(vo.getRepalBillId());
  227. if (Objects.nonNull(unReadVO)) {
  228. vo.setDynamicCountList(new ArrayList<Integer>(){{
  229. add(unReadVO.getUnreadRiskCount());
  230. add(unReadVO.getUnreadFinanceCount());
  231. add(unReadVO.getUnreadRankCount());
  232. add(unReadVO.getUnreadOverdueCount());
  233. }});
  234. }
  235. return vo;
  236. }).collect(Collectors.toList()));
  237. return infoVO;
  238. }
  239. @Override
  240. public VOPage<RepalBillPageVO> searchBill(SearchBillDTO dto) {
  241. long userId = UserContextUtil.getUser().getUserId();
  242. Long groupId = repalGroupMemberService.getUserGroupId(userId);
  243. VOPage<RepalBillPageVO> voPage = new VOPage<>();
  244. voPage.setPageSize(dto.getPageSize());
  245. voPage.setPageNum(dto.getPageNum());
  246. // 分页数据
  247. Page<RepalBill> repalBillPage = new Page<>(dto.getPageNum(),dto.getPageSize());
  248. SearchBillPageBO searchBillPageBO = new SearchBillPageBO();
  249. searchBillPageBO.setReceivableFlag(repalRolePermissionService.checkUserPermission(userId, PermissionEnum.QUERY_ALL_RECEIVABLE.getCode()));
  250. searchBillPageBO.setReceiptFlag(repalRolePermissionService.checkUserPermission(userId, PermissionEnum.QUERY_ALL_RECEIPT.getCode()));
  251. searchBillPageBO.setRepalBillType(dto.getRepalBillType());
  252. searchBillPageBO.setKeyword(dto.getKeyword());
  253. searchBillPageBO.setUserId(userId);
  254. searchBillPageBO.setRepalGroupId(groupId);
  255. searchBillPageBO.setRepalBookId(dto.getRepalBookId());
  256. searchBillPageBO.setAllFlag(searchBillPageBO.getReceivableFlag() && searchBillPageBO.getReceiptFlag());
  257. searchBillPageBO.setStatusFlag(dto.getStatusFlag());
  258. repalBillPage = repalBillMapper.searchPage(repalBillPage, searchBillPageBO);
  259. voPage.setTotalPage(Math.toIntExact(repalBillPage.getPages()));
  260. voPage.setTotalNum(repalBillPage.getTotal());
  261. voPage.setDataList(new ArrayList<>());
  262. if (CollUtil.isEmpty(repalBillPage.getRecords())) {
  263. return voPage;
  264. }
  265. // 未读消息
  266. List<Long> billIdList = repalBillPage.getRecords().stream().map(RepalBill::getId).collect(Collectors.toList());
  267. Map<Long, RepalBillRemindUnReadVO> unreadMap = new HashMap<>();
  268. repalBillPage.getRecords().parallelStream().forEach(repalBill -> {
  269. RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userId,repalBill.getId(),repalBill.getRepalBookId());
  270. RepalBillRemindUnReadVO readVO = repalRemindHistoryService.getBillRemindUnReadVO(repalRemindReadInfo.getRiskRemindId(),
  271. repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId(),
  272. repalRemindReadInfo.getFinanceRemindId(),repalBill.getRepalBookId(),repalBill.getId(),
  273. null, null);
  274. unreadMap.put(repalBill.getId(), readVO);
  275. });
  276. Map<Long, List<String>> nameMap = repalResponsiblePersonService.getResponsiblePersonNameList(billIdList);
  277. List<RepalCustomer> customerList = repalCustomerService.list(Wrappers.lambdaQuery(RepalCustomer.class).in(RepalCustomer::getCustId,
  278. repalBillPage.getRecords().stream().map(RepalBill::getCustomerId).distinct().collect(Collectors.toList())));
  279. Map<Long, Integer> custMap = customerList.stream().collect(Collectors.toMap(RepalCustomer::getCustId, RepalCustomer::getCustProperty));
  280. voPage.setDataList(repalBillPage.getRecords().stream().map(repalBill -> {
  281. RepalBillPageVO vo = new RepalBillPageVO();
  282. BeanUtils.copyProperties(repalBill, vo);
  283. vo.setRepalBillId(repalBill.getId());
  284. if (nameMap.containsKey(repalBill.getId())) {
  285. vo.setResponsiblePersonNames(String.join("、", nameMap.get(repalBill.getId())));
  286. }
  287. vo.setRepalOverdueStatus(repalBill.getRepalBillStatus() > 1 ? repalBill.getRepalBillStatus() + 1 : repalBill.getRepalBillStatus());
  288. vo.setCustName(repalBill.getCustomerName());
  289. vo.setCustProperty(custMap.get(repalBill.getCustomerId()));
  290. vo.setTotalMoneyStr(repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  291. vo.setReceivableMoneyStr(repalBill.getReceivable().stripTrailingZeros().toPlainString());
  292. // 评分趋势
  293. vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(repalBill.getPreDiagnosisScore(), repalBill.getDiagnosisScore(), repalBill.getPreDiagnosisGrade(), repalBill.getDiagnosisGrade()));
  294. if (Objects.nonNull(repalBill.getDiagnosisScore())) {
  295. vo.setDiagnosisScore(repalBill.getDiagnosisScore().stripTrailingZeros().toPlainString());
  296. }
  297. RepalBillRemindUnReadVO unReadVO = unreadMap.get(vo.getRepalBillId());
  298. if (Objects.nonNull(unReadVO)) {
  299. vo.setDynamicCountList(new ArrayList<Integer>(){{
  300. add(unReadVO.getUnreadRiskCount());
  301. add(unReadVO.getUnreadFinanceCount());
  302. add(unReadVO.getUnreadRankCount());
  303. add(unReadVO.getUnreadOverdueCount());
  304. }});
  305. }
  306. return vo;
  307. }).collect(Collectors.toList()));
  308. return voPage;
  309. }
  310. @Override
  311. public RepalBillDetailVO getRepalBillDetail(Long repalBillId) {
  312. RepalBill repalBill = this.getById(repalBillId);
  313. // 负责人或高级权限才能查看
  314. boolean queryAllFlag = repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  315. RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.QUERY_ALL_RECEIVABLE.getCode() : PermissionEnum.QUERY_ALL_RECEIPT.getCode());
  316. if (!queryAllFlag &&!repalResponsiblePersonService.getResponsiblePersonId(repalBillId).contains(UserContextUtil.getUser().getUserId())) {
  317. throw new CommonException(CodeMsg.FAILED, "没有查看权限");
  318. }
  319. RepalBillDetailVO vo = new RepalBillDetailVO();
  320. BeanUtils.copyProperties(repalBill, vo);
  321. vo.setRepalBillId(repalBill.getId());
  322. RepalCustomer repalCustomer = repalCustomerService.getById(repalBill.getCustomerId());
  323. vo.setCompanyId(repalCustomer.getCompanyId());
  324. vo.setCustomerId(repalCustomer.getCustId());
  325. vo.setCustProperty(repalCustomer.getCustProperty());
  326. List<String> nameList = repalResponsiblePersonService.getResponsiblePersonName(vo.getRepalBillId());
  327. if (CollUtil.isNotEmpty(nameList)) {
  328. vo.setResponsiblePersonNames(CollUtil.isEmpty(nameList) ? "" : String.join("、", nameList));
  329. }
  330. List<ResponsiblePersonNameVO> personList = repalResponsiblePersonService.getPersonNameList(vo.getRepalBillId());
  331. if (CollUtil.isNotEmpty(personList)) {
  332. vo.setResponsiblePersonNames(personList.stream().map(ResponsiblePersonNameVO::getUserName).collect(Collectors.joining("、")));
  333. vo.setResponsiblePersonList(personList);
  334. }
  335. vo.setTotalMoneyStr(repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  336. vo.setReceiptStr(repalBill.getReceipt().stripTrailingZeros().toPlainString());
  337. vo.setReceivableStr(repalBill.getReceivable().stripTrailingZeros().toPlainString());
  338. // 评分趋势
  339. vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(repalBill.getPreDiagnosisScore(), repalBill.getDiagnosisScore(), repalBill.getPreDiagnosisGrade(), repalBill.getDiagnosisGrade()));
  340. if (Objects.nonNull(repalBill.getDiagnosisScore())) {
  341. vo.setDiagnosisGradeDesc(DiagnosisUtil.getGradeConclusion(repalBill.getDiagnosisScore()));
  342. vo.setDiagnosisScore(repalBill.getDiagnosisScore().stripTrailingZeros().toPlainString());
  343. }
  344. // companyId
  345. if (StrUtil.isNotBlank(vo.getCompanyId())) {
  346. // 财产数量
  347. ApiDataResult<List<FinanceDynamicNumVO>> financeResult = dataMiddlewareService.getFinanceDynamicNumV8List(new GetFinanceDynamicNumDTO().setCompanyIdList(Collections.singletonList(vo.getCompanyId())));
  348. if (Objects.nonNull(financeResult) && CollUtil.isNotEmpty(financeResult.getData())) {
  349. vo.setAssetsNum(financeResult.getData().get(0).getFinanceDynamicNum());
  350. }
  351. // 风险数量
  352. ApiDataResult<List<CompanyRiskNumVO>> riskResult = dataMiddlewareService.getCompanyRiskNumList(new GetCompanyRiskNumDTO(Collections.singletonList(vo.getCompanyId())));
  353. if (Objects.nonNull(riskResult) && CollUtil.isNotEmpty(riskResult.getData())) {
  354. vo.setRiskNum(riskResult.getData().get(0).getRiskNum());
  355. }
  356. // 失信限高标签
  357. ApiDataResult<List<CreditPunishmentLabelListVO>> labelResult = dataMiddlewareService.getCreditPunishmentLabelList(new GetCreditPunishmentLabelDTO(Collections.singletonList(vo.getCompanyId())));
  358. if (Objects.nonNull(labelResult) && CollUtil.isNotEmpty(labelResult.getData())) {
  359. vo.setLabelList(labelResult.getData().get(0).getLabelList());
  360. }
  361. }
  362. if (Objects.nonNull(repalBill.getDiagnosisId())) {
  363. RepalBillDiagnosis repalBillDiagnosis = repalBillDiagnosisService.getById(repalBill.getDiagnosisId());
  364. if (Objects.nonNull(repalBillDiagnosis)) {
  365. try {
  366. ApiDataResult<DiagnosisRecordVO> apiDataResult = inCaseService.getRecordVO(repalBillDiagnosis.getBizId());
  367. if (Objects.nonNull(apiDataResult)) {
  368. vo.setAnalysisList(DiagnosisUtil.convertItemToList(apiDataResult.getData().getResultItem()));
  369. }
  370. } catch (Exception e) {
  371. LOGGER.error("查询评估信息错误", e);
  372. }
  373. }
  374. }
  375. // 合同
  376. if (StrUtil.isNotBlank(repalBill.getContractUrl())) {
  377. List<String> urlList = Arrays.stream(repalBill.getContractUrl().split(";")).collect(Collectors.toList());
  378. vo.setContractList(urlList.stream().map(s -> {
  379. RepalBillDetailVO.BillContract billContract = new RepalBillDetailVO.BillContract();
  380. billContract.setContractUrl(s);
  381. billContract.setContractName(s.substring(s.lastIndexOf("/") + 1));
  382. return billContract;
  383. }).collect(Collectors.toList()));
  384. }
  385. if (RepalBillStatusEnum.OVERDUE.getCode().equals(repalBill.getRepalBillStatus())) {
  386. if (Objects.nonNull(repalBill.getEndDate())) {
  387. if (LocalDate.now().isAfter(repalBill.getEndDate()) || LocalDate.now().compareTo(repalBill.getEndDate()) == 0) {
  388. // 避免天数出现负数
  389. vo.setOverdueDay(Math.toIntExact(LocalDate.now().toEpochDay() - repalBill.getEndDate().toEpochDay()) + 1);
  390. }
  391. }
  392. }
  393. List<RepalChangeRecord> repalChangeRecordList = repalChangeRecordService.list(Wrappers.lambdaQuery(RepalChangeRecord.class)
  394. .eq(RepalChangeRecord::getRepalBillId, vo.getRepalBillId()));
  395. if (CollUtil.isNotEmpty(repalChangeRecordList)) {
  396. vo.setChangeList(repalChangeRecordList.stream().map(t -> {
  397. RepalBillDetailVO.BillMoneyChange billMoneyChange = new RepalBillDetailVO.BillMoneyChange();
  398. billMoneyChange.setChangeTime(t.getTimeCreated());
  399. billMoneyChange.setName(t.getOperUserName());
  400. billMoneyChange.setChangeAmt(t.getTransMoney().setScale(2).toString());
  401. billMoneyChange.setRepalChangeRecordId(t.getId());
  402. StringBuilder desc = new StringBuilder();
  403. String repalBillTypeDesc = RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? "回" : "付";
  404. if (DeletedStatusEnum.NORMAL.getCode().equals(t.getDeleted())) {
  405. desc.append(Objects.isNull(t.getTimeModified()) ? "增加" : "编辑").append(repalBillTypeDesc);
  406. } else {
  407. desc.append("删除").append(repalBillTypeDesc);
  408. billMoneyChange.setRepalChangeRecordId(null);
  409. }
  410. billMoneyChange.setOperTypeDesc(desc.append("款").toString());
  411. return billMoneyChange;
  412. }).collect(Collectors.toList()));
  413. } else {
  414. vo.setChangeList(new ArrayList<>());
  415. }
  416. return vo;
  417. }
  418. @Override
  419. @Transactional(rollbackFor = Exception.class)
  420. public Boolean deleteRepalBillById(DeleteRepalBillDTO dto) {
  421. RepalBill repalBill = this.getById(dto.getRepalBillId());
  422. if (!repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  423. RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.UPDATE_RECEIVABLE.getCode() : PermissionEnum.UPDATE_RECEIPT.getCode())) {
  424. throw new CommonException(CodeMsg.FAILED, "无对应权限");
  425. }
  426. this.update(Wrappers.lambdaUpdate(RepalBill.class).eq(RepalBill::getId, dto.getRepalBillId())
  427. .set(RepalBill::getDeleted, DeletedStatusEnum.DELETE.getCode()));
  428. // 删除关联人
  429. repalResponsiblePersonService.deletePersonByBillId(dto.getRepalBillId());
  430. // 删除回款记录
  431. repalChangeRecordService.delReturnedByBillId(dto.getRepalBillId());
  432. return true;
  433. }
  434. @Override
  435. @Transactional(rollbackFor = Exception.class)
  436. public Boolean settleRepalBillById(SettleRepalBillDTO dto) {
  437. long userId = UserContextUtil.getUser().getUserId();
  438. RepalBill repalBill = this.getById(dto.getRepalBillId());
  439. if (!repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  440. RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.UPDATE_RECEIVABLE.getCode() : PermissionEnum.UPDATE_RECEIPT.getCode())) {
  441. throw new CommonException(CodeMsg.FAILED, "无对应权限");
  442. }
  443. // 结清tag
  444. boolean success = false;
  445. // 金额溢出
  446. if (dto.getMoney().compareTo(repalBill.getReceivable()) >= 0) {
  447. dto.setMoney(repalBill.getReceivable());
  448. success = true;
  449. }
  450. RepalGroupMember member = repalGroupMemberService.getOne(Wrappers.lambdaQuery(RepalGroupMember.class)
  451. .eq(RepalGroupMember::getRepalGroupId, repalGroupMemberService.getUserGroupId(userId))
  452. .eq(RepalGroupMember::getUserId, userId)
  453. .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.NORMAL.getCode()));
  454. if (Objects.isNull(member)) {
  455. throw new CommonException(CodeMsg.FAILED, "成员信息错误");
  456. }
  457. RepalChangeRecord changeRecord = new RepalChangeRecord();
  458. changeRecord.setRepalBookId(repalBill.getRepalBookId());
  459. changeRecord.setRepalBillId(repalBill.getId());
  460. changeRecord.setAfterMoney(repalBill.getReceivable().subtract(dto.getMoney()));
  461. changeRecord.setPreMoney(repalBill.getReceivable());
  462. changeRecord.setTransMoney(dto.getMoney());
  463. changeRecord.setOperUserId(userId);
  464. changeRecord.setRecordDate(dto.getRecordDate());
  465. changeRecord.setOperUserName(member.getMemberUserName());
  466. repalChangeRecordService.save(changeRecord);
  467. // 重新计算金额
  468. repalBill.setReceivable(success ? BigDecimal.ZERO : repalBill.getReceivable().subtract(dto.getMoney()));
  469. repalBill.setReceipt(success ? repalBill.getTotalMoney() : repalBill.getReceipt().add(dto.getMoney()));
  470. this.update(Wrappers.lambdaUpdate(RepalBill.class)
  471. .eq(RepalBill::getId, repalBill.getId())
  472. .set(success, RepalBill::getRepalBillStatus, RepalBillStatusEnum.SUCCESS.getCode())
  473. .set(RepalBill::getReceivable, repalBill.getReceivable())
  474. .set(RepalBill::getReceipt, repalBill.getReceipt())
  475. .set(success, RepalBill::getSettleTime, LocalDateTime.now()));
  476. if(success){
  477. ThreadPoolUtil.executorService.execute(()->sendRepalMsgSuccess(dto.getRepalBillId()));
  478. }
  479. return true;
  480. }
  481. @Override
  482. @Transactional(rollbackFor = Exception.class)
  483. public Boolean addRepalBill(AddRepalBillDTO dto) {
  484. RepalCustomer customer = repalCustomerService.getById(dto.getCustomerId());
  485. if (Objects.isNull(customer)) {
  486. throw new CommonException(CodeMsg.FAILED, "客户信息错误");
  487. }
  488. long groupId = repalGroupMemberService.getUserGroupId(UserContextUtil.getUser().getUserId());
  489. // 评级flag
  490. boolean diagnosisFlag = (CustPropertyEnum.COMPANY.getCode().equals(customer.getCustProperty()) || CustPropertyEnum.GOV.getCode().equals(customer.getCustProperty()))
  491. && RepalBillTypeEnum.RECEIVABLE.getCode().equals(dto.getRepalBillType());
  492. if (diagnosisFlag && StrUtil.isBlank(customer.getCompanyId())) {
  493. throw new CommonException(CodeMsg.FAILED, "公司信息错误");
  494. }
  495. if (!repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  496. RepalBillTypeEnum.RECEIVABLE.getCode().equals(dto.getRepalBillType()) ? PermissionEnum.ADD_RECEIVABLE.getCode() : PermissionEnum.ADD_RECEIPT.getCode())) {
  497. throw new CommonException(CodeMsg.FAILED, "无对应权限");
  498. }
  499. if (Objects.isNull(dto.getRepalBookId())) {
  500. // 新建账本
  501. RepalBook repalBook = new RepalBook();
  502. repalBook.setRepalGroupId(groupId);
  503. repalBook.setRepalBookName("默认账本");
  504. repalBook.setUserId(UserContextUtil.getUser().getUserId());
  505. repalBookService.save(repalBook);
  506. dto.setRepalBookId(repalBook.getId());
  507. }
  508. RepalBill repalBill = new RepalBill();
  509. BeanUtils.copyProperties(dto, repalBill);
  510. repalBill.setCustomerName(customer.getCustName());
  511. repalBill.setUserId(UserContextUtil.getUser().getUserId());
  512. repalBill.setRepalBillStatus(RepalBillStatusUtil.getRepalBillStatus(dto.getEndDate()));
  513. repalBill.setRepalGroupId(groupId);
  514. repalBill.setReceivable(dto.getTotalMoney());
  515. if (CollUtil.isNotEmpty(dto.getContractUrlList())) {
  516. repalBill.setContractUrl(String.join(";", dto.getContractUrlList()));
  517. }
  518. if (!diagnosisFlag) {
  519. repalBill.setRefreshStatus(RefreshStatusEnum.REFRESH_SUCCESS.getCode());
  520. }
  521. this.save(repalBill);
  522. if (diagnosisFlag) {
  523. // 非个人 & 应收,才会评级
  524. repalBillDiagnosisService.addRepalBillDiagnosis(repalBill.getUserId(), repalBill.getId(), dto.getTotalMoney(), Collections.singletonList(customer.getCustName()));
  525. }
  526. // 负责人
  527. if (CollUtil.isNotEmpty(dto.getResponsiblePersonIdList())) {
  528. repalResponsiblePersonService.saveBatch(dto.getResponsiblePersonIdList().stream().map(t -> {
  529. RepalResponsiblePerson person = new RepalResponsiblePerson();
  530. person.setRepalGroupId(groupId);
  531. person.setRepalBookId(dto.getRepalBookId());
  532. person.setRepalBillId(repalBill.getId());
  533. person.setUserId(t);
  534. return person;
  535. }).collect(Collectors.toList()));
  536. }
  537. return true;
  538. }
  539. @Override
  540. @Transactional(rollbackFor = Exception.class)
  541. public Boolean breakRepalBill(BreakRepalBillDTO dto) {
  542. RepalBill repalBill = this.getById(dto.getRepalBillId());
  543. if (Objects.isNull(repalBill)) {
  544. throw new CommonException(CodeMsg.FAILED, "账款错误");
  545. }
  546. if (!repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  547. RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.UPDATE_RECEIVABLE.getCode() : PermissionEnum.UPDATE_RECEIPT.getCode())) {
  548. throw new CommonException(CodeMsg.FAILED, "无对应权限");
  549. }
  550. this.update(Wrappers.lambdaUpdate(RepalBill.class)
  551. .eq(RepalBill::getId, dto.getRepalBillId())
  552. .set(RepalBill::getRepalBillStatus, RepalBillStatusEnum.END.getCode())
  553. .set(StrUtil.isNotBlank(dto.getBreakReason()), RepalBill::getBreakReason, dto.getBreakReason()));
  554. ThreadPoolUtil.executorService.execute(()->sendRepalMsgBreak(dto.getRepalBillId()));
  555. return true;
  556. }
  557. @Override
  558. public Boolean unBreakRepalBill(BreakRepalBillDTO dto) {
  559. RepalBill repalBill = this.getById(dto.getRepalBillId());
  560. if (Objects.isNull(repalBill)) {
  561. throw new CommonException(CodeMsg.FAILED, "账款错误");
  562. }
  563. if (!repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  564. RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.UPDATE_RECEIVABLE.getCode() : PermissionEnum.UPDATE_RECEIPT.getCode())) {
  565. throw new CommonException(CodeMsg.FAILED, "无对应权限");
  566. }
  567. // 逾期标志
  568. boolean overdue = LocalDate.now().isAfter(repalBill.getEndDate());
  569. this.update(Wrappers.lambdaUpdate(RepalBill.class)
  570. .eq(RepalBill::getId, dto.getRepalBillId())
  571. .set(RepalBill::getRepalBillStatus, overdue ? RepalBillStatusEnum.OVERDUE.getCode() : RepalBillStatusEnum.PROGRESSING.getCode())
  572. .set(StrUtil.isNotBlank(dto.getBreakReason()), RepalBill::getBreakReason, dto.getBreakReason()));
  573. return true;
  574. }
  575. @Override
  576. @Transactional(rollbackFor = Exception.class)
  577. public Boolean updateRepalBill(UpdateRepalBillDTO dto) {
  578. RepalBill repalBill = this.getById(dto.getRepalBillId());
  579. if (!repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  580. RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.UPDATE_RECEIVABLE.getCode() : PermissionEnum.UPDATE_RECEIPT.getCode())) {
  581. throw new CommonException(CodeMsg.FAILED, "无对应权限");
  582. }
  583. // 责任人
  584. List<Long> currentIdList = repalResponsiblePersonService.getResponsiblePersonId(repalBill.getId());
  585. List<Long> difference = new ArrayList<>(CollUtil.disjunction(dto.getResponsiblePersonIdList(), currentIdList));
  586. if (CollUtil.isNotEmpty(difference)) {
  587. List<Long> delList = new ArrayList<>();
  588. List<Long> addList = new ArrayList<>();
  589. for (Long aLong : difference) {
  590. if (currentIdList.contains(aLong)) {
  591. // 移除
  592. repalResponsiblePersonService.update(Wrappers.lambdaUpdate(RepalResponsiblePerson.class)
  593. .eq(RepalResponsiblePerson::getRepalBillId, repalBill.getId())
  594. .eq(RepalResponsiblePerson::getUserId, aLong)
  595. .set(RepalResponsiblePerson::getDeleted, DeletedStatusEnum.DELETE.getCode()));
  596. delList.add(aLong);
  597. }
  598. if (dto.getResponsiblePersonIdList().contains(aLong)) {
  599. // 新增
  600. RepalResponsiblePerson person = new RepalResponsiblePerson();
  601. person.setRepalBillId(repalBill.getId());
  602. person.setRepalBookId(repalBill.getRepalBookId());
  603. person.setRepalGroupId(repalBill.getRepalGroupId());
  604. person.setUserId(aLong);
  605. repalResponsiblePersonService.save(person);
  606. addList.add(aLong);
  607. }
  608. }
  609. if(CollUtil.isNotEmpty(delList)){
  610. for(Long userId:delList){
  611. sendRepalMsgDelCharge(userId,dto.getRepalBillId());
  612. }
  613. }
  614. if(CollUtil.isNotEmpty(addList)){
  615. for(Long userId:addList){
  616. sendRepalMsgAddCharge(userId,dto.getRepalBillId());
  617. }
  618. }
  619. }
  620. // 改金额三种状态
  621. if (Objects.isNull(dto.getTotalMoney())) {
  622. throw new CommonException(CodeMsg.FAILED, "账款金额不能为空");
  623. }
  624. if (dto.getTotalMoney().compareTo(repalBill.getReceipt()) < 0) {
  625. String typeStr = RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? "收" : "付";
  626. throw new CommonException(CodeMsg.FAILED, "应" + typeStr + "金额不能小于已" + typeStr + "款");
  627. }
  628. boolean sendFlag = false;
  629. if (dto.getTotalMoney().compareTo(repalBill.getReceipt()) == 0) {
  630. repalBill.setTotalMoney(repalBill.getReceipt());
  631. repalBill.setReceivable(BigDecimal.ZERO);
  632. repalBill.setRepalBillStatus(RepalBillStatusEnum.SUCCESS.getCode());
  633. sendFlag = true;
  634. } else if (dto.getTotalMoney().compareTo(repalBill.getReceipt()) > 0) {
  635. repalBill.setTotalMoney(dto.getTotalMoney());
  636. repalBill.setReceivable(dto.getTotalMoney().subtract(repalBill.getReceipt()));
  637. repalBill.setRepalBillStatus(RepalBillStatusEnum.PROGRESSING.getCode());
  638. }
  639. if (LocalDate.now().isAfter(dto.getEndDate()) && repalBill.getReceivable().compareTo(BigDecimal.ZERO) > 0) {
  640. // 日期 && 应收 > 0
  641. repalBill.setRepalBillStatus(RepalBillStatusEnum.OVERDUE.getCode());
  642. }
  643. this.update(Wrappers.lambdaUpdate(RepalBill.class)
  644. .eq(RepalBill::getId, repalBill.getId())
  645. .set(RepalBill::getEndDate, dto.getEndDate())
  646. .set(RepalBill::getRepalBillStatus, repalBill.getRepalBillStatus())
  647. .set(RepalBill::getRepalBillStage, dto.getRepalBillStage())
  648. .set(RepalBill::getBillRemark, dto.getBillRemark())
  649. .set(RepalBill::getTotalMoney, repalBill.getTotalMoney())
  650. .set(RepalBill::getReceivable, repalBill.getReceivable())
  651. .set(RepalBill::getContractName, dto.getContractName())
  652. .set(RepalBill::getContractEndDate, dto.getContractEndDate())
  653. .set(RepalBill::getContractUrl, String.join( ";", dto.getContractUrlList()))
  654. );
  655. RepalBillOperLog repalBillOperLog = new RepalBillOperLog();
  656. repalBillOperLog.setUserId(UserContextUtil.getUser().getUserId());
  657. repalBillOperLog.setActionCode(RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.UPDATE_RECEIVABLE.getCode() : PermissionEnum.UPDATE_RECEIPT.getCode());
  658. repalBillOperLog.setActionName(RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.UPDATE_RECEIVABLE.getMsg() : PermissionEnum.UPDATE_RECEIPT.getMsg());
  659. repalBillOperLog.setBizType("update");
  660. repalBillOperLog.setBizId(String.valueOf(repalBill.getId()));
  661. repalBillOperLog.setActionContent(JSON.toJSONString(dto));
  662. repalBillOperLogService.save(repalBillOperLog);
  663. if(sendFlag){
  664. ThreadPoolUtil.executorService.execute(()->sendRepalMsgSuccess(dto.getRepalBillId()));
  665. }
  666. return true;
  667. }
  668. @Override
  669. @Transactional(rollbackFor = Exception.class)
  670. public Boolean deleteRepalBillByBookId(Long repalBookId) {
  671. this.update(Wrappers.lambdaUpdate(RepalBill.class)
  672. .eq(RepalBill::getRepalBookId, repalBookId)
  673. .set(RepalBill::getDeleted, DeletedStatusEnum.DELETE.getCode()));
  674. // 责任人也删除
  675. repalResponsiblePersonService.deletePersonByBookId(repalBookId);
  676. return true;
  677. }
  678. @Override
  679. public boolean checkAllBillRefreshStatus(Long repalBookId, Long repalBillId) {
  680. LambdaQueryWrapper<RepalBill> qw = Wrappers.lambdaQuery(RepalBill.class);
  681. qw.eq(RepalBill::getRepalBookId,repalBookId);
  682. qw.ne(RepalBill::getId,repalBillId);
  683. List<RepalBill> results = list(qw);
  684. for(RepalBill accountBill:results){
  685. if(!RefreshStatusEnum.REFRESH_SUCCESS.getCode().equals(accountBill.getRefreshStatus())){
  686. return false;
  687. }
  688. }
  689. return true;
  690. }
  691. @Override
  692. public VOPage<RepalBillPageVO> getCustRepalBillPage(Integer pageNum, Integer pageSize, Long custId) {
  693. VOPage<RepalBillPageVO> voPage = new VOPage<>();
  694. voPage.setPageSize(pageSize);
  695. voPage.setPageNum(pageNum);
  696. // 分页数据
  697. Page<RepalBill> repalBillPage = new Page<>(pageNum,pageSize);
  698. repalBillPage = repalBillMapper.getCustRepalBillPage(repalBillPage,custId);
  699. voPage.setTotalPage(Math.toIntExact(repalBillPage.getPages()));
  700. voPage.setTotalNum(repalBillPage.getTotal());
  701. voPage.setDataList(new ArrayList<>());
  702. if (CollUtil.isEmpty(repalBillPage.getRecords())) {
  703. return voPage;
  704. }
  705. // 未读消息
  706. List<Long> billIdList = repalBillPage.getRecords().stream().map(RepalBill::getId).collect(Collectors.toList());
  707. long userId = UserContextUtil.getUser().getUserId();
  708. Map<Long, RepalBillRemindUnReadVO> unreadMap = new HashMap<>();
  709. repalBillPage.getRecords().parallelStream().forEach(repalBill -> {
  710. RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userId,repalBill.getId(),repalBill.getRepalBookId());
  711. RepalBillRemindUnReadVO readVO = repalRemindHistoryService.getBillRemindUnReadVO(repalRemindReadInfo.getRiskRemindId(),
  712. repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId()
  713. ,repalRemindReadInfo.getFinanceRemindId(),repalBill.getRepalBookId(),repalBill.getId(),
  714. null, null);
  715. unreadMap.put(repalBill.getId(), readVO);
  716. });
  717. Map<Long, List<String>> nameMap = repalResponsiblePersonService.getResponsiblePersonNameList(billIdList);
  718. List<RepalCustomer> customerList = repalCustomerService.list(Wrappers.lambdaQuery(RepalCustomer.class).in(RepalCustomer::getCustId,
  719. repalBillPage.getRecords().stream().map(RepalBill::getCustomerId).distinct().collect(Collectors.toList())));
  720. Map<Long, Integer> custMap = customerList.stream().collect(Collectors.toMap(RepalCustomer::getCustId, RepalCustomer::getCustProperty));
  721. voPage.setDataList(repalBillPage.getRecords().stream().map(t -> {
  722. RepalBillPageVO vo = new RepalBillPageVO();
  723. BeanUtils.copyProperties(t, vo);
  724. vo.setRepalBillId(t.getId());
  725. if(nameMap.containsKey(t.getId())) {
  726. vo.setResponsiblePersonNames(String.join("、", nameMap.get(t.getId())));
  727. }
  728. vo.setRepalOverdueStatus(t.getRepalBillStatus() > 1 ? t.getRepalBillStatus() + 1 : t.getRepalBillStatus());
  729. if (RepalBillStatusEnum.PROGRESSING.getCode().equals(vo.getRepalOverdueStatus()) && LocalDate.now().plusDays(3).equals(vo.getEndDate())) {
  730. vo.setRepalOverdueStatus(2);
  731. }
  732. vo.setCustName(t.getCustomerName());
  733. vo.setCustProperty(custMap.get(t.getCustomerId()));
  734. vo.setTotalMoneyStr(t.getTotalMoney().stripTrailingZeros().toPlainString());
  735. vo.setReceivableMoneyStr(t.getReceivable().stripTrailingZeros().toPlainString());
  736. // 评分趋势
  737. vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(t.getPreDiagnosisScore(), t.getDiagnosisScore(), t.getPreDiagnosisGrade(), t.getDiagnosisGrade()));
  738. if (Objects.nonNull(t.getDiagnosisScore())) {
  739. vo.setDiagnosisScore(t.getDiagnosisScore().stripTrailingZeros().toPlainString());
  740. }
  741. RepalBillRemindUnReadVO unReadVO = unreadMap.get(vo.getRepalBillId());
  742. if (Objects.nonNull(unReadVO)) {
  743. vo.setDynamicCountList(new ArrayList<Integer>(){{
  744. add(unReadVO.getUnreadRiskCount());
  745. add(unReadVO.getUnreadFinanceCount());
  746. add(unReadVO.getUnreadRankCount());
  747. add(unReadVO.getUnreadOverdueCount());
  748. }});
  749. }
  750. return vo;
  751. }).collect(Collectors.toList()));
  752. return voPage;
  753. }
  754. @Override
  755. public RepalManageBillInfoVO queryManageInfo() {
  756. //权限
  757. UserContextBO userContextBO = UserContextUtil.getUser();
  758. boolean allFlag = repalRolePermissionService.checkUserPermission(userContextBO.getUserId(),PermissionEnum.QUERY_ALL_URGE.getCode());
  759. //查询组织编号
  760. RepalGroupMember repalGroupMember = repalGroupMemberService.getOne(Wrappers.lambdaQuery(RepalGroupMember.class).eq(RepalGroupMember::getUserId,userContextBO.getUserId()).eq(RepalGroupMember::getDeleted,Dict.DeletedStatusEnunm.否.getCode()),false);
  761. if(ObjectUtil.isNull(repalGroupMember)){
  762. throw new CommonException(CodeMsg.FAILED,"您还未加入该组织,请联系超级管理员");
  763. }
  764. LocalDate startTime = LocalDate.now().plusDays(7);
  765. ManageBillInfoBO manageBillInfo = repalBillMapper.getManageBillInfo(allFlag,userContextBO.getUserId(),repalGroupMember.getRepalGroupId(),startTime);
  766. RepalManageBillInfoVO repalManageBillInfoVO = new RepalManageBillInfoVO();
  767. if(ObjectUtil.isNull(manageBillInfo.getTotalMoney()) || NumberUtil.equals(BigDecimal.ZERO,manageBillInfo.getTotalMoney())){
  768. repalManageBillInfoVO.setOverdueScaleStr("0");
  769. repalManageBillInfoVO.setTotalOverdueCount(0);
  770. repalManageBillInfoVO.setTotalOverdueStr("0");
  771. repalManageBillInfoVO.setTotalOverdueWeekCount(0);
  772. repalManageBillInfoVO.setTotalOverdueWeekStr("0");
  773. }else {
  774. repalManageBillInfoVO.setTotalOverdueCount(manageBillInfo.getTotalOverdueCount());
  775. repalManageBillInfoVO.setTotalOverdueStr(manageBillInfo.getTotalOverdue().toPlainString());
  776. repalManageBillInfoVO.setTotalOverdueWeekCount(manageBillInfo.getTotalOverdueWeekCount());
  777. repalManageBillInfoVO.setTotalOverdueWeekStr(manageBillInfo.getTotalOverdueWeek().toPlainString());
  778. repalManageBillInfoVO.setOverdueScaleStr(manageBillInfo.getTotalOverdue().divide(manageBillInfo.getTotalMoney(),2, RoundingMode.HALF_UP).toPlainString());
  779. }
  780. return repalManageBillInfoVO;
  781. }
  782. @Override
  783. public VOPage<RepalManageBillPageVO> queryManageBillPage(Integer pageNum, Integer pageSize) {
  784. //权限
  785. UserContextBO userContextBO = UserContextUtil.getUser();
  786. boolean allFlag = repalRolePermissionService.checkUserPermission(userContextBO.getUserId(),PermissionEnum.QUERY_ALL_URGE.getCode());
  787. //查询组织编号
  788. RepalGroupMember repalGroupMember = repalGroupMemberService.getOne(Wrappers.lambdaQuery(RepalGroupMember.class).eq(RepalGroupMember::getUserId,userContextBO.getUserId()).eq(RepalGroupMember::getDeleted,Dict.DeletedStatusEnunm.否.getCode()),false);
  789. if(ObjectUtil.isNull(repalGroupMember)){
  790. throw new CommonException(CodeMsg.FAILED,"您还未加入该组织,请联系超级管理员");
  791. }
  792. LocalDate startTime = LocalDate.now().plusDays(7);
  793. VOPage<RepalManageBillPageVO> voPage = new VOPage<>();
  794. voPage.setPageSize(pageSize);
  795. voPage.setPageNum(pageNum);
  796. // 分页数据
  797. Page<RepalManageBillPageBO> repalBillPage = new Page<>(pageNum,pageSize);
  798. repalBillPage = repalBillMapper.getManageBillPage(repalBillPage,allFlag,userContextBO.getUserId(),repalGroupMember.getRepalGroupId(),startTime);
  799. voPage.setTotalPage(Math.toIntExact(repalBillPage.getPages()));
  800. voPage.setTotalNum(repalBillPage.getTotal());
  801. voPage.setDataList(new ArrayList<>());
  802. if (CollUtil.isEmpty(repalBillPage.getRecords())) {
  803. return voPage;
  804. }
  805. List<RepalManageBillPageVO> vos = new ArrayList<>();
  806. voPage.setDataList(vos);
  807. Map<Long,List<ResponsiblePersonNameVO>> personMap= repalResponsiblePersonMapper.getResponsiblePersonNameList(repalBillPage.getRecords().stream().map(RepalManageBillPageBO::getRepalBillId).collect(Collectors.toList())).stream().collect(Collectors.groupingBy(ResponsiblePersonNameVO::getRepalBillId));
  808. for(RepalManageBillPageBO manageBillPageBO:repalBillPage.getRecords()){
  809. RepalManageBillPageVO vo = new RepalManageBillPageVO();
  810. vos.add(vo);
  811. BeanUtils.copyProperties(manageBillPageBO,vo);
  812. vo.setOverdueDay(Math.abs(manageBillPageBO.getEndDate().toEpochDay() - LocalDate.now().toEpochDay())+1);
  813. vo.setTotalMoneyStr(manageBillPageBO.getTotalMoney().stripTrailingZeros().toPlainString());
  814. vo.setReceivableStr(manageBillPageBO.getReceivable().stripTrailingZeros().toPlainString());
  815. //负责人
  816. if(personMap.containsKey(manageBillPageBO.getRepalBillId())){
  817. List<ResponsiblePersonNameVO> personNames = personMap.get(manageBillPageBO.getRepalBillId());
  818. vo.setResponsiblePersonName(personNames.stream().map(ResponsiblePersonNameVO::getUserName).collect(Collectors.toList()));
  819. }
  820. //催款动态条数
  821. int dynamicCount = repalDynamicService.count(Wrappers.lambdaQuery(RepalDynamic.class).eq(RepalDynamic::getRepalBillId,manageBillPageBO.getRepalBillId()));
  822. vo.setRepalDynamicCount(dynamicCount);
  823. }
  824. return voPage;
  825. }
  826. @Override
  827. public RepalManageBillDetailVO querManageBillDetail(Long repalBillId) {
  828. //不校验权限,默认看到列表的时候已经通过
  829. RepalBill repalBill = this.getById(repalBillId);
  830. RepalManageBillDetailVO vo = new RepalManageBillDetailVO();
  831. BeanUtils.copyProperties(repalBill, vo);
  832. vo.setCustId(repalBill.getCustomerId());
  833. vo.setRepalBillId(repalBill.getId());
  834. RepalBook repalBook = repalBookService.getById(repalBill.getRepalBookId());
  835. if(ObjectUtil.isNotNull(repalBook)){
  836. vo.setRepalBookName(repalBook.getRepalBookName());
  837. }
  838. RepalCustomer repalCustomer = repalCustomerService.getById(repalBill.getCustomerId());
  839. vo.setCompanyId(repalCustomer.getCompanyId());
  840. vo.setCustProperty(repalCustomer.getCustProperty());
  841. List<String> nameList = repalResponsiblePersonService.getResponsiblePersonName(vo.getRepalBillId());
  842. vo.setResponsiblePersonName(nameList);
  843. vo.setTotalMoneyStr(repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  844. vo.setReceiptStr(repalBill.getReceipt().stripTrailingZeros().toPlainString());
  845. vo.setReceivableStr(repalBill.getReceivable().stripTrailingZeros().toPlainString());
  846. vo.setOverdueDay(Math.abs(LocalDate.now().toEpochDay()-repalBill.getEndDate().toEpochDay())+1);
  847. // 评分趋势
  848. vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(repalBill.getPreDiagnosisScore(), repalBill.getDiagnosisScore(), repalBill.getPreDiagnosisGrade(), repalBill.getDiagnosisGrade()));
  849. if (Objects.nonNull(repalBill.getDiagnosisScore())) {
  850. vo.setDiagnosisGradeDesc(DiagnosisUtil.getGradeConclusion(repalBill.getDiagnosisScore()));
  851. vo.setDiagnosisScore(repalBill.getDiagnosisScore().stripTrailingZeros().toPlainString());
  852. }
  853. // companyId
  854. if (StrUtil.isNotBlank(vo.getCompanyId())) {
  855. // 财产数量
  856. ApiDataResult<List<FinanceDynamicNumVO>> financeResult = dataMiddlewareService.getFinanceDynamicNumV8List(new GetFinanceDynamicNumDTO().setCompanyIdList(Collections.singletonList(vo.getCompanyId())));
  857. if (Objects.nonNull(financeResult) && CollUtil.isNotEmpty(financeResult.getData())) {
  858. vo.setAssetsNum(financeResult.getData().get(0).getFinanceDynamicNum());
  859. }
  860. // 风险数量
  861. ApiDataResult<List<CompanyRiskNumVO>> riskResult = dataMiddlewareService.getCompanyRiskNumList(new GetCompanyRiskNumDTO(Collections.singletonList(vo.getCompanyId())));
  862. if (Objects.nonNull(riskResult) && CollUtil.isNotEmpty(riskResult.getData())) {
  863. vo.setRiskNum(riskResult.getData().get(0).getRiskNum());
  864. }
  865. // 失信限高标签
  866. ApiDataResult<List<CreditPunishmentLabelListVO>> labelResult = dataMiddlewareService.getCreditPunishmentLabelList(new GetCreditPunishmentLabelDTO(Collections.singletonList(vo.getCompanyId())));
  867. if (Objects.nonNull(labelResult) && CollUtil.isNotEmpty(labelResult.getData())) {
  868. vo.setLabelList(labelResult.getData().get(0).getLabelList());
  869. }
  870. }
  871. //查询套餐剩余qingk
  872. RepalVip repalVip = repalVipService.getOne(Wrappers.lambdaQuery(RepalVip.class).eq(RepalVip::getRepalGroupId,repalCustomer.getRepalGroupId()),false);
  873. RepalVipVO repalVipVO = new RepalVipVO();
  874. if(ObjectUtil.isNotNull(repalVip)){
  875. BeanUtils.copyProperties(repalVip,repalVipVO);
  876. }
  877. vo.setRepalVip(repalVipVO);
  878. //查询催款动态列表
  879. List<RepalDynamic> dynamics = repalDynamicService.list(Wrappers.lambdaQuery(RepalDynamic.class).eq(RepalDynamic::getRepalBillId,repalBillId).orderByDesc(RepalDynamic::getId));
  880. if(CollUtil.isNotEmpty(dynamics)){
  881. List<RepalDynamicVO> repalDynamicVOs = new ArrayList<>(dynamics.size());
  882. vo.setRepalDynamics(repalDynamicVOs);
  883. Map<Long,RepalGroupMember> memberMap = repalGroupMemberService.list(Wrappers.lambdaQuery(RepalGroupMember.class).in(RepalGroupMember::getUserId,dynamics.stream().map(RepalDynamic::getMemberId).distinct().collect(Collectors.toList()))).stream().collect(Collectors.toMap(RepalGroupMember::getUserId,Function.identity()));
  884. for(RepalDynamic dynamic:dynamics){
  885. RepalDynamicVO repalDynamicVO = new RepalDynamicVO();
  886. repalDynamicVOs.add(repalDynamicVO);
  887. BeanUtils.copyProperties(dynamic,repalDynamicVO);
  888. if(memberMap.containsKey(dynamic.getMemberId())){
  889. RepalGroupMember repalGroupMember = memberMap.get(dynamic.getMemberId());
  890. repalDynamicVO.setMemberUserName(repalGroupMember.getMemberUserName());
  891. }
  892. }
  893. }
  894. return vo;
  895. }
  896. @Override
  897. public List<Long> getBillIdListByBookId(Long repalBookId, Long userId) {
  898. return repalBillMapper.getBillIdListByBookId(repalBookId, userId);
  899. }
  900. @Override
  901. public List<String> getBillGradeByBookId(Long repalBookId, Long userId, LocalDateTime start, LocalDateTime end) {
  902. return repalBillMapper.getBillGradeByBookId(repalBookId, userId, start, end);
  903. }
  904. @Override
  905. public HomeReceivableBO getBillTotal(Integer repalBillStatus, Long userId, Long repalBookId, Integer repalBillType, LocalDate start, LocalDate end) {
  906. return repalBillMapper.getBillTotal(repalBillStatus, userId, repalBookId, repalBillType, start, end);
  907. }
  908. @Override
  909. @Transactional(rollbackFor = Exception.class)
  910. public Boolean transferBill(TransferBillDTO dto) {
  911. // 账款创建人
  912. this.update(Wrappers.lambdaUpdate(RepalBill.class)
  913. .eq(RepalBill::getUserId, dto.getUserId())
  914. .set(RepalBill::getUserId, dto.getTransferUserId()));
  915. // 账款负责人
  916. repalResponsiblePersonService.update(Wrappers.lambdaUpdate(RepalResponsiblePerson.class)
  917. .eq(RepalResponsiblePerson::getUserId, dto.getUserId())
  918. .set(RepalResponsiblePerson::getUserId, dto.getTransferUserId()));
  919. // 客户负责人
  920. repalCustChargeRelService.update(Wrappers.lambdaUpdate(RepalCustChargeRel.class)
  921. .eq(RepalCustChargeRel::getMemberUserId, dto.getUserId())
  922. .set(RepalCustChargeRel::getMemberUserId, dto.getTransferUserId()));
  923. //发送站内信
  924. ThreadPoolUtil.executorService.execute(()->{
  925. List<RepalResponsiblePerson> repalBills = repalResponsiblePersonService.list(Wrappers.lambdaQuery(RepalResponsiblePerson.class)
  926. .eq(RepalResponsiblePerson::getUserId,dto.getUserId())
  927. .eq(RepalResponsiblePerson::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
  928. if(CollUtil.isNotEmpty(repalBills)){
  929. for(RepalResponsiblePerson responsiblePerson : repalBills){
  930. sendRepalMsgAddCharge(dto.getTransferUserId(),responsiblePerson.getRepalBillId());
  931. sendRepalMsgDelCharge(dto.getUserId(),responsiblePerson.getRepalBillId());
  932. }
  933. }
  934. });
  935. return true;
  936. }
  937. @Autowired
  938. private RepalChangeRecordMapper repalChangeRecordMapper;
  939. @Override
  940. public VOPage<ReturnedBillVO> getReturnedBillPage(ReturnedBillDTO dto) {
  941. VOPage<ReturnedBillVO> voPage = new VOPage<>();
  942. voPage.setPageNum(dto.getPageNum());
  943. voPage.setPageSize(dto.getPageSize());
  944. Page<ReturnedBillVO> recordPage = new Page<>(dto.getPageNum(), dto.getPageSize());
  945. //
  946. long userId = UserContextUtil.getUser().getUserId();
  947. boolean allFlag = repalRolePermissionService.checkUserPermission(userId, PermissionEnum.QUERY_ALL_RECEIVABLE.getCode());
  948. dto.setUserId(allFlag ? null : userId);
  949. dto.setRepalGroupId(repalGroupMemberService.getUserGroupId(userId));
  950. // 对应1-4到期时间
  951. if (Objects.nonNull(dto.getOverdueType())) {
  952. switch (dto.getOverdueType()) {
  953. case 1:
  954. dto.setStartDate(LocalDate.now());
  955. dto.setEndDate(LocalDate.now());
  956. break;
  957. case 2:
  958. dto.setStartDate(LocalDate.now().minusDays(7));
  959. dto.setEndDate(LocalDate.now());
  960. break;
  961. case 3:
  962. dto.setStartDate(LocalDate.now().minusDays(30));
  963. dto.setEndDate(LocalDate.now());
  964. break;
  965. case 4:
  966. dto.setStartDate(LocalDate.now().with(TemporalAdjusters.firstDayOfYear()));
  967. dto.setEndDate(LocalDate.now().with(TemporalAdjusters.lastDayOfYear()));
  968. break;
  969. default:
  970. break;
  971. }
  972. }
  973. recordPage = repalChangeRecordMapper.getReturnedBill(recordPage, dto);
  974. voPage.setTotalPage(Math.toIntExact(recordPage.getPages()));
  975. voPage.setTotalNum(recordPage.getTotal());
  976. if (CollUtil.isEmpty(recordPage.getRecords())) {
  977. return voPage;
  978. }
  979. for (ReturnedBillVO record : recordPage.getRecords()) {
  980. record.setMoneyStr(record.getMoney().setScale(2).toString());
  981. }
  982. voPage.setDataList(recordPage.getRecords());
  983. return voPage;
  984. }
  985. @Override
  986. public ReturnedBillDetailVO getReturnedBillDetail(Long repalChangeRecordId) {
  987. ReturnedBillDetailVO vo = new ReturnedBillDetailVO();
  988. RepalChangeRecord record = repalChangeRecordService.getById(repalChangeRecordId);
  989. if (Objects.isNull(record)) {
  990. throw new CommonException(CodeMsg.FAILED, "查询失败");
  991. }
  992. BeanUtils.copyProperties(record, vo);
  993. vo.setRepalChangeRecordId(repalChangeRecordId);
  994. RepalBill bill = this.getById(record.getRepalBillId());
  995. RepalCustomer cust = repalCustomerService.getById(bill.getCustomerId());
  996. List<String> nameList = repalResponsiblePersonService.getResponsiblePersonName(bill.getId());
  997. if (CollUtil.isNotEmpty(nameList)) {
  998. vo.setResponsiblePersonNames(CollUtil.isEmpty(nameList) ? "" : String.join("、", nameList));
  999. }
  1000. vo.setEndDate(bill.getEndDate());
  1001. vo.setTotalMoneyStr(bill.getTotalMoney().setScale(2).toString());
  1002. vo.setReceivableStr(bill.getReceivable().setScale(2).toString());
  1003. vo.setCustProperty(cust.getCustProperty());
  1004. vo.setCustName(cust.getCustName());
  1005. vo.setUserName(record.getOperUserName());
  1006. vo.setRepalBillStatus(bill.getRepalBillStatus());
  1007. vo.setMoneyStr(record.getTransMoney().setScale(2).toString());
  1008. // 评分趋势
  1009. vo.setDiagnosisGrade(bill.getDiagnosisGrade());
  1010. vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(bill.getPreDiagnosisScore(), bill.getDiagnosisScore(), bill.getPreDiagnosisGrade(), bill.getDiagnosisGrade()));
  1011. if (Objects.nonNull(bill.getDiagnosisScore())) {
  1012. vo.setDiagnosisScore(bill.getDiagnosisScore().stripTrailingZeros().toPlainString());
  1013. }
  1014. RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(UserContextUtil.getUser().getUserId(), bill.getId(),bill.getRepalBookId());
  1015. RepalBillRemindUnReadVO readVO = repalRemindHistoryService.getBillRemindUnReadVO(repalRemindReadInfo.getRiskRemindId(),
  1016. repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId(),
  1017. repalRemindReadInfo.getFinanceRemindId(),bill.getRepalBookId(),bill.getId(),
  1018. null, null);
  1019. vo.setDynamicCountList(new ArrayList<Integer>(){{
  1020. add(readVO.getUnreadRiskCount());
  1021. add(readVO.getUnreadFinanceCount());
  1022. add(readVO.getUnreadRankCount());
  1023. add(readVO.getUnreadOverdueCount());
  1024. }});
  1025. return vo;
  1026. }
  1027. @Override
  1028. public DiagnosisSectionVO getDiagnosisDynamic(Long repalBillId) {
  1029. RepalBill repalBill = this.getById(repalBillId);
  1030. if (Objects.isNull(repalBill)) {
  1031. throw new CommonException(CodeMsg.FAILED, "账款id错误");
  1032. }
  1033. if (ObjectUtil.isAllEmpty(repalBill.getPreDiagnosisScore(), repalBill.getDiagnosisScore())) {
  1034. LOGGER.error("没有账款评级");
  1035. return null;
  1036. }
  1037. DiagnosisSectionVO vo = new DiagnosisSectionVO();
  1038. BeanUtils.copyProperties(repalBill, vo);
  1039. vo.setDiagnosisRecordId(repalBill.getDiagnosisId());
  1040. vo.setDiagnosisGrade(repalBill.getDiagnosisGrade());
  1041. vo.setDiagnosisScoreStr(Objects.nonNull(repalBill.getDiagnosisScore()) ? repalBill.getDiagnosisScore().stripTrailingZeros().toPlainString() : "");
  1042. vo.setPreDiagnosisGrade(repalBill.getPreDiagnosisGrade());
  1043. vo.setPreDiagnosisScoreStr(Objects.nonNull(repalBill.getPreDiagnosisScore()) ? repalBill.getPreDiagnosisScore().stripTrailingZeros().toPlainString() : "");
  1044. RepalBillDiagnosis diagnosis = repalBillDiagnosisService.getById(repalBill.getDiagnosisId());
  1045. if (Objects.nonNull(diagnosis)) {
  1046. vo.setDiagnosisRecordId(diagnosis.getBizId());
  1047. }
  1048. QueryV8DynamicDTO dynamicDto = new QueryV8DynamicDTO();
  1049. dynamicDto.setEntityNames(Collections.singletonList(repalBill.getCustomerName()));
  1050. LocalDateTime startDateTime = Objects.isNull(repalBill.getPreDiagnosisDatetime()) ? repalBill.getTimeCreated() : repalBill.getPreDiagnosisDatetime();
  1051. dynamicDto.setStartDate(startDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  1052. dynamicDto.setEndDate(repalBill.getDiagnosisDatetime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  1053. VOPage<V8DynamicVO> resultPage = companyService.queryDynamic(dynamicDto, 1, 10);
  1054. if (Objects.isNull(resultPage) || CollUtil.isEmpty(resultPage.getDataList())) {
  1055. DiagnosisDynamicVO dynamicVO = new DiagnosisDynamicVO();
  1056. dynamicVO.setRtaDesc("该账款信息发生变动(欠款企业、金额有所调整)");
  1057. dynamicVO.setCreateTime(repalBill.getTimeModified().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
  1058. vo.setEsDynamics(Collections.singletonList(dynamicVO));
  1059. return vo;
  1060. }
  1061. vo.setEsDynamics(resultPage.getDataList().stream().map(entity -> {
  1062. DiagnosisDynamicVO diagnosisDynamicVO = new DiagnosisDynamicVO();
  1063. diagnosisDynamicVO.setNewDynamicId(entity.getId());
  1064. diagnosisDynamicVO.setRowKey(entity.getRowkey());
  1065. diagnosisDynamicVO.setCreateTime(entity.getDynamicTime());
  1066. String rtaDesc = DynamicEnum.getDescByTn(entity.getTn());
  1067. rtaDesc = StrUtil.isBlank(rtaDesc) ? "新增动态": (rtaDesc.contains("新增") || rtaDesc.contains("移除")) ? rtaDesc : "新增"+rtaDesc;
  1068. diagnosisDynamicVO.setRtaDesc(rtaDesc);
  1069. diagnosisDynamicVO.setInfoType(entity.getInfoType());
  1070. diagnosisDynamicVO.setTn(entity.getTn());
  1071. diagnosisDynamicVO.setNewRemindContent(JSON.toJSONString(entity.getDynamicJSON()));
  1072. diagnosisDynamicVO.setRouting(DynamicEnum.getRoutingByTn(entity.getTn()));
  1073. return diagnosisDynamicVO;
  1074. }).collect(Collectors.toList()));
  1075. return vo;
  1076. }
  1077. /**
  1078. * 添加负责人 给账款其他负责人发
  1079. * @param userId
  1080. * @param repalBillId
  1081. */
  1082. private void sendRepalMsgAddCharge(Long userId,Long repalBillId){
  1083. RepalBill repalBill = getById(repalBillId);
  1084. if(ObjectUtil.isNull(repalBill)){
  1085. return;
  1086. }
  1087. RepalGroupMember repalGroupMember = repalGroupMemberService.getMemberByUserId(userId);
  1088. if(ObjectUtil.isNull(repalGroupMember)){
  1089. return;
  1090. }
  1091. List<RepalResponsiblePerson> repalResponsiblePersonList = repalResponsiblePersonService.list(Wrappers.lambdaQuery(RepalResponsiblePerson.class)
  1092. .eq(RepalResponsiblePerson::getRepalBillId,repalBillId)
  1093. .ne(RepalResponsiblePerson::getUserId,userId)
  1094. .eq(RepalResponsiblePerson::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
  1095. if(CollUtil.isNotEmpty(repalResponsiblePersonList)){
  1096. Map<String,String> paraMap = new HashMap<>();
  1097. paraMap.put("name",repalGroupMember.getMemberUserName());
  1098. paraMap.put("custName",repalBill.getCustomerName());
  1099. paraMap.put("totalMoney",repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  1100. String billType = RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? RepalBillTypeEnum.RECEIVABLE.getDesc() : RepalBillTypeEnum.RECEIPT.getDesc();
  1101. paraMap.put("billType", billType+"账款");
  1102. paraMap.put("repalBillId",repalBillId+"");
  1103. for(RepalResponsiblePerson responsiblePerson:repalResponsiblePersonList) {
  1104. messageNoticeService.saveRepalMsg(responsiblePerson.getUserId(), MsgNameEnum.回款宝添加负责人, paraMap);
  1105. }
  1106. }
  1107. }
  1108. /**
  1109. * 删除负责人 给账款其他负责人发
  1110. * @param userId
  1111. * @param repalBillId
  1112. */
  1113. private void sendRepalMsgDelCharge(Long userId,Long repalBillId){
  1114. RepalBill repalBill = getById(repalBillId);
  1115. if(ObjectUtil.isNull(repalBill)){
  1116. return;
  1117. }
  1118. RepalGroupMember repalGroupMember = repalGroupMemberService.getMemberByUserId(userId);
  1119. if(ObjectUtil.isNull(repalGroupMember)){
  1120. return;
  1121. }
  1122. List<RepalResponsiblePerson> repalResponsiblePersonList = repalResponsiblePersonService.list(Wrappers.lambdaQuery(RepalResponsiblePerson.class)
  1123. .eq(RepalResponsiblePerson::getRepalBillId,repalBillId)
  1124. .ne(RepalResponsiblePerson::getUserId,userId)
  1125. .eq(RepalResponsiblePerson::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
  1126. if(CollUtil.isNotEmpty(repalResponsiblePersonList)){
  1127. Map<String,String> paraMap = new HashMap<>();
  1128. paraMap.put("name",repalGroupMember.getMemberUserName());
  1129. paraMap.put("custName",repalBill.getCustomerName());
  1130. paraMap.put("totalMoney",repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  1131. String billType = RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? RepalBillTypeEnum.RECEIVABLE.getDesc() : RepalBillTypeEnum.RECEIPT.getDesc();
  1132. paraMap.put("billType", billType+"账款");
  1133. paraMap.put("repalBillId",repalBillId+"");
  1134. for(RepalResponsiblePerson responsiblePerson:repalResponsiblePersonList) {
  1135. messageNoticeService.saveRepalMsg(responsiblePerson.getUserId(), MsgNameEnum.回款宝删除负责人, paraMap);
  1136. }
  1137. }
  1138. }
  1139. /**
  1140. * 终止账款 给账款负责人发
  1141. * @param repalBillId
  1142. */
  1143. private void sendRepalMsgBreak(Long repalBillId){
  1144. RepalBill repalBill = getById(repalBillId);
  1145. if(ObjectUtil.isNull(repalBill)){
  1146. return;
  1147. }
  1148. List<RepalResponsiblePerson> repalResponsiblePersonList = repalResponsiblePersonService.list(Wrappers.lambdaQuery(RepalResponsiblePerson.class)
  1149. .eq(RepalResponsiblePerson::getRepalBillId,repalBillId)
  1150. .eq(RepalResponsiblePerson::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
  1151. if(CollUtil.isNotEmpty(repalResponsiblePersonList)){
  1152. Map<String,String> paraMap = new HashMap<>();
  1153. paraMap.put("custName",repalBill.getCustomerName());
  1154. paraMap.put("totalMoney",repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  1155. String billType = RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? RepalBillTypeEnum.RECEIVABLE.getDesc() : RepalBillTypeEnum.RECEIPT.getDesc();
  1156. paraMap.put("billType", billType+"账款");
  1157. paraMap.put("repalBillId",repalBillId+"");
  1158. for(RepalResponsiblePerson responsiblePerson:repalResponsiblePersonList) {
  1159. messageNoticeService.saveRepalMsg(responsiblePerson.getUserId(), MsgNameEnum.回款宝账款终止, paraMap);
  1160. }
  1161. }
  1162. }
  1163. /**
  1164. * 结清账款 给账款负责人发
  1165. * @param repalBillId
  1166. */
  1167. private void sendRepalMsgSuccess(Long repalBillId){
  1168. RepalBill repalBill = getById(repalBillId);
  1169. if(ObjectUtil.isNull(repalBill)){
  1170. return;
  1171. }
  1172. List<RepalResponsiblePerson> repalResponsiblePersonList = repalResponsiblePersonService.list(Wrappers.lambdaQuery(RepalResponsiblePerson.class)
  1173. .eq(RepalResponsiblePerson::getRepalBillId,repalBillId)
  1174. .eq(RepalResponsiblePerson::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
  1175. if(CollUtil.isNotEmpty(repalResponsiblePersonList)){
  1176. Map<String,String> paraMap = new HashMap<>();
  1177. paraMap.put("custName",repalBill.getCustomerName());
  1178. paraMap.put("totalMoney",repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  1179. String billType = RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? RepalBillTypeEnum.RECEIVABLE.getDesc() : RepalBillTypeEnum.RECEIPT.getDesc();
  1180. paraMap.put("billType", billType+"账款");
  1181. paraMap.put("repalBillId",repalBillId+"");
  1182. for(RepalResponsiblePerson responsiblePerson:repalResponsiblePersonList) {
  1183. messageNoticeService.saveRepalMsg(responsiblePerson.getUserId(), MsgNameEnum.回款宝账款结清, paraMap);
  1184. }
  1185. }
  1186. }
  1187. }