PayableInfoController.java 38 KB

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