Bladeren bron

1、修改缴费项目设置
2、修改二次缴费逻辑

Bingo 4 jaren geleden
bovenliggende
commit
dca6ead164
17 gewijzigde bestanden met toevoegingen van 396 en 70 verwijderingen
  1. 2 1
      src/main/java/com/chuanghai/smartschool/tuitionpayment/common/exception/BizCodeEnume.java
  2. 4 2
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayController.java
  3. 85 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayDetailBankController.java
  4. 18 5
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayOrderController.java
  5. 62 23
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayableInfoController.java
  6. 15 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/dao/PayDetailBankDao.java
  7. 29 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayDetailBank.java
  8. 13 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayDetailBankService.java
  9. 3 1
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayOrderService.java
  10. 1 1
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayService.java
  11. 17 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayDetailBankServiceImpl.java
  12. 98 24
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayOrderServiceImpl.java
  13. 7 6
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayServiceImpl.java
  14. 22 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/to/OrderReceiveTO.java
  15. 3 3
      src/main/java/com/chuanghai/smartschool/tuitionpayment/utils/MyUtil.java
  16. 1 4
      src/main/java/com/chuanghai/smartschool/tuitionpayment/vo/PayableInfoWaterListVO.java
  17. 16 0
      src/main/resources/mapper/tuitionpayment/PayDetailBankDao.xml

+ 2 - 1
src/main/java/com/chuanghai/smartschool/tuitionpayment/common/exception/BizCodeEnume.java

