Преглед изворни кода

4/10 建立订单表,人员关注产品表

lwhhszx пре 1 година
родитељ
комит
b5ec4aacd7
23 измењених фајлова са 318 додато и 36 уклоњено
  1. 38 0
      src/main/java/com/example/xiaoshiweixinback/business/utils/AesUtil.java
  2. 17 0
      src/main/java/com/example/xiaoshiweixinback/business/utils/LoginUtils.java
  3. 12 0
      src/main/java/com/example/xiaoshiweixinback/business/utils/MD5Util.java
  4. 32 8
      src/main/java/com/example/xiaoshiweixinback/controller/PayController.java
  5. 7 0
      src/main/java/com/example/xiaoshiweixinback/controller/VIPController.java
  6. 1 1
      src/main/java/com/example/xiaoshiweixinback/domain/Order.java
  7. 2 1
      src/main/java/com/example/xiaoshiweixinback/domain/Vip.java
  8. 1 1
      src/main/java/com/example/xiaoshiweixinback/domain/es/Patent.java
  9. 1 0
      src/main/java/com/example/xiaoshiweixinback/entity/dto/GetProductDTO.java
  10. 3 0
      src/main/java/com/example/xiaoshiweixinback/entity/product/ProductDTO.java
  11. 8 0
      src/main/java/com/example/xiaoshiweixinback/entity/vip/ActiveVipDTO.java
  12. 0 1
      src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeiXinPayDTO.java
  13. 20 0
      src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeiXinSuccessDTO.java
  14. 68 0
      src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeixinPayNotifyData.java
  15. 25 0
      src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeixinSuccessVO.java
  16. 8 6
      src/main/java/com/example/xiaoshiweixinback/service/AssoPersonProductService.java
  17. 2 1
      src/main/java/com/example/xiaoshiweixinback/service/AssoPersonVipService.java
  18. 4 1
      src/main/java/com/example/xiaoshiweixinback/service/OrderService.java
  19. 1 3
      src/main/java/com/example/xiaoshiweixinback/service/ProductService.java
  20. 5 2
      src/main/java/com/example/xiaoshiweixinback/service/VipService.java
  21. 51 8
      src/main/java/com/example/xiaoshiweixinback/service/weixinpay/AuthorizationService.java
  22. 6 3
      src/main/java/com/example/xiaoshiweixinback/service/weixinpay/WeixinPayService.java
  23. 6 0
      src/main/resources/mapper/ProductMapper.xml

+ 38 - 0
src/main/java/com/example/xiaoshiweixinback/business/utils/AesUtil.java

@@ -0,0 +1,38 @@
+package com.example.xiaoshiweixinback.business.utils;
+
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Base64;
+import javax.crypto.Cipher;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.GCMParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+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);
+    }
+  }
+}

+ 17 - 0
src/main/java/com/example/xiaoshiweixinback/business/utils/LoginUtils.java

@@ -36,4 +36,21 @@ public class LoginUtils {
         String IdS = redisUtil.get(q);
         return Integer.parseInt(IdS);
     }
+
+
+    public static String getAuthorization() {
+        RequestAttributes ra = RequestContextHolder.getRequestAttributes();
+        ServletRequestAttributes sra = (ServletRequestAttributes) ra;
+        HttpServletRequest httpRequest = sra.getRequest();
+        String tem = httpRequest.getHeader("Authorization");
+        return tem;
+//        List<String> lst = StringUtils.changeStringToString(tem, ";");
+//        final String[] token = {null};
+//        lst.forEach(item -> {
+//            if (item.contains("token")) {
+//                token[0] = item;
+//            }
+//        });
+//        return token[0].replaceAll(" ", "");
+    }
 }

+ 12 - 0
src/main/java/com/example/xiaoshiweixinback/business/utils/MD5Util.java

@@ -90,4 +90,16 @@ public class MD5Util {
         return MD5(password + salt).equals(new String(cs1));
     }
 
+
+    public static byte[] hexStringToByteArray(String s) {
+
+        int len = s.length();
+        byte[] data = new byte[len / 2];
+        for (int i = 0; i < len; i += 2) {
+            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+                    + Character.digit(s.charAt(i+1), 16));
+        }
+        return data;
+    }
+
 }

