Explorar o código

1、完成二次缴费业务逻辑
2、修改缴费金额异常问题

Bingo %!s(int64=4) %!d(string=hai) anos
pai
achega
454000a7c2

+ 6 - 6
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayController.java

@@ -32,7 +32,7 @@ public class PayController {
  //    * @param cardNumber 当前登录用户标识
      * @param orderNo 订单号
      * @param openId 支付者唯一标识
-     * @param secondeOrderNo  携带第二次支付的订单号
+     * @param secondOrderNo  携带第二次支付的订单号
      * @return
      * @throws Exception
      */
@@ -41,8 +41,8 @@ public class PayController {
     public CommonResult<WechatJsApiPayParamVO> getCCBJsApiParam( @RequestHeader("card_number")String cardNumber,
                                                              @RequestParam String orderNo,
                                                              @RequestParam String openId,
-                                                                 String secondeOrderNo) {
-        WechatJsApiPayParamVO jsApiPayParam = payService.getCCBJsApiParam(openId, orderNo,secondeOrderNo);
+                                                                 String secondOrderNo) {
+        WechatJsApiPayParamVO jsApiPayParam = payService.getCCBJsApiParam(openId, orderNo,secondOrderNo);
         return CommonResult.ok().setResult(jsApiPayParam);
     }
 
@@ -71,7 +71,6 @@ public class PayController {
     @GetMapping("ccb/success")
     public String ccbSuccess(HttpServletRequest request) {
         String url = payService.ccbSuccess(request);
-
         return "redirect:" + url;
     }
 
@@ -114,8 +113,9 @@ public class PayController {
      * @return
      */
     @GetMapping("jxnxs/success")
-    public String jxnxsSuccess(@RequestParam("ord_no") String orderNo) {
-        String url = payService.jxnxsSuccess(orderNo);
+    public String jxnxsSuccess(@RequestParam("ord_no") String orderNo,
+                               String secondOrderNo) {
+        String url = payService.jxnxsSuccess(orderNo, secondOrderNo);
         return "redirect:" + url;
     }
 }

+ 20 - 23
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayDetailBankController.java

@@ -11,9 +11,6 @@ import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * @Author: binguo
  * @Date: 2022/7/11 星期一 20:16
@@ -36,26 +33,26 @@ public class PayDetailBankController {
         QueryWrapper<PayDetailBank> wapper = new QueryWrapper<>();
         wapper.eq("item_name", itemName);
         PayDetailBank payDetailBank = payDetailBankService.getOne(wapper);
-        //建行缴费明细字符串转换为数组
-        String ccbStr = payDetailBank.getCcbStr();
-        List<String> ccbList = new ArrayList<>();
-        if (!ccbStr.isEmpty()){
-            String[] ccbSplit = ccbStr.split("/");
-            for (int i = 0; i < ccbSplit.length; i++) {
-                ccbList.add("\""+ccbSplit[i].split(":")[0]+"\"");
-            }
-        }
-        //农商缴费明细字符串转换为数组
-        String rcbStr = payDetailBank.getRcbStr();
-        List<String> rcbList = new ArrayList<>();
-        if (!rcbStr.isEmpty()) {
-            String[] rcbSplit = rcbStr.split("/");
-            for (int i = 0; i < rcbSplit.length; i++) {
-                rcbList.add("\""+rcbSplit[i].split(":")[0]+"\"");
-            }
-        }
-        payDetailBank.setCcbStr(ccbList.toString());
-        payDetailBank.setRcbStr(rcbList.toString());
+//        //建行缴费明细字符串转换为数组
+//        String ccbStr = payDetailBank.getCcbStr();
+//        List<String> ccbList = new ArrayList<>();
+//        if (!ccbStr.isEmpty()){
+//            String[] ccbSplit = ccbStr.split("/");
+//            for (int i = 0; i < ccbSplit.length; i++) {
+//                ccbList.add("\""+ccbSplit[i].split(":")[0]+"\"");
+//            }
+//        }
+//        //农商缴费明细字符串转换为数组
+//        String rcbStr = payDetailBank.getRcbStr();
+//        List<String> rcbList = new ArrayList<>();
+//        if (!rcbStr.isEmpty()) {
+//            String[] rcbSplit = rcbStr.split("/");
+//            for (int i = 0; i < rcbSplit.length; i++) {
+//                rcbList.add("\""+rcbSplit[i].split(":")[0]+"\"");
+//            }
+//        }
+//        payDetailBank.setCcbStr(ccbList.toString());
+//        payDetailBank.setRcbStr(rcbList.toString());
         return CommonResult.ok().setResult(payDetailBank);
     }
 

+ 39 - 14
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayOrderController.java

@@ -16,10 +16,7 @@ import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoService;
 import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoWaterService;
 import com.chuanghai.smartschool.tuitionpayment.to.OrderReceiveTO;
 import com.chuanghai.smartschool.tuitionpayment.to.PayOrderQueryTO;
-import com.chuanghai.smartschool.tuitionpayment.vo.CreateOrderResultVO;
-import com.chuanghai.smartschool.tuitionpayment.vo.OrderStatusVO;
-import com.chuanghai.smartschool.tuitionpayment.vo.PayOrderListVO;
-import com.chuanghai.smartschool.tuitionpayment.vo.PayOrderReceiveVO;
+import com.chuanghai.smartschool.tuitionpayment.vo.*;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.StringUtils;
@@ -29,6 +26,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -58,14 +56,14 @@ public class PayOrderController {
      * @return
      */
     @PostMapping("/{studentNo}/create")
-    public CommonResult<CreateOrderResultVO> createPayOrder(@RequestHeader("card_number") String cardNumber,
+    public CommonResult<List<CreateOrderResultVO>> createPayOrder(@RequestHeader("card_number") String cardNumber,
                                                             @RequestBody JSONObject jsonObject) {
 
         PayOrderReceiveVO payOrderReceiveVO = JSONObject.toJavaObject(jsonObject, PayOrderReceiveVO.class);
 
-        CreateOrderResultVO resultVO = payOrderService.createOrder(cardNumber,payOrderReceiveVO);
+        List<CreateOrderResultVO> resultVOList = payOrderService.createOrder(cardNumber,payOrderReceiveVO);
 
-        return CommonResult.ok().setResult(resultVO);
+        return CommonResult.ok().setResult(resultVOList);
     }
 
     /**
@@ -207,7 +205,7 @@ public class PayOrderController {
      * @return
      */
     @GetMapping("queryOrderStatu")
-    public CommonResult<OrderStatusVO> queryOrderStatusByAdmin(@RequestHeader("admin_token") String adminToken,
+    public CommonResult<OrderStatusVO> queryOrderStatusByAdmin(//@RequestHeader("admin_token") String adminToken,
                                                                @RequestParam String orderNo) {
         OrderStatusVO orderStatusVO = payOrderService.queryOrderStatus(orderNo);
         return CommonResult.ok().setResult(orderStatusVO);
@@ -276,15 +274,19 @@ public class PayOrderController {
 
 
     /**
-     * 根据父查看全部订单的详情
-     * @param orderNo
+     * 查看全部订单的详情
+     * @param cardNumber
      * @param pageParam
+     * @param status 订单状态
      * @return
      */
-    @GetMapping("/queryAllOrderByParent")
-    public CommonResult<PageUtils<PayOrderEntity>>  queryAllOrderByParent(@RequestParam("orderNo") String orderNo, PageParam pageParam){
+    @GetMapping("/queryAllOrder")
+    public CommonResult<PageUtils<PayOrderEntity>>  queryAllOrderByParent(@RequestHeader("card_number") String cardNumber,
+                                                                          PageParam pageParam ,
+                                                                          @RequestParam("status") String status,
+                                                                        String itemName, String payYear){
 
-        PageUtils page = payOrderService.queryAllOrderByParent(orderNo, pageParam);
+        PageUtils page = payOrderService.queryAllOrder(cardNumber, pageParam, status, itemName ,payYear);
 
         return CommonResult.ok().setResult(page);
     }
@@ -336,7 +338,30 @@ public class PayOrderController {
         payOrderEntity.setRealPayAmount(payAmount.setScale(2, RoundingMode.HALF_UP));
     }
 
-
+    /**
+     * 根据订单编号查询步骤详情
+     * @param orderNo
+     * @param secondOrderNo
+     * @return
+     */
+    @GetMapping("showStepDetail")
+    public CommonResult<List<OrderViewVO>> showStepDetail(String orderNo, String secondOrderNo){
+        List<OrderViewVO> orderViewVOList =  new ArrayList<>();
+        QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
+        wrapper.in("order_no", orderNo, secondOrderNo);
+        List<PayOrderEntity> orderList = payOrderService.list(wrapper);
+        orderList.forEach(order->{
+            OrderViewVO orderViewVO = new OrderViewVO();
+            orderViewVO.setItemName(order.getPayItem());
+            orderViewVO.setPayDetail(order.getPayDetail());
+            orderViewVO.setPayDetailAmount(order.getNowPayAmount());
+            orderViewVO.setOrderNo(order.getOrderNo());
+            orderViewVO.setPayMethod(order.getPayMethod());
+            orderViewVO.setStatus(order.getStatus());
+            orderViewVOList.add(orderViewVO);
+        });
+        return CommonResult.ok().setResult(orderViewVOList);
+    }
 
 }
 

+ 192 - 48
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayableInfoController.java

@@ -380,7 +380,7 @@ public class PayableInfoController {
 
                 PayableInfoWaterEntity one = payableInfoWaterService.getOne(wrapper);
                 if (one != null) {
-                    boolean alreadyPay = payOrderService.isAlreadyPay(one.getStudentNo(), one.getPaymentItem(), one.getPayMonth(), null);
+                    boolean alreadyPay = payOrderService.isAlreadyPay(one.getStudentNo(), one.getPaymentItem(), one.getPayMonth(), null, null, null);
                     if (alreadyPay) {
                         DeletePayableInfoTO to = new DeletePayableInfoTO();
                         BeanUtils.copyProperties(one, to);
@@ -396,7 +396,7 @@ public class PayableInfoController {
 
                 PayableInfoEntity one = payableInfoService.getOne(wrapper);
                 if (one != null) {
-                    boolean alreadyPay = payOrderService.isAlreadyPay(one.getStudentNo(), one.getPaymentItem(), one.getYears(), one.getNotPaySize());
+                    boolean alreadyPay = payOrderService.isAlreadyPay(one.getStudentNo(), one.getPaymentItem(), one.getYears(), one.getNotPaySize(),null,null);
                     if (alreadyPay) {
                         DeletePayableInfoTO to = new DeletePayableInfoTO();
                         BeanUtils.copyProperties(one, to);
@@ -730,6 +730,7 @@ public class PayableInfoController {
         return CommonResult.ok().setResult(payableInfoStudentResultVO);
     }
 
+
     /**
      * 根据订单编号修改相应的缴费订单
      *
@@ -741,26 +742,22 @@ public class PayableInfoController {
         wrapper.eq("order_no", orderNo);
         PayOrderEntity one = payOrderService.getOne(wrapper);
         String parentOrderNo = "";
-        BigDecimal parentOrderLone = BigDecimal.ZERO.setScale(2,BigDecimal.ROUND_HALF_UP);
+        BigDecimal parentOrderLone = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP);
         if (one.getParentOrder() == null) {
-            if (one.getNotPaySize() == 0) {
-                one.setStatus("2");
-            } else {
-                one.setStatus("3");
-            }
-            //TODO 更新缴费订单的贷款金额
-            parentOrderNo = one.getOrderNo();
-            parentOrderLone = parentOrderLone.add(one.getPayOrderLoan()).setScale(2,BigDecimal.ROUND_HALF_UP);
+//            if (one.getNotPaySize() == 0) {
+//                one.setStatus("2");
+//            } else {
+//                one.setStatus("3");
+//            }
         } else {
             parentOrderNo = one.getParentOrder();
             PayOrderEntity byOrderNo = payOrderService.getByOrderNo(parentOrderNo);
-            parentOrderLone = parentOrderLone.add(byOrderNo.getPayOrderLoan()).setScale(2,BigDecimal.ROUND_HALF_UP);
 
             one.setStatus("2");
         }
 
 
-        payOrderService.updateById(one);
+        //payOrderService.updateById(one);
         String payDetail = "";
         if (StringUtils.hasText(one.getPayDetail())) {
             payDetail = one.getPayDetail();
@@ -775,13 +772,14 @@ public class PayableInfoController {
         String studentName = one.getStudentName();
         String payForIdentify = one.getPayForIdentify();
         String payItem = one.getPayItem();
-        BigDecimal payOrderLoan = one.getPayOrderLoan();
+        BigDecimal payOrderLoan = BigDecimal.ZERO;
         PayableInfoEntity payableInfoEntity = new PayableInfoEntity();
         PayableInfoWaterEntity payableInfoWaterEntity = new PayableInfoWaterEntity();
         if (payItem.equals("水费缴纳")) {
             QueryWrapper<PayableInfoWaterEntity> wrapper1 = new QueryWrapper<>();
             wrapper1.eq("student_no", payForIdentify)
                     .eq("student_name", studentName)
+                    .eq("payment_item", payItem)
                     .eq("pay_month", payYear);
             PayableInfoWaterEntity water = payableInfoWaterService.getOne(wrapper1);
             water.setPayItemType("2");
@@ -790,66 +788,75 @@ public class PayableInfoController {
             }
             payableInfoWaterService.updateById(water);
 
-        }else {
+        } else {
             QueryWrapper<PayableInfoEntity> wrapper1 = new QueryWrapper<>();
             wrapper1.eq("student_no", payForIdentify)
                     .eq("student_name", studentName)
+                    .eq("payment_item", payItem)
                     .eq("years", payYear);
             PayableInfoEntity pInfo = payableInfoService.getOne(wrapper1);
             String notPayDetail1 = "";
             String payDetail1 = "";
-            System.out.println(parentOrderNo);
-            List<PayOrderEntity> payOrderList = payOrderService.queryAllOrderByParent(parentOrderNo, new PageParam()).getList();
-            if (payOrderList.size() > 0) {
+            //  System.out.println(parentOrderNo);
 
+            QueryWrapper<PayOrderEntity> orderWapper = new QueryWrapper<>();
+            orderWapper.eq("pay_for_identify", payForIdentify)
+                    .eq("student_name", studentName)
+                    .eq("pay_item", payItem)
+                    .eq("pay_year", payYear)
+                    .in("status", "2", "3");
+            List<PayOrderEntity> payOrderList = payOrderService.list(orderWapper);
+            //List<PayOrderEntity> payOrderList = payOrderService.queryAllOrderByParent(parentOrderNo, new PageParam()).getList();
+            if (payOrderList.size() > 0) {
                 for (int i = 0; i < payOrderList.size(); i++) {
-                    System.out.println(payOrderList.get(i));
-
-                    // System.out.println(payOrderList.get(i));
-                    // parentOrderLone  = parentOrderLone.add(payOrderList.get(i).getPayOrderLoan()).setScale(2,BigDecimal.ROUND_HALF_UP);
-//                if (StringUtils.hasText(payOrderList.get(i).getNotPayDetail() )) {
-//                    notPayDetail1 = payOrderList.get(i).getNotPayDetail() + "/";
-//                }
-
-
                     if (StringUtils.hasText(payOrderList.get(i).getPayDetail())) {
                         payDetail1 += payOrderList.get(i).getPayDetail() + "/";
                     }
-                    if (StringUtils.hasText(payOrderList.get(payOrderList.size() - 1).getNotPayDetail())) {
-                        notPayDetail1 = payOrderList.get(payOrderList.size() - 1).getNotPayDetail();
-                    }
-                    PayInfoDetailVO payInfoDetailVO = (PayInfoDetailVO) queryPayInfoDetail(String.valueOf(pInfo.getId()), pInfo.getPaymentItem(), payDetail1).getData();
-                    //  System.out.println(payInfoDetailVO);
-//                if (StringUtils.hasText(payOrderList.get(i).getPayOrderLoan())) {
-//
-//                }
-                    payOrderLoan = payOrderList.get(i).getPayOrderLoan();
-                    pInfo.setPayOrderLoan(payOrderLoan);
+                   // PayInfoDetailVO payInfoDetailVO = (PayInfoDetailVO) queryPayInfoDetail(String.valueOf(pInfo.getId()), pInfo.getPaymentItem(), payDetail1).getData();
+                    payOrderLoan = payOrderLoan.add(payOrderList.get(i).getPayOrderLoan()).setScale(2, BigDecimal.ROUND_HALF_UP);
+
                 }
             }
-//            if (StringUtils.hasText(pInfo.getNotPayDetail())) {
-//                notPayDetail1 += notPayDetail +"/";
-//            }
-//            if (StringUtils.hasText(pInfo.getPayDetail())) {
-//                payDetail1 += payDetail + "/";
-//            }
+            pInfo.setPayOrderLoan(payOrderLoan);
 
             payDetail1 = payDetail1.endsWith("/") == true ? payDetail1.substring(0, payDetail1.length() - 1) : payDetail1;
             //notPayDetail1 =  notPayDetail1.endsWith("/") == true ? notPayDetail1.substring(0,notPayDetail1.length() -1 ) : notPayDetail1;
             // notPayDetail1= notPayDetail1.startsWith("/") == true ? notPayDetail1.substring(1) : notPayDetail1;
             //  payDetail1= payDetail1.startsWith("/") == true ? payDetail1.substring(1) : payDetail1;
             PayInfoDetailVO payInfoDetailVO = (PayInfoDetailVO) this.queryPayInfoDetail(String.valueOf(pInfo.getId()), pInfo.getPaymentItem(), one.getPayDetail()).getData();
-
             pInfo.setPayDetail(payDetail1);
+            String payInfoPayAllDetail = "";
+            if (StringUtils.hasText(pInfo.getMustMoney())) {
+                payInfoPayAllDetail += pInfo.getMustMoney() + "/";
+            }
+            if (StringUtils.hasText(pInfo.getNotMustMoney())) {
+                payInfoPayAllDetail += pInfo.getNotMustMoney();
+            }
+
+            String[] payDetail1Split = pInfo.getPayDetail().split("/");
+            List<String> payDetail1List = new ArrayList<>(Arrays.asList(payDetail1Split));
+            String[] payInfoPayAllDetailSplit = payInfoPayAllDetail.split("/");
+            List<String> payInfoPayAllDetailList = new ArrayList<>(Arrays.asList(payInfoPayAllDetailSplit));
+            payInfoPayAllDetailList.removeAll(payDetail1List);
+            notPaySize = 0;
+            if (payInfoPayAllDetailList.size() > 0) {
+                for (int i = 0; i < payInfoPayAllDetailList.size(); i++) {
+                    notPayDetail1 += payInfoPayAllDetailList.get(i) + "/";
+                    notPaySize++;
+                }
+                notPayDetail1 = notPayDetail1.endsWith("/") == true ? notPayDetail1.substring(0, notPayDetail1.length() - 1) : notPayDetail1;
+            }
+            System.out.println(payOrderList.size());
+            System.out.println(payDetail1+"-------------------------payDetail1-------------------------");
+            System.out.println(notPayDetail1+"-------------------notPayDetail1-----------------------");
+
             pInfo.setNotPayDetail(notPayDetail1);
             pInfo.setNotPaySize(notPaySize);
             if (pInfo.getPayFinishTime() == null) {
                 pInfo.setPayFinishTime(LocalDateTime.now());
             }
             //当所有待缴费明细的数量为0 时表示该订单已经完成缴费
-//            QueryWrapper<PayOrderEntity> wrapper2 = new QueryWrapper<>();
-//            wrapper2.eq("order_no", one.getParentOrder());
-//            PayOrderEntity one1 = payOrderService.getOne(wrapper2);
+
             if (one != null) {
                 if (notPaySize == 0) {
                     pInfo.setPayItemType("2");
@@ -857,11 +864,148 @@ public class PayableInfoController {
                     pInfo.setPayItemType("3");
                 }
             }
-            pInfo.setPayOrderLoan(parentOrderLone);
+            pInfo.setPayOrderLoan(payOrderLoan);
+            one.setNotPayDetail(notPayDetail1);
+            System.out.println(pInfo);
+            payOrderService.updateById(one);
             payableInfoService.updateById(pInfo);
         }
     }
 
+
+//    /**
+//     * 根据订单编号修改相应的缴费订单
+//     *
+//     * @param orderNo
+//     */
+//    @GetMapping("tt")
+//    public void updatePayinfoByOrder(String orderNo) {
+//        QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
+//        wrapper.eq("order_no", orderNo);
+//        PayOrderEntity one = payOrderService.getOne(wrapper);
+//        String parentOrderNo = "";
+//        BigDecimal parentOrderLone = BigDecimal.ZERO.setScale(2,BigDecimal.ROUND_HALF_UP);
+//        if (one.getParentOrder() == null) {
+//            if (one.getNotPaySize() == 0) {
+//                one.setStatus("2");
+//            } else {
+//                one.setStatus("3");
+//            }
+//            //TODO 更新缴费订单的贷款金额
+//            parentOrderNo = one.getOrderNo();
+//            parentOrderLone = parentOrderLone.add(one.getPayOrderLoan()).setScale(2,BigDecimal.ROUND_HALF_UP);
+//        } else {
+//            parentOrderNo = one.getParentOrder();
+//            PayOrderEntity byOrderNo = payOrderService.getByOrderNo(parentOrderNo);
+//            parentOrderLone = parentOrderLone.add(byOrderNo.getPayOrderLoan()).setScale(2,BigDecimal.ROUND_HALF_UP);
+//
+//            one.setStatus("2");
+//        }
+//
+//
+//        payOrderService.updateById(one);
+//        String payDetail = "";
+//        if (StringUtils.hasText(one.getPayDetail())) {
+//            payDetail = one.getPayDetail();
+//        }
+//        String notPayDetail = "";
+//        if (StringUtils.hasText(one.getNotPayDetail())) {
+//            notPayDetail = one.getNotPayDetail();
+//        }
+//
+//        Integer notPaySize = one.getNotPaySize();
+//        String payYear = one.getPayYear();
+//        String studentName = one.getStudentName();
+//        String payForIdentify = one.getPayForIdentify();
+//        String payItem = one.getPayItem();
+//        BigDecimal payOrderLoan = one.getPayOrderLoan();
+//        PayableInfoEntity payableInfoEntity = new PayableInfoEntity();
+//        PayableInfoWaterEntity payableInfoWaterEntity = new PayableInfoWaterEntity();
+//        if (payItem.equals("水费缴纳")) {
+//            QueryWrapper<PayableInfoWaterEntity> wrapper1 = new QueryWrapper<>();
+//            wrapper1.eq("student_no", payForIdentify)
+//                    .eq("student_name", studentName)
+//                    .eq("pay_month", payYear);
+//            PayableInfoWaterEntity water = payableInfoWaterService.getOne(wrapper1);
+//            water.setPayItemType("2");
+//            if (water.getPayFinishTime() == null) {
+//                water.setPayFinishTime(LocalDateTime.now());
+//            }
+//            payableInfoWaterService.updateById(water);
+//
+//        }else {
+//            QueryWrapper<PayableInfoEntity> wrapper1 = new QueryWrapper<>();
+//            wrapper1.eq("student_no", payForIdentify)
+//                    .eq("student_name", studentName)
+//                    .eq("years", payYear);
+//            PayableInfoEntity pInfo = payableInfoService.getOne(wrapper1);
+//            String notPayDetail1 = "";
+//            String payDetail1 = "";
+//            System.out.println(parentOrderNo);
+//            List<PayOrderEntity> payOrderList = payOrderService.queryAllOrderByParent(parentOrderNo, new PageParam()).getList();
+//            if (payOrderList.size() > 0) {
+//
+//                for (int i = 0; i < payOrderList.size(); i++) {
+//                    System.out.println(payOrderList.get(i));
+//
+//                    // System.out.println(payOrderList.get(i));
+//                    // parentOrderLone  = parentOrderLone.add(payOrderList.get(i).getPayOrderLoan()).setScale(2,BigDecimal.ROUND_HALF_UP);
+////                if (StringUtils.hasText(payOrderList.get(i).getNotPayDetail() )) {
+////                    notPayDetail1 = payOrderList.get(i).getNotPayDetail() + "/";
+////                }
+//
+//
+//                    if (StringUtils.hasText(payOrderList.get(i).getPayDetail())) {
+//                        payDetail1 += payOrderList.get(i).getPayDetail() + "/";
+//                    }
+//                    if (StringUtils.hasText(payOrderList.get(payOrderList.size() - 1).getNotPayDetail())) {
+//                        notPayDetail1 = payOrderList.get(payOrderList.size() - 1).getNotPayDetail();
+//                    }
+//                    PayInfoDetailVO payInfoDetailVO = (PayInfoDetailVO) queryPayInfoDetail(String.valueOf(pInfo.getId()), pInfo.getPaymentItem(), payDetail1).getData();
+//                    //  System.out.println(payInfoDetailVO);
+////                if (StringUtils.hasText(payOrderList.get(i).getPayOrderLoan())) {
+////
+////                }
+//                    payOrderLoan = payOrderList.get(i).getPayOrderLoan();
+//                    pInfo.setPayOrderLoan(payOrderLoan);
+//                }
+//            }
+////            if (StringUtils.hasText(pInfo.getNotPayDetail())) {
+////                notPayDetail1 += notPayDetail +"/";
+////            }
+////            if (StringUtils.hasText(pInfo.getPayDetail())) {
+////                payDetail1 += payDetail + "/";
+////            }
+//
+//            payDetail1 = payDetail1.endsWith("/") == true ? payDetail1.substring(0, payDetail1.length() - 1) : payDetail1;
+//            //notPayDetail1 =  notPayDetail1.endsWith("/") == true ? notPayDetail1.substring(0,notPayDetail1.length() -1 ) : notPayDetail1;
+//            // notPayDetail1= notPayDetail1.startsWith("/") == true ? notPayDetail1.substring(1) : notPayDetail1;
+//            //  payDetail1= payDetail1.startsWith("/") == true ? payDetail1.substring(1) : payDetail1;
+//            PayInfoDetailVO payInfoDetailVO = (PayInfoDetailVO) this.queryPayInfoDetail(String.valueOf(pInfo.getId()), pInfo.getPaymentItem(), one.getPayDetail()).getData();
+//
+//            pInfo.setPayDetail(payDetail1);
+//            pInfo.setNotPayDetail(notPayDetail1);
+//            pInfo.setNotPaySize(notPaySize);
+//            if (pInfo.getPayFinishTime() == null) {
+//                pInfo.setPayFinishTime(LocalDateTime.now());
+//            }
+//            //当所有待缴费明细的数量为0 时表示该订单已经完成缴费
+////            QueryWrapper<PayOrderEntity> wrapper2 = new QueryWrapper<>();
+////            wrapper2.eq("order_no", one.getParentOrder());
+////            PayOrderEntity one1 = payOrderService.getOne(wrapper2);
+//            if (one != null) {
+//                if (notPaySize == 0) {
+//                    pInfo.setPayItemType("2");
+//                } else {
+//                    pInfo.setPayItemType("3");
+//                }
+//            }
+//            pInfo.setPayOrderLoan(parentOrderLone);
+//            payableInfoService.updateById(pInfo);
+//        }
+//    }
+
+
 //    /**
 //     * 根据缴费项目查询所有的缴费明细用于选定明细金额进入的账户(建行/农商)
 //     * @param itemName

+ 3 - 3
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayOrderService.java

@@ -36,9 +36,9 @@ public interface PayOrderService extends IService<PayOrderEntity> {
      * @param studentNo 学号
      * @return
      */
-    boolean isAlreadyPay(String studentNo, String itemName, String payYears, Integer notPaySize);
+    boolean isAlreadyPay(String studentNo, String itemName, String payYears, Integer notPaySize, String payMethod, String payDetail);
 
-    CreateOrderResultVO createOrder(String cardNumber, PayOrderReceiveVO payOrderReceiveVO);
+    List<CreateOrderResultVO> createOrder(String cardNumber, PayOrderReceiveVO payOrderReceiveVO);
     List<OrderReceiveTO> receiveOrder(String cardNumber, PayOrderReceiveVO payOrderReceiveVO);
 
     PayOrderEntity getByOrderNo(String orderNo);
@@ -57,6 +57,6 @@ public interface PayOrderService extends IService<PayOrderEntity> {
 
     Integer queryCurrentPayedRecordNum(PayOrderQueryTO queryTO);
 
-    PageUtils queryAllOrderByParent(String orderNo, PageParam pageParam);
+    PageUtils queryAllOrder(String cardNumber, PageParam pageParam, String status, String itemName, String payYear);
 }
 

+ 2 - 2
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayService.java

@@ -7,7 +7,7 @@ import java.util.Map;
 
 public interface PayService {
 
-    WechatJsApiPayParamVO getCCBJsApiParam(String openId, String orderNo, String secondeOrderNo);
+    WechatJsApiPayParamVO getCCBJsApiParam(String openId, String orderNo, String secondOrderNo);
 
     void ccbNotify(HttpServletRequest request);
 
@@ -17,7 +17,7 @@ public interface PayService {
 
     boolean jxnxsNotify(HttpServletRequest request);
 
-    String jxnxsSuccess(String orderNo);
+    String jxnxsSuccess(String orderNo, String secondOrderNo);
 
     Map<String, String> queryJXNXSOrderStatus(String orderNo);
 }

+ 342 - 261
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayOrderServiceImpl.java

@@ -27,6 +27,7 @@ import com.chuanghai.smartschool.tuitionpayment.vo.OrderStatusVO;
 import com.chuanghai.smartschool.tuitionpayment.vo.PayInfoDetailVO;
 import com.chuanghai.smartschool.tuitionpayment.vo.PayOrderReceiveVO;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -71,9 +72,9 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
     public PageUtils queryPage(PayOrderQueryTO queryTO, PageParam pageParam) {
         QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
         if (StringUtils.hasText(queryTO.getPayStatus())) {
-            if (!(queryTO.getPayStatus().isEmpty()) && !(queryTO.getPayStatus().equals("1")) ) {
-                wrapper.in("status", "2","3");
-            }else {
+            if (!(queryTO.getPayStatus().isEmpty()) && !(queryTO.getPayStatus().equals("1"))) {
+                wrapper.in("status", "2", "3");
+            } else {
                 wrapper.eq("status", "1");
             }
         }
@@ -152,12 +153,14 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
      * @return
      */
     @Override
-    public boolean isAlreadyPay(String studentNo, String itemName, String payYears, Integer notPaySize) {
+    public boolean isAlreadyPay(String studentNo, String itemName, String payYears, Integer notPaySize, String payMethod, String payDetail) {
         QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
         wrapper.eq("pay_for_identify", studentNo);
         wrapper.eq("pay_item", itemName);
         wrapper.eq(StringUtils.hasText(payYears), "pay_year", payYears);
         wrapper.eq("not_pay_size", notPaySize);
+        wrapper.eq("pay_detail", payDetail);
+        wrapper.eq("pay_method", payMethod);
         wrapper.eq("status", PayStatus.ALREADY_PAY.getCode());
 
         List<PayOrderEntity> payList = this.list(wrapper);
@@ -171,69 +174,126 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
 
     /**
      * 收集用户的支付参数信息
+     *
      * @param cardNumber
      * @param payOrderReceiveVO
      * @return
      */
     @Override
-    public List<OrderReceiveTO> receiveOrder(String cardNumber, PayOrderReceiveVO payOrderReceiveVO){
+    public List<OrderReceiveTO> receiveOrder(String cardNumber, PayOrderReceiveVO payOrderReceiveVO) {
+        System.out.println(payOrderReceiveVO);
         List<OrderReceiveTO> orderReceiveTOList = new ArrayList<>();
-        //PayOrderReceiveVO payOrderReceiveVO1 = new PayOrderReceiveVO();
+        PayOrderReceiveVO payOrderReceiveVO1 = new PayOrderReceiveVO();
         //备份支付参数
-       // BeanUtils.copyProperties(payOrderReceiveVO, payOrderReceiveVO1);
+        BeanUtils.copyProperties(payOrderReceiveVO, payOrderReceiveVO1);
         String payDetail = payOrderReceiveVO.getPayDetail();
         String itemName = payOrderReceiveVO.getItemName();
+        String payOrderLoan = payOrderReceiveVO.getPayOrderLoan();
+        payOrderLoan = payOrderLoan.equals("") == true ? "0" : payOrderLoan;
+        //payOrderReceiveVO.setPayOrderLoan(payOrderLoan);
         PayDetailBank payDetailBank = payDetailBankController.queryBank(itemName);
-        //建设银行的支付明细
-        String ccbStr = payDetailBank.getCcbStr();
-        String[] ccbStrArr = ccbStr.split("/");
-        List<String> ccbStrList = new ArrayList<>(Arrays.asList(ccbStrArr));
-        //建行实际支付的明细
-        String ccbRealPayStr = "";
-        //农商银行的支付明细
-        String rcbStr = payDetailBank.getRcbStr();
-        String[] rcbStrArr = rcbStr.split("/");
-        List<String> rcbStrList = new ArrayList<>(Arrays.asList(rcbStrArr));
-        //农商实际支付的明细
-        String rcbRealPayStr = "";
-        //实际收集的订单支付明细
-        String[] payDetailArr = payDetail.split("/");
-        List<String> payDetailList = new ArrayList<>(Arrays.asList(payDetailArr));
-
-        //提取本次缴费中需要交付于建设银行的明细
-
-        List<String> accountIdList = payDetailList.stream().filter(ccbStrList::contains).collect(Collectors.toList());
-
-        for (int i = 0; i< accountIdList.size(); i++){
-            ccbRealPayStr += accountIdList.get(i) +"/";
-        }
-        if (ccbRealPayStr.endsWith("/")) {
-            ccbRealPayStr = ccbRealPayStr.substring(0, ccbRealPayStr.length() - 1);
-        }
-        OrderReceiveTO orderReceiveTOCCB = new OrderReceiveTO();
-        orderReceiveTOCCB.setCardNumber(cardNumber);
-        payOrderReceiveVO.setPayDetail(ccbRealPayStr);
-        orderReceiveTOCCB.setPayOrderReceiveVO(payOrderReceiveVO);
-        orderReceiveTOList.add(orderReceiveTOCCB);
-        //生成农商银行的支付参数
-
-        List<String> payDetailList1 = new ArrayList<>(Arrays.asList(payDetailArr));
-        List<String> accountIdList1 = payDetailList.stream().filter(rcbStrList::contains).collect(Collectors.toList());
-
-        //提取本次缴费中需要交付于建设银行的明细
-        for (int i = 0; i< accountIdList1.size(); i++){
-            rcbRealPayStr += accountIdList1.get(i) +"/";
-        }
-        if (rcbRealPayStr.endsWith("/")) {
-            rcbRealPayStr = rcbRealPayStr.substring(0, rcbRealPayStr.length() - 1);
-        }
-        System.out.println(rcbRealPayStr);
-        OrderReceiveTO orderReceiveTORCB = new OrderReceiveTO();
-        orderReceiveTORCB.setCardNumber(cardNumber);
-        payOrderReceiveVO.setPayDetail(rcbRealPayStr);
-        orderReceiveTORCB.setPayOrderReceiveVO(payOrderReceiveVO);
-        orderReceiveTOList.add(orderReceiveTORCB);
+        if (payDetailBank != null) {
+            //建设银行的支付明细
+            String ccbStr = payDetailBank.getCcbStr();
+            String[] ccbStrArr = ccbStr.split("/");
+            List<String> ccbStrList = new ArrayList<>(Arrays.asList(ccbStrArr));
+            //建行实际支付的明细
+            String ccbRealPayStr = "";
+            //农商银行的支付明细
+            String rcbStr = payDetailBank.getRcbStr();
+            String[] rcbStrArr = rcbStr.split("/");
+            List<String> rcbStrList = new ArrayList<>(Arrays.asList(rcbStrArr));
+            //农商实际支付的明细
+            String rcbRealPayStr = "";
+            //实际收集的订单支付明细
+            String[] payDetailArr = payDetail.split("/");
+            List<String> payDetailList = new ArrayList<>(Arrays.asList(payDetailArr));
+
+            //提取本次缴费中需要交付于建设银行的明细
+
+            List<String> accountIdList = payDetailList.stream().filter(ccbStrList::contains).collect(Collectors.toList());
+
+            for (int i = 0; i < accountIdList.size(); i++) {
+                ccbRealPayStr += accountIdList.get(i) + "/";
+            }
+            if (ccbRealPayStr.endsWith("/")) {
+                ccbRealPayStr = ccbRealPayStr.substring(0, ccbRealPayStr.length() - 1);
+            }
+            OrderReceiveTO orderReceiveTOCCB = new OrderReceiveTO();
+            orderReceiveTOCCB.setCardNumber(cardNumber);
+            payOrderReceiveVO.setPayDetail(ccbRealPayStr);
+            String[] ccbRealPaySplit = ccbRealPayStr.split("/");
+            BigDecimal payAmountCCB = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP);
+            if (!ccbRealPaySplit[0].isEmpty()) {
+                for (int i = 0; i < ccbRealPaySplit.length; i++) {
+                    String[] split = ccbRealPaySplit[i].split(":");
+                    String payAmountStr = ccbRealPaySplit[i].split(":")[1];
+                    payAmountCCB = payAmountCCB.add(new BigDecimal(payAmountStr).setScale(2, BigDecimal.ROUND_HALF_UP));
+                }
+            }
+
+            if (!payOrderReceiveVO.getPayDetail().isEmpty()) {
+                if (!payOrderLoan.isEmpty()) {
+                    payAmountCCB = payAmountCCB.subtract(new BigDecimal(payOrderLoan)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                }
+
+                payOrderReceiveVO.setNowRealPayAmount(payAmountCCB);
+                payOrderReceiveVO.setPayMethod("1");
+                orderReceiveTOCCB.setPayOrderReceiveVO(payOrderReceiveVO);
+                orderReceiveTOList.add(orderReceiveTOCCB);
+            }
+//---------------------------------------------------------------        生成农商银行的支付参数             ---------------------------------------------------
+            String payDetail1 = payOrderReceiveVO1.getPayDetail();
+            String[] payDetailArr1 = payDetail1.split("/");
+            List<String> payDetailList1 = new ArrayList<>(Arrays.asList(payDetailArr1));
+            List<String> accountIdList1 = payDetailList1.stream().filter(rcbStrList::contains).collect(Collectors.toList());
+
+            //提取本次缴费中需要交付于建设银行的明细
+            for (int i = 0; i < accountIdList1.size(); i++) {
+                rcbRealPayStr += accountIdList1.get(i) + "/";
+            }
+            if (rcbRealPayStr.endsWith("/")) {
+                rcbRealPayStr = rcbRealPayStr.substring(0, rcbRealPayStr.length() - 1);
+            }
+            OrderReceiveTO orderReceiveTORCB = new OrderReceiveTO();
+            orderReceiveTORCB.setCardNumber(cardNumber);
+            payOrderReceiveVO1.setPayDetail(rcbRealPayStr);
+            String[] rcbRealPaySplit = rcbRealPayStr.split("/");
+            BigDecimal payAmountRCB = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP);
+            if (!rcbRealPaySplit[0].isEmpty()) {
+                for (int i = 0; i < rcbRealPaySplit.length; i++) {
+                    String payAmountStr = rcbRealPaySplit[i].split(":")[1];
+                    payAmountRCB = payAmountRCB.add(new BigDecimal(payAmountStr).setScale(2, BigDecimal.ROUND_HALF_UP));
+                }
+            }
+
+            if (!payOrderReceiveVO1.getPayDetail().isEmpty()) {
+                payOrderReceiveVO1.setPayOrderLoan("0");
+                payOrderReceiveVO1.setNowRealPayAmount(payAmountRCB);
+                payOrderReceiveVO1.setPayMethod("2");
+                orderReceiveTORCB.setPayOrderReceiveVO(payOrderReceiveVO1);
+                orderReceiveTOList.add(orderReceiveTORCB);
+            }
+        } else {
+            OrderReceiveTO orderReceiveTO = new OrderReceiveTO();
+            //支付方式根据项目的设置交付于规定的项目银行账户
+            String s = payItemController.queryPayItemByName(itemName);
+            if (s.contains("建设银行")) {
+                payOrderReceiveVO.setPayMethod("1");
+            } else if (s.contains("农商银行")) {
+                payOrderReceiveVO.setPayMethod("2");
 
+            }
+            orderReceiveTO.setPayOrderReceiveVO(payOrderReceiveVO);
+            orderReceiveTO.setCardNumber(cardNumber);
+            orderReceiveTOList.add(orderReceiveTO);
+        }
+        System.out.println(orderReceiveTOList);
+//        orderReceiveTOList.forEach(orderList->{
+//            String cardNumber1 = orderList.getCardNumber();
+//            PayOrderReceiveVO payOrderReceiveVO2 = orderList.getPayOrderReceiveVO();
+//            createOrder(cardNumber1, payOrderReceiveVO2);
+//        });
         return orderReceiveTOList;
     }
 
@@ -245,158 +305,178 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
      * @return
      */
     @Override
-    public CreateOrderResultVO createOrder(String cardNumber, PayOrderReceiveVO payOrderReceiveVO) {
-        String studentNo = payOrderReceiveVO.getStudentNo();
-        String drom = payOrderReceiveVO.getDrom();
-        String itemName = payOrderReceiveVO.getItemName();
-        String payDetial = payOrderReceiveVO.getPayDetail();
-        String payYear = payOrderReceiveVO.getPayYear();
-        String orderNotice = payOrderReceiveVO.getOrderNotice();
-        String id = payOrderReceiveVO.getId().toString();
-
-        // 查询用户是否已经缴费
-        boolean alreadyPay = isAlreadyPay(studentNo, itemName, payYear, payOrderReceiveVO.getNotPaySize());
-        if (alreadyPay) {
-            throw new RRException(BizCodeEnume.DATA_IS_EXIST, "学号【" + studentNo + "】已缴费,请勿重复缴费");
-        }
-        PayableInfoEntity payableInfo = null;
-        PayableInfoWaterEntity payableInfoWater = null;
-        String grade = "";
-        if (itemName.equals("水费缴纳")) {
-            payableInfoWater = payableInfoWaterService.getByStudentNo(studentNo, itemName, payYear);
-            // 获取学生入学年份
-            grade = payableInfoWater.getGrade();
-        } else {
-            // 查询支付金额、被支付用户信息
-            payableInfo = payableInfoService.getByStudentNo(studentNo, itemName, payYear);
-            // 获取学生入学年份
-            grade = payableInfo.getGrade();
-        }
-
-        Integer currentGrade = MyUtil.calcStudentGrade(Integer.valueOf(grade.trim()));
-
-        // 判断当前年级是否可线上缴费
-        //  boolean enablePay = Boolean.FALSE;
-        PayItem payItem = payItemController.queryByItemNameSetting(itemName).getData();
-        String itemGrade = payItem.getItemGrade();
-        String gradeStr = "";
-        JSONArray jsonArray = JSONObject.parseArray(itemGrade);
-        for (int i = 0; i < jsonArray.size(); i++) {
-            gradeStr += jsonArray.get(i);
-        }
-        //  boolean enablePay = enablePayLimitByGradeService.getCurrentGradeEnablePay(currentGrade);
-        if (!(gradeStr.contains(String.valueOf(currentGrade)))) {
-            throw new RRException(BizCodeEnume.PAYABLE_INFO_IS_NOT_EXIT, "当前学生所在年级不允许线上缴费");
-        }
-        // 获取当前支付方式
-        String currentPayMethod = payMethodSettingService.getCurrentPayMethod();
+    public List<CreateOrderResultVO> createOrder(String cardNumber, PayOrderReceiveVO payOrderReceiveVO) {
+        List<OrderReceiveTO> orderReceiveTOS = receiveOrder(cardNumber, payOrderReceiveVO);
+        List<CreateOrderResultVO> createOrderResultVOList = new ArrayList<>();
+        //记录遍历的次数
+        for (int m = 0; m < orderReceiveTOS.size(); m++) {
+            OrderReceiveTO orderReceiveTO = orderReceiveTOS.get(m);
+            String cardNumber1 = orderReceiveTO.getCardNumber();
+            PayOrderReceiveVO payOrderReceiveVO1 = orderReceiveTO.getPayOrderReceiveVO();
+            String studentNo = payOrderReceiveVO1.getStudentNo();
+            String drom = payOrderReceiveVO1.getDrom();
+            String itemName = payOrderReceiveVO1.getItemName();
+            String payDetial = payOrderReceiveVO1.getPayDetail();
+            String payYear = payOrderReceiveVO1.getPayYear();
+            String orderNotice = payOrderReceiveVO1.getOrderNotice();
+            String id = payOrderReceiveVO1.getId().toString();
+            String payMethod = payOrderReceiveVO1.getPayMethod();
+            String payOrderLoan = payOrderReceiveVO1.getPayOrderLoan();
+            payOrderLoan = payOrderLoan.equals("") == true ? "0" : payOrderLoan;
+            BigDecimal orderLoan = new BigDecimal(payOrderLoan).setScale(2, BigDecimal.ROUND_HALF_UP);
+            // 查询用户是否已经缴费
+            boolean alreadyPay = isAlreadyPay(studentNo, itemName, payYear, payOrderReceiveVO1.getNotPaySize(), payOrderReceiveVO1.getPayMethod(), payDetial);
+            if (alreadyPay) {
+                throw new RRException(BizCodeEnume.DATA_IS_EXIST, "学号【" + studentNo + "】已缴费,请勿重复缴费");
+            }
+            PayableInfoEntity payableInfo = null;
+            PayableInfoWaterEntity payableInfoWater = null;
+            String grade = "";
+            if (itemName.equals("水费缴纳")) {
+                payableInfoWater = payableInfoWaterService.getByStudentNo(studentNo, itemName, payYear);
+                // 获取学生入学年份
+                grade = payableInfoWater.getGrade();
+            } else {
+                // 查询支付金额、被支付用户信息
+                payableInfo = payableInfoService.getByStudentNo(studentNo, itemName, payYear);
+                // 获取学生入学年份
+                grade = payableInfo.getGrade();
+            }
 
-        QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
-        wrapper.eq("payer_identify", cardNumber);
-        wrapper.eq("pay_for_identify", studentNo);
-        wrapper.eq("pay_item", itemName);
-        wrapper.eq(StringUtils.hasText(payYear), "pay_year", payYear);
-        wrapper.eq("not_pay_size", payOrderReceiveVO.getNotPaySize());
-        wrapper.orderByDesc("create_time");
-        wrapper.last("limit 1");
-        PayOrderEntity payOrderEntity = this.getOne(wrapper);
+            Integer currentGrade = MyUtil.calcStudentGrade(Integer.valueOf(grade.trim()));
 
-        // 订单已经存在超过30分钟没有支付,直接删除该订单
-        if (payOrderEntity != null && PayStatus.NON_PAY.getCode().equals(payOrderEntity.getStatus())) {
-            if (Math.abs(ChronoUnit.MINUTES.between(LocalDateTime.now(), payOrderEntity.getCreateTime())) > 30) {
-                // 再次查询订单状态
-                OrderStatusVO orderStatusVO = queryOrderStatus(payOrderEntity);
-                if (PayStatus.NON_PAY.getCode().equals(orderStatusVO.getStatus())) {
-                    this.removeById(payOrderEntity.getId());
-                    payOrderEntity = null;
+            // 判断当前年级是否可线上缴费
+            //  boolean enablePay = Boolean.FALSE;
+            PayItem payItem = payItemController.queryByItemNameSetting(itemName).getData();
+            String itemGrade = payItem.getItemGrade();
+            String gradeStr = "";
+            JSONArray jsonArray = JSONObject.parseArray(itemGrade);
+            for (int i = 0; i < jsonArray.size(); i++) {
+                gradeStr += jsonArray.get(i);
+            }
+            //  boolean enablePay = enablePayLimitByGradeService.getCurrentGradeEnablePay(currentGrade);
+            if (!(gradeStr.contains(String.valueOf(currentGrade)))) {
+                throw new RRException(BizCodeEnume.PAYABLE_INFO_IS_NOT_EXIT, "当前学生所在年级不允许线上缴费");
+            }
+            // 获取当前支付方式
+            String currentPayMethod = payMethodSettingService.getCurrentPayMethod();
+
+            QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
+            wrapper.eq("payer_identify", cardNumber1);
+            wrapper.eq("pay_for_identify", studentNo);
+            wrapper.eq("pay_item", itemName);
+            wrapper.eq("pay_detail", payDetial);
+            wrapper.in("pay_method", "1", "2");
+            wrapper.eq(StringUtils.hasText(payYear), "pay_year", payYear);
+            wrapper.eq("not_pay_size", payOrderReceiveVO1.getNotPaySize());
+            wrapper.orderByDesc("create_time");
+            wrapper.last("limit 1");
+            PayOrderEntity payOrderEntity = this.getOne(wrapper);
+
+            // 订单已经存在超过30分钟没有支付,直接删除该订单
+            if (payOrderEntity != null && PayStatus.NON_PAY.getCode().equals(payOrderEntity.getStatus())) {
+                if (Math.abs(ChronoUnit.MINUTES.between(LocalDateTime.now(), payOrderEntity.getCreateTime())) > 30) {
+                    // 再次查询订单状态
+                    OrderStatusVO orderStatusVO = queryOrderStatus(payOrderEntity);
+                    if (PayStatus.NON_PAY.getCode().equals(orderStatusVO.getStatus())) {
+                        this.removeById(payOrderEntity.getId());
+                        payOrderEntity = null;
+                    }
                 }
             }
-        }
 
-        CreateOrderResultVO createOrderResultVO = new CreateOrderResultVO();
-        if (payOrderEntity == null) {
-            createOrderResultVO.setMsg("新创建订单");
-            payOrderEntity = new PayOrderEntity();
-            //判断该订单是否为多次支付
-            PayInfoDetailVO payInfoDetailVO = new PayInfoDetailVO();
-            int count = Integer.parseInt(payOrderReceiveVO.getPayCount());
-            if (count == 1) {
-                payOrderEntity.setIsParent(Boolean.TRUE);
-                // payInfoDetailVO =  payableInfoController.queryPayDetail(id, itemName, payOrderReceiveVO.getPayDetail());
-            }
-            payInfoDetailVO = (PayInfoDetailVO) payableInfoController.queryPayInfoDetail(id, itemName, payOrderReceiveVO.getPayDetail()).getData();
-            payOrderEntity.setNotPayDetail(payInfoDetailVO.getNotPayDetail());
-
-            payOrderEntity.setOrderNo(generateOrderNo());
-            payOrderEntity.setPayerIdentify(cardNumber);
-            payOrderEntity.setPayForIdentify(studentNo);
-            payOrderEntity.setStatus(PayStatus.NON_PAY.getCode());
-            payOrderEntity.setPayMethod(currentPayMethod);
-            payOrderEntity.setCreateTime(LocalDateTime.now());
-            payOrderEntity.setNotPaySize(payOrderReceiveVO.getNotPaySize());
-            payOrderEntity.setPayItem(itemName);
-            payOrderEntity.setPayYear(payYear);
-            payOrderEntity.setPayDetail(payDetial);
-
-            payOrderEntity.setOrderNotice(orderNotice);
-            payOrderEntity.setExceptType("1");
-            payOrderEntity.setPayBank(payItemController.queryPayItemByName(itemName));
-            //计算助学贷款相关的费用
-            String payOrderLoan = payOrderReceiveVO.getPayOrderLoan();
-            payOrderLoan = payOrderLoan.equals("") ? "0": payOrderLoan;
-            BigDecimal orderLoan = BigDecimal.ZERO;
+            CreateOrderResultVO createOrderResultVO = new CreateOrderResultVO();
+            if (payOrderEntity == null) {
+                createOrderResultVO.setMsg("新创建订单");
+                payOrderEntity = new PayOrderEntity();
+                //判断该订单是否为多次支付
+                PayInfoDetailVO payInfoDetailVO = new PayInfoDetailVO();
+                int count = Integer.parseInt(payOrderReceiveVO1.getPayCount());
+                if (count == 1) {
+                    payOrderEntity.setIsParent(Boolean.TRUE);
+                    // payInfoDetailVO =  payableInfoController.queryPayDetail(id, itemName, payOrderReceiveVO.getPayDetail());
+                }
+                payInfoDetailVO = (PayInfoDetailVO) payableInfoController.queryPayInfoDetail(id, itemName, payOrderReceiveVO1.getPayDetail()).getData();
+                payOrderEntity.setNotPayDetail(payInfoDetailVO.getNotPayDetail());
+
+                payOrderEntity.setOrderNo(generateOrderNo());
+                payOrderEntity.setPayerIdentify(cardNumber1);
+                payOrderEntity.setPayForIdentify(studentNo);
+                payOrderEntity.setStatus(PayStatus.NON_PAY.getCode());
+                payOrderEntity.setPayMethod(currentPayMethod);
+                payOrderEntity.setCreateTime(LocalDateTime.now());
+                payOrderEntity.setNotPaySize(payOrderReceiveVO1.getNotPaySize());
+                payOrderEntity.setPayItem(itemName);
+                payOrderEntity.setPayYear(payYear);
+                payOrderEntity.setPayDetail(payDetial);
+
+                payOrderEntity.setOrderNotice(orderNotice);
+                payOrderEntity.setExceptType("1");
+                payOrderEntity.setPayBank(payItemController.queryPayItemByName(itemName));
+                //计算助学贷款相关的费用  第一次缴费使用助学贷款
+//                String payOrderLoan = "0";
+//                if (m == 0) {
+//                    payOrderLoan = payOrderReceiveVO1.getPayOrderLoan();
+//                }
+//                payOrderLoan = payOrderLoan.equals("") ? "0" : payOrderLoan;
+// ---               BigDecimal orderLoan = BigDecimal.ZERO;
+
+
 //            if (StringUtils.hasText(payOrderLoan)) {
 //                orderLoan = orderLoan.add(new BigDecimal(payOrderLoan)).setScale(2,BigDecimal.ROUND_HALF_UP);
 //            }
-            if (StringUtils.hasText(payOrderLoan)) {
-                orderLoan = orderLoan.add(new BigDecimal(payOrderLoan)).setScale(2, BigDecimal.ROUND_UP);
-            }
-            payOrderEntity.setPayOrderLoan(orderLoan);
-
 
-            // 支付金额、被支付用户信息
-            if (itemName.equals("水费缴纳")) {
-                //更新对应项目的缴费参数
-                payOrderEntity.setDrom(drom.isEmpty() ? "" : drom);
-                payOrderEntity.setRealPayAmount(payableInfoWater.getRealPayAmount());
-                //payOrderEntity.setNowPayAmount(payableInfoWater.getRealPayAmount());
-                payOrderEntity.setStudentName(payableInfoWater.getStudentName());
-                payOrderEntity.setClassName(payableInfoWater.getClassName());
-            } else {
-                payOrderEntity.setRealPayAmount(payableInfo.getRealPayAmount());
-               // payOrderEntity.setNowPayAmount(payInfoDetailVO.getPayDetailAmount());
-                payOrderEntity.setStudentName(payableInfo.getStudentName());
-                payOrderEntity.setClassName(payableInfo.getClassName());
-                //更新缴费名单的缴费明细
-                if (StringUtils.hasText(payableInfo.getPayDetail())) {
-                    payableInfo.setPayDetail(payableInfo.getPayDetail() + "/" + payDetial);
+//                if (StringUtils.hasText(payOrderLoan)) {
+//                    orderLoan = orderLoan.add(new BigDecimal(payOrderLoan)).setScale(2, BigDecimal.ROUND_UP);
+//                }
+                payOrderEntity.setPayOrderLoan(orderLoan);
+                payOrderEntity.setPayMethod(payOrderReceiveVO1.getPayMethod());
+
+
+                // 支付金额、被支付用户信息
+                if (itemName.equals("水费缴纳")) {
+                    //更新对应项目的缴费参数
+                    payOrderEntity.setDrom(drom.isEmpty() ? "" : drom);
+                    payOrderEntity.setRealPayAmount(payableInfoWater.getRealPayAmount());
+                    //payOrderEntity.setNowPayAmount(payableInfoWater.getRealPayAmount());
+                    payOrderEntity.setStudentName(payableInfoWater.getStudentName());
+                    payOrderEntity.setClassName(payableInfoWater.getClassName());
                 } else {
-                    payableInfo.setPayDetail(payDetial);
-                }
-                payableInfo.setNotPayDetail(payOrderEntity.getNotPayDetail());
-                payableInfo.setNotPaySize(payOrderReceiveVO.getNotPaySize());
-                //  payableInfoService.updateById(payableInfo);
+                    payOrderEntity.setRealPayAmount(payableInfo.getRealPayAmount());
+                    // payOrderEntity.setNowPayAmount(payInfoDetailVO.getPayDetailAmount());
+                    payOrderEntity.setStudentName(payableInfo.getStudentName());
+                    payOrderEntity.setClassName(payableInfo.getClassName());
+                    //更新缴费名单的缴费明细
+                    if (StringUtils.hasText(payableInfo.getPayDetail())) {
+                        payableInfo.setPayDetail(payableInfo.getPayDetail() + "/" + payDetial);
+                    } else {
+                        payableInfo.setPayDetail(payDetial);
+                    }
+                    payableInfo.setNotPayDetail(payOrderEntity.getNotPayDetail());
+                    payableInfo.setNotPaySize(payOrderReceiveVO1.getNotPaySize());
+                    //  payableInfoService.updateById(payableInfo);
 
-            }
-            BigDecimal parentNowPayDetailAmount = BigDecimal.ZERO;
-            BigDecimal  parentOrderLone =  BigDecimal.ZERO;
-            if (count > 1) {
-                QueryWrapper<PayOrderEntity> wrapper1 = new QueryWrapper<>();
-                wrapper1.eq("payer_identify", cardNumber);
-                wrapper1.eq("pay_for_identify", studentNo);
-                wrapper1.eq("pay_item", itemName);
-                wrapper1.eq(StringUtils.hasText(payYear), "pay_year", payYear);
-                wrapper1.eq("status", "3");
+                }
+                BigDecimal parentNowPayDetailAmount = BigDecimal.ZERO;
+                BigDecimal parentOrderLone = BigDecimal.ZERO;
+                if (count > 1) {
+                    QueryWrapper<PayOrderEntity> wrapper1 = new QueryWrapper<>();
+                    wrapper1.eq("payer_identify", cardNumber1);
+                    wrapper1.eq("pay_for_identify", studentNo);
+                    wrapper1.eq("pay_item", itemName);
+                    wrapper1.eq("is_parent", "1");
+                    wrapper1.eq(StringUtils.hasText(payYear), "pay_year", payYear);
+                    wrapper1.in("status", "2", "3");
 //                wrapper1.orderByAsc("create_time");
 //                wrapper1.last("limit 1");
-                PayOrderEntity one = this.getOne(wrapper1);
-                if (one != null) {
+                    List<PayOrderEntity> payOrderList = this.list(wrapper1);
 
-                    List<PayOrderEntity> payOrderList = queryAllOrderByParent(one.getOrderNo(), new PageParam()).getList();
-                    for (int i = 0; i< payOrderList.size(); i++) {
+                    // List<PayOrderEntity> payOrderList = queryAllOrderByParent(one.getOrderNo(), new PageParam()).getList();
+                    System.out.println(payInfoDetailVO);
+                    for (int i = 0; i < payOrderList.size(); i++) {
 //                        System.out.println(payOrderList.get(i));
-                       // parentOrderLone  = parentOrderLone.add(payOrderList.get(i).getPayOrderLoan()).setScale(2,BigDecimal.ROUND_HALF_UP);
-                        parentNowPayDetailAmount = parentNowPayDetailAmount.add(payOrderList.get(i).getNowPayAmount()).setScale(2,BigDecimal.ROUND_HALF_UP);
+                        parentOrderLone = parentOrderLone.add(payOrderList.get(i).getPayOrderLoan()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        parentNowPayDetailAmount = parentNowPayDetailAmount.add(payOrderList.get(i).getNowPayAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
                     }
 
 //                    System.out.println(parentOrderLone);
@@ -405,49 +485,60 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
 //                    System.out.println(payInfoDetailVO+"------------1111111111111111111111");
                     BigDecimal notPayDetailAmount = payInfoDetailVO.getNotPayDetailAmount();
                     // parentOrderLone = one.getPayOrderLoan().setScale(2, BigDecimal.ROUND_HALF_UP);
-                    payOrderEntity.setParentOrder(one.getOrderNo());
-                   // parentNowPayDetailAmount = (parentNowPayDetailAmount.add(one.getNowPayAmount())).setScale(2, BigDecimal.ROUND_HALF_UP);
-                  //  System.out.println(payOrderEntity.getRealPayAmount()+ " --- "+parentNowPayDetailAmount +"     "+notPayDetailAmount);
-                    payOrderEntity.setNowPayAmount(payOrderEntity.getRealPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP).subtract(parentNowPayDetailAmount).setScale(2, BigDecimal.ROUND_HALF_UP)
-                        .subtract(notPayDetailAmount));
+                    //     payOrderEntity.setParentOrder(one.getOrderNo());
+                    // parentNowPayDetailAmount = (parentNowPayDetailAmount.add(one.getNowPayAmount())).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    //  System.out.println(payOrderEntity.getRealPayAmount()+ " --- "+parentNowPayDetailAmount +"     "+notPayDetailAmount);
+                    payOrderEntity.setNowPayAmount(
+                            payOrderEntity.getRealPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP)
+                                    .subtract(parentNowPayDetailAmount).setScale(2, BigDecimal.ROUND_HALF_UP)
+                                    .subtract(notPayDetailAmount)
+                                    .subtract(parentOrderLone)
+                            //.subtract(payInfoDetailVO.getPayDetailAmount())
+                    );
+                } else {
+                    // payOrderEntity.setNowPayAmount(payInfoDetailVO.getPayDetailAmount().subtract(payOrderEntity.getPayOrderLoan().setScale(2, BigDecimal.ROUND_HALF_UP)));
+                    payOrderEntity.setNowPayAmount(payInfoDetailVO.getPayDetailAmount().setScale(2, BigDecimal.ROUND_HALF_UP).subtract(orderLoan));
                 }
-
-            }else{
-                payOrderEntity.setNowPayAmount(payInfoDetailVO.getPayDetailAmount().subtract(payOrderEntity.getPayOrderLoan().setScale(2,BigDecimal.ROUND_HALF_UP)));
-            }
-          //  System.out.println(payOrderEntity.getNowPayAmount()+"     sjdhfuhsbdf getNowPayAmount");
-            //校验订单的支付金额是否异常
-            Boolean flag = Boolean.TRUE;
-            //前端实付金额
-            BigDecimal realPayAmount = payOrderReceiveVO.getNowRealPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP);
-
-            // payInfoDetailVO.setPayDetailAmount(payOrderEntity.getNowPayAmount());
-            if (itemName.equals("水费缴纳")) {
-                flag = payOrderEntity.getNowPayAmount().compareTo(payableInfoWater.getRealPayAmount()) == 0? Boolean.TRUE : Boolean.FALSE;
-            } else {
-              //  System.out.println(payOrderReceiveVO);
-              //  System.out.println(payInfoDetailVO);
-              //  System.out.println(payOrderEntity);
-              //  System.out.println(payOrderEntity.getPayOrderLoan()+"       getPayOrderLoan");
-                BigDecimal aBoolean = payOrderEntity.getNowPayAmount().add(payOrderEntity.getPayOrderLoan()).add(payInfoDetailVO.getNotPayDetailAmount());
-
-                BigDecimal bBoolean = (payableInfo.getRealPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP)).subtract(parentOrderLone).subtract(parentNowPayDetailAmount);
-                flag = aBoolean.compareTo(bBoolean) == 0 ? Boolean.TRUE : Boolean.FALSE;
-                //i = payOrderEntity.getNowPayAmount().add(payOrderEntity.getPayOrderLoan()).compareTo(payableInfo.getRealPayAmount());
+                //  System.out.println(payOrderEntity.getNowPayAmount()+"     sjdhfuhsbdf getNowPayAmount");
+                //校验订单的支付金额是否异常
+                Boolean flag = Boolean.TRUE;
+                //前端实付金额
+                BigDecimal realPayAmount = payOrderReceiveVO1.getNowRealPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP);
+
+                // payInfoDetailVO.setPayDetailAmount(payOrderEntity.getNowPayAmount());
+                if (itemName.equals("水费缴纳")) {
+                    flag = payOrderEntity.getNowPayAmount().compareTo(payableInfoWater.getRealPayAmount()) == 0 ? Boolean.TRUE : Boolean.FALSE;
+                } else {
+                    //  System.out.println(payOrderReceiveVO);
+                    System.out.println(payInfoDetailVO);
+                    //  System.out.println(payOrderEntity);
+                    //  System.out.println(payOrderEntity.getPayOrderLoan()+"       getPayOrderLoan");
+                    //   BigDecimal aBoolean = payOrderEntity.getNowPayAmount().add(payOrderEntity.getPayOrderLoan()).add(payInfoDetailVO.getNotPayDetailAmount());
+                    System.out.println(payOrderEntity.getNowPayAmount());
+                    System.out.println(payInfoDetailVO.getNotPayDetailAmount());
+                    orderLoan = orderLoan.add(parentOrderLone);
+                    BigDecimal nowPayAllMount = payOrderEntity.getNowPayAmount().add(payInfoDetailVO.getNotPayDetailAmount()).add(parentNowPayDetailAmount).add(orderLoan);
+
+                    //  BigDecimal bBoolean = (payableInfo.getRealPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP)).subtract(parentOrderLone).subtract(parentNowPayDetailAmount);
+                    //  BigDecimal bBoolean = (payableInfo.getRealPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP)).subtract(parentOrderLone).subtract(parentNowPayDetailAmount);
+                    BigDecimal realAmount = (payableInfo.getRealPayAmount().setScale(2, BigDecimal.ROUND_HALF_UP));
+                    flag = nowPayAllMount.compareTo(realAmount) == 0 ? Boolean.TRUE : Boolean.FALSE;
+                    //i = payOrderEntity.getNowPayAmount().add(payOrderEntity.getPayOrderLoan()).compareTo(payableInfo.getRealPayAmount());
 //                System.out.println(payOrderEntity.getNowPayAmount()+"  payOrderEntity");
-//                System.out.println(aBoolean+"---------- "+bBoolean);
+                    System.out.println(nowPayAllMount + "---------- " + realAmount);
 //                System.out.println(2+"      "+flag);
+                    System.out.println(2 + "      " + flag);
+                }
+                System.out.println(realPayAmount);
+                System.out.println(payOrderEntity.getNowPayAmount());
 
-            }
-//            System.out.println(realPayAmount);
-//            System.out.println(payOrderEntity.getNowPayAmount());
-            if (!(realPayAmount.compareTo(payOrderEntity.getNowPayAmount()) == 0)) {
-                flag = Boolean.FALSE;
-                System.out.println(3+"      "+flag);
-            }
-            if (!flag) {
-                throw new RRException(BizCodeEnume.PAY_AMOUNT_ERROR, "支付金额异常。");
-            }
+                if (!(realPayAmount.compareTo(payOrderEntity.getNowPayAmount()) == 0)) {
+                    flag = Boolean.FALSE;
+                    System.out.println(3 + "      " + flag);
+                }
+                if (!flag) {
+                    throw new RRException(BizCodeEnume.PAY_AMOUNT_ERROR, "支付金额异常。");
+                }
 
           /*  首次订单支付成功之后如果还有未支付的 状态为 3 无未支付的状态为 2
               当所有未支付的明细完成缴费之后 首单状态变为 2 状态:支付成功且完成所有缴费
@@ -455,22 +546,24 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
               检测该订单是否异常,订单异常自动发送 订单异常微校通知
               wechatController.sendException(itemName);
           */
-
-            this.save(payOrderEntity);
+                this.save(payOrderEntity);
 
 
-        } else {
-            if (!payOrderEntity.getPayMethod().equals(currentPayMethod)) {
-                payOrderEntity.setPayMethod(currentPayMethod);
-                this.updateById(payOrderEntity);
+            } else {
+//                if (!payOrderEntity.getPayMethod().equals(currentPayMethod)) {
+//                    payOrderEntity.setPayMethod(currentPayMethod);
+//                    this.updateById(payOrderEntity);
+//                }
+                createOrderResultVO.setMsg("订单早已创建");
             }
-            createOrderResultVO.setMsg("订单早已创建");
+            createOrderResultVO.setAmount(payOrderEntity.getNowPayAmount());
+            createOrderResultVO.setOrderNo(payOrderEntity.getOrderNo());
+            createOrderResultVO.setPayMethod(payOrderEntity.getPayMethod());
+            createOrderResultVOList.add(createOrderResultVO);
         }
 
-        createOrderResultVO.setAmount(payOrderEntity.getRealPayAmount());
-        createOrderResultVO.setOrderNo(payOrderEntity.getOrderNo());
-        createOrderResultVO.setPayMethod(payOrderEntity.getPayMethod());
-        return createOrderResultVO;
+
+        return createOrderResultVOList;
     }
 
     /**
@@ -746,31 +839,19 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
         }
     }
 
-    public PageUtils queryAllOrderByParent(String orderNo, PageParam pageParam) {
+    public PageUtils queryAllOrder(String cardNumber, PageParam pageParam, String status, String itemName, String payYear) {
         QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
-        wrapper.eq("parent_order", orderNo)
-                .eq("status", "2")
-                .or()
-                .eq("order_no", orderNo)
-                .in("status","2","3");
+        wrapper.eq("pay_for_identify", cardNumber)
+                .eq("status", status)
+                .eq(StringUtils.hasText(itemName),"pay_item", itemName)
+                .eq(StringUtils.hasText(payYear),"pay_year", payYear);
+
 
         IPage<PayOrderEntity> page = this.page(
                 new MyQuery<PayOrderEntity>().getPage(pageParam),
                 wrapper
         );
         List<PayOrderEntity> records = page.getRecords();
-        records.forEach(order -> {
-            BigDecimal nowPayAmount = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP);
-            String payDetail = order.getPayDetail();
-            if (StringUtils.hasText(payDetail)) {
-                String[] split = payDetail.split("/");
-                for (int i = 0; i < split.length; i++) {
-                    nowPayAmount = nowPayAmount.add(new BigDecimal(split[i].split(":")[1]).setScale(2, BigDecimal.ROUND_HALF_UP));
-                }
-            }
-
-            order.setNowPayAmount(nowPayAmount);
-        });
         page.setRecords(records);
         return new PageUtils(page);
     }

+ 22 - 73
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayServiceImpl.java

@@ -75,20 +75,20 @@ public class PayServiceImpl implements PayService {
      * 【建行】获取微信jsapi支付的参数
      * @param openId
      * @param orderNo
-     * @param  secondeOrderNo   携带第二次支付的订单号 将其置于备注 REMARK1 中
+     * @param  secondOrderNo   携带第二次支付的订单号 将其置于备注 REMARK1 中
      * @return
      */
     @Override
-    public WechatJsApiPayParamVO getCCBJsApiParam(String openId, String orderNo, String secondeOrderNo) {
+    public WechatJsApiPayParamVO getCCBJsApiParam(String openId, String orderNo, String secondOrderNo) {
         // 查询订单
         PayOrderEntity payOrder = payOrderService.getByOrderNo(orderNo);
-
+        secondOrderNo = secondOrderNo.equals("") == true ? "1": secondOrderNo;
         if (!PayMethod.CCB_PAY.getCode().equals(payOrder.getPayMethod())) {
             throw new RRException(BizCodeEnume.NOT_CCB_PAY_ORDER);
         }
 
         // 查询用户是否已缴费
-        boolean alreadyPay = payOrderService.isAlreadyPay(payOrder.getPayForIdentify(),payOrder.getPayItem(),payOrder.getPayYear(),payOrder.getNotPaySize());
+        boolean alreadyPay = payOrderService.isAlreadyPay(payOrder.getPayForIdentify(),payOrder.getPayItem(),payOrder.getPayYear(),payOrder.getNotPaySize(), payOrder.getPayMethod(),payOrder.getPayDetail());
         if (alreadyPay) {
             throw new RRException(BizCodeEnume.DATA_IS_EXIST, "学号【" + payOrder.getPayForIdentify() + "】已缴费,请勿重复缴费");
         }
@@ -102,7 +102,7 @@ public class PayServiceImpl implements PayService {
         param.put("PAYMENT", payOrder.getNowPayAmount().setScale(2, BigDecimal.ROUND_UP).toString()); // 付款金额,元
         param.put("CURCODE", "01"); // 币种,01表示人民币,目前只支持人民币
         param.put("TXCODE", "530590"); // 交易码,默认530590
-        param.put("REMARK1", secondeOrderNo); // 备注1,   secondeOrderNo  携带第二次支付的订单号
+        param.put("REMARK1", secondOrderNo); // 备注1,   secondeOrderNo  携带第二次支付的订单号
         param.put("REMARK2", ""); // 备注2,可不填
         param.put("TYPE", "1"); // 接口类型,1- 防钓鱼接口
         param.put("PUB", ccbPayConfig.getPubShort()); // 公钥后 30 位
@@ -132,11 +132,17 @@ public class PayServiceImpl implements PayService {
             ObjectMapper mapper = new ObjectMapper();
             JsonNode jsonNode = mapper.readTree(object.getBody());
             String payurl = jsonNode.get("PAYURL").asText();
+            String[] splitPayurl = payurl.split("&");
+            for (int i = 0;i < splitPayurl.length; i++) {
+                if (splitPayurl[i].contains("REMARK1")) {
+                    secondOrderNo = splitPayurl[i].split("=")[1];
+                }
+            }
+
             // 第二次请求,返回拉起微信支付的必须参数
             String payParamStr = client.getForObject(payurl, String.class);
 
             Map<String, String> payParam = mapper.readValue(payParamStr, new TypeReference<Map<String, String>>() {});
-
             return WechatJsApiPayParamVO.builder()
                     .appId(payParam.get("appId"))
                     .timeStamp(payParam.get("timeStamp"))
@@ -144,6 +150,7 @@ public class PayServiceImpl implements PayService {
                     .packageStr(payParam.get("package"))
                     .signType(payParam.get("signType"))
                     .paySign(payParam.get("paySign"))
+                    .secondOrderNo(secondOrderNo)
                     .build();
         } catch (Exception e) {
             //订单异常发送异常通知
@@ -188,69 +195,10 @@ public class PayServiceImpl implements PayService {
         boolean verifySigature = CCBRSASig.verifySigature(sign, s, ccbPayConfig.getPub());
         if (verifySigature) { // 验签成功
             if ("Y".equalsIgnoreCase(success)) { // success 返回 Y 代表支付成功
-//                QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
-//                wrapper.eq("order_no",orderNo);
-//                PayOrderEntity one = payOrderService.getOne(wrapper);
-//                String payDetail = "";
-//                if (StringUtils.hasText(one.getPayDetail())) {
-//                    payDetail = one.getPayDetail();
-//                }
-//                String notPayDetail = "";
-//                if (StringUtils.hasText(one.getNotPayDetail())) {
-//                    notPayDetail = one.getNotPayDetail();
-//                }
-//                //  BigDecimal nowPayAmount = one.getNowPayAmount();
-//                //  BigDecimal realPayAmount = one.getRealPayAmount();
-//                Integer notPaySize = one.getNotPaySize();
-//                String payYear = one.getPayYear();
-//                String studentName = one.getStudentName();
-//                String payForIdentify = one.getPayForIdentify();
-//                String payItem = one.getPayItem();
-//                PayableInfoEntity payableInfoEntity = new PayableInfoEntity();
-//                PayableInfoWaterEntity payableInfoWaterEntity = new PayableInfoWaterEntity();
-//                if (!payItem.equals("水费缴纳")) {
-//                    QueryWrapper<PayableInfoEntity> wrapper1 = new QueryWrapper<>();
-//                    wrapper1.eq("student_no", payForIdentify)
-//                            .eq("student_name", studentName)
-//                            .eq("years", payYear);
-//                    PayableInfoEntity pInfo = payableInfoService.getOne(wrapper1);
-//                    String notPayDetail1 = "";
-//                    if (StringUtils.hasText(pInfo.getNotPayDetail())) {
-//                       // notPayDetail1 = pInfo.getNotPayDetail() + "/" + notPayDetail;
-//                        notPayDetail1 = notPayDetail;
-//                    }
-//                    String payDetail1 = "";
-//                    if (StringUtils.hasText(pInfo.getPayDetail())) {
-//                        //payDetail1 = pInfo.getPayDetail() + "/" + payDetail;
-//                        payDetail1 = payDetail;
-//                    }
-//
-////                    notPayDetail1 = notPayDetail1.endsWith("/") == true ? notPayDetail1.substring(0,notPayDetail1.length() -1) :notPayDetail1;
-////                    payDetail1 = payDetail1.endsWith("/") == true ? payDetail1.substring(0,payDetail1.length() -1) :payDetail1;
-//
-//
-//                    PayInfoDetailVO payInfoDetailVO = (PayInfoDetailVO) payableInfoController.queryPayInfoDetail(String.valueOf(pInfo.getId()), pInfo.getPaymentItem(), one.getPayDetail()).getData();
-//
-//                    pInfo.setPayDetail(payDetail);
-//                    pInfo.setNotPayDetail(payInfoDetailVO.getNotPayDetail());
-//                    pInfo.setNotPaySize(notPaySize);
-//                    pInfo.setPayFinishTime(LocalDateTime.now());
-//                    //当所有待缴费明细的数量为0 时表示该订单已经完成缴费
-//                    if (notPaySize == 0) {
-//                        pInfo.setPayItemType("2");
-//                        QueryWrapper<PayOrderEntity> wrapper2 = new QueryWrapper<>();
-//                        wrapper2.eq("order_no", one.getParentOrder());
-//                        PayOrderEntity one1 = payOrderService.getOne(wrapper2);
-//                        one1.setStatus("2");
-//                        payOrderService.updateById(one1);
-//                    }else {
-//                        pInfo.setPayItemType("3");
-//                    }
-//                    payableInfoService.updateById(pInfo);
-//                }
-                payableInfoController.updatePayinfoByOrder(orderNo);
-
                 updateOrderStatus(orderNo, payment);
+
+                payOrderService.queryOrderStatus(orderNo);
+                payableInfoController.updatePayinfoByOrder(orderNo);
             }
         }
     }
@@ -311,8 +259,7 @@ public class PayServiceImpl implements PayService {
 //        for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
 //            System.out.println(entry.getKey() + "==>" + entry.getValue()[0]);
 //        }
-        System.out.println(parameterMap.get("ORDERID")[0]+"                                    "+parameterMap.get("REMARK1")[0]);
-        return wechatConfig.getFontendUrl() + "/#/pages/paySuccess/paySuccess?orderNo=" + parameterMap.get("ORDERID")[0]+"&secondeOrderNo="+parameterMap.get("REMARK1")[0];
+        return wechatConfig.getFontendUrl() + "/#/pages/payState/payState?orderNo=" + parameterMap.get("ORDERID")[0]+"&secondOrderNo="+parameterMap.get("REMARK1")[0];
     }
 
     /**
@@ -368,8 +315,8 @@ public class PayServiceImpl implements PayService {
      * @return
      */
     @Override
-    public String jxnxsSuccess(String orderNo) {
-        return wechatConfig.getFontendUrl() + "/#/pages/paySuccess/paySuccess?orderNo=" + orderNo;
+    public String jxnxsSuccess(String orderNo, String secondOrderNo) {
+        return wechatConfig.getFontendUrl() + "/#/pages/paySuccess/paySuccess?orderNo=" + orderNo+"&secondOrderNo="+secondOrderNo;
     }
 
     /**
@@ -470,12 +417,14 @@ public class PayServiceImpl implements PayService {
     private void updateOrderStatus(String orderNo, String realPayAmount) {
         // 查询订单 TODO
         PayOrderEntity payOrder = payOrderService.getByOrderNo(orderNo);
-        if (!PayStatus.NON_PAY.getCode().equals(payOrder.getStatus())) {
+        if (PayStatus.NON_PAY.getCode().equals(payOrder.getStatus())) {
             if (Math.abs(payOrder.getNowPayAmount().subtract(new BigDecimal(realPayAmount)).doubleValue()) < 0.01) {
+
                 // 订单最终支付金额验证成功
                 payOrder.setFinishTime(LocalDateTime.now());
                 //payOrder.setStatus(PayStatus.ALREADY_PAY.getCode());
                 payOrderService.updateById(payOrder);
+                System.out.println("updateOrderStatusupdateOrderStatusupdateOrderStatusupdateOrderStatusupdateOrderStatusupdateOrderStatus");
             }
         }
     }

+ 2 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/utils/MyUtil.java

@@ -59,6 +59,8 @@ public class MyUtil {
         LocalDateTime localDateTime = new MyUtil().changeTime("20220708091308");
 
 
+
+
     }
 
 

+ 21 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/vo/OrderViewVO.java

@@ -0,0 +1,21 @@
+package com.chuanghai.smartschool.tuitionpayment.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/13 星期三 16:50
+ * @Description: com.chuanghai.smartschool.tuitionpayment.vo
+ * @Version: 1.0
+ */
+@Data
+public class OrderViewVO {
+    private String orderNo;
+    private String payDetail;
+    private BigDecimal payDetailAmount;
+    private String payMethod;
+    private String itemName;
+    private String status;
+}

+ 4 - 4
src/main/java/com/chuanghai/smartschool/tuitionpayment/vo/PayOrderReceiveVO.java

@@ -1,8 +1,6 @@
 package com.chuanghai.smartschool.tuitionpayment.vo;
 
 import lombok.Data;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.math.BigDecimal;
 
@@ -67,6 +65,8 @@ public class PayOrderReceiveVO {
      */
     private BigDecimal nowRealPayAmount;
 
-
-
+    /**
+     * 支付方式  1 建设银行   2 农商银行
+     */
+    private String payMethod;
 }

+ 4 - 2
src/main/java/com/chuanghai/smartschool/tuitionpayment/vo/WechatJsApiPayParamVO.java

@@ -1,10 +1,8 @@
 package com.chuanghai.smartschool.tuitionpayment.vo;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import lombok.Builder;
 import lombok.Data;
-import lombok.ToString;
 
 /**
  * @Author: codingliang
@@ -41,4 +39,8 @@ public class WechatJsApiPayParamVO {
      * 签名
      */
     private String paySign;
+    /**
+     * 备注1 记录第二个订单的订单号
+     */
+    private String secondOrderNo;
 }

+ 1 - 1
src/main/resources/application.yml

@@ -19,7 +19,7 @@ mybatis-plus:
       id-type: auto
 
 # 前端应用地址
-fontendUrl: http://192.168.31.111:8080/jiaofei/jiaofeiH5
+fontendUrl: http://192.168.161.182:8080
 
 # 微校相关配置
 weixiao: