PayOrderController.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. package com.chuanghai.smartschool.tuitionpayment.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.chuanghai.smartschool.tuitionpayment.anno.AdminLoginCheck;
  5. import com.chuanghai.smartschool.tuitionpayment.common.exception.BizCodeEnume;
  6. import com.chuanghai.smartschool.tuitionpayment.common.exception.RRException;
  7. import com.chuanghai.smartschool.tuitionpayment.common.utils.CommonResult;
  8. import com.chuanghai.smartschool.tuitionpayment.common.utils.PageParam;
  9. import com.chuanghai.smartschool.tuitionpayment.common.utils.PageUtils;
  10. import com.chuanghai.smartschool.tuitionpayment.entity.PayOrderEntity;
  11. import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoEntity;
  12. import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterEntity;
  13. import com.chuanghai.smartschool.tuitionpayment.service.PayOrderService;
  14. import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoService;
  15. import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoWaterService;
  16. import com.chuanghai.smartschool.tuitionpayment.to.OrderReceiveTO;
  17. import com.chuanghai.smartschool.tuitionpayment.to.PayOrderQueryTO;
  18. import com.chuanghai.smartschool.tuitionpayment.vo.*;
  19. import org.apache.poi.ss.formula.functions.T;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.util.StringUtils;
  22. import org.springframework.web.bind.annotation.*;
  23. import javax.servlet.http.HttpServletResponse;
  24. import java.io.IOException;
  25. import java.math.BigDecimal;
  26. import java.math.RoundingMode;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. import java.util.stream.Collectors;
  30. /**
  31. * 缴费订单
  32. *
  33. * @author codingliang
  34. * @email codingliang@gmail.com
  35. * @date 2021-08-12 15:52:41
  36. */
  37. @RestController
  38. @RequestMapping("tuitionpayment/payorder")
  39. public class PayOrderController {
  40. @Autowired
  41. private PayOrderService payOrderService;
  42. @Autowired
  43. private PayableInfoService payableInfoService;
  44. @Autowired
  45. private PayableInfoWaterService payableInfoWaterService;
  46. @GetMapping("ss")
  47. public void ss(String order){
  48. payOrderService.getByOrderNo(order);
  49. }
  50. /**
  51. * 创建支付订单
  52. *
  53. * @param cardNumber 当前登录用户cardNumber
  54. * @return
  55. */
  56. @PostMapping("/{studentNo}/create")
  57. public CommonResult<List<CreateOrderResultVO>> createPayOrder(@RequestHeader("card_number") String cardNumber,
  58. @RequestBody JSONObject jsonObject) {
  59. PayOrderReceiveVO payOrderReceiveVO = JSONObject.toJavaObject(jsonObject, PayOrderReceiveVO.class);
  60. List<CreateOrderResultVO> resultVOList = payOrderService.createOrder(cardNumber, payOrderReceiveVO);
  61. return CommonResult.ok().setResult(resultVOList);
  62. }
  63. /**
  64. * 用于接收创建支付订单的参数便于后续支付明细分流
  65. *
  66. * @param cardNumber 当前登录用户cardNumber
  67. * @param jsonObject 支付参数的结构体
  68. * @return
  69. */
  70. @PostMapping("/{studentNo}/receiveOrder")
  71. public CommonResult<T> receiveOrder(@RequestHeader("card_number") String cardNumber,
  72. @RequestBody JSONObject jsonObject) {
  73. PayOrderReceiveVO payOrderReceiveVO = JSONObject.toJavaObject(jsonObject, PayOrderReceiveVO.class);
  74. List<OrderReceiveTO> orderReceiveTOS = payOrderService.receiveOrder(cardNumber, payOrderReceiveVO);
  75. return CommonResult.ok().setResult(orderReceiveTOS);
  76. }
  77. /**
  78. * 订单列表【当前用户】
  79. *
  80. * @param cardNumber 当前登录用户cardNumber
  81. * @param status 订单状态 1 失败订单 2 成功订单
  82. * @param pageParam 分页参数
  83. * @return
  84. */
  85. @GetMapping("currentUserList")
  86. public CommonResult<PageUtils<PayOrderEntity>> currentUserList(@RequestHeader("card_number") String cardNumber,
  87. @RequestParam("status") String status,
  88. PageParam pageParam) {
  89. PageUtils page = payOrderService.queryPage(pageParam, cardNumber, status);
  90. return CommonResult.ok().setResult(page);
  91. }
  92. /**
  93. * 查询订单状态【用户端】
  94. * <p>
  95. *
  96. * @param orderNo 订单号
  97. * @return
  98. */
  99. @GetMapping("{orderNo}/orderStatu")
  100. public CommonResult<OrderStatusVO> queryOrderStatus( @PathVariable("orderNo") String orderNo) {
  101. OrderStatusVO orderStatusVO = payOrderService.queryOrderStatus(orderNo);
  102. return CommonResult.ok().setResult(orderStatusVO);
  103. }
  104. /**
  105. * 订单列表【管理端】
  106. * <p>
  107. * @param adminToken 管理员token
  108. * @param queryTO 查询条件
  109. * @param pageParam 分页参数
  110. * @return
  111. * @apiNote 0.1.0 新增按照支付方式查询
  112. */
  113. @AdminLoginCheck
  114. @GetMapping("/list")
  115. public CommonResult<PayOrderListVO> list(@RequestHeader("admin_token") String adminToken,
  116. PayOrderQueryTO queryTO,
  117. PageParam pageParam) {
  118. String flag = queryTO.getFlag();
  119. String createDateStr = queryTO.getCreateDateStr();
  120. String payDateStr = queryTO.getPayDateStr();
  121. if (!("1".equals(flag) || "2".equals(flag) || "3".equals(flag))) {
  122. throw new RRException(BizCodeEnume.PARAMETER_ERROR, "flag只允许传1、2、3");
  123. }
  124. if (!"1".equals(flag)) {
  125. if (!(StringUtils.hasText(payDateStr) || StringUtils.hasText(createDateStr))) {
  126. throw new RRException(BizCodeEnume.PARAMETER_ERROR, "查询时间不能为空");
  127. }
  128. }
  129. PageUtils page = payOrderService.queryPage(queryTO, pageParam);
  130. String amountCount = payOrderService.queryPayOrderAmount(queryTO);
  131. PayOrderListVO payOrderListVO = new PayOrderListVO();
  132. BigDecimal total = new BigDecimal(amountCount.split("-")[0]).setScale(2, RoundingMode.HALF_UP);
  133. BigDecimal payOrderLoan = new BigDecimal(amountCount.split("-")[2]).setScale(2, RoundingMode.HALF_UP);
  134. payOrderListVO.setTotal(total);
  135. payOrderListVO.setPage(page);
  136. payOrderListVO.setRecordsNum(Integer.parseInt(amountCount.split("-")[1]));
  137. payOrderListVO.setPayOrderLoan(payOrderLoan);
  138. payOrderListVO.setOrderAllAmount(total.add(payOrderLoan));
  139. return CommonResult.ok().setResult(payOrderListVO);
  140. }
  141. /**
  142. * 查询所有项目的记录
  143. *
  144. * @return
  145. */
  146. @GetMapping("/queryAllAmount")
  147. public CommonResult<T> queryAllItemNameAmount() {
  148. QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
  149. wrapper.eq("status", "2");
  150. List<PayOrderEntity> orderlist = payOrderService.list(wrapper);
  151. BigDecimal totalAmount = BigDecimal.ZERO;
  152. if (orderlist.size() > 0) {
  153. for (int i = 0; i < orderlist.size(); i++) {
  154. totalAmount = totalAmount.add(orderlist.get(i).getNowPayAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
  155. }
  156. }
  157. Integer totalCount = orderlist.size();
  158. return CommonResult.ok().setResult(totalCount + "-" + totalAmount);
  159. }
  160. /**
  161. * 查询相应项目的所有订单数及金额
  162. *
  163. * @param itemName 缴费项目
  164. * @return
  165. */
  166. @GetMapping("/queryAmount")
  167. public CommonResult<T> queryAmountByItemName(@RequestParam("itemName") String itemName) {
  168. String s = payOrderService.queryAmount(itemName);
  169. return CommonResult.ok().setResult(s);
  170. }
  171. /**
  172. * 查询订单状态【管理端】
  173. *
  174. * @param orderNo 订单号
  175. * @return
  176. */
  177. @GetMapping("queryOrderStatu")
  178. public CommonResult<OrderStatusVO> queryOrderStatusByAdmin( @RequestParam String orderNo) {
  179. OrderStatusVO orderStatusVO = payOrderService.queryOrderStatus(orderNo);
  180. return CommonResult.ok().setResult(orderStatusVO);
  181. }
  182. /**
  183. * 下载缴费的学生名单
  184. * <p>
  185. *
  186. * @param response
  187. * @apiNote 0.1.0新增按照支付方式下载字段
  188. */
  189. @RequestMapping("downloadResult")
  190. public void downloadResult(PayOrderQueryTO queryTO,
  191. HttpServletResponse response) throws IOException {
  192. List<String> downIDs = new ArrayList<>();
  193. String downIds = queryTO.getDownIds();
  194. if (downIds != null && !downIds.equals("")) {
  195. String[] split = downIds.split("/");
  196. for (int m = 0; m < split.length; m++) {
  197. downIDs.add(split[m]);
  198. }
  199. }
  200. try {
  201. String flag = queryTO.getFlag();
  202. String createDateStr = queryTO.getCreateDateStr();
  203. String payDateStr = queryTO.getPayDateStr();
  204. if (!("1".equals(flag) || "2".equals(flag) || "3".equals(flag))) {
  205. throw new RRException(BizCodeEnume.PARAMETER_ERROR, "flag只允许传1、2、3");
  206. }
  207. if (!"1".equals(flag)) {
  208. if (!(StringUtils.hasText(payDateStr) || StringUtils.hasText(createDateStr))) {
  209. throw new RRException(BizCodeEnume.PARAMETER_ERROR, "查询时间不能为空");
  210. }
  211. }
  212. payOrderService.downloadResult(response, queryTO, downIDs);
  213. } catch (Exception e) {
  214. e.printStackTrace();
  215. }
  216. }
  217. /**
  218. * 下载缴费名单的txt
  219. *
  220. * @param queryTO 查询参数
  221. * @param response
  222. * @throws IOException
  223. */
  224. @RequestMapping("exportOrderTxt")
  225. public void exportTxt(PayOrderQueryTO queryTO,
  226. HttpServletResponse response) throws IOException {
  227. try {
  228. List<String> downIDs = new ArrayList<>();
  229. String downIds = queryTO.getDownIds();
  230. if (downIds != null && !downIds.equals("")) {
  231. String[] split = downIds.split("/");
  232. for (int m = 0; m < split.length; m++) {
  233. downIDs.add(split[m]);
  234. }
  235. }
  236. if (!queryTO.getItemName().equals("学杂费")) {
  237. throw new RRException(BizCodeEnume.PAY_ITEM_NOT_SUPPORT, "该项目不支持导出TXT文件");
  238. }
  239. String flag = queryTO.getFlag();
  240. String createDateStr = queryTO.getCreateDateStr();
  241. String payDateStr = queryTO.getPayDateStr();
  242. if (!("1".equals(flag) || "2".equals(flag) || "3".equals(flag))) {
  243. throw new RRException(BizCodeEnume.PARAMETER_ERROR, "flag只允许传1、2、3");
  244. }
  245. if (!"1".equals(flag)) {
  246. if (!(StringUtils.hasText(payDateStr) || StringUtils.hasText(createDateStr))) {
  247. throw new RRException(BizCodeEnume.PARAMETER_ERROR, "查询时间不能为空");
  248. }
  249. }
  250. payOrderService.exportOrderTxt(response, queryTO, downIDs);
  251. } catch (Exception e) {
  252. e.printStackTrace();
  253. }
  254. }
  255. /**
  256. * 下载缴费名单的txt点击开始计时十五分钟,导出十五分钟内的数据
  257. *
  258. * @param response
  259. * @param type today 当天 quarter 十五分钟
  260. *
  261. * @throws IOException
  262. */
  263. @RequestMapping("exportOrderTxtQuarter")
  264. public void exportOrderTxtQuarter( HttpServletResponse response, String type ) throws IOException {
  265. try {
  266. payOrderService.exportOrderTxtQuarter(response, type);
  267. } catch (Exception e) {
  268. e.printStackTrace();
  269. }
  270. }
  271. /**
  272. * 通过订单编号查询缴费订单详情 查看订单详情 【用户端】
  273. *
  274. * @param orderNo 订单编号
  275. * @return
  276. */
  277. @GetMapping("/queryOrderDetail")
  278. public CommonResult<PayOrderEntity> queryPayOrderDetail(@RequestParam("orderNo") String orderNo) {
  279. QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
  280. wrapper.eq(StringUtils.hasText(orderNo), "order_no", orderNo);
  281. PayOrderEntity one = payOrderService.getOne(wrapper);
  282. return CommonResult.ok().setResult(one);
  283. }
  284. /**
  285. * 查看全部订单的详情
  286. *
  287. * @param cardNumber
  288. * @param pageParam
  289. * @param status 订单状态
  290. * @return
  291. */
  292. @GetMapping("/queryAllOrder")
  293. public CommonResult<PageUtils<PayOrderEntity>> queryAllOrderByParent(@RequestHeader("card_number") String cardNumber,
  294. PageParam pageParam,
  295. @RequestParam("status") String status,
  296. String itemName, String payYear) {
  297. PageUtils page = payOrderService.queryAllOrder(cardNumber, pageParam, status, itemName, payYear);
  298. return CommonResult.ok().setResult(page);
  299. }
  300. @GetMapping("/updateOrderDetail")
  301. public void updateOrderDetail(String orderNo) {
  302. QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
  303. wrapper.eq("order_no", orderNo);
  304. PayOrderEntity payOrderEntity = this.payOrderService.getOne(wrapper);
  305. String payItem = payOrderEntity.getPayItem();
  306. BigDecimal notPayAmount = BigDecimal.ZERO;
  307. BigDecimal payAmount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
  308. if (payItem.equals("水费缴纳")) {
  309. QueryWrapper<PayableInfoWaterEntity> wrapper1 = new QueryWrapper<>();
  310. wrapper1.eq("student_no", payOrderEntity.getPayForIdentify())
  311. .eq("student_name", payOrderEntity.getStudentName())
  312. .eq("pay_month", payOrderEntity.getPayYear());
  313. PayableInfoWaterEntity payableInfoWaterEntity = payableInfoWaterService.getOne(wrapper1);
  314. payOrderEntity.setRealPayAmount(payableInfoWaterEntity.getRealPayAmount());
  315. payOrderEntity.setPayDetail(payableInfoWaterEntity.getPayAmountDetail());
  316. payOrderEntity.setNowPayAmount(payableInfoWaterEntity.getRealPayAmount());
  317. } else {
  318. QueryWrapper<PayableInfoEntity> wrapper1 = new QueryWrapper<>();
  319. wrapper1.eq("student_no", payOrderEntity.getPayForIdentify())
  320. .eq("student_name", payOrderEntity.getStudentName())
  321. .eq("years", payOrderEntity.getPayYear());
  322. PayableInfoEntity payableInfoEntity = payableInfoService.getOne(wrapper1);
  323. if (payableInfoEntity == null) {
  324. throw new RRException(BizCodeEnume.DATA_IS_EXIST, "暂无该缴费订单。");
  325. }
  326. if (!payableInfoEntity.getNotPayDetail().isEmpty()) {
  327. payOrderEntity.setNotPayDetail(payableInfoEntity.getNotPayDetail());
  328. String[] notPayDetail = payableInfoEntity.getNotPayDetail().split("/");
  329. for (int i = 0; i < notPayDetail.length; i++) {
  330. notPayAmount = notPayAmount.add(new BigDecimal(notPayDetail[i].split(":")[1]));
  331. }
  332. }
  333. if (!payableInfoEntity.getPayDetail().isEmpty()) {
  334. payOrderEntity.setPayDetail(payableInfoEntity.getPayDetail());
  335. String[] payDetail = payableInfoEntity.getPayDetail().split("/");
  336. for (int i = 0; i < payDetail.length; i++) {
  337. payAmount = payAmount.add(new BigDecimal(payDetail[i].split(":")[1]));
  338. }
  339. }
  340. }
  341. payOrderEntity.setRealPayAmount(payAmount.setScale(2, RoundingMode.HALF_UP));
  342. }
  343. /**
  344. * 根据订单编号查询步骤详情
  345. *
  346. * @param orderNo
  347. * @param secondOrderNo
  348. * @return
  349. */
  350. @GetMapping("showStepDetail")
  351. public CommonResult<List<OrderViewVO>> showStepDetail(String orderNo, String secondOrderNo) {
  352. List<OrderViewVO> orderViewVOList = new ArrayList<>();
  353. QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
  354. wrapper.in("order_no", orderNo, secondOrderNo);
  355. List<PayOrderEntity> orderList = payOrderService.list(wrapper);
  356. orderList.forEach(order -> {
  357. OrderViewVO orderViewVO = new OrderViewVO();
  358. orderViewVO.setItemName(order.getPayItem());
  359. orderViewVO.setPayDetail(order.getPayDetail());
  360. orderViewVO.setPayDetailAmount(order.getNowPayAmount());
  361. orderViewVO.setOrderNo(order.getOrderNo());
  362. orderViewVO.setPayMethod(order.getPayMethod());
  363. orderViewVO.setStatus(order.getStatus());
  364. orderViewVOList.add(orderViewVO);
  365. });
  366. return CommonResult.ok().setResult(orderViewVOList);
  367. }
  368. /**
  369. * 根据cardNumber 查询用户所交的项目及时间
  370. *
  371. * @param cardNumber
  372. * @param
  373. * @param status
  374. * @return
  375. */
  376. @GetMapping("queryOrderItem")
  377. public CommonResult<OrderQueryVO> queryOrderItem(@RequestHeader("card_number") String cardNumber,
  378. @RequestParam("status") String status) {
  379. List<OrderQueryVO> orderQueryVOList = new ArrayList<>();
  380. QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
  381. wrapper.eq(StringUtils.hasText(status), "status", status)
  382. .eq(StringUtils.hasText(cardNumber), "payer_identify", cardNumber);
  383. List<PayOrderEntity> orderList = payOrderService.list(wrapper);
  384. orderList.forEach(order -> {
  385. OrderQueryVO orderQueryVO = new OrderQueryVO();
  386. orderQueryVO.setText(order.getPayItem());
  387. orderQueryVO.setValue(order.getPayItem());
  388. List<YearVo> lists = queryYearByItem(cardNumber, status, order.getPayItem());
  389. orderQueryVO.setChildren(lists);
  390. orderQueryVOList.add(orderQueryVO);
  391. });
  392. List uniqueStr = orderQueryVOList.stream().distinct().collect(Collectors.toList());
  393. return CommonResult.ok().setResult(uniqueStr);
  394. }
  395. /**
  396. * 根据项目查询订单年度
  397. *
  398. * @param cardNumber
  399. * @param itemName
  400. * @param status
  401. * @return
  402. */
  403. @GetMapping("queryYearByItem")
  404. public List<YearVo> queryYearByItem(String cardNumber,
  405. String status,
  406. @RequestParam("itemName") String itemName) {
  407. QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
  408. List<YearVo> yearList = new ArrayList<>();
  409. wrapper.eq(StringUtils.hasText(itemName), "pay_item", itemName)
  410. .eq("status", status)
  411. .eq(StringUtils.hasText(cardNumber), "payer_identify", cardNumber);
  412. List<PayOrderEntity> orderList = payOrderService.list(wrapper);
  413. orderList.forEach(order -> {
  414. YearVo yearVo = new YearVo();
  415. yearVo.setText(order.getPayYear());
  416. yearVo.setValue(order.getPayYear());
  417. yearList.add(yearVo);
  418. });
  419. List uniqueStr = yearList.stream().distinct().collect(Collectors.toList());
  420. return uniqueStr;
  421. }
  422. /**
  423. * 通过缴费项目及缴费状态查询缴费年度信息
  424. * @param itemName
  425. * @param status
  426. * @return
  427. */
  428. @GetMapping("queryOrderYearByItem")
  429. public CommonResult<List<String>> queryYearByItem(String itemName, String status){
  430. List<String> yearList = new ArrayList<>();
  431. QueryWrapper<PayOrderEntity> orderWapper = new QueryWrapper<>();
  432. orderWapper.eq("pay_item", itemName)
  433. .eq("status", status);
  434. List<PayOrderEntity> orderList = payOrderService.list(orderWapper);
  435. if (orderList.size() > 0) {
  436. orderList.forEach(order->{
  437. yearList.add(order.getPayYear());
  438. });
  439. }
  440. List uniqueStr = yearList.stream().distinct().collect(Collectors.toList());
  441. return CommonResult.ok().setResult(uniqueStr);
  442. }
  443. }