@@ -38,7 +38,8 @@ public enum BizCodeEnume {
     FILE_IMPORT_ERROR(10020, "文件导入失败"),
     BATCH_EXECUTOR_ERROR(10100, "批量操作数据库失败"),
     PAY_AMOUNT_ERROR(10021,"付款金额错误"),
-    PAY_ITEM_EXIST(10022,"缴费项目已存在");
+    PAY_ITEM_EXIST(10022,"缴费项目已存在"),
+    ID_IS_NULL(1023,"id为null");
 
     private int code;
     private String msg;

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

@@ -32,6 +32,7 @@ public class PayController {
  //    * @param cardNumber 当前登录用户标识
      * @param orderNo 订单号
      * @param openId 支付者唯一标识
+     * @param secondeOrderNo  携带第二次支付的订单号
      * @return
      * @throws Exception
      */
@@ -39,8 +40,9 @@ public class PayController {
     @GetMapping("ccb/getJsApiParam")
     public CommonResult<WechatJsApiPayParamVO> getCCBJsApiParam( @RequestHeader("card_number")String cardNumber,
                                                              @RequestParam String orderNo,
-                                                             @RequestParam String openId) {
-        WechatJsApiPayParamVO jsApiPayParam = payService.getCCBJsApiParam(openId, orderNo);
+                                                             @RequestParam String openId,
+                                                                 String secondeOrderNo) {
+        WechatJsApiPayParamVO jsApiPayParam = payService.getCCBJsApiParam(openId, orderNo,secondeOrderNo);
         return CommonResult.ok().setResult(jsApiPayParam);
     }
 

+ 85 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayDetailBankController.java

@@ -0,0 +1,85 @@
+package com.chuanghai.smartschool.tuitionpayment.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.chuanghai.smartschool.tuitionpayment.common.exception.BizCodeEnume;
+import com.chuanghai.smartschool.tuitionpayment.common.exception.RRException;
+import com.chuanghai.smartschool.tuitionpayment.common.utils.CommonResult;
+import com.chuanghai.smartschool.tuitionpayment.entity.PayDetailBank;
+import com.chuanghai.smartschool.tuitionpayment.service.PayDetailBankService;
+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
+ * @Description: com.chuanghai.smartschool.tuitionpayment.controller
+ * @Version: 1.0
+ */
+@RestController
+@RequestMapping("tuitionpayment/paydetailbank")
+public class PayDetailBankController {
+    @Autowired
+    private PayDetailBankService payDetailBankService;
+
+    /**
+     * 通过缴费项目查询相关银行的缴费明细数组
+     * @param itemName
+     * @return
+     */
+    @GetMapping("queryBank")
+    public CommonResult<PayDetailBank> queryBankDetailByName(@RequestParam("itemName") String itemName){
+        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());
+        return CommonResult.ok().setResult(payDetailBank);
+    }
+
+    public PayDetailBank queryBank(String itemName){
+        QueryWrapper<PayDetailBank> wrapper = new QueryWrapper<>();
+        wrapper.eq("item_name", itemName);
+        PayDetailBank one = payDetailBankService.getOne(wrapper);
+        return one;
+    }
+
+    /**
+     * 更新银行缴费明细数组
+     * @param jsonObject     payDetailBank 的json结构体
+     * @return
+     */
+    @PostMapping("saveOrUpdateBank")
+    public CommonResult<T> updatePayDetailBank(@RequestBody JSONObject jsonObject){
+        PayDetailBank payDetailBank = JSONObject.toJavaObject(jsonObject, PayDetailBank.class);
+        if (payDetailBank.getId() == null) {
+            throw new RRException(BizCodeEnume.ID_IS_NULL, "ID字段为空");
+        }
+        payDetailBankService.saveOrUpdate(payDetailBank);
+        return CommonResult.ok();
+    }
+
+
+}

+ 18 - 5
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayOrderController.java

@@ -14,6 +14,7 @@ import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterEntity;
 import com.chuanghai.smartschool.tuitionpayment.service.PayOrderService;
 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;
@@ -68,6 +69,21 @@ public class PayOrderController {
     }
 
     /**
+     * 用于接收创建支付订单的参数便于后续支付明细分流
+     *
+     * @param cardNumber 当前登录用户cardNumber
+     * @param jsonObject 支付参数的结构体
+     * @return
+     */
+    @PostMapping("/{studentNo}/receiveOrder")
+    public CommonResult<T> receiveOrder(@RequestHeader("card_number") String cardNumber,
+                                        @RequestBody JSONObject jsonObject ){
+        PayOrderReceiveVO payOrderReceiveVO = JSONObject.toJavaObject(jsonObject, PayOrderReceiveVO.class);
+        List<OrderReceiveTO> orderReceiveTOS = payOrderService.receiveOrder(cardNumber, payOrderReceiveVO);
+        return CommonResult.ok().setResult(orderReceiveTOS);
+    }
+
+    /**
      * 订单列表【当前用户】
      *
      * @param cardNumber 当前登录用户cardNumber
@@ -317,14 +333,11 @@ public class PayOrderController {
             }
 
         }
-
-
-
-
         payOrderEntity.setRealPayAmount(payAmount.setScale(2, RoundingMode.HALF_UP));
-
     }
 
+
+
 }
 
 

+ 62 - 23
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayableInfoController.java

@@ -735,19 +735,31 @@ public class PayableInfoController {
      *
      * @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())) {
@@ -766,7 +778,19 @@ public class PayableInfoController {
         BigDecimal payOrderLoan = one.getPayOrderLoan();
         PayableInfoEntity payableInfoEntity = new PayableInfoEntity();
         PayableInfoWaterEntity payableInfoWaterEntity = new PayableInfoWaterEntity();
-        if (!payItem.equals("水费缴纳")) {
+        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)
@@ -774,26 +798,34 @@ public class PayableInfoController {
             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) {
 
-            List<PayOrderEntity> payOrderList = payOrderService.queryAllOrderByParent(one.getOrderNo(), new PageParam()).getList();
-            for (int i = 0; i< payOrderList.size(); i++) {
-                // parentOrderLone  = parentOrderLone.add(payOrderList.get(i).getPayOrderLoan()).setScale(2,BigDecimal.ROUND_HALF_UP);
+                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() + "/";
-                }
-                PayInfoDetailVO payInfoDetailVO =(PayInfoDetailVO) queryPayInfoDetail(String.valueOf(pInfo.getId()), pInfo.getPaymentItem(), payDetail1).getData();
-                System.out.println(payInfoDetailVO);
+                    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 = payOrderLoan.add(payOrderList.get(i).getPayOrderLoan());
-                pInfo.setPayOrderLoan(payOrderLoan);
+                    payOrderLoan = payOrderList.get(i).getPayOrderLoan();
+                    pInfo.setPayOrderLoan(payOrderLoan);
+                }
             }
 //            if (StringUtils.hasText(pInfo.getNotPayDetail())) {
 //                notPayDetail1 += notPayDetail +"/";
@@ -802,34 +834,41 @@ public class PayableInfoController {
 //                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;
+            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 (one1 != null) {
+//            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");
                 }
             }
-            System.out.println(pInfo);
+            pInfo.setPayOrderLoan(parentOrderLone);
             payableInfoService.updateById(pInfo);
         }
     }
 
-    // public CommonResult<T> query
+//    /**
+//     * 根据缴费项目查询所有的缴费明细用于选定明细金额进入的账户(建行/农商)
+//     * @param itemName
+//     * @return
+//     */
+//    @GetMapping("/queryItemDetail")
+//     public CommonResult<T> queryItemDetail(String itemName){
+//        return CommonResult.ok();
+//     }
 }

+ 15 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/dao/PayDetailBankDao.java

@@ -0,0 +1,15 @@
+package com.chuanghai.smartschool.tuitionpayment.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.smartschool.tuitionpayment.entity.PayDetailBank;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author: bingo
+ * @Date: 2022/6/22 星期三 14:29
+ * @Description: 缴费项目
+ * @version: 1.0
+ */
+@Mapper
+public interface PayDetailBankDao extends BaseMapper<PayDetailBank> {
+}

+ 29 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayDetailBank.java

@@ -0,0 +1,29 @@
+package com.chuanghai.smartschool.tuitionpayment.entity;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/11 星期一 20:03
+ * @Description: 用于记录缴费项目中的缴费明细交付于哪个银行
+ * @Version: 1.0
+ */
+@Data
+public class PayDetailBank {
+    /**
+     * ID 编号
+     */
+    private Integer id;
+    /**
+     * 缴费项目
+     */
+    private String itemName;
+    /**
+     * 存储交付于建设银行的缴费明细
+     */
+    private String ccbStr;
+    /**
+     * 存储交付于农商银行的缴费明细
+     */
+    private String rcbStr;
+}

+ 13 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayDetailBankService.java

@@ -0,0 +1,13 @@
+package com.chuanghai.smartschool.tuitionpayment.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.smartschool.tuitionpayment.entity.PayDetailBank;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/11 星期一 20:08
+ * @Description: com.chuanghai.smartschool.tuitionpayment.service
+ * @Version: 1.0
+ */
+public interface PayDetailBankService  extends IService<PayDetailBank> {
+}

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

@@ -1,9 +1,10 @@
 package com.chuanghai.smartschool.tuitionpayment.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.chuanghai.smartschool.tuitionpayment.common.utils.PageUtils;
 import com.chuanghai.smartschool.tuitionpayment.common.utils.PageParam;
+import com.chuanghai.smartschool.tuitionpayment.common.utils.PageUtils;
 import com.chuanghai.smartschool.tuitionpayment.entity.PayOrderEntity;
+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;
@@ -38,6 +39,7 @@ public interface PayOrderService extends IService<PayOrderEntity> {
     boolean isAlreadyPay(String studentNo, String itemName, String payYears, Integer notPaySize);
 
     CreateOrderResultVO createOrder(String cardNumber, PayOrderReceiveVO payOrderReceiveVO);
+    List<OrderReceiveTO> receiveOrder(String cardNumber, PayOrderReceiveVO payOrderReceiveVO);
 
     PayOrderEntity getByOrderNo(String orderNo);
 

+ 1 - 1
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);
+    WechatJsApiPayParamVO getCCBJsApiParam(String openId, String orderNo, String secondeOrderNo);
 
     void ccbNotify(HttpServletRequest request);
 

+ 17 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayDetailBankServiceImpl.java

@@ -0,0 +1,17 @@
+package com.chuanghai.smartschool.tuitionpayment.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chuanghai.smartschool.tuitionpayment.dao.PayDetailBankDao;
+import com.chuanghai.smartschool.tuitionpayment.entity.PayDetailBank;
+import com.chuanghai.smartschool.tuitionpayment.service.PayDetailBankService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/11 星期一 20:10
+ * @Description: com.chuanghai.smartschool.tuitionpayment.service.impl
+ * @Version: 1.0
+ */
+@Service("payDetailBankService")
+public class PayDetailBankServiceImpl extends ServiceImpl<PayDetailBankDao, PayDetailBank> implements PayDetailBankService {
+}

+ 98 - 24
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayOrderServiceImpl.java

@@ -12,18 +12,13 @@ import com.chuanghai.smartschool.tuitionpayment.common.exception.RRException;
 import com.chuanghai.smartschool.tuitionpayment.common.utils.MyQuery;
 import com.chuanghai.smartschool.tuitionpayment.common.utils.PageParam;
 import com.chuanghai.smartschool.tuitionpayment.common.utils.PageUtils;
-import com.chuanghai.smartschool.tuitionpayment.controller.PayItemController;
-import com.chuanghai.smartschool.tuitionpayment.controller.PayItemDetailController;
-import com.chuanghai.smartschool.tuitionpayment.controller.PayableInfoController;
-import com.chuanghai.smartschool.tuitionpayment.controller.WechatController;
+import com.chuanghai.smartschool.tuitionpayment.controller.*;
 import com.chuanghai.smartschool.tuitionpayment.dao.PayOrderDao;
-import com.chuanghai.smartschool.tuitionpayment.entity.PayItem;
-import com.chuanghai.smartschool.tuitionpayment.entity.PayOrderEntity;
-import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoEntity;
-import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterEntity;
+import com.chuanghai.smartschool.tuitionpayment.entity.*;
 import com.chuanghai.smartschool.tuitionpayment.enume.PayMethod;
 import com.chuanghai.smartschool.tuitionpayment.enume.PayStatus;
 import com.chuanghai.smartschool.tuitionpayment.service.*;
+import com.chuanghai.smartschool.tuitionpayment.to.OrderReceiveTO;
 import com.chuanghai.smartschool.tuitionpayment.to.PayOrderQueryTO;
 import com.chuanghai.smartschool.tuitionpayment.utils.MyUtil;
 import com.chuanghai.smartschool.tuitionpayment.utils.OutputTxt;
@@ -42,9 +37,8 @@ import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service("payOrderService")
@@ -70,10 +64,20 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
     private PayItemDetailController payItemDetailController;
     @Autowired
     private PayableInfoController payableInfoController;
+    @Autowired
+    private PayDetailBankController payDetailBankController;
 
     @Override
     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 {
+                wrapper.eq("status", "1");
+            }
+        }
+
 
         commonWrapper(wrapper, queryTO);
 