Разлика између датотеке није приказан због своје велике величине
+ 32 - 8
src/main/java/com/example/xiaoshiweixinback/controller/PayController.java


+ 7 - 0
src/main/java/com/example/xiaoshiweixinback/controller/VIPController.java

@@ -4,6 +4,7 @@ import com.example.xiaoshiweixinback.business.common.Constants;
 import com.example.xiaoshiweixinback.business.common.Response;
 import com.example.xiaoshiweixinback.business.common.base.Records;
 import com.example.xiaoshiweixinback.entity.dto.ProductCategoryDTO;
+import com.example.xiaoshiweixinback.entity.vip.ActiveVipDTO;
 import com.example.xiaoshiweixinback.service.VipService;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
@@ -27,4 +28,10 @@ public class VIPController {
         return Response.success(records);
     }
 
+    @Operation(summary = "激活会员")
+    @PostMapping("/activeVip")
+    private Response activeVip(@RequestBody ActiveVipDTO activeVipDTO) {
+        vipService.activateVIP(activeVipDTO);
+        return Response.success("激活成功");
+    }
 }

+ 1 - 1
src/main/java/com/example/xiaoshiweixinback/domain/Order.java

@@ -12,7 +12,7 @@ import lombok.Data;
  * 订单表
  * @TableName order
  */
-@TableName(value ="order")
+@TableName(value ="pay_order")
 @Data
 public class Order extends BaseEntity<Order> {
     /**

+ 2 - 1
src/main/java/com/example/xiaoshiweixinback/domain/Vip.java

@@ -32,7 +32,8 @@ public class Vip extends BaseEntity<Vip> {
      *
      */
     private String name;
-    private String vipUuId;
+    private String vipUuid;
     private Integer lastTime;
     private Double price;
+    private String configParameter;
 }

+ 1 - 1
src/main/java/com/example/xiaoshiweixinback/domain/es/Patent.java

@@ -391,7 +391,7 @@ public class Patent {
     private Integer projectId;
 
     /**
-     * 专题库或报告id
+     * 商品id
      */
     @JsonProperty("product_id")
     private Integer productId;

+ 1 - 0
src/main/java/com/example/xiaoshiweixinback/entity/dto/GetProductDTO.java

@@ -11,4 +11,5 @@ private String name;
 private Long size;
 private Long current;
 private String personUuid;
+private List<Integer> concernTypes;
 }

+ 3 - 0
src/main/java/com/example/xiaoshiweixinback/entity/product/ProductDTO.java

@@ -2,9 +2,12 @@ package com.example.xiaoshiweixinback.entity.product;
 
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class ProductDTO {
     private String name;
     private Long current;
     private Long size;
+    private List<Integer> concernTypes;
 }

+ 8 - 0
src/main/java/com/example/xiaoshiweixinback/entity/vip/ActiveVipDTO.java

@@ -0,0 +1,8 @@
+package com.example.xiaoshiweixinback.entity.vip;
+
+import lombok.Data;
+
+@Data
+public class ActiveVipDTO {
+    private String tradeNo;
+}

+ 0 - 1
src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeiXinPayDTO.java

@@ -6,5 +6,4 @@ import lombok.Data;
 public class WeiXinPayDTO {
     private Integer goodType;
     private String goodUuid;
-    private Integer count;
 }

+ 20 - 0
src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeiXinSuccessDTO.java

@@ -0,0 +1,20 @@
+package com.example.xiaoshiweixinback.entity.weixinPay;
+
+import lombok.Data;
+
+@Data
+public class WeiXinSuccessDTO {
+    private String resource_type;
+    private String id;
+    private String event_type;
+    private String summary;
+   private Resource resource;
+
+    @Data
+    public static class Resource {
+        private String original_type;
+        private String ciphertext;
+        private String associated_data;
+        private String nonce;
+    }
+}

+ 68 - 0
src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeixinPayNotifyData.java

@@ -0,0 +1,68 @@
+package com.example.xiaoshiweixinback.entity.weixinPay;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.*;
+  
+@XmlRootElement(name = "xml")  
+@XmlAccessorType(XmlAccessType.FIELD)
+@Data
+public class WeixinPayNotifyData {  
+    @XmlElement(name = "return_code")  
+    private String returnCode;  
+      
+    @XmlElement(name = "return_msg")  
+    private String returnMsg;  
+      
+    @XmlElement(name = "appid")  
+    private String appid;  
+      
+    @XmlElement(name = "mch_id")  
+    private String mchId;  
+      
+    @XmlElement(name = "device_info")  
+    private String deviceInfo;  
+      
+    @XmlElement(name = "nonce_str")  
+    private String nonceStr;  
+      
+    @XmlElement(name = "sign")  
+    private String sign;  
+      
+    @XmlElement(name = "result_code")  
+    private String resultCode;  
+      
+    @XmlElement(name = "openid")  
+    private String openid;  
+      
+    @XmlElement(name = "is_subscribe")  
+    private String isSubscribe;  
+      
+    @XmlElement(name = "trade_type")  
+    private String tradeType;  
+      
+    @XmlElement(name = "bank_type")  
+    private String bankType;  
+      
+    @XmlElement(name = "total_fee")  
+    private String totalFee;  
+      
+    @XmlElement(name = "fee_type")  
+    private String feeType;  
+      
+    @XmlElement(name = "transaction_id")  
+    private String transactionId;  
+      
+    @XmlElement(name = "out_trade_no")  
+    private String outTradeNo; // 这就是订单号  
+      
+    @XmlElement(name = "attach")  
+    private String attach;  
+      
+    @XmlElement(name = "time_end")  
+    private String timeEnd;
+      
+    // 省略其他可能存在的字段和getter/setter方法...  
+      
+    // getter和setter方法...  
+}

+ 25 - 0
src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeixinSuccessVO.java

@@ -0,0 +1,25 @@
+package com.example.xiaoshiweixinback.entity.weixinPay;
+
+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 JsApiDTO.Amount amount;
+    private JsApiDTO.Payer payer;
+
+    @Data
+    public static class Amount {
+        private Integer total;
+        private String currency;
+    }
+
+    @Data
+    public static class Payer {
+        private String openid;
+    }
+}

+ 8 - 6
src/main/java/com/example/xiaoshiweixinback/service/AssoPersonProductService.java

