From 2e9c442b4961dc30423e8b8fa1361c45e63ef620 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期三, 16 八月 2023 19:52:00 +0800
Subject: [PATCH] bug

---
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java              |    2 
 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml                                 |  118 ++++++++++++-------
 ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml                                                |    3 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/conslole/QYWXCallBackController.java |   41 ++++++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayConfiguration.java                    |   16 ++
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java      |    1 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java              |    8 +
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayProperties.java                         |    6 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java          |   47 +++++--
 ruoyi-modules/ruoyi-shop/src/main/resources/bootstrap.yml                                                 |    3 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java                |    3 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayProperties.java                       |    5 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java          |   33 ++++
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayConfiguration.java                      |    6 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtShopAuthDto.java                      |   15 +
 ruoyi-modules/ruoyi-system/pom.xml                                                                        |   11 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberNoClearOrderVo.java            |    3 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtShopAuthGetVo.java                     |    4 
 18 files changed, 248 insertions(+), 77 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
index 9cb015d..6be6e36 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -80,6 +80,8 @@
 
     String VERIFY_SHOP_ERROR = "该核销码不适用于本店铺";
 
+    String BLINDING_VERIFY_SHOP_ERROR = "绑定的店铺和优惠券所属店铺不一致";
+
     String ACTIVITY_NO_START = "活动还未开始";
 
     String ACTIVITY_END = "活动已经结束";
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java
index 2096001..3f6a248 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java
@@ -84,4 +84,7 @@
 
     @ApiModelProperty(value = "关联用户id集合")
     private List<Long> relUserIdList;
+
+    @ApiModelProperty(value = "宣传海报")
+    private String propagandaPoster;
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
index cdb1bb4..9d959a4 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -300,6 +300,7 @@
         coupon.setRelationType(mgtCouponEditDto.getRelationType());
         coupon.setRelationActivityType(mgtCouponEditDto.getRelationActivityType());
         coupon.setRelationActivityId(mgtCouponEditDto.getRelationActivityId());
+        coupon.setPropagandaPoster(mgtCouponEditDto.getPropagandaPoster());
         //判断是否指定商品
         if(coupon.getUseScope()==2&&!mgtCouponEditDto.getRelGoodsIdList().isEmpty()){
             List<String> relGoodsIdList = mgtCouponEditDto.getRelGoodsIdList();
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayConfiguration.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayConfiguration.java
index f5339cd..386931d 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayConfiguration.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayConfiguration.java
@@ -1,9 +1,14 @@
 package com.ruoyi.order.config;
 
+import com.github.binarywang.wxpay.config.WxPayConfig;
 import com.github.binarywang.wxpay.service.WxPayService;
+import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
+import com.ruoyi.common.core.utils.StringUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 /**
@@ -24,16 +29,19 @@
     return PLATFORM_TY_MAC_ID;
   }
 
-  /*@Bean
+  @Bean
   @ConditionalOnMissingBean
   public WxPayService wxService() {
-    *//*WxPayConfig payConfig = new WxPayConfig();
+    WxPayConfig payConfig = new WxPayConfig();
     payConfig.setAppId(StringUtils.trimToNull(this.properties.getAppId()));
     payConfig.setMchId(StringUtils.trimToNull(this.properties.getMchId()));
     payConfig.setMchKey(StringUtils.trimToNull(this.properties.getMchKey()));
     payConfig.setSubAppId(StringUtils.trimToNull(this.properties.getSubAppId()));
     payConfig.setSubMchId(StringUtils.trimToNull(this.properties.getSubMchId()));
     payConfig.setKeyPath(StringUtils.trimToNull(this.properties.getKeyPath()));
+    payConfig.setApiV3Key(StringUtils.trimToNull(this.properties.getApiV3Key()));
+    payConfig.setPrivateKeyPath(StringUtils.trimToNull(this.properties.getPrivateKeyPath()));
+    payConfig.setPrivateCertPath(StringUtils.trimToNull(this.properties.getPrivateCertPath()));
 
     // 平台特约商户号
     PLATFORM_TY_MAC_ID = this.properties.getPlatformTyMacId();
@@ -43,7 +51,7 @@
 
     WxPayService wxPayService = new WxPayServiceImpl();
     wxPayService.setConfig(payConfig);
-    return wxPayService;*//*
-  }*/
+    return wxPayService;
+  }
 
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayProperties.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayProperties.java
index 0089c12..b556b6e 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayProperties.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayProperties.java
@@ -46,4 +46,9 @@
    */
   private String keyPath;
 
+  private String apiV3Key;
+
+  private String privateKeyPath;
+
+  private String privateCertPath;
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java
index 07a4a0f..775d9da 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java
@@ -1,9 +1,34 @@
 package com.ruoyi.order.controller.miniapp;
 
+import com.github.binarywang.wxpay.bean.ecommerce.*;
+import com.github.binarywang.wxpay.bean.notify.WxPayNotifyV3Response;
+import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyData;
+import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.service.ProfitSharingV3Service;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.github.binarywang.wxpay.v3.auth.Verifier;
+import com.github.binarywang.wxpay.v3.util.AesUtils;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.order.domain.vo.ProfitSharingNotifyNewResult;
+import com.ruoyi.order.enums.WxPayNotifyEventTypeEnum;
+import com.ruoyi.order.service.account.BackMessageService;
+import com.ruoyi.order.service.order.OrderService;
 import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.security.GeneralSecurityException;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * @program: ruoyi
@@ -16,7 +41,7 @@
 @RequestMapping("/app/notify")
 public class NotifyController extends BaseController {
 
-    /*public static final String WECHAT_PAY_SERIAL = "Wechatpay-Serial";
+    public static final String WECHAT_PAY_SERIAL = "Wechatpay-Serial";
     public static final String WECHAT_PAY_SIGNATURE = "Wechatpay-Signature";
     public static final String WECHAT_PAY_TIMESTAMP = "Wechatpay-Timestamp";
     public static final String WECHAT_PAY_NONCE = "Wechatpay-Nonce";
@@ -144,5 +169,5 @@
         signatureHeader.setNonce(response.getHeader(WECHAT_PAY_NONCE));
         signatureHeader.setTimeStamp(response.getHeader(WECHAT_PAY_TIMESTAMP));
         return signatureHeader;
-    }*/
+    }
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberNoClearOrderVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberNoClearOrderVo.java
index 9f095b4..85a3ede 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberNoClearOrderVo.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberNoClearOrderVo.java
@@ -32,6 +32,9 @@
     @ApiModelProperty(value = "优惠券抵扣")
     private BigDecimal couponDiscount;
 
+    @ApiModelProperty(value = "支付方式1.全款2.订金")
+    private Integer payType;
+
     @ApiModelProperty(value="应收金额")
     private BigDecimal receivableMoney;
 
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
index 498dc32..a94f3ca 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1506,14 +1506,15 @@
         }
 
         //创建支付记录
-        PayRecord payRecord = new PayRecord();
-        payRecord.setDelFlag(0);
-        payRecord.setOrderId(order.getOrderId());
-        payRecord.setPayMoney(merVerifyOrderDto.getRelPayMoney());
-        payRecord.setPayTime(new Date());
-        payRecord.setPayType(merVerifyOrderDto.getPayType());
-        payRecordService.save(payRecord);
-
+        if(merVerifyOrderDto.getRelPayMoney().compareTo(BigDecimal.ZERO)>0){
+            PayRecord payRecord = new PayRecord();
+            payRecord.setDelFlag(0);
+            payRecord.setOrderId(order.getOrderId());
+            payRecord.setPayMoney(merVerifyOrderDto.getRelPayMoney());
+            payRecord.setPayTime(new Date());
+            payRecord.setPayType(merVerifyOrderDto.getPayType());
+            payRecordService.save(payRecord);
+        }
         //submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney());
 
         return merVerifyOrderVo;
@@ -1626,7 +1627,7 @@
         //如果是平台优惠券,当用户绑定商户时验证商户一致
         if (memberCoupon.getCouponFrom() == 1 && member.getBindingFlag() == 1) {
             if(!memberCoupon.getShopId().equals(member.getRelationShopId())){
-                throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+                throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR);
             }
             if(memberCoupon.getShopId().equals(shopId)){
                 throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
@@ -1848,15 +1849,17 @@
     @Override
     public List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) {
         List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberNoClearOrder(page, merMemberNoClearOrderDto.getMemberUserId());
-        /*if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) {
+        if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) {
             BigDecimal zeroBig = new BigDecimal("0.00");
             for (MerMemberNoClearOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) {
-                merMemberNoClearOrderVo.setUnPaidMoney(merMemberNoClearOrderVo.getReceivableMoney().subtract(merMemberNoClearOrderVo.getPayMoney()));
                 if (merMemberNoClearOrderVo.getUnPaidMoney() == null) {
                     merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                 }
+                if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){
+                    merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
+                }
             }
-        }*/
+        }
         return merMemberNoClearOrderVoList;
     }
 
