Procházet zdrojové kódy

1、修改水费缴纳流程,对接黄家湖水费移动端
2、修改黄家湖水费重复支付的流程

Bingo před 3 roky
rodič
revize
a2801c09ef
60 změnil soubory, kde provedl 2218 přidání a 483 odebrání
  1. 116 0
      pom.xml
  2. 3 1
      src/main/java/com/chuanghai/smartschool/tuitionpayment/common/exception/BizCodeEnume.java
  3. 46 46
      src/main/java/com/chuanghai/smartschool/tuitionpayment/common/exception/RRException.java
  4. 19 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/config/ImgConfig.java
  5. 1 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/config/WechatConfig.java
  6. 1 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/config/WeixiaoConfig.java
  7. 5 1
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/BankController.java
  8. 0 2
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/BankItemDetailController.java
  9. 86 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/DormRoomController.java
  10. 55 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/FeedbackMsgController.java
  11. 79 24
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayController.java
  12. 91 13
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayOrderController.java
  13. 137 95
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayableInfoController.java
  14. 116 30
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayableInfoWaterController.java
  15. 102 6
      src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/WechatController.java
  16. 43 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/conver/aliexcel/PayStatuConverter.java
  17. 15 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/dao/DormBuildDao.java
  18. 15 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/dao/DormFloorDao.java
  19. 15 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/dao/DormRoomDao.java
  20. 3 2
      src/main/java/com/chuanghai/smartschool/tuitionpayment/dao/PayableInfoDao.java
  21. 23 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/DormBuild.java
  22. 32 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/DormFloor.java
  23. 34 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/DormRoom.java
  24. 11 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/FeedbackMsgEntity.java
  25. 6 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayOrderDeleteEntity.java
  26. 6 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayOrderEntity.java
  27. 19 6
      src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayableInfoEntity.java
  28. 58 42
      src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayableInfoWaterDeleteEntity.java
  29. 72 47
      src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayableInfoWaterEntity.java
  30. 5 5
      src/main/java/com/chuanghai/smartschool/tuitionpayment/listener/aliexcel/MyPayableInfoWaterImportListener.java
  31. 21 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/DormBuildService.java
  32. 20 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/DormFloorService.java
  33. 20 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/DormRoomService.java
  34. 11 1
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayOrderService.java
  35. 1 1
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayService.java
  36. 16 5
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayableInfoService.java
  37. 15 1
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayableInfoWaterService.java
  38. 23 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/DormBuildServiceImpl.java
  39. 26 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/DormFloorServiceImpl.java
  40. 29 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/DormRoomServiceImpl.java
  41. 154 31
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayOrderServiceImpl.java
  42. 29 15
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayServiceImpl.java
  43. 38 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayableInfoServiceImpl.java
  44. 152 53
      src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayableInfoWaterServiceImpl.java
  45. 106 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/to/ExcelTO/ComputerExamTo.java
  46. 6 6
      src/main/java/com/chuanghai/smartschool/tuitionpayment/to/ExcelTO/PayOrderStatyTO.java
  47. 39 28
      src/main/java/com/chuanghai/smartschool/tuitionpayment/to/ExcelTO/PayOrderWaterTO.java
  48. 8 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/to/FeedbackMsgCreateTO.java
  49. 9 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/to/PayOrderQueryTO.java
  50. 182 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/utils/RSAUtils.java
  51. 17 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/vo/DormVO.java
  52. 5 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/vo/StudentNoVO.java
  53. 9 0
      src/main/java/com/chuanghai/smartschool/tuitionpayment/vo/WechatJsApiPayParamVO.java
  54. 32 6
      src/main/resources/application.yml
  55. 2 0
      src/main/resources/mapper/tuitionpayment/FeedbackMsgDao.xml
  56. 1 0
      src/main/resources/mapper/tuitionpayment/PayOrderDao.xml
  57. 2 0
      src/main/resources/mapper/tuitionpayment/PayOrderDeleteDao.xml
  58. 4 0
      src/main/resources/mapper/tuitionpayment/PayableInfoDao.xml
  59. 13 7
      src/main/resources/mapper/tuitionpayment/PayableInfoWaterDao.xml
  60. 14 9
      src/main/resources/mapper/tuitionpayment/PayableInfoWaterDeleteDao.xml

+ 116 - 0
pom.xml

@@ -15,6 +15,11 @@
     <description>学费以及杂费缴费项目</description>
     <properties>
         <java.version>1.8</java.version>
+<!--            <slf4j.version>1.7.7</slf4j.version>-->
+<!--            <logback.version>1.2.3</logback.version>-->
+<!--            <log4j.version>1.2.17</log4j.version>-->
+<!--            <log4j2.version>2.3</log4j2.version>-->
+<!--            <jcl.version>1.2</jcl.version>-->
     </properties>
     <dependencies>
         <dependency>
@@ -141,6 +146,117 @@
             <version>1.2.57</version>
         </dependency>
 
+
+
+
+
+
+
+
+<!--&lt;!&ndash;        <dependencies>&ndash;&gt;-->
+<!--            &lt;!&ndash;系统使用log4j2作为系统日志实现 slf4J作为门面 &ndash;&gt;-->
+<!--            <dependency>-->
+<!--                <groupId>org.slf4j</groupId>-->
+<!--                <artifactId>slf4j-api</artifactId>-->
+<!--                <version>${slf4j.version}</version>-->
+<!--            </dependency>-->
+
+<!--            &lt;!&ndash;使用log4j2作为实际的日志实现&ndash;&gt;-->
+<!--            <dependency>-->
+<!--                <groupId>org.apache.logging.log4j</groupId>-->
+<!--                <artifactId>log4j-core</artifactId>-->
+<!--                <version>${log4j2.version}</version>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>org.apache.logging.log4j</groupId>-->
+<!--                <artifactId>log4j-api</artifactId>-->
+<!--                <version>${log4j2.version}</version>-->
+<!--            </dependency>-->
+
+<!--            &lt;!&ndash;将log4j、logback、JCL的jar包设置为provided,不打入包中&ndash;&gt;-->
+<!--            <dependency>-->
+<!--                <groupId>log4j</groupId>-->
+<!--                <artifactId>log4j</artifactId>-->
+<!--                <version>${log4j.version}</version>-->
+<!--                <scope>provided</scope>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>ch.qos.logback</groupId>-->
+<!--                <artifactId>logback-classic</artifactId>-->
+<!--                <version>${logback.version}</version>-->
+<!--                <scope>provided</scope>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>commons-logging</groupId>-->
+<!--                <artifactId>commons-logging</artifactId>-->
+<!--                <version>${jcl.version}</version>-->
+<!--                <scope>provided</scope>-->
+<!--            </dependency>-->
+
+
+<!--            &lt;!&ndash;为防止循环转换,排掉log4j2转slf4j的桥接包&ndash;&gt;-->
+<!--            <dependency>-->
+<!--                <groupId>org.apache.logging.log4j</groupId>-->
+<!--                <artifactId>log4j-to-slf4j</artifactId>-->
+<!--                <version>${log4j2.version}</version>-->
+<!--                <scope>provided</scope>-->
+<!--            </dependency>-->
+
+<!--            &lt;!&ndash;声明log4j、JCL、JUL转slf4j的桥接包,代码中对应日志可以转成SLF4J&ndash;&gt;-->
+<!--            <dependency>-->
+<!--                <groupId>org.slf4j</groupId>-->
+<!--                <artifactId>log4j-over-slf4j</artifactId>-->
+<!--                <version>${slf4j.version}</version>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>org.slf4j</groupId>-->
+<!--                <artifactId>jcl-over-slf4j</artifactId>-->
+<!--                <version>${slf4j.version}</version>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>org.slf4j</groupId>-->
+<!--                <artifactId>jul-to-slf4j</artifactId>-->
+<!--                <version>${slf4j.version}</version>-->
+<!--            </dependency>-->
+
+<!--            &lt;!&ndash;声明slf4j转SLF4J的桥接包&ndash;&gt;-->
+<!--            <dependency>-->
+<!--                <groupId>org.apache.logging.log4j</groupId>-->
+<!--                <artifactId>log4j-slf4j-impl</artifactId>-->
+<!--                <version>${log4j2.version}</version>-->
+<!--            </dependency>-->
+
+<!--            &lt;!&ndash;排掉slf4j转log4j、JCL、JUL转slf4j的桥接包的桥接包,防止日志实现jar包冲突&ndash;&gt;-->
+<!--            <dependency>-->
+<!--                <groupId>org.slf4j</groupId>-->
+<!--                <artifactId>slf4j-log4j12</artifactId>-->
+<!--                <version>${slf4j.version}</version>-->
+<!--                <scope>provided</scope>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>org.slf4j</groupId>-->
+<!--                <artifactId>slf4j-jdk14</artifactId>-->
+<!--                <version>${slf4j.version}</version>-->
+<!--                <scope>provided</scope>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>org.slf4j</groupId>-->
+<!--                <artifactId>slf4j-jcl</artifactId>-->
+<!--                <version>${slf4j.version}</version>-->
+<!--                <scope>provided</scope>-->
+<!--            </dependency>-->
+<!--&lt;!&ndash;        </dependencies>&ndash;&gt;-->
+
+
+
+
+
+
+
+
+
+
+
     </dependencies>
 
     <build>

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

@@ -35,6 +35,7 @@ public enum BizCodeEnume {
     NOT_CCB_PAY_ORDER(10017, "非建行支付订单"),
     JXNXS_ORDER_QUERY_ERROR(10018, "农商行订单状态查询失败"),
     PAY_GRADE_IS_NOT_EXIT(10019, "缴费年级不存在"),
+    PAY_GRADE_IS_NOT_SUPPORT(10030, "当前学生所在年级不允许线上缴费"),
     FILE_IMPORT_ERROR(10020, "文件导入失败"),
     BATCH_EXECUTOR_ERROR(10100, "批量操作数据库失败"),
     PAY_AMOUNT_ERROR(10021,"付款金额错误"),
@@ -46,7 +47,8 @@ public enum BizCodeEnume {
     TOO_LONG(10026,"内容超长"),
     ERROR_DE(10027,"AES加密失败"),
     DORM_EXIST(10028,"宿舍已缴费"),
-    ORDER_IS_PAY(10029,"该订单的部分项目已支付,请前往首页重新支付");
+    ORDER_IS_PAY(10029,"该订单的部分项目已支付,请前往首页重新支付"),
+    ORDER_IS_PAYING(10029,"该订单正在支付,请勿重复支付");
 
     private int code;
     private String msg;

+ 46 - 46
src/main/java/com/chuanghai/smartschool/tuitionpayment/common/exception/RRException.java

@@ -6,60 +6,60 @@ package com.chuanghai.smartschool.tuitionpayment.common.exception;
  * @author Mark sunlightcs@gmail.com
  */
 public class RRException extends RuntimeException {
-	private static final long serialVersionUID = 1L;
-	
+    private static final long serialVersionUID = 1L;
+
     private String msg;
     private int code = 500;
 
     public RRException(String msg) {
-		super(msg);
-		this.msg = msg;
-	}
-	
-	public RRException(String msg, Throwable e) {
-		super(msg, e);
-		this.msg = msg;
-	}
-	
-	public RRException(String msg, int code) {
-		super(msg);
-		this.msg = msg;
-		this.code = code;
-	}
+        super(msg);
+        this.msg = msg;
+    }
+
+    public RRException(String msg, Throwable e) {
+        super(msg, e);
+        this.msg = msg;
+    }
+
+    public RRException(String msg, int code) {
+        super(msg);
+        this.msg = msg;
+        this.code = code;
+    }
+
+    public RRException(BizCodeEnume bizCodeEnume) {
+        super(bizCodeEnume.getMsg());
+        this.msg = bizCodeEnume.getMsg();
+        this.code = bizCodeEnume.getCode();
+    }
+
+    public RRException(BizCodeEnume bizCodeEnume, String msg) {
+        super(bizCodeEnume.getMsg());
+        this.msg = msg;
+        this.code = bizCodeEnume.getCode();
+    }
+
+    public RRException(String msg, int code, Throwable e) {
+        super(msg, e);
+        this.msg = msg;
+        this.code = code;
+    }
 
-	public RRException(BizCodeEnume bizCodeEnume) {
-		super(bizCodeEnume.getMsg());
-		this.msg = bizCodeEnume.getMsg();
-		this.code = bizCodeEnume.getCode();
-	}
+    public String getMsg() {
+        return msg;
+    }
 
-	public RRException(BizCodeEnume bizCodeEnume, String msg) {
-		super(bizCodeEnume.getMsg());
-		this.msg = msg;
-		this.code = bizCodeEnume.getCode();
-	}
-	
-	public RRException(String msg, int code, Throwable e) {
-		super(msg, e);
-		this.msg = msg;
-		this.code = code;
-	}
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
 
-	public String getMsg() {
-		return msg;
-	}
+    public int getCode() {
+        return code;
+    }
 
-	public void setMsg(String msg) {
-		this.msg = msg;
-	}
+    public void setCode(int code) {
+        this.code = code;
+    }
 
-	public int getCode() {
-		return code;
-	}
 
-	public void setCode(int code) {
-		this.code = code;
-	}
-	
-	
 }

+ 19 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/config/ImgConfig.java

@@ -0,0 +1,19 @@
+package com.chuanghai.smartschool.tuitionpayment.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/11/1 星期二 10:08
+ * @Description: com.chuanghai.smartschool.tuitionpayment.config
+ * @Version: 1.0
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "img")
+public class ImgConfig {
+    private String saveLocation;
+    private String showHost;
+}

+ 1 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/config/WechatConfig.java

@@ -18,4 +18,5 @@ public class WechatConfig {
     private String appid;
     private String secret;
     private String fontendUrl;
+    private String fontendUrlHJH;
 }

+ 1 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/config/WeixiaoConfig.java

@@ -18,5 +18,6 @@ public class WeixiaoConfig {
     private String appKey;
     private String appSecret;
     private String fontendUrl;
+    private String fontendUrlHJH;
 
 }

+ 5 - 1
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/BankController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.chuanghai.smartschool.tuitionpayment.common.utils.CommonResult;
 import com.chuanghai.smartschool.tuitionpayment.entity.Bank;
 import com.chuanghai.smartschool.tuitionpayment.service.BankService;
+import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoService;
 import com.chuanghai.smartschool.tuitionpayment.vo.BankVO.BankAppKeyVO;
 import com.chuanghai.smartschool.tuitionpayment.vo.BankVO.BankStoreVO;
 import com.chuanghai.smartschool.tuitionpayment.vo.BankVO.BankVO;
@@ -32,7 +33,8 @@ public class BankController {
 
     @Autowired
     private BankService bankService;
-
+    @Autowired
+    private PayableInfoService payableInfoService;
     @GetMapping("queryBankStore")
     public CommonResult<List<BankStoreVO>> queryBankStore() {
 
@@ -110,4 +112,6 @@ public class BankController {
         List uniqueStr = listbank.stream().distinct().collect(Collectors.toList());
         return CommonResult.ok().setResult(uniqueStr);
     }
+
+
 }

+ 0 - 2
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/BankItemDetailController.java

@@ -33,8 +33,6 @@ public class BankItemDetailController {
     /**
      * 更新银行缴费明细
      *
-     * @param
-     * @return
      */
     @PostMapping("saveOrUpdateBankDetail")
     public CommonResult<Boolean> saveBankDetail(String itemName, List<ReceiveBankItemDetailTO> list) {

+ 86 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/DormRoomController.java

@@ -0,0 +1,86 @@
+package com.chuanghai.smartschool.tuitionpayment.controller;
+
+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.DormBuild;
+import com.chuanghai.smartschool.tuitionpayment.entity.DormFloor;
+import com.chuanghai.smartschool.tuitionpayment.entity.DormRoom;
+import com.chuanghai.smartschool.tuitionpayment.service.DormBuildService;
+import com.chuanghai.smartschool.tuitionpayment.service.DormFloorService;
+import com.chuanghai.smartschool.tuitionpayment.service.DormRoomService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/11/1 星期二 8:52
+ * @Description: com.chuanghai.smartschool.tuitionpayment.controller
+ * @Version: 1.0
+ */
+@RestController
+@RequestMapping("tuitionpayment/room")
+public class DormRoomController {
+
+    @Autowired
+    private DormBuildService dormBuildService;
+
+    @Autowired
+    private DormFloorService dormFloorService;
+
+    @Autowired
+    private DormRoomService dormRoomService;
+
+
+    /**
+     * 查询所有楼栋信息  显示楼栋数
+     */
+    @GetMapping(value = "queryAllBuild")
+    public CommonResult queryAllBuild(){
+        List<DormBuild> buildList;
+        try {
+            buildList = dormBuildService.queryAllBuild();
+        }catch (Exception e){
+            throw new RRException(BizCodeEnume.DATA_IS_NOT_EXIST,"楼栋不存在");
+
+        }
+        return CommonResult.ok().setResult(buildList);
+    }
+
+    /**
+     * 通过楼栋ID 查询相关楼栋的楼层情况  显示楼层数
+     */
+    @GetMapping(value = "queryAllFloor")
+    public CommonResult queryAllFloorByBuildID(String buildId){
+        List<DormFloor> floorList;
+        try {
+            floorList = dormFloorService.queryAllFloorByBuildID(buildId);
+        }catch (Exception e){
+            e.printStackTrace();
+            throw new RRException(BizCodeEnume.DATA_IS_NOT_EXIST,"楼层不存在");
+        }
+        return CommonResult.ok().setResult(floorList);
+    }
+
+
+    /**
+     * 通过楼层ID 查询相关楼层的房间情况  显示房间号
+     */
+    @GetMapping(value = "queryAllRoom")
+    public CommonResult queryAllRoomByFloorID(String floorId){
+        List<DormRoom> roomList;
+        try {
+            roomList = dormRoomService.queryAllRoomByFloorID(floorId);
+        }catch (Exception e){
+            throw new RRException(BizCodeEnume.DATA_IS_NOT_EXIST,"房间不存在");
+        }
+        return CommonResult.ok().setResult(roomList);
+    }
+
+
+}
+

+ 55 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/FeedbackMsgController.java

@@ -7,6 +7,7 @@ import com.chuanghai.smartschool.tuitionpayment.common.exception.RRException;
 import com.chuanghai.smartschool.tuitionpayment.common.utils.CommonResult;
 import com.chuanghai.smartschool.tuitionpayment.common.utils.PageParam;
 import com.chuanghai.smartschool.tuitionpayment.common.utils.PageUtils;
+import com.chuanghai.smartschool.tuitionpayment.config.ImgConfig;
 import com.chuanghai.smartschool.tuitionpayment.entity.FeedbackMsgEntity;
 import com.chuanghai.smartschool.tuitionpayment.service.FeedbackMsgService;
 import com.chuanghai.smartschool.tuitionpayment.to.FeedbackMsgCreateTO;
@@ -15,11 +16,15 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.ObjectError;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.File;
 import java.io.IOException;
 import java.time.LocalDateTime;
+import java.util.List;
+import java.util.UUID;
 
 /**
  * 反馈信息
@@ -36,6 +41,8 @@ public class FeedbackMsgController {
     private FeedbackMsgService feedbackMsgService;
     @Autowired
     private WechatController wechatController;
+    @Autowired
+    private ImgConfig imgConfig;
 
     /**
      * 新增反馈信息
@@ -54,6 +61,14 @@ public class FeedbackMsgController {
             throw new RRException(BizCodeEnume.PARAMETER_ERROR, error.getDefaultMessage());
         }
         feedbackMsgCreateTO.setFeedbackNoticeType("1");
+        if (feedbackMsgCreateTO.getFeedbackRoom() != null) {
+            String dorm = feedbackMsgCreateTO.getFeedbackRoom();
+            if (dorm.contains("层")) {
+                int indexD = dorm.indexOf("栋");
+                dorm = dorm.substring(0, indexD + 1) + dorm.split("层")[1];
+                feedbackMsgCreateTO.setFeedbackRoom(dorm);
+            }
+        }
         //TODO 此处cardNumber应为身份证号
         String idCardName = wechatController.getIdCard(cardNumber);
         String idCard = cardNumber;
@@ -164,4 +179,44 @@ public class FeedbackMsgController {
     }
 
 
+    /**
+     * @param
+     * @param images
+     * @return
+     */
+    @PostMapping("uploadImage")
+    public CommonResult uploadImage(List<MultipartFile> images) {
+        String fileNameSaveUrl = "";
+        try {
+            if (images != null) {
+                for (MultipartFile orderImage : images) {
+                    if (!orderImage.isEmpty()) {
+                        String originalFilename = orderImage.getOriginalFilename();
+
+                        int index = originalFilename.lastIndexOf('.') + 1;//获取地址.的前面的数字,从0开始
+                        //图片的文件名称
+                        String fileNameUrl = UUID.randomUUID().toString().replaceAll("-", "") + originalFilename + ";";
+                        //图片在数据库保存的名称
+                        fileNameSaveUrl += imgConfig.getShowHost() + fileNameUrl;
+                        fileNameUrl = fileNameUrl.substring(0, fileNameUrl.lastIndexOf(";"));
+                        //保存图片的路径(这是存在我项目中的images下了,你们可以设置路径)
+                        String filePath = imgConfig.getSaveLocation();
+                        //生成新文件名字 封装上传文件位置的全路径
+                        File targetFile = new File(filePath, fileNameUrl);
+                        //把本地文件上传到封装上传文件位置的全路径
+                        orderImage.transferTo(targetFile);
+                    }
+                }
+                fileNameSaveUrl = fileNameSaveUrl.substring(0, fileNameSaveUrl.lastIndexOf(";"));
+            } else {
+                return CommonResult.ok().setResult("用户没有提交图片");
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return CommonResult.fail().setResult("图片上传失败");
+        }
+        return CommonResult.ok().setResult(fileNameSaveUrl);
+    }
+
 }

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

@@ -1,7 +1,13 @@
 package com.chuanghai.smartschool.tuitionpayment.controller;
 
+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.service.PayOrderService;
 import com.chuanghai.smartschool.tuitionpayment.service.PayService;
+import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoService;
+import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoWaterService;
+import com.chuanghai.smartschool.tuitionpayment.vo.StudentNameTeleVO;
 import com.chuanghai.smartschool.tuitionpayment.vo.WechatJsApiPayParamVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,40 +18,85 @@ import javax.servlet.http.HttpServletRequest;
 
 /**
  * 支付接口
+ *
  * @author codingliang
  * @email codingliang@gmail.com
  * @date 2021-08-12 15:52:41
  */
 @Slf4j
 @Controller
-@RequestMapping({"pay","tuitionpayment/pay"})
+@RequestMapping({"pay", "tuitionpayment/pay"})
 public class PayController {
 
     @Autowired
     private PayService payService;
+    @Autowired
+    private PayOrderService payOrderService;
+    @Autowired
+    private PayableInfoService payableInfoService;
+    @Autowired
+    private PayableInfoWaterService payableInfoWaterService;
+    @Autowired
+    private PayableInfoWaterController payableInfoWaterController;
+    @Autowired
+    private WechatController wechatController;
+
 
     /**
      * 【建行】获取拉起微信支付的参数
-     * @param cardNumber 当前登录用户标识
-     * @param orderNo 订单号
-     * @param openId 支付者唯一标识
-     * @param secondOrderNo  携带第二次支付的订单号
+     *
+     * @param cardNumber    当前登录用户标识
+     * @param orderNo       订单号
+     * @param openId        支付者唯一标识
+     * @param secondOrderNo 携带第二次支付的订单号
+     * @param payment       1 学费  2 黄家湖水费 3 计算机二级  4 双学位 5 成人教育(函授)
      * @return
      * @throws Exception
      */
     @ResponseBody
     @GetMapping("ccb/getJsApiParam")
-    public CommonResult<WechatJsApiPayParamVO> getCCBJsApiParam( @RequestHeader("card_number")String cardNumber,
-                                                             @RequestParam String orderNo,
-                                                             @RequestParam String openId,
-                                                                 String secondOrderNo) {
+    public CommonResult<WechatJsApiPayParamVO> getCCBJsApiParam(@RequestHeader("card_number") String cardNumber,
+                                                                @RequestParam String orderNo,
+                                                                @RequestParam String openId,
+                                                                String secondOrderNo,
+                                                                String payment) {
+
+        WechatJsApiPayParamVO jsApiPayParam = payService.getCCBJsApiParam(openId, orderNo, secondOrderNo, payment);
+        //判断该缴费名单是否正在支付
+
+        if (payment.equals("2")) {
+            Boolean aBoolean = payableInfoWaterService.queryWaterPay(payOrderService.queryPayInfoByOrderId(orderNo), cardNumber);
+            if (aBoolean) {
+                StudentNameTeleVO studentNameTeleVO = wechatController.getUserNameTele(payableInfoWaterService.queryByPayInfoId(payOrderService.queryPayInfoByOrderId(orderNo))).getData();
+                throw new RRException(BizCodeEnume.ORDER_IS_PAYING, "订单已被" +studentNameTeleVO.getName() +"支付锁定,解除锁定请联系:"+studentNameTeleVO.getTelephone());
+            }
+
+        }else {
+            Boolean bBoolean = payableInfoService.queryInforPay(payOrderService.queryPayInfoByOrderId(orderNo), cardNumber);
+            if (bBoolean) {
+                StudentNameTeleVO studentNameTeleVO = wechatController.getUserNameTele(payableInfoWaterService.queryByPayInfoId(payOrderService.queryPayInfoByOrderId(orderNo))).getData();
+                throw new RRException(BizCodeEnume.ORDER_IS_PAYING, "订单已被" +studentNameTeleVO.getName() +"支付锁定,解除锁定请联系:"+studentNameTeleVO.getTelephone());
+            }
+        }
+
+        if (jsApiPayParam.getErrmsg().contains("支付不成功")) {
+
+            //订单支付失败则将缴费名单的订单支付中的状态修改为未支付状态
+            Boolean aaBoolean = payableInfoService.updatePayInfoStatu(payOrderService.queryPayInfoByOrderId(orderNo), "1", "null", "null");
+            if (!aaBoolean) {
+                Boolean aBoolean1 = payableInfoWaterService.updateWaterInfoStatu(payOrderService.queryPayInfoByOrderId(orderNo), "1", "null", "null");
+            }
+
+        }
+//        PayableInfoWaterEntity byId = payableInfoWaterService.getById(payOrderService.queryPayInfoByOrderId(orderNo));
+//        System.out.println(byId);
 
-        WechatJsApiPayParamVO jsApiPayParam = payService.getCCBJsApiParam(openId, orderNo,secondOrderNo);
         return CommonResult.ok().setResult(jsApiPayParam);
     }
 
     /**
      * 【建行】支付结果异步通知
+     *
      * @param request 请求原始数据
      * @return
      */
@@ -59,12 +110,13 @@ public class PayController {
 
     /**
      * 【建行】支付成功回跳页面
+     *
      * @param request
-     * @apiNote 支付成功后,建行服务器会调用该接口
-     *          该接口监听到建行回调后,会以【fontendUrl + pages/paySuccess/paySuccess?orderNo=123】的形式跳回到前端页面
-     *          <strong>注意:</strong>
-     *          fontendUrl + pages/paySuccess/paySuccess是前端支付成功之后的页面,需要前端开发人员与后台开发人员协调好
      * @return
+     * @apiNote 支付成功后,建行服务器会调用该接口
+     * 该接口监听到建行回调后,会以【fontendUrl + pages/paySuccess/paySuccess?orderNo=123】的形式跳回到前端页面
+     * <strong>注意:</strong>
+     * fontendUrl + pages/paySuccess/paySuccess是前端支付成功之后的页面,需要前端开发人员与后台开发人员协调好
      */
     @GetMapping("ccb/success")
     public String ccbSuccess(HttpServletRequest request) {
@@ -74,13 +126,14 @@ public class PayController {
 
     /**
      * 【农商行】发起支付
-     * @since 0.1.0
-     * @apiNote 页面直接跳转链接【https://q.jxnxs.com/newpay?O=&out_no=&amount=&appoint_notify=】发起支付
-     *          O:固定传5494ec3310685daa218382619dd20e27
-     *          out_no:订单号,下单接口获取
-     *          amount:支付金额,单位元,下单接口获取
-     *          appoint_notify:异步通知地址,测试地址:http://7n9xr5.natappfree.cc/pay/jxnxs/notify、正式地址:https://jtishfw.ncjti.edu.cn/jiaofei/backendApi/pay/jxnxs/notify/
+     *
      * @return
+     * @apiNote 页面直接跳转链接【https://q.jxnxs.com/newpay?O=&out_no=&amount=&appoint_notify=】发起支付
+     * O:固定传5494ec3310685daa218382619dd20e27
+     * out_no:订单号,下单接口获取
+     * amount:支付金额,单位元,下单接口获取
+     * appoint_notify:异步通知地址,测试地址:http://7n9xr5.natappfree.cc/pay/jxnxs/notify、正式地址:https://jtishfw.ncjti.edu.cn/jiaofei/backendApi/pay/jxnxs/notify/
+     * @since 0.1.0
      */
     @GetMapping("spec001")
     public String spec001() {
@@ -89,14 +142,15 @@ public class PayController {
 
     /**
      * 【农商行】支付结果异步通知
+     *
      * @param request
-     * @since 0.1.0
      * @return
+     * @since 0.1.0
      */
     @ResponseBody
     @GetMapping("jxnxs/notify")
-        public String jxnxsNotify(HttpServletRequest request) {
-            boolean isSuccess = payService.jxnxsNotify(request);
+    public String jxnxsNotify(HttpServletRequest request) {
+        boolean isSuccess = payService.jxnxsNotify(request);
         if (isSuccess) {
             return "notify_success";
         } else {
@@ -106,9 +160,10 @@ public class PayController {
 
     /**
      * 【农商行】支付成功跳转地址
+     *
      * @param orderNo 订单号
-     * @since 0.1.0
      * @return
+     * @since 0.1.0
      */
     @GetMapping("jxnxs/success")
     public String jxnxsSuccess(@RequestParam("ord_no") String orderNo) {

+ 91 - 13
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayOrderController.java

@@ -49,7 +49,7 @@ public class PayOrderController {
 
 
     @GetMapping("ss")
-    public void ss(String order){
+    public void ss(String order) {
         payOrderService.getByOrderNo(order);
     }
 
@@ -111,7 +111,7 @@ public class PayOrderController {
      * @return
      */
     @GetMapping("{orderNo}/orderStatu")
-    public CommonResult<OrderStatusVO> queryOrderStatus( @PathVariable("orderNo") String orderNo) {
+    public CommonResult<OrderStatusVO> queryOrderStatus(@PathVariable("orderNo") String orderNo) {
         OrderStatusVO orderStatusVO = payOrderService.queryOrderStatus(orderNo);
         return CommonResult.ok().setResult(orderStatusVO);
     }
@@ -119,9 +119,10 @@ public class PayOrderController {
     /**
      * 订单列表【管理端】
      * <p>
+     *
      * @param adminToken 管理员token
-     * @param queryTO   查询条件
-     * @param pageParam 分页参数
+     * @param queryTO    查询条件
+     * @param pageParam  分页参数
      * @return
      * @apiNote 0.1.0 新增按照支付方式查询
      */
@@ -198,7 +199,7 @@ public class PayOrderController {
      * @return
      */
     @GetMapping("queryOrderStatu")
-    public CommonResult<OrderStatusVO> queryOrderStatusByAdmin( @RequestParam String orderNo) {
+    public CommonResult<OrderStatusVO> queryOrderStatusByAdmin(@RequestParam String orderNo) {
         OrderStatusVO orderStatusVO = payOrderService.queryOrderStatus(orderNo);
         return CommonResult.ok().setResult(orderStatusVO);
     }
@@ -286,12 +287,11 @@ public class PayOrderController {
      * 下载缴费名单的txt点击开始计时十五分钟,导出十五分钟内的数据
      *
      * @param response
-     * @param type   today 当天  quarter 十五分钟
-     *
+     * @param type     today 当天  quarter 十五分钟
      * @throws IOException
      */
     @RequestMapping("exportOrderTxtQuarter")
-    public void exportOrderTxtQuarter( HttpServletResponse response, String type ) throws IOException {
+    public void exportOrderTxtQuarter(HttpServletResponse response, String type) throws IOException {
         try {
             payOrderService.exportOrderTxtQuarter(response, type);
         } catch (Exception e) {
@@ -345,13 +345,20 @@ public class PayOrderController {
         BigDecimal payAmount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
         if (payItem.equals("水费缴纳")) {
             QueryWrapper<PayableInfoWaterEntity> wrapper1 = new QueryWrapper<>();
-            wrapper1.eq("student_no", payOrderEntity.getPayForIdentify())
-                    .eq("student_name", payOrderEntity.getStudentName())
+            wrapper1.eq("drom", payOrderEntity.getDorm())
                     .eq("pay_month", payOrderEntity.getPayYear());
             PayableInfoWaterEntity payableInfoWaterEntity = payableInfoWaterService.getOne(wrapper1);
             payOrderEntity.setRealPayAmount(payableInfoWaterEntity.getRealPayAmount());
             payOrderEntity.setPayDetail(payableInfoWaterEntity.getPayAmountDetail());
             payOrderEntity.setNowPayAmount(payableInfoWaterEntity.getRealPayAmount());
+//            QueryWrapper<PayableInfoWaterEntity> wrapper1 = new QueryWrapper<>();
+//            wrapper1.eq("student_no", payOrderEntity.getPayForIdentify())
+//                    .eq("student_name", payOrderEntity.getStudentName())
+//                    .eq("pay_month", payOrderEntity.getPayYear());
+//            PayableInfoWaterEntity payableInfoWaterEntity = payableInfoWaterService.getOne(wrapper1);
+//            payOrderEntity.setRealPayAmount(payableInfoWaterEntity.getRealPayAmount());
+//            payOrderEntity.setPayDetail(payableInfoWaterEntity.getPayAmountDetail());
+//            payOrderEntity.setNowPayAmount(payableInfoWaterEntity.getRealPayAmount());
         } else {
             QueryWrapper<PayableInfoEntity> wrapper1 = new QueryWrapper<>();
             wrapper1.eq("student_no", payOrderEntity.getPayForIdentify())
@@ -463,7 +470,7 @@ public class PayOrderController {
             yearList.add(yearVo);
 
         });
-          List uniqueStr = yearList.stream().distinct().collect(Collectors.toList());
+        List uniqueStr = yearList.stream().distinct().collect(Collectors.toList());
 
         return uniqueStr;
     }
@@ -471,25 +478,96 @@ public class PayOrderController {
 
     /**
      * 通过缴费项目及缴费状态查询缴费年度信息
+     *
      * @param itemName
      * @param status
      * @return
      */
     @GetMapping("queryOrderYearByItem")
-    public CommonResult<List<String>> queryYearByItem(String itemName, String status){
+    public CommonResult<List<String>> queryYearByItem(String itemName, String status) {
         List<String> yearList = new ArrayList<>();
         QueryWrapper<PayOrderEntity> orderWapper = new QueryWrapper<>();
         orderWapper.eq("pay_item", itemName)
                 .eq("status", status);
         List<PayOrderEntity> orderList = payOrderService.list(orderWapper);
         if (orderList.size() > 0) {
-            orderList.forEach(order->{
+            orderList.forEach(order -> {
                 yearList.add(order.getPayYear());
             });
         }
         List uniqueStr = yearList.stream().distinct().collect(Collectors.toList());
         return CommonResult.ok().setResult(uniqueStr);
     }
+
+    /**
+     * 移动端 查询水费支付订单
+     *
+     * @param payYear  支付年度
+     * @param payStatu 支付状态  1 支付失败   2 支付成功
+     * @return
+     */
+    @GetMapping("queryWaterOrder")
+    public CommonResult queryWaterOrder(String payYear, String payStatu, String itemName, String cardNumber) {
+        List<PayOrderEntity> waterList = payOrderService.queryWaterOrder( payYear, payStatu, itemName, cardNumber);
+        return CommonResult.ok().setResult(waterList);
+    }
+
+
+    /**
+     * 水费订单查询年度
+     * @param cardNumber
+     * @param payStatu
+     * @return
+     */
+    @GetMapping("queryWaterOrderYear")
+    public CommonResult queryWaterOrderYear(String cardNumber, String payStatu){
+        List<YearVo> allYearlist = payOrderService.queryWaterOrderYear(cardNumber, payStatu);
+        return CommonResult.ok().setResult(allYearlist);
+
+    }
+
+
+    /**
+     * 判断重复缴费
+     *
+     * @param payInfoId
+     * @param payItem
+     * @return
+     */
+    @GetMapping("checkOrderPay")
+    public CommonResult checkOrderPay(String payInfoId, String payItem) {
+        PayableInfoWaterEntity water = new PayableInfoWaterEntity();
+        PayableInfoEntity payInfo = new PayableInfoEntity();
+        payInfo.setId(Long.parseLong(payInfoId));
+        if (payItem.equals("水费缴纳")) {
+            water = payableInfoWaterService.getById(payInfoId);
+        } else {
+
+            QueryWrapper<PayableInfoEntity> wrapper = new QueryWrapper<>();
+            wrapper.eq("id", payInfoId);
+            List<PayOrderEntity> list = payOrderService.list();
+
+        }
+
+        if (water.getId() != null || payInfo.getId() != null) {
+            throw new RRException(BizCodeEnume.ORDER_IS_PAYING);
+        }
+        return CommonResult.ok();
+
+    }
+
+    /**
+     * 继续支付时恢复已删除的订单
+     * @param orderId
+     * @return
+     */
+    @GetMapping("queryByOrderRestore")
+    public CommonResult queryByOrderRestore(Long orderId) {
+        payOrderService.queryByOrderRestore(orderId);
+        return CommonResult.ok();
+    }
+
+
 }
 
 

+ 137 - 95
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayableInfoController.java

@@ -49,8 +49,7 @@ import java.util.stream.Collectors;
 @RequestMapping("tuitionpayment/payableinfo")
 public class PayableInfoController {
 
-    @Autowired
-    private PayableInfoService payableInfoService;
+
     @Autowired
     private PayableInfoWaterService payableInfoWaterService;
     @Autowired
@@ -61,7 +60,8 @@ public class PayableInfoController {
     private BankItemDetailService bankItemDetailService;
     @Autowired
     private SchoolUserService schoolUserService;
-
+    @Autowired
+    private PayableInfoService payableInfoService;
 
     /**
      * 根据card_number获取缴费信息 整合各缴费项目的集合
@@ -88,37 +88,37 @@ public class PayableInfoController {
                 });
             }
 
-            List<PayableInfoWaterEntity> payableWater = payableInfoWaterService.getPayableInfoWaterByCardNumber(cardNumber, studentName);
-            payableWater.forEach(payableInfoWater -> {
-                //如果查询到已经完成水费缴纳,则删除该寝室的缴费名单信息
-                QueryWrapper<PayableInfoWaterEntity> wrapperWater = new QueryWrapper<>();
-                wrapperWater.eq("dorm", payableInfoWater.getDorm());
-                List<PayableInfoWaterEntity> listWater = payableInfoWaterService.list(wrapperWater);
-                List<PayableInfoWaterEntity> listWaterStatusFinish = new ArrayList<>();
-                //收集寝室缴费完成的对象
-                if (listWater.size() > 0) {
-                    listWater.forEach(water -> {
-                        if (water.getPayItemType().endsWith("2")) {
-                            listWaterStatusFinish.add(water);
-                        }
-                    });
-                }
-                //得到去除完成缴费的寝室缴费订单对象
-                List<PayableInfoWaterEntity> accountWaterList = listWaterStatusFinish.stream().filter(listWater::contains).collect(Collectors.toList());
-                List<PayableInfoWaterEntity> accountWaterList1 = accountWaterList.stream().filter(listWater::contains).collect(Collectors.toList());
-                List<Long> idList = new ArrayList<>();
-                //通过id批量删除信息
-                if (accountWaterList1.size() > 0) {
-                    accountWaterList.forEach(water -> {
-                        idList.add(water.getId());
-                    });
-                    payableInfoWaterService.removeByIds(idList);
-                }
-
-                PayableInfoWaterListVO payableInfoWaterListVO = new PayableInfoWaterListVO();
-                BeanUtils.copyProperties(payableInfoWater, payableInfoWaterListVO);
-                objectList.add(payableInfoWaterListVO);
-            });
+//            List<PayableInfoWaterEntity> payableWater = payableInfoWaterService.getPayableInfoWaterByCardNumber(cardNumber, studentName);
+//            payableWater.forEach(payableInfoWater -> {
+//                //如果查询到已经完成水费缴纳,则删除该寝室的缴费名单信息
+//                QueryWrapper<PayableInfoWaterEntity> wrapperWater = new QueryWrapper<>();
+//                wrapperWater.eq("dorm", payableInfoWater.getDorm());
+//                List<PayableInfoWaterEntity> listWater = payableInfoWaterService.list(wrapperWater);
+//                List<PayableInfoWaterEntity> listWaterStatusFinish = new ArrayList<>();
+//                //收集寝室缴费完成的对象
+//                if (listWater.size() > 0) {
+//                    listWater.forEach(water -> {
+//                        if (water.getPayItemType().endsWith("2")) {
+//                            listWaterStatusFinish.add(water);
+//                        }
+//                    });
+//                }
+//                //得到去除完成缴费的寝室缴费订单对象
+//                List<PayableInfoWaterEntity> accountWaterList = listWaterStatusFinish.stream().filter(listWater::contains).collect(Collectors.toList());
+//                List<PayableInfoWaterEntity> accountWaterList1 = accountWaterList.stream().filter(listWater::contains).collect(Collectors.toList());
+//                List<Long> idList = new ArrayList<>();
+//                //通过id批量删除信息
+//                if (accountWaterList1.size() > 0) {
+//                    accountWaterList.forEach(water -> {
+//                        idList.add(water.getId());
+//                    });
+//                    payableInfoWaterService.removeByIds(idList);
+//                }
+//
+//                PayableInfoWaterListVO payableInfoWaterListVO = new PayableInfoWaterListVO();
+//                BeanUtils.copyProperties(payableInfoWater, payableInfoWaterListVO);
+//                objectList.add(payableInfoWaterListVO);
+//            });
 
             if (objectList.size() > 0) {
                 //将得到的payableInfoWaterListVOs集合数据按照payCreateTime进行
@@ -156,9 +156,9 @@ public class PayableInfoController {
     @GetMapping("/list")
     public CommonResult<PageUtils<PayableInfoEntity>> list(@RequestHeader("admin_token") String adminToken,
                                                            PayOrderQueryTO queryTO, PageParam pageParam) {
-        PageUtils page = null;
-        BigDecimal totalAmount = BigDecimal.ZERO;
-        int totalCount = 0;
+        PageUtils page;
+        BigDecimal totalAmount;
+        int totalCount;
         if (queryTO.getItemName().equals("水费缴纳")) {
             page = payableInfoWaterService.queryPage(queryTO, pageParam);
             totalCount = page.getTotalCount();
@@ -290,7 +290,7 @@ public class PayableInfoController {
         infoEntityList.forEach(payableInfoEntity -> {
             QueryWrapper<SchoolUser> schoolWapper = new QueryWrapper<>();
             schoolWapper.eq("id_card", payableInfoEntity.getStudentNo())
-            .last("limit 1");
+                    .last("limit 1");
             SchoolUser schoolUser = schoolUserService.getOne(schoolWapper);
 //            List<SchoolUser> list = schoolUserService.list(schoolWapper);
 //            SchoolUser schoolUser = new SchoolUser();
@@ -363,75 +363,80 @@ public class PayableInfoController {
         MyStudentNoImportListener studentNoImportListener = new MyStudentNoImportListener();
         EasyExcel.read(file.getInputStream(), StudentNoVO.class, studentNoImportListener).sheet().headRowNumber(4).doRead();
         List<StudentNoVO> studentNos = studentNoImportListener.getStudentNoList();
-        studentNos.remove(studentNos.size() - 1);
+//        studentNos.remove(studentNos.size()-1);
         List<DeletePayableInfoTO> alreadyPayList = new ArrayList<>();
         List<Long> infoIdList = new ArrayList<>();
         List<Long> waterIdList = new ArrayList<>();
         for (int m = 0; m < studentNos.size(); m++) {
             StudentNoVO student = studentNos.get(m);
-            if (student.getPaymentItem().equals("水费缴纳")) {
-                QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
-                wrapper.eq(student.getStudentNo() != null, "student_no", student.getStudentNo());
-                wrapper.eq(student.getPaymentItem() != null, "payment_item", student.getPaymentItem());
-                wrapper.eq(student.getStudentName() != null, "student_name", student.getStudentName());
-                wrapper.eq(student.getPayMonth() != null, "pay_month", student.getPayMonth());
-
-                PayableInfoWaterEntity one = payableInfoWaterService.getOne(wrapper);
-                if (one != null) {
-                    boolean alreadyPay = payOrderService.isAlreadyPay(one.getStudentNo(), one.getPaymentItem(), one.getPayMonth(), null, null, null);
-                    if (alreadyPay) {
-                        throw new RRException(BizCodeEnume.DATA_IS_EXIST, "删除失败," + student.getStudentName() + " "
-                                + student.getStudentNo() + " 已完成 " + student.getPayMonth() + " 时间段的 " + student.getPaymentItem() + " 的缴费,请核对完毕之后重新导入删除");
-                    } else {
-                        QueryWrapper<PayableInfoWaterEntity> waterWapper = new QueryWrapper<>();
-                        waterWapper.eq("student_name", one.getStudentName())
-                                .eq("student_no", one.getStudentNo())
-                                .eq("payment_item", one.getPaymentItem())
-                                .eq("pay_month", one.getPayMonth());
-                        PayableInfoWaterEntity water = payableInfoWaterService.getOne(waterWapper);
-                        waterIdList.add(water.getId());
-                    }
+            if (student.getPayMonth() != null) {
+                if (student.getPaymentItem() == null) {
+                    student.setPaymentItem("水费缴纳");
                 }
-            } else {
-                QueryWrapper<PayableInfoEntity> wrapper = new QueryWrapper<>();
-                wrapper.eq(student.getStudentNo() != null, "student_no", student.getStudentNo());
-                wrapper.eq(student.getPaymentItem() != null, "payment_item", student.getPaymentItem());
-                wrapper.eq(student.getStudentName() != null, "student_name", student.getStudentName());
-                wrapper.eq(student.getPayMonth() != null, "years", student.getPayMonth());
-
-                PayableInfoEntity one = payableInfoService.getOne(wrapper);
-                if (one != null) {
-                    boolean alreadyPay = payOrderService.isAlreadyPay(one.getStudentNo(), one.getPaymentItem(), one.getYears(), null, null, null);
-                    if (alreadyPay) {
-                        throw new RRException(BizCodeEnume.DATA_IS_EXIST, "删除失败," + student.getStudentName() + " "
-                                + student.getStudentNo() + " 已完成 " + student.getPayMonth() + " 时间段的 " + student.getPaymentItem() + " 的缴费,请核对完毕之后重新导入删除");
-                    } else {
-                        QueryWrapper<PayableInfoEntity> infoWapper = new QueryWrapper<>();
-                        infoWapper.eq("student_name", one.getStudentName())
-                                .eq("student_no", one.getStudentNo())
-                                .eq("payment_item", one.getPaymentItem())
-                                .eq("years", one.getYears());
-                        PayableInfoEntity info = payableInfoService.getOne(infoWapper);
-                        infoIdList.add(info.getId());
+                if (student.getPaymentItem().equals("水费缴纳")) {
+                    QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
+//                wrapper.eq(student.getStudentNo() != null, "student_no", student.getStudentNo());
+                    wrapper.eq(student.getPaymentItem() != null, "payment_item", student.getPaymentItem());
+                    wrapper.eq(student.getDorm() != null, "dorm", student.getDorm());
+                    wrapper.eq(student.getPayMonth() != null, "pay_month", student.getPayMonth());
+
+                    PayableInfoWaterEntity one = payableInfoWaterService.getOne(wrapper);
+
+                    if (one != null) {
+                        boolean alreadyPay = payOrderService.isAlreadyPayWater(one.getDorm(), one.getPaymentItem(), one.getPayMonth());
+                        if (alreadyPay) {
+                            throw new RRException(BizCodeEnume.DATA_IS_EXIST, "删除失败,"
+                                    + student.getDorm() + " 已完成 " + student.getPayMonth() + " 时间段的 " + student.getPaymentItem() + " 的缴费,请核对完毕之后重新导入删除");
+                        } else {
+                            QueryWrapper<PayableInfoWaterEntity> waterWapper = new QueryWrapper<>();
+                            waterWapper.eq("payment_item", one.getPaymentItem())
+                                    .eq("pay_month", one.getPayMonth())
+                                    .eq("dorm", one.getDorm());
+                            PayableInfoWaterEntity water = payableInfoWaterService.getOne(waterWapper);
+                            waterIdList.add(water.getId());
+                        }
+                    }
+                } else {
+                    QueryWrapper<PayableInfoEntity> wrapper = new QueryWrapper<>();
+                    wrapper.eq(student.getStudentNo() != null, "student_no", student.getStudentNo());
+                    wrapper.eq(student.getPaymentItem() != null, "payment_item", student.getPaymentItem());
+                    wrapper.eq(student.getStudentName() != null, "student_name", student.getStudentName());
+                    wrapper.eq(student.getPayMonth() != null, "years", student.getPayMonth());
+
+                    PayableInfoEntity one = payableInfoService.getOne(wrapper);
+                    if (one != null) {
+                        boolean alreadyPay = payOrderService.isAlreadyPay(one.getStudentNo(), one.getPaymentItem(), one.getYears(), null, null, null, null);
+                        if (alreadyPay) {
+                            throw new RRException(BizCodeEnume.DATA_IS_EXIST, "删除失败," + student.getStudentName() + " "
+                                    + student.getStudentNo() + " 已完成 " + student.getPayMonth() + " 时间段的 " + student.getPaymentItem() + " 的缴费,请核对完毕之后重新导入删除");
+                        } else {
+                            QueryWrapper<PayableInfoEntity> infoWapper = new QueryWrapper<>();
+                            infoWapper.eq("student_name", one.getStudentName())
+                                    .eq("student_no", one.getStudentNo())
+                                    .eq("payment_item", one.getPaymentItem())
+                                    .eq("years", one.getYears());
+                            PayableInfoEntity info = payableInfoService.getOne(infoWapper);
+                            infoIdList.add(info.getId());
+                        }
                     }
                 }
             }
-
         }
         boolean removeInfo = Boolean.FALSE;
         boolean removeWater = Boolean.FALSE;
 
         if (waterIdList.size() > 0) {
+
             removeWater = payableInfoWaterService.removeByIds(waterIdList);
         }
         if (infoIdList.size() > 0) {
-            removeWater = payableInfoService.removeByIds(infoIdList);
+            removeInfo = payableInfoService.removeByIds(infoIdList);
         }
 
         if (removeInfo == Boolean.FALSE && removeWater == Boolean.FALSE) {
             return CommonResult.fail("10028", "删除失败,导入模板中需要删除的数据不存在");
         } else {
-            return CommonResult.ok("", "删除成功");
+            return CommonResult.ok();
         }
 
     }
@@ -452,6 +457,9 @@ public class PayableInfoController {
             if (water.getPayAmountDetail() != null) {
                 payInfoDetailVO.setPayAmountDetail(water.getPayAmountDetail());
             }
+//            payInfoDetailVO.setRealPayAmount(water.getRealPayAmount());
+//            payInfoDetailVO.setNotPayDetailAmount(water.getRealPayAmount());
+//            payInfoDetailVO.setPayDetailAmount(water.getRealPayAmount());
             payInfoDetailVO.setRealPayAmount(water.getRealPayAmount());
             payInfoDetailVO.setNotPayDetailAmount(water.getRealPayAmount());
             payInfoDetailVO.setPayDetailAmount(water.getRealPayAmount());
@@ -642,8 +650,7 @@ public class PayableInfoController {
         PayableInfoWaterEntity payableInfoWaterEntity = new PayableInfoWaterEntity();
         if (payItem.equals("水费缴纳")) {
             QueryWrapper<PayableInfoWaterEntity> wrapper1 = new QueryWrapper<>();
-            wrapper1.eq("student_no", payForIdentify)
-                    .eq("student_name", studentName)
+            wrapper1.eq("dorm", one.getDorm())
                     .eq("payment_item", payItem)
                     .eq("pay_month", payYear);
             PayableInfoWaterEntity water = payableInfoWaterService.getOne(wrapper1);
@@ -904,17 +911,52 @@ public class PayableInfoController {
         return CommonResult.ok().setResult(uniqueStr);
     }
 
+
+    /**
+     * 更新缴费名单状态       正在支付时无法重复提交
+     *
+     * @param payInfoId   缴费名单的id
+     * @param payStatu   4 代表正在支付的状态
+     * @return
+     */
+    @GetMapping("updateStatu")
+    public CommonResult updateStatu(String payInfoId, String payStatu ,String cardNumber,String orderNo){
+        payableInfoService.updatePayInfoStatu(Long.parseLong(payInfoId), payStatu, cardNumber, orderNo);
+        return CommonResult.ok();
+    }
+
+
+    /**
+     * 取消订单正在支付的锁定状态
+     * @param payInfoId
+     * @return
+     */
+    @GetMapping("unlock")
+    public CommonResult unlock(Long payInfoId){
+        payableInfoService.unlock(payInfoId);
+        return CommonResult.ok();
+    }
+
+
+
+
+
 //    /**
 //     * 通过身份证查询缴费名单里对应人员的学号
-//     * @param studentNo   身份证
+//   //  * @param studentNo   身份证
 //     * @return
 //     */
-//    public String getSerialNumber(String studentNo) {
-//        QueryWrapper<PayableInfoEntity> wrapper = new QueryWrapper<>();
-//        wrapper.eq("student_no", studentNo)
-//                .orderByDesc("pay_create_time")
-//                .last("limit 1");
-//        PayableInfoEntity one = payableInfoService.getOne(wrapper);
-//        return one.getSerialNumber();
+//    @GetMapping("getSerialNumber")
+//    public String getSerialNumber(String payInfoId) {
+//        List<PayableInfoEntity> list = payableInfoService.list();
+////        Boolean aBoolean = payableInfoService.updatePayInfoStatu(Long.parseLong(payInfoId.toString()), "4");
+//
+////        QueryWrapper<PayableInfoEntity> wrapper = new QueryWrapper<>();
+////        wrapper.eq("student_no", studentNo)
+////                .orderByDesc("pay_create_time")
+////                .last("limit 1");
+////        PayableInfoEntity one = payableInfoService.getOne(wrapper);
+////        return one.getSerialNumber();
+//        return "";
 //    }
 }

+ 116 - 30
src/main/java/com/chuanghai/smartschool/tuitionpayment/controller/PayableInfoWaterController.java

@@ -7,11 +7,17 @@ import com.chuanghai.smartschool.tuitionpayment.common.exception.RRException;
 import com.chuanghai.smartschool.tuitionpayment.common.utils.CommonResult;
 import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterDeleteEntity;
 import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterEntity;
-import com.chuanghai.smartschool.tuitionpayment.entity.SchoolUser;
-import com.chuanghai.smartschool.tuitionpayment.service.*;
+import com.chuanghai.smartschool.tuitionpayment.service.PayOrderService;
+import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoWaterDeleteService;
+import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoWaterService;
+import com.chuanghai.smartschool.tuitionpayment.service.SchoolUserService;
+import com.chuanghai.smartschool.tuitionpayment.utils.RSAUtils;
+import com.chuanghai.smartschool.tuitionpayment.vo.DormVO;
+import com.chuanghai.smartschool.tuitionpayment.vo.YearVo;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -32,12 +38,15 @@ public class PayableInfoWaterController {
     @Autowired
     private PayableInfoWaterService payableInfoWaterService;
     @Autowired
-    private PayableInfoService payableInfoService;
+    private PayOrderService payOrderService;
     @Autowired
     private PayableInfoWaterDeleteService payableInfoWaterDeleteService;
     @Autowired
     private SchoolUserService schoolUserService;
 
+    @Value("${my-security.private-key}")
+    private String privateKey;
+
     /**
      * excel 导入学生学费相关原始数据
      *
@@ -66,39 +75,14 @@ public class PayableInfoWaterController {
     @PutMapping("updatePayInfoWater")
     public CommonResult<T> updatePayInfoWater() {
         QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
-        wrapper.isNull("card_number");
+        wrapper.isNull("pay_item_type");
         //更新时间等参数
         List<PayableInfoWaterEntity> InfoEntityList = payableInfoWaterService.list(wrapper);
         List<PayableInfoWaterEntity> objectList = new ArrayList<>();
         InfoEntityList.forEach(payableInfoWaterEntity -> {
-            QueryWrapper<SchoolUser> schoolWapper = new QueryWrapper<>();
-            schoolWapper.eq("id_card", payableInfoWaterEntity.getStudentNo())
-                    .last("limit 1");
-            SchoolUser schoolUser = schoolUserService.getOne(schoolWapper);
-//            List<SchoolUser> list = schoolUserService.list(schoolWapper);
-//            SchoolUser schoolUser = new SchoolUser();
-//            String serialNumber = payableInfoService.getSerialNumber(payableInfoWaterEntity.getStudentNo());
-//            if (list.size() > 0) {
-//                for ( int h = 0; h< list.size(); h++) {
-//                    if (serialNumber.equals(list.get(h).getStudentNo())) {
-//                        schoolUser = list.get(h);
-//                    }
-//                }
-//            }
-            if (schoolUser != null) {
-                String cardNumber = schoolUser.getCardNumber();
-                String studentNo = schoolUser.getStudentNo();
-                if (studentNo != null) {
-                    payableInfoWaterEntity.setSerialNumber(studentNo);
-                }
-                payableInfoWaterEntity.setCardNumber(cardNumber);
-            }
-
             payableInfoWaterEntity.setPayCreateTime(LocalDateTime.now());
             payableInfoWaterEntity.setPayItemType("1");
             payableInfoWaterEntity.setPayNoticeType("1");
-
-            //  payableInfoWaterEntity.setPayableAccount(payableInfoService.queryPayItemByName(payableInfoWaterEntity.getPaymentItem()));
             objectList.add(payableInfoWaterEntity);
         });
         payableInfoWaterService.updateBatchById(objectList);
@@ -107,18 +91,69 @@ public class PayableInfoWaterController {
 
 
     /**
+     * 根据宿舍号查询宿舍的缴费订单
+     *
+     * @param dormVO
+     * @return
+     * @apiNote 注意:密码使用提供的公钥进行RSA加密后传输
+     * 公钥:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMOcPB06u5yKyQsPjfVWiWgbEIrd14kiXNNihciaVKb6HnkQvq7zpQuZ80WEX94spnUMI3iOAl/GmIvHrpGwcbB4hJbznm+PajiwnUSPuCCXA68YJF640cJKb/8KeM7WVz69OFkIEPHhVxOy4FFF5QWe/kt6zOZ19HmE+ak+5x/QIDAQAB
+     */
+    @PostMapping("queryWaterInfo")
+    public CommonResult queryWaterInfo(@RequestBody DormVO dormVO) {
+        String dorm;
+        try {
+            dorm = RSAUtils.decrypt(dormVO.getDorm(), RSAUtils.getPrivateKey(privateKey));
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RRException(BizCodeEnume.PARAMETER_ERROR, "密码解密失败");
+        }
+
+        if (dorm.contains("层")) {
+            int indexD = dorm.indexOf("栋");
+            dorm = dorm.substring(0, indexD + 1) + dorm.split("层")[1];
+        }
+        List<PayableInfoWaterEntity> payableInfoWaterList = payableInfoWaterService.queryWaterInfo(dorm, dormVO.getYear(), dormVO.getPayStatu());
+        payableInfoWaterList.forEach(payableInfoWaterEntity -> {
+            if (payableInfoWaterEntity.getPayItemType().equals("2")) {
+                String payerName = payOrderService.queryPayerName(payableInfoWaterEntity.getId());
+                payableInfoWaterEntity.setPayerName(payerName);
+            }
+            payableInfoWaterService.updateById(payableInfoWaterEntity);
+        });
+
+        return CommonResult.ok().setResult(payableInfoWaterList);
+    }
+
+    /**
      * 根据card_number获取缴费信息
      *
      * @param cardNumber 当前登录用户cardNumber
      * @return
      */
-
     public List<PayableInfoWaterEntity> getPayableInfoByCardNumber(@RequestHeader("card_number") String cardNumber,
                                                                    String studentName) {
         List<PayableInfoWaterEntity> payableInfoWaterByCardNumber = payableInfoWaterService.getPayableInfoWaterByCardNumber(cardNumber, studentName);
         return payableInfoWaterByCardNumber;
     }
 
+
+    /**
+     * 查询所有的水费订单年份
+     *
+     * @return
+     */
+    @GetMapping("queryAllYear")
+    public CommonResult queryAllYear(String dorm, String payStatu) {
+
+            if (dorm.contains("层")) {
+                int indexD = dorm.indexOf("栋");
+                dorm = dorm.substring(0, indexD + 1) + dorm.split("层")[1];
+            }
+
+        List<YearVo> allYearlist = payableInfoWaterService.queryAllYear(dorm, payStatu);
+        return CommonResult.ok().setResult(allYearlist);
+    }
+
     /**
      * 修改学生宿舍信息
      *
@@ -163,4 +198,55 @@ public class PayableInfoWaterController {
         }
         return CommonResult.ok().setResult(Boolean.TRUE);
     }
+
+
+    @GetMapping("queryWaterType")
+    public CommonResult queryWaterType() {
+        List<String> waterList = payableInfoWaterService.queryWaterType();
+
+        return CommonResult.ok().setResult(waterList);
+    }
+
+
+    /**
+     * 更新缴费名单状态       正在支付时无法重复提交
+     *
+     * @param payInfoId   缴费名单的id
+     * @param payStatu   0 代表正在支付的状态
+     * @return
+     */
+    @GetMapping("updateWaterStatu")
+    public CommonResult updateWaterStatu(Long payInfoId, String payStatu, String cardNumber,String orderNo) {
+        PayableInfoWaterEntity waterInfo = new PayableInfoWaterEntity();
+        waterInfo.setId(payInfoId);
+        waterInfo.setPayItemType(payStatu);
+        waterInfo.setPayerCardNumber(cardNumber);
+        waterInfo.setOrderNo(orderNo);
+        payableInfoWaterService.updateById(waterInfo);
+//        System.out.println( payableInfoWaterService.getById(payInfoId));
+        return CommonResult.ok();
+    }
+
+
+    @GetMapping("testss")
+    public CommonResult testette() {
+        System.out.println("sdkjfhisafjjkkdbbfksdf-------------sdkfnkjsndkfnsdf ");
+        System.out.println("sdkjfhisafjjkkdbbfksdf-------------sdkfnkjsndkfnsdf ");
+        System.out.println("sdkjfhisafjjkkdbbfksdf-------------sdkfnkjsndkfnsdf ");
+        System.out.println("sdkjfhisafjjkkdbbfksdf-------------sdkfnkjsndkfnsdf ");
+        return CommonResult.ok();
+    }
+
+
+    /**
+     * 取消订单正在支付的锁定状态
+     * @param payInfoId
+     * @return
+     */
+    @GetMapping("unlock")
+    public CommonResult unlock(Long payInfoId){
+        payableInfoWaterService.unlock(payInfoId);
+        return CommonResult.ok();
+    }
 }
+

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

@@ -86,7 +86,8 @@ public class WechatController {
 
 
     /**
-     * 微信授权回调地址
+     * 在线缴费
+     * 微信授权回调地址获取openId
      *
      * @param code 微信code
      * @apiNote 用户跳转到微信授权链接上,微信服务器接收用户授权后会携带code回调到该接口上,该接口使用code获取到用户的openId信息。
@@ -115,12 +116,13 @@ public class WechatController {
 
             return "redirect:" + wechatConfig.getFontendUrl() + "/#/" + state + "/?openId=" + openid;
         } catch (Exception e) {
+            e.printStackTrace();
             return "redirect:" + wechatConfig.getFontendUrl() + "/error/?errorMsg=获取用户openId失败";
         }
     }
 
 
-    /**
+    /**在线缴费
      * 微校授权回调地址
      *
      * @param wxcode 微校code
@@ -177,6 +179,101 @@ public class WechatController {
     }
 
 
+
+    /**黄家湖水费缴纳
+     * 微信授权回调地址获取openId
+     *
+     * @param code 微信code
+     * @apiNote 用户跳转到微信授权链接上,微信服务器接收用户授权后会携带code回调到该接口上,该接口使用code获取到用户的openId信息。
+     * 如果openId获取成功,该接口会以 【fontendUrl + 路由地址 + ?openId=wx123456】 的形式跳回到前端应用页面;
+     * 如果openId获取失败,该接口会以 【fontendUrl + /error/?errorMsg=获取用户openId失败】 的形式跳回到前端应用页面。
+     * <strong>注意:</strong>
+     * fontendUrl + 路由地址:前端项目地址+页面路由地址,用于前端页面接收用户的信息或错误信息,该地址需要前端人员与后台开发人员协调好。
+     */
+    @GetMapping("/pub/auth/hjh")
+    public String pubAuthHJH(String code, String state) {
+
+        // code换取access_token
+        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
+                "appid=" + wechatConfig.getAppid() +
+                "&secret=" + wechatConfig.getSecret() +
+                "&code=" + code +
+                "&grant_type=authorization_code";
+
+        try {
+            RestTemplate restTemplate = new RestTemplate();
+            restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); // 解决回参中文乱码
+            String response = restTemplate.getForObject(url, String.class);
+            ObjectMapper mapper = new ObjectMapper();
+            JsonNode jsonNode = mapper.readTree(response);
+            String openid = jsonNode.get("openid").asText();
+
+            return "redirect:" + wechatConfig.getFontendUrlHJH() + "/#/" + state + "/?openId=" + openid;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "redirect:" + wechatConfig.getFontendUrlHJH() + "/error/?errorMsg=获取用户openId失败";
+        }
+    }
+
+
+    /**黄家湖水费缴纳
+     * 微校授权回调地址
+     *
+     * @param wxcode 微校code
+     * @param state  透传数据
+     * @return
+     * @apiNote 用户跳转到微校授权链接上,微校服务器接收用户授权后会携带wxcode回调到该接口上,该接口使用wxcode获取到用户的信息。
+     * 如果用户信息获取成功,该接口会以 【fontendUrl + /?cardNumber=wx123456&name=测试用户】 的形式跳回到前端应用页面;
+     * 如果用户信息获取失败,该接口会以 【fontendUrl + /error/?errorMsg=获取用户信息失败】 的形式跳回到前端应用页面。
+     * <strong>注意:</strong>
+     * fontendUrl + 路由地址:前端项目地址+页面路由地址,用于前端页面接收用户的信息或错误信息,该地址需要前端人员与后台开发人员协调好。
+     * </p>
+     */
+    @GetMapping("weixiao/auth/hjh")
+    public String weixiaoAuthHJH(String wxcode, String state) {
+        String tokenUrl = "https://open.wecard.qq.com/connect/oauth2/token";
+        Map<String, String> tokenParams = new HashMap<>();
+        tokenParams.put("wxcode", wxcode);
+        tokenParams.put("app_key", weixiaoConfig.getAppKey());
+        tokenParams.put("app_secret", weixiaoConfig.getAppSecret());
+        tokenParams.put("grant_type", "authorization_code");
+        tokenParams.put("redirect_uri", state); // 该地址需要与发起授权地址保持一直
+
+        try {
+            // wecode换取token
+            RestTemplate client = new RestTemplate();
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_JSON);
+            HttpEntity<Map<String, String>> request = new HttpEntity<>(tokenParams, headers);
+            //ResponseEntity<String> tokenResponse = client.postForEntity(tokenUrl, tokenParams, String.class);
+
+            ResponseEntity<String> tokenResponse = client.postForEntity(tokenUrl, request, String.class);
+
+            ObjectMapper mapper = new ObjectMapper();
+            Map<String, Object> jsonMap = mapper.readValue(tokenResponse.getBody(), new TypeReference<Map<String, Object>>() {
+            });
+            String accessToken = (String) jsonMap.get("access_token");
+
+            // token换取用户信息
+            String userInfoUrl = "https://open.wecard.qq.com/connect/oauth/get-user-info";
+            Map<String, String> userInfoParam = new HashMap<>();
+            userInfoParam.put("access_token", accessToken);
+            ResponseEntity<String> userInfoResponse = client.postForEntity(userInfoUrl, userInfoParam, String.class);
+
+            Map<String, Object> userInfoMap = mapper.readValue(userInfoResponse.getBody(), new TypeReference<Map<String, Object>>() {
+            });
+            String cardNumber = userInfoMap.get("card_number").toString();
+            String encodeName = URLEncoder.encode(userInfoMap.get("name").toString(), "utf-8");
+
+            return "redirect:" + weixiaoConfig.getFontendUrlHJH() + "/#/pages/index/index/?cardNumber=" + cardNumber + "&name=" + encodeName;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "redirect:" + weixiaoConfig.getFontendUrlHJH() + "/#/error/";
+        }
+    }
+
+
+
     /**
      * 获取微校的应用有效凭证 7200s有效 两小时内有效
      *
@@ -398,9 +495,9 @@ public class WechatController {
             }
 
         } catch (Exception e) {
-            e.printStackTrace();
-        }
+            throw new RRException(BizCodeEnume.DATA_IS_NOT_EXIST,"无法查询到对应身份证");
 
+        }
 
         return id_card + "-" + name;
     }
@@ -466,7 +563,6 @@ public class WechatController {
     @GetMapping("getUserNameTele")
     @ResponseBody
     public CommonResult<StudentNameTeleVO> getUserNameTele(String cardNumber) {
-
         RestTemplate client = new RestTemplate();
         ObjectMapper mapper = new ObjectMapper();
         String userInfoUrl = "https://open.wecard.qq.com/cgi-bin/user/search";
@@ -498,7 +594,7 @@ public class WechatController {
                     studentNameTeleVO.setTelephone(telephone);
 
                 } catch (Exception e) {
-                    e.printStackTrace();
+                    throw new RRException(BizCodeEnume.DATA_IS_NOT_EXIST, "微校电话号码获取失败");
                 }
             }
         }

+ 43 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/conver/aliexcel/PayStatuConverter.java

@@ -0,0 +1,43 @@
+package com.chuanghai.smartschool.tuitionpayment.conver.aliexcel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/11/10 星期四 11:30
+ * @Description: 转换支付状态
+ * @Version: 1.0
+ */
+public class PayStatuConverter implements Converter<String> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return String.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        return cellData.getStringValue();
+    }
+
+    @Override
+    public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        String payMethod;
+        if ("1".equals(value)) {
+            payMethod = "未支付";
+        } else if ("2".equals(value)) {
+            payMethod =  "已支付";
+        } else {
+            payMethod =  "部分支付";
+        }
+        return new CellData<>(payMethod);
+    }
+}

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

@@ -0,0 +1,15 @@
+package com.chuanghai.smartschool.tuitionpayment.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.smartschool.tuitionpayment.entity.DormBuild;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/20 星期三 19:32
+ * @Description: com.chuanghai.smartschool.tuitionpayment.dao
+ * @Version: 1.0
+ */
+@Mapper
+public interface DormBuildDao extends BaseMapper<DormBuild> {
+}

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

@@ -0,0 +1,15 @@
+package com.chuanghai.smartschool.tuitionpayment.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.smartschool.tuitionpayment.entity.DormFloor;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/20 星期三 19:32
+ * @Description: com.chuanghai.smartschool.tuitionpayment.dao
+ * @Version: 1.0
+ */
+@Mapper
+public interface DormFloorDao extends BaseMapper<DormFloor> {
+}

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

@@ -0,0 +1,15 @@
+package com.chuanghai.smartschool.tuitionpayment.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.smartschool.tuitionpayment.entity.DormRoom;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/20 星期三 19:32
+ * @Description: com.chuanghai.smartschool.tuitionpayment.dao
+ * @Version: 1.0
+ */
+@Mapper
+public interface DormRoomDao extends BaseMapper<DormRoom> {
+}

+ 3 - 2
src/main/java/com/chuanghai/smartschool/tuitionpayment/dao/PayableInfoDao.java

@@ -5,8 +5,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
- * 学生应缴数据 
- * 
+ * 学生应缴数据
+ *
  * @author codingliang
  * @email codingliang@gmail.com
  * @date 2021-08-12 15:52:41
@@ -14,4 +14,5 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface PayableInfoDao extends BaseMapper<PayableInfoEntity> {
     void truncateTable();
+
 }

+ 23 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/DormBuild.java

@@ -0,0 +1,23 @@
+package com.chuanghai.smartschool.tuitionpayment.entity;
+
+import lombok.*;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Setter
+@Getter
+@ToString
+public class DormBuild {
+    /**
+     * 楼栋ID
+     */
+    private Integer buildId;
+
+    /**
+     * 楼栋名称
+     */
+
+    private String buildName;
+
+
+}

+ 32 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/DormFloor.java

@@ -0,0 +1,32 @@
+package com.chuanghai.smartschool.tuitionpayment.entity;
+
+import lombok.*;
+
+/**
+ * @Author: bingo
+ * @Date: 2022/3/4 星期五 14:50
+ * @Description: com.chuanghai.repair.entity
+ * @version: 1.0
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Setter
+@Getter
+@ToString
+public class DormFloor {
+    /**
+     * 楼层ID
+     */
+    private Integer floorId;
+
+    /**
+     * 楼层名称
+     */
+    private String floorName;
+
+    /**
+     * 楼栋ID
+     */
+    private String buildId;
+
+}

+ 34 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/DormRoom.java

@@ -0,0 +1,34 @@
+package com.chuanghai.smartschool.tuitionpayment.entity;
+
+import lombok.*;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Setter
+@Getter
+@ToString
+
+public class DormRoom {
+    /**
+     * 房间ID
+     */
+
+    private Integer roomId;
+
+    /**
+     * 房间名称
+     */
+    private String roomName;
+
+    /**
+     * 楼栋ID
+     */
+    private String floorId;
+
+    /**
+     * 楼栋ID
+     */
+    private String buildId;
+
+
+}

+ 11 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/FeedbackMsgEntity.java

@@ -73,6 +73,12 @@ public class FeedbackMsgEntity implements Serializable {
     @ColumnWidth(15)
     @ExcelProperty("反馈类别")
     private String feedbackItemName;
+    /**
+     * 宿舍号
+     */
+    @ColumnWidth(15)
+    @ExcelProperty("宿舍号")
+    private String feedbackRoom;
 
     /**
      * 反馈处理内容
@@ -97,5 +103,10 @@ public class FeedbackMsgEntity implements Serializable {
     @ExcelProperty(value = "反馈处理时间", converter = LocalDateTimeConverter.class)
     private LocalDateTime handleTime;
 
+    /**
+     * 反馈图片
+     */
+    @ExcelIgnore
+    private String image;
 
 }

+ 6 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayOrderDeleteEntity.java

@@ -1,5 +1,6 @@
 package com.chuanghai.smartschool.tuitionpayment.entity;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -160,5 +161,10 @@ public class PayOrderDeleteEntity implements Serializable {
      */
     private String txtType;
 
+    /**
+     * 学院名称
+     */
+    @ExcelIgnore
+    private String collegeName ;
 
 }

+ 6 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayOrderEntity.java

@@ -188,6 +188,7 @@ public class PayOrderEntity implements Serializable {
 	 */
 	@ExcelProperty("宿舍")
 	@ColumnWidth(15)
+	@ExcelIgnore
 	private String dorm ;
 	/**
 	 * 学生编号(学号)
@@ -205,6 +206,11 @@ public class PayOrderEntity implements Serializable {
 	 */
 	@ExcelIgnore
 	private String txtType ;
+	/**
+	 * 学院名称
+	 */
+	@ExcelIgnore
+	private String collegeName ;
 
 
 

+ 19 - 6
src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayableInfoEntity.java

@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.chuanghai.smartschool.tuitionpayment.conver.aliexcel.PayStatuConverter;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
@@ -30,6 +31,7 @@ public class PayableInfoEntity implements Serializable {
 	@ExcelIgnore
 	@TableId
 	private Long id;
+
 	/**
 	 * 学号
 	 */
@@ -73,6 +75,12 @@ public class PayableInfoEntity implements Serializable {
 	@ExcelProperty("班级名称")
 	private String className;
 	/**
+	 * 订单状态    1 未支付  2已支付 3部分支付 0正在支付
+	 */
+	@ExcelProperty(value = "支付状态", converter= PayStatuConverter.class)
+	@ColumnWidth(15)
+	private String payItemType ;
+	/**
 	 * 应付金额
 	 */
 	@ColumnWidth(15)
@@ -109,11 +117,7 @@ public class PayableInfoEntity implements Serializable {
 	@ExcelProperty("缴费项目")
 	private String paymentItem;
 
-	/**
-	 * 订单状态    1 未支付  2已支付
-	 */
-	@ExcelIgnore
-	private String payItemType ;
+
 
 	/**
 	 * 缴费名单创建时间
@@ -174,5 +178,14 @@ public class PayableInfoEntity implements Serializable {
 	 */
 	@ExcelIgnore
 	private String serialNumber;
-
+	/**
+	 * 支付人微校账号
+	 */
+	@ExcelIgnore
+	private String payerCardNumber;
+	/**
+	 * 订单编号
+	 */
+	@ExcelIgnore
+	private String orderNo;
 }

+ 58 - 42
src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayableInfoWaterDeleteEntity.java

@@ -24,6 +24,7 @@ import java.time.LocalDateTime;
 public class PayableInfoWaterDeleteEntity implements Serializable {
 
 
+	private static final long serialVersionUID = 6919069740618394279L;
 	/**
 	 * 应缴信息id
 	 */
@@ -31,29 +32,12 @@ public class PayableInfoWaterDeleteEntity implements Serializable {
 	@TableId
 	private Long id;
 	/**
-	 * 学号
-	 */
-	@ColumnWidth(35)
-	@ExcelProperty("身份证号")
-	private String studentNo;
-	/**
-	 * 姓名
-	 */
-	@ColumnWidth(10)
-	@ExcelProperty("姓名")
-	private String studentName;
-	/**
-	 * 年级
-	 */
-	@ColumnWidth(20)
-	@ExcelProperty("年级")
-	private String grade;
-	/**
 	 * 宿舍号
 	 */
 	@ColumnWidth(20)
 	@ExcelProperty("宿舍号")
 	private String dorm;
+
 	/**
 	 * 学院名称
 	 */
@@ -61,42 +45,73 @@ public class PayableInfoWaterDeleteEntity implements Serializable {
 	@ExcelProperty("学院名称")
 	private String collegeName;
 	/**
-	 * 专业名称
+	 * 入住信息
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("入住信息")
+	private String checkInfo;
+
+	/**
+	 * 上月电表
 	 */
 	@ColumnWidth(30)
-	@ExcelProperty("专业名称")
-	private String majorName;
+	@ExcelProperty("上月电表")
+	private String lastElectry;
 	/**
-	 * 班级名称
+	 * 本月电表
 	 */
 	@ColumnWidth(30)
-	@ExcelProperty("班级名称")
-	private String className;
+	@ExcelProperty("本月电表")
+	private String nowElectry;
 	/**
-	 * 应付金额
+	 * 本月吨数
 	 */
 	@ColumnWidth(20)
-	@ExcelProperty("应付金额")
+	@ExcelProperty("本月吨数")
+	private BigDecimal nowTonnage;
+
+	/**
+	 * 补助吨数
+	 */
+	@ColumnWidth(35)
+	@ExcelProperty("补助吨数")
+	private String subsidiesTonnage ;
+
+
+
+	/**
+	 * 应缴金额
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("应缴金额")
 	private BigDecimal realPayAmount;
+
 	/**
-	 * 必交费用 格式:教材费:1000\学费:18000\住宿费:1800
+	 * 费用详情
 	 */
 	@ColumnWidth(50)
 	@ExcelProperty("费用详情")
 	private String payAmountDetail;
 
 	/**
+	 * 缴费月度
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("缴费月度")
+	private String payMonth;
+	/**
+	 * 年级
+	 */
+	@ExcelIgnore
+	private String grade ;
+	/**
 	 * 备注
 	 */
 	@ColumnWidth(50)
 	@ExcelProperty("备注")
 	private String orderNotice;
-	/**
-	 * 校区
-	 */
-	@ColumnWidth(20)
-	@ExcelProperty("校区")
-	private String studentCampus;
+
+
 	/**
 	 * 缴费项目
 	 */
@@ -104,15 +119,6 @@ public class PayableInfoWaterDeleteEntity implements Serializable {
 	@ExcelProperty("缴费项目")
 	private String paymentItem;
 	/**
-	 * 缴费月度
-	 */
-	@ColumnWidth(20)
-	@ExcelProperty("缴费月度")
-	private String payMonth;
-
-
-
-	/**
 	 * 订单状态    1 未支付  2已支付
 	 */
 	@ExcelIgnore
@@ -156,4 +162,14 @@ public class PayableInfoWaterDeleteEntity implements Serializable {
 	@ExcelIgnore
 	private String serialNumber;
 
+	/**
+	 * 支付人微校账号
+	 */
+	@ExcelIgnore
+	private String payerCardNumber;
+	/**
+	 * 订单编号
+	 */
+	@ExcelIgnore
+	private String orderNo;
 }

+ 72 - 47
src/main/java/com/chuanghai/smartschool/tuitionpayment/entity/PayableInfoWaterEntity.java

@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.chuanghai.smartschool.tuitionpayment.conver.aliexcel.PayStatuConverter;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
@@ -24,6 +25,7 @@ import java.time.LocalDateTime;
 public class PayableInfoWaterEntity implements Serializable {
 
 
+	private static final long serialVersionUID = -8352390115575200250L;
 	/**
 	 * 应缴信息id
 	 */
@@ -31,29 +33,12 @@ public class PayableInfoWaterEntity implements Serializable {
 	@TableId
 	private Long id;
 	/**
-	 * 学号
-	 */
-	@ColumnWidth(35)
-	@ExcelProperty("身份证号")
-	private String studentNo;
-	/**
-	 * 姓名
-	 */
-	@ColumnWidth(10)
-	@ExcelProperty("姓名")
-	private String studentName;
-	/**
-	 * 年级
-	 */
-	@ColumnWidth(20)
-	@ExcelProperty("年级")
-	private String grade;
-	/**
 	 * 宿舍号
 	 */
 	@ColumnWidth(20)
-	@ExcelProperty("宿舍号")
+	@ExcelProperty("寝室号")
 	private String dorm;
+
 	/**
 	 * 学院名称
 	 */
@@ -61,62 +46,85 @@ public class PayableInfoWaterEntity implements Serializable {
 	@ExcelProperty("学院名称")
 	private String collegeName;
 	/**
-	 * 专业名称
+	 * 入住信息
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("入住信息")
+	private String checkInfo;
+
+	/**
+	 * 上月电表
 	 */
 	@ColumnWidth(30)
-	@ExcelProperty("专业名称")
-	private String majorName;
+	@ExcelProperty("上月表数")
+	private String lastElectry;
 	/**
-	 * 班级名称
+	 * 本月电表
 	 */
 	@ColumnWidth(30)
-	@ExcelProperty("班级名称")
-	private String className;
+	@ExcelProperty("本月表数")
+	private String nowElectry;
 	/**
-	 * 应付金额
+	 * 本月吨数
 	 */
 	@ColumnWidth(20)
-	@ExcelProperty("应付金额")
-	private BigDecimal realPayAmount;
+	@ExcelProperty("本月吨数")
+	private String nowTonnage;
+
 	/**
-	 * 必交费用 格式:教材费:1000\学费:18000\住宿费:1800
+	 * 补助吨数
 	 */
-	@ColumnWidth(50)
-	@ExcelProperty("费用详情")
-	private String payAmountDetail;
+	@ColumnWidth(35)
+	@ExcelProperty("补助吨数")
+	private String subsidiesTonnage ;
 
 	/**
-	 * 备注
+	 * 订单状态    1 未支付  2已支付 3部分支付  0 正在支付
 	 */
-	@ColumnWidth(50)
-	@ExcelProperty("备注")
-	private String orderNotice;
+	@ExcelProperty(value = "支付状态", converter= PayStatuConverter.class)
+	@ColumnWidth(15)
+	private String payItemType ;
+
 	/**
-	 * 校区
+	 * 应缴金额
 	 */
 	@ColumnWidth(20)
-	@ExcelProperty("校区")
-	private String studentCampus;
+	@ExcelProperty("应付金额")
+	private BigDecimal realPayAmount;
+
 	/**
-	 * 缴费项目
+	 * 费用详情
 	 */
-	@ColumnWidth(20)
-	@ExcelProperty("缴费项目")
-	private String paymentItem;
+	@ColumnWidth(50)
+	@ExcelProperty("缴费详情")
+	private String payAmountDetail;
+
 	/**
 	 * 缴费月度
 	 */
 	@ColumnWidth(20)
 	@ExcelProperty("缴费月度")
 	private String payMonth;
-
+	/**
+	 * 年级
+	 */
+    @ExcelProperty("年级")
+	private String grade ;
+	/**
+	 * 备注
+	 */
+	@ColumnWidth(50)
+	@ExcelProperty("备注")
+	private String orderNotice;
 
 
 	/**
-	 * 订单状态    1 未支付  2已支付
+	 * 缴费项目
 	 */
-	@ExcelIgnore
-	private String payItemType ;
+	@ColumnWidth(20)
+	@ExcelProperty("缴费项目")
+	private String paymentItem;
+
 
 	/**
 	 * 缴费名单创建时间
@@ -137,6 +145,7 @@ public class PayableInfoWaterEntity implements Serializable {
 	 */
 	@ColumnWidth(35)
 	@ExcelProperty("银行账户")
+	@ExcelIgnore
 	private String payableAccount ;
 
 	/**
@@ -155,5 +164,21 @@ public class PayableInfoWaterEntity implements Serializable {
 	 */
 	@ExcelIgnore
 	private String serialNumber;
+	/**
+	 * 支付人
+	 */
+	@ExcelIgnore
+	private String payerName;
+
+	/**
+	 * 支付人微校账号
+	 */
+	@ExcelIgnore
+	private String payerCardNumber;
+	/**
+	 * 订单编号
+	 */
+	@ExcelIgnore
+	private String orderNo;
 
 }

+ 5 - 5
src/main/java/com/chuanghai/smartschool/tuitionpayment/listener/aliexcel/MyPayableInfoWaterImportListener.java

@@ -49,7 +49,7 @@ public class MyPayableInfoWaterImportListener extends AnalysisEventListener<Paya
         if (list.size() <=0) {
             throw new RRException(BizCodeEnume.FILE_IMPORT_ERROR,"请使用正确的模板导入数据");
         }else {
-            if (list.get(0).getPaymentItem() == null) {
+            if (!list.get(0).getPaymentItem().equals("水费缴纳")) {
                 throw new RRException(BizCodeEnume.FILE_IMPORT_ERROR,"请使用正确的模板导入数据");
             }
 
@@ -57,6 +57,7 @@ public class MyPayableInfoWaterImportListener extends AnalysisEventListener<Paya
         try {
             payableInfoWaterService.saveBatch(list);
         } catch (Exception e) {
+            e.printStackTrace();
             throw new RRException(BizCodeEnume.DATA_IS_EXIST, "导入失败,导入模板中重复数据,请核查后重新导入");
         }
 
@@ -84,12 +85,11 @@ public class MyPayableInfoWaterImportListener extends AnalysisEventListener<Paya
      *
      * @param itemName 缴费项目
      */
-    public PayableInfoWaterEntity query(String itemName, String studentNo, String years, String studentName) {
+    public PayableInfoWaterEntity query(String itemName, String dorm, String years) {
         QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
         wrapper.eq("payment_item", itemName)
-                .eq("student_no", studentNo)
-                .eq("pay_month", years)
-                .eq("student_name", studentName);
+                .eq("dorm", dorm)
+                .eq("pay_month", years);
         PayableInfoWaterEntity one = payableInfoWaterService.getOne(wrapper);
         return one;
 

+ 21 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/DormBuildService.java

@@ -0,0 +1,21 @@
+package com.chuanghai.smartschool.tuitionpayment.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.smartschool.tuitionpayment.entity.DormBuild;
+
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/20 星期三 19:29
+ * @Description: com.chuanghai.smartschool.tuitionpayment.service
+ * @Version: 1.0
+ */
+public interface DormBuildService extends IService<DormBuild> {
+    /**
+     * 查询所有楼栋信息  显示楼栋数
+     */
+    List<DormBuild> queryAllBuild()throws  Exception;
+
+
+}

+ 20 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/DormFloorService.java

@@ -0,0 +1,20 @@
+package com.chuanghai.smartschool.tuitionpayment.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.smartschool.tuitionpayment.entity.DormFloor;
+
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/20 星期三 19:29
+ * @Description: com.chuanghai.smartschool.tuitionpayment.service
+ * @Version: 1.0
+ */
+public interface DormFloorService extends IService<DormFloor> {
+
+    /**
+     * 通过楼栋ID 查询相关楼栋的楼层情况  显示楼层数
+     */
+    List<DormFloor> queryAllFloorByBuildID(String buildId) throws  Exception;
+}

+ 20 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/DormRoomService.java

@@ -0,0 +1,20 @@
+package com.chuanghai.smartschool.tuitionpayment.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.smartschool.tuitionpayment.entity.DormRoom;
+
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/20 星期三 19:29
+ * @Description: com.chuanghai.smartschool.tuitionpayment.service
+ * @Version: 1.0
+ */
+public interface DormRoomService extends IService<DormRoom> {
+
+    /**
+     * 通过楼层ID 查询相关楼层的房间情况  显示房间号
+     */
+    List<DormRoom> queryAllRoomByFloorID(String floorId) throws Exception;
+}

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

@@ -9,6 +9,7 @@ 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.PayOrderReceiveVO;
+import com.chuanghai.smartschool.tuitionpayment.vo.YearVo;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -36,7 +37,7 @@ public interface PayOrderService extends IService<PayOrderEntity> {
      * @param studentNo 学号
      * @return
      */
-    boolean isAlreadyPay(String studentNo, String itemName, String payYears, Integer notPaySize, String payMethod, String payDetail);
+    boolean isAlreadyPay(String studentNo, String itemName, String payYears, Integer notPaySize, String payMethod, String payDetail, String dorm);
 
     boolean isAlreadyPayWater(String dorm, String itemName, String payYears);
 
@@ -64,5 +65,14 @@ public interface PayOrderService extends IService<PayOrderEntity> {
     Integer queryCurrentPayedRecordNum(PayOrderQueryTO queryTO);
 
     PageUtils queryAllOrder(String cardNumber, PageParam pageParam, String status, String itemName, String payYear, String selfCardNumber);
+    String queryPayerName(Long payinfoId);
+
+    List<PayOrderEntity> queryWaterOrder( String payYear, String payStatu, String itemName, String cardNumber);
+
+    Long queryPayInfoByOrderId(String orderId);
+
+    void queryByOrderRestore(Long orderId);
+
+    List<YearVo> queryWaterOrderYear(String cardNumber, String payStatu);
 }
 

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

+ 16 - 5
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayableInfoService.java

@@ -21,25 +21,36 @@ import java.util.List;
 public interface PayableInfoService extends IService<PayableInfoEntity> {
 
     PageUtils queryPage(PayOrderQueryTO queryTO, PageParam pageParam);
-    String queryAmount( PayOrderQueryTO queryTO);
+
+    String queryAmount(PayOrderQueryTO queryTO);
 
     List<PayableInfoEntity> getPayableInfoByCardNumber(String cardNumber, String studentName);
 
 
-    PayableInfoEntity getByStudentNo(String studentNo ,String itemName, String payYears);
+    PayableInfoEntity getByStudentNo(String studentNo, String itemName, String payYears);
 
     void importByExcel(MultipartFile file) throws IOException;
 
     void downloadResult(HttpServletResponse response, PayOrderQueryTO queryTO, List<String> downIDs) throws IOException;
+
     void truncateTable();
-    void exportTxt(HttpServletResponse response, PayOrderQueryTO queryTO , List<String> downIDs) throws IOException;
+
+    void exportTxt(HttpServletResponse response, PayOrderQueryTO queryTO, List<String> downIDs) throws IOException;
 
     /**
      * 通过身份证查询缴费名单里对应人员的学号
-     * @param studentNo   身份证
+     *
+     * @param studentNo 身份证
      * @return
      */
-    public String getSerialNumber(String studentNo);
+    String getSerialNumber(String studentNo);
+
+    Boolean updatePayInfoStatu(Long payInfoId, String payStatu, String cardNumber,String orderNo);
+
+    Boolean queryInforPay(Long payWaterInfoId, String cardNumber);
+
+    List<PayableInfoEntity> queryPayInfoById(Long payInfoId);
 
+    void unlock(Long payInfoId);
 }
 

+ 15 - 1
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/PayableInfoWaterService.java

@@ -5,6 +5,7 @@ import com.chuanghai.smartschool.tuitionpayment.common.utils.PageParam;
 import com.chuanghai.smartschool.tuitionpayment.common.utils.PageUtils;
 import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterEntity;
 import com.chuanghai.smartschool.tuitionpayment.to.PayOrderQueryTO;
+import com.chuanghai.smartschool.tuitionpayment.vo.YearVo;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
@@ -24,7 +25,7 @@ public interface PayableInfoWaterService extends IService<PayableInfoWaterEntity
 
     PageUtils queryPage(PayOrderQueryTO queryTO, PageParam pageParam);
 
-    String queryAmount(String itemName, String payItemType, String keyword, String payStatus, String createTime, String payTime);
+//    String queryAmount(String itemName, String payItemType, String keyword, String payStatus, String createTime, String payTime);
 
     String queryAmountWater(PayOrderQueryTO queryTO);
 
@@ -36,5 +37,18 @@ public interface PayableInfoWaterService extends IService<PayableInfoWaterEntity
 
     PayableInfoWaterEntity getByStudentNo(String studentNo, String itemName, String payYear);
 
+    List<PayableInfoWaterEntity> queryWaterInfo(String dorm, String year, String payStatu);
+
+    List<YearVo> queryAllYear(String dorm, String payStatu);
+
+    List<String> queryWaterType();
+
+    Boolean queryWaterPay(Long payWaterInfoId,String cardNumber);
+
+    Boolean updateWaterInfoStatu(Long payWaterInfoId, String payStatu, String cardNumber,String orderNo);
+
+    void unlock(Long payInfoId);
+
+    String queryByPayInfoId(Long payInfoId);
 }
 

+ 23 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/DormBuildServiceImpl.java

@@ -0,0 +1,23 @@
+package com.chuanghai.smartschool.tuitionpayment.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chuanghai.smartschool.tuitionpayment.dao.DormBuildDao;
+import com.chuanghai.smartschool.tuitionpayment.entity.DormBuild;
+import com.chuanghai.smartschool.tuitionpayment.service.DormBuildService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/20 星期三 19:31
+ * @Description: com.chuanghai.smartschool.tuitionpayment.service.impl
+ * @Version: 1.0
+ */
+@Service("dormBuildService")
+public class DormBuildServiceImpl extends ServiceImpl<DormBuildDao, DormBuild> implements DormBuildService {
+    @Override
+    public List<DormBuild> queryAllBuild() throws Exception {
+        return this.list();
+    }
+}

+ 26 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/DormFloorServiceImpl.java

@@ -0,0 +1,26 @@
+package com.chuanghai.smartschool.tuitionpayment.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chuanghai.smartschool.tuitionpayment.dao.DormFloorDao;
+import com.chuanghai.smartschool.tuitionpayment.entity.DormFloor;
+import com.chuanghai.smartschool.tuitionpayment.service.DormFloorService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/20 星期三 19:31
+ * @Description: com.chuanghai.smartschool.tuitionpayment.service.impl
+ * @Version: 1.0
+ */
+@Service("dormFloorService")
+public class DormFloorServiceImpl extends ServiceImpl<DormFloorDao, DormFloor> implements DormFloorService {
+    @Override
+    public List<DormFloor> queryAllFloorByBuildID(String buildId) throws Exception {
+        QueryWrapper<DormFloor> wapper = new QueryWrapper<>();
+        wapper.eq("build_id",buildId);
+        return this.list(wapper);
+    }
+}

+ 29 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/DormRoomServiceImpl.java

@@ -0,0 +1,29 @@
+package com.chuanghai.smartschool.tuitionpayment.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chuanghai.smartschool.tuitionpayment.dao.DormRoomDao;
+import com.chuanghai.smartschool.tuitionpayment.entity.DormRoom;
+import com.chuanghai.smartschool.tuitionpayment.service.DormRoomService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/7/20 星期三 19:31
+ * @Description: com.chuanghai.smartschool.tuitionpayment.service.impl
+ * @Version: 1.0
+ */
+@Service("dormRoomService")
+public class DormRoomServiceImpl extends ServiceImpl<DormRoomDao, DormRoom> implements DormRoomService {
+
+
+
+    @Override
+    public List<DormRoom> queryAllRoomByFloorID(String floorId) throws Exception {
+        QueryWrapper<DormRoom> wrapper = new QueryWrapper<>();
+        wrapper.eq("floor_id",floorId);
+        return this.list(wrapper);
+    }
+}

+ 154 - 31
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayOrderServiceImpl.java

@@ -12,7 +12,10 @@ 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.*;
+import com.chuanghai.smartschool.tuitionpayment.controller.BankItemDetailController;
+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.dao.PayOrderDao;
 import com.chuanghai.smartschool.tuitionpayment.entity.*;
 import com.chuanghai.smartschool.tuitionpayment.enume.PayMethod;
@@ -26,10 +29,7 @@ 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;
-import com.chuanghai.smartschool.tuitionpayment.vo.CreateOrderResultVO;
-import com.chuanghai.smartschool.tuitionpayment.vo.OrderStatusVO;
-import com.chuanghai.smartschool.tuitionpayment.vo.PayInfoDetailVO;
-import com.chuanghai.smartschool.tuitionpayment.vo.PayOrderReceiveVO;
+import com.chuanghai.smartschool.tuitionpayment.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -71,6 +71,7 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
     private PayableInfoController payableInfoController;
     @Autowired
     private BankItemDetailController bankItemDetailController;
+    private String orderId;
 
     @Override
     public PageUtils queryPage(PayOrderQueryTO queryTO, PageParam pageParam) {
@@ -82,6 +83,7 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
                 wrapper.eq("status", "1");
             }
         }
+
         wrapper.eq(StringUtils.hasText(queryTO.getBankName()), "pay_bank", queryTO.getBankName());
 
         //  wrapper.eq(StringUtils.hasText(queryTO.getOrderNo()), "order_no", queryTO.getOrderNo());
@@ -168,7 +170,7 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
      */
     @Override
     public boolean isAlreadyPay(String studentNo, String itemName, String payYears, Integer notPaySize, String
-            payMethod, String payDetail) {
+            payMethod, String payDetail, String dorm) {
         QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
         wrapper.eq("pay_for_identify", studentNo);
         wrapper.eq("pay_item", itemName);
@@ -182,6 +184,10 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
         if (payMethod != null) {
             wrapper.eq("pay_method", payMethod);
         }
+        if (dorm != null) {
+            wrapper.eq("dorm", dorm);
+        }
+
         wrapper.eq("status", PayStatus.ALREADY_PAY.getCode());
 
         List<PayOrderEntity> payList = this.list(wrapper);
@@ -380,7 +386,6 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
      */
     @Override
     public List<CreateOrderResultVO> createOrder(String cardNumber, PayOrderReceiveVO payOrderReceiveVO) {
-
         List<OrderReceiveTO> orderReceiveTOS = receiveOrder(cardNumber, payOrderReceiveVO);
         List<CreateOrderResultVO> createOrderResultVOList = new ArrayList<>();
         //记录遍历的次数
@@ -388,13 +393,28 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
             OrderReceiveTO orderReceiveTO = orderReceiveTOS.get(m);
 
             PayOrderReceiveVO payOrderReceiveVO1 = orderReceiveTO.getPayOrderReceiveVO();
-            QueryWrapper<PayableInfoEntity> infoOrder = new QueryWrapper<>();
-            infoOrder.eq("id", payOrderReceiveVO1.getId());
-            PayableInfoEntity infoEntity = payableInfoService.getOne(infoOrder);
+            PayableInfoEntity infoEntity;
+            PayableInfoWaterEntity infoWaterEntity;
             //通过前端传递的缴费订单的ID查询 对应的card_number
-            String cardNumber1 = infoEntity.getCardNumber();
-            log.info("创建订单的参数【{}】", orderReceiveTO);
-            log.info("通过缴费订单【{}】查询的CardNumber【{}】", payOrderReceiveVO1.getId(), cardNumber1);
+            String cardNumber1 = "";
+            if (payOrderReceiveVO1.getItemName().equals("水费缴纳")) {
+                QueryWrapper<PayableInfoWaterEntity> infoOrder = new QueryWrapper<>();
+                infoOrder.eq("id", payOrderReceiveVO1.getId());
+                infoWaterEntity = payableInfoWaterService.getOne(infoOrder);
+
+                cardNumber1 = infoWaterEntity.getDorm();
+                log.info("创建订单的参数【{}】", orderReceiveTO);
+                log.info("通过缴费订单【{}】查询的CardNumber【{}】", payOrderReceiveVO1.getId(), cardNumber1);
+            } else {
+                QueryWrapper<PayableInfoEntity> infoOrder = new QueryWrapper<>();
+                infoOrder.eq("id", payOrderReceiveVO1.getId());
+                infoEntity = payableInfoService.getOne(infoOrder);
+                cardNumber1 = infoEntity.getCardNumber();
+                log.info("创建订单的参数【{}】", orderReceiveTO);
+                log.info("通过缴费订单【{}】查询的CardNumber【{}】", payOrderReceiveVO1.getId(), cardNumber1);
+            }
+
+
             String studentNo = payOrderReceiveVO1.getStudentNo();
             String dorm = payOrderReceiveVO1.getDorm();
             if (!StringUtils.hasText(dorm)) {
@@ -426,8 +446,8 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
                             .eq("payment_item", itemName)
                             .eq("pay_item_type", "1");
                     //将删除的水费缴费信息记录到删除记录表中
-                    payableInfoWaterService.remove(wrapper);
                     PayableInfoWaterEntity payableInfoWaterEntity = payableInfoWaterService.getOne(wrapper);
+                    payableInfoWaterService.remove(wrapper);
                     PayableInfoWaterDeleteEntity payableInfoWaterDeleteEntity = new PayableInfoWaterDeleteEntity();
                     BeanUtils.copyProperties(payableInfoWaterEntity, payableInfoWaterDeleteEntity);
                     payableInfoWaterDeleteService.save(payableInfoWaterDeleteEntity);
@@ -436,21 +456,26 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
                 }
             } else {
                 // 判断除水费外其他费用是否缴纳
-                boolean alreadyPay = isAlreadyPay(studentNo, itemName, payYear, payOrderReceiveVO1.getNotPaySize(), payOrderReceiveVO1.getPayMethod(), payDetial);
-                PayableInfoEntity byIdInfo = payableInfoService.getById(payOrderReceiveVO1.getId());
-                //如果在首页已经缴完本订单的全部项目,则将本订单删除,跳转到首页
-                if (byIdInfo != null && (byIdInfo.getNotPayDetail().equals("") || byIdInfo.getNotPayDetail() == null)) {
+                boolean alreadyPay = isAlreadyPay(studentNo, itemName, payYear, payOrderReceiveVO1.getNotPaySize(), payOrderReceiveVO1.getPayMethod(), payDetial, null);
+
+//                PayableInfoEntity byIdInfo = payableInfoService.getById(payOrderReceiveVO1.getId());
+                List<PayableInfoEntity> infoEntityList = payableInfoService.queryPayInfoById(payOrderReceiveVO1.getId());
+                infoEntityList.forEach(byIdInfo -> {
+                    //如果在首页已经缴完本订单的全部项目,则将本订单删除,跳转到首页
+                    if (byIdInfo != null && (byIdInfo.getNotPayDetail().equals("") || byIdInfo.getNotPayDetail() == null)) {
 //                    QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
 //                    wrapper.eq("payinfo_id", byIdInfo.getId())
 //                            .eq("status", "1");
-                    //TODO 删除订单
-                    payOrderService.removeById(byIdInfo.getId());
-                    PayOrderEntity one = payOrderService.getById(byIdInfo.getId());
-                    PayOrderDeleteEntity payOrderDeleteEntity = new PayOrderDeleteEntity();
-                    BeanUtils.copyProperties(one, payOrderDeleteEntity);
-                    payOrderDeleteService.save(payOrderDeleteEntity);
-                    throw new RRException(BizCodeEnume.ORDER_IS_PAY, "该订单已完成缴费,请勿重复缴费");
-                }
+                        //TODO 删除订单
+                        PayOrderEntity one = payOrderService.getById(byIdInfo.getId());
+                        payOrderService.removeById(byIdInfo.getId());
+                        PayOrderDeleteEntity payOrderDeleteEntity = new PayOrderDeleteEntity();
+                        BeanUtils.copyProperties(one, payOrderDeleteEntity);
+                        payOrderDeleteService.save(payOrderDeleteEntity);
+                    }
+                });
+                // throw new RRException(BizCodeEnume.ORDER_IS_PAY, "该订单已完成缴费,请勿重复缴费");
+
                 if (alreadyPay) {
                     throw new RRException(BizCodeEnume.DATA_IS_EXIST, "学号【" + studentNo + "】已缴费,请勿重复缴费");
                 }
@@ -462,7 +487,7 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
             String grade = "";
 
             if (itemName.equals("水费缴纳")) {
-                payableInfoWater = payableInfoWaterService.getByStudentNo(studentNo, itemName, payYear);
+                payableInfoWater = payableInfoWaterService.getByStudentNo(dorm, itemName, payYear);
                 // 获取学生入学年份
                 grade = payableInfoWater.getGrade();
             } else {
@@ -483,7 +508,7 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
                 gradeStr += jsonArray.get(i);
             }
             if (!(gradeStr.contains(String.valueOf(currentGrade)))) {
-                throw new RRException(BizCodeEnume.PAYABLE_INFO_IS_NOT_EXIT, "当前学生所在年级不允许线上缴费");
+                throw new RRException(BizCodeEnume.PAY_GRADE_IS_NOT_SUPPORT, "当前学生所在年级不允许线上缴费");
             }
 
 
@@ -580,10 +605,25 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
                         payOrderEntity.setDorm(dorm);
                         payOrderEntity.setPayinfoId(payableInfoWater.getId());
                         payOrderEntity.setRealPayAmount(payableInfoWater.getRealPayAmount());
-                        payOrderEntity.setStudentName(payableInfoWater.getStudentName());
-                        payOrderEntity.setClassName(payableInfoWater.getClassName());
+//                        payOrderEntity.setStudentName(payableInfoWater.getStudentName());
+//                        payOrderEntity.setClassName(payableInfoWater.getClassName());
                         payOrderEntity.setSerialNumber(payableInfoWater.getSerialNumber());
                         payOrderEntity.setNowPayAmount(payableInfoWater.getRealPayAmount());
+                        payOrderEntity.setCollegeName(payableInfoWater.getCollegeName());
+//                        payOrderEntity.setDorm(dorm);
+//                        payOrderEntity.setPayinfoId(payableInfoWater.getId());
+//                        payOrderEntity.setRealPayAmount(payableInfoWater.getRealPayAmount());
+//                        payOrderEntity.setStudentName(payableInfoWater.getStudentName());
+//                        payOrderEntity.setClassName(payableInfoWater.getClassName());
+//                        payOrderEntity.setSerialNumber(payableInfoWater.getSerialNumber());
+//                        payOrderEntity.setNowPayAmount(payableInfoWater.getRealPayAmount());
+                        //更新水费订单中的账单信息
+                        payOrderEntity.setPayerIdentify(payableInfoWater.getCheckInfo());
+                        payOrderEntity.setPayForIdentify(payableInfoWater.getLastElectry());
+                        payOrderEntity.setStudentName(payableInfoWater.getNowElectry());
+                        payOrderEntity.setClassName(payableInfoWater.getNowTonnage());
+                        payOrderEntity.setParentOrder(payableInfoWater.getSubsidiesTonnage());
+
                     }
                 } else {
                     if (payableInfo != null) {
@@ -592,6 +632,8 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
                         payOrderEntity.setStudentName(payableInfo.getStudentName());
                         payOrderEntity.setClassName(payableInfo.getClassName());
                         payOrderEntity.setSerialNumber(payableInfo.getSerialNumber());
+                        payOrderEntity.setCollegeName(payableInfo.getCollegeName());
+
                     }
 
                 }
@@ -1095,12 +1137,20 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
                     .or()
                     .like("pay_for_identify", keyword)
                     .or()
-                    .eq("order_no", keyword));
+                    .like("order_no", keyword)
+                    .or()
+                    .like("dorm", keyword)
+                    .or()
+                    .like("payer_name", keyword));
+
         }
         wrapper.eq("pay_item", queryTO.getItemName());
         if (StringUtils.hasText(queryTO.getPayYear())) {
             wrapper.eq("pay_year", queryTO.getPayYear());
         }
+        if (StringUtils.hasText(queryTO.getCardNumber())) {
+            wrapper.eq("payer_card_number", queryTO.getCardNumber());
+        }
 
         String flag = queryTO.getFlag();
         String createDateStr = queryTO.getCreateDateStr();
@@ -1168,4 +1218,77 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
         page.setRecords(records);
         return new PageUtils(page);
     }
+
+    @Override
+    public String queryPayerName(Long payinfoId) {
+        QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("payinfo_id", payinfoId)
+                .eq("pay_item", "水费缴纳")
+                .eq("status", "2");
+        return this.getOne(wrapper).getPayerName();
+    }
+
+    @Override
+    public List<PayOrderEntity> queryWaterOrder(String payYear, String payStatu, String itemName, String cardNumber) {
+        QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
+
+        wrapper.eq("pay_item", itemName)
+                .eq("status", payStatu);
+        if (StringUtils.hasText(payYear)) {
+            wrapper.like("pay_year", payYear);
+        }
+        if (StringUtils.hasText(cardNumber)) {
+            wrapper.eq("payer_card_number", cardNumber);
+        }
+        return this.list(wrapper);
+    }
+
+    @Override
+    public Long queryPayInfoByOrderId(String orderId) {
+        this.orderId = orderId;
+        QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("order_no", orderId);
+        PayOrderEntity one = this.getOne(wrapper);
+        return one.getPayinfoId();
+    }
+
+    @Override
+    public void queryByOrderRestore(Long orderId) {
+        QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
+        QueryWrapper<PayOrderDeleteEntity> deleteWapper = new QueryWrapper<>();
+        wrapper.eq("order_no", orderId);
+        PayOrderEntity orderEntity = this.getOne(wrapper);
+        if (StringUtils.isEmpty(orderEntity)) {
+            deleteWapper.eq("order_no", orderId);
+            PayOrderDeleteEntity deleteEntity = payOrderDeleteService.getOne(deleteWapper);
+            PayOrderEntity orderEntity1 = new PayOrderEntity();
+            if (!StringUtils.isEmpty(deleteEntity)) {
+                BeanUtils.copyProperties(deleteEntity, orderEntity1);
+            }
+            this.save(orderEntity1);
+        }
+
+    }
+
+    @Override
+    public List<YearVo> queryWaterOrderYear(String cardNumber, String payStatu) {
+        QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("pay_item","水费缴纳")
+        .eq("payer_card_number",cardNumber)
+        .eq("status",payStatu);
+        List<PayOrderEntity> list = this.list(wrapper);
+        List<YearVo> yearList = new ArrayList<>();
+        for (int m = 0; m < list.size(); m++) {
+            YearVo yearVo = new YearVo();
+            String year = list.get(m).getPayYear().split("年")[0];
+            yearVo.setText(year);
+            yearVo.setValue(String.valueOf(m));
+            yearList.add(yearVo);
+        }
+        List<YearVo> uniqueStr = yearList.stream().collect(Collectors.collectingAndThen(
+                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(YearVo::getText))), ArrayList::new));
+
+        return uniqueStr;
+    }
+
 }

+ 29 - 15
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayServiceImpl.java

@@ -12,9 +12,7 @@ import com.chuanghai.smartschool.tuitionpayment.entity.PayOrderDeleteEntity;
 import com.chuanghai.smartschool.tuitionpayment.entity.PayOrderEntity;
 import com.chuanghai.smartschool.tuitionpayment.enume.PayMethod;
 import com.chuanghai.smartschool.tuitionpayment.enume.PayStatus;
-import com.chuanghai.smartschool.tuitionpayment.service.PayOrderDeleteService;
-import com.chuanghai.smartschool.tuitionpayment.service.PayOrderService;
-import com.chuanghai.smartschool.tuitionpayment.service.PayService;
+import com.chuanghai.smartschool.tuitionpayment.service.*;
 import com.chuanghai.smartschool.tuitionpayment.utils.CCBRSASig;
 import com.chuanghai.smartschool.tuitionpayment.utils.JXNXSPayUtil;
 import com.chuanghai.smartschool.tuitionpayment.utils.MySignatureUtil;
@@ -72,6 +70,10 @@ public class PayServiceImpl implements PayService {
     private PayableInfoController payableInfoController;
     @Autowired
     private WechatController wechatController;
+    @Autowired
+    private PayableInfoService payableInfoService;
+    @Autowired
+    private PayableInfoWaterService payableInfoWaterService;
 
     /**
      * 【建行】获取微信jsapi支付的参数
@@ -82,7 +84,7 @@ public class PayServiceImpl implements PayService {
      * @return
      */
     @Override
-    public WechatJsApiPayParamVO getCCBJsApiParam(String openId, String orderNo, String secondOrderNo) {
+    public WechatJsApiPayParamVO getCCBJsApiParam(String openId, String orderNo, String secondOrderNo, String payment) {
         log.info("输出用户的支付参数------openId【{}】", openId);
         // 查询订单
         PayOrderEntity payOrder = payOrderService.getByOrderNo(orderNo);
@@ -93,7 +95,7 @@ public class PayServiceImpl implements PayService {
         }
 
         // 查询用户是否已缴费
-        boolean alreadyPay = payOrderService.isAlreadyPay(payOrder.getPayForIdentify(), payOrder.getPayItem(), payOrder.getPayYear(), payOrder.getNotPaySize(), payOrder.getPayMethod(), payOrder.getPayDetail());
+        boolean alreadyPay = payOrderService.isAlreadyPay(payOrder.getPayForIdentify(), payOrder.getPayItem(), payOrder.getPayYear(), payOrder.getNotPaySize(), payOrder.getPayMethod(), payOrder.getPayDetail(), payOrder.getDorm());
         if (alreadyPay) {
             throw new RRException(BizCodeEnume.DATA_IS_EXIST, "学号【" + payOrder.getPayForIdentify() + "】已缴费,请勿重复缴费");
         }
@@ -109,7 +111,7 @@ public class PayServiceImpl implements PayService {
         param.put("CURCODE", "01"); // 币种,01表示人民币,目前只支持人民币
         param.put("TXCODE", "530590"); // 交易码,默认530590
         param.put("REMARK1", secondOrderNo); // 备注1,   secondeOrderNo  携带第二次支付的订单号
-        param.put("REMARK2", ""); // 备注2,可不填
+        param.put("REMARK2", payment); // 备注2,可不填     payment  标识本次订单的缴费项目
         param.put("TYPE", "1"); // 接口类型,1- 防钓鱼接口
         param.put("PUB", ccbPayConfig.getPubShort()); // 公钥后 30 位
         param.put("GATEWAY", "0"); // 网关类型,默认0
@@ -162,6 +164,8 @@ public class PayServiceImpl implements PayService {
                     .signType(payParam.get("signType"))
                     .paySign(payParam.get("paySign"))
                     .secondOrderNo(secondOrderNo)
+                    .payMent(payment)
+                    .errmsg(payParam.get("ERRMSG"))
                     .build();
             log.info("请求参数返回【{}】", paramVO.toString());
             return paramVO;
@@ -230,8 +234,14 @@ public class PayServiceImpl implements PayService {
                 if (byOrderNo != null && byOrderNo.getStatus().equals("2")) {
                     payableInfoController.updatePayinfoByOrder(orderNo);
                 }
-
+            } else {
+                //订单支付失败则将缴费名单的订单支付中的状态修改为未支付状态
+                Boolean aBoolean = payableInfoService.updatePayInfoStatu(payOrderService.queryPayInfoByOrderId(orderNo), "1","null","null");
+                if (!aBoolean) {
+                    payableInfoWaterService.updateWaterInfoStatu(payOrderService.queryPayInfoByOrderId(orderNo), "1","null","null");
+                }
             }
+
         }
 
 
@@ -294,7 +304,10 @@ public class PayServiceImpl implements PayService {
 //        for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
 //            System.out.println(entry.getKey() + "==>" + entry.getValue()[0]);
 //        }
+        //第二次订单号
         String secondOrderNo = parameterMap.get("REMARK1")[0];
+        //本次缴费的项目名
+        String payment = parameterMap.get("REMARK2")[0];
         QueryWrapper<PayOrderEntity> ordedrWapper = new QueryWrapper<>();
         ordedrWapper.eq("order_no", secondOrderNo);
         PayOrderEntity byOrderNo = payOrderService.getOne(ordedrWapper);
@@ -303,8 +316,8 @@ public class PayServiceImpl implements PayService {
                 secondOrderNo = "1";
             }
         }
-
-        return wechatConfig.getFontendUrl() + "/#/pages/payState/payState?orderNo=" + parameterMap.get("ORDERID")[0] + "&secondOrderNo=" + secondOrderNo;
+        log.info("缴费项目编号【{}】========>payment", payment);
+        return wechatConfig.getFontendUrl() + "/#/pages/payState/payState?orderNo=" + parameterMap.get("ORDERID")[0] + "&secondOrderNo=" + secondOrderNo + "&payment=" + payment;
     }
 
 //    public static void main(String[] args) throws JsonProcessingException {
@@ -357,7 +370,7 @@ public class PayServiceImpl implements PayService {
             String status = params.get("status");
             String amount = params.get("amount"); // 分
             String payTime = params.get("pay_time");
-            if ("1".equals(status)) {
+            if ("1".equals(status)) {  //标识成功  1
                 //查询pay_order表中的订单,如果异常删除则在订单删除表pay_order_delete中查询该订单
                 PayOrderEntity order = payOrderService.getByOrderNoDelete(orderNo);
                 if (order == null) {
@@ -377,7 +390,7 @@ public class PayServiceImpl implements PayService {
                     //将农商行订单支付成功回调时间赋值给订单支付完成时间
                     if (StringUtils.hasText(payTime)) {
                         LocalDateTime localDateTime = new MyUtil().changeTime(payTime);
-                        log.info("农商银行异步回调支付时间【{}】",localDateTime);
+                        log.info("农商银行异步回调支付时间【{}】", localDateTime);
                         byOrderNo.setFinishTime(localDateTime);
                         byOrderNo.setStatus("2");
                         payOrderService.updateById(byOrderNo);
@@ -385,15 +398,16 @@ public class PayServiceImpl implements PayService {
                 }
 
                 isHandleSuccess = true;
-
-
-
-
                 //判断本订单的状态是否成功,成功就修改缴费订单的状态值
                 if (byOrderNo != null && byOrderNo.getStatus().equals("2")) {
                     payableInfoController.updatePayinfoByOrder(orderNo);
                 }
             } else {
+                //订单支付失败则将缴费名单的订单支付中的状态修改为未支付状态
+                Boolean aBoolean = payableInfoService.updatePayInfoStatu(payOrderService.queryPayInfoByOrderId(orderNo), "1","null","null");
+                if (!aBoolean) {
+                    payableInfoWaterService.updateWaterInfoStatu(payOrderService.queryPayInfoByOrderId(orderNo), "1","null","null");
+                }
                 QueryWrapper<PayOrderEntity> wrapper = new QueryWrapper<>();
                 wrapper.eq("order_no", orderNo);
                 PayOrderEntity payOrder = payOrderService.getByOrderNo(orderNo);

+ 38 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayableInfoServiceImpl.java

@@ -300,4 +300,42 @@ public class PayableInfoServiceImpl extends ServiceImpl<PayableInfoDao, PayableI
         return one.getSerialNumber();
     }
 
+    @Override
+    public Boolean updatePayInfoStatu(Long payInfoId, String payStatu, String cardNumber, String orderNo) {
+
+        PayableInfoEntity infoEntity = this.getById(payInfoId);
+        infoEntity.setPayItemType(payStatu);
+        infoEntity.setPayerCardNumber(cardNumber);
+        infoEntity.setOrderNo(orderNo);
+        return payableInfoService.updateById(infoEntity);
+
+    }
+
+    @Override
+    public Boolean queryInforPay(Long payInfoId, String cardNumber) {
+        PayableInfoEntity infoEntity = this.getById(payInfoId);
+        if (infoEntity.getPayItemType().equals("0") && !infoEntity.getPayerCardNumber().equals(cardNumber)) {
+            return Boolean.TRUE;
+        } else {
+            return Boolean.FALSE;
+        }
+    }
+
+    @Override
+    public List<PayableInfoEntity> queryPayInfoById(Long payInfoId) {
+        QueryWrapper<PayableInfoEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("id",payInfoId);
+
+        return this.list(wrapper);
+    }
+
+    @Override
+    public void unlock(Long payInfoId) {
+        PayableInfoEntity infoEntity = this.getById(payInfoId);
+        infoEntity.setPayItemType("1");
+        infoEntity.setOrderNo("");
+        infoEntity.setPayerCardNumber("");
+        this.updateById(infoEntity);
+    }
+
 }

+ 152 - 53
src/main/java/com/chuanghai/smartschool/tuitionpayment/service/impl/PayableInfoWaterServiceImpl.java

@@ -1,7 +1,6 @@
 package com.chuanghai.smartschool.tuitionpayment.service.impl;
 
 import com.alibaba.excel.EasyExcel;
-import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -16,6 +15,7 @@ import com.chuanghai.smartschool.tuitionpayment.listener.aliexcel.MyPayableInfoW
 import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoWaterService;
 import com.chuanghai.smartschool.tuitionpayment.to.PayOrderQueryTO;
 import com.chuanghai.smartschool.tuitionpayment.utils.OutputTxt;
+import com.chuanghai.smartschool.tuitionpayment.vo.YearVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -26,9 +26,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service("payableInfoWaterService")
@@ -56,15 +55,17 @@ public class PayableInfoWaterServiceImpl extends ServiceImpl<PayableInfoWaterDao
     }
 
 
-
     @Override
     public PageUtils queryPage(PayOrderQueryTO queryTO, PageParam pageParam) {
         QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
         wrapper.eq(StringUtils.hasText(queryTO.getItemName()), "payment_item", queryTO.getItemName());
         if (StringUtils.hasText(queryTO.getKeyword())) {
-            wrapper.and(w -> w.like("student_no", queryTO.getKeyword())
+            wrapper.and(w -> w.like("dorm", queryTO.getKeyword())
                     .or()
-                    .like("student_name", queryTO.getKeyword()));
+                    .like("college_name", queryTO.getKeyword()));
+        }
+        if (StringUtils.hasText(queryTO.getCheckInfo())) {
+            wrapper.eq("check_info", queryTO.getCheckInfo());
         }
         if (StringUtils.hasText(queryTO.getPayStatus())) {
             wrapper.eq("pay_item_type", queryTO.getPayStatus());
@@ -80,44 +81,51 @@ public class PayableInfoWaterServiceImpl extends ServiceImpl<PayableInfoWaterDao
         return new PageUtils(page);
     }
 
-    public String queryAmount(String itemName, String payItemType, String keyword, String payStatus, String createTime, String payTime) {
-
-        QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
-        if (StringUtils.hasText(keyword)) {
-            wrapper.and(w -> w.like("student_no", keyword)
-                    .or()
-                    .like("student_name", keyword));
-        }
-        if (StringUtils.hasText(payStatus)) {
-            wrapper.eq("pay_item_type", payStatus);
-        }
-        wrapper.apply(StringUtils.hasText(createTime), "date_format(pay_create_time, '%Y-%m-%d') = {0}", createTime);
-        wrapper.apply(StringUtils.hasText(payTime), "date_format(pay_finish_time, '%Y-%m-%d') = {0}", payTime);
-
-        if (StringUtils.hasText(itemName)) {
-            wrapper.eq("pay_item_type", payItemType)
-                    .eq("payment_item", itemName)
-                    .select("ifnull(sum(real_pay_amount), 0) as total,count(id) as count");
-        }
-
-        List<PayableInfoWaterEntity> list = this.payableInfoWaterService.list(wrapper);
-        if (list.size() > 0) {
-            Map<String, Object> resultMap = this.getMap(wrapper);
-            String count = String.valueOf(resultMap.get("count"));
-            return new BigDecimal(String.valueOf(resultMap.get("total"))).setScale(2, BigDecimal.ROUND_HALF_UP) + "-" + count;
-        } else {
-            return "-";
-        }
-    }
+//    public String queryAmount(String itemName, String payItemType, String keyword, String payStatus, String createTime, String payTime) {
+//
+//        QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
+//        if (StringUtils.hasText(keyword)) {
+//            wrapper.and(w->w.like("dorm", keyword)
+//                    .or()
+//                    .like("college_name",keyword));
+//
+//        }
+//        if (StringUtils.hasText(queryTO.getCheckInfo())) {
+//            wrapper.eq("check_info", queryTO.getCheckInfo());
+//        }
+//        if (StringUtils.hasText(payStatus)) {
+//            wrapper.eq("pay_item_type", payStatus);
+//        }
+//        wrapper.apply(StringUtils.hasText(createTime), "date_format(pay_create_time, '%Y-%m-%d') = {0}", createTime);
+//        wrapper.apply(StringUtils.hasText(payTime), "date_format(pay_finish_time, '%Y-%m-%d') = {0}", payTime);
+//
+//        if (StringUtils.hasText(itemName)) {
+//            wrapper.eq("pay_item_type", payItemType)
+//                    .eq("payment_item", itemName)
+//                    .select("ifnull(sum(real_pay_amount), 0) as total,count(id) as count");
+//        }
+//
+//        List<PayableInfoWaterEntity> list = this.payableInfoWaterService.list(wrapper);
+//        if (list.size() > 0) {
+//            Map<String, Object> resultMap = this.getMap(wrapper);
+//            String count = String.valueOf(resultMap.get("count"));
+//            return new BigDecimal(String.valueOf(resultMap.get("total"))).setScale(2, BigDecimal.ROUND_HALF_UP) + "-" + count;
+//        } else {
+//            return "-";
+//        }
+//    }
 
     @Override
     public String queryAmountWater(PayOrderQueryTO queryTO) {
         QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
         wrapper.eq(StringUtils.hasText(queryTO.getItemName()), "payment_item", queryTO.getItemName());
         if (StringUtils.hasText(queryTO.getKeyword())) {
-            wrapper.and(w -> w.like("student_no", queryTO.getKeyword())
+            wrapper.and(w -> w.like("dorm", queryTO.getKeyword())
                     .or()
-                    .like("student_name", queryTO.getKeyword()));
+                    .like("college_name", queryTO.getKeyword()));
+        }
+        if (StringUtils.hasText(queryTO.getCheckInfo())) {
+            wrapper.eq("check_info", queryTO.getCheckInfo());
         }
         if (StringUtils.hasText(queryTO.getPayStatus())) {
             wrapper.eq("pay_item_type", queryTO.getPayStatus());
@@ -138,7 +146,8 @@ public class PayableInfoWaterServiceImpl extends ServiceImpl<PayableInfoWaterDao
         }
     }
 
-    /**下载缴费的名单的txt文件
+    /**
+     * 下载缴费的名单的txt文件
      *
      * @param response
      * @param queryTO
@@ -164,16 +173,17 @@ public class PayableInfoWaterServiceImpl extends ServiceImpl<PayableInfoWaterDao
         wrapper.orderByDesc("pay_finish_time");
         List<PayableInfoWaterEntity> parOrder = this.list(wrapper);
         String outPutStr = "";
-        if (parOrder.size() > 0) {
-            JSONArray jsonArray = new JSONArray();
-            jsonArray.addAll(parOrder);
-            for (int i = 0; i < jsonArray.size(); i++) {
-                PayableInfoWaterEntity payableInfoWaterEntity = (PayableInfoWaterEntity) jsonArray.get(i);
-                outPutStr += payableInfoWaterEntity.getStudentNo() + "\t" + payableInfoWaterEntity.getStudentName() + "\t" + payableInfoWaterEntity.getRealPayAmount() + "\t" +
-                        payableInfoWaterEntity.getPayableAccount() + "\t" + payableInfoWaterEntity.getPayAmountDetail() + "\t" + payableInfoWaterEntity.getDorm() + "\t" +
-                        payableInfoWaterEntity.getOrderNotice() + "\t" + payableInfoWaterEntity.getPaymentItem() + "\r";
-            }
-        }
+//        if (parOrder.size() > 0) {
+//            JSONArray jsonArray = new JSONArray();
+//            jsonArray.addAll(parOrder);
+//            for (int i = 0; i < jsonArray.size(); i++) {
+//                PayableInfoWaterEntity payableInfoWaterEntity = (PayableInfoWaterEntity) jsonArray.get(i);
+//
+//                outPutStr += payableInfoWaterEntity.getStudentNo() + "\t" + payableInfoWaterEntity.getStudentName() + "\t" + payableInfoWaterEntity.getRealPayAmount() + "\t" +
+//                        payableInfoWaterEntity.getPayableAccount() + "\t" + payableInfoWaterEntity.getPayAmountDetail() + "\t" + payableInfoWaterEntity.getDorm() + "\t" +
+//                        payableInfoWaterEntity.getOrderNotice() + "\t" + payableInfoWaterEntity.getPaymentItem() + "\r";
+//            }
+//        }
 
         new OutputTxt().outTxtWater(response, outPutStr);
     }
@@ -214,9 +224,9 @@ public class PayableInfoWaterServiceImpl extends ServiceImpl<PayableInfoWaterDao
         QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
         wrapper.eq(StringUtils.hasText(queryTO.getItemName()), "payment_item", queryTO.getItemName());
         if (StringUtils.hasText(queryTO.getKeyword())) {
-            wrapper.and(w -> w.like("student_no", queryTO.getKeyword())
+            wrapper.and(w -> w.eq("dorm", queryTO.getKeyword())
                     .or()
-                    .like("student_name", queryTO.getKeyword()));
+                    .like("college_name", queryTO.getKeyword()));
         }
         if (StringUtils.hasText(queryTO.getPayStatus())) {
             wrapper.eq("pay_item_type", queryTO.getPayStatus());
@@ -272,14 +282,103 @@ public class PayableInfoWaterServiceImpl extends ServiceImpl<PayableInfoWaterDao
     }
 
     @Override
-    public PayableInfoWaterEntity getByStudentNo(String studentNo, String itemName, String payYear) {
+    public PayableInfoWaterEntity getByStudentNo(String dorm, String itemName, String payYear) {
         QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
-        wrapper.eq("student_no", studentNo);
+        wrapper.eq("dorm", dorm);
         wrapper.eq("payment_item", itemName);
         wrapper.eq("pay_month", payYear);
         PayableInfoWaterEntity one = payableInfoWaterService.getOne(wrapper);
         return one;
     }
 
+    @Override
+    public List<PayableInfoWaterEntity> queryWaterInfo(String dorm, String year, String payStatu) {
+        QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("dorm", dorm)
+                .eq("pay_notice_type","2")
+                .like("pay_month", year);
+        if (payStatu.equals("12")) {
+            wrapper.in("pay_item_type", "1","2","0");
+        } else if (payStatu.equals("1")){
+            wrapper.in("pay_item_type", "1","0");
+        }else {
+            wrapper.eq("pay_item_type", payStatu);
+        }
+        wrapper.orderByAsc("pay_item_type").orderByDesc("pay_month");
+        List<PayableInfoWaterEntity> list = payableInfoWaterService.list(wrapper);
+        return list;
+    }
+
+    @Override
+    public List<YearVo> queryAllYear(String dorm, String payStatu) {
+        QueryWrapper<PayableInfoWaterEntity> wrapper = new QueryWrapper<>();
+
+        if (StringUtils.hasText(dorm)) {
+            wrapper.eq("dorm",dorm);
+        }
+        if (StringUtils.hasText(payStatu)) {
+            wrapper.eq("pay_item_type",payStatu);
+        }
+        List<PayableInfoWaterEntity> list = this.list(wrapper);
+        List<YearVo> yearList = new ArrayList<>();
+        for (int m = 0; m < list.size(); m++) {
+            YearVo yearVo = new YearVo();
+            String year = list.get(m).getPayMonth().split("年")[0];
+            yearVo.setText(year);
+            yearVo.setValue(String.valueOf(m));
+            yearList.add(yearVo);
+        }
+        List<YearVo> uniqueStr = yearList.stream().collect(Collectors.collectingAndThen(
+                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(YearVo::getText))), ArrayList::new));
+
+        return uniqueStr;
+    }
+
+    @Override
+    public List<String> queryWaterType() {
+        List<String> waterList = new ArrayList<>();
+        List<PayableInfoWaterEntity> listwater = this.list();
+        listwater.forEach(water->{
+            waterList.add(water.getCheckInfo());
+        });
+        List<String> uniqueStr = waterList.stream().distinct().collect(Collectors.toList());
+
+        return uniqueStr;
+    }
+
+    @Override
+    public Boolean queryWaterPay(Long payWaterInfoId, String cardNumber) {
+        PayableInfoWaterEntity waterEntity = this.getById(payWaterInfoId);
+        if (waterEntity.getPayItemType().equals("0") && !waterEntity.getPayerCardNumber().equals(cardNumber)) {
+            return Boolean.TRUE;
+        } else {
+            return Boolean.FALSE;
+        }
+    }
+
+    @Override
+    public Boolean updateWaterInfoStatu(Long payWaterInfoId, String payStatu, String cardNumber,String orderNo) {
+        PayableInfoWaterEntity waterEntity = this.getById(payWaterInfoId);
+        waterEntity.setPayItemType(payStatu);
+        waterEntity.setPayerCardNumber(cardNumber);
+        waterEntity.setOrderNo(orderNo);
+        boolean b = payableInfoWaterService.updateById(waterEntity);
+        return b;
+    }
+
+    @Override
+    public void unlock(Long payInfoId) {
+        PayableInfoWaterEntity waterEntity = this.getById(payInfoId);
+        waterEntity.setPayItemType("1");
+        waterEntity.setOrderNo("");
+        waterEntity.setPayerCardNumber("");
+        this.updateById(waterEntity);
+    }
+
+    @Override
+    public String queryByPayInfoId(Long payInfoId) {
+        PayableInfoWaterEntity byId = this.getById(payInfoId);
+        return byId.getPayerCardNumber();
+    }
 
 }

+ 106 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/to/ExcelTO/ComputerExamTo.java

@@ -0,0 +1,106 @@
+package com.chuanghai.smartschool.tuitionpayment.to.ExcelTO;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.chuanghai.smartschool.tuitionpayment.conver.aliexcel.LocalDateTimeConverter;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.ToString;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/10/24 星期一 16:01
+ * @Description: 全国计算机等级考试导出excel业务类
+ * @Version: 1.0
+ */
+@Data
+@ToString
+public class ComputerExamTo {
+
+    /**
+     * 订单号
+     */
+    @ExcelProperty("订单号")
+    @ColumnWidth(25)
+    private String orderNo;
+
+    /**
+     * 学生id 被付款人的card_number
+     */
+    @ExcelProperty("身份证")
+    @ColumnWidth(25)
+    private String payForIdentify;
+    /**
+     * 学生姓名
+     */
+    @ExcelProperty("姓名")
+    @ColumnWidth(15)
+    private String studentName;
+    /**
+     * 学生班级名称
+     */
+    @ExcelProperty("班级名称")
+    @ColumnWidth(15)
+    private String className;
+
+    /**
+     * 缴费项目
+     */
+    @ExcelProperty("缴费项目")
+    @ColumnWidth(25)
+    private String payItem;
+    /**
+     * 订单本次支付金额
+     */
+    @ExcelProperty("支付金额")
+    @ColumnWidth(15)
+    private BigDecimal nowPayAmount;
+
+
+
+    /**
+     * 缴费年度
+     */
+    @ExcelProperty("缴费时间")
+    @ColumnWidth(15)
+    private String payYear;
+
+    /**
+     * 订单本次支付金额
+     */
+    @ExcelProperty("备注")
+    @ColumnWidth(35)
+    private  String orderNotice;;
+
+
+
+    /**
+     * 完成时间
+     */
+    @ExcelProperty(value = "支付完成时间", converter = LocalDateTimeConverter.class)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ColumnWidth(25)
+    private LocalDateTime finishTime;
+
+
+
+
+    /**
+     * 支付人姓名
+     */
+    @ExcelProperty("支付人姓名")
+    @ColumnWidth(15)
+    private String payerName;
+
+    /**
+     * 支付人微校号
+     */
+    @ExcelProperty("支付人微校号")
+    @ColumnWidth(25)
+    private String payerCardNumber;
+
+
+}

+ 6 - 6
src/main/java/com/chuanghai/smartschool/tuitionpayment/to/ExcelTO/PayOrderStatyTO.java

@@ -97,12 +97,12 @@ public class PayOrderStatyTO {
     private String payYear;
 
 
-    /**
-     * 水费缴纳的宿舍
-     */
-    @ExcelProperty("宿舍")
-    @ColumnWidth(15)
-    private String dorm;
+//    /**
+//     * 水费缴纳的宿舍
+//     */
+//    @ExcelProperty("宿舍")
+//    @ColumnWidth(15)
+//    private String dorm;
 
     /**
      * 已缴费明细

+ 39 - 28
src/main/java/com/chuanghai/smartschool/tuitionpayment/to/ExcelTO/PayOrderWaterTO.java

@@ -27,48 +27,55 @@ public class PayOrderWaterTO {
     /**
      * 学生id 被付款人的card_number
      */
-    @ExcelProperty("身份证")
+    @ExcelProperty("宿舍号")
     @ColumnWidth(25)
-    private String payForIdentify;
+    private String dorm;
+
+    /**
+     * 所属学院
+     */
+    @ExcelProperty("学院")
+    @ColumnWidth(25)
+    private String collegeName;
+
     /**
-     * 学生姓名
+     * 订单本次支付金额
      */
-    @ExcelProperty("姓名")
+    @ExcelProperty("支付金额")
     @ColumnWidth(15)
-    private String studentName;
+    private BigDecimal nowPayAmount;
+
     /**
-     * 学生班级名称
+     * 入住信息    存储于订单表的payerIdentify字段
      */
-    @ExcelProperty("班级名称")
+    @ExcelProperty("入住信息")
     @ColumnWidth(15)
-    private String className;
+    private String payerIdentify;
     /**
-     * 缴费项目
+     * 上月表数   存储于订单表的payerForIdentify字段
      */
-    @ExcelProperty("缴费项目")
-    @ColumnWidth(25)
-    private String payItem;
+    @ExcelProperty("上月表数")
+    @ColumnWidth(15)
+    private String payForIdentify;
     /**
-     * 订单本次支付金额
+     * 本月表数   存储于订单表的studentName字段
      */
-    @ExcelProperty("支付金额")
+    @ExcelProperty("本月表数")
     @ColumnWidth(15)
-    private BigDecimal nowPayAmount;
-
-
+    private String studentName;
     /**
-     * 订单本次支付金额
+     * 本月吨数   存储于订单表的className字段
      */
-    @ExcelProperty("备注")
-    @ColumnWidth(35)
-    private  String orderNotice;;
-
+    @ExcelProperty("本月吨数")
+    @ColumnWidth(15)
+    private String className;
     /**
-     * 水费缴纳的宿舍
+     * 补助吨数  存储于订单表的parentOrder字段
      */
-    @ExcelProperty("宿舍")
+    @ExcelProperty("补助吨数")
     @ColumnWidth(15)
-    private String dorm;
+    private String parentOrder;
+
     /**
      * 缴费年度
      */
@@ -76,6 +83,13 @@ public class PayOrderWaterTO {
     @ColumnWidth(15)
     private String payYear;
     /**
+     * 订单本次支付金额
+     */
+    @ExcelProperty("备注")
+    @ColumnWidth(35)
+    private  String orderNotice;
+
+    /**
      * 完成时间
      */
     @ExcelProperty(value = "支付完成时间", converter = LocalDateTimeConverter.class)
@@ -83,9 +97,6 @@ public class PayOrderWaterTO {
     @ColumnWidth(25)
     private LocalDateTime finishTime;
 
-
-
-
     /**
      * 支付人姓名
      */

+ 8 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/to/FeedbackMsgCreateTO.java

@@ -41,4 +41,12 @@ public class FeedbackMsgCreateTO {
      * 反馈通知状态
      */
     private String feedbackNoticeType;
+    /**
+     * 反馈通知状态
+     */
+    private String image;
+    /**
+     * 宿舍号
+     */
+    private String feedbackRoom;
 }

+ 9 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/to/PayOrderQueryTO.java

@@ -60,5 +60,14 @@ public class PayOrderQueryTO {
      * 银行信息
      */
     private String bankName;
+    /**
+     * 学生类别
+     */
+    private String checkInfo;
+
+    /**
+     * 支付人cardNumber
+     */
+    private String cardNumber;
 
 }

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 182 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/utils/RSAUtils.java


+ 17 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/vo/DormVO.java

@@ -0,0 +1,17 @@
+package com.chuanghai.smartschool.tuitionpayment.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/11/9 星期三 17:27
+ * @Description: com.chuanghai.smartschool.tuitionpayment.vo
+ * @Version: 1.0
+ */
+@Data
+public class DormVO {
+    private String dorm;
+    private String year;
+    //1 未支付  2已支付  0全部
+    private String payStatu;
+}

+ 5 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/vo/StudentNoVO.java

@@ -33,4 +33,9 @@ public class StudentNoVO {
     @ExcelProperty("缴费时间")
     private String payMonth;
 
+    /**
+     * 宿舍号
+     */
+    @ExcelProperty("宿舍号")
+    private String dorm;
 }

+ 9 - 0
src/main/java/com/chuanghai/smartschool/tuitionpayment/vo/WechatJsApiPayParamVO.java

@@ -45,4 +45,13 @@ public class WechatJsApiPayParamVO {
      * 备注1 记录第二个订单的订单号
      */
     private String secondOrderNo;
+    /**
+     * 备注2 记录缴费项目名称
+     */
+    private String payMent;
+
+    /**
+     * 支付错误信息
+     */
+    private String errmsg;
 }

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 32 - 6
src/main/resources/application.yml


+ 2 - 0
src/main/resources/mapper/tuitionpayment/FeedbackMsgDao.xml

@@ -13,6 +13,8 @@
         <result property="statu" column="statu"/>
         <result property="feedbackItemName" column="feedback_item_name"/>
         <result property="feedbackDispose" column="feedback_dispose"/>
+        <result property="image" column="image"/>
+        <result property="feedbackRoom" column="feedback_room"/>
 
     </resultMap>
 

+ 1 - 0
src/main/resources/mapper/tuitionpayment/PayOrderDao.xml

@@ -30,6 +30,7 @@
         <result property="txtType" column="txt_type"/>
         <result property="payerName" column="payer_ame"/>
         <result property="payerCardNumber" column="payer_card_number"/>
+        <result property="collegeName" column="college_name"/>
 
     </resultMap>
 

+ 2 - 0
src/main/resources/mapper/tuitionpayment/PayOrderDeleteDao.xml

@@ -30,6 +30,8 @@
         <result property="txtType" column="txt_type"/>
         <result property="payerName" column="payer_ame"/>
         <result property="payerCardNumber" column="payer_card_number"/>
+        <result property="collegeName" column="college_name"/>
+
 
     </resultMap>
 

+ 4 - 0
src/main/resources/mapper/tuitionpayment/PayableInfoDao.xml

@@ -28,9 +28,13 @@
         <result property="notPaySize" column="not_pay_size"/>
         <result property="payOrderLoan" column="pay_order_loan"/>
         <result property="serialNumber" column="serial_number"/>
+        <result property="payerCardNumber" column="payer_card_number"/>
+        <result property="orderNo" column="order_no"/>
     </resultMap>
 
     <update id="truncateTable" >
         delete from payable_info
     </update>
+
+
 </mapper>

+ 13 - 7
src/main/resources/mapper/tuitionpayment/PayableInfoWaterDao.xml

@@ -6,24 +6,30 @@
 	<!-- 可根据自己的需求,是否要使用 -->
     <resultMap type="com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterEntity" id="payableInfoMap">
         <result property="id" column="id"/>
-        <result property="studentNo" column="student_no"/>
-        <result property="studentName" column="student_name"/>
-        <result property="grade" column="grade"/>
         <result property="dorm" column="dorm"/>
         <result property="collegeName" column="college_name"/>
-        <result property="majorName" column="major_name"/>
-        <result property="className" column="class_name"/>
+        <result property="checkInfo" column="check_info"/>
+        <result property="lastElectry" column="last_electry"/>
+        <result property="nowElectry" column="now_electry"/>
+        <result property="nowTonnage" column="now_tonnage"/>
+        <result property="subsidiesTonnage" column="subsidies_tonnage"/>
         <result property="realPayAmount" column="real_pay_amount"/>
         <result property="payAmountDetail" column="pay_amount_detail"/>
-        <result property="studentCampus" column=""/>
+        <result property="payMonth" column="pay_month"/>
+        <result property="grade" column="grade"/>
+        <result property="orderNotice" column="order_notice"/>
         <result property="paymentItem" column="payment_item"/>
         <result property="payItemType" column="pay_item_type"/>
         <result property="payCreateTime" column="pay_create_time"/>
         <result property="payFinishTime" column="pay_finish_time"/>
         <result property="payableAccount" column="payable_account"/>
+        <result property="payNoticeType" column="pay_notice_type"/>
         <result property="cardNumber" column="card_number"/>
-        <result property="payMonth" column="pay_month"/>
         <result property="serialNumber" column="serial_number"/>
+        <result property="payerName" column="payer_name"/>
+        <result property="payerCardNumber" column="payer_card_number"/>
+        <result property="orderNo" column="order_no"/>
+
 
     </resultMap>
 

+ 14 - 9
src/main/resources/mapper/tuitionpayment/PayableInfoWaterDeleteDao.xml

@@ -3,27 +3,32 @@
 
 <mapper namespace="com.chuanghai.smartschool.tuitionpayment.dao.PayableInfoWaterDeleteDao">
 
-	<!-- 可根据自己的需求,是否要使用 -->
-    <resultMap type="com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterDeleteEntity" id="payableInfoDeleteMap">
+    <!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterEntity" id="payableInfoMap">
         <result property="id" column="id"/>
-        <result property="studentNo" column="student_no"/>
-        <result property="studentName" column="student_name"/>
-        <result property="grade" column="grade"/>
         <result property="dorm" column="dorm"/>
         <result property="collegeName" column="college_name"/>
-        <result property="majorName" column="major_name"/>
-        <result property="className" column="class_name"/>
+        <result property="checkInfo" column="check_info"/>
+        <result property="lastElectry" column="last_electry"/>
+        <result property="nowElectry" column="now_electry"/>
+        <result property="nowTonnage" column="now_tonnage"/>
+        <result property="subsidiesTonnage" column="subsidies_tonnage"/>
         <result property="realPayAmount" column="real_pay_amount"/>
         <result property="payAmountDetail" column="pay_amount_detail"/>
-        <result property="studentCampus" column=""/>
+        <result property="payMonth" column="pay_month"/>
+        <result property="grade" column="grade"/>
+        <result property="orderNotice" column="order_notice"/>
         <result property="paymentItem" column="payment_item"/>
         <result property="payItemType" column="pay_item_type"/>
         <result property="payCreateTime" column="pay_create_time"/>
         <result property="payFinishTime" column="pay_finish_time"/>
         <result property="payableAccount" column="payable_account"/>
+        <result property="payNoticeType" column="pay_notice_type"/>
         <result property="cardNumber" column="card_number"/>
-        <result property="payMonth" column="pay_month"/>
         <result property="serialNumber" column="serial_number"/>
+        <result property="payerCardNumber" column="payer_card_number"/>
+        <result property="orderNo" column="order_no"/>
+
 
     </resultMap>