Browse Source

fix:我的优惠卷状态

wrj 11 months ago
parent
commit
d442bf3706

+ 205 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/WeChatController.java

@@ -0,0 +1,205 @@
+package com.ylx.web.controller.massage;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.extra.qrcode.QrCodeUtil;
+import cn.hutool.extra.qrcode.QrConfig;
+import com.alibaba.fastjson.JSONObject;
+import com.ylx.common.annotation.Log;
+import com.ylx.common.core.domain.R;
+import com.ylx.common.enums.BusinessType;
+import com.ylx.massage.utils.WeChatUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.Map;
+
+import static com.ylx.massage.utils.OtherUtil.verification;
+
+/**
+ * @author b16mt
+ */
+@Slf4j
+@RestController
+@RequestMapping("/weChat")
+public class WeChatController{
+
+    private final static String TOKEN = "abcd1234";
+    private final static String ENCODING = "UTF-8";
+    private final static String ACCESS_TOKEN = "access_token";
+    private final static String REFRESH_TOKEN = "refresh_token";
+    private final static String OPEN_ID = "openid";
+    private final static String NICK_NAME = "nickname";
+    private final static String SEX = "sex";
+    private final static String HEAD_IMG_URL = "headimgurl";
+    /**
+     * 二维码保存路径
+     */
+    private final static String IMG_PATH = "D:\\Users\\code.png";
+
+//    private final WeChatUserService weChatUserService;
+
+//    public WeChatController(WeChatUserService weChatUserService) {
+//        this.weChatUserService = weChatUserService;
+//    }
+    @Resource
+    private WeChatUtil weChatUtil;
+
+    /**
+     * 微信Token验证
+     *
+     * @param signature 微信加密签名
+     * @param timestamp 时间戳
+     * @param nonce 随机数
+     * @param echostr 随机字符串
+     * @param response HTTP响应对象
+     * @throws Exception 如果处理过程中出现错误
+     */
+    @GetMapping("/verifyToken")
+    public void verifyToken(@RequestParam(value = "signature") String signature,
+                            @RequestParam(value = "timestamp") String timestamp,
+                            @RequestParam(value = "nonce") String nonce,
+                            @RequestParam(value = "echostr") String echostr, HttpServletResponse response) throws Exception {
+
+        log.info("11111111111111111111111111111111111111111111");
+        // 参数排序
+        String[] params = new String[] { timestamp, nonce, TOKEN };
+        Arrays.sort(params);
+
+        // 校验成功则响应 echostr,失败则不响应
+        if (verification(params, signature) && echostr != null) {
+            response.setCharacterEncoding(ENCODING);
+            response.getWriter().write(echostr);
+            response.getWriter().flush();
+            response.getWriter().close();
+        }
+    }
+
+    @PostMapping("/verifyToken")
+    @Log(title = "公众号pverifyToken", businessType = BusinessType.OTHER)
+    public void pverifyToken(@RequestParam(value = "signature") String signature,
+                            @RequestParam(value = "timestamp") String timestamp,
+                            @RequestParam(value = "nonce") String nonce) {
+
+        log.info("11111111111111111111111111111111111111111111");
+        // 参数排序
+        String[] params = new String[] { timestamp, nonce, TOKEN };
+        Arrays.sort(params);
+
+//        {
+//            "signature": "63c8f3e1fb23d0d18f6d7ddf8019dc8a8737a04b",
+//                "openid": "oPYgb6qoOUXYIQLbB7f6zOF40kwk",
+//                "nonce": "1376426761",
+//                "timestamp": "1717569593"
+//        }
+
+    }
+
+    /**
+     * 获取微信code
+     *
+     * @param state 状态参数
+     */
+    @GetMapping("/getCode")
+    public void weiXinLogin(String state) {
+        QrConfig config = new QrConfig(300, 300);
+        // 设置边距,即二维码和背景之间的边距
+        config.setMargin(1);
+        // 生成二维码到文件,也可以到流
+
+
+        QrCodeUtil.generate(weChatUtil.getCode(state), config,
+                FileUtil.file(IMG_PATH));
+    }
+
+    /**
+     * 获取token和userInfo
+     *
+     * @param code 微信授权码
+     * @return 访问令牌
+     */
+    @GetMapping("/getAccessToken")
+    public String getAccessToken(@RequestParam String code) {
+        // 发送get请求获取 AccessToken
+        Map<?, ?> result = weChatUtil.getAccessToken(code);
+        String accessToken = result.get(ACCESS_TOKEN).toString();
+        String refreshToken = result.get(REFRESH_TOKEN).toString();
+        String openid = result.get(OPEN_ID).toString();
+
+//        WeChatUser user = weChatUserService.getOne(new LambdaUpdateWrapper<WeChatUser>().eq(WeChatUser::getOpenid, openid));
+
+        // 如果用户历史上已经完成授权
+//        if (user != null) {
+//            log.info("该用户已授权");
+//            return "<h1>你已经授权过啦~</h1>";
+//        }
+
+        // 如果用户是第一次进行微信公众号授权
+        // 进行这一步时用户应点击了同意授权按钮
+        String userInfoJsom = weChatUtil.getUserInfo(accessToken, openid);
+
+        // 解析JSON数据
+//        JSONObject jsonObject = new JSONObject(userInfoJsom);
+
+        // 设置相关实体属性
+//        WeChatUser weChatUser = new WeChatUser();
+//        weChatUser.setAccessToken(accessToken);
+//        weChatUser.setRefreshToken(refreshToken);
+//        weChatUser.setCreateDate(LocalDateTime.now());
+//        weChatUser.setUpdateDate(LocalDateTime.now());
+
+        // TODO 这里需要绑定系统真实的用户id
+//        weChatUser.setUserId(StpUtil.getLoginIdAsLong());
+//        weChatUser.setCreateUser(StpUtil.getLoginIdAsLong());
+//        weChatUser.setUpdateUser(StpUtil.getLoginIdAsLong());
+//        weChatUser.setUserId(1L);
+//        weChatUser.setCreateUser(1L);
+//        weChatUser.setUpdateUser(1L);
+
+//        weChatUser.setOpenid(openid);
+//        weChatUser.setNickname(jsonObject.getStr(NICK_NAME));
+//        weChatUser.setSex(jsonObject.getStr(SEX));
+//        weChatUser.setAvatar(jsonObject.getStr(HEAD_IMG_URL));
+
+        // 存储用户信息
+//        weChatUserService.save(weChatUser);
+
+        return "";
+    }
+
+    /**
+     * 刷新token,微信提供的token是有限时间的,但是对于财务报销系统仅需授权一次的情况下一般不需要进行更新
+     *
+     * @return accessToken
+     */
+    @GetMapping("/refreshToken")
+    public R<String> refreshToken() {
+        // TODO 这里需要绑定系统真实的用户id
+//        Long userId = StpUtil.getLoginIdAsLong();
+        //Long userId = 1L;
+
+//        WeChatUser weChatUser = weChatUserService.getOne(new LambdaUpdateWrapper<WeChatUser>().eq(WeChatUser::getUserId, userId));
+//        if (weChatUser == null){
+//            return Result.error("error");
+//        }
+
+        // 发送get请求获取 RefreshToken
+        Map<?, ?> result = weChatUtil.refreshToken("");//weChatUser.getRefreshToken()
+        String accessToken = result.get(ACCESS_TOKEN).toString();
+        String refreshToken = result.get(REFRESH_TOKEN).toString();
+
+        // 更新用户信息
+//        WeChatUser weChatUserUpdate = new WeChatUser();
+//        weChatUserUpdate.setId(weChatUser.getId());
+//        weChatUserUpdate.setAccessToken(accessToken);
+//        weChatUserUpdate.setRefreshToken(refreshToken);
+//        weChatUserUpdate.setUpdateDate(LocalDateTime.now());
+
+        // 存储数据库
+//        weChatUserService.updateById(weChatUserUpdate);
+
+        return R.ok(accessToken);
+    }
+}

+ 14 - 0
nightFragrance-admin/src/main/resources/application-dev.yml

@@ -229,6 +229,20 @@ wx:
   #通知类型2
   wx.miniapp.msg.template_id_2: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
   msgDataFormat: JSON
+
+  # 微信公众号
+wechat:
+
+  mpAppId: wx9aaa5016e4b259bd
+
+  mpAppSecret: d3fec271ac82c22c8d267fc20ce6f4f1
+  # 获取code
+  get-code-url: https://open.weixin.qq.com/connect/oauth2/authorize
+  # 回调地址
+  redirect-url: https://25ad4a2d.r12.cpolar.top/weChat/getAccessToken
+  # 回调地址
+  access-token-url: https://api.weixin.qq.com/sns/oauth2/access_token
+
 # 防止XSS攻击
 xss:
   # 过滤开关

+ 19 - 1
nightFragrance-admin/src/main/resources/application-test.yml

@@ -8,7 +8,7 @@ ylx:
   copyrightYear: 2024
   # 文件路径 示例( Windows配置D:/nightFragrance/uploadPath,Linux配置 /home/nightFragrance/uploadPath)
 #  profile: /home/nightFragrance/uploadPath
-  profile: /usr/local/java/nightFragrance/uploadPath
+  profile: /nightFragrance/uploadPath
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数字计算 char 字符验证
@@ -220,6 +220,24 @@ wx:
   plat-form-path: /home/1675015090_20240424_cert/plateForm.pem
 
   msgDataFormat: JSON
+
+  #通知类型1
+  template_id_1: KPo5KM1R-_A6iBWOZpnA_J1w7ybORWboYqJX-PN0diQ
+  #通知类型2
+  wx.miniapp.msg.template_id_2: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+  # 微信公众号
+wechat:
+
+  mpAppId: wx9aaa5016e4b259bd
+
+  mpAppSecret: d3fec271ac82c22c8d267fc20ce6f4f1
+  # 获取code
+  get-code-url: https://open.weixin.qq.com/connect/oauth2/authorize
+  # 回调地址
+  redirect-url: https://25ad4a2d.r12.cpolar.top/weChat/getAccessToken
+  # 回调地址
+  access-token-url: https://api.weixin.qq.com/sns/oauth2/access_token
 # 防止XSS攻击
 xss:
   # 过滤开关

+ 19 - 0
nightFragrance-common/pom.xml

@@ -155,12 +155,31 @@
             <version>3.5.1</version>
         </dependency>
 
+<!--        <dependency>-->
+<!--            <groupId>com.github.binarywang</groupId>-->
+<!--            <artifactId>wx-java-mp-spring-boot-starter</artifactId>-->
+<!--            <version>4.5.0</version>-->
+<!--        </dependency>-->
+
+<!--        <dependency>-->
+<!--            <groupId>com.github.binarywang</groupId>-->
+<!--            <artifactId>weixin-java-mp</artifactId>-->
+<!--            <version>2.9.0</version>-->
+<!--        </dependency>-->
+
+
         <dependency>
             <groupId>com.github.binarywang</groupId>
             <artifactId>weixin-java-miniapp</artifactId>
             <version>4.1.0</version>
         </dependency>
 
+        <!-- hutool -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.25</version>
+        </dependency>
         <dependency>
             <groupId>com.github.xiaoymin</groupId>
             <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>

+ 35 - 0
nightFragrance-common/src/main/java/com/ylx/common/config/WechatAccountConfig.java

@@ -0,0 +1,35 @@
+package com.ylx.common.config;
+
+/**
+ * @author jianlong
+ * @date 2024-06-05 08:59
+ */
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "wechat")
+public class WechatAccountConfig {
+
+    private String mpAppId;
+
+    private String mpAppSecret;
+
+    /**
+     * 获取微信code
+     */
+    private String getCodeUrl;
+
+    /**
+     * 回调地址,需要修改域名,修改http://1dcd46bb.r24.cpolar.top这个就好啦
+     */
+    private String redirectUrl;
+
+    /**
+     * 回调地址,需要修改域名,修改http://1dcd46bb.r24.cpolar.top这个就好啦
+     */
+    private String accessTokenUrl;
+
+}

+ 1 - 1
nightFragrance-framework/src/main/java/com/ylx/framework/config/SecurityConfig.java

@@ -114,7 +114,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/login", "/register", "/captchaImage","/wx/login",
                         "/api/lbt/v1/getAll", "/api/js/v1/select", "/api/xiangmu/v1/wx/getAll", "/api/order/v1/getStatus",
                         "/api/xiangmu/v1/getByid", "/api/js/v1/wx/getByid","/api/js/v1/wx/select", "/api/recharge/v1/test",
-                        "/wx/pay/payNotify","/wx/pay/refundNotify").permitAll()
+                        "/wx/pay/payNotify","/wx/pay/refundNotify","/weChat/verifyToken","/weChat/getCode").permitAll()
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 32 - 0
nightFragrance-framework/src/main/java/com/ylx/framework/config/WeChatMpConfig.java

@@ -0,0 +1,32 @@
+//package com.ylx.framework.config;
+//
+//import com.ylx.common.config.WechatAccountConfig;
+//import me.chanjar.weixin.mp.api.WxMpConfigStorage;
+//import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
+//import me.chanjar.weixin.mp.api.WxMpService;
+//import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.stereotype.Component;
+//
+//@Component
+//public class WeChatMpConfig {
+//
+//    @Autowired
+//    private WechatAccountConfig wechatAccountConfig;
+//
+//    @Bean
+//    public WxMpService wxMpService(){
+//        WxMpService wxMpService = new WxMpServiceImpl();
+//        wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
+//        return wxMpService;
+//    }
+//
+//    @Bean
+//    public WxMpConfigStorage wxMpConfigStorage(){
+//        WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();
+//        wxMpConfigStorage.setAppId(wechatAccountConfig.getMpAppId());
+//        wxMpConfigStorage.setSecret(wechatAccountConfig.getMpAppSecret());
+//        return wxMpConfigStorage;
+//    }
+//}

+ 7 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TOrder.java

@@ -85,6 +85,13 @@ public class TOrder implements Serializable {
     @ApiModelProperty("用户openid")
     private String cOpenId;
 
+    /**
+     * 领取优惠卷id
+     */
+    @TableField("coupon_receive_id")
+    @ApiModelProperty("领取优惠卷id")
+    private String couponReceiveId;
+
     /**
      * 订单明细
      */

+ 17 - 4
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

@@ -73,6 +73,9 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
     @Resource
     private CouponReceiveService couponReceiveService;
 
+    @Resource
+    private CouponService couponService;
+
 
 
     public Boolean isFree(String jsId, BigDecimal distance) {
@@ -122,16 +125,16 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
             }
         }
         //优惠卷减免
-        List<CouponReceiveVo> coupons = couponReceiveService.getByOpenId(order.getcOpenId());
-        BigDecimal preferential = this.setCoupon(coupons);
-        order.setPreferential(preferential);
+//        List<CouponReceiveVo> coupons = couponReceiveService.getByOpenId(order.getcOpenId());
+//        BigDecimal preferential = this.setCoupon(coupons);
+//        order.setPreferential(preferential);
 
         //订单价格
         List<TXiangmu> list = JSONObject.parseArray(order.getcGoods().toJSONString(), TXiangmu.class);
         BigDecimal sum = list.stream().map(TXiangmu::getSum).reduce(BigDecimal.ZERO, BigDecimal::add);
         order.setdTotalMoney(sum);
         //总价 = 订单 + 车费 - 优惠
-        order.setTotalPrice(sum.add(Optional.ofNullable(order.getFare()).orElse(BigDecimal.ZERO)).subtract(preferential));
+        order.setTotalPrice(sum.add(Optional.ofNullable(order.getFare()).orElse(BigDecimal.ZERO)));
         if (order.getParentNo() != null && order.getOrderType() == 2) {
             //升级订单 补差价
             TOrder partOrder = this.getByNo(order.getParentNo());
@@ -201,7 +204,17 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
             }
         }
 
+
         orderNew.setPayType(order.getPayType());
+        if(StringUtils.isNotBlank(order.getCouponReceiveId())){
+            orderNew.setCouponReceiveId(order.getCouponReceiveId());
+            CouponReceive couponReceive = couponReceiveService.getById(order.getCouponReceiveId());
+            Coupon coupon = couponService.getById(couponReceive.getCouponId());
+            //无门槛优惠券
+            orderNew.setPreferential(coupon.getDiscountValue());
+            //todo 其他优惠卷....
+            orderNew.setTotalPrice(orderNew.getTotalPrice().subtract(coupon.getDiscountValue()));
+        }
         //判断支付方式
         if (order.getPayType().equals(MassageConstants.INTEGER_ONE)) {
             //微信支付

+ 65 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/utils/OtherUtil.java

@@ -0,0 +1,65 @@
+package com.ylx.massage.utils;
+
+/**
+ * @author jianlong
+ * @date 2024-06-04 09:13
+ */
+import java.security.MessageDigest;
+import java.util.Locale;
+import java.util.Random;
+
+/**
+ * 其他工具类
+ *
+ */
+public class OtherUtil {
+
+    private final static byte[] HEX = "0123456789ABCDEF".getBytes();
+    private final static String STRING = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+    private final static String MESSAGE_DIGEST_INSTANCE = "SHA-1";
+    private final static String ENCODING = "UTF-8";
+
+
+    /**
+     * 从字节数组到十六进制字符串转换
+     */
+    public static String bytes2HexString(byte[] b) {
+        byte[] buff = new byte[2 * b.length];
+        for (int i = 0; i < b.length; i++) {
+            buff[2 * i] = HEX[(b[i] >> 4) & 0x0f];
+            buff[2 * i + 1] = HEX[b[i] & 0x0f];
+        }
+        return new String(buff);
+    }
+
+    /**
+     * 校验参数是否合法
+     */
+    public static boolean verification(String[] params, String signature) throws Exception {
+        // 拼接
+        String paramstr = params[0] + params[1] + params[2];
+        // 获取 shal 算法封装类
+        MessageDigest messageDigest = MessageDigest.getInstance(MESSAGE_DIGEST_INSTANCE);
+        // 进行加密
+        byte[] digestResult = messageDigest.digest(paramstr.getBytes(ENCODING));
+        // 拿到加密结果
+        String mysignature = OtherUtil.bytes2HexString(digestResult);
+        mysignature = mysignature.toLowerCase(Locale.ROOT);
+        // 是否正确
+        return mysignature.equals(signature);
+    }
+
+
+    /**
+     * 用户要求产生字符串的长度
+     */
+    public static String getRandomString(int length){
+        Random random = new Random();
+        StringBuilder sb = new StringBuilder();
+        for(int i = 0; i < length; i++){
+            int number = random.nextInt(62);
+            sb.append(STRING.charAt(number));
+        }
+        return sb.toString();
+    }
+}

+ 114 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/utils/WeChatUtil.java

@@ -0,0 +1,114 @@
+package com.ylx.massage.utils;
+
+/**
+ * @author jianlong
+ * @date 2024-06-04 10:13
+ */
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson2.JSONObject;
+import com.ylx.common.config.WechatAccountConfig;
+import com.ylx.common.exception.ServiceException;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.Map;
+
+
+
+/**
+ * 微信登录工具类
+ *
+ */
+@Component
+public class WeChatUtil {
+
+    private final static String ERROR_CODE = "errcode";
+
+    @Resource
+    private WechatAccountConfig wxPayProperties;
+
+
+    /**
+     * 获取微信授权code
+     *
+     * @param state state信息
+     * @return 返回微信授权code的URL
+     */
+    public String getCode(String state) {
+        try {
+            StringBuffer url = new StringBuffer();
+            url.append(wxPayProperties.getGetCodeUrl())
+                    .append("?appid=")
+                    .append(wxPayProperties.getMpAppId())
+                    .append("&redirect_uri=")
+                    .append(URLEncoder.encode(wxPayProperties.getRedirectUrl(), "UTF-8"))
+                    .append("&response_type=code&scope=snsapi_userinfo&state=")
+                    .append(state)
+                    .append("#wechat_redirect");
+            return url.toString();
+        } catch (UnsupportedEncodingException e) {
+            throw new ServiceException("URL格式化异常");
+        }
+
+    }
+
+    /**
+     * 获取微信AccessToken
+     *
+     * @param code 用户code
+     * @return 返回包含微信AccessToken的Map
+     */
+    public Map<?, ?> getAccessToken(String code) {
+        StringBuffer url = new StringBuffer();
+        url.append(wxPayProperties.getAccessTokenUrl())
+                .append("?appid=").append(wxPayProperties.getMpAppId())
+                .append("&secret=").append(wxPayProperties.getMpAppSecret())
+                .append("&code=").append(code)
+                .append("&grant_type=authorization_code");
+        String rs = HttpUtil.get(url.toString());
+        Map<?, ?> map = JSONObject.parseObject(rs, Map.class);
+        if (null == map.get(ERROR_CODE)) {
+            return map;
+        } else {
+            throw new ServiceException("获取access_token出错");
+        }
+    }
+
+    /**
+     * 刷新AccessToken
+     *
+     * @param refreshToken 用户刷新token
+     * @return 返回包含刷新后的微信AccessToken的Map
+     */
+    public Map<?, ?> refreshToken(String refreshToken) {
+        StringBuffer url = new StringBuffer();
+        url.append("https://api.weixin.qq.com/sns/oauth2/refresh_token")
+                .append("?appid=").append(wxPayProperties.getMpAppId())
+                .append("&grant_type=refresh_token&refresh_token=").append(refreshToken);
+        String rs = HttpUtil.get(url.toString());
+        Map<?, ?> map = JSONObject.parseObject(rs, Map.class);
+        if (null == map.get(ERROR_CODE)) {
+            return map;
+        } else {
+            throw new ServiceException("刷新access_token出错");
+        }
+    }
+
+    /**
+     * 获取用户信息
+     *
+     * @param accessToken 微信AccessToken
+     * @param openid 用户的openid
+     * @return 返回包含用户信息的JSON字符串
+     */
+    public String getUserInfo(String accessToken, String openid) {
+        StringBuffer url = new StringBuffer();
+        url.append("https://api.weixin.qq.com/sns/userinfo")
+                .append("?access_token=").append(accessToken)
+                .append("&openid=").append(openid)
+                .append("&lang=zh_CN");
+        return HttpUtil.get(url.toString());
+    }
+}

+ 1 - 0
nightFragrance-massage/src/main/resources/mapper/massage/TOrderMapper.xml

@@ -15,6 +15,7 @@
         <result column="total_price" property="totalPrice"/>
         <result column="parent_no" property="parentNo"/>
         <result column="c_open_id" property="cOpenId"/>
+        <result column="coupon_receive_id" property="couponReceiveId"/>
         <result column="c_goods" property="cGoods"
                 typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
         <result column="d_total_money" property="dTotalMoney"/>