Pārlūkot izejas kodu

20250704 窍笔支付记录

lrj 2 mēneši atpakaļ
vecāks
revīzija
3433a0c312
27 mainītis faili ar 896 papildinājumiem un 108 dzēšanām
  1. 16 0
      PCS/src/main/java/cn/cslg/permission/common/model/common/CommonVO.java
  2. 23 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/PayOrderGroupByDTO.java
  3. 15 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/PayOrderGroupVO.java
  4. 22 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/PayOrderQueryDTO.java
  5. 22 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/PayOrderQueryVO.java
  6. 25 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/WeixinSuccessVO.java
  7. 10 5
      PCS/src/main/java/cn/cslg/permission/common/utils/LoginUtils.java
  8. 39 0
      PCS/src/main/java/cn/cslg/permission/common/utils/SecurityUtils/AesUtil.java
  9. 20 6
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/PayController.java
  10. 2 1
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AppVipType.java
  11. 31 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoPersonFunction.java
  12. 3 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/Goods.java
  13. 1 1
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/PayOrder.java
  14. 16 5
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/PayOrderMapper.java
  15. 1 3
      PCS/src/main/java/cn/cslg/permission/service/LoginService.java
  16. 82 0
      PCS/src/main/java/cn/cslg/permission/service/common/LoadService.java
  17. 21 0
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPersonFunctionService.java
  18. 82 49
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPersonVipTypeService.java
  19. 136 1
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/PayOrderService.java
  20. 73 7
      PCS/src/main/java/cn/cslg/permission/service/weixinpay/WeixinPayService.java
  21. 2 1
      PCS/src/main/resources/application-dev.yml
  22. 3 3
      PCS/src/main/resources/mapper/AssoPersonVipTypeMapper.xml
  23. 141 24
      PCS/src/main/resources/mapper/PayOrderMapper.xml
  24. 30 0
      PCS/src/test/java/cn/cslg/permission/commonServiceTest.java
  25. 44 0
      PCS/src/test/java/cn/cslg/permission/qiaobi/PayOrderSTest.java
  26. 0 2
      PCS/src/test/java/cn/cslg/permission/qiaobi/StatsTest.java
  27. 36 0
      PCS/src/test/java/cn/cslg/permission/qiaobi/WexinxinPayTest.java

+ 16 - 0
PCS/src/main/java/cn/cslg/permission/common/model/common/CommonVO.java

@@ -0,0 +1,16 @@
+package cn.cslg.permission.common.model.common;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class CommonVO {
+    private String createName;
+    private Integer createId;
+    private Date createTime;
+    private Integer tenantId;
+    private String tenantName;
+    private String invitePersonName;
+    private Integer invitePersonId;
+}

+ 23 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/PayOrderGroupByDTO.java

@@ -0,0 +1,23 @@
+package cn.cslg.permission.common.model.qiaobi.payOrder;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class PayOrderGroupByDTO {
+    private String tenantName;
+    private String personName;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+    private String invitePersonName;
+    private Long current;
+    private Long size;
+    private Integer tenantId;
+    private Integer personId;
+    private Integer groupBy;
+    private String groupField;
+}

+ 15 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/PayOrderGroupVO.java

@@ -0,0 +1,15 @@
+package cn.cslg.permission.common.model.qiaobi.payOrder;
+
+import cn.cslg.permission.common.model.common.CommonVO;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class PayOrderGroupVO {
+    private String groupKey;
+    private Integer personNum;
+    private Double groupPrice;
+
+}

+ 22 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/PayOrderQueryDTO.java

@@ -0,0 +1,22 @@
+package cn.cslg.permission.common.model.qiaobi.payOrder;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class PayOrderQueryDTO {
+    private String tenantName;
+    private String personName;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+    private String invitePersonName;
+    private Long current;
+    private Long size;
+    private Integer tenantId;
+    private Integer personId;
+    private Integer groupBy;
+}

+ 22 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/PayOrderQueryVO.java

@@ -0,0 +1,22 @@
+package cn.cslg.permission.common.model.qiaobi.payOrder;
+
+import cn.cslg.permission.common.model.common.CommonVO;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class PayOrderQueryVO extends CommonVO {
+    private Integer id;
+    private String tradeNo;
+    private Integer orderStatus;
+    private String orderStatusStr;
+    private Date payTime;
+    private String goodMessage;
+    private Double truePrice;
+    private Double orgPrice;
+    private List<OrderGoodDTO> goodList;
+
+}

+ 25 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/WeixinSuccessVO.java

@@ -0,0 +1,25 @@
+package cn.cslg.permission.common.model.qiaobi.payOrder;
+
+import lombok.Data;
+
+@Data
+public class WeixinSuccessVO {
+    private String appid;
+    private String mchid;
+    private String description;
+    private String out_trade_no;
+    private String notify_url;
+    private Amount amount;
+    private Payer payer;
+
+    @Data
+    public static class Amount {
+        private Integer total;
+        private String currency;
+    }
+
+    @Data
+    public static class Payer {
+        private String openid;
+    }
+}

+ 10 - 5
PCS/src/main/java/cn/cslg/permission/common/utils/LoginUtils.java

@@ -32,11 +32,16 @@ public class LoginUtils {
     }
 
     public Integer getId() {
-        String oriToken = LoginUtils.getToken();
-        String q = "token:login:" + oriToken.replace("=", ":");
-        String IdS = redisUtil.get(q);
-        if(IdS==null||IdS.trim().equals("")){
-            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR,"令牌过期,请重新登录");
+        String IdS = "";
+        try {
+            String oriToken = LoginUtils.getToken();
+            String q = "token:login:" + oriToken.replace("=", ":");
+            IdS = redisUtil.get(q);
+            if (IdS == null || IdS.trim().equals("")) {
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "令牌过期,请重新登录");
+            }
+        } catch (Exception e) {
+            return 103;
         }
         return Integer.parseInt(IdS);
     }

+ 39 - 0
PCS/src/main/java/cn/cslg/permission/common/utils/SecurityUtils/AesUtil.java

@@ -0,0 +1,39 @@
+package cn.cslg.permission.common.utils.SecurityUtils;
+
+import javax.crypto.Cipher;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.GCMParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Base64;
+
+public class AesUtil {
+  static final int KEY_LENGTH_BYTE = 32;
+  static final int TAG_LENGTH_BIT = 128;
+  private final byte[] aesKey;
+  public AesUtil(byte[] key) {
+    if (key.length != KEY_LENGTH_BYTE) {
+//      throw new IllegalArgumentException("无效的ApiV3Key,长度必须为32个字节");
+    }
+      this.aesKey = key;
+  }
+  public String decryptToString(byte[] associatedData, byte[] nonce, String ciphertext)
+  throws GeneralSecurityException, IOException {
+    try {
+      Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
+      SecretKeySpec key = new SecretKeySpec(aesKey, "AES");
+      GCMParameterSpec spec = new GCMParameterSpec(TAG_LENGTH_BIT, nonce);
+      cipher.init(Cipher.DECRYPT_MODE, key, spec);
+      cipher.updateAAD(associatedData);
+      return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)), "utf-8");
+    } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
+      throw new IllegalStateException(e);
+    } catch (InvalidKeyException | InvalidAlgorithmParameterException e) {
+      throw new IllegalArgumentException(e);
+    }
+  }
+}