@@ -166,6 +170,75 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
     }
 
     /**
+     * 收集用户的支付参数信息
+     * @param cardNumber
+     * @param payOrderReceiveVO
+     * @return
+     */
+    @Override
+    public List<OrderReceiveTO> receiveOrder(String cardNumber, PayOrderReceiveVO payOrderReceiveVO){
+        List<OrderReceiveTO> orderReceiveTOList = new ArrayList<>();
+        //PayOrderReceiveVO payOrderReceiveVO1 = new PayOrderReceiveVO();
+        //备份支付参数
+       // BeanUtils.copyProperties(payOrderReceiveVO, payOrderReceiveVO1);
+        String payDetail = payOrderReceiveVO.getPayDetail();
+        String itemName = payOrderReceiveVO.getItemName();
+        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);
+
+        return orderReceiveTOList;
+    }
+
+
+    /**
      * 创建缴费订单
      *
      * @param cardNumber 当前用户
@@ -321,20 +394,20 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
 
                     List<PayOrderEntity> payOrderList = queryAllOrderByParent(one.getOrderNo(), new PageParam()).getList();
                     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);
                         parentNowPayDetailAmount = parentNowPayDetailAmount.add(payOrderList.get(i).getNowPayAmount()).setScale(2,BigDecimal.ROUND_HALF_UP);
                     }
 
-                    System.out.println(parentOrderLone);
-                  //  parentNowPayDetailAmount = parentNowPayDetailAmount.add(parentOrderLone);
-                    System.out.println(parentNowPayDetailAmount);
-                    System.out.println(payInfoDetailVO+"------------1111111111111111111111");
+//                    System.out.println(parentOrderLone);
+//                  //  parentNowPayDetailAmount = parentNowPayDetailAmount.add(parentOrderLone);
+//                    System.out.println(parentNowPayDetailAmount);
+//                    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);
+                  //  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));
                 }
@@ -361,13 +434,13 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
                 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()+"  payOrderEntity");
-                System.out.println(aBoolean+"---------- "+bBoolean);
-                System.out.println(2+"      "+flag);
+//                System.out.println(payOrderEntity.getNowPayAmount()+"  payOrderEntity");
+//                System.out.println(aBoolean+"---------- "+bBoolean);
+//                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);
@@ -624,7 +697,7 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
      * @param queryTO
      */
     private void commonWrapper(QueryWrapper<PayOrderEntity> wrapper, PayOrderQueryTO queryTO) {
-        wrapper.eq(StringUtils.hasText(queryTO.getPayStatus()), "status", queryTO.getPayStatus());
+        //wrapper.eq(StringUtils.hasText(queryTO.getPayStatus()), "status", queryTO.getPayStatus());
         wrapper.eq(StringUtils.hasText(queryTO.getPayMethod()), "pay_method", queryTO.getPayMethod());
         String keyword = queryTO.getKeyword();
         if (StringUtils.hasText(keyword)) {
@@ -678,7 +751,8 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
         wrapper.eq("parent_order", orderNo)
                 .eq("status", "2")
                 .or()
-                .eq("order_no", orderNo);
+                .eq("order_no", orderNo)
+                .in("status","2","3");
 
         IPage<PayOrderEntity> page = this.page(
                 new MyQuery<PayOrderEntity>().getPage(pageParam),

+ 7 - 6
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayServiceImpl.java

@@ -75,10 +75,11 @@ public class PayServiceImpl implements PayService {
      * 【建行】获取微信jsapi支付的参数
      * @param openId
      * @param orderNo
+     * @param  secondeOrderNo   携带第二次支付的订单号 将其置于备注 REMARK1 中
      * @return
      */
     @Override
-    public WechatJsApiPayParamVO getCCBJsApiParam(String openId, String orderNo) {
+    public WechatJsApiPayParamVO getCCBJsApiParam(String openId, String orderNo, String secondeOrderNo) {
         // 查询订单
         PayOrderEntity payOrder = payOrderService.getByOrderNo(orderNo);
 
@@ -101,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", ""); // 备注1,可不填
+        param.put("REMARK1", secondeOrderNo); // 备注1,   secondeOrderNo  携带第二次支付的订单号
         param.put("REMARK2", ""); // 备注2,可不填
         param.put("TYPE", "1"); // 接口类型,1- 防钓鱼接口
         param.put("PUB", ccbPayConfig.getPubShort()); // 公钥后 30 位
@@ -247,7 +248,6 @@ public class PayServiceImpl implements PayService {
 //                    }
 //                    payableInfoService.updateById(pInfo);
 //                }
-
                 payableInfoController.updatePayinfoByOrder(orderNo);
 
                 updateOrderStatus(orderNo, payment);
@@ -311,7 +311,8 @@ public class PayServiceImpl implements PayService {
 //        for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
 //            System.out.println(entry.getKey() + "==>" + entry.getValue()[0]);
 //        }
-        return wechatConfig.getFontendUrl() + "/#/pages/paySuccess/paySuccess?orderNo=" + parameterMap.get("ORDERID")[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];
     }
 
     /**
@@ -469,11 +470,11 @@ 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());
+                //payOrder.setStatus(PayStatus.ALREADY_PAY.getCode());
                 payOrderService.updateById(payOrder);
             }
         }

+ 22 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/to/OrderReceiveTO.java

@@ -0,0 +1,22 @@
+package com.chuanghai.smartschool.tuitionpayment.to;
+
+import com.chuanghai.smartschool.tuitionpayment.vo.PayOrderReceiveVO;
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/12 星期二 15:46
+ * @Description: com.chuanghai.smartschool.tuitionpayment.to
+ * @Version: 1.0
+ */
+@Data
+public class OrderReceiveTO {
+    /**
+     * 用户的cardNumber
+     */
+    private String cardNumber;
+    /**
+     * 订单需要收集的参数
+     */
+    private  PayOrderReceiveVO payOrderReceiveVO;
+}

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

@@ -37,6 +37,7 @@ public class MyUtil {
 
     /**
      * 将建行拼接的时间转换成localDateTime时间
+     *
      * @param orderDate
      * @return
      */
@@ -54,16 +55,15 @@ public class MyUtil {
         LocalDateTime dateTime = LocalDateTime.parse(orderDate, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
         return dateTime;
     }
-
     public static void main(String[] args) {
         LocalDateTime localDateTime = new MyUtil().changeTime("20220708091308");
-        System.out.println(localDateTime);
 
 
     }
 
 
+}
+
 
 
 
-}

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

@@ -1,8 +1,5 @@
 package com.chuanghai.smartschool.tuitionpayment.vo;
 
-import com.alibaba.excel.annotation.ExcelIgnore;
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
@@ -98,7 +95,7 @@ public class PayableInfoWaterListVO {
     /**
      * 备注
      */
-    private String payItemNote;
+    private String orderNotice;
     /**
      * 校区
      */

+ 16 - 0
src/main/resources/mapper/tuitionpayment/PayDetailBankDao.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.chuanghai.smartschool.tuitionpayment.dao.PayDetailBankDao">
+
+    <!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.chuanghai.smartschool.tuitionpayment.entity.PayDetailBank" id="payDetailBank">
+        <result property="id" column="id"/>
+        <result property="itemName" column="item_name"/>
+        <result property="ccbStr" column="ccb_str"/>
+        <result property="rcbStr" column="rcb_str"/>
+
+    </resultMap>
+
+
+</mapper>