diff --git a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributorapply/BaseDistributorApplyService.java b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributorapply/BaseDistributorApplyService.java index 30802aa514..29a6e8a44d 100644 --- a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributorapply/BaseDistributorApplyService.java +++ b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributorapply/BaseDistributorApplyService.java @@ -691,14 +691,14 @@ public class BaseDistributorApplyService extends MybatisBaseService variables = BeanUtil.beanToMap(dto); Map appMap = new HashMap<>(); //若有网关,则赋值网关中判断的字段。 -// boolean isDecide = true; -// //去查询是否同意 -// if (StringUtils.isNotBlank(entity.getAgree())) { -// if (entity.getAgree().equals("0")) { -// isDecide = false; -// } -// } -// variables.put("isDecide", isDecide); + boolean isTure = true; + //去查询是否同意 + if (StringUtils.isNotBlank(entity.getSalesUserSid())) { + if (!entity.getCreateBySid().equals(entity.getSalesUserSid())) { + isTure = false; + } + } + variables.put("isTure", isTure); variables.put("businessSid", businessSid); appMap.put("sid", businessSid); variables.put("app", appMap); @@ -712,10 +712,10 @@ public class BaseDistributorApplyService extends MybatisBaseService variables = new HashMap<>(); Map appMap = new HashMap<>(); //若有网关,则赋值网关中判断的字段。 -// boolean isDecide = true; -// //去查询是否同意 -// if (StringUtils.isNotBlank(baseDistributorApply.getAgree())) { -// if (baseDistributorApply.getAgree().equals("0")) { -// isDecide = false; -// } -// } -// variables.put("isDecide", isDecide); + boolean isTure = true; + //去查询是否同意 + if (StringUtils.isNotBlank(baseDistributorApply.getSalesUserSid())) { + if (!baseDistributorApply.getCreateBySid().equals(baseDistributorApply.getSalesUserSid())) { + isTure = false; + } + } + variables.put("isTure", isTure); + if (bv.getTaskDefKey().equals("Activity_000ze1d")) { + if (StringUtils.isNotBlank(baseDistributorApply.getManageSid())) { + bv.setNextNodeUserSids(baseDistributorApply.getManageSid()); + } else { + bv.setNextNodeUserSids(ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId()); + } + } variables.put("businessSid", businessSid); appMap.put("sid", businessSid); variables.put("app", appMap); @@ -1089,14 +1096,14 @@ public class BaseDistributorApplyService extends MybatisBaseService resultBean = flowableFeign.taskReject(flowTaskVo); if (!resultBean.getSuccess()) { @@ -1211,14 +1218,14 @@ public class BaseDistributorApplyService extends MybatisBaseService variables = new HashMap<>(); //根据业务sid查询排产信息 BaseDistributorApply baseDistributorApply = fetchBySid(query.getBusinessSid()); -// boolean isDecide = true; -// //去查询是否同意 -// if (StringUtils.isNotBlank(baseDistributorApply.getAgree())) { -// if (baseDistributorApply.getAgree().equals("0")) { -// isDecide = false; -// } -// } -// variables.put("isDecide", isDecide); + boolean isTure = true; + //去查询是否同意 + if (StringUtils.isNotBlank(baseDistributorApply.getSalesUserSid())) { + if (!baseDistributorApply.getCreateBySid().equals(baseDistributorApply.getSalesUserSid())) { + isTure = false; + } + } + variables.put("isTure", isTure); bv.setFormVariables(variables); bv.setModelId(baseDistributorApply.getProcDefId()); ResultBean>> resultBean = flowTaskFeign.getNextNodesForSubmit(bv); @@ -1235,14 +1242,14 @@ public class BaseDistributorApplyService extends MybatisBaseService variables = new HashMap<>(); //根据业务sid查询排产信息 BaseDistributorApply baseDistributorApply = fetchBySid(query.getBusinessSid()); -// boolean isDecide = true; -// //去查询是否同意 -// if (StringUtils.isNotBlank(baseDistributorApply.getAgree())) { -// if (baseDistributorApply.getAgree().equals("0")) { -// isDecide = false; -// } -// } -// variables.put("isDecide", isDecide); + boolean isTure = true; + //去查询是否同意 + if (StringUtils.isNotBlank(baseDistributorApply.getSalesUserSid())) { + if (!baseDistributorApply.getCreateBySid().equals(baseDistributorApply.getSalesUserSid())) { + isTure = false; + } + } + variables.put("isTure", isTure); bv.setFormVariables(variables); bv.setModelId(baseDistributorApply.getProcDefId()); ResultBean>> resultBean = flowTaskFeign.getPreviousNodesForReject(bv); @@ -1981,14 +1988,14 @@ public class BaseDistributorApplyService extends MybatisBaseService variables = BeanUtil.beanToMap(dto); Map appMap = new HashMap<>(); //若有网关,则赋值网关中判断的字段。 -// boolean isDecide = true; -// //去查询是否同意 -// if (StringUtils.isNotBlank(entity.getAgree())) { -// if (entity.getAgree().equals("0")) { -// isDecide = false; -// } -// } -// variables.put("isDecide", isDecide); + boolean isTure = true; + //去查询是否同意 + if (StringUtils.isNotBlank(entity.getSalesUserSid())) { + if (!entity.getCreateBySid().equals(entity.getSalesUserSid())) { + isTure = false; + } + } + variables.put("isTure", isTure); variables.put("businessSid", businessSid); appMap.put("sid", businessSid); variables.put("app", appMap); @@ -2002,10 +2009,10 @@ public class BaseDistributorApplyService extends MybatisBaseService> listPage(@RequestBody PagerQuery pq); + @ApiOperation("保存还款记录") @PostMapping("/saveHistory") @ResponseBody public ResultBean saveHistory(@RequestBody LoanRepaymentHistoryDto dto); + @ApiOperation("调整记录") + @PostMapping("/updateRecord") + @ResponseBody + public ResultBean updateRecord(@RequestBody LoanRepaymentHistoryUpdate dto); + + @ApiOperation("月还调整回显") + @GetMapping("/updateRecordInfo") + @ResponseBody + public ResultBean updateRecordInfo(@RequestParam("sid") String sid); + @ApiOperation("删除还款记录") @DeleteMapping("/deleteHistory") public ResultBean deleteHistory(@RequestParam("scheduleSid") String scheduleSid); + @ApiOperation(value = "导入") + @PostMapping("/getExcelInfo") + @ResponseBody + public ResultBean getExcelInfo(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request) throws IOException, ParseException; + @ApiOperation(value = "下载模板") + @PostMapping("/downloadExcel") + public void downloadExcel(); } diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryFeignFallback.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryFeignFallback.java index 93fa7fbbea..2b80821201 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryFeignFallback.java +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryFeignFallback.java @@ -1,7 +1,14 @@ package com.yxt.anrui.riskcenter.api.loanrepaymenthistory; +import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.text.ParseException; /** * @author Administrator @@ -12,13 +19,39 @@ import org.springframework.stereotype.Component; public class LoanRepaymentHistoryFeignFallback implements LoanRepaymentHistoryFeign { + @Override + public ResultBean> listPage(PagerQuery pq) { + return null; + } + @Override public ResultBean saveHistory(LoanRepaymentHistoryDto dto) { return null; } + @Override + public ResultBean updateRecord(LoanRepaymentHistoryUpdate dto) { + return null; + } + + @Override + public ResultBean updateRecordInfo(String sid) { + return null; + } + @Override public ResultBean deleteHistory(String scheduleSid) { return null; } + + @Override + public ResultBean getExcelInfo(MultipartFile file, HttpServletRequest request) throws IOException, ParseException { + return null; + } + + + @Override + public void downloadExcel() { + + } } diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryQuery.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryQuery.java new file mode 100644 index 0000000000..1b237c7180 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryQuery.java @@ -0,0 +1,59 @@ +package com.yxt.anrui.riskcenter.api.loanrepaymenthistory; + +import com.yxt.common.core.query.Query; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Administrator + * @description + * @date 2023/11/9 16:08 + */ +@Data +public class LoanRepaymentHistoryQuery implements Query { + + + @ApiModelProperty("消贷合同编号") + private String loanContractNo; + @ApiModelProperty("车架号") + private String vinNo; + @ApiModelProperty("资方名称") + private String bankName; + @ApiModelProperty("资方合同") + private String bankContractNo; + @ApiModelProperty("客户") + private String customer; + @ApiModelProperty("借款人名称") + private String borrowerName; + @ApiModelProperty("期数") + private String period; + @ApiModelProperty("还款方式") + private String returnWay; + @ApiModelProperty("还款方式key") + private String returnWayKey; + @ApiModelProperty("应还开始日期") + private String dueStartDate; + @ApiModelProperty("应还结束日期") + private String dueEndDate; + @ApiModelProperty("实还开始日期") + private String actualStartDate; + @ApiModelProperty("实还结束日期") + private String actualEndDate; + @ApiModelProperty("数据开始日期") + private String dataStartTime; + @ApiModelProperty("数据结束日期") + private String dataEndTime; + @ApiModelProperty("划扣状态") + private String buckle; + @ApiModelProperty("划扣状态key") + private String buckleKey; + + @ApiModelProperty("组织全路径") + private String orgPath; + @ApiModelProperty("菜单sid") + private String menuSid; + @ApiModelProperty("菜单url") + private String menuUrl; + @ApiModelProperty("用户sid") + private String userSid; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryUpdate.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryUpdate.java new file mode 100644 index 0000000000..3859309095 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryUpdate.java @@ -0,0 +1,36 @@ +package com.yxt.anrui.riskcenter.api.loanrepaymenthistory; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author Administrator + * @description + * @date 2023/11/9 14:42 + */ +@Data +public class LoanRepaymentHistoryUpdate { + private String sid; + private String loanContractNo; + private String bankName; + private String bankContractNo; + private String borrowerName; + private String vinNo; + private String period; + @ApiModelProperty("应还日期") + private String dueDate; + @ApiModelProperty("未还金额") + private String outstandingMoney; + @ApiModelProperty("应还金额") + private String dueMoney; + @ApiModelProperty("还款方式") + private String returnWay; + @ApiModelProperty("实还金额") + private String actualMoney; + @ApiModelProperty("还款方式key") + private String returnWayKey; + +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryVo.java new file mode 100644 index 0000000000..17c58e7b52 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/LoanRepaymentHistoryVo.java @@ -0,0 +1,51 @@ +package com.yxt.anrui.riskcenter.api.loanrepaymenthistory; + +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author Administrator + * @description + * @date 2023/11/9 16:07 + */ +@Data +public class LoanRepaymentHistoryVo implements Vo { + + private String sid; + @ApiModelProperty("消贷合同编号") + private String loanContractNo; + @ApiModelProperty("车架号") + private String vinNo; + @ApiModelProperty("资方合同") + private String bankContractNo; + @ApiModelProperty("资方名称") + private String bankName; + @ApiModelProperty("客户") + private String customer; + @ApiModelProperty("期数") + private String period; + @ApiModelProperty("借款人名称") + private String borrowerName; + @ApiModelProperty("应还日期") + private String dueDate; + @ApiModelProperty("应还金额") + private String dueMoney; + @ApiModelProperty("实还日期") + private String actualDate; + @ApiModelProperty("数据日期") + private String dataTime; + @ApiModelProperty("实还金额") + private String actualMoney; + @ApiModelProperty("本期未还金额") + private String outstandingMoney; + @ApiModelProperty("划扣状态") + private String buckle; + @ApiModelProperty("还款方式") + private String returnWay; + + +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/RepaymentExcelInfo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/RepaymentExcelInfo.java new file mode 100644 index 0000000000..9115f2110a --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/RepaymentExcelInfo.java @@ -0,0 +1,18 @@ +package com.yxt.anrui.riskcenter.api.loanrepaymenthistory; + +import lombok.Data; + +/** + * @author Administrator + * @description + * @date 2023/11/9 11:24 + */ +@Data +public class RepaymentExcelInfo { + + private String bankContractNo; + private String period; + private String realReturnTime; + private String realMoney; + +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/ReturnExcelInfo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/ReturnExcelInfo.java new file mode 100644 index 0000000000..20b3bac4e3 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymenthistory/ReturnExcelInfo.java @@ -0,0 +1,17 @@ +package com.yxt.anrui.riskcenter.api.loanrepaymenthistory; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Administrator + * @description + * @date 2023/11/9 11:33 + */ +@Data +public class ReturnExcelInfo { + private String checkInfo; + private List infos = new ArrayList<>(); +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryMapper.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryMapper.java index 3043ef013c..b5dc6bf4df 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryMapper.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryMapper.java @@ -2,8 +2,12 @@ package com.yxt.anrui.riskcenter.biz.loanrepaymenthistory; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistory; +import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistoryUpdate; import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanDetails; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** @@ -16,4 +20,8 @@ public interface LoanRepaymentHistoryMapper extends BaseMapper selHistoryByPlanSid(@Param("planSid") String planSid); + + LoanRepaymentHistoryUpdate updateRecordInfo(String sid); } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryMapper.xml b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryMapper.xml index 32be7a1769..5440bd86d4 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryMapper.xml +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryMapper.xml @@ -3,9 +3,37 @@ + + + DELETE FROM loan_repayment_history WHERE scheduleSid = #{scheduleSid} + \ No newline at end of file diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryRest.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryRest.java index 0cad8509cd..fbd8926421 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryRest.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryRest.java @@ -1,15 +1,25 @@ package com.yxt.anrui.riskcenter.biz.loanrepaymenthistory; -import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistoryDto; -import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistoryFeign; +import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.*; import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanDetailsDto; import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanDetailsFeign; +import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.text.ParseException; /** * @description: @@ -24,13 +34,63 @@ public class LoanRepaymentHistoryRest implements LoanRepaymentHistoryFeign { @Autowired private LoanRepaymentHistoryService loanRepaymentHistoryService; + @Autowired + private HttpServletResponse response; + + @Override + public ResultBean> listPage(PagerQuery pq) { + return null; + } + @Override public ResultBean saveHistory(LoanRepaymentHistoryDto dto) { return loanRepaymentHistoryService.saveHistory(dto); } + @Override + public ResultBean updateRecord(LoanRepaymentHistoryUpdate dto) { + return loanRepaymentHistoryService.updateRecord(dto); + } + + @Override + public ResultBean updateRecordInfo(String sid) { + return loanRepaymentHistoryService.updateRecordInfo(sid); + } + @Override public ResultBean deleteHistory(String scheduleSid) { return loanRepaymentHistoryService.deleteHistory(scheduleSid); } + + @Override + public ResultBean getExcelInfo(MultipartFile file, HttpServletRequest request) throws IOException, ParseException { + return loanRepaymentHistoryService.getExcelInfo(file, request, response); + } + + @Override + public void downloadExcel() { + try { + InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("static/还款导入模板.xls"); + //获取要下载的模板名称 + String fileName = "还款导入模板.xls"; + response.setHeader("content-type", "application/octet-stream"); + response.setContentType("application/octet-stream"); + // 下载文件能正常显示中文 + fileName = URLEncoder.encode(fileName, "UTF-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + response.setHeader("fileName", fileName); + response.setHeader("Access-Control-Expose-Headers", "filename"); + + OutputStream out = response.getOutputStream(); + byte[] b = new byte[2048]; + int len; + while ((len = resourceAsStream.read(b)) != -1) { + out.write(b, 0, len); + } + out.close(); + resourceAsStream.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryService.java index 01dc875373..ec8263402c 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryService.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymenthistory/LoanRepaymentHistoryService.java @@ -1,13 +1,36 @@ package com.yxt.anrui.riskcenter.biz.loanrepaymenthistory; import cn.hutool.core.bean.BeanUtil; -import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistory; -import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistoryDto; +import cn.hutool.core.date.DateTime; +import com.yxt.anrui.base.api.basemodelmodprice.BaseModelModpriceImportReturn; +import com.yxt.anrui.base.api.basemodelmodprice.BaseModelModpriceImportVo; +import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.*; import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanDetails; import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanDetailsDto; +import com.yxt.anrui.riskcenter.biz.loanrepaymentplandetails.LoanRepaymentPlanDetailsService; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.core.result.ResultBean; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; /** @@ -18,6 +41,8 @@ import org.springframework.stereotype.Service; @Service public class LoanRepaymentHistoryService extends MybatisBaseService { + @Autowired + private LoanRepaymentPlanDetailsService loanRepaymentPlanDetailsService; public ResultBean saveHistory(LoanRepaymentHistoryDto dto) { ResultBean rb = ResultBean.fireFail(); @@ -32,4 +57,223 @@ public class LoanRepaymentHistoryService extends MybatisBaseService selHistoryByPlanSid(String planSid) { + return baseMapper.selHistoryByPlanSid(planSid); + } + + @Transactional(rollbackFor = Exception.class) + public ResultBean getExcelInfo(MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException, ParseException { + ResultBean rb = ResultBean.fireFail(); + String temp = request.getSession().getServletContext().getRealPath(File.separator) + "temp";// 临时目录 + File tempFile = new File(temp); + if (!tempFile.exists()) { + tempFile.mkdirs(); + } + String fileName = file.getOriginalFilename(); + if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) { + return rb.fail().setMsg("上传文件不正确"); + } + + int[] resultCell = new int[]{0, 1, 2, 3}; + List resultList = new ArrayList<>(); + boolean isExcel2003 = true; + if (fileName.matches("^.+\\.(?i)(xlsx)$")) { + isExcel2003 = false; + } + InputStream is = file.getInputStream(); + Workbook wb = null; + if (isExcel2003) { + wb = new HSSFWorkbook(is); + } else { + wb = new XSSFWorkbook(is); + } + Sheet sheet = wb.getSheetAt(0); + ReturnExcelInfo importReturn = getSheetVal(sheet, resultCell); + resultList = importReturn.getInfos(); + System.out.println("结果是--->" + resultList); + importReturn.setInfos(resultList); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String currentTime = simpleDateFormat.format(System.currentTimeMillis()); + StringBuffer checkBankNo = new StringBuffer(); + if (!resultList.isEmpty()) { + int size = resultList.size(); + importReturn.setCheckInfo(currentTime + " " + "录入成功" + String.valueOf(size) + "条记录。"); + //保存还款记录 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + for (RepaymentExcelInfo repaymentExcelInfo : resultList) { + List planDetails = loanRepaymentPlanDetailsService.selPlanByNoAndPeriod(repaymentExcelInfo.getBankContractNo(), repaymentExcelInfo.getPeriod()); + if (!planDetails.isEmpty()) { + for (LoanRepaymentPlanDetails planDetail : planDetails) { + LoanRepaymentHistory repaymentHistory = new LoanRepaymentHistory(); + repaymentHistory.setBuckle("未申请"); + repaymentHistory.setBuckleKey("001"); + repaymentHistory.setScheduleSid(planDetail.getScheduleSid()); + repaymentHistory.setPlanDetailSid(planDetail.getSid()); + repaymentHistory.setActualDate(sdf.parse(repaymentExcelInfo.getRealReturnTime())); + BigDecimal realMoney = new BigDecimal(repaymentExcelInfo.getRealMoney()); + BigDecimal divide = realMoney.divide(new BigDecimal(planDetails.size()), 2, BigDecimal.ROUND_HALF_UP); + repaymentHistory.setActualMoney(divide); + repaymentHistory.setDataTime(new DateTime()); + List histories = baseMapper.selHistoryByPlanSid(planDetail.getSid()); + BigDecimal returned = new BigDecimal(0); + if (!histories.isEmpty()) { + for (LoanRepaymentHistory history : histories) { + returned = history.getActualMoney().add(returned); + } + } + BigDecimal decimal = returned.add(divide); + BigDecimal dueMoney = planDetail.getDueMoney(); + BigDecimal subtract = dueMoney.subtract(decimal); + repaymentHistory.setOutstandingMoney(subtract); + baseMapper.insert(repaymentHistory); + } + } + } + + return rb.success().setData(importReturn); + } else { + String checkResult = importReturn.getCheckInfo(); + return rb.fail().setMsg(checkResult); + } + } + + private ReturnExcelInfo getSheetVal(Sheet sheet, int[] resultCell) { + ReturnExcelInfo importReturn = new ReturnExcelInfo(); + List importVoList = new ArrayList<>(); + int[] resultIndex = new int[resultCell.length]; + StringBuffer sb = new StringBuffer(); + for (int r = 1; r <= sheet.getLastRowNum(); r++) { + Row row = sheet.getRow(r); + if (row == null) { + continue; + } + RepaymentExcelInfo importVo = new RepaymentExcelInfo(); + for (int i = 0; i < row.getPhysicalNumberOfCells(); i++) { + String trim = new String(); + try { + trim = getCellVal(row.getCell(i)).toString().trim(); + if (StringUtils.isBlank(trim)) { + NullPointerException nullPointerException = new NullPointerException(); + } + String temp = getCellVal(row.getCell(i)).toString().trim(); + for (int j = 0; j < resultCell.length; j++) { + if (i == resultCell[j]) { + switch (i) { + case 0: + importVo.setBankContractNo(temp); + break; + case 1: + importVo.setPeriod(temp); + break; + case 2: + importVo.setRealReturnTime(temp); + break; + case 3: + importVo.setRealMoney(temp); + break; + default: + break; + } + } else { + continue; + } + } + } catch (Exception e) { + if (StringUtils.isBlank(trim)) { + String word = new String(); + switch (i) { + case 0: + word = "资方合同号"; + break; + case 1: + word = "期数"; + break; + case 2: + word = "实还日期"; + break; + case 3: + word = "实还金额"; + break; + default: + break; + } + String checkResult = "第" + (r + 1) + "行" + word + "为空"; + sb.append(checkResult).append(";"); + continue; + } + } + } + importVoList.add(importVo); + } + importReturn.setInfos(importVoList); + if (StringUtils.isNotBlank(sb.toString())) { + sb.delete(sb.length() - 1, sb.length()); + importReturn.setCheckInfo(sb.toString()); + importReturn.setInfos(new ArrayList<>()); + return importReturn; + } + return importReturn; + } + + public Object getCellVal(Cell cell) { + Object obj = null; + if (cell != null) { + switch (cell.getCellTypeEnum()) { + case BOOLEAN: + obj = cell.getBooleanCellValue(); + break; + case ERROR: + obj = cell.getErrorCellValue(); + break; + case NUMERIC: + obj = cell.getNumericCellValue(); + break; + case STRING: + obj = cell.getStringCellValue(); + break; + default: + break; + } + } + return obj; + } + + public ResultBean updateRecord(LoanRepaymentHistoryUpdate dto) { + ResultBean rb = ResultBean.fireFail(); + String sid = dto.getSid(); + LoanRepaymentHistory repaymentHistory = fetchBySid(sid); + if (StringUtils.isNotBlank(dto.getReturnWay())) { + repaymentHistory.setReturnWay(dto.getReturnWay()); + } + if (StringUtils.isNotBlank(dto.getReturnWayKey())) { + repaymentHistory.setReturnWayKey(dto.getReturnWayKey()); + } + if (StringUtils.isNotBlank(dto.getActualMoney())) { + BigDecimal realMoney = new BigDecimal(dto.getActualMoney()); + repaymentHistory.setActualMoney(realMoney); + List histories = baseMapper.selHistoryByPlanSid(repaymentHistory.getPlanDetailSid()); + BigDecimal returned = new BigDecimal(0); + if (!histories.isEmpty()) { + for (LoanRepaymentHistory history : histories) { + returned = history.getActualMoney().add(returned); + } + } + LoanRepaymentPlanDetails loanRepaymentPlanDetails = loanRepaymentPlanDetailsService.fetchBySid(repaymentHistory.getPlanDetailSid()); + if (null != loanRepaymentPlanDetails) { + BigDecimal decimal = returned.add(realMoney); + BigDecimal dueMoney = loanRepaymentPlanDetails.getDueMoney(); + BigDecimal subtract = dueMoney.subtract(decimal); + repaymentHistory.setOutstandingMoney(subtract); + } + } + baseMapper.updateById(repaymentHistory); + return rb.success(); + } + + public ResultBean updateRecordInfo(String sid) { + ResultBean rb = ResultBean.fireFail(); + LoanRepaymentHistoryUpdate vo = baseMapper.updateRecordInfo(sid); + return rb.success().setData(vo); + } } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.java index 390ad79b52..5a550e3ae0 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.java @@ -25,4 +25,6 @@ public interface LoanRepaymentPlanDetailsMapper extends BaseMapper selPlanByNoAndPeriod(@Param("bankContractNo") String bankContractNo, @Param("period") String period); } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.xml b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.xml index 6455e4b38b..df3f4484f3 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.xml +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.xml @@ -8,4 +8,12 @@ FROM loan_repayment_plan_details WHERE scheduleSid = #{scheduleSid} + \ No newline at end of file diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsService.java index 9d47b2d2ae..3f5788beb6 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsService.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsService.java @@ -75,15 +75,6 @@ public class LoanRepaymentPlanDetailsService extends MybatisBaseService selPlanByNoAndPeriod(String bankContractNo,String period) { + return baseMapper.selPlanByNoAndPeriod(bankContractNo,period); + } + } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/static/还款导入模板.xls b/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/static/还款导入模板.xls new file mode 100644 index 0000000000..387f63e97c Binary files /dev/null and b/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/static/还款导入模板.xls differ