@@ -1975,6 +1978,8 @@
         ConsumerGoods consumerGoods;
         String consumerGoodsId;
         List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
+        //使用优惠券
+        StringJoiner memberCouponSJ = new StringJoiner(",");
         for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
             goodsId = appBuyGoodsDto.getGoodsId();
             memberCouponId = appBuyGoodsDto.getMemberCouponId();
@@ -2009,7 +2014,7 @@
                     } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) {
                         discountPercent = appMemberCouponVo.getDiscountPercent();
                         goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP);
-                        discountMoney = goodsRealPrice.subtract(goodsTotalPrice);
+                        discountMoney = goodsTotalPrice.subtract(goodsRealPrice);
                     } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) {
                         discountMoney = appMemberCouponVo.getDiscountMoney();
                         goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
@@ -2018,6 +2023,7 @@
                         goodsRealPrice = BigDecimal.ZERO;
                         discountMoney = goodsTotalPrice.subtract(goodsRealPrice);
                     }
+                    memberCouponSJ.add(memberCouponId);
                 }
             }
             goodsDeposit = goods.getSubscription();
@@ -2169,6 +2175,10 @@
         this.save(order);
         orderGoodsService.saveBatch(orderGoodsList);
         consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
+        //减去优惠券
+        if (StringUtils.isNotBlank(memberCouponSJ.toString())) {
+            remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
+        }
         //用户未绑定则绑定商户
         Member member = remoteMemberService.getMember(userId).getData();
         if (member != null && member.getBindingFlag() != 1) {
@@ -2245,6 +2255,9 @@
                 if (merOrderPageVo.getUnPaidMoney() == null) {
                     merOrderPageVo.setUnPaidMoney(zeroBig);
                 }
+                if(merOrderPageVo.getUnPaidMoney().compareTo(zeroBig)<0){
+                    merOrderPageVo.setUnPaidMoney(zeroBig);
+                }
             }
             MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
             mgtBaseBathDto.setIds(userIdSj.toString());
@@ -2276,6 +2289,9 @@
             BigDecimal zeroBig = new BigDecimal("0.00");
             for (MerMemberOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) {
                 if (merMemberNoClearOrderVo.getUnPaidMoney() == null) {
+                    merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
+                }
+                if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){
                     merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                 }
             }
@@ -3234,7 +3250,7 @@
         //如果是平台优惠券,当用户绑定商户时验证商户一致
         if (memberCoupon.getCouponFrom() == 1 && member.getBindingFlag() == 1) {
             if(!memberCoupon.getShopId().equals(member.getRelationShopId())){
-                throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+                throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR);
             }
             if(memberCoupon.getShopId().equals(shopId)){
                 throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
@@ -4490,6 +4506,9 @@
                 if (merOrderPageVo.getUnPaidMoney() == null) {
                     merOrderPageVo.setUnPaidMoney(zeroBig);
                 }
+                if(merOrderPageVo.getUnPaidMoney().compareTo(zeroBig)<0){
+                    merOrderPageVo.setUnPaidMoney(zeroBig);
+                }
             }
             MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
             mgtBaseBathDto.setIds(userIdSj.toString());
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml
index 1bf0074..59efa1b 100644
--- a/ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml
@@ -34,4 +34,7 @@
     subAppId: #服务商模式下的子商户公众账号ID
     subMchId: #服务商模式下的子商户号
     keyPath: /home/cert/apiclient_cert.p12
+    apiV3Key: J8v9JDHKJYDHW9bdk30o2bdjy6z9mn1A
+    privateKeyPath: /home/cert/apiclient_key.pem
+    privateCertPath: /home/cert/apiclient_cert.pem
 
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
index a3eb2b2..b50b79f 100644
--- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -36,18 +36,25 @@
         <result column="shopId" property="shopId" />
         <result column="orderFrom" property="orderFrom" />
         <result column="createTime" property="createTime" />
-        <result column="keyword" property="keyword"/>
         <collection property="appUserOrderGoodsPageVoList"
                     ofType="com.ruoyi.order.domain.vo.AppUserOrderGoodsPageVo"
                     select="listOrderGoodsByOrderId"
-                    column="{orderId=orderId,keyword=keyword}">
+                    column="{orderId=orderId}">
             <id column="orderGoodsId" property="orderGoodsId"/>
             <result column="goodsId" property="goodsId"/>
             <result column="goodsName" property="goodsName"/>
+            <result column="goodsIntroduction" property="goodsIntroduction"/>
+            <result column="goodsPicture" property="goodsPicture"/>
+            <result column="goodsType" property="goodsType"/>
+            <result column="buyNum" property="buyNum"/>
+            <result column="goodsPrice" property="goodsPrice"/>
+            <result column="goodsRealPrice" property="goodsRealPrice" />
+            <result column="cycleNumFlag" property="cycleNumFlag" />
+            <result column="serviceNum" property="serviceNum" />
         </collection>
     </resultMap>
 
-    <resultMap id="com.ruoyi.order.domain.vo.AppUserOrderGoodsPageVo" type="orderGoodsResultMap">
+    <!--<resultMap id="orderGoodsResultMap" type="com.ruoyi.order.domain.vo.AppUserOrderGoodsPageVo">
         <result column="orderGoodsId" property="orderGoodsId"/>
         <result column="goodsId" property="goodsId"/>
         <result column="goodsName" property="goodsName"/>
@@ -59,7 +66,7 @@
         <result column="goodsRealPrice" property="goodsRealPrice" />
         <result column="cycleNumFlag" property="cycleNumFlag" />
         <result column="serviceNum" property="serviceNum" />
-    </resultMap>
+    </resultMap>-->
 
 
 
@@ -80,7 +87,10 @@
         <result column="orderRemark" property="orderRemark" />
         <result column="orderFrom" property="orderFrom" />
         <result column="createTime" property="createTime" />
-        <collection property="merOrderGoodsVoList" ofType="com.ruoyi.order.domain.vo.MerOrderGoodsPageVo">
+        <collection property="merOrderGoodsVoList"
+                    ofType="com.ruoyi.order.domain.vo.MerOrderGoodsPageVo"
+                    select="listSimpleOrderGoodsByOrderId"
+                    column="{orderId=orderId}">
             <result column="goodsName" property="goodsName"/>
             <result column="goodsType" property="goodsType"/>
             <result column="buyNum" property="buyNum"/>
@@ -100,7 +110,10 @@
         <result column="orderFrom" property="orderFrom" />
         <result column="orderFromDesc" property="orderFromDesc" />
         <result column="createTime" property="createTime" />
-        <collection property="mgtOrderGoodsVoList" ofType="com.ruoyi.order.domain.vo.MgtOrderGoodsPageVo">
+        <collection property="mgtOrderGoodsVoList"
+                    ofType="com.ruoyi.order.domain.vo.MgtOrderGoodsPageVo"
+                    select="listMgtSimpleOrderGoodsByOrderId"
+                    column="{orderId=orderId}">
             <result column="goodsName" property="goodsName"/>
             <result column="buyNum" property="buyNum"/>
         </collection>
@@ -119,7 +132,10 @@
         <result column="orderFrom" property="orderFrom"/>
         <result column="shopId" property="shopId"/>
         <result column="verifyTime" property="verifyTime"/>
-        <collection property="mgtOrderGoodsPageVoList" ofType="com.ruoyi.order.domain.vo.MgtOrderGoodsPageVo">
+        <collection property="mgtOrderGoodsVoList"
+                    ofType="com.ruoyi.order.domain.vo.MgtOrderGoodsPageVo"
+                    select="listAllSimpleOrderGoodsByOrderId"
+                    column="{orderId=orderId}">
             <result column="goodsName" property="goodsName"/>
             <result column="buyNum" property="buyNum"/>
         </collection>
@@ -135,7 +151,10 @@
         <result column="payMoney" property="payMoney"/>
         <result column="orderFrom" property="orderFrom"/>
         <result column="orderStatus" property="orderStatus"/>
-        <collection property="mgtOrderGoodsPageVoList" ofType="com.ruoyi.order.domain.vo.MgtOrderGoodsPageVo">
+        <collection property="mgtOrderGoodsVoList"
+                    ofType="com.ruoyi.order.domain.vo.MgtOrderGoodsPageVo"
+                    select="listAllSimpleOrderGoodsByOrderId"
+                    column="{orderId=orderId">
             <result column="goodsName" property="goodsName"/>
             <result column="buyNum" property="buyNum"/>
         </collection>
@@ -275,8 +294,7 @@
         toc.receivable_money receivableMoney,
         toc.goods_num goodsNum,
         toc.shop_id shopId,
-        toc.create_time createTime,
-        #{param.keyword} as keyword
+        toc.create_time createTime
         FROM t_order toc
         WHERE toc.del_flag = 0
         <if test="param.userId != null">
@@ -292,7 +310,7 @@
         ORDER BY toc.create_time DESC
     </select>
 
-    <select id="listOrderGoodsByOrderId" resultMap="orderGoodsResultMap">
+    <select id="listOrderGoodsByOrderId" resultType="com.ruoyi.order.domain.vo.AppUserOrderGoodsPageVo">
         SELECT
             tog.goods_id goodsId,
             tog.goods_name goodsName,
@@ -319,12 +337,13 @@
         toc.order_status orderStatus,
         toc.order_money orderGoodsMoney,
         toc.coupon_money couponDiscount,
-        CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN toc.order_money-toc.coupon_money-toc.online_pay_money END receivableMoney,
+        toc.pay_type payType,
+        CASE toc.pay_type WHEN 1 THEN toc.order_money-toc.coupon_money WHEN 2 THEN toc.order_money-toc.coupon_money-toc.online_pay_money END receivableMoney,
         toc.receivable_deposit receivableDeposit,
         toc.pay_money payMoney,
         toc.change_receivable_money relReceiveMoney,
-        CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END receiveMoney,
-        toc.change_receivable_money - (CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END) unPaidMoney,
+        CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END receiveMoney,
+        toc.change_receivable_money - (CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END) unPaidMoney,
         toc.create_time createTime
         FROM t_order toc
         WHERE toc.del_flag = 0 AND toc.user_id = #{userId} AND toc.order_status &gt;= 2 AND toc.close_flag = 0
@@ -340,21 +359,17 @@
         toc.order_status orderStatus,
         toc.order_money orderGoodsMoney,
         toc.coupon_money couponDiscount,
-        CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN toc.order_money-toc.coupon_money-toc.online_pay_money END receivableMoney,
+        CASE toc.pay_type WHEN 1 THEN toc.order_money-toc.coupon_money WHEN 2 THEN toc.order_money-toc.coupon_money-toc.online_pay_money END receivableMoney,
         toc.receivable_deposit receivableDeposit,
         toc.pay_money payMoney,
         toc.change_receivable_money relReceiveMoney,
-        CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END receiveMoney,
-        toc.change_receivable_money - (CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END) unPaidMoney,
+        CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END receiveMoney,
+        toc.change_receivable_money - (CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END) unPaidMoney,
         toc.order_remark orderRemark,
-        tog.goods_name goodsName,
-        tog.goods_type goodsType,
-        tog.buy_num buyNum,
         toc.create_time createTime,
         toc.order_from orderFrom,
         toc.activity_name activityName
         FROM t_order toc
-        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
         WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId}
         <if test="param.memberUserId != null and param.memberUserId != ''">
             AND toc.user_id = #{param.memberUserId}
@@ -378,7 +393,7 @@
             AND Date(toc.create_time) &lt;= #{param.endOrderDate}
         </if>
         <if test="param.keyword != null and param.keyword != ''">
-            AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR tog.goods_name LIKE CONCAT('%',#{param.keyword},'%')
+            AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR EXISTS( SELECT 1 FROM t_order_goods tog WHERE tog.order_id = toc.order_id AND tog.goods_name LIKE CONCAT('%',#{param.keyword},'%'))
             <if test="param.memberUserIdList != null and param.memberUserIdList.size()>0">
                 OR toc.user_id IN
                 <foreach collection="param.memberUserIdList" item="item" open="(" separator="," close=")">
@@ -390,7 +405,14 @@
         ORDER BY toc.create_time DESC
     </select>
 
-
+    <select id="listSimpleOrderGoodsByOrderId" resultType="com.ruoyi.order.domain.vo.AppUserOrderGoodsPageVo">
+        SELECT
+        tog.goods_name goodsName,
+        tog.goods_type goodsType,
+        tog.buy_num buyNum
+        FROM t_order_goods tog
+        WHERE tog.order_id = #{orderId}
+    </select>
 
     <select id="getMgtMemberOrderTotal" resultType="com.ruoyi.order.domain.vo.MgtMemberOrderTotalVo">
         SELECT
@@ -441,9 +463,9 @@
         WHEN 1 THEN "商城订单"
         WHEN 2 THEN "秒杀活动订单"
         WHEN 3 THEN "线下创建订单"
-        END orderFromDesc
+        END orderFromDesc,
+        #{param.keyword} AS keyword
         FROM t_order toc
-        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
         WHERE toc.del_flag = 0 AND toc.user_id = #{param.memberUserId}
         <if test="param.orderStatus != null">
             AND toc.order_status = #{param.orderStatus}
@@ -461,9 +483,28 @@
             AND Date(toc.create_time) &lt;= #{param.endOrderDate}
         </if>
         <if test="param.keyword != null and param.keyword != ''">
-            AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR tog.goods_name LIKE CONCAT('%',#{param.keyword},'%'))
+            AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') EXISTS( SELECT 1 FROM t_order_goods tog WHERE tog.order_id = toc.order_id AND tog.goods_name LIKE CONCAT('%',#{param.keyword},'%')))
         </if>
         ORDER BY toc.create_time DESC
+    </select>
+
+    <select id="listMgtSimpleOrderGoodsByOrderId" resultType="com.ruoyi.order.domain.vo.MgtOrderGoodsPageVo">
+        SELECT
+        tog.goods_name goodsName,
+        tog.buy_num buyNum
+        FROM t_order_goods tog
+        WHERE tog.order_id = #{orderId}
+        <if test="keyword != null and keyword != ''">
+            AND tog.goods_name LIKE CONCAT('%',#{keyword},'%')
+        </if>
+    </select>
+
+    <select id="listAllSimpleOrderGoodsByOrderId" resultType="com.ruoyi.order.domain.vo.MgtOrderGoodsPageVo">
+        SELECT
+        tog.goods_name goodsName,
+        tog.buy_num buyNum
+        FROM t_order_goods tog
+        WHERE tog.order_id = #{orderId}
     </select>
 
     <select id="pageMgtActivityOrder" resultType="com.ruoyi.order.domain.vo.MgtActivityOrderPageVo">
@@ -651,8 +692,6 @@
         toc.order_id orderId,
         toc.order_no orderNo,
         toc.user_id userId,
-        tog.goods_name goodsName,
-        tog.buy_num buyNum,
         toc.order_money orderMoney,
         toc.discount_money discountMoney,
         toc.receivable_money receivableMoney,
@@ -660,9 +699,9 @@
         toc.pay_money payMoney,
         toc.shop_id shopId,
         toc.use_time verifyTime,
-        CASE toc.order_from WHEN 1 THEN '小程序' WHEN 2 THEN '秒杀活动' WHEN 3 THEN '线下创建' END orderFrom
+        CASE toc.order_from WHEN 1 THEN '小程序' WHEN 2 THEN '秒杀活动' WHEN 3 THEN '线下创建' END orderFrom,
+        #{param.keyword} AS keyword
         FROM t_order toc
-        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
         WHERE toc.del_flag = 0 AND (toc.order_from = 1 OR toc.order_from = 3)
         <if test="param.orderStatus != null">
             AND toc.order_status = #{param.orderStatus}
@@ -1554,8 +1593,6 @@
         toc.order_id orderId,
         toc.order_no orderNo,
         toc.user_id userId,
-        tog.goods_name goodsName,
-        tog.buy_num buyNum,
         toc.order_money orderMoney,
         toc.discount_money discountMoney,
         toc.receivable_money receivableMoney,
@@ -1568,7 +1605,6 @@
         WHEN 3 THEN "已完成"
         END orderStatus
         FROM t_order toc
-        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
         WHERE toc.del_flag = 0 AND (toc.order_from = 1 OR toc.order_from = 3)
         <if test="param.orderFrom != null">
             AND toc.order_from = #{param.orderFrom}
@@ -1746,12 +1782,12 @@
             toc.order_status orderStatus,
             toc.order_money orderGoodsMoney,
             toc.coupon_money couponDiscount,
-            CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN toc.order_money-toc.coupon_money-toc.online_pay_money END receivableMoney,
+            CASE toc.pay_type WHEN 1 THEN toc.order_money-toc.coupon_money WHEN 2 THEN toc.order_money-toc.coupon_money-toc.online_pay_money END receivableMoney,
             toc.receivable_deposit receivableDeposit,
             toc.pay_money payMoney,
             toc.change_receivable_money relReceiveMoney,
-            CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END receiveMoney,
-            toc.change_receivable_money - (CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END) unPaidMoney,
+            CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END receiveMoney,
+            toc.change_receivable_money - (CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END) unPaidMoney,
             tpr.pay_time receiveMoneyTime,
             tpr.pay_money thisReceiveMoney,
             CASE tpr.pay_type WHEN 1 THEN "微信" WHEN 2 THEN "现金" WHEN 3 THEN "支付宝" END thisReceiveType
@@ -1770,20 +1806,16 @@
         toc.order_status orderStatus,
         toc.order_money orderGoodsMoney,
         toc.coupon_money couponDiscount,
-        CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN toc.order_money-toc.coupon_money-toc.online_pay_money END receivableMoney,
+        CASE toc.pay_type WHEN 1 THEN toc.order_money-toc.coupon_money WHEN 2 THEN toc.order_money-toc.coupon_money-toc.online_pay_money END receivableMoney,
         toc.receivable_deposit receivableDeposit,
         toc.pay_money payMoney,
         toc.change_receivable_money relReceiveMoney,
-        CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END receiveMoney,
-        toc.change_receivable_money - (CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END) unPaidMoney,
+        CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END receiveMoney,
+        toc.change_receivable_money - (CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END) unPaidMoney,
         toc.order_remark orderRemark,
-        tog.goods_name goodsName,
-        tog.goods_type goodsType,
-        tog.buy_num buyNum,
         toc.create_time createTime,
         toc.order_from orderFrom
         FROM t_order toc
-        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
         WHERE toc.del_flag = 0 AND (toc.order_status = 2 OR toc.order_status = 3) AND toc.shop_id = #{param.shopId} AND toc.user_id = #{param.memberUserId}
         ORDER BY toc.create_time DESC
     </select>
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayConfiguration.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayConfiguration.java
index f9b0538..b8f75b5 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayConfiguration.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayConfiguration.java
@@ -31,9 +31,9 @@
     payConfig.setSubAppId(StringUtils.trimToNull(this.properties.getSubAppId()));
     payConfig.setSubMchId(StringUtils.trimToNull(this.properties.getSubMchId()));
     payConfig.setKeyPath(StringUtils.trimToNull(this.properties.getKeyPath()));
-    payConfig.setApiV3Key("J8v9JDHKJYDHW9bdk30o2bdjy6z9mn1A");
-    payConfig.setPrivateKeyPath("/home/cert/apiclient_key.pem");
-    payConfig.setPrivateCertPath("/home/cert/apiclient_cert.pem");
+    payConfig.setApiV3Key(StringUtils.trimToNull(this.properties.getApiV3Key()));
+    payConfig.setPrivateKeyPath(StringUtils.trimToNull(this.properties.getPrivateKeyPath()));
+    payConfig.setPrivateCertPath(StringUtils.trimToNull(this.properties.getPrivateCertPath()));
     // 可以指定是否使用沙箱环境
     payConfig.setUseSandboxEnv(false);
 
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayProperties.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayProperties.java
index c1c4841..4a0ee96 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayProperties.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayProperties.java
@@ -41,4 +41,10 @@
    */
   private String keyPath;
 
+  private String apiV3Key;
+
+  private String privateKeyPath;
+
+  private String privateCertPath;
+
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtShopAuthDto.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtShopAuthDto.java
index c61a8bd..65bbc22 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtShopAuthDto.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtShopAuthDto.java
@@ -59,10 +59,11 @@
      */
     @ApiModelProperty(value = "营业执照注册地址")
     private String blRegisteredAddress;
-    /**
-     * 营业执照期限
-     */
-    @ApiModelProperty(value = "营业执照期限")
+
+    @ApiModelProperty(value = "营业执照开始时间")
+    private String blBusinessStartTime;
+
+    @ApiModelProperty(value = "营业执照截止日期")
     private String blBusinessDeanline;
 
     @ApiModelProperty(value = "营业执照期限长期标记0否1是")
@@ -82,6 +83,9 @@
      */
     @ApiModelProperty(value = "法人身份证号")
     private String lpIdCard;
+
+    @ApiModelProperty(value = "法人身份证地址")
+    private String lpIdAddress;
     /**
      * 法人身份证开始日期
      */
@@ -92,6 +96,9 @@
      */
     @ApiModelProperty(value = "法人身份证有效日期")
     private String lpIcEndDate;
+
+    @ApiModelProperty(value = "法人身份证长期标记0否1是")
+    private Integer lpIcForeverFlag;
     /**
      * 法人身份证正面
      */
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtShopAuthGetVo.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtShopAuthGetVo.java
index 115baea..105027f 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtShopAuthGetVo.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtShopAuthGetVo.java
@@ -99,6 +99,10 @@
      */
     @ApiModelProperty(value = "法人身份证有效日期")
     private String lpIcEndDate;
+
+    @ApiModelProperty(value = "法人身份证长期标记0否1是")
+    private Integer lpIcForeverFlag;
+
     /**
      * 法人身份证正面
      */
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
index 66ab37d..7d3ae1b 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -996,6 +996,9 @@
         if(mgtShopAuthDto.getBlBusinessFoeverFlag()!=null&&mgtShopAuthDto.getBlBusinessFoeverFlag()==1){
             mgtShopAuthDto.setBlBusinessDeanline("长期");
         }
+        if(mgtShopAuthDto.getLpIcForeverFlag()!=null&&mgtShopAuthDto.getLpIcForeverFlag()==1){
+            mgtShopAuthDto.setLpIcEndDate("长期");
+        }
         BeanUtils.copyProperties(mgtShopAuthDto , shopAuthentication);
         shopAuthentication.setApplyNumber(applyNumber);
         shopAuthentication.setAuditStatus(3);
@@ -1125,6 +1128,11 @@
         }else{
             shopAuthGetVo.setBlBusinessFoeverFlag(0);
         }
+        if(shopAuthGetVo.getLpIcEndDate().equals("长期")){
+            shopAuthGetVo.setLpIcForeverFlag(1);
+        }else{
+            shopAuthGetVo.setLpIcForeverFlag(0);
+        }
         return shopAuthGetVo;
     }
 
diff --git a/ruoyi-modules/ruoyi-shop/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-shop/src/main/resources/bootstrap.yml
index 2709352..e960bb0 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/resources/bootstrap.yml
+++ b/ruoyi-modules/ruoyi-shop/src/main/resources/bootstrap.yml
@@ -34,3 +34,6 @@
     subAppId: #服务商模式下的子商户公众账号ID
     subMchId: #服务商模式下的子商户号
     keyPath: /home/cert/apiclient_cert.p12
+    apiV3Key: J8v9JDHKJYDHW9bdk30o2bdjy6z9mn1A
+    privateKeyPath: /home/cert/apiclient_key.pem
+    privateCertPath: /home/cert/apiclient_cert.pem
diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml
index 5e36ebb..22676f1 100644
--- a/ruoyi-modules/ruoyi-system/pom.xml
+++ b/ruoyi-modules/ruoyi-system/pom.xml
@@ -114,11 +114,12 @@
             <scope>test</scope>
         </dependency>
 
-        <!--<dependency>
-            <groupId>org.apache.velocity</groupId>
-            <artifactId>velocity-engine-core</artifactId>
-            <version>2.3</version>
-        </dependency>-->
+        <!-- 企业微信 -->
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-cp</artifactId>
+            <version>4.5.0</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/conslole/QYWXCallBackController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/conslole/QYWXCallBackController.java
new file mode 100644
index 0000000..e18eb1b
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/conslole/QYWXCallBackController.java
@@ -0,0 +1,41 @@
+package com.ruoyi.system.controller.conslole;
+
+import com.esotericsoftware.minlog.Log;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.io.IOUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @ClassName QYWXCallBackController
+ * @Description TODO
+ * @Author jqs
+ * @Date 2023/8/16 16:56
+ * @Version 1.0
+ */
+@Api(value = "企业微信通知控制", tags = "企业微信通知控制", description = "企业微信通知控制")
+@RestController
+@RequestMapping("/qywx")
+public class QYWXCallBackController {
+
+
+    @ApiOperation(value = "消息与事件接收配置")
+    @RequestMapping(value = "/qywxNotify",
+            method = RequestMethod.POST,consumes = "text/xml",produces = "text/xml;charset=utf-8")
+    public String wechatPlatformEvent(@PathVariable String APPID,
+                                      HttpServletRequest request,
+                                      HttpServletResponse response
+    ) throws Exception {
+        String nonce = request.getParameter("nonce");
+        String timestamp = request.getParameter("timestamp");
+        String signature = request.getParameter("signature");
+        String msgSignature = request.getParameter("msg_signature");
+        String encType =  request.getParameter("encrypt_type");
+        String xml =  IOUtils.toString(request.getReader());
+        Log.info("企业微信回调"+xml);
+        return "SUCCESS";
+    }
+}

--
Gitblit v1.7.1