PayableInfoController.java 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. package com.chuanghai.smartschool.tuitionpayment.controller;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.baomidou.mybatisplus.core.metadata.IPage;
  8. import com.chuanghai.smartschool.tuitionpayment.anno.AdminLoginCheck;
  9. import com.chuanghai.smartschool.tuitionpayment.common.exception.BizCodeEnume;
  10. import com.chuanghai.smartschool.tuitionpayment.common.exception.RRException;
  11. import com.chuanghai.smartschool.tuitionpayment.common.utils.CommonResult;
  12. import com.chuanghai.smartschool.tuitionpayment.common.utils.PageParam;
  13. import com.chuanghai.smartschool.tuitionpayment.common.utils.PageUtils;
  14. import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoEntity;
  15. import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterEntity;
  16. import com.chuanghai.smartschool.tuitionpayment.listener.aliexcel.MyStudentNoImportListener;
  17. import com.chuanghai.smartschool.tuitionpayment.service.PayItemDetailService;
  18. import com.chuanghai.smartschool.tuitionpayment.service.PayOrderService;
  19. import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoService;
  20. import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoWaterService;
  21. import com.chuanghai.smartschool.tuitionpayment.to.DeletePayableInfoTO;
  22. import com.chuanghai.smartschool.tuitionpayment.to.PayOrderQueryTO;
  23. import com.chuanghai.smartschool.tuitionpayment.utils.ListPageUtil;
  24. import com.chuanghai.smartschool.tuitionpayment.vo.*;
  25. import com.fasterxml.jackson.core.type.TypeReference;
  26. import com.fasterxml.jackson.databind.ObjectMapper;
  27. import jdk.nashorn.internal.scripts.JS;
  28. import org.apache.poi.ss.formula.functions.T;
  29. import org.ehcache.impl.internal.classes.commonslang.ArrayUtils;
  30. import org.springframework.beans.BeanUtils;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.http.HttpEntity;
  33. import org.springframework.http.HttpHeaders;
  34. import org.springframework.http.MediaType;
  35. import org.springframework.http.ResponseEntity;
  36. import org.springframework.util.LinkedMultiValueMap;
  37. import org.springframework.util.MultiValueMap;
  38. import org.springframework.util.StringUtils;
  39. import org.springframework.web.bind.annotation.*;
  40. import org.springframework.web.client.RestTemplate;
  41. import org.springframework.web.multipart.MultipartFile;
  42. //import cn.afterturn.easypoi.excel.ExcelExportUtil;
  43. //import cn.afterturn.easypoi.excel.ExcelImportUtil;
  44. //import cn.afterturn.easypoi.excel.entity.ExportParams;
  45. import javax.servlet.ServletOutputStream;
  46. import javax.servlet.http.HttpServletResponse;
  47. import java.io.IOException;
  48. import java.math.BigDecimal;
  49. import java.math.RoundingMode;
  50. import java.net.URLEncoder;
  51. import java.time.LocalDateTime;
  52. import java.util.*;
  53. import java.util.concurrent.ExecutionException;
  54. import java.util.stream.Collectors;
  55. /**
  56. * 学生应缴数据
  57. *
  58. * @author codingliang
  59. * @email codingliang@gmail.com
  60. * @date 2021-08-12 15:52:41
  61. */
  62. @RestController
  63. @RequestMapping("tuitionpayment/payableinfo")
  64. public class PayableInfoController {
  65. @Autowired
  66. private PayableInfoService payableInfoService;
  67. @Autowired
  68. private PayableInfoWaterService payableInfoWaterService;
  69. @Autowired
  70. private PayOrderService payOrderService;
  71. @Autowired
  72. private PayItemDetailController payItemDetailController;
  73. @Autowired
  74. private WechatController wechatController;
  75. /**
  76. * 根据card_number获取缴费信息 整合各缴费项目的集合
  77. *
  78. * @param cardNumber 当前登录用户cardNumber
  79. * @return
  80. * @Param currPage 当前页
  81. * @pageSize pageSize 每页记录数
  82. */
  83. @GetMapping("payableInfo")
  84. public CommonResult<PayableInfoWaterListVO> getPayableInfoByCardNumber(@RequestHeader("card_number") String cardNumber, String studentName,
  85. Integer currPage, Integer pageSize) {
  86. currPage = currPage == null ? 1 : currPage;
  87. pageSize = pageSize == null ? 10 : pageSize;
  88. try {
  89. List<PayableInfoEntity> payableInfo = payableInfoService.getPayableInfoByCardNumber(cardNumber, studentName);
  90. List<PayableInfoWaterListVO> objectList = new ArrayList<>();
  91. payableInfo.forEach(payable -> {
  92. PayableInfoWaterListVO payableInfoWaterListVO = new PayableInfoWaterListVO();
  93. BeanUtils.copyProperties(payable, payableInfoWaterListVO);
  94. objectList.add(payableInfoWaterListVO);
  95. });
  96. List<PayableInfoWaterEntity> payableWater = payableInfoWaterService.getPayableInfoWaterByCardNumber(cardNumber, studentName);
  97. payableWater.forEach(payableInfoWater -> {
  98. PayableInfoWaterListVO payableInfoWaterListVO = new PayableInfoWaterListVO();
  99. BeanUtils.copyProperties(payableInfoWater, payableInfoWaterListVO);
  100. objectList.add(payableInfoWaterListVO);
  101. });
  102. //将得到的payableInfoWaterListVOs集合数据按照payCreateTime进行
  103. List<PayableInfoWaterListVO> payableInfoWaterListVOs = objectList.stream().sorted(Comparator.comparing(PayableInfoWaterListVO::getPayCreateTime).reversed()).collect(Collectors.toList());
  104. payableInfoWaterListVOs.forEach(payableInfoWaterListVO -> {
  105. payableInfoWaterListVO.setPayerIdentify(payableInfoWaterListVO.getStudentNo());
  106. payableInfoWaterListVO.setPayForIdentify(payableInfoWaterListVO.getCardNumber());
  107. payableInfoWaterListVO.setPayYear(payableInfoWaterListVO.getYears());
  108. });
  109. //判断是否传入分页信息
  110. if (currPage != null && pageSize != null) {
  111. ListPageUtil<PayableInfoWaterListVO> listPageUtil = new ListPageUtil<PayableInfoWaterListVO>(payableInfoWaterListVOs, currPage, pageSize);
  112. payableInfoWaterListVOs = listPageUtil.getPagedList();
  113. int totalCount = listPageUtil.getTotalCount();
  114. int pageSize1 = listPageUtil.getPageSize();
  115. int nowPage1 = listPageUtil.getNowPage();
  116. PageUtils<PayableInfoWaterListVO> page = new PageUtils<PayableInfoWaterListVO>(payableInfoWaterListVOs, totalCount, pageSize1, nowPage1);
  117. return CommonResult.ok().setResult(page);
  118. }
  119. } catch (Exception e) {
  120. return CommonResult.fail("0000", "该用户暂无缴费信息!");
  121. }
  122. return CommonResult.fail();
  123. }
  124. //
  125. // /**
  126. // * 根据学号和学生姓名获取缴费信息
  127. // *
  128. // * @param cardNumber 当前登录用户cardNumber
  129. // * @param studentNo 学号,新生可用身份证号码代替学号
  130. // * @param studentName 学生姓名
  131. // * @return
  132. // */
  133. // @GetMapping("payableInfo/{studentNo}/{studentName}")
  134. // public CommonResult< List<PayableInfoEntity>> getPayableInfoByCardNumberAndName(@RequestHeader("card_number") String cardNumber,
  135. // @PathVariable("studentNo") String studentNo,
  136. // @PathVariable("studentName") String studentName) {
  137. // List<PayableInfoEntity> info = payableInfoService.getPayableInfoByStudentNoAndName(studentNo, studentName);
  138. // return CommonResult.ok().setResult(info);
  139. // }
  140. /**
  141. * 学生应缴列表
  142. *
  143. * @param adminToken // * @param keyword 搜索关键字
  144. * // * @param payStatus 订单状态
  145. * // * @param createTime 创建时间
  146. * // * @param payTime 支付时间
  147. * // * @param pageParam 分页参数
  148. * // * @param payItemType 缴费项目支付状态
  149. * // * @param itemName 缴费项目名
  150. * @return
  151. */
  152. @AdminLoginCheck
  153. @GetMapping("/list")
  154. public CommonResult<PageUtils<PayableInfoEntity>> list(@RequestHeader("admin_token") String adminToken,
  155. // String keyword, String payStatus, String createTime,
  156. // String payTime, PageParam pageParam,
  157. // String payItemType,
  158. // @RequestParam("itemName") String itemName
  159. PayOrderQueryTO queryTO, PageParam pageParam) {
  160. PageUtils page = null;
  161. BigDecimal totalAmount = BigDecimal.ZERO;
  162. int totalCount = 0;
  163. if (queryTO.getItemName().equals("水费缴纳")) {
  164. page = payableInfoWaterService.queryPage(queryTO, pageParam);
  165. totalCount = page.getTotalCount();
  166. List list = page.getList();
  167. for (int i = 0; i < list.size(); i++) {
  168. PayableInfoWaterEntity payableInfoWaterEntity = (PayableInfoWaterEntity) list.get(i);
  169. totalAmount = totalAmount.add(payableInfoWaterEntity.getRealPayAmount());
  170. }
  171. } else {
  172. page = payableInfoService.queryPage(queryTO, pageParam);
  173. totalCount = page.getTotalCount();
  174. List list = page.getList();
  175. for (int i = 0; i < list.size(); i++) {
  176. PayableInfoEntity payableInfoEntity = (PayableInfoEntity) list.get(i);
  177. totalAmount = totalAmount.add(payableInfoEntity.getRealPayAmount());
  178. }
  179. }
  180. PayableInfoListVO payableInfoListVO = new PayableInfoListVO();
  181. payableInfoListVO.setPage(page);
  182. payableInfoListVO.setTotalCount(totalCount);
  183. payableInfoListVO.setTotalAmount(totalAmount);
  184. //如果选择支付状态查询对应状态的金额
  185. if (StringUtils.hasText(queryTO.getPayStatus())) {
  186. String amount = payableInfoService.queryAmount(queryTO);
  187. payableInfoListVO.setTotalCount(Integer.parseInt(amount.split("-")[1]));
  188. payableInfoListVO.setTotalAmount(new BigDecimal(amount.split("-")[0]).setScale(2, RoundingMode.HALF_UP));
  189. }
  190. return CommonResult.ok().setResult(payableInfoListVO);
  191. }
  192. /**
  193. * 下载缴费名单的txt
  194. *
  195. * @param queryTO 查询参数
  196. * @param response
  197. * @throws IOException
  198. */
  199. @RequestMapping("exportTxt")
  200. //@AdminLoginCheck
  201. public void exportTxt(PayOrderQueryTO queryTO,
  202. HttpServletResponse response) throws IOException {
  203. if (queryTO.getItemName().equals("水费缴纳")) {
  204. payableInfoWaterService.exportTxt(response, queryTO);
  205. } else {
  206. payableInfoService.exportTxt(response, queryTO);
  207. }
  208. }
  209. /**
  210. * 下载缴费的学生名单
  211. *
  212. * @param queryTO 封装参数
  213. * @param response
  214. * @throws IOException
  215. */
  216. @RequestMapping("downloadResult")
  217. public void downloadResult(PayOrderQueryTO queryTO,
  218. HttpServletResponse response) throws IOException {
  219. if (queryTO.getItemName().equals("水费缴纳")) {
  220. payableInfoWaterService.downloadResult(response, queryTO);
  221. } else {
  222. payableInfoService.downloadResult(response, queryTO);
  223. }
  224. }
  225. /**
  226. * 学生应缴信息删除
  227. *
  228. * @param adminToken 管理员token
  229. * @param ids 需要删除记录的id集合
  230. * @return
  231. */
  232. @AdminLoginCheck
  233. @DeleteMapping("/delete")
  234. public CommonResult<String> delete(@RequestHeader("admin_token") String adminToken,
  235. @RequestBody Long[] ids) {
  236. payableInfoService.removeByIds(Arrays.asList(ids));
  237. return CommonResult.ok();
  238. }
  239. /**
  240. * excel 导入学生学费相关原始数据
  241. *
  242. * @param adminToken 管理员token
  243. * @param file 文件,文件格式注意需要符合要求
  244. * @return
  245. * @apiNote 导入学生学费相关原始数据
  246. * <strong>注意:</strong>
  247. * 1.需要提示用户上传的excel文件需要符合规定的格式;
  248. * 2.上传新文件将会导致所有的旧数据被删除,学费缴纳开始后不建议再上传新数据。
  249. */
  250. @PostMapping("importByExcel")
  251. @AdminLoginCheck
  252. public CommonResult<String> importByExcel(@RequestHeader("admin_token") String adminToken,
  253. @RequestParam MultipartFile file) throws IOException {
  254. if (file.isEmpty()) {
  255. throw new RRException(BizCodeEnume.PARAMETER_ERROR, "文件不能为空");
  256. }
  257. payableInfoService.importByExcel(file);
  258. return CommonResult.ok();
  259. }
  260. /**
  261. * 更新缴费订单的时间参数
  262. */
  263. @PutMapping("updatePayInfo")
  264. public CommonResult<T> updatePayInfo(String itemName) {
  265. QueryWrapper<PayableInfoEntity> wrapper = new QueryWrapper<>();
  266. wrapper.eq("payMent_item", itemName);
  267. //更新时间等参数
  268. List<PayableInfoEntity> infoEntityList = payableInfoService.list(wrapper);
  269. List<PayableInfoEntity> objectList = new ArrayList<>();
  270. infoEntityList.forEach(payableInfoEntity -> {
  271. String cardNumber = getCardNumberByIdCard(payableInfoEntity.getStudentNo(), null, null, null);
  272. payableInfoEntity.setCardNumber(cardNumber);
  273. payableInfoEntity.setPayCreateTime(LocalDateTime.now());
  274. payableInfoEntity.setPayItemType("1");
  275. payableInfoEntity.setPayNoticeType("1");
  276. if (StringUtils.hasText(payableInfoEntity.getNotMustMoney())) {
  277. payableInfoEntity.setNotPayDetail(payableInfoEntity.getMustMoney() + "/" + payableInfoEntity.getNotMustMoney());
  278. } else {
  279. payableInfoEntity.setNotPayDetail(payableInfoEntity.getMustMoney());
  280. }
  281. String[] split = payableInfoEntity.getNotPayDetail().split("/");
  282. payableInfoEntity.setNotPaySize(split.length);
  283. payableInfoEntity.setPayableAccount(payableInfoService.queryPayItemByName(payableInfoEntity.getPaymentItem()));
  284. objectList.add(payableInfoEntity);
  285. });
  286. payableInfoService.updateBatchById(objectList);
  287. return CommonResult.ok();
  288. }
  289. /**
  290. * 通过身份证调用活动管理平台数据库换取 微笑的cardNumber信息
  291. *
  292. * @param idCard
  293. * @return
  294. */
  295. public String getCardNumberByIdCard(String idCard, String inputType, String inputStr, String outPutType) {
  296. //表示输入的参数为身份证
  297. inputType = inputType == null ? "1" : inputType;
  298. //输入的参数
  299. inputStr = idCard;
  300. // 返回微校的cardNumber
  301. outPutType = outPutType == null ? "2" : outPutType;
  302. String url = "https://chtech.ncjti.edu.cn/lamp/recordApi/consume/getUserInfo";
  303. MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
  304. map.add("inputType", inputType);
  305. map.add("inputStr", inputStr);
  306. map.add("outPutType", outPutType);
  307. RestTemplate restTemplate = new RestTemplate();
  308. HttpHeaders headers = new HttpHeaders();
  309. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  310. HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map, headers);
  311. ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
  312. JSONObject jsonObj = JSON.parseObject(responseEntity.getBody());
  313. String cardNumber = "";
  314. try {
  315. cardNumber = jsonObj.get("result").toString();
  316. } catch (NullPointerException e) {
  317. throw new NullPointerException("未匹配到该用户!");
  318. }
  319. return cardNumber == null ? idCard : cardNumber;
  320. }
  321. /**
  322. * 删除缴费信息
  323. *
  324. * @param adminToken 管理员token
  325. * @param file 文件
  326. * @return
  327. * @apiNote 删除缴费信息
  328. * <strong>注意:</strong>
  329. * 文件需要符合规定的格式
  330. * 不会删除已经在线缴费的学生。如果有没有删除的学生,会在接口返回没有被删除学生的列表。
  331. * @since 0.1.0
  332. */
  333. @PostMapping("/deletePayableExecl")
  334. @AdminLoginCheck
  335. public CommonResult<DeletePayableInfoTO> deletePayableInfo(@RequestHeader("admin_token") String adminToken,
  336. @RequestParam MultipartFile file) throws IOException {
  337. if (file.isEmpty()) {
  338. throw new RRException(BizCodeEnume.PARAMETER_ERROR, "文件不能为空");
  339. }
  340. MyStudentNoImportListener studentNoImportListener = new MyStudentNoImportListener();
  341. EasyExcel.read(file.getInputStream(), StudentNoVO.class, studentNoImportListener).sheet().doRead();
  342. List<StudentNoVO> studentNos = studentNoImportListener.getStudentNoList();
  343. List<DeletePayableInfoTO> alreadyPayList = new ArrayList<>();
  344. studentNos.forEach(studentNo -> {
  345. StudentNoVO student = studentNo;
  346. if (student.getPaymentItem().equals("水费缴纳")) {
  347. QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
  348. wrapper.eq(student.getStudentNo() != null, "student_no", student.getStudentNo());
  349. wrapper.eq(student.getPaymentItem() != null, "payment_item", student.getPaymentItem());
  350. PayableInfoWaterEntity one = payableInfoWaterService.getOne(wrapper);
  351. if (one != null) {
  352. boolean alreadyPay = payOrderService.isAlreadyPay(one.getStudentNo(), one.getPaymentItem(), one.getPayMonth(), null);
  353. if (alreadyPay) {
  354. DeletePayableInfoTO to = new DeletePayableInfoTO();
  355. BeanUtils.copyProperties(one, to);
  356. to.setMsg("学生已缴费,删除失败!");
  357. alreadyPayList.add(to);
  358. }
  359. payableInfoWaterService.removeById(one);
  360. }
  361. } else {
  362. QueryWrapper<PayableInfoEntity> wrapper = new QueryWrapper<>();
  363. wrapper.eq(student.getStudentNo() != null, "student_no", student.getStudentNo());
  364. wrapper.eq(student.getPaymentItem() != null, "payment_item", student.getPaymentItem());
  365. PayableInfoEntity one = payableInfoService.getOne(wrapper);
  366. if (one != null) {
  367. boolean alreadyPay = payOrderService.isAlreadyPay(one.getStudentNo(), one.getPaymentItem(), one.getYears(), one.getNotPaySize());
  368. if (alreadyPay) {
  369. DeletePayableInfoTO to = new DeletePayableInfoTO();
  370. BeanUtils.copyProperties(one, to);
  371. to.setMsg("学生已缴费,删除失败!");
  372. alreadyPayList.add(to);
  373. }
  374. payableInfoService.removeById(one);
  375. }
  376. }
  377. });
  378. return CommonResult.ok().setResult(alreadyPayList);
  379. }
  380. /**
  381. * 查询缴费名单的缴费详情
  382. *
  383. * @param id
  384. * @return
  385. */
  386. // @GetMapping("/queryPayInfoDetail")
  387. // public CommonResult queryPayInfoDetail(@RequestParam String id, @RequestParam("itemName") String itemName, String realPayDetail) {
  388. // PayInfoDetailVO payInfoDetailVO = new PayInfoDetailVO();
  389. // if (itemName.equals("水费缴纳")) {
  390. // QueryWrapper<PayableInfoWaterEntity> wrapperWater = new QueryWrapper<>();
  391. // wrapperWater.eq("id", id)
  392. // .eq("payment_item", itemName);
  393. // PayableInfoWaterEntity water = payableInfoWaterService.getOne(wrapperWater);
  394. //
  395. // if (water.getPayAmountDetail() != null) {
  396. // payInfoDetailVO.setPayAmountDetail(water.getPayAmountDetail());
  397. // }
  398. // payInfoDetailVO.setRealPayAmount(water.getRealPayAmount());
  399. // } else {
  400. // QueryWrapper<PayableInfoEntity> wrapper = new QueryWrapper<>();
  401. // wrapper.eq("id", id)
  402. // .eq("payment_item", itemName);
  403. // PayableInfoEntity payableInfoEntity = payableInfoService.getOne(wrapper);
  404. //
  405. // if (payableInfoEntity.getMustMoney() != null) {
  406. // payInfoDetailVO.setMustMoney(payableInfoEntity.getMustMoney());
  407. // }
  408. // if (payableInfoEntity.getNotMustMoney() != null) {
  409. // payInfoDetailVO.setNotMustMoney(payableInfoEntity.getNotMustMoney());
  410. // }
  411. // if (StringUtils.hasText(realPayDetail)){
  412. //
  413. // }
  414. // String[] realPayDetailStr = realPayDetail.split("/");
  415. // BigDecimal realMount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
  416. // for (int i = 0; i < realPayDetailStr.length; i++) {
  417. // String detail = realPayDetailStr[i];
  418. // String[] detailAMount = detail.split(":");
  419. // realMount = realMount.add(new BigDecimal(detailAMount[1]).setScale(2, RoundingMode.HALF_UP));
  420. // }
  421. // String notPayDetail = payableInfoEntity.getMustMoney() + "/" + payableInfoEntity.getNotMustMoney();
  422. // payInfoDetailVO.setRealPayAmount(realMount);
  423. //
  424. //
  425. // int notPayDetailCount = 0;
  426. // String notPayDetailStr = "";
  427. // String[] realPayDetailArray;
  428. // String[] notPayDetailArray;
  429. // ArrayList<String> listA;
  430. // ArrayList<String> listB;
  431. // if (StringUtils.hasText(payableInfoEntity.getPayDetail())) {
  432. // payInfoDetailVO.setRealPayDetail(payableInfoEntity.getPayDetail() + "/" + realPayDetail);
  433. // } else {
  434. // payInfoDetailVO.setRealPayDetail(realPayDetail);
  435. // }
  436. // realPayDetailArray = payInfoDetailVO.getRealPayDetail().split("/");
  437. // notPayDetailArray = notPayDetail.split("/");
  438. // listA = new ArrayList<>(Arrays.asList(realPayDetailArray));
  439. // listB = new ArrayList<>(Arrays.asList(notPayDetailArray));
  440. // listB.removeAll(listA);
  441. //
  442. // if (listB.size() == 1) {
  443. // payInfoDetailVO.setNotPayDetail(listB.get(0));
  444. // notPayDetailCount = 1;
  445. // } else if (listB.size() > 1) {
  446. // for (int i = 0; i < listB.size(); i++) {
  447. // notPayDetailStr += listB.get(i) + "/";
  448. // notPayDetailCount++;
  449. // }
  450. // payInfoDetailVO.setNotPayDetail(notPayDetailStr.substring(0, notPayDetailStr.length() - 1));
  451. // } else {
  452. // payInfoDetailVO.setNotPayDetail(notPayDetailStr);
  453. // }
  454. // payInfoDetailVO.setNotPaySize(notPayDetailCount);
  455. //
  456. // }
  457. //
  458. // return CommonResult.ok().setResult(payInfoDetailVO);
  459. // }
  460. @GetMapping("/queryPayInfoDetail")
  461. public CommonResult queryPayInfoDetail(@RequestParam String id, @RequestParam("itemName") String itemName, String realPayDetail) {
  462. PayInfoDetailVO payInfoDetailVO = new PayInfoDetailVO();
  463. //未缴费明细金额
  464. BigDecimal realMount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
  465. if (itemName.equals("水费缴纳")) {
  466. QueryWrapper<PayableInfoWaterEntity> wrapperWater = new QueryWrapper<>();
  467. wrapperWater.eq("id", id)
  468. .eq("payment_item", itemName);
  469. PayableInfoWaterEntity water = payableInfoWaterService.getOne(wrapperWater);
  470. if (water.getPayAmountDetail() != null) {
  471. payInfoDetailVO.setPayAmountDetail(water.getPayAmountDetail());
  472. }
  473. payInfoDetailVO.setRealPayAmount(water.getRealPayAmount());
  474. payInfoDetailVO.setNotPayDetailAmount(water.getRealPayAmount());
  475. } else {
  476. QueryWrapper<PayableInfoEntity> wrapper = new QueryWrapper<>();
  477. wrapper.eq("id", id)
  478. .eq("payment_item", itemName);
  479. PayableInfoEntity payableInfoEntity = payableInfoService.getOne(wrapper);
  480. if (payableInfoEntity == null) {
  481. throw new RRException(BizCodeEnume.DATA_IS_EXIST, "该缴费订单不存在。");
  482. }
  483. if (payableInfoEntity.getMustMoney() != null) {
  484. payInfoDetailVO.setMustMoney(payableInfoEntity.getMustMoney());
  485. }
  486. if (payableInfoEntity.getNotMustMoney() != null) {
  487. payInfoDetailVO.setNotMustMoney(payableInfoEntity.getNotMustMoney());
  488. }
  489. String[] realPayDetailStr;
  490. String realPayDetail1= "";
  491. // 缴费订单的已缴费明细不为null
  492. if (StringUtils.hasText(payableInfoEntity.getPayDetail())) {
  493. if (StringUtils.hasText(realPayDetail)) {
  494. //缴费订单所有已交的项目明细
  495. realPayDetail1 = payableInfoEntity.getPayDetail() + "/" + realPayDetail;
  496. } else {
  497. realPayDetail1 = payableInfoEntity.getPayDetail();
  498. }
  499. }
  500. // 本次缴费明细不为空
  501. if (StringUtils.hasText(realPayDetail)) {
  502. //缴费订单所有已交的项目明细
  503. if (StringUtils.hasText(payableInfoEntity.getPayDetail())) {
  504. realPayDetail1 = payableInfoEntity.getPayDetail() + "/" + realPayDetail;
  505. }else {
  506. realPayDetail1 = realPayDetail;
  507. }
  508. }
  509. // 本次缴费明细为空和缴费订单所有已交的项目明细为空
  510. // if (StringUtils.hasText(realPayDetail) && StringUtils.hasText(payableInfoEntity.getPayDetail())) {
  511. // System.out.println(realPayDetail1);
  512. // realPayDetail1 = realPayDetail1.substring(0,realPayDetail1.length()/2);
  513. // }
  514. System.out.println(realPayDetail1);
  515. String notPayDetail = "";
  516. if (StringUtils.hasText(payableInfoEntity.getNotMustMoney())) {
  517. notPayDetail = payableInfoEntity.getMustMoney() + "/" + payableInfoEntity.getNotMustMoney();
  518. } else {
  519. notPayDetail = payableInfoEntity.getMustMoney();
  520. }
  521. int notPayDetailCount = 0;
  522. String notPayDetailStr = "";
  523. String[] realPayDetailArray;
  524. String[] notPayDetailArray;
  525. ArrayList<String> listA;
  526. ArrayList<String> listB;
  527. // if (StringUtils.hasText(realPayDetail)) {
  528. // if (StringUtils.hasText(payableInfoEntity.getPayDetail())) {
  529. // payInfoDetailVO.setRealPayDetail(payableInfoEntity.getPayDetail() + "/" + realPayDetail);
  530. // } else {
  531. // payInfoDetailVO.setRealPayDetail(realPayDetail);
  532. // }
  533. // } else {
  534. // if (StringUtils.hasText(payableInfoEntity.getPayDetail())) {
  535. // payInfoDetailVO.setRealPayDetail(payableInfoEntity.getPayDetail());
  536. // } else {
  537. // payInfoDetailVO.setRealPayDetail(realPayDetail == null ? "" : realPayDetail);
  538. // }
  539. // }
  540. payInfoDetailVO.setRealPayDetail(realPayDetail1);
  541. realPayDetailArray = payInfoDetailVO.getRealPayDetail().split("/");
  542. notPayDetailArray = notPayDetail.split("/");
  543. listA = new ArrayList<>(Arrays.asList(realPayDetailArray));
  544. String[] splitRealPayDetail = new String[listA.size()];
  545. for (int j = 0; j < listA.size(); j++) {
  546. splitRealPayDetail = listA.get(j).split("/");
  547. String detail = splitRealPayDetail[0];
  548. if (StringUtils.hasText(detail)) {
  549. String[] detailAMount = detail.split(":");
  550. realMount = realMount.add(new BigDecimal(detailAMount[1]).setScale(2, RoundingMode.HALF_UP));
  551. }
  552. }
  553. listB = new ArrayList<>(Arrays.asList(notPayDetailArray));
  554. listB.removeAll(listA);
  555. if (listB.size() == 1) {
  556. payInfoDetailVO.setNotPayDetail(listB.get(0));
  557. notPayDetailCount = 1;
  558. } else if (listB.size() > 1) {
  559. for (int i = 0; i < listB.size(); i++) {
  560. notPayDetailStr += listB.get(i) + "/";
  561. notPayDetailCount++;
  562. }
  563. payInfoDetailVO.setNotPayDetail(notPayDetailStr.substring(0, notPayDetailStr.length() - 1));
  564. } else {
  565. payInfoDetailVO.setNotPayDetail(notPayDetailStr);
  566. }
  567. payInfoDetailVO.setNotPaySize(notPayDetailCount);
  568. //已支付明细金额
  569. payInfoDetailVO.setPayDetailAmount(realMount);
  570. //订单总金额
  571. payInfoDetailVO.setRealPayAmount(payableInfoEntity.getRealPayAmount().setScale(2, RoundingMode.HALF_UP));
  572. // 未支付明细金额
  573. payInfoDetailVO.setNotPayDetailAmount((payableInfoEntity.getRealPayAmount().subtract(realMount)).setScale(2, RoundingMode.HALF_UP));
  574. }
  575. return CommonResult.ok().setResult(payInfoDetailVO);
  576. }
  577. // /**
  578. // * 查询缴费名单的缴费详情
  579. // *
  580. // * @param id
  581. // * @return
  582. // */
  583. // @GetMapping("/queryPayDetail")
  584. // public CommonResult<T> queryPayDetail(@RequestParam String id, @RequestParam("itemName") String
  585. // itemName, String realPayDetail) {
  586. // PayInfoDetailVO payInfoDetailVO = new PayInfoDetailVO();
  587. // if (itemName.equals("水费缴纳")) {
  588. // QueryWrapper<PayableInfoWaterEntity> wrapperWater = new QueryWrapper<>();
  589. // wrapperWater.eq("id", id)
  590. // .eq("payment_item", itemName);
  591. // PayableInfoWaterEntity water = payableInfoWaterService.getOne(wrapperWater);
  592. //
  593. // if (water.getPayAmountDetail() != null) {
  594. // payInfoDetailVO.setPayAmountDetail(water.getPayAmountDetail());
  595. // }
  596. // payInfoDetailVO.setRealPayAmount(water.getRealPayAmount());
  597. // } else {
  598. // QueryWrapper<PayableInfoEntity> wrapper = new QueryWrapper<>();
  599. // wrapper.eq("id", id)
  600. // .eq("payment_item", itemName);
  601. // PayableInfoEntity payableInfoEntity = payableInfoService.getOne(wrapper);
  602. //
  603. // payInfoDetailVO.setRealPayDetail(realPayDetail);
  604. //
  605. // if (payableInfoEntity.getNotPayDetail() != null) {
  606. // payInfoDetailVO.setNotPayDetail(payableInfoEntity.getNotPayDetail());
  607. // }
  608. // String detail = "";
  609. // if (StringUtils.hasText(payableInfoEntity.getNotPayDetail())) {
  610. // detail = payableInfoEntity.getNotPayDetail();
  611. // }
  612. //
  613. // String notPayDetail = "";
  614. // if (StringUtils.hasText(realPayDetail)) {
  615. // String[] realPayDetailArray = realPayDetail.split("/");
  616. //
  617. // String[] payDetailArray = detail.split("/");
  618. // ArrayList<String> listA = new ArrayList<>(Arrays.asList(realPayDetailArray));
  619. // ArrayList<String> listB = new ArrayList<>(Arrays.asList(payDetailArray));
  620. // listB.removeAll(listA);
  621. // if (listB.size() == 1) {
  622. // payInfoDetailVO.setNotPayDetail(listB.get(0));
  623. // } else if (listB.size() > 1) {
  624. // for (int i = 0; i < listB.size(); i++) {
  625. // notPayDetail += listB.get(i) + "/";
  626. // }
  627. // payInfoDetailVO.setNotPayDetail(notPayDetail.substring(0, notPayDetail.length() - 1));
  628. // } else {
  629. // payInfoDetailVO.setNotPayDetail(notPayDetail);
  630. // }
  631. //
  632. // } else {
  633. // detail = detail.endsWith("/") == true ? detail.substring(0, detail.length() - 1) : detail;
  634. // payInfoDetailVO.setNotPayDetail(detail);
  635. // }
  636. //
  637. // String[] split = payInfoDetailVO.getNotPayDetail().split("/");
  638. //
  639. // BigDecimal realMount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
  640. // for (int i = 0; i < split.length; i++) {
  641. // String detail1 = split[i];
  642. // String[] detailAMount = detail1.split(":");
  643. // realMount = realMount.add(new BigDecimal(detailAMount[1]).setScale(2, RoundingMode.HALF_UP));
  644. // }
  645. // payInfoDetailVO.setRealPayAmount(realMount);
  646. // }
  647. //
  648. // return CommonResult.ok().setResult(payInfoDetailVO);
  649. // }
  650. /**
  651. * 查询学生的基本信息
  652. *
  653. * @return
  654. */
  655. @GetMapping("/queryStudentInfo")
  656. public CommonResult<PayableInfoStudentResultVO> queryStudentInfo(String cardNumber) {
  657. PayableInfoStudentResultVO payableInfoStudentResultVO;
  658. try {
  659. String url = "https://chtech.ncjti.edu.cn/lamp/recordApi/consume/queryByIdCard";
  660. MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
  661. map.add("idCard", cardNumber);
  662. RestTemplate restTemplate = new RestTemplate();
  663. HttpHeaders headers = new HttpHeaders();
  664. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  665. HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map, headers);
  666. ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
  667. JSONObject jsonObj = JSON.parseObject(responseEntity.getBody());
  668. JSONObject jsonResult = JSONObject.parseObject(jsonObj.get("result").toString());
  669. payableInfoStudentResultVO = JSONObject.toJavaObject(jsonResult, PayableInfoStudentResultVO.class);
  670. } catch (Exception e) {
  671. return CommonResult.fail("0000", "信息获取失败!");
  672. }
  673. return CommonResult.ok().setResult(payableInfoStudentResultVO);
  674. }
  675. }