repaymentController.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. package com.huyi.service.repayment.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.deepoove.poi.XWPFTemplate;
  6. import com.huyi.service.base.entity.*;
  7. import com.huyi.service.base.service.*;
  8. import com.huyi.service.repayment.service.IOwnRepaymentService;
  9. import com.keao.tianhu.starter.mybatis.plus.entity.QueryRequest;
  10. import com.tianhu.common.core.domain.R;
  11. import com.tianhu.common.core.utils.CommonUtil;
  12. import com.tianhu.common.core.utils.ConvertUpMoneyUtil;
  13. import com.tianhu.common.core.utils.DateUtils;
  14. import com.tianhu.common.core.utils.file.ExcelFileUtils;
  15. import com.tianhu.common.core.web.controller.BaseController;
  16. import com.tianhu.common.core.web.domain.AjaxResult;
  17. import com.tianhu.common.log.annotation.Log;
  18. import com.tianhu.common.log.enums.BusinessType;
  19. import com.tianhu.common.redis.common.RedisUtils;
  20. import com.tianhu.common.redis.domain.SysDictData;
  21. import com.tianhu.common.security.annotation.PreAuthorize;
  22. import com.tianhu.common.security.service.TokenService;
  23. import com.tianhu.system.api.RemoteConfigService;
  24. import com.tianhu.system.api.RemoteSystemService;
  25. import com.tianhu.system.api.domain.SysUser;
  26. import org.apache.commons.io.FileUtils;
  27. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  28. import org.slf4j.Logger;
  29. import org.slf4j.LoggerFactory;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.transaction.annotation.Transactional;
  32. import org.springframework.web.bind.annotation.*;
  33. import javax.servlet.http.HttpServletResponse;
  34. import java.io.*;
  35. import java.net.URLEncoder;
  36. import java.util.ArrayList;
  37. import java.util.HashMap;
  38. import java.util.List;
  39. import java.util.Map;
  40. /**
  41. * 还款controller
  42. *
  43. * @author ch
  44. * @date 2021-8-24
  45. */
  46. @RestController
  47. @RequestMapping("/repayment")
  48. public class repaymentController extends BaseController {
  49. private static final Logger log = LoggerFactory.getLogger(repaymentController.class);
  50. @Autowired
  51. private IOwnRepaymentService ownRepaymentService;
  52. @Autowired
  53. private RemoteConfigService configService;
  54. @Autowired
  55. private IZcFinanceRecordService zcFinanceRecordService;
  56. @Autowired
  57. private IZcFinanceInfService zcFinanceInfService;
  58. @Autowired
  59. private TokenService tokenService;
  60. @Autowired
  61. private RemoteSystemService remoteSystemService;
  62. @Autowired
  63. private ISysCompanyService sysCompanyService;
  64. @Autowired
  65. private ISysUserCompanyRelService sysUserCompanyRelService;
  66. @Autowired
  67. private ISysNoticeService sysNoticeService;
  68. /**
  69. * 查询全部还款列表
  70. * @param type
  71. * @param value
  72. * @param repaymentDate
  73. * @param request
  74. * @return
  75. */
  76. @GetMapping("/list")
  77. public AjaxResult list(String type, String value,
  78. @RequestParam(required = false) Map repaymentDate,
  79. String status, QueryRequest request) {
  80. //TODO 根据企业类型展示自己的还款记录信息
  81. //当前用户
  82. SysUser user = tokenService.getLoginUser().getSysUser();
  83. //企业Id
  84. String company = user.getCompanyId();
  85. //企业类型
  86. String companyType = user.getCompanyType();
  87. Map map = new HashMap(16);
  88. // 企业类型 00:平台,01:核心企业,02:供应商,03:资方
  89. if("02".equals(companyType)){
  90. map.put("supplierId",company);
  91. }else if("01".equals(companyType)){
  92. map.put("coreId",company);
  93. }else if("03".equals(companyType)){
  94. map.put("management",company);
  95. }
  96. if(CommonUtil.isNotEmpty(type)){
  97. if("00".equals(type)){
  98. //资金方
  99. map.put("scyName",value);
  100. }else if("02".equals(type)){
  101. //融信编号
  102. map.put("zfiNumber",value);
  103. }else if("01".equals(type)){
  104. //融资编号
  105. map.put("zfrNumber",value);
  106. }else {
  107. //融资方
  108. map.put("supplier",value);
  109. }
  110. }
  111. //承诺还款日期
  112. map.put("start",repaymentDate.get("repaymentDate[0]"));
  113. map.put("end",repaymentDate.get("repaymentDate[1]"));
  114. //还款状态
  115. map.put("zfrApplyStatus",status);
  116. IPage<Map> list = ownRepaymentService.selectRepaymentList(map,request);
  117. return AjaxResult.success(list);
  118. }
  119. /**
  120. * 查询还款详情
  121. * @param zfrId
  122. * @return
  123. */
  124. @PreAuthorize(hasPermi = "service:repayment:query")
  125. @GetMapping(value = "/{zfrId}")
  126. public AjaxResult getInfo(@PathVariable("zfrId") String zfrId)
  127. {
  128. Map map = new HashMap(16);
  129. map.put("zfrId",zfrId);
  130. List<Map> result = ownRepaymentService.selectById(map);
  131. return AjaxResult.success(result);
  132. }
  133. /**
  134. * 待还款导出
  135. * @param response
  136. * @return
  137. */
  138. @PreAuthorize(hasPermi = "service:repayment:export")
  139. @Log(title = "待还款导出", businessType = BusinessType.EXPORT)
  140. @Transactional(rollbackFor=Exception.class)
  141. @PostMapping("/export")
  142. public R export(HttpServletResponse response){
  143. //最终结果集
  144. List detailList = new ArrayList();
  145. //判断到处哪些日志
  146. Map map = new HashMap();
  147. //map.put("zfrApplyStatus","01");
  148. List<Map> list = ownRepaymentService.selectNoPageRepaymentList(map);
  149. //从缓存中获取字典值用于转义。
  150. List<SysDictData> workState = RedisUtils.getDictCache("zc_zfr_apply_status");
  151. Map<String,String> stateMap = new HashMap();
  152. for (Object object : workState) {
  153. if (object instanceof SysDictData) {
  154. SysDictData dictData = (SysDictData)object;
  155. stateMap.put(dictData.getDictValue(),dictData.getDictLabel());
  156. } else if (object instanceof JSONObject) {
  157. JSONObject dictData = (JSONObject)object;
  158. stateMap.put(String.valueOf(dictData.get("dictValue")),String.valueOf(dictData.get("dictLabel")));
  159. }
  160. }
  161. //将获得的list中的是否加班字段替换为汉字
  162. for(Map changeMap:list){
  163. String zfrApplyStatus = CommonUtil.objToString(changeMap.get("zfrApplyStatus"));
  164. changeMap.put("zfrApplyStatus",stateMap.get(zfrApplyStatus));
  165. detailList.add(changeMap);
  166. }
  167. //导出文档名称
  168. String fileName = "待还款列表";
  169. //查询表头
  170. List<String> tableT = new ArrayList<>();
  171. tableT.add("融信编号#zfiNumber");
  172. tableT.add("还款承诺函编号#zfiPaymentNumber");
  173. tableT.add("最终还款方#core");
  174. tableT.add("还款金额(元)#zfrLoanAmount");
  175. tableT.add("还款银行账户#zfpcrAccount");
  176. tableT.add("实际还款日期#zfrPayDate");
  177. tableT.add("承诺付款日期#zfrRepaymentDate");
  178. tableT.add("还款状态#zfrApplyStatus");
  179. //执行导出
  180. try {
  181. HSSFWorkbook wb = ExcelFileUtils.export(response,fileName,tableT,detailList);
  182. response.setCharacterEncoding("UTF-8");
  183. // 设置contentType为excel格式
  184. response.setContentType("application/vnd.ms-excel;charset=utf-8");
  185. //默认Excel名称
  186. response.setHeader("Content-disposition", "attachment;filename=" + "还款详情"+ URLEncoder.encode(fileName + ".xls", "UTF-8"));
  187. response.flushBuffer();
  188. OutputStream outputStream = response.getOutputStream();
  189. wb.write(outputStream);
  190. if (outputStream != null) {
  191. try {
  192. outputStream.close();
  193. } catch (IOException var20) {
  194. var20.printStackTrace();
  195. }
  196. }
  197. } catch (Exception var22) {
  198. log.error("导出Excel异常{}", var22.getMessage());
  199. }
  200. return R.ok();
  201. }
  202. /**
  203. * 还款明细下载
  204. * @param response
  205. * @return
  206. */
  207. @PreAuthorize(hasPermi = "service:repayment:downLoad")
  208. @Log(title = "还款明细下载", businessType = BusinessType.EXPORT)
  209. @Transactional(rollbackFor=Exception.class)
  210. @PostMapping("/export/{zfrId}")
  211. public AjaxResult downLoad(HttpServletResponse response,@PathVariable String zfrId) throws Exception {
  212. // String directory = "D:\\" ;
  213. String directory = configService.selectConfigByKey("zc_repayment_export").getMsg();
  214. //查询还款明细表
  215. Map map = new HashMap(16);
  216. map.put("zfrId",zfrId);
  217. List<Map> result = ownRepaymentService.selectById(map);
  218. //编号
  219. String zfrPayNumber = CommonUtil.objToString(result.get(0).get("zfrPayNumber"));
  220. //最终付款方
  221. String core = CommonUtil.objToString(result.get(0).get("core"));
  222. //还款承诺函编号
  223. String zfiPaymentNumber = CommonUtil.objToString(result.get(0).get("zfiPaymentNumber"));
  224. //承诺付款日期
  225. String zfrRepaymentDate = CommonUtil.objToString(result.get(0).get("zfrRepaymentDate"));
  226. //承诺付款金额
  227. String zfrLoanAmount = CommonUtil.objToString(result.get(0).get("zfrLoanAmount"));
  228. //付款账户名称
  229. String payName = core;
  230. //付款账户账号
  231. String zfpcrAccount = CommonUtil.objToString(result.get(0).get("zfpcrAccount"));
  232. //付款账户开户行
  233. String zfpcrAccountBank = CommonUtil.objToString(result.get(0).get("zfpcrAccountBank"));
  234. //收款方
  235. String receive = CommonUtil.objToString(result.get(0).get("supplier"));
  236. //还款账户名
  237. String returnName = "";
  238. if("0".equals(CommonUtil.objToString(result.get(0).get("zpfType")))){
  239. returnName = receive;
  240. }else {
  241. returnName = core;
  242. }
  243. //还款账户账号
  244. String returnAccountNumber = zfpcrAccount;
  245. //收款金额
  246. String receiveAmount = zfrLoanAmount;
  247. // 模版位置
  248. String contracts = configService.selectConfigByKey("zc_repayment_export_docx").getMsg();
  249. //contracts = "C:\\Users\\chenh\\Desktop\\RepaymentList.docx";
  250. // contracts = Test.class.getClassLoader().getResource("RepaymentList.docx").getPath();
  251. String fileName = "HKXQ"+ DateUtils.dateTimeNow() + ".docx";
  252. String filePath = directory + fileName;
  253. log.info("<===================模板=================>"+filePath);
  254. System.out.println(contracts);
  255. FileUtils.copyFile(new File(contracts), new File(filePath));
  256. FileInputStream inputStream = new FileInputStream(contracts);
  257. //模板字段取值
  258. Map docMap = new HashMap();
  259. try {
  260. docMap.put("zfrPayNumber",zfrPayNumber);
  261. docMap.put("core",core);
  262. docMap.put("zfiPaymentNumber",zfiPaymentNumber);
  263. docMap.put("zfrRepaymentDate",zfrRepaymentDate);
  264. docMap.put("zfrLoanAmount",zfrLoanAmount);
  265. docMap.put("payName",payName);
  266. docMap.put("zfpcrAccount",zfpcrAccount);
  267. docMap.put("zfpcrAccountBank",zfpcrAccountBank);
  268. docMap.put("receive",receive);
  269. docMap.put("returnName",returnName);
  270. docMap.put("returnAccountNumber",returnAccountNumber);
  271. docMap.put("receiveAmount",receiveAmount);
  272. System.out.println(docMap);
  273. XWPFTemplate template = XWPFTemplate.compile(inputStream).render(docMap);
  274. //写入模板
  275. template.writeToFile(filePath);
  276. //关闭流
  277. inputStream.close();
  278. }catch (Exception e) {
  279. e.printStackTrace();
  280. }
  281. File zipFile = new File(filePath);
  282. if(zipFile.exists()){
  283. down(response, fileName, directory);
  284. zipFile.delete();
  285. }
  286. return null;
  287. }
  288. /**
  289. * 文件下载
  290. * @param response 请求
  291. * @param fileName 文件名
  292. * @param path 文件
  293. */
  294. public void down(HttpServletResponse response, String fileName, String path) {
  295. response.setHeader("content-type", "application/octet-stream");
  296. response.setContentType("application/octet-stream");
  297. response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
  298. byte[] buff = new byte[1024];
  299. //创建缓冲输入流
  300. BufferedInputStream bis = null;
  301. OutputStream outputStream = null;
  302. try {
  303. outputStream = response.getOutputStream();
  304. //这个路径为待下载文件的路径
  305. bis = new BufferedInputStream(new FileInputStream(new File(path + fileName )));
  306. int read = bis.read(buff);
  307. //通过while循环写入到指定了的文件夹中
  308. while (read != -1) {
  309. outputStream.write(buff, 0, buff.length);
  310. outputStream.flush();
  311. read = bis.read(buff);
  312. }
  313. } catch ( Exception e ) {
  314. e.printStackTrace();
  315. // 下载失败
  316. } finally {
  317. if (bis != null) {
  318. try {
  319. bis.close();
  320. } catch (Exception e) {
  321. e.printStackTrace();
  322. }
  323. }
  324. if (outputStream != null) {
  325. try {
  326. outputStream.close();
  327. } catch (Exception e) {
  328. e.printStackTrace();
  329. }
  330. }
  331. }
  332. }
  333. /**
  334. * 还款登记
  335. * @param map
  336. * @return
  337. */
  338. @PreAuthorize(hasPermi = "service:repayment:edit")
  339. @Log(title = "还款登记", businessType = BusinessType.UPDATE)
  340. @Transactional(rollbackFor=Exception.class)
  341. @PutMapping
  342. public void RepaymentRegistration(@RequestBody Map map) throws Exception{
  343. //附件url
  344. List<Map<String, String>> file = (List<Map<String, String>>) map.get("zfrApplyFile");
  345. // if(file.size() == 0){
  346. // return AjaxResult.error("请上传附件");
  347. // }
  348. String zfrApplyFile="";
  349. String zfrApplyFileId = "";
  350. if(file.size()>0) {
  351. for (int j = 0; j < file.size(); j++) {
  352. Map<String, String> fileUrl = file.get(j);
  353. if (j == 0) {
  354. zfrApplyFile = fileUrl.get("url");
  355. zfrApplyFileId = CommonUtil.objToString(fileUrl.get("uid"));
  356. } else {
  357. zfrApplyFile += "," + fileUrl.get("url");
  358. zfrApplyFileId += "," + CommonUtil.objToString(fileUrl.get("uid"));
  359. }
  360. }
  361. }
  362. //主键
  363. String zfrId = CommonUtil.objToString(map.get("zfrId"));
  364. ZcFinanceRecord zcFinanceRecord = new ZcFinanceRecord();
  365. zcFinanceRecord.setZfrId(zfrId);
  366. //添加上传文件
  367. zcFinanceRecord.setZfrApplyFile(zfrApplyFileId);
  368. //修改融资状态为已结算
  369. zcFinanceRecord.setZfrStatus("03");
  370. //修改还款状态为已还款
  371. zcFinanceRecord.setZfrApplyStatus("01");
  372. //更新实际还款日期
  373. zcFinanceRecord.setZfrPayDate(DateUtils.getNowDate());
  374. zcFinanceRecordService.updateById(zcFinanceRecord);
  375. //融信Id
  376. ZcFinanceRecord record = zcFinanceRecordService.getById(zfrId);
  377. String zfiId = record.getZfrFinanceId();
  378. //修改融信状态为失效
  379. ZcFinanceInf zcFinanceInf = new ZcFinanceInf();
  380. zcFinanceInf.setZfiId(zfiId);
  381. zcFinanceInf.setZfiStatus("08");
  382. zcFinanceInfService.updateById(zcFinanceInf);
  383. //给本企业经办人还款成功提醒
  384. //融资金额
  385. String amount = record.getZfrLoanAmount();
  386. //融信编号
  387. ZcFinanceInf inf = zcFinanceInfService.getById(zfiId);
  388. String number = inf.getZfiNumber();
  389. //核心企业
  390. String coreCompany = inf.getZfiCoreId();
  391. //核心企业经办人
  392. String user = "";
  393. LambdaQueryWrapper<SysUserCompanyRel> queryWrapper = new LambdaQueryWrapper<>();
  394. queryWrapper.eq(SysUserCompanyRel::getSucrCompanyId,coreCompany);
  395. queryWrapper.eq(SysUserCompanyRel::getSucrHandler,"1");
  396. List<SysUserCompanyRel> sysUserCompanyRel = sysUserCompanyRelService.findSysUserCompanyRels(queryWrapper);
  397. if(sysUserCompanyRel.size()>0){
  398. user = CommonUtil.objToString(sysUserCompanyRel.get(0).getSucrUserId());
  399. }
  400. //融资企业
  401. String company = inf.getZfiSupplierId();
  402. //融资企业经办人
  403. String handler = "";
  404. LambdaQueryWrapper<SysUserCompanyRel> wrapper = new LambdaQueryWrapper<>();
  405. wrapper.eq(SysUserCompanyRel::getSucrCompanyId,company);
  406. wrapper.eq(SysUserCompanyRel::getSucrHandler,"1");
  407. List<SysUserCompanyRel> userCompanyRel = sysUserCompanyRelService.findSysUserCompanyRels(wrapper);
  408. if(userCompanyRel.size()>0){
  409. handler = CommonUtil.objToString(userCompanyRel.get(0).getSucrUserId());
  410. }
  411. //企业名称
  412. SysCompany sysCompany = sysCompanyService.getById(company);
  413. String companyName = sysCompany.getScyName();
  414. //融信创建 0:供应商申请, 1:核心企业开立, 2:供应商开立
  415. String createType = inf.getZfiCreateType();
  416. if("2".equals(createType)){
  417. LambdaQueryWrapper<SysNotice> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  418. lambdaQueryWrapper.eq(SysNotice::getTableId,zfrId);
  419. lambdaQueryWrapper.eq(SysNotice::getCompanyId,company);
  420. lambdaQueryWrapper.eq(SysNotice::getStatus,"0");
  421. List<SysNotice> list = sysNoticeService.findSysNotices(lambdaQueryWrapper);
  422. for(SysNotice notice :list){
  423. notice.setStatus("1");
  424. sysNoticeService.updateById(notice);
  425. }
  426. String title = "【还款成功】您开立给【"+companyName+"】的一笔【"+amount+"】(大写:"+ ConvertUpMoneyUtil.toChinese(amount)+")的融信【"+ number +"】,已还款成功!";
  427. remoteSystemService.sendNotice(company,zfrId,title,"01","07","","0",user,"", null, null);
  428. }else {
  429. LambdaQueryWrapper<SysNotice> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  430. lambdaQueryWrapper.eq(SysNotice::getTableId,zfrId);
  431. lambdaQueryWrapper.eq(SysNotice::getCompanyId,coreCompany);
  432. lambdaQueryWrapper.eq(SysNotice::getStatus,"0");
  433. List<SysNotice> list = sysNoticeService.findSysNotices(lambdaQueryWrapper);
  434. for(SysNotice notice :list){
  435. notice.setStatus("1");
  436. sysNoticeService.updateById(notice);
  437. }
  438. String title = "【还款成功】您开立给【"+companyName+"】的一笔【"+amount+"】(大写:"+ ConvertUpMoneyUtil.toChinese(amount) +")的融信【"+ number +"】,已还款成功!";
  439. remoteSystemService.sendNotice(coreCompany,zfrId,title,"01","07","","0",handler,"", null, null);
  440. }
  441. }
  442. /**
  443. * 查询代还款金额
  444. * @param day 天数
  445. * @return
  446. */
  447. @GetMapping("/repaymentAmount")
  448. public AjaxResult repaymentAmount(String day){
  449. //当前用户
  450. SysUser user = tokenService.getLoginUser().getSysUser();
  451. //企业Id
  452. String company = user.getCompanyId();
  453. //企业类型
  454. String companyType = user.getCompanyType();
  455. Map map = new HashMap(16);
  456. // 企业类型 00:平台,01:核心企业,02:供应商,03:资方
  457. if("02".equals(companyType)){
  458. map.put("supplierId",company);
  459. }else if("01".equals(companyType)){
  460. map.put("coreId",company);
  461. }else if("03".equals(companyType)){
  462. map.put("management",company);
  463. }
  464. //天数 00:7天 01:30天 02:60天 03:90天
  465. if("00".equals(day)){
  466. day = "7";
  467. }else if("01".equals(day)){
  468. day = "30";
  469. }else if("02".equals(day)){
  470. day = "60";
  471. }else if("03".equals(day)){
  472. day = "90";
  473. }
  474. if(CommonUtil.isNotEmpty(day)){
  475. int days = Integer.parseInt(day);
  476. //将来日期
  477. String date = DateUtils.getFetureDate(days);
  478. map.put("day",date);
  479. }
  480. Map amount = ownRepaymentService.selectRepaymentAmount(map);
  481. return AjaxResult.success(amount.get("zfrLoanAmount"));
  482. }
  483. }