@@ -15,16 +15,16 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 /**
-* @author admin
-* @description 针对表【asso_person_product(人员产品关联表)】的数据库操作Service实现
-* @createDate 2024-04-10 15:45:40
-*/
+ * @author admin
+ * @description 针对表【asso_person_product(人员产品关联表)】的数据库操作Service实现
+ * @createDate 2024-04-10 15:45:40
+ */
 @Service
 @RequiredArgsConstructor
 public class AssoPersonProductService extends ServiceImpl<AssoPersonProductMapper, AssoPersonProduct> {
     private final CacheUtil cacheUtil;
 
-    public Integer add(AssoPersonProductDTO assoPersonProductDTO){
+    public Integer add(AssoPersonProductDTO assoPersonProductDTO) {
         PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
         if (ToolUtil.isNotEmpty(personnelVO)) {
             AssoPersonProduct assoPersonProduct = new AssoPersonProduct();
@@ -37,9 +37,11 @@ public class AssoPersonProductService extends ServiceImpl<AssoPersonProductMappe
     }
 
 
-    public Integer cancel(Integer productId){
+    public Integer cancel(Integer productId) {
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
         LambdaQueryWrapper<AssoPersonProduct> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(AssoPersonProduct::getProductId, productId);
+        queryWrapper.eq(AssoPersonProduct::getPersonUuid, personnelVO.getUuid());
         AssoPersonProduct assoPersonProduct = this.getOne(queryWrapper, false);
         if (assoPersonProduct != null) {
             Boolean flag = cacheUtil.ifHavePermission(assoPersonProduct.getPersonUuid());

+ 2 - 1
src/main/java/com/example/xiaoshiweixinback/service/AssoPersonVipService.java

@@ -7,6 +7,7 @@ import com.example.xiaoshiweixinback.business.utils.DateUtils;
 import com.example.xiaoshiweixinback.domain.AssoPersonVip;
 import com.example.xiaoshiweixinback.domain.Vip;
 import com.example.xiaoshiweixinback.mapper.AssoPersonVipMapper;
+import jakarta.servlet.http.HttpServletRequest;
 import org.joda.time.DateTime;
 import org.springframework.stereotype.Service;
 
@@ -40,7 +41,7 @@ public class AssoPersonVipService extends ServiceImpl<AssoPersonVipMapper, AssoP
         Integer lastTime =vip.getLastTime();
        Date expiryDate = DateUtils.getPlusMonthDate(date,lastTime);
         assoPersonVip.setExpiryTime(expiryDate);
-        assoPersonVip.setVipUuid(vip.getVipUuId());
+        assoPersonVip.setVipUuid(vip.getVipUuid());
         assoPersonVip.setPersonUuid(personUuid);
         assoPersonVip.insert();
         return assoPersonVip;

+ 4 - 1
src/main/java/com/example/xiaoshiweixinback/service/OrderService.java

@@ -8,6 +8,8 @@ import com.example.xiaoshiweixinback.domain.AssoPersonProduct;
 
 import com.example.xiaoshiweixinback.domain.Order;
 import com.example.xiaoshiweixinback.domain.Vip;
+import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
+import com.example.xiaoshiweixinback.entity.vo.person.PersonVO;
 import com.example.xiaoshiweixinback.entity.weixinPay.GetPayTicketVO;
 import com.example.xiaoshiweixinback.entity.weixinPay.JsApiDTO;
 import com.example.xiaoshiweixinback.entity.weixinPay.WeiXinPayDTO;
@@ -30,7 +32,7 @@ public class OrderService extends ServiceImpl<OrderMapper, Order> {
     private VipService vipService;
 
     @Transactional(rollbackFor = Exception.class)
-    public Order addOrder(WeiXinPayDTO weiXinPayDTO, GetPayTicketVO getPayTicketVO, JsApiDTO jsApiDTO) {
+    public Order addOrder(WeiXinPayDTO weiXinPayDTO, GetPayTicketVO getPayTicketVO, JsApiDTO jsApiDTO, PersonnelVO personVO) {
         Integer type = weiXinPayDTO.getGoodType();
         String uuid = weiXinPayDTO.getGoodUuid();
 
@@ -49,6 +51,7 @@ public class OrderService extends ServiceImpl<OrderMapper, Order> {
                 order.setGoodsType(type);
                 order.setGoodUuid(uuid);
                 order.setOrderParameter(json);
+                order.setPersonUuid(personVO.getUuid());
                 break;
 
         }

+ 1 - 3
src/main/java/com/example/xiaoshiweixinback/service/ProductService.java

@@ -1,6 +1,5 @@
 package com.example.xiaoshiweixinback.service;
 
-import com.alibaba.druid.sql.visitor.functions.If;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -8,7 +7,6 @@ import com.example.xiaoshiweixinback.business.common.base.Records;
 import com.example.xiaoshiweixinback.business.common.base.SystemFile;
 import com.example.xiaoshiweixinback.business.utils.CacheUtil;
 import com.example.xiaoshiweixinback.business.utils.LoginUtils;
-import com.example.xiaoshiweixinback.business.utils.ToolUtil;
 import com.example.xiaoshiweixinback.domain.AssoPersonProduct;
 import com.example.xiaoshiweixinback.domain.AssoProductFile;
 import com.example.xiaoshiweixinback.domain.Product;
@@ -135,7 +133,7 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
 
             if (assoPersonProducts.size() != 0) {
                 AssoPersonProduct assoPersonProduct = assoPersonProducts.stream().filter(item -> item.getProductId().equals(productVO.getId())).findFirst().orElse(null);
-                if (ToolUtil.isNotEmpty(assoPersonProduct)) {
+                if(assoPersonProduct!=null) {
                     productVO.setConcernType(assoPersonProduct.getConcernType());
                 }
             }

+ 5 - 2
src/main/java/com/example/xiaoshiweixinback/service/VipService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.xiaoshiweixinback.business.common.base.Records;
 import com.example.xiaoshiweixinback.domain.*;
+import com.example.xiaoshiweixinback.entity.vip.ActiveVipDTO;
 import com.example.xiaoshiweixinback.mapper.VipMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -37,6 +38,7 @@ public class VipService extends ServiceImpl<VipMapper, Vip> {
     public Records getAllVip() {
         Records records = new Records();
         LambdaQueryWrapper<Vip> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select(Vip::getPrice,Vip::getVipUuid,Vip::getName,Vip::getConfigParameter);
         queryWrapper.ne(Vip::getVipType, 0);
         List<Vip> vipList = this.list(queryWrapper);
         records.setData(vipList);
@@ -45,14 +47,15 @@ public class VipService extends ServiceImpl<VipMapper, Vip> {
 
     public Vip getVipByUuId(String uuid) {
         LambdaQueryWrapper<Vip> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(Vip::getVipUuId, uuid);
+        queryWrapper.eq(Vip::getVipUuid, uuid);
         Vip vip = this.getOne(queryWrapper);
         return vip;
 
     }
 
 
-    public void activateVIP(String tradeNo) {
+    public void activateVIP(ActiveVipDTO activeVipDTO) {
+        String tradeNo = activeVipDTO.getTradeNo();
         Order order = orderService.getOrderByTradeNo(tradeNo);
         String uuid = order.getGoodUuid();
         String personUuId = order.getPersonUuid();

+ 51 - 8
src/main/java/com/example/xiaoshiweixinback/service/weixinpay/AuthorizationService.java

@@ -1,8 +1,12 @@
 package com.example.xiaoshiweixinback.service.weixinpay;
 
 import com.alibaba.druid.sql.ast.statement.SQLForeignKeyImpl;
+import com.alibaba.fastjson.JSONObject;
+import com.example.xiaoshiweixinback.business.utils.AesUtil;
+import com.example.xiaoshiweixinback.business.utils.MD5Util;
 import com.example.xiaoshiweixinback.business.utils.RandomUtil;
 import com.example.xiaoshiweixinback.entity.weixinPay.GetAuthorizationVO;
+import com.example.xiaoshiweixinback.entity.weixinPay.WeixinSuccessVO;
 import okhttp3.HttpUrl;
 import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
@@ -10,7 +14,10 @@ import org.bouncycastle.openssl.PEMParser;
 import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
 import org.springframework.stereotype.Service;
 
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
 import java.io.FileReader;
+import java.nio.charset.StandardCharsets;
 import java.security.PrivateKey;
 import java.security.Security;
 import java.security.Signature;
@@ -25,7 +32,7 @@ public class AuthorizationService {
      */
 
     public static String merchantId = "1673179188";
-
+    public static String appId = "wxaefb842bd0b93ff0";
     /**
      * 商户API私钥路径
      */
@@ -42,7 +49,7 @@ public class AuthorizationService {
      * 商户APIV3密钥
      */
 
-    public static String apiV3key = "wL3g4tAlOFe72gAd1THRqNPQsHIVxsYih6s20gN035oKRM3IBcd4c747zlQ1fLu8NrPCvGCo01Ox2jbDwkHJNaS9Yyn2R1NsTgoGWPObH6DWajwNBMrM3hjSC92XV3hJGfO7dkOsikNtHCigwFZk3DAXQmW6JLcl";
+    public static String apiV3key = "wL3g4tAlOFe72gAd1THRqNPQsHIVxsYi";
 
 //    public String getToken(String method, S, String body) throws Exception {
 //
@@ -83,13 +90,12 @@ public class AuthorizationService {
 //    }
 
     public GetAuthorizationVO getAuthorization(String type, String url, String body) throws Exception {
-       GetAuthorizationVO getAuthorizationVO =new GetAuthorizationVO();
+        GetAuthorizationVO getAuthorizationVO = new GetAuthorizationVO();
         String re = "WECHATPAY2-SHA256-RSA2048 ";
         re += "mchid=" + "\"" + merchantId + "\"";
-        Map<String, Object> map = new HashMap<>();
         String nonceStr = RandomUtil.generateRandomString(32);
         long timestamp = System.currentTimeMillis() / 1000;
-        String message = buildMessage(type,url,timestamp, nonceStr, body);
+        String message = buildMessage(type, url, timestamp, nonceStr, body);
         String signature = sign(message.getBytes("utf-8"));
         re += ",nonce_str=" + "\"" + nonceStr + "\"";
         re += ",signature=" + "\"" + signature + "\"";
@@ -100,8 +106,6 @@ public class AuthorizationService {
         getAuthorizationVO.setTimestamp(timestamp);
         getAuthorizationVO.setNonceStr(nonceStr);
         return getAuthorizationVO;
-
-
     }
 
     String sign(byte[] message) throws Exception {
@@ -127,7 +131,7 @@ public class AuthorizationService {
         }
     }
 
-    String buildMessage(String type,String url,long timestamp, String nonceStr, String body) {
+    String buildMessage(String type, String url, long timestamp, String nonceStr, String body) {
 
         String re = type + "\n"
 
@@ -143,4 +147,43 @@ public class AuthorizationService {
         return re;
     }
 
+
+    String buildFrontMessage(String prepayId, long timestamp, String nonceStr) {
+
+        String re = appId + "\n"
+
+                + timestamp + "\n"
+
+                + nonceStr + "\n"
+
+                + "prepay_id=" + prepayId + "\n";
+
+        return re;
+    }
+
+
+    public GetAuthorizationVO getFrontAuthorization(String prepayId) throws Exception {
+        GetAuthorizationVO getAuthorizationVO = new GetAuthorizationVO();
+
+        String nonceStr = RandomUtil.generateRandomString(32);
+        long timestamp = System.currentTimeMillis() / 1000;
+        String message = buildFrontMessage(prepayId, timestamp, nonceStr);
+        String signature = sign(message.getBytes("utf-8"));
+        getAuthorizationVO.setSignature(signature);
+        getAuthorizationVO.setTimestamp(timestamp);
+        getAuthorizationVO.setNonceStr(nonceStr);
+        return getAuthorizationVO;
+    }
+
+    public WeixinSuccessVO decryptMessage(String associatedData, String nonce, String ciphertext) throws Exception {
+      Integer q=  apiV3key.length();
+      System.out.println(q);
+      String key ="wL3g4tAlOFe72gAd1THRqNPQsHIVxsYi";
+        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;
+
+    }
 }

+ 6 - 3
src/main/java/com/example/xiaoshiweixinback/service/weixinpay/WeixinPayService.java

@@ -58,7 +58,7 @@ public class WeixinPayService {
         jsApiDTO.setOut_trade_no(tradeNo);
         JsApiDTO.Amount amount = new JsApiDTO.Amount();
         amount.setCurrency("CNY");
-        amount.setTotal(100);
+        amount.setTotal(1);
         jsApiDTO.setAmount(amount);
         JsApiDTO.Payer payer = new JsApiDTO.Payer();
         jsApiDTO.setNotify_url("https://xsip.cn/xiaoshi-weixinback/weixinpay/success");
@@ -89,8 +89,11 @@ public class WeixinPayService {
                 JSONObject jsonObject = JSONObject.parseObject(a);
                 getPayTicketVO.setPrepayId(jsonObject.get("prepay_id").toString());
 
-                orderService.addOrder(weiXinPayDTO,getPayTicketVO,jsApiDTO);
-
+                orderService.addOrder(weiXinPayDTO,getPayTicketVO,jsApiDTO,personnelVO);
+                GetAuthorizationVO authorizationVO1=    authorizationService.getFrontAuthorization(getPayTicketVO.getPrepayId());
+                getPayTicketVO.setTimestamp(authorizationVO1.getTimestamp());
+                getPayTicketVO.setNonceStr(authorizationVO1.getNonceStr());
+                getPayTicketVO.setSignature(authorizationVO1.getSignature());
                 return getPayTicketVO;
             }
 

+ 6 - 0
src/main/resources/mapper/ProductMapper.xml

@@ -63,6 +63,12 @@
                 and p.name like CONCAT('%',#{getProductDTO.name},'%')
             </if>
 
+            <if test="getProductDTO.concernTypes!=null and getProductDTO.concernTypes.size()>0">
+                and app.concern_type in
+                <foreach collection="getProductDTO.concernTypes" index="index" item="item" open="(" separator="," close=") ">
+                    #{item}
+                </foreach>
+            </if>
             <if test="getProductDTO.current!=null and getProductDTO.size!=null">
                 limit ${(getProductDTO.current -1)*getProductDTO.size},${getProductDTO.current*getProductDTO.size}
             </if>