RepalBillServiceImpl.java 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856
  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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  7. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  10. import com.winhc.common.base.ApiDataResult;
  11. import com.winhc.common.enums.CodeMsg;
  12. import com.winhc.common.exception.CommonException;
  13. import com.winhc.common.model.base.VOPage;
  14. import com.winhc.repal.cloud.DataMiddlewareService;
  15. import com.winhc.repal.cloud.InCaseService;
  16. import com.winhc.repal.cloud.dto.GetCompanyRiskNumDTO;
  17. import com.winhc.repal.cloud.dto.GetCreditPunishmentLabelDTO;
  18. import com.winhc.repal.cloud.dto.GetFinanceDynamicNumDTO;
  19. import com.winhc.repal.cloud.vo.CompanyRiskNumVO;
  20. import com.winhc.repal.cloud.vo.CreditPunishmentLabelListVO;
  21. import com.winhc.repal.cloud.vo.DiagnosisRecordVO;
  22. import com.winhc.repal.cloud.vo.FinanceDynamicNumVO;
  23. import com.winhc.repal.entity.*;
  24. import com.winhc.repal.enums.*;
  25. import com.winhc.repal.model.bo.*;
  26. import com.winhc.repal.model.dto.*;
  27. import com.winhc.repal.model.vo.*;
  28. import com.winhc.repal.repository.RepalBillMapper;
  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.UserContextUtil;
  34. import org.slf4j.Logger;
  35. import org.slf4j.LoggerFactory;
  36. import org.springframework.beans.BeanUtils;
  37. import org.springframework.beans.factory.annotation.Autowired;
  38. import org.springframework.stereotype.Service;
  39. import org.springframework.transaction.annotation.Transactional;
  40. import java.math.BigDecimal;
  41. import java.math.RoundingMode;
  42. import java.time.DayOfWeek;
  43. import java.time.LocalDate;
  44. import java.time.LocalDateTime;
  45. import java.time.LocalTime;
  46. import java.time.temporal.TemporalAdjusters;
  47. import java.util.*;
  48. import java.util.function.Function;
  49. import java.util.stream.Collectors;
  50. /**
  51. * @description RepalBill 接口实现类
  52. * @author Generator
  53. * @date 2022-04-08
  54. */
  55. @Service
  56. public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill> implements RepalBillService {
  57. public static final Logger LOGGER = LoggerFactory.getLogger(RepalBillServiceImpl.class);
  58. @Autowired
  59. private RepalBillMapper repalBillMapper;
  60. @Autowired
  61. private RepalResponsiblePersonService repalResponsiblePersonService;
  62. @Autowired
  63. private RepalGroupMemberService repalGroupMemberService;
  64. @Autowired
  65. private RepalCustomerService repalCustomerService;
  66. @Autowired
  67. private DataMiddlewareService dataMiddlewareService;
  68. @Autowired
  69. private InCaseService inCaseService;
  70. @Autowired
  71. private RepalBillDiagnosisService repalBillDiagnosisService;
  72. @Autowired
  73. private RepalChangeRecordService repalChangeRecordService;
  74. @Autowired
  75. private RepalBookService repalBookService;
  76. @Autowired
  77. private RepalRolePermissionService repalRolePermissionService;
  78. @Autowired
  79. private RepalRemindHistoryService repalRemindHistoryService;
  80. @Autowired
  81. private RepalRemindReadInfoService repalRemindReadInfoService;
  82. @Autowired
  83. private RepalBillOperLogService repalBillOperLogService;
  84. @Autowired
  85. private UserExtService userExtService;
  86. @Autowired
  87. private RepalResponsiblePersonMapper repalResponsiblePersonMapper;
  88. @Autowired
  89. private RepalDynamicService repalDynamicService;
  90. @Autowired
  91. private RepalVipService repalVipService;
  92. @Autowired
  93. private RepalCustChargeRelService repalCustChargeRelService;
  94. @Override
  95. public RepalBillInfoVO getRepalBillPage(GetRepalBillPageDTO dto) {
  96. long userId = UserContextUtil.getUser().getUserId();
  97. Long groupId = repalGroupMemberService.getUserGroupId(userId);
  98. VOPage<RepalBillPageVO> voPage = new VOPage<>();
  99. voPage.setPageSize(dto.getPageSize());
  100. voPage.setPageNum(dto.getPageNum());
  101. RepalBillInfoVO infoVO = new RepalBillInfoVO();
  102. boolean allFlag = repalRolePermissionService.checkUserPermission(userId,
  103. RepalBillTypeEnum.RECEIVABLE.getCode().equals(dto.getRepalBillType()) ? PermissionEnum.QUERY_ALL_RECEIVABLE.getCode() : PermissionEnum.QUERY_ALL_RECEIPT.getCode());
  104. LOGGER.info("allFlag:[{}]", allFlag);
  105. TotalMoneyBO totalMoneyBO;
  106. TotalMoneyBO overdueBO;
  107. TotalMoneyBO totalBO;
  108. if (allFlag) {
  109. totalMoneyBO = repalBillMapper.getTotalMoneyByGroup(groupId, dto.getRepalBillType(), RepalBillStatusEnum.PROGRESSING.getCode(), dto.getRepalBookId());
  110. overdueBO = repalBillMapper.getTotalMoneyByGroup(groupId, dto.getRepalBillType(), RepalBillStatusEnum.OVERDUE.getCode(), dto.getRepalBookId());
  111. totalBO = repalBillMapper.getTotalMoneyByGroup(groupId, dto.getRepalBillType(), null, dto.getRepalBookId());
  112. } else {
  113. // 只查询自己负责的
  114. totalMoneyBO = repalBillMapper.getTotalMoneyByUser(userId, groupId, dto.getRepalBillType(), RepalBillStatusEnum.PROGRESSING.getCode(), dto.getRepalBookId());
  115. overdueBO = repalBillMapper.getTotalMoneyByUser(userId, groupId, dto.getRepalBillType(), RepalBillStatusEnum.OVERDUE.getCode(), dto.getRepalBookId());
  116. totalBO = repalBillMapper.getTotalMoneyByUser(userId, groupId, dto.getRepalBillType(), null, dto.getRepalBookId());
  117. }
  118. infoVO.setTotalBillMoneyStr(totalMoneyBO.getTotalMoney().stripTrailingZeros().toPlainString());
  119. infoVO.setTotalBillCount(totalMoneyBO.getTotalCount());
  120. infoVO.setTotalOverdueCount(overdueBO.getTotalCount());
  121. infoVO.setTotalOverdueStr(overdueBO.getTotalMoney().stripTrailingZeros().toPlainString());
  122. infoVO.setTotalCount(totalBO.getTotalCount());
  123. infoVO.setTotalStr(totalBO.getTotalMoney().stripTrailingZeros().toPlainString());
  124. // 分页数据
  125. Page<RepalBill> repalBillPage = new Page<>(dto.getPageNum(),dto.getPageSize());
  126. BillPageBO billPageBO = new BillPageBO();
  127. BeanUtils.copyProperties(dto, billPageBO);
  128. billPageBO.setUserId(userId);
  129. billPageBO.setAllFlag(allFlag);
  130. billPageBO.setRepalGroupId(groupId);
  131. // 对应1-4到期时间
  132. if (Objects.nonNull(dto.getOverdueType())) {
  133. switch (dto.getOverdueType()) {
  134. case 1:
  135. billPageBO.setStartDate(LocalDate.now());
  136. billPageBO.setEndDate(billPageBO.getStartDate());
  137. break;
  138. case 2:
  139. billPageBO.setStartDate(LocalDate.now().with(DayOfWeek.MONDAY));
  140. billPageBO.setEndDate(LocalDate.now().with(DayOfWeek.SUNDAY));
  141. break;
  142. case 3:
  143. billPageBO.setStartDate(LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()));
  144. billPageBO.setEndDate(LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()));
  145. case 4:
  146. billPageBO.setStartDate(LocalDate.now().with(TemporalAdjusters.firstDayOfYear()));
  147. billPageBO.setEndDate(LocalDate.now().with(TemporalAdjusters.lastDayOfYear()));
  148. break;
  149. default:
  150. break;
  151. }
  152. }
  153. repalBillPage = repalBillMapper.getRepalBillPage(repalBillPage, billPageBO);
  154. voPage.setTotalPage(Math.toIntExact(repalBillPage.getPages()));
  155. voPage.setTotalNum(repalBillPage.getTotal());
  156. voPage.setDataList(new ArrayList<>());
  157. infoVO.setPage(voPage);
  158. if (CollUtil.isEmpty(repalBillPage.getRecords())) {
  159. return infoVO;
  160. }
  161. // 未读消息
  162. List<Long> billIdList = repalBillPage.getRecords().stream().map(RepalBill::getId).collect(Collectors.toList());
  163. Map<Long, RepalBillRemindUnReadVO> unreadMap = new HashMap<>();
  164. repalBillPage.getRecords().parallelStream().forEach(repalBill -> {
  165. RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userId,repalBill.getId(),repalBill.getRepalBookId());
  166. RepalBillRemindUnReadVO readVO = repalRemindHistoryService.getBillRemindUnReadVO(repalRemindReadInfo.getRiskRemindId(),
  167. repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId(),
  168. repalRemindReadInfo.getFinanceRemindId(),repalBill.getRepalBookId(),repalBill.getId(),
  169. Objects.isNull(billPageBO.getStartDate()) ? null : LocalDateTime.of(billPageBO.getStartDate(), LocalTime.MIN),
  170. Objects.isNull(billPageBO.getEndDate()) ? null : LocalDateTime.of(billPageBO.getEndDate(), LocalTime.MAX));
  171. unreadMap.put(repalBill.getId(), readVO);
  172. });
  173. Map<Long, List<String>> nameMap = repalResponsiblePersonService.getResponsiblePersonNameList(billIdList);
  174. List<RepalCustomer> customerList = repalCustomerService.list(Wrappers.lambdaQuery(RepalCustomer.class).in(RepalCustomer::getCustId,
  175. repalBillPage.getRecords().stream().map(RepalBill::getCustomerId).distinct().collect(Collectors.toList())));
  176. Map<Long, Integer> custMap = customerList.stream().collect(Collectors.toMap(RepalCustomer::getCustId, RepalCustomer::getCustProperty));
  177. voPage.setDataList(repalBillPage.getRecords().stream().map(repalBill -> {
  178. RepalBillPageVO vo = new RepalBillPageVO();
  179. BeanUtils.copyProperties(repalBill, vo);
  180. vo.setRepalBillId(repalBill.getId());
  181. if (nameMap.containsKey(repalBill.getId())) {
  182. vo.setResponsiblePersonNames(String.join("、", nameMap.get(repalBill.getId())));
  183. }
  184. vo.setRepalOverdueStatus(repalBill.getRepalBillStatus() > 1 ? repalBill.getRepalBillStatus() + 1 : repalBill.getRepalBillStatus());
  185. if (RepalBillStatusEnum.PROGRESSING.getCode().equals(vo.getRepalOverdueStatus()) && LocalDate.now().plusDays(3).equals(vo.getEndDate())) {
  186. vo.setRepalOverdueStatus(2);
  187. }
  188. vo.setCustName(repalBill.getCustomerName());
  189. vo.setCustProperty(custMap.get(repalBill.getCustomerId()));
  190. vo.setTotalMoneyStr(repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  191. vo.setReceivableMoneyStr(repalBill.getReceivable().stripTrailingZeros().toPlainString());
  192. // 评分趋势
  193. vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(repalBill.getPreDiagnosisScore(), repalBill.getDiagnosisScore(), repalBill.getPreDiagnosisGrade(), repalBill.getDiagnosisGrade()));
  194. if (Objects.nonNull(repalBill.getDiagnosisScore())) {
  195. vo.setDiagnosisScore(repalBill.getDiagnosisScore().stripTrailingZeros().toPlainString());
  196. }
  197. RepalBillRemindUnReadVO unReadVO = unreadMap.get(vo.getRepalBillId());
  198. if (Objects.nonNull(unReadVO)) {
  199. vo.setDynamicCountList(new ArrayList<Integer>(){{
  200. add(unReadVO.getUnreadRiskCount());
  201. add(unReadVO.getUnreadFinanceCount());
  202. add(unReadVO.getUnreadRankCount());
  203. add(unReadVO.getUnreadOverdueCount());
  204. }});
  205. }
  206. return vo;
  207. }).collect(Collectors.toList()));
  208. return infoVO;
  209. }
  210. @Override
  211. public VOPage<RepalBillPageVO> searchBill(SearchBillDTO dto) {
  212. long userId = UserContextUtil.getUser().getUserId();
  213. Long groupId = repalGroupMemberService.getUserGroupId(userId);
  214. VOPage<RepalBillPageVO> voPage = new VOPage<>();
  215. voPage.setPageSize(dto.getPageSize());
  216. voPage.setPageNum(dto.getPageNum());
  217. // 分页数据
  218. Page<RepalBill> repalBillPage = new Page<>(dto.getPageNum(),dto.getPageSize());
  219. SearchBillPageBO searchBillPageBO = new SearchBillPageBO();
  220. if (Objects.isNull(dto.getRepalBillType())) {
  221. searchBillPageBO.setReceivableFlag(repalRolePermissionService.checkUserPermission(userId, PermissionEnum.QUERY_ALL_RECEIVABLE.getCode()));
  222. searchBillPageBO.setReceiptFlag(repalRolePermissionService.checkUserPermission(userId, PermissionEnum.QUERY_ALL_RECEIPT.getCode()));
  223. } else {
  224. if (RepalBillTypeEnum.RECEIVABLE.getCode().equals(dto.getRepalBillType())) {
  225. searchBillPageBO.setReceivableFlag(repalRolePermissionService.checkUserPermission(userId, PermissionEnum.QUERY_ALL_RECEIVABLE.getCode()));
  226. searchBillPageBO.setReceiptFlag(false);
  227. } else {
  228. searchBillPageBO.setReceivableFlag(false);
  229. searchBillPageBO.setReceiptFlag(repalRolePermissionService.checkUserPermission(userId, PermissionEnum.QUERY_ALL_RECEIPT.getCode()));
  230. }
  231. }
  232. searchBillPageBO.setUserId(userId);
  233. searchBillPageBO.setRepalGroupId(groupId);
  234. searchBillPageBO.setRepalBookId(dto.getRepalBookId());
  235. repalBillPage = repalBillMapper.searchPage(repalBillPage, searchBillPageBO);
  236. voPage.setTotalPage(Math.toIntExact(repalBillPage.getPages()));
  237. voPage.setTotalNum(repalBillPage.getTotal());
  238. voPage.setDataList(new ArrayList<>());
  239. if (CollUtil.isEmpty(repalBillPage.getRecords())) {
  240. return voPage;
  241. }
  242. // 未读消息
  243. List<Long> billIdList = repalBillPage.getRecords().stream().map(RepalBill::getId).collect(Collectors.toList());
  244. Map<Long, RepalBillRemindUnReadVO> unreadMap = new HashMap<>();
  245. repalBillPage.getRecords().parallelStream().forEach(repalBill -> {
  246. RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userId,repalBill.getId(),repalBill.getRepalBookId());
  247. RepalBillRemindUnReadVO readVO = repalRemindHistoryService.getBillRemindUnReadVO(repalRemindReadInfo.getRiskRemindId(),
  248. repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId(),
  249. repalRemindReadInfo.getFinanceRemindId(),repalBill.getRepalBookId(),repalBill.getId(),
  250. null, null);
  251. unreadMap.put(repalBill.getId(), readVO);
  252. });
  253. Map<Long, List<String>> nameMap = repalResponsiblePersonService.getResponsiblePersonNameList(billIdList);
  254. List<RepalCustomer> customerList = repalCustomerService.list(Wrappers.lambdaQuery(RepalCustomer.class).in(RepalCustomer::getCustId,
  255. repalBillPage.getRecords().stream().map(RepalBill::getCustomerId).distinct().collect(Collectors.toList())));
  256. Map<Long, Integer> custMap = customerList.stream().collect(Collectors.toMap(RepalCustomer::getCustId, RepalCustomer::getCustProperty));
  257. voPage.setDataList(repalBillPage.getRecords().stream().map(repalBill -> {
  258. RepalBillPageVO vo = new RepalBillPageVO();
  259. BeanUtils.copyProperties(repalBill, vo);
  260. vo.setRepalBillId(repalBill.getId());
  261. if (nameMap.containsKey(repalBill.getId())) {
  262. vo.setResponsiblePersonNames(String.join("、", nameMap.get(repalBill.getId())));
  263. }
  264. vo.setRepalOverdueStatus(repalBill.getRepalBillStatus() > 1 ? repalBill.getRepalBillStatus() + 1 : repalBill.getRepalBillStatus());
  265. vo.setCustName(repalBill.getCustomerName());
  266. vo.setCustProperty(custMap.get(repalBill.getCustomerId()));
  267. vo.setTotalMoneyStr(repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  268. vo.setReceivableMoneyStr(repalBill.getReceivable().stripTrailingZeros().toPlainString());
  269. // 评分趋势
  270. vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(repalBill.getPreDiagnosisScore(), repalBill.getDiagnosisScore(), repalBill.getPreDiagnosisGrade(), repalBill.getDiagnosisGrade()));
  271. if (Objects.nonNull(repalBill.getDiagnosisScore())) {
  272. vo.setDiagnosisScore(repalBill.getDiagnosisScore().stripTrailingZeros().toPlainString());
  273. }
  274. RepalBillRemindUnReadVO unReadVO = unreadMap.get(vo.getRepalBillId());
  275. if (Objects.nonNull(unReadVO)) {
  276. vo.setDynamicCountList(new ArrayList<Integer>(){{
  277. add(unReadVO.getUnreadRiskCount());
  278. add(unReadVO.getUnreadFinanceCount());
  279. add(unReadVO.getUnreadRankCount());
  280. add(unReadVO.getUnreadOverdueCount());
  281. }});
  282. }
  283. return vo;
  284. }).collect(Collectors.toList()));
  285. return voPage;
  286. }
  287. @Override
  288. public RepalBillDetailVO getRepalBillDetail(Long repalBillId) {
  289. RepalBill repalBill = this.getById(repalBillId);
  290. // 负责人或高级权限才能查看
  291. boolean queryAllFlag = repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  292. RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.QUERY_ALL_RECEIVABLE.getCode() : PermissionEnum.QUERY_ALL_RECEIPT.getCode());
  293. if (!queryAllFlag &&!repalResponsiblePersonService.getResponsiblePersonId(repalBillId).contains(UserContextUtil.getUser().getUserId())) {
  294. throw new CommonException(CodeMsg.FAILED, "没有查看权限");
  295. }
  296. RepalBillDetailVO vo = new RepalBillDetailVO();
  297. BeanUtils.copyProperties(repalBill, vo);
  298. vo.setRepalBillId(repalBill.getId());
  299. RepalCustomer repalCustomer = repalCustomerService.getById(repalBill.getCustomerId());
  300. vo.setCompanyId(repalCustomer.getCompanyId());
  301. vo.setCustProperty(repalCustomer.getCustProperty());
  302. List<String> nameList = repalResponsiblePersonService.getResponsiblePersonName(vo.getRepalBillId());
  303. if (CollUtil.isNotEmpty(nameList)) {
  304. vo.setResponsiblePersonNames(CollUtil.isEmpty(nameList) ? "" : String.join("、", nameList));
  305. }
  306. vo.setTotalMoneyStr(repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  307. vo.setReceiptStr(repalBill.getReceipt().stripTrailingZeros().toPlainString());
  308. vo.setReceivableStr(repalBill.getReceivable().stripTrailingZeros().toPlainString());
  309. // 评分趋势
  310. vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(repalBill.getPreDiagnosisScore(), repalBill.getDiagnosisScore(), repalBill.getPreDiagnosisGrade(), repalBill.getDiagnosisGrade()));
  311. if (Objects.nonNull(repalBill.getDiagnosisScore())) {
  312. vo.setDiagnosisGradeDesc(DiagnosisUtil.getGradeConclusion(repalBill.getDiagnosisScore()));
  313. vo.setDiagnosisScore(repalBill.getDiagnosisScore().stripTrailingZeros().toPlainString());
  314. }
  315. // companyId
  316. if (StrUtil.isNotBlank(vo.getCompanyId())) {
  317. // 财产数量
  318. ApiDataResult<List<FinanceDynamicNumVO>> financeResult = dataMiddlewareService.getFinanceDynamicNumV8List(new GetFinanceDynamicNumDTO().setCompanyIdList(Collections.singletonList(vo.getCompanyId())));
  319. if (Objects.nonNull(financeResult) && CollUtil.isNotEmpty(financeResult.getData())) {
  320. vo.setAssetsNum(financeResult.getData().get(0).getFinanceDynamicNum());
  321. }
  322. // 风险数量
  323. ApiDataResult<List<CompanyRiskNumVO>> riskResult = dataMiddlewareService.getCompanyRiskNumList(new GetCompanyRiskNumDTO(Collections.singletonList(vo.getCompanyId())));
  324. if (Objects.nonNull(riskResult) && CollUtil.isNotEmpty(riskResult.getData())) {
  325. vo.setRiskNum(riskResult.getData().get(0).getRiskNum());
  326. }
  327. // 失信限高标签
  328. ApiDataResult<List<CreditPunishmentLabelListVO>> labelResult = dataMiddlewareService.getCreditPunishmentLabelList(new GetCreditPunishmentLabelDTO(Collections.singletonList(vo.getCompanyId())));
  329. if (Objects.nonNull(labelResult) && CollUtil.isNotEmpty(labelResult.getData())) {
  330. vo.setLabelList(labelResult.getData().get(0).getLabelList());
  331. }
  332. }
  333. if (Objects.nonNull(repalBill.getDiagnosisId())) {
  334. RepalBillDiagnosis repalBillDiagnosis = repalBillDiagnosisService.getById(repalBill.getDiagnosisId());
  335. if (Objects.nonNull(repalBillDiagnosis)) {
  336. try {
  337. ApiDataResult<DiagnosisRecordVO> apiDataResult = inCaseService.getRecordVO(repalBillDiagnosis.getBizId());
  338. if (Objects.nonNull(apiDataResult)) {
  339. vo.setAnalysisList(DiagnosisUtil.convertItemToList(apiDataResult.getData().getResultItem()));
  340. }
  341. } catch (Exception e) {
  342. LOGGER.error("查询评估信息错误", e);
  343. }
  344. }
  345. }
  346. // 合同
  347. if (StrUtil.isNotBlank(repalBill.getContractUrl())) {
  348. List<String> urlList = Arrays.stream(repalBill.getContractUrl().split(";")).collect(Collectors.toList());
  349. vo.setContractList(urlList.stream().map(s -> {
  350. RepalBillDetailVO.BillContract billContract = new RepalBillDetailVO.BillContract();
  351. billContract.setContractUrl(s);
  352. billContract.setContractName(s.substring(s.lastIndexOf("/") + 1));
  353. return billContract;
  354. }).collect(Collectors.toList()));
  355. }
  356. if (RepalBillStatusEnum.OVERDUE.getCode().equals(repalBill.getRepalBillStatus())) {
  357. if (Objects.nonNull(repalBill.getEndDate())) {
  358. if (LocalDate.now().isAfter(repalBill.getEndDate()) || LocalDate.now().compareTo(repalBill.getEndDate()) == 0) {
  359. // 避免天数出现负数
  360. vo.setOverdueDay(Math.toIntExact(LocalDate.now().toEpochDay() - repalBill.getEndDate().toEpochDay()) + 1);
  361. }
  362. }
  363. }
  364. List<RepalChangeRecord> repalChangeRecordList = repalChangeRecordService.list(Wrappers.lambdaQuery(RepalChangeRecord.class)
  365. .eq(RepalChangeRecord::getRepalBillId, vo.getRepalBillId())
  366. .eq(RepalChangeRecord::getDeleted, DeletedStatusEnum.NORMAL.getCode()));
  367. if (CollUtil.isNotEmpty(repalChangeRecordList)) {
  368. vo.setChangeList(repalChangeRecordList.stream().map(t -> {
  369. RepalBillDetailVO.BillMoneyChange billMoneyChange = new RepalBillDetailVO.BillMoneyChange();
  370. billMoneyChange.setChangeTime(t.getTimeCreated());
  371. billMoneyChange.setChangeDesc(t.getOperUserName() + " 增加回款 " + t.getTransMoney().stripTrailingZeros().toPlainString());
  372. return billMoneyChange;
  373. }).collect(Collectors.toList()));
  374. }
  375. return vo;
  376. }
  377. @Override
  378. @Transactional(rollbackFor = Exception.class)
  379. public Boolean deleteRepalBillById(DeleteRepalBillDTO dto) {
  380. RepalBill repalBill = this.getById(dto.getRepalBillId());
  381. if (!repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  382. RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.UPDATE_RECEIVABLE.getCode() : PermissionEnum.UPDATE_RECEIPT.getCode())) {
  383. throw new CommonException(CodeMsg.FAILED, "无对应权限");
  384. }
  385. this.update(Wrappers.lambdaUpdate(RepalBill.class).eq(RepalBill::getId, dto.getRepalBillId())
  386. .set(RepalBill::getDeleted, DeletedStatusEnum.DELETE.getCode()));
  387. // 删除关联人
  388. repalResponsiblePersonService.deletePersonByBillId(dto.getRepalBillId());
  389. return true;
  390. }
  391. @Override
  392. @Transactional(rollbackFor = Exception.class)
  393. public Boolean settleRepalBillById(SettleRepalBillDTO dto) {
  394. long userId = UserContextUtil.getUser().getUserId();
  395. RepalBill repalBill = this.getById(dto.getRepalBillId());
  396. if (!repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  397. RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.UPDATE_RECEIVABLE.getCode() : PermissionEnum.UPDATE_RECEIPT.getCode())) {
  398. throw new CommonException(CodeMsg.FAILED, "无对应权限");
  399. }
  400. // 结清tag
  401. boolean success = false;
  402. // 金额溢出
  403. if (dto.getMoney().compareTo(repalBill.getReceivable()) >= 0) {
  404. dto.setMoney(repalBill.getReceivable());
  405. success = true;
  406. }
  407. RepalGroupMember member = repalGroupMemberService.getOne(Wrappers.lambdaQuery(RepalGroupMember.class)
  408. .eq(RepalGroupMember::getRepalGroupId, repalGroupMemberService.getUserGroupId(userId))
  409. .eq(RepalGroupMember::getUserId, userId)
  410. .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.NORMAL.getCode()));
  411. if (Objects.isNull(member)) {
  412. throw new CommonException(CodeMsg.FAILED, "成员信息错误");
  413. }
  414. RepalChangeRecord changeRecord = new RepalChangeRecord();
  415. changeRecord.setRepalBookId(repalBill.getRepalBookId());
  416. changeRecord.setRepalBillId(repalBill.getId());
  417. changeRecord.setAfterMoney(repalBill.getReceivable().subtract(dto.getMoney()));
  418. changeRecord.setPreMoney(repalBill.getReceivable());
  419. changeRecord.setTransMoney(dto.getMoney());
  420. changeRecord.setOperUserId(userId);
  421. changeRecord.setRecordDate(dto.getRecordDate());
  422. changeRecord.setOperUserName(member.getMemberUserName());
  423. repalChangeRecordService.save(changeRecord);
  424. // 重新计算金额
  425. repalBill.setReceivable(success ? BigDecimal.ZERO : repalBill.getReceivable().subtract(dto.getMoney()));
  426. repalBill.setReceipt(success ? repalBill.getTotalMoney() : repalBill.getReceipt().add(dto.getMoney()));
  427. this.update(Wrappers.lambdaUpdate(RepalBill.class)
  428. .eq(RepalBill::getId, repalBill.getId())
  429. .set(success, RepalBill::getRepalBillStatus, RepalBillStatusEnum.SUCCESS.getCode())
  430. .set(RepalBill::getReceivable, repalBill.getReceivable())
  431. .set(RepalBill::getReceipt, repalBill.getReceipt())
  432. .set(success, RepalBill::getSettleTime, LocalDateTime.now()));
  433. return true;
  434. }
  435. @Override
  436. @Transactional(rollbackFor = Exception.class)
  437. public Boolean addRepalBill(AddRepalBillDTO dto) {
  438. RepalCustomer customer = repalCustomerService.getById(dto.getCustomerId());
  439. if (Objects.isNull(customer)) {
  440. throw new CommonException(CodeMsg.FAILED, "客户信息错误");
  441. }
  442. long groupId = repalGroupMemberService.getUserGroupId(UserContextUtil.getUser().getUserId());
  443. // 评级flag
  444. boolean diagnosisFlag = (CustPropertyEnum.COMPANY.getCode().equals(customer.getCustProperty()) || CustPropertyEnum.GOV.getCode().equals(customer.getCustProperty()))
  445. && RepalBillTypeEnum.RECEIVABLE.getCode().equals(dto.getRepalBillType());
  446. if (diagnosisFlag && StrUtil.isBlank(customer.getCompanyId())) {
  447. throw new CommonException(CodeMsg.FAILED, "公司信息错误");
  448. }
  449. if (!repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  450. RepalBillTypeEnum.RECEIVABLE.getCode().equals(dto.getRepalBillType()) ? PermissionEnum.ADD_RECEIVABLE.getCode() : PermissionEnum.ADD_RECEIPT.getCode())) {
  451. throw new CommonException(CodeMsg.FAILED, "无对应权限");
  452. }
  453. if (Objects.isNull(dto.getRepalBookId())) {
  454. // 新建账本
  455. RepalBook repalBook = new RepalBook();
  456. repalBook.setRepalGroupId(groupId);
  457. repalBook.setRepalBookName("默认账本");
  458. repalBook.setUserId(UserContextUtil.getUser().getUserId());
  459. repalBookService.save(repalBook);
  460. dto.setRepalBookId(repalBook.getId());
  461. }
  462. RepalBill repalBill = new RepalBill();
  463. BeanUtils.copyProperties(dto, repalBill);
  464. repalBill.setCustomerName(customer.getCustName());
  465. repalBill.setUserId(UserContextUtil.getUser().getUserId());
  466. repalBill.setRepalBillStatus(RepalBillStatusUtil.getRepalBillStatus(dto.getEndDate()));
  467. repalBill.setRepalGroupId(groupId);
  468. repalBill.setReceivable(dto.getTotalMoney());
  469. if (CollUtil.isNotEmpty(dto.getContractUrlList())) {
  470. repalBill.setContractUrl(String.join(";", dto.getContractUrlList()));
  471. }
  472. this.save(repalBill);
  473. if (diagnosisFlag) {
  474. // 非个人 & 应收,才会评级
  475. repalBillDiagnosisService.addRepalBillDiagnosis(repalBill.getUserId(), repalBill.getId(), dto.getTotalMoney(), Collections.singletonList(customer.getCustName()));
  476. }
  477. // 负责人
  478. if (CollUtil.isNotEmpty(dto.getResponsiblePersonIdList())) {
  479. repalResponsiblePersonService.saveBatch(dto.getResponsiblePersonIdList().stream().map(t -> {
  480. RepalResponsiblePerson person = new RepalResponsiblePerson();
  481. person.setRepalGroupId(groupId);
  482. person.setRepalBookId(dto.getRepalBookId());
  483. person.setRepalBillId(repalBill.getId());
  484. person.setUserId(t);
  485. return person;
  486. }).collect(Collectors.toList()));
  487. }
  488. return true;
  489. }
  490. @Override
  491. @Transactional(rollbackFor = Exception.class)
  492. public Boolean breakRepalBill(BreakRepalBillDTO dto) {
  493. RepalBill repalBill = this.getById(dto.getRepalBillId());
  494. if (Objects.isNull(repalBill)) {
  495. throw new CommonException(CodeMsg.FAILED, "账款错误");
  496. }
  497. if (!repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  498. RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.UPDATE_RECEIVABLE.getCode() : PermissionEnum.UPDATE_RECEIPT.getCode())) {
  499. throw new CommonException(CodeMsg.FAILED, "无对应权限");
  500. }
  501. this.update(Wrappers.lambdaUpdate(RepalBill.class)
  502. .eq(RepalBill::getId, dto.getRepalBillId())
  503. .set(RepalBill::getRepalBillStatus, RepalBillStatusEnum.END.getCode())
  504. .set(StrUtil.isNotBlank(dto.getBreakReason()), RepalBill::getBreakReason, dto.getBreakReason()));
  505. return true;
  506. }
  507. @Override
  508. @Transactional(rollbackFor = Exception.class)
  509. public Boolean updateRepalBill(UpdateRepalBillDTO dto) {
  510. RepalBill repalBill = this.getById(dto.getRepalBillId());
  511. if (!repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
  512. RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? PermissionEnum.UPDATE_RECEIVABLE.getCode() : PermissionEnum.UPDATE_RECEIPT.getCode())) {
  513. throw new CommonException(CodeMsg.FAILED, "无对应权限");
  514. }
  515. // 责任人
  516. List<Long> currentIdList = repalResponsiblePersonService.getResponsiblePersonId(repalBill.getId());
  517. List<Long> difference = new ArrayList<>(CollUtil.disjunction(dto.getResponsiblePersonIdList(), currentIdList));
  518. if (CollUtil.isNotEmpty(difference)) {
  519. for (Long aLong : difference) {
  520. if (currentIdList.contains(aLong)) {
  521. // 移除
  522. repalResponsiblePersonService.update(Wrappers.lambdaUpdate(RepalResponsiblePerson.class)
  523. .eq(RepalResponsiblePerson::getRepalBillId, repalBill.getId())
  524. .eq(RepalResponsiblePerson::getUserId, aLong)
  525. .set(RepalResponsiblePerson::getDeleted, DeletedStatusEnum.DELETE.getCode()));
  526. }
  527. if (dto.getResponsiblePersonIdList().contains(aLong)) {
  528. // 新增
  529. RepalResponsiblePerson person = new RepalResponsiblePerson();
  530. person.setRepalBillId(repalBill.getId());
  531. person.setRepalBookId(repalBill.getRepalBookId());
  532. person.setRepalGroupId(repalBill.getRepalGroupId());
  533. person.setUserId(aLong);
  534. repalResponsiblePersonService.save(person);
  535. }
  536. }
  537. }
  538. if (LocalDate.now().isBefore(dto.getEndDate())) {
  539. // 逾期
  540. repalBill.setRepalBillStatus(RepalBillStatusEnum.OVERDUE.getCode());
  541. }
  542. repalBill.setTotalMoney(new BigDecimal(dto.getTotalMoneyStr()));
  543. if (repalBill.getReceipt().compareTo(repalBill.getTotalMoney()) >= 0) {
  544. // 收回了
  545. repalBill.setRefreshStatus(RepalBillStatusEnum.SUCCESS.getCode());
  546. repalBill.setReceivable(BigDecimal.ZERO);
  547. }
  548. this.update(Wrappers.lambdaUpdate(RepalBill.class)
  549. .eq(RepalBill::getId, repalBill.getId())
  550. .set(RepalBill::getEndDate, dto.getEndDate())
  551. .set(RepalBill::getRepalBillStatus, repalBill.getRepalBillStatus())
  552. .set(RepalBill::getRepalBillStage, dto.getRepalBillStage())
  553. .set(RepalBill::getBillRemark, dto.getBillRemark())
  554. .set(RepalBill::getTotalMoney, repalBill.getTotalMoney())
  555. .set(RepalBill::getReceivable, repalBill.getReceivable()));
  556. return true;
  557. }
  558. @Override
  559. @Transactional(rollbackFor = Exception.class)
  560. public Boolean deleteRepalBillByBookId(Long repalBookId) {
  561. this.update(Wrappers.lambdaUpdate(RepalBill.class)
  562. .eq(RepalBill::getRepalBookId, repalBookId)
  563. .set(RepalBill::getDeleted, DeletedStatusEnum.DELETE.getCode()));
  564. // 责任人也删除
  565. repalResponsiblePersonService.deletePersonByBookId(repalBookId);
  566. return true;
  567. }
  568. @Override
  569. public boolean checkAllBillRefreshStatus(Long repalBookId, Long repalBillId) {
  570. LambdaQueryWrapper<RepalBill> qw = Wrappers.lambdaQuery(RepalBill.class);
  571. qw.eq(RepalBill::getRepalBookId,repalBookId);
  572. qw.ne(RepalBill::getId,repalBillId);
  573. List<RepalBill> results = list(qw);
  574. for(RepalBill accountBill:results){
  575. if(!RefreshStatusEnum.REFRESH_SUCCESS.getCode().equals(accountBill.getRefreshStatus())){
  576. return false;
  577. }
  578. }
  579. return true;
  580. }
  581. @Override
  582. public VOPage<RepalBillPageVO> getCustRepalBillPage(Integer pageNum, Integer pageSize, Long custId) {
  583. VOPage<RepalBillPageVO> voPage = new VOPage<>();
  584. voPage.setPageSize(pageSize);
  585. voPage.setPageNum(pageNum);
  586. // 分页数据
  587. Page<RepalBill> repalBillPage = new Page<>(pageNum,pageSize);
  588. repalBillPage = repalBillMapper.getCustRepalBillPage(repalBillPage,custId);
  589. voPage.setTotalPage(Math.toIntExact(repalBillPage.getPages()));
  590. voPage.setTotalNum(repalBillPage.getTotal());
  591. voPage.setDataList(new ArrayList<>());
  592. if (CollUtil.isEmpty(repalBillPage.getRecords())) {
  593. return voPage;
  594. }
  595. // 未读消息
  596. List<Long> billIdList = repalBillPage.getRecords().stream().map(RepalBill::getId).collect(Collectors.toList());
  597. long userId = UserContextUtil.getUser().getUserId();
  598. Map<Long, RepalBillRemindUnReadVO> unreadMap = new HashMap<>();
  599. repalBillPage.getRecords().parallelStream().forEach(repalBill -> {
  600. RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userId,repalBill.getId(),repalBill.getRepalBookId());
  601. RepalBillRemindUnReadVO readVO = repalRemindHistoryService.getBillRemindUnReadVO(repalRemindReadInfo.getRiskRemindId(),
  602. repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId()
  603. ,repalRemindReadInfo.getFinanceRemindId(),repalBill.getRepalBookId(),repalBill.getId(),
  604. null, null);
  605. unreadMap.put(repalBill.getId(), readVO);
  606. });
  607. Map<Long, List<String>> nameMap = repalResponsiblePersonService.getResponsiblePersonNameList(billIdList);
  608. List<RepalCustomer> customerList = repalCustomerService.list(Wrappers.lambdaQuery(RepalCustomer.class).in(RepalCustomer::getCustId,
  609. repalBillPage.getRecords().stream().map(RepalBill::getCustomerId).distinct().collect(Collectors.toList())));
  610. Map<Long, Integer> custMap = customerList.stream().collect(Collectors.toMap(RepalCustomer::getCustId, RepalCustomer::getCustProperty));
  611. voPage.setDataList(repalBillPage.getRecords().stream().map(t -> {
  612. RepalBillPageVO vo = new RepalBillPageVO();
  613. BeanUtils.copyProperties(t, vo);
  614. vo.setRepalBillId(t.getId());
  615. if(nameMap.containsKey(t.getId())) {
  616. vo.setResponsiblePersonNames(String.join("、", nameMap.get(t.getId())));
  617. }
  618. vo.setRepalOverdueStatus(t.getRepalBillStatus() > 1 ? t.getRepalBillStatus() + 1 : t.getRepalBillStatus());
  619. if (RepalBillStatusEnum.PROGRESSING.getCode().equals(vo.getRepalOverdueStatus()) && LocalDate.now().plusDays(3).equals(vo.getEndDate())) {
  620. vo.setRepalOverdueStatus(2);
  621. }
  622. vo.setCustName(t.getCustomerName());
  623. vo.setCustProperty(custMap.get(t.getCustomerId()));
  624. vo.setTotalMoneyStr(t.getTotalMoney().stripTrailingZeros().toPlainString());
  625. vo.setReceivableMoneyStr(t.getReceivable().stripTrailingZeros().toPlainString());
  626. // 评分趋势
  627. vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(t.getPreDiagnosisScore(), t.getDiagnosisScore(), t.getPreDiagnosisGrade(), t.getDiagnosisGrade()));
  628. if (Objects.nonNull(t.getDiagnosisScore())) {
  629. vo.setDiagnosisScore(t.getDiagnosisScore().stripTrailingZeros().toPlainString());
  630. }
  631. RepalBillRemindUnReadVO unReadVO = unreadMap.get(vo.getRepalBillId());
  632. if (Objects.nonNull(unReadVO)) {
  633. vo.setDynamicCountList(new ArrayList<Integer>(){{
  634. add(unReadVO.getUnreadRiskCount());
  635. add(unReadVO.getUnreadFinanceCount());
  636. add(unReadVO.getUnreadRankCount());
  637. add(unReadVO.getUnreadOverdueCount());
  638. }});
  639. }
  640. return vo;
  641. }).collect(Collectors.toList()));
  642. return voPage;
  643. }
  644. @Override
  645. public RepalManageBillInfoVO queryManageInfo() {
  646. //权限
  647. UserContextBO userContextBO = UserContextUtil.getUser();
  648. boolean allFlag = repalRolePermissionService.checkUserPermission(userContextBO.getUserId(),PermissionEnum.QUERY_ALL_URGE.getCode());
  649. //查询组织编号
  650. RepalGroupMember repalGroupMember = repalGroupMemberService.getOne(Wrappers.lambdaQuery(RepalGroupMember.class).eq(RepalGroupMember::getUserId,userContextBO.getUserId()).eq(RepalGroupMember::getDeleted,Dict.DeletedStatusEnunm.否.getCode()),false);
  651. if(ObjectUtil.isNull(repalGroupMember)){
  652. throw new CommonException(CodeMsg.FAILED,"您还未加入该组织,请联系超级管理员");
  653. }
  654. LocalDate startTime = LocalDate.now().plusDays(7);
  655. ManageBillInfoBO manageBillInfo = repalBillMapper.getManageBillInfo(allFlag,userContextBO.getUserId(),repalGroupMember.getRepalGroupId(),startTime);
  656. RepalManageBillInfoVO repalManageBillInfoVO = new RepalManageBillInfoVO();
  657. if(ObjectUtil.isNull(manageBillInfo.getTotalMoney()) || NumberUtil.equals(BigDecimal.ZERO,manageBillInfo.getTotalMoney())){
  658. repalManageBillInfoVO.setOverdueScaleStr("0");
  659. repalManageBillInfoVO.setTotalOverdueCount(0);
  660. repalManageBillInfoVO.setTotalOverdueStr("0");
  661. repalManageBillInfoVO.setTotalOverdueWeekCount(0);
  662. repalManageBillInfoVO.setTotalOverdueWeekStr("0");
  663. }else {
  664. repalManageBillInfoVO.setTotalOverdueCount(manageBillInfo.getTotalOverdueCount());
  665. repalManageBillInfoVO.setTotalOverdueStr(manageBillInfo.getTotalOverdue().toPlainString());
  666. repalManageBillInfoVO.setTotalOverdueWeekCount(manageBillInfo.getTotalOverdueWeekCount());
  667. repalManageBillInfoVO.setTotalOverdueWeekStr(manageBillInfo.getTotalOverdueWeek().toPlainString());
  668. repalManageBillInfoVO.setOverdueScaleStr(manageBillInfo.getTotalOverdue().divide(manageBillInfo.getTotalMoney(),2, RoundingMode.HALF_UP).toPlainString());
  669. }
  670. return repalManageBillInfoVO;
  671. }
  672. @Override
  673. public VOPage<RepalManageBillPageVO> queryManageBillPage(Integer pageNum, Integer pageSize) {
  674. //权限
  675. UserContextBO userContextBO = UserContextUtil.getUser();
  676. boolean allFlag = repalRolePermissionService.checkUserPermission(userContextBO.getUserId(),PermissionEnum.QUERY_ALL_URGE.getCode());
  677. //查询组织编号
  678. RepalGroupMember repalGroupMember = repalGroupMemberService.getOne(Wrappers.lambdaQuery(RepalGroupMember.class).eq(RepalGroupMember::getUserId,userContextBO.getUserId()).eq(RepalGroupMember::getDeleted,Dict.DeletedStatusEnunm.否.getCode()),false);
  679. if(ObjectUtil.isNull(repalGroupMember)){
  680. throw new CommonException(CodeMsg.FAILED,"您还未加入该组织,请联系超级管理员");
  681. }
  682. LocalDate startTime = LocalDate.now().plusDays(7);
  683. VOPage<RepalManageBillPageVO> voPage = new VOPage<>();
  684. voPage.setPageSize(pageSize);
  685. voPage.setPageNum(pageNum);
  686. // 分页数据
  687. Page<RepalManageBillPageBO> repalBillPage = new Page<>(pageNum,pageSize);
  688. repalBillPage = repalBillMapper.getManageBillPage(repalBillPage,allFlag,userContextBO.getUserId(),repalGroupMember.getRepalGroupId(),startTime);
  689. voPage.setTotalPage(Math.toIntExact(repalBillPage.getPages()));
  690. voPage.setTotalNum(repalBillPage.getTotal());
  691. voPage.setDataList(new ArrayList<>());
  692. if (CollUtil.isEmpty(repalBillPage.getRecords())) {
  693. return voPage;
  694. }
  695. List<RepalManageBillPageVO> vos = new ArrayList<>();
  696. voPage.setDataList(vos);
  697. Map<Long,List<ResponsiblePersonNameVO>> personMap= repalResponsiblePersonMapper.getResponsiblePersonNameList(repalBillPage.getRecords().stream().map(RepalManageBillPageBO::getRepalBillId).collect(Collectors.toList())).stream().collect(Collectors.groupingBy(ResponsiblePersonNameVO::getRepalBillId));
  698. for(RepalManageBillPageBO manageBillPageBO:repalBillPage.getRecords()){
  699. RepalManageBillPageVO vo = new RepalManageBillPageVO();
  700. vos.add(vo);
  701. BeanUtils.copyProperties(manageBillPageBO,vo);
  702. vo.setOverdueDay(Math.abs(manageBillPageBO.getEndDate().toEpochDay() - LocalDate.now().toEpochDay()));
  703. vo.setTotalMoneyStr(manageBillPageBO.getTotalMoney().stripTrailingZeros().toPlainString());
  704. vo.setReceivableStr(manageBillPageBO.getReceivable().stripTrailingZeros().toPlainString());
  705. //负责人
  706. if(personMap.containsKey(manageBillPageBO.getRepalBillId())){
  707. List<ResponsiblePersonNameVO> personNames = personMap.get(manageBillPageBO.getRepalBillId());
  708. vo.setResponsiblePersonName(personNames.stream().map(ResponsiblePersonNameVO::getUserName).collect(Collectors.toList()));
  709. }
  710. //催款动态条数
  711. int dynamicCount = repalDynamicService.count(Wrappers.lambdaQuery(RepalDynamic.class).eq(RepalDynamic::getRepalBillId,manageBillPageBO.getRepalBillId()));
  712. vo.setRepalDynamicCount(dynamicCount);
  713. }
  714. return voPage;
  715. }
  716. @Override
  717. public RepalManageBillDetailVO querManageBillDetail(Long repalBillId) {
  718. //不校验权限,默认看到列表的时候已经通过
  719. RepalBill repalBill = this.getById(repalBillId);
  720. RepalManageBillDetailVO vo = new RepalManageBillDetailVO();
  721. BeanUtils.copyProperties(repalBill, vo);
  722. vo.setCustId(repalBill.getCustomerId());
  723. vo.setRepalBillId(repalBill.getId());
  724. RepalCustomer repalCustomer = repalCustomerService.getById(repalBill.getCustomerId());
  725. vo.setCompanyId(repalCustomer.getCompanyId());
  726. vo.setCustProperty(repalCustomer.getCustProperty());
  727. List<String> nameList = repalResponsiblePersonService.getResponsiblePersonName(vo.getRepalBillId());
  728. vo.setResponsiblePersonName(nameList);
  729. vo.setTotalMoneyStr(repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
  730. vo.setReceiptStr(repalBill.getReceipt().stripTrailingZeros().toPlainString());
  731. vo.setReceivableStr(repalBill.getReceivable().stripTrailingZeros().toPlainString());
  732. vo.setOverdueDay(Math.abs(LocalDate.now().toEpochDay()-repalBill.getEndDate().toEpochDay()));
  733. // 评分趋势
  734. vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(repalBill.getPreDiagnosisScore(), repalBill.getDiagnosisScore(), repalBill.getPreDiagnosisGrade(), repalBill.getDiagnosisGrade()));
  735. if (Objects.nonNull(repalBill.getDiagnosisScore())) {
  736. vo.setDiagnosisGradeDesc(DiagnosisUtil.getGradeConclusion(repalBill.getDiagnosisScore()));
  737. vo.setDiagnosisScore(repalBill.getDiagnosisScore().stripTrailingZeros().toPlainString());
  738. }
  739. // companyId
  740. if (StrUtil.isNotBlank(vo.getCompanyId())) {
  741. // 财产数量
  742. ApiDataResult<List<FinanceDynamicNumVO>> financeResult = dataMiddlewareService.getFinanceDynamicNumV8List(new GetFinanceDynamicNumDTO().setCompanyIdList(Collections.singletonList(vo.getCompanyId())));
  743. if (Objects.nonNull(financeResult) && CollUtil.isNotEmpty(financeResult.getData())) {
  744. vo.setAssetsNum(financeResult.getData().get(0).getFinanceDynamicNum());
  745. }
  746. // 风险数量
  747. ApiDataResult<List<CompanyRiskNumVO>> riskResult = dataMiddlewareService.getCompanyRiskNumList(new GetCompanyRiskNumDTO(Collections.singletonList(vo.getCompanyId())));
  748. if (Objects.nonNull(riskResult) && CollUtil.isNotEmpty(riskResult.getData())) {
  749. vo.setRiskNum(riskResult.getData().get(0).getRiskNum());
  750. }
  751. // 失信限高标签
  752. ApiDataResult<List<CreditPunishmentLabelListVO>> labelResult = dataMiddlewareService.getCreditPunishmentLabelList(new GetCreditPunishmentLabelDTO(Collections.singletonList(vo.getCompanyId())));
  753. if (Objects.nonNull(labelResult) && CollUtil.isNotEmpty(labelResult.getData())) {
  754. vo.setLabelList(labelResult.getData().get(0).getLabelList());
  755. }
  756. }
  757. //查询套餐剩余qingk
  758. RepalVip repalVip = repalVipService.getOne(Wrappers.lambdaQuery(RepalVip.class).eq(RepalVip::getRepalGroupId,repalCustomer.getRepalGroupId()),false);
  759. RepalVipVO repalVipVO = new RepalVipVO();
  760. if(ObjectUtil.isNotNull(repalVip)){
  761. BeanUtils.copyProperties(repalVip,repalVipVO);
  762. }
  763. vo.setRepalVip(repalVipVO);
  764. //查询催款动态列表
  765. List<RepalDynamic> dynamics = repalDynamicService.list(Wrappers.lambdaQuery(RepalDynamic.class).eq(RepalDynamic::getRepalBillId,repalBillId).orderByDesc(RepalDynamic::getId));
  766. if(CollUtil.isNotEmpty(dynamics)){
  767. List<RepalDynamicVO> repalDynamicVOs = new ArrayList<>(dynamics.size());
  768. vo.setRepalDynamics(repalDynamicVOs);
  769. 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()));
  770. for(RepalDynamic dynamic:dynamics){
  771. RepalDynamicVO repalDynamicVO = new RepalDynamicVO();
  772. repalDynamicVOs.add(repalDynamicVO);
  773. BeanUtils.copyProperties(dynamic,repalDynamicVO);
  774. if(memberMap.containsKey(dynamic.getMemberId())){
  775. RepalGroupMember repalGroupMember = memberMap.get(dynamic.getMemberId());
  776. repalDynamicVO.setMemberUserName(repalGroupMember.getMemberUserName());
  777. }
  778. }
  779. }
  780. return vo;
  781. }
  782. @Override
  783. public List<Long> getBillIdListByBookId(Long repalBookId, Long userId) {
  784. return repalBillMapper.getBillIdListByBookId(repalBookId, userId);
  785. }
  786. @Override
  787. public List<String> getBillGradeByBookId(Long repalBookId, Long userId, LocalDateTime start, LocalDateTime end) {
  788. return repalBillMapper.getBillGradeByBookId(repalBookId, userId, start, end);
  789. }
  790. @Override
  791. public HomeReceivableBO getBillTotal(Integer repalBillStatus, Long userId, Long repalBookId, Integer repalBillType, LocalDateTime start, LocalDateTime end) {
  792. return repalBillMapper.getBillTotal(repalBillStatus, userId, repalBookId, repalBillType, start, end);
  793. }
  794. @Override
  795. @Transactional(rollbackFor = Exception.class)
  796. public Boolean transferBill(TransferBillDTO dto) {
  797. // 账款创建人
  798. this.update(Wrappers.lambdaUpdate(RepalBill.class)
  799. .eq(RepalBill::getUserId, dto.getUserId())
  800. .set(RepalBill::getUserId, dto.getTransferUserId()));
  801. // 账款负责人
  802. repalResponsiblePersonService.update(Wrappers.lambdaUpdate(RepalResponsiblePerson.class)
  803. .eq(RepalResponsiblePerson::getUserId, dto.getUserId())
  804. .set(RepalResponsiblePerson::getUserId, dto.getTransferUserId()));
  805. // 客户负责人
  806. repalCustChargeRelService.update(Wrappers.lambdaUpdate(RepalCustChargeRel.class)
  807. .eq(RepalCustChargeRel::getMemberUserId, dto.getUserId())
  808. .set(RepalCustChargeRel::getMemberUserId, dto.getTransferUserId()));
  809. return true;
  810. }
  811. }