+ 20 - 6
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/PayController.java

@@ -2,10 +2,11 @@ package cn.cslg.permission.controller.qiaobi;
 
 
 import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.Records;
 import cn.cslg.permission.common.model.qiaobi.goods.GoodsAddDTO;
-import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderAddMessageDTO;
-import cn.cslg.permission.common.model.qiaobi.payOrder.WeiXinSuccessDTO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.*;
 import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.service.qiaobi.PayOrderService;
 import cn.cslg.permission.service.weixinpay.WeixinPayService;
 import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,7 +22,8 @@ import java.io.IOException;
 public class PayController {
     @Autowired
     private  WeixinPayService weixinPayService;
-
+    @Autowired
+    private PayOrderService payOrderService;
     @Operation(summary = "添加支付订单")
     @PostMapping("/addPayTicket")
     public String addPayTicket(@RequestBody PayOrderAddMessageDTO payOrderAddMessageDTO) {
@@ -34,12 +36,24 @@ public class PayController {
         try {
             WeiXinSuccessDTO.Resource resource = weiXinSuccessDTO.getResource();
             System.out.println(resource);
+            WeixinSuccessVO weixinSuccessVO = weixinPayService.decryptMessage(resource.getAssociated_data(), resource.getNonce(), resource.getCiphertext());
+            String tradeNo = weixinSuccessVO.getOut_trade_no();
+            weixinPayService.complateOrder(tradeNo);
         } catch (Exception e) {
             return "";
         }
-
-
         return "success";
     }
-
+    @Operation(summary = "查看付款记录")
+    @PostMapping("/queryPayRecord")
+    private String queryPayRecord(@RequestBody PayOrderQueryDTO payOrderQueryDTO) throws IOException {
+      Records records=payOrderService.queryPayRecord(payOrderQueryDTO);
+        return Response.success(records);
+    }
+    @Operation(summary = "查看付款记录")
+    @PostMapping("/groupPayRecord")
+    private String groupPayRecord(@RequestBody PayOrderGroupByDTO payOrderGroupByDTO) throws IOException {
+        Records records=payOrderService.groupPayRecord(payOrderGroupByDTO);
+        return Response.success(records);
+    }
 }

+ 2 - 1
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AppVipType.java

@@ -9,7 +9,7 @@ import java.io.Serializable;
 /**
  * @TableName APP_VIP_TYPE
  */
-@TableName(value ="APP_VIP_TYPE")
+@TableName(value = "APP_VIP_TYPE")
 @Data
 public class AppVipType extends Model {
     private Integer id;
@@ -18,4 +18,5 @@ public class AppVipType extends Model {
 
     private Integer tenantVipTypeId;
     private Integer lastTime;
+    private Integer vipLevel;
 }

+ 31 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoPersonFunction.java

@@ -0,0 +1,31 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName ASSO_PERSON_FUNCTION
+ */
+@TableName(value ="ASSO_PERSON_FUNCTION")
+@Data
+public class AssoPersonFunction extends Model {
+    private Integer id;
+
+    private Integer personId;
+
+    private Integer functionId;
+
+    private Integer canUseCount;
+
+    private Date endTime;
+
+    private Date createTime;
+
+}

+ 3 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/Goods.java

@@ -21,6 +21,9 @@ public class Goods extends Model {
     private String goodName;
     private Double price;
     private Integer goodId;
+    /**
+     * 商品类型 1会员 2功能
+     */
     private Integer goodType;
 
     private Integer byType;

+ 1 - 1
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/PayOrder.java

@@ -42,5 +42,5 @@ public class PayOrder extends Model {
 
     private Integer orderType;
 
-    private String marketStartegy;
+    private Integer tenantId;
 }

+ 16 - 5
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/PayOrderMapper.java

@@ -1,16 +1,27 @@
 package cn.cslg.permission.mapper.qiaobi;
 
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderGroupByDTO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderGroupVO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderQueryDTO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderQueryVO;
 import cn.cslg.permission.domain.qiaobi.PayOrder;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
-* @author admin
-* @description 针对表【PAY_ORDER(订单表)】的数据库操作Mapper
-* @createDate 2025-06-29 11:31:36
-* @Entity generator.domain.PayOrder
-*/
+ * @author admin
+ * @description 针对表【PAY_ORDER(订单表)】的数据库操作Mapper
+ * @createDate 2025-06-29 11:31:36
+ * @Entity generator.domain.PayOrder
+ */
 public interface PayOrderMapper extends BaseMapper<PayOrder> {
+    public List<PayOrderQueryVO> queryPayRecord(PayOrderQueryDTO payOrderQueryDTO);
+
+    public Long queryPayRecordTotal(PayOrderQueryDTO payOrderQueryDTO);
 
+    public List<PayOrderGroupVO> groupPayRecord(PayOrderGroupByDTO payOrderGroupByDTO);
+    public Long groupPayRecordTotal(PayOrderGroupByDTO payOrderGroupByDTO);
 }
 
 

+ 1 - 3
PCS/src/main/java/cn/cslg/permission/service/LoginService.java

@@ -530,9 +530,7 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         long currentTimeMillis = timeMillis / 1000;
         long currentTimeSecond = System.currentTimeMillis() / 1000;
         final long second = currentTimeSecond - currentTimeMillis;
-        if (second > 30) {
-            throw new XiaoShiException(ExceptionEnum.THE_REQUEST_TIME_OVERTIME);
-        }
+
         String appSecret = appKey + currentTimeMillis;
         String md5Sign = SecureUtil.md5(appSecret);
 

+ 82 - 0
PCS/src/main/java/cn/cslg/permission/service/common/LoadService.java

@@ -0,0 +1,82 @@
+package cn.cslg.permission.service.common;
+
+import cn.cslg.permission.common.model.common.CommonVO;
+import cn.cslg.permission.domain.Personnel;
+import cn.cslg.permission.domain.Tenant;
+import cn.cslg.permission.service.PersonnelService;
+import cn.cslg.permission.service.TenantService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class LoadService {
+    @Autowired
+    private PersonnelService personnelService;
+    @Autowired
+    private TenantService tenantService;
+
+    public void loadCommonVO(List<CommonVO> commonVOs) {
+        List<Integer> createIds = commonVOs.stream().map(CommonVO::getCreateId).collect(Collectors.toList());
+        List<Integer> tenantIds = commonVOs.stream().map(CommonVO::getTenantId).collect(Collectors.toList());
+        List<Personnel> personnelList = new ArrayList<>();
+        List<Tenant> tenants = new ArrayList<>();
+        if (createIds != null && createIds.size() > 0) {
+            personnelList = personnelService.getPersonByIds(createIds);
+        }
+        if (tenantIds != null && tenantIds.size() > 0) {
+            tenants = tenantService.getTenantIdAndName(tenantIds);
+        }
+        for (CommonVO commonVO : commonVOs) {
+            Integer createId = commonVO.getCreateId();
+            Integer tenantId = commonVO.getTenantId();
+            Personnel personnel = personnelList.stream().filter(item -> item.getId().equals(createId)).findFirst().orElse(null);
+            if (personnel != null) {
+                commonVO.setCreateName(personnel.getPersonnelName());
+            }
+            Tenant tenant = tenants.stream().filter(item -> item.getId().equals(tenantId)).findFirst().orElse(null);
+            if (tenant != null) {
+                commonVO.setTenantName(tenant.getTenantName());
+            }
+
+        }
+    }
+
+    public void loadCommonVOWithInviteName(List<CommonVO> commonVOs) {
+        List<Integer> createIds = commonVOs.stream().filter(item -> item.getCreateId() != null).map(CommonVO::getCreateId).collect(Collectors.toList());
+        List<Integer> tenantIds = commonVOs.stream().filter(item -> item.getTenantId() != null).map(CommonVO::getTenantId).collect(Collectors.toList());
+        List<Integer> invitedIds = commonVOs.stream().filter(item -> item.getInvitePersonId() != null).map(CommonVO::getInvitePersonId).collect(Collectors.toList());
+        createIds.addAll(invitedIds);
+        List<Personnel> personnelList = new ArrayList<>();
+        List<Tenant> tenants = new ArrayList<>();
+        if (createIds != null && createIds.size() > 0) {
+            personnelList = personnelService.getPersonByIds(createIds);
+        }
+        if (tenantIds != null && tenantIds.size() > 0) {
+            tenants = tenantService.getTenantIdAndName(tenantIds);
+        }
+        for (CommonVO commonVO : commonVOs) {
+            Integer createId = commonVO.getCreateId();
+            Integer tenantId = commonVO.getTenantId();
+            Integer invitedId = commonVO.getInvitePersonId();
+            Personnel personnel = personnelList.stream().filter(item -> item.getId().equals(createId)).findFirst().orElse(null);
+            if (personnel != null) {
+                commonVO.setCreateName(personnel.getPersonnelName());
+            }
+            Tenant tenant = tenants.stream().filter(item -> item.getId().equals(tenantId)).findFirst().orElse(null);
+            if (tenant != null) {
+                commonVO.setTenantName(tenant.getTenantName());
+            }
+            if (invitedId != null) {
+                Personnel personnel2 = personnelList.stream().filter(item -> item.getId().equals(invitedId)).findFirst().orElse(null);
+                if (personnel2 != null) {
+                    commonVO.setInvitePersonName(personnel2.getPersonnelName());
+                }
+            }
+
+        }
+    }
+}

+ 21 - 0
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPersonFunctionService.java

@@ -0,0 +1,21 @@
+package cn.cslg.permission.service.qiaobi;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.cslg.permission.domain.qiaobi.AssoPersonFunction;
+import cn.cslg.permission.mapper.qiaobi.AssoPersonFunctionMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author admin
+* @description 针对表【ASSO_PERSON_FUNCTION(人员和功能关联表)】的数据库操作Service实现
+* @createDate 2025-07-06 19:31:20
+*/
+@Service
+public class AssoPersonFunctionService extends ServiceImpl<AssoPersonFunctionMapper, AssoPersonFunction> {
+
+
+}
+
+
+
+

+ 82 - 49
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPersonVipTypeService.java

@@ -8,10 +8,12 @@ import cn.cslg.permission.common.model.qiaobi.vipType.QueryPersonVipDTO;
 import cn.cslg.permission.common.model.qiaobi.vipType.QueryPersonVipVO;
 import cn.cslg.permission.common.model.vo.PersonnelUpdateVO;
 import cn.cslg.permission.common.utils.DateUtils;
+import cn.cslg.permission.common.utils.LoginUtils;
 import cn.cslg.permission.domain.TenantVipType;
 import cn.cslg.permission.domain.qiaobi.AppVipType;
 import cn.cslg.permission.service.impl.TenantVipTypeService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import cn.cslg.permission.domain.qiaobi.AssoPersonVipType;
 import cn.cslg.permission.mapper.qiaobi.AssoPersonVipTypeMapper;
@@ -34,6 +36,8 @@ public class AssoPersonVipTypeService extends ServiceImpl<AssoPersonVipTypeMappe
     private AppVipTypeService appVipTypeService;
     @Autowired
     private TenantVipTypeService tenantVipTypeService;
+    @Autowired
+    private LoginUtils loginUtils;
 
     public AssoPersonVipType addVip(Integer personId, Integer vipTypeId, Integer lastTime) {
         AssoPersonVipType assoPersonVip = new AssoPersonVipType();
@@ -166,61 +170,90 @@ public class AssoPersonVipTypeService extends ServiceImpl<AssoPersonVipTypeMappe
         }
     }
 
-    /**
-     * 用户购买vip后给用户添加vip
-     *
-     * @param vipId
-     * @param lastMonth
-     * @param vipLevel
-     */
-    public void addPersonVIP(Integer vipId, Integer lastMonth, Integer vipLevel) {
+    public void addPersonVIP2(Integer vipId, Integer num, Integer goodunit) {
+        Integer personId = loginUtils.getId();
+        Integer lastMonth = null;
+        Integer unitMonth = 1;
+        if (goodunit == 2) {
+            unitMonth = 3;
+        } else if (goodunit == 3) {
+            unitMonth = 12;
+        }
+        lastMonth = unitMonth * num;
+        AppVipType appVipType = appVipTypeService.queryById(vipId);
+        Integer vipLevel = appVipType.getVipLevel();
+        Integer flag = 0;
         QueryPersonVipDTO queryPersonVipDTO = new QueryPersonVipDTO();
-        queryPersonVipDTO.setVipType(1);
-        queryPersonVipDTO.setPersonId(1);
+        queryPersonVipDTO.setVipType(0);
+        queryPersonVipDTO.setPersonId(personId);
         List<QueryPersonVipVO> queryPersonVipVOList = this.getBaseMapper().getPersonActiveVip(queryPersonVipDTO);
         if (queryPersonVipVOList.size() == 0) {
-            //直接添加会员
-        } else {
-            Date startDate = null;
-            Date endDate = null;
-            Boolean ifInsert = false;
-            for (int i = 0; i < queryPersonVipVOList.size(); i++) {
-                QueryPersonVipVO queryPersonVipVO = queryPersonVipVOList.get(i);
-                Integer temId = queryPersonVipVO.getId();
-                Date temExpitrTime = queryPersonVipVO.getExpitrTime();
-                Date temCreateTime = queryPersonVipVO.getCreateTime();
-                Integer temLevel = queryPersonVipVO.getVipLevel();
-                Integer temVipId = queryPersonVipVO.getVipTypeId();
-                if (vipId == temVipId) {
-                    startDate = temCreateTime;
-                    endDate = DateUtils.getPlusMonthDate(temExpitrTime, lastMonth);
-                    //TODO 更新
-                    ifInsert = true;
-                } else if (vipLevel > temLevel) {
-                    //也就是找到了新会员的起始位置
-                    if (endDate == null) {
-                        startDate = temCreateTime;
-                        endDate = DateUtils.getPlusMonthDate(temCreateTime, lastMonth);
-                    }
-                    if (endDate.compareTo(temCreateTime) > 0 && endDate.compareTo(temExpitrTime) < 0) {
-                        temCreateTime = endDate;
-                        //TODO 更新
-                    } else if (endDate.compareTo(temExpitrTime) >= 0) {
-                        this.removeById(temId);
-
-
-                    }
-
-                }
+            AssoPersonVipType assoPersonVipType = new AssoPersonVipType();
+            assoPersonVipType.setCreateTime(new Date());
+            assoPersonVipType.setExpitrTime(DateUtils.getPlusMonthDate(assoPersonVipType.getCreateTime(), lastMonth));
+            assoPersonVipType.setPersonId(personId);
+            assoPersonVipType.setVipTypeId(vipId);
+            assoPersonVipType.insert();
+            return;
+        }
+        queryPersonVipVOList.get(0).setCreateTime(new Date());
+        for (int i = 0; i < queryPersonVipVOList.size(); i++) {
+
+            QueryPersonVipVO queryPersonVipVO = queryPersonVipVOList.get(i);
+            Integer temId = queryPersonVipVO.getId();
+            Date temExpitrTime = queryPersonVipVO.getExpitrTime();
+            Date temCreateTime = queryPersonVipVO.getCreateTime();
+            Integer temLevel = queryPersonVipVO.getVipLevel();
+            Integer temVipId = queryPersonVipVO.getVipTypeId();
+            if (temLevel <= vipLevel) {
+                flag = i;
+                break;
             }
+        }
+        QueryPersonVipVO queryPersonVipVO = queryPersonVipVOList.get(flag);
+        Integer flagLevel = queryPersonVipVO.getVipLevel();
+        Integer flagId = queryPersonVipVO.getId();
+        Integer flagVipTypeId =queryPersonVipVO.getVipTypeId();
+        Date flagExpitrTime = queryPersonVipVO.getExpitrTime();
+        Date flagCreateTime = queryPersonVipVO.getCreateTime();
+
+        //添加会员
+        if (flag == queryPersonVipVOList.size() - 1 && vipLevel < flagLevel) {
+            AssoPersonVipType assoPersonVipType = new AssoPersonVipType();
+            assoPersonVipType.setCreateTime(flagExpitrTime);
+            assoPersonVipType.setExpitrTime(DateUtils.getPlusMonthDate(flagExpitrTime, lastMonth));
+            assoPersonVipType.setPersonId(personId);
+            assoPersonVipType.setVipTypeId(vipId);
+            assoPersonVipType.insert();
+        } else {
 
-            if (endDate == null) {
-                QueryPersonVipVO queryPersonVipVOLast = queryPersonVipVOList.get(queryPersonVipVOList.size() - 1);
-                startDate = queryPersonVipVOLast.getExpitrTime();
-                endDate = DateUtils.getPlusMonthDate(startDate, lastMonth);
+            if (flagVipTypeId == vipId) {
+                flagExpitrTime = DateUtils.getPlusMonthDate(flagExpitrTime, lastMonth);
+                LambdaUpdateWrapper<AssoPersonVipType> queryWrapper = new LambdaUpdateWrapper<>();
+                queryWrapper.set(AssoPersonVipType::getExpitrTime, flagExpitrTime).eq(AssoPersonVipType::getId, flagId);
+                this.update(queryWrapper);
+                flag = flag + 1;
+            } else {
+                AssoPersonVipType assoPersonVipType = new AssoPersonVipType();
+                assoPersonVipType.setCreateTime(flagCreateTime);
+                assoPersonVipType.setExpitrTime(DateUtils.getPlusMonthDate(flagCreateTime, lastMonth));
+                assoPersonVipType.setPersonId(personId);
+                assoPersonVipType.setVipTypeId(vipId);
+                assoPersonVipType.insert();
             }
-            if (ifInsert == false) {
-                //TODO 插入
+            if (flag <= queryPersonVipVOList.size() - 1) {
+
+                for (int i = flag; i < queryPersonVipVOList.size(); i++) {
+                    QueryPersonVipVO temQueryPersonVipVO = queryPersonVipVOList.get(i);
+                    Integer temId = temQueryPersonVipVO.getId();
+                    Date temExpitrTime = temQueryPersonVipVO.getExpitrTime();
+                    Date temCreateTime = temQueryPersonVipVO.getCreateTime();
+                    Date temExpitrTime1 = DateUtils.getPlusMonthDate(temExpitrTime, lastMonth);
+                    Date temCreateTime1 = DateUtils.getPlusMonthDate(temCreateTime, lastMonth);
+                    LambdaUpdateWrapper<AssoPersonVipType> queryWrapper = new LambdaUpdateWrapper<>();
+                    queryWrapper.set(AssoPersonVipType::getCreateTime, temCreateTime1).set(AssoPersonVipType::getExpitrTime, temExpitrTime1).eq(AssoPersonVipType::getId, temId);
+                    this.update(queryWrapper);
+                }
             }
         }
     }

+ 136 - 1
PCS/src/main/java/cn/cslg/permission/service/qiaobi/PayOrderService.java

@@ -1,14 +1,31 @@
 package cn.cslg.permission.service.qiaobi;
 
-import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderAddMessageDTO;
+import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.common.CommonVO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.*;
+import cn.cslg.permission.common.model.vo.PersonnelVO;
 import cn.cslg.permission.common.utils.BatchNoUtil;
+import cn.cslg.permission.common.utils.CacheUtils;
+import cn.cslg.permission.domain.Personnel;
+import cn.cslg.permission.domain.Tenant;
+import cn.cslg.permission.service.PersonnelService;
+import cn.cslg.permission.service.common.LoadService;
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import cn.cslg.permission.domain.qiaobi.PayOrder;
 import cn.cslg.permission.mapper.qiaobi.PayOrderMapper;
 import com.google.gson.JsonObject;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * @author admin
  * @description 针对表【PAY_ORDER(订单表)】的数据库操作Service实现
@@ -16,6 +33,12 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class PayOrderService extends ServiceImpl<PayOrderMapper, PayOrder> {
+    @Autowired
+    private LoadService loadService;
+    @Autowired
+    private CacheUtils cacheUtils;
+    @Autowired
+    private PersonnelService personnelService;
 
     public PayOrder addPayOrder(PayOrderAddMessageDTO payOrderAddMessageDTO) {
         String tradeNo = BatchNoUtil.getOrderNo();
@@ -30,6 +53,118 @@ public class PayOrderService extends ServiceImpl<PayOrderMapper, PayOrder> {
         payOrder.insert();
         return payOrder;
     }
+
+    public PayOrder getPayOrderByNo(String tradeNo) {
+        LambdaQueryWrapper<PayOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(PayOrder::getTradeNo, tradeNo);
+        PayOrder payOrder = this.getOne(queryWrapper, false);
+        return payOrder;
+
+    }
+
+    public Records queryPayRecord(PayOrderQueryDTO payOrderQueryDTO) {
+        Records records = new Records();
+        Long current = payOrderQueryDTO.getCurrent();
+        Long size = payOrderQueryDTO.getSize();
+        records.setSize(size);
+        records.setCurrent(current);
+        if (current != null && size != null) {
+            payOrderQueryDTO.setCurrent(((current - 1) * size));
+        }
+        PersonnelVO personnelVO1 = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt());
+        System.out.println("角色类型" + personnelVO1.getRoleType());
+        // 代码控制若不是超级管理员则只能查看本租户的人员列表
+        if (personnelVO1.getRoleType() == null || personnelVO1.getRoleType() == 0) {
+            payOrderQueryDTO.setPersonId(Integer.parseInt(personnelVO1.getId()));
+        } else if (personnelVO1.getRoleType() != null && personnelVO1.getRoleType() == 2) {
+            payOrderQueryDTO.setTenantId(personnelVO1.getTenantId());
+        }
+        List<PayOrderQueryVO> payOrderList = this.getBaseMapper().queryPayRecord(payOrderQueryDTO);
+        Long total = this.getBaseMapper().queryPayRecordTotal(payOrderQueryDTO);
+        List<CommonVO> reVOs = this.loadPayOrderVO(payOrderList);
+        records.setRecords(reVOs);
+        records.setTotal(total);
+        return records;
+    }
+
+    public List<CommonVO> loadPayOrderVO(List<PayOrderQueryVO> payOrderList) {
+        List<CommonVO> payOrderQueryVOs = new ArrayList<>();
+        if (payOrderList == null || payOrderList.size() == 0) {
+            return payOrderQueryVOs;
+        }
+        for (PayOrderQueryVO payOrderQueryVO : payOrderList) {
+            String goodMessage = payOrderQueryVO.getGoodMessage();
+            Integer orderStatus = payOrderQueryVO.getOrderStatus();
+            if (orderStatus != null && orderStatus.equals(1)) {
+                payOrderQueryVO.setOrderStatusStr("已支付");
+            } else {
+                payOrderQueryVO.setOrderStatusStr("未支付");
+            }
+            List<OrderGoodDTO> orderGoodDTOList = JSONArray.parseArray(goodMessage, OrderGoodDTO.class);
+            payOrderQueryVO.setGoodList(orderGoodDTOList);
+        }
+        loadService.loadCommonVOWithInviteName(payOrderQueryVOs);
+        return payOrderQueryVOs;
+    }
+
+    public Records groupPayRecord(PayOrderGroupByDTO payOrderGroupByDTO) {
+        Long current = payOrderGroupByDTO.getCurrent();
+        Long size = payOrderGroupByDTO.getSize();
+        Records records = new Records();
+        Integer groupBy = payOrderGroupByDTO.getGroupBy();
+        payOrderGroupByDTO.setGroupField("DATE_FORMAT(a.CREATE_TIME, '%Y')");
+        switch (groupBy) {
+            case 1:
+                payOrderGroupByDTO.setGroupField(" DATE_FORMAT(a.CREATE_TIME, '%Y-%m')");
+                break;
+            case 2:
+                payOrderGroupByDTO.setGroupField("CONCAT(YEAR(a.CREATE_TIME), '-第', QUARTER(a.CREATE_TIME),'季度')");
+                break;
+            case 3:
+                payOrderGroupByDTO.setGroupField("DATE_FORMAT(a.CREATE_TIME, '%Y')");
+                break;
+            case 4:
+                payOrderGroupByDTO.setGroupField("b.PERSON_ID1");
+                break;
+        }
+//        PersonnelVO personnelVO1 = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt());
+        PersonnelVO personnelVO1 = new PersonnelVO();
+        personnelVO1.setRoleType(1);
+        // 代码控制若不是超级管理员则只能查看本租户的人员列表
+        if (personnelVO1.getRoleType() == null || personnelVO1.getRoleType() == 0) {
+            payOrderGroupByDTO.setPersonId(Integer.parseInt(personnelVO1.getId()));
+        } else if (personnelVO1.getRoleType() != null && personnelVO1.getRoleType() == 2) {
+            payOrderGroupByDTO.setTenantId(personnelVO1.getTenantId());
+        }
+        List<PayOrderGroupVO> payOrderGroupVOS = this.getBaseMapper().groupPayRecord(payOrderGroupByDTO);
+        if (groupBy == 4) {
+            List<String> invitedIds = payOrderGroupVOS.stream().filter(item -> item.getGroupKey() != null).map(PayOrderGroupVO::getGroupKey).collect(Collectors.toList());
+            List<Integer> ids = new ArrayList<>();
+            invitedIds.forEach(item -> {
+                ids.add(Integer.parseInt(item));
+            });
+            List<Personnel> personnelList = new ArrayList<>();
+            if (invitedIds != null && invitedIds.size() > 0) {
+                personnelList = personnelService.getPersonByIds(ids);
+            }
+            for (PayOrderGroupVO payOrderGroupVO : payOrderGroupVOS) {
+                if (payOrderGroupVO.getGroupKey() == null) {
+                    payOrderGroupVO.setGroupKey("无邀请人");
+                } else {
+                    Personnel personnel2 = personnelList.stream().filter(item -> item.getId().equals(Integer.parseInt(payOrderGroupVO.getGroupKey()))).findFirst().orElse(null);
+                    if (personnel2 != null) {
+                        payOrderGroupVO.setGroupKey(personnel2.getPersonnelName());
+                    }
+                }
+            }
+        }
+        Long total = this.getBaseMapper().groupPayRecordTotal(payOrderGroupByDTO);
+        records.setRecords(payOrderGroupVOS);
+        records.setCurrent(current);
+        records.setTotal(total);
+        records.setSize(size);
+        return records;
+    }
 }
 
 

+ 73 - 7
PCS/src/main/java/cn/cslg/permission/service/weixinpay/WeixinPayService.java

@@ -2,10 +2,14 @@ package cn.cslg.permission.service.weixinpay;
 
 import cn.cslg.permission.common.model.qiaobi.payOrder.OrderGoodDTO;
 import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderAddMessageDTO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.WeixinSuccessVO;
 import cn.cslg.permission.common.model.qiaobi.strategy.QueryGoodsStrategyVO;
 import cn.cslg.permission.common.model.weixinpay.GetAuthorizationVO;
 import cn.cslg.permission.common.utils.BatchNoUtil;
+import cn.cslg.permission.common.utils.LoginUtils;
+import cn.cslg.permission.common.utils.SecurityUtils.AesUtil;
 import cn.cslg.permission.common.utils.common.BigDecimalUtil;
+import cn.cslg.permission.domain.qiaobi.AssoPersonFunction;
 import cn.cslg.permission.domain.qiaobi.Goods;
 import cn.cslg.permission.domain.qiaobi.PayOrder;
 import cn.cslg.permission.exception.ExceptionEnum;
@@ -13,16 +17,21 @@ import cn.cslg.permission.exception.XiaoShiException;
 import cn.cslg.permission.factory.strategy.StrategyFatcory;
 import cn.cslg.permission.factory.strategy.StrategyImp;
 import cn.cslg.permission.mapper.qiaobi.MarketStrategyMapper;
+import cn.cslg.permission.service.qiaobi.AssoPersonFunctionService;
+import cn.cslg.permission.service.qiaobi.AssoPersonVipTypeService;
 import cn.cslg.permission.service.qiaobi.GoodsService;
 import cn.cslg.permission.service.qiaobi.PayOrderService;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
 import okhttp3.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -39,9 +48,19 @@ public class WeixinPayService {
     private StrategyFatcory strategyFatcory;
     @Autowired
     private PayOrderService payOrderService;
+    @Autowired
+    private AssoPersonVipTypeService assoPersonVipTypeService;
+    @Autowired
+    private AssoPersonFunctionService assoPersonFunctionService;
+    @Autowired
+    private LoginUtils loginUtils;
+    public static String apiV3key = "9Cx7SiQb7il8Zaf8nsBw5QxSCVZkoO7p";
+    @Value("${payCallBack}")
+    public String payCallBack;
+
     @Transactional(rollbackFor = Exception.class)
     public String getPayTickets(PayOrderAddMessageDTO payOrderAddMessageDTO) {
-        String codeUrl="";
+        String codeUrl = "";
         payOrderAddMessageDTO = this.calculatePrice(payOrderAddMessageDTO);
         PayOrder payOrder = payOrderService.addPayOrder(payOrderAddMessageDTO);
         String url = "https://api.mch.weixin.qq.com/v3/pay/transactions/native";
@@ -49,7 +68,7 @@ public class WeixinPayService {
         com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest prepayRequest = new com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest();
         String appId = "wxe5f9b6e3d532e6c3";
         String merchantId = "1718408246";
-        String notifyUrl = "https://fms.xsip.cn/permission/qiaoBi/pay/success";
+        String notifyUrl = payCallBack;
         prepayRequest.setAppid(appId);
         prepayRequest.setMchid(merchantId);
         prepayRequest.setOutTradeNo(tradeNo);
@@ -85,11 +104,11 @@ public class WeixinPayService {
             // 打印服务端返回结果
             String a = Objects.requireNonNull(response.body()).string();
             JSONObject jsonObject = JSONObject.parseObject(a);
-           Object codeUrlObject=   jsonObject.get("code_url");
-           if(codeUrlObject==null){
-             throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR,"请求微信支付接口错误,请联系管理员排查");
-           }
-             codeUrl =codeUrlObject.toString();
+            Object codeUrlObject = jsonObject.get("code_url");
+            if (codeUrlObject == null) {
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "请求微信支付接口错误,请联系管理员排查");
+            }
+            codeUrl = codeUrlObject.toString();
 //            }
 
         } catch (Exception e) {
@@ -146,4 +165,51 @@ public class WeixinPayService {
         payOrderAddMessageDTO.setOrgTotalPrice(orgTotalPrice);
         return payOrderAddMessageDTO;
     }
+
+    public WeixinSuccessVO decryptMessage(String associatedData, String nonce, String ciphertext) throws Exception {
+        Integer q = apiV3key.length();
+        System.out.println(q);
+        String key = "9Cx7SiQb7il8Zaf8nsBw5QxSCVZkoO7p";
+        AesUtil aesUtil = new AesUtil(key.getBytes(StandardCharsets.UTF_8));
+        String d = aesUtil.decryptToString(associatedData.getBytes(StandardCharsets.UTF_8), nonce.getBytes(StandardCharsets.UTF_8), ciphertext);
+
+        WeixinSuccessVO weixinSuccessVO = JSONObject.parseObject(d, WeixinSuccessVO.class);
+        return weixinSuccessVO;
+
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void complateOrder(String tradeNo) {
+
+        PayOrder payOrder = payOrderService.getPayOrderByNo(tradeNo);
+        if (payOrder == null) {
+            throw new XiaoShiException("查询订单错误,报警处理");
+        }
+        String goodMessage = payOrder.getGoodMessage();
+        List<OrderGoodDTO> orderGoodDTOList = JSONArray.parseArray(goodMessage, OrderGoodDTO.class);
+        for (int i = 0; i < orderGoodDTOList.size(); i++) {
+            OrderGoodDTO orderGoodDTO = orderGoodDTOList.get(i);
+            Goods goods = orderGoodDTO.getGoods();
+            Integer type = goods.getGoodType();
+            Integer totalNum = orderGoodDTO.getTotalNum();
+            if (totalNum == null) {
+                totalNum = orderGoodDTO.getNum();
+            }
+            if (type == 1) {
+                Integer vipId = goods.getGoodId();
+                Integer goodUnit = goods.getGoodUnit();
+                assoPersonVipTypeService.addPersonVIP2(vipId, totalNum, goodUnit);
+            } else if (type == 2) {
+                Integer functionId = goods.getGoodId();
+                AssoPersonFunction assoPersonFunction = new AssoPersonFunction();
+                assoPersonFunction.setFunctionId(functionId);
+                assoPersonFunction.setPersonId(loginUtils.getId());
+                assoPersonFunction.setCanUseCount(totalNum);
+                assoPersonFunction.insert();
+            }
+
+
+        }
+
+    }
 }

+ 2 - 1
PCS/src/main/resources/application-dev.yml

@@ -50,4 +50,5 @@ SMS:
   secret: Y6Erboh5lEFiRPR4XK8oCPMvUzYGLN
 
 FMSUrl: http://192.168.2.24:8803
-Keypath: E:\账号密码\1718408246_20250606_cert\apiclient_key.pem
+Keypath: E:\账号密码\1718408246_20250606_cert\apiclient_key.pem
+payCallBack: http://sh.frp.one:33164/permission/qiaoBi/pay/success

+ 3 - 3
PCS/src/main/resources/mapper/AssoPersonVipTypeMapper.xml

@@ -15,9 +15,9 @@
     </resultMap>
 
 
-    <select id="getPersonActiveVip" resultMap="BaseResultMap">
-        select a.ID as id,b.VIP_LEVEL as level from  ASSO_PERSON_VIP_TYPE a left join APP_VIP_TYPE b on
-       a.VIP_TYPE_ID=b.TENANT_VIP_TYPE_ID and b.VIP_LEVEL
+    <select id="getPersonActiveVip" resultType="cn.cslg.permission.common.model.qiaobi.vipType.QueryPersonVipVO">
+        select a.ID as id,b.VIP_LEVEL as vipLevel,a.PERSON_ID,a.VIP_TYPE_ID, a.CREATE_TIME,a.EXPITR_TIME from  ASSO_PERSON_VIP_TYPE a left join APP_VIP_TYPE b on
+       a.VIP_TYPE_ID=b.TENANT_VIP_TYPE_ID
         <where>
             a.PERSON_ID=#{personId}
         and a.EXPITR_TIME> NOW()

+ 141 - 24
PCS/src/main/resources/mapper/PayOrderMapper.xml

@@ -4,28 +4,145 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.cslg.permission.mapper.qiaobi.PayOrderMapper">
 
-    <resultMap id="BaseResultMap" type="cn.cslg.permission.domain.qiaobi.PayOrder">
-            <id property="id" column="ID" jdbcType="INTEGER"/>
-            <result property="tradeNo" column="TRADE_NO" jdbcType="VARCHAR"/>
-            <result property="orderStatus" column="ORDER_STATUS" jdbcType="INTEGER"/>
-            <result property="orgPrice" column="ORG_PRICE" jdbcType="DOUBLE"/>
-            <result property="discount" column="DISCOUNT" jdbcType="DOUBLE"/>
-            <result property="truePrice" column="TRUE_PRICE" jdbcType="DOUBLE"/>
-            <result property="discountReason" column="DISCOUNT_REASON" jdbcType="VARCHAR"/>
-            <result property="payTime" column="PAY_TIME" jdbcType="TIMESTAMP"/>
-            <result property="createId" column="CREATE_ID" jdbcType="INTEGER"/>
-            <result property="createTime" column="CREATE_TIME" jdbcType="TIMESTAMP"/>
-            <result property="goodCount" column="GOOD_COUNT" jdbcType="INTEGER"/>
-            <result property="goodMessage" column="GOOD_MESSAGE" jdbcType="VARCHAR"/>
-            <result property="orderType" column="ORDER_TYPE" jdbcType="INTEGER"/>
-            <result property="marketStartegy" column="MARKET_STARTEGY" jdbcType="VARCHAR"/>
-    </resultMap>
-
-    <sql id="Base_Column_List">
-        ID,TRADE_NO,ORDER_STATUS,
-        ORG_PRICE,DISCOUNT,TRUE_PRICE,
-        DISCOUNT_REASON,PAY_TIME,CREATE_ID,
-        CREATE_TIME,GOOD_COUNT,GOOD_MESSAGE,
-        ORDER_TYPE,MARKET_STARTEGY
-    </sql>
+    <select id="queryPayRecord" resultType="cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderQueryVO">
+        select a.* from PAY_ORDER as a left join PERSON_RELATION as b on a.CREATE_ID=b.PERSON_ID2
+        <where>
+
+            <if test="invitePersonName!=null and !invitePersonName.trim().equals('')">
+                and b.PERSON_ID1 in(select ID from PERSONNEL where PERSONNEL_NAME like
+                concat('%',#{invitePersonName},'%'))
+            </if>
+
+            <if test="tenantName!=null and !tenantName.trim().equals('')">
+                and a.TENANT_ID in (select ID from TENANT where TENANT_NAME like concat('%',#{tenantName},'%'))
+            </if>
+
+            <if test="personName!=null and !personName.trim().equals('')">
+                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%'))
+            </if>
+            <if test="startTime!=null ">
+                and DATE_FORMAT(CREATE_TIME, '%Y-%m-%d')&lt;=DATE_FORMAT(#{startTime}, '%Y-%m-%d')
+            </if>
+            <if test="endTime!=null ">
+                and DATE_FORMAT(CREATE_TIME, '%Y-%m-%d') &lt;=DATE_FORMAT(#{endTime}, '%Y-%m-%d')
+            </if>
+            <if test="tenantId!=null ">
+                and TENANT_ID=#{tenantId}
+            </if>
+            <if test="personId!=null ">
+                and CREATE_ID=#{personId}
+            </if>
+            <if test="current!=null and size!=null">
+                limit #{current},#{size}
+            </if>
+        </where>
+    </select>
+
+    <select id="queryPayRecordTotal" resultType="java.lang.Long">
+        select count(*) from PAY_ORDER as a left join PERSON_RELATION as b on a.CREATE_ID=b.PERSON_ID2
+        <where>
+
+            <if test="invitePersonName!=null and !invitePersonName.trim().equals('')">
+                and b.PERSON_ID1 in(select ID from PERSONNEL where PERSONNEL_NAME like
+                concat('%',#{invitePersonName},'%'))
+            </if>
+
+            <if test="tenantName!=null and !tenantName.trim().equals('')">
+                and a.TENANT_ID in (select ID from TENANT where TENANT_NAME like concat('%',#{tenantName},'%'))
+            </if>
+
+            <if test="personName!=null and !personName.trim().equals('')">
+                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%'))
+            </if>
+            <if test="startTime!=null ">
+                and DATE_FORMAT(CREATE_TIME, '%Y-%m-%d')&lt;=DATE_FORMAT(#{startTime}, '%Y-%m-%d')
+            </if>
+            <if test="endTime!=null ">
+                and DATE_FORMAT(CREATE_TIME, '%Y-%m-%d') &lt;=DATE_FORMAT(#{endTime}, '%Y-%m-%d')
+            </if>
+            <if test="tenantId!=null ">
+                and TENANT_ID=#{tenantId}
+            </if>
+            <if test="personId!=null ">
+                and CREATE_ID=#{personId}
+            </if>
+            <if test="current!=null and size!=null">
+                limit #{current},#{size}
+            </if>
+        </where>
+    </select>
+
+    <select id="groupPayRecord" resultType="cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderGroupVO">
+        select ${groupField} as groupKey, count(distinct CREATE_ID) as personNum,sum(cast(TRUE_PRICE as decimal(18,2)))
+        as groupPrice from PAY_ORDER as a
+        left join PERSON_RELATION as b on a.CREATE_ID=b.PERSON_ID2
+        <where>
+
+            <if test="invitePersonName!=null and !invitePersonName.trim().equals('')">
+                and b.PERSON_ID1 in(select ID from PERSONNEL where PERSONNEL_NAME like
+                concat('%',#{invitePersonName},'%'))
+            </if>
+
+            <if test="tenantName!=null and !tenantName.trim().equals('')">
+                and a.TENANT_ID in (select ID from TENANT where TENANT_NAME like concat('%',#{tenantName},'%'))
+            </if>
+
+            <if test="personName!=null and !personName.trim().equals('')">
+                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%'))
+            </if>
+            <if test="startTime!=null ">
+                and DATE_FORMAT(CREATE_TIME, '%Y-%m-%d')&lt;=DATE_FORMAT(#{startTime}, '%Y-%m-%d')
+            </if>
+            <if test="endTime!=null ">
+                and DATE_FORMAT(CREATE_TIME, '%Y-%m-%d') &lt;=DATE_FORMAT(#{endTime}, '%Y-%m-%d')
+            </if>
+            <if test="tenantId!=null ">
+                and TENANT_ID=#{tenantId}
+            </if>
+            <if test="personId!=null ">
+                and CREATE_ID=#{personId}
+            </if>
+
+        </where>
+        group by ${groupField}
+        <if test="current!=null and size!=null">
+            limit #{current},#{size}
+        </if>
+    </select>
+
+
+    <select id="groupPayRecordTotal" resultType="java.lang.Long">
+        select count(*) from (select a.* from PAY_ORDER as a
+        left join PERSON_RELATION as b on a.CREATE_ID=b.PERSON_ID2
+        <where>
+
+            <if test="invitePersonName!=null and !invitePersonName.trim().equals('')">
+                and b.PERSON_ID1 in(select ID from PERSONNEL where PERSONNEL_NAME like
+                concat('%',#{invitePersonName},'%'))
+            </if>
+
+            <if test="tenantName!=null and !tenantName.trim().equals('')">
+                and a.TENANT_ID in (select ID from TENANT where TENANT_NAME like concat('%',#{tenantName},'%'))
+            </if>
+
+            <if test="personName!=null and !personName.trim().equals('')">
+                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%'))
+            </if>
+            <if test="startTime!=null ">
+                and DATE_FORMAT(CREATE_TIME, '%Y-%m-%d')&lt;=DATE_FORMAT(#{startTime}, '%Y-%m-%d')
+            </if>
+            <if test="endTime!=null ">
+                and DATE_FORMAT(CREATE_TIME, '%Y-%m-%d') &lt;=DATE_FORMAT(#{endTime}, '%Y-%m-%d')
+            </if>
+            <if test="tenantId!=null ">
+                and TENANT_ID=#{tenantId}
+            </if>
+            <if test="personId!=null ">
+                and CREATE_ID=#{personId}
+            </if>
+
+        </where>
+        group by ${groupField}
+        ) as t
+    </select>
 </mapper>

+ 30 - 0
PCS/src/test/java/cn/cslg/permission/commonServiceTest.java

@@ -0,0 +1,30 @@
+package cn.cslg.permission;
+
+import cn.cslg.permission.common.model.common.CommonVO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderQueryVO;
+import cn.cslg.permission.service.common.LoadService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class commonServiceTest {
+    @Autowired
+    private LoadService loadService;
+    @Test
+    public void testLoadService(){
+        List<CommonVO> queryVOList =new ArrayList<>();
+        PayOrderQueryVO payOrderQueryVO =new PayOrderQueryVO();
+        payOrderQueryVO.setCreateId(103);
+        payOrderQueryVO.setTradeNo("123");
+        queryVOList.add(payOrderQueryVO);
+        loadService.loadCommonVO(queryVOList);
+        System.out.println(queryVOList);
+    }
+}

+ 44 - 0
PCS/src/test/java/cn/cslg/permission/qiaobi/PayOrderSTest.java

@@ -0,0 +1,44 @@
+package cn.cslg.permission.qiaobi;
+
+import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderGroupByDTO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderGroupVO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderQueryDTO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderQueryVO;
+import cn.cslg.permission.domain.qiaobi.PayOrder;
+import cn.cslg.permission.mapper.qiaobi.PayOrderMapper;
+import cn.cslg.permission.service.qiaobi.PayOrderService;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class PayOrderSTest {
+    @Autowired
+    private PayOrderMapper payOrderMapper;
+    @Autowired
+    private PayOrderService payOrderService;
+
+    @Test
+    public void testQueryPayOrder() {
+        PayOrderQueryDTO payOrderQueryDTO = new PayOrderQueryDTO();
+//        payOrderQueryDTO.setInvitePersonName("高");
+//        payOrderQueryDTO.setTenantName("威");
+        payOrderQueryDTO.setPersonName("王");
+        List<PayOrderQueryVO> payOrderList = payOrderMapper.queryPayRecord(payOrderQueryDTO);
+        System.out.println(payOrderList);
+    }
+
+    @Test
+    public void testGroupPayOrder() {
+        PayOrderGroupByDTO payOrderGroupByDTO = new PayOrderGroupByDTO();
+        payOrderGroupByDTO.setGroupBy(3);
+        Records records = payOrderService.groupPayRecord(payOrderGroupByDTO);
+        System.out.println(records);
+    }
+}

+ 0 - 2
PCS/src/test/java/cn/cslg/permission/qiaobi/StatsTest.java

@@ -20,8 +20,6 @@ public void CompanyPersonSignUp(){
 
 
 
-
-
   PersonStatsVO personStatsVO= service.qiaoBiVIPTypeVOList();
 System.out.println(personStatsVO);
 

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 36 - 0
PCS/src/test/java/cn/cslg/permission/qiaobi/WexinxinPayTest.java