|
@@ -1,17 +1,188 @@
|
|
|
package com.winhc.repal.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.winhc.common.base.ApiDataResult;
|
|
|
+import com.winhc.repal.cloud.InCaseService;
|
|
|
+import com.winhc.repal.cloud.dto.AddDiagnoseRecordDTO;
|
|
|
+import com.winhc.repal.cloud.dto.DiagnosisDebtorDTO;
|
|
|
+import com.winhc.repal.cloud.vo.DiagnosisRecord;
|
|
|
+import com.winhc.repal.entity.RepalBill;
|
|
|
import com.winhc.repal.entity.RepalBillDiagnosis;
|
|
|
+import com.winhc.repal.entity.RepalBook;
|
|
|
+import com.winhc.repal.enums.DiagnosisStatusEnum;
|
|
|
+import com.winhc.repal.enums.Dict;
|
|
|
+import com.winhc.repal.enums.RefreshStatusEnum;
|
|
|
+import com.winhc.repal.mq.bean.RiskScoreDataTransfer;
|
|
|
import com.winhc.repal.repository.RepalBillDiagnosisMapper;
|
|
|
import com.winhc.repal.service.RepalBillDiagnosisService;
|
|
|
+import com.winhc.repal.service.RepalBillService;
|
|
|
+import com.winhc.repal.service.RepalBookService;
|
|
|
+import com.winhc.repal.service.RepalRemindHistoryService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
/**
|
|
|
* @description RepalBillDiagnosis 接口实现类
|
|
|
* @author Generator
|
|
|
* @date 2022-04-14
|
|
|
*/
|
|
|
@Service
|
|
|
+@Slf4j
|
|
|
public class RepalBillDiagnosisServiceImpl extends ServiceImpl<RepalBillDiagnosisMapper, RepalBillDiagnosis> implements RepalBillDiagnosisService {
|
|
|
+ @Autowired
|
|
|
+ private InCaseService inCaseService;
|
|
|
+ @Autowired
|
|
|
+ private RepalBillService repalBillService;
|
|
|
+ @Autowired
|
|
|
+ private RepalBookService repalBookService;
|
|
|
+ @Autowired
|
|
|
+ private RepalRemindHistoryService repalRemindHistoryService;
|
|
|
+
|
|
|
+ private static String DIAGNOSIS_PREFIX = "REPAL_";
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RepalBillDiagnosis addRepalBillDiagnosis(Long userId, Long repalBillId, BigDecimal amt, List<String> companys) {
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ RepalBillDiagnosis diagnosis = new RepalBillDiagnosis();
|
|
|
+ diagnosis.setRepalBillId(repalBillId).setTimeCreated(now).setTimeModified(now).setDiagnosisDatetime(now)
|
|
|
+ .setDiagnosisStatus(DiagnosisStatusEnum.DIAGNOSIS_ING.getCode());
|
|
|
+ save(diagnosis);
|
|
|
+
|
|
|
+ List<DiagnosisDebtorDTO> diagnosisDebtorDTOS = companys.stream().map(this::convertDebtor).collect(Collectors.toList());
|
|
|
+ AddDiagnoseRecordDTO addDiagnoseRecordDTO = new AddDiagnoseRecordDTO();
|
|
|
+ addDiagnoseRecordDTO.setCreditorName(DIAGNOSIS_PREFIX+diagnosis.getId());
|
|
|
+ addDiagnoseRecordDTO.setDebtorName(StringUtils.join(companys,"、"));
|
|
|
+ addDiagnoseRecordDTO.setDebtorDTOList(diagnosisDebtorDTOS);
|
|
|
+ addDiagnoseRecordDTO.setCaseAmt(amt.doubleValue());
|
|
|
+ addDiagnoseRecordDTO.setRiskMode(0);
|
|
|
+ addDiagnoseRecordDTO.setUserId(userId);
|
|
|
+ addDiagnoseRecordDTO.setDiagnosisType(1);
|
|
|
+ ApiDataResult<DiagnosisRecord> result = inCaseService.performanceAssessment(addDiagnoseRecordDTO);
|
|
|
+ if(result.getData() !=null){
|
|
|
+ DiagnosisRecord record = result.getData();
|
|
|
+ diagnosis.setBizId(record.getDiagnosisId());
|
|
|
+ updateById(diagnosis);
|
|
|
+ if(record.getStatus() == 1) {
|
|
|
+ RiskScoreDataTransfer transfer = new RiskScoreDataTransfer();
|
|
|
+ transfer.setBizId(record.getDiagnosisId());
|
|
|
+ transfer.setStatus(record.getStatus());
|
|
|
+ transfer.setGrade(record.getGrade());
|
|
|
+ transfer.setScore(record.getScore().doubleValue());
|
|
|
+ updateGrade(transfer);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ RepalBill accountBill = repalBillService.getById(repalBillId);
|
|
|
+ RepalBook accountBook = repalBookService.getById(accountBill.getRepalBookId());
|
|
|
+ diagnosis.setDiagnosisStatus(DiagnosisStatusEnum.DIAGNOSIS_FAIL.getCode()).setTimeModified(now);
|
|
|
+ accountBill.setRefreshStatus(RefreshStatusEnum.REFRESH_FAIL.getCode()).setTimeModified(now);
|
|
|
+ accountBook.setRefreshStatus(RefreshStatusEnum.REFRESH_FAIL.getCode()).setTimeModified(now);
|
|
|
+ repalBillService.updateById(accountBill);
|
|
|
+ repalBookService.updateById(accountBook);
|
|
|
+ }
|
|
|
+ return diagnosis;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateGrade(RiskScoreDataTransfer transfer) {
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ Long id = transfer.getBizId();
|
|
|
+ LambdaQueryWrapper<RepalBillDiagnosis> queryWrapper = Wrappers.lambdaQuery(RepalBillDiagnosis.class);
|
|
|
+ queryWrapper.eq(RepalBillDiagnosis::getBizId,id);
|
|
|
+ queryWrapper.isNull(RepalBillDiagnosis::getDiagnosisGrade);
|
|
|
+ List<RepalBillDiagnosis> results = list(queryWrapper);
|
|
|
+ if(CollUtil.isEmpty(results)){
|
|
|
+ log.error("查询不到评分记录,id={}",id);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ results.forEach(result->{
|
|
|
+ Long repalBillId = result.getRepalBillId();
|
|
|
+ RepalBill accountBill = repalBillService.getById(repalBillId);
|
|
|
+ if(accountBill == null){
|
|
|
+ log.error("查询不到账款记录,accountBillId={}",repalBillId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Long repalBookId = accountBill.getRepalBookId();
|
|
|
+ RepalBook accountBook = repalBookService.getById(repalBookId);
|
|
|
+ if(accountBook == null){
|
|
|
+ log.error("查询不到账本记录,accountBookId={}",repalBookId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(Dict.RankStatusEnum.评分失败.getCode().equals(transfer.getStatus())){
|
|
|
+ result.setDiagnosisStatus(DiagnosisStatusEnum.DIAGNOSIS_FAIL.getCode()).setTimeModified(now);
|
|
|
+ accountBill.setRefreshStatus(RefreshStatusEnum.REFRESH_FAIL.getCode()).setTimeModified(now);
|
|
|
+ accountBook.setRefreshStatus(RefreshStatusEnum.REFRESH_FAIL.getCode()).setTimeModified(now);
|
|
|
+ }else {
|
|
|
+ result.setDiagnosisStatus(DiagnosisStatusEnum.DIAGNOSIS_SUCCESS.getCode())
|
|
|
+ .setTimeModified(now)
|
|
|
+ .setDiagnosisGrade(transfer.getGrade())
|
|
|
+ .setDiagnosisScore(BigDecimal.valueOf(transfer.getScore()))
|
|
|
+ .setDiagnosisDetail(JSON.toJSONString(transfer));
|
|
|
+ //更新账款
|
|
|
+ boolean isChangePre = setGrade(result,accountBill);
|
|
|
+ //更新账本状态
|
|
|
+ if(repalBillService.checkAllBillRefreshStatus(repalBookId,repalBillId)){
|
|
|
+ accountBook.setRefreshStatus(RefreshStatusEnum.REFRESH_SUCCESS.getCode());
|
|
|
+ }
|
|
|
+ //评级变更智能提醒,如果分数有变化的话
|
|
|
+ if(isChangePre) {
|
|
|
+ log.info("开始新增分数变更智能提醒");
|
|
|
+ repalRemindHistoryService.insertRankRemind(accountBill, result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ updateById(result);
|
|
|
+ repalBillService.updateById(accountBill);
|
|
|
+ repalBookService.updateById(accountBook);
|
|
|
+ });
|
|
|
+ log.info("完成更新账款状态");
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean setGrade(RepalBillDiagnosis result,RepalBill repalBill){
|
|
|
+ boolean isChangePre = false;
|
|
|
+ LambdaQueryWrapper<RepalBillDiagnosis> qw = Wrappers.lambdaQuery(RepalBillDiagnosis.class);
|
|
|
+ qw.eq(RepalBillDiagnosis::getRepalBillId,repalBill.getId());
|
|
|
+ qw.lt(RepalBillDiagnosis::getTimeCreated,result.getTimeCreated());
|
|
|
+ qw.orderByDesc(RepalBillDiagnosis::getId);
|
|
|
+ RepalBillDiagnosis lastDiagnosis = getOne(qw,false);
|
|
|
+ if(lastDiagnosis !=null && lastDiagnosis.getDiagnosisScore().compareTo(result.getDiagnosisScore()) !=0){
|
|
|
+ repalBill.setPreDiagnosisId(lastDiagnosis.getId());
|
|
|
+ repalBill.setPreDiagnosisGrade(lastDiagnosis.getDiagnosisGrade());
|
|
|
+ repalBill.setPreDiagnosisDatetime(lastDiagnosis.getDiagnosisDatetime());
|
|
|
+ repalBill.setPreDiagnosisScore(lastDiagnosis.getDiagnosisScore());
|
|
|
+ int trend = result.getDiagnosisScore().compareTo(lastDiagnosis.getDiagnosisScore());
|
|
|
+ trend = trend < 0 ? 2: trend;
|
|
|
+ repalBill.setDiagnosisTrend(trend);
|
|
|
+ isChangePre=true;
|
|
|
+ }
|
|
|
+ repalBill.setDiagnosisId(result.getId());
|
|
|
+ repalBill.setDiagnosisGrade(result.getDiagnosisGrade());
|
|
|
+ repalBill.setDiagnosisScore(result.getDiagnosisScore());
|
|
|
+ repalBill.setDiagnosisDatetime(result.getDiagnosisDatetime());
|
|
|
+ repalBill.setRefreshStatus(RefreshStatusEnum.REFRESH_SUCCESS.getCode());
|
|
|
+ repalBill.setTimeModified(LocalDateTime.now());
|
|
|
+ return isChangePre;
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 生成评估对象
|
|
|
+ * @param companyName
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private DiagnosisDebtorDTO convertDebtor(String companyName){
|
|
|
+ DiagnosisDebtorDTO debtorDTO = new DiagnosisDebtorDTO();
|
|
|
+ debtorDTO.setLitigantType(Dict.LitigantTypeEnum.企业.getCode());
|
|
|
+ debtorDTO.setLitigantName(companyName);
|
|
|
+ return debtorDTO;
|
|
|
+ }
|
|
|
}
|