xiaoyong931011
2023-08-15 09090250b33c1f818c2364a8d03cf6d7b6c2c6de
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -1,34 +1,40 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.enumerates.*;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.AppContants;
import cc.mrbird.febs.mall.entity.AgentInfo;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MallMemberWalletMapper;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.mall.service.IAgentService;
import cc.mrbird.febs.mall.service.IApiMallMemberService;
import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
import cc.mrbird.febs.common.utils.HttpCurlUtil;
import cc.mrbird.febs.common.utils.ShareCodeUtil;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.*;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import jdk.nashorn.internal.ir.IfNode;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.nio.charset.Charset;
import java.util.*;
/**
 * @author wzy
@@ -41,9 +47,17 @@
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    private final MallMemberMapper memberMapper;
    private final MallOrderInfoMapper orderInfoMapper;
    private final MallMemberWalletMapper mallMemberWalletMapper;
    private final RestTemplate restTemplate;
    private final MallOrderInfoMapper mallOrderInfoMapper;
    private final MallOrderItemMapper mallOrderItemMapper;
    private final MallGoodsMapper mallGoodsMapper;
    private final IApiMallMemberWalletService memberWalletService;
    private final IApiMallMemberService memberService;
    private final MallRollPerkMapper mallRollPerkMapper;
    private final IMallMoneyFlowService mallMoneyFlowService;
    private final MallMemberClassMapper mallMemberClassMapper;
    private final MallMemberHouseMapper mallMemberHouseMapper;
    private final MallMoneyFlowMapper mallMoneyFlowMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -68,11 +82,15 @@
            }
            AgentInfo agentInfo = JSONObject.parseObject(nextLevel.getValue(), AgentInfo.class);
            if (!orderCntFinish(parent, agentInfo)) {
            if (!directMemberCnt(parent, agentInfo)) {
                continue;
            }
            if (!agentCntFinish(parent, agentInfo)) {
                continue;
            }
            if (!teamIncome(parent, agentInfo)) {
                continue;
            }
@@ -82,22 +100,22 @@
    }
    /**
     * 判断用户直推下单数量或团队下单数量是否达标
     * 判断直推人数是否达标
     *
     * @param member
     * @return
     */
    private boolean orderCntFinish(MallMember member, AgentInfo agentInfo) {
        Integer cnt = 0;
        if (AgentInfo.ORDER_TYPE_DIRECT.equals(agentInfo.getOrderType())) {
            cnt = orderInfoMapper.selectCntDirect(member.getInviteId());
        } else {
            cnt = orderInfoMapper.selectCntDirectOrTeam(agentInfo.getOrderType(), member.getInviteId());
    private boolean directMemberCnt(MallMember member, AgentInfo agentInfo) {
        List<MallMember> childs = memberMapper.selectByRefererId(member.getInviteId());
        if (CollUtil.isEmpty(childs)) {
            return false;
        }
        if (cnt >= agentInfo.getOrderCnt()) {
        if (childs.size() >= agentInfo.getDirectCnt()) {
            return true;
        }
        log.info("用户{}订单未达标, 当前数量为:{},要求数量:{}, 当前等级为:{}", member.getPhone(), cnt, agentInfo.getOrderCnt(), member.getLevel());
        log.info("用户:{}直推数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getLevel(), childs.size(), agentInfo.getLastAgentCnt());
        return false;
    }
@@ -107,7 +125,7 @@
     * @return
     */
    private boolean agentCntFinish(MallMember member, AgentInfo agentInfo) {
        if (agentInfo.getLastCnt() == null || agentInfo.getLastCnt() == 0) {
        if (agentInfo.getLastAgentCnt() == null || agentInfo.getLastAgentCnt() == 0) {
            return true;
        }
@@ -126,122 +144,370 @@
            }
        }
        if (i >= agentInfo.getLastCnt()) {
        if (i >= agentInfo.getLastAgentCnt()) {
            return true;
        }
        log.info("用户:{}代理数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getLevel(), i, agentInfo.getLastCnt());
        log.info("用户:{}代理数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getLevel(), i, agentInfo.getLastAgentCnt());
        return false;
    }
    /**
     * 团队业绩是否达标
     *
     * @param agentInfo
     * @return
     */
    private boolean teamIncome(MallMember member, AgentInfo agentInfo) {
        BigDecimal totalIncome = memberMapper.selectAchieveByMemberId(member.getInviteId(), 2);
        BigDecimal targetIncome = agentInfo.getTeamIncome().multiply(new BigDecimal("10000"));
        if (totalIncome.compareTo(targetIncome) >= 0) {
            return true;
        }
        log.info("用户:{}团队业绩未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getLevel(), totalIncome, targetIncome);
        return false;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void returnMoneyToAgent(Long orderId) {
        MallOrderInfo orderInfo = orderInfoMapper.selectById(orderId);
        MallMember member = memberMapper.selectById(orderInfo.getMemberId());
        if (StrUtil.isBlank(member.getReferrerIds())) {
            return;
        }
        // 直推奖励
        directReturnMoney(member, orderInfo);
        // 团队奖励
        teamReturnMoney(member, orderInfo);
    }
    /**
     * 直推奖励
     * @param member
     */
    private void directReturnMoney(MallMember member, MallOrderInfo orderInfo) {
        MallMember parent = memberMapper.selectInfoByInviteId(member.getReferrerId());
        if (AgentLevelEnum.FIRST_LEVEL.name().equals(parent.getLevel()) || AgentLevelEnum.ZERO_LEVEL.name().equals(parent.getLevel())) {
            return;
        }
        AgentInfo agentInfo = getAgentInfo(parent.getLevel());
        if (agentInfo == null) {
            return;
        }
        BigDecimal returnMoney = agentInfo.getDirectIncome().divide(BigDecimal.valueOf(100), 2,RoundingMode.DOWN).multiply(orderInfo.getAmount());
        memberWalletService.addBalance(returnMoney, parent.getId());
        memberService.addMoneyFlow(parent.getId(), returnMoney, MoneyFlowTypeEnum.BONUS.getValue(), orderInfo.getOrderNo(), null, null, orderInfo.getMemberId(), null);
    }
    /**
     * 团队奖励
     *
     */
    public void teamReturnMoney(MallMember member, MallOrderInfo orderInfo) {
        List<String> inviteIds = StrUtil.split(member.getReferrerIds(), ',');
        List<MallMember> agentList = memberMapper.selectMemberParentAgentList(inviteIds);
        if (CollUtil.isEmpty(agentList)) {
            return;
        }
        Map<String, Map<Long, BigDecimal>> needReturn = new HashMap<>();
        for (MallMember mallMember : agentList) {
            String level = mallMember.getLevel();
            Map<Long, BigDecimal> amount = needReturn.get(level);
            // 按照代理关系,返到第二级,平级奖
            if (amount == null) {
                amount = new HashMap<>();
                AgentInfo agentInfo = getAgentInfo(level);
                if (agentInfo == null) {
                    continue;
                }
                BigDecimal returnMoney;
                if (AgentInfo.TEAM_INCOME_TYPE_AMOUNT.equals(agentInfo.getTeamIncomeType())) {
                    returnMoney = agentInfo.getTeamIncome();
                } else {
                    returnMoney = agentInfo.getTeamIncome().divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN).multiply(orderInfo.getAmount());
                }
                amount.put(mallMember.getId(), returnMoney);
            } else {
                if (!AgentLevelEnum.SECOND_LEVEL.name().equals(mallMember.getLevel())) {
                    amount.put(mallMember.getId(), BigDecimal.ONE);
                }
            }
            // 代理两级
            if (amount.size() > 2) {
                continue;
            }
            needReturn.put(level, amount);
        }
        if(needReturn.isEmpty()) {
           return;
        }
        for (Map.Entry<String, Map<Long, BigDecimal>> entry : needReturn.entrySet()) {
            for (Map.Entry<Long, BigDecimal> amount : entry.getValue().entrySet()) {
                memberWalletService.addBalance(amount.getValue(), amount.getKey());
                memberService.addMoneyFlow(amount.getKey(), amount.getValue(), MoneyFlowTypeEnum.ACHIEVE.getValue(), orderInfo.getOrderNo(), null, null, orderInfo.getMemberId(), null);
            }
        }
    }
    private AgentInfo getAgentInfo(String level) {
        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.AGENT_LEVEL_REQUIRE, level);
        if (dic == null) {
            log.info("当前用户父级等级:{}", level);
            return null;
        }
        return JSONObject.parseObject(dic.getValue(), AgentInfo.class);
    }
    @Override
    public void rankReturnMoney(Long orderId) {
    }
    @Override
    public void addMember(String memberOpenId) {
        MallMember mallMember = memberMapper.selectMemberByOpenId(memberOpenId);
        //根据OPENID,查询用户信息,如果存在,直接返回
        if (ObjectUtil.isNotEmpty(mallMember)) {
            mallMember.setSubStatus(MallMember.SUB_STATUS_ENABLE);
            memberMapper.updateById(mallMember);
            return;
        }
        mallMember = new MallMember();
        mallMember.setPassword(SecureUtil.md5("a123456"));
        mallMember.setName("微信用户");
        mallMember.setSubStatus(MallMember.SUB_STATUS_ENABLE);
        mallMember.setReferrerId(null);
        mallMember.setPhone(null);
        mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE);
        mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL);
        mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name());
        mallMember.setSex("男");
        mallMember.setBindPhone(null);
        mallMember.setOpenId(memberOpenId);
        memberMapper.insert(mallMember);
        //生成邀请码
        String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId());
        mallMember.setInviteId(inviteId);
        //推荐人和推荐人链
        boolean flag = false;
        String parentId = mallMember.getReferrerId();
        if (StrUtil.isBlank(parentId)) {
            flag = true;
        }
        String ids = "";
        while (!flag) {
            if (StrUtil.isBlank(ids)) {
                ids += parentId;
            } else {
                ids += ("," + parentId);
            }
            MallMember parentMember = memberMapper.selectInfoByInviteId(parentId);
            if (parentMember == null) {
                break;
            }
            parentId = parentMember.getReferrerId();
            if (StrUtil.isBlank(parentMember.getReferrerId())) {
                flag = true;
            }
        }
        if (StrUtil.isNotBlank(ids)) {
            mallMember.setReferrerIds(ids);
        }
        memberMapper.updateById(mallMember);
        //初始化钱包信息
        MallMemberWallet wallet = new MallMemberWallet();
        wallet.setBalance(BigDecimal.ZERO);
        wallet.setMemberId(mallMember.getId());
        mallMemberWalletMapper.insert(wallet);
        return;
    }
    @Override
    public void addMemberScan(String str) {
        String[] split = StrUtil.split(str, "@");
        String referrerId = split[0];
        String openId = split[1];
        MallMember mallMember = memberMapper.selectMemberByOpenId(openId);
        if (ObjectUtil.isNotEmpty(mallMember)) {
            return;
        }
        mallMember = new MallMember();
        mallMember.setPassword(SecureUtil.md5("a123456"));
        mallMember.setName("微信用户");
        mallMember.setSubStatus(MallMember.SUB_STATUS_DISABLED);
        mallMember.setReferrerId(referrerId);
        mallMember.setPhone(null);
        mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE);
        mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL);
        mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name());
        mallMember.setSex("男");
        mallMember.setBindPhone(null);
        mallMember.setOpenId(openId);
        memberMapper.insert(mallMember);
        //生成邀请码
        String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId());
        mallMember.setInviteId(inviteId);
        //推荐人和推荐人链
        boolean flag = false;
        String parentId = mallMember.getReferrerId();
        if (StrUtil.isBlank(parentId)) {
            flag = true;
        }
        String ids = "";
        while (!flag) {
            if (StrUtil.isBlank(ids)) {
                ids += parentId;
            } else {
                ids += ("," + parentId);
            }
            MallMember parentMember = memberMapper.selectInfoByInviteId(parentId);
            if (parentMember == null) {
                break;
            }
            parentId = parentMember.getReferrerId();
            if (StrUtil.isBlank(parentMember.getReferrerId())) {
                flag = true;
            }
        }
        if (StrUtil.isNotBlank(ids)) {
            mallMember.setReferrerIds(ids);
        }
        memberMapper.updateById(mallMember);
        //初始化钱包信息
        MallMemberWallet wallet = new MallMemberWallet();
        wallet.setBalance(BigDecimal.ZERO);
        wallet.setMemberId(mallMember.getId());
        mallMemberWalletMapper.insert(wallet);
        return;
    }
    @Override
    public void updateMemberInfo(String str) {
        String[] split = StrUtil.split(str, "|");
        String accessToken = split[0];
        String openId = split[1];
        MallMember mallMember = memberMapper.selectMemberByOpenId(openId);
        if (ObjectUtil.isEmpty(mallMember)) {
            return;
        }
        String requrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+openId+"&lang=zh_CN";
        // 创建一个StringHttpMessageConverter,并设置字符集为UTF-8
        StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
        stringConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.TEXT_PLAIN));
        // 将StringHttpMessageConverter添加到RestTemplate的消息转换器列表中
        restTemplate.getMessageConverters().add(0, stringConverter);
        // 创建HttpHeaders对象,设置Accept头部的值为"text/plain;charset=UTF-8"
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Collections.singletonList(MediaType.TEXT_PLAIN));
        headers.set(HttpHeaders.ACCEPT_CHARSET, "UTF-8");
        String responseStr = restTemplate.getForObject(requrl, String.class);
        net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(responseStr);
        log.info("微信获取用户信息={}", json);
        if (json.containsKey("errcode")) {
            log.info("微信登录获取到异常信息errcode");
            return;
        }
        String nickname = json.getString("nickname");
        String headImgUrl = json.getString("headimgurl");
        mallMember.setName(nickname);
        mallMember.setAvatar(headImgUrl);
        memberMapper.updateById(mallMember);
        return;
    }
    @Override
    public void orderGetMsg(String str) {
        /**
         * String str : orderId@amount
         */
        String[] split = StrUtil.split(str, "@");
        String orderId = split[0];
        String amount = split[1];
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
        if(ObjectUtil.isEmpty(mallOrderInfo)){
            return;
        }
        Long memberId = mallOrderInfo.getMemberId();
        MallMember mallMember = memberMapper.selectById(memberId);
        List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(mallOrderInfo.getId());
        if(CollUtil.isEmpty(mallOrderItemList)){
            return;
        }
        /**
         * 支付后同意验证
         *  1:是否送券
         *  2:是否送积分
         *  3:是否返利
         */
        //是否返利
        BigDecimal amountBigDecimal = new BigDecimal(StrUtil.isEmpty(amount) ? "0" : amount);
        if(BigDecimal.ZERO.compareTo(amountBigDecimal) < 0){
            if(ObjectUtil.isNotEmpty(mallMember.getReferrerId())){
                String referrerId = mallMember.getReferrerId();
                MallMember mallMemberParent = memberMapper.selectInfoByInviteId(referrerId);
                Long id = mallMemberParent.getId();
                MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectOneByOrderNoAndMemberIdAndRtMemberId(mallOrderInfo.getOrderNo(), memberId, id);
                if(ObjectUtil.isEmpty(mallMoneyFlow)){
                    DataDictionaryCustom returnPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                            DataDictionaryEnum.MEMBER_RETURN_PERCENT.getType(),
                            DataDictionaryEnum.MEMBER_RETURN_PERCENT.getCode()
                    );
                    String returnPercentStr = StrUtil.isNotEmpty(returnPercentDic.getValue()) ? "1" : returnPercentDic.getValue();
                    BigDecimal returnPercent = new BigDecimal(returnPercentStr).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN);
                    BigDecimal amountActual = amountBigDecimal.multiply(returnPercent).setScale(2, BigDecimal.ROUND_DOWN);
                    mallMoneyFlowService.addMoneyFlow(
                            mallMember.getId(),
                            amountActual,
                            MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(),
                            mallOrderInfo.getOrderNo(),
                            "直推奖",
                            "直推奖",
                            id,
                            1,
                            FlowTypeEnum.BALANCE.getValue(),
                            2);
                }
            }
        }
        for(MallOrderItem mallOrderItem : mallOrderItemList){
            Long goodsId = mallOrderItem.getGoodsId();
            MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
            if(ObjectUtil.isEmpty(mallGoods)){
                break;
            }
            if(ObjectUtil.isNotEmpty(mallGoods.getIsUnreal()) && 1 == mallGoods.getIsUnreal()){
                mallOrderInfo.setStatus(OrderStatusEnum.FINISH.getValue());
                mallOrderInfoMapper.updateById(mallOrderInfo);
                //是否送券 1:是 2:否
                BigDecimal levelTwoPrice = mallGoods.getLevelTwoPrice();
                if(BigDecimal.ONE.compareTo(levelTwoPrice) == 0){
                    MallRollPerk mallRollPerk = new MallRollPerk();
                    mallRollPerk.setMemberId(memberId);
                    mallRollPerk.setState(1);
                    mallRollPerk.setRollId(mallGoods.getLevelThreePrice().longValue());
                    mallRollPerkMapper.insert(mallRollPerk);
                }
                //赠送积分
                BigDecimal levelOnePrice = mallGoods.getLevelOnePrice();
                if(BigDecimal.ZERO.compareTo(levelOnePrice) <= 0){
                    memberWalletService.add(levelOnePrice, memberId, "score");
                    mallMoneyFlowService.addMoneyFlow(memberId, levelOnePrice, MoneyFlowTypeEnum.STATIC_BONUS.getValue(),
                            mallOrderInfo.getOrderNo(),  FlowTypeEnum.SCORE.getValue(),"赠送积分",2);
                }
            }
        }
    }
    @Override
    public void rollSendMsg(Long orderId) {
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
        if(ObjectUtil.isEmpty(mallOrderInfo)){
            return;
        }
        Long memberId = mallOrderInfo.getMemberId();
        MallMember mallMember = memberMapper.selectById(memberId);
        if(ObjectUtil.isEmpty(mallMember)){
            return;
        }
        List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderId);
        if(CollUtil.isEmpty(mallOrderItemList)){
            return;
        }
        MallOrderItem mallOrderItem = mallOrderItemList.get(0);
        String goodsName = mallOrderItem.getGoodsName();
        String skuImage = mallOrderItem.getSkuImage();
        Long goodsId = mallOrderItem.getGoodsId();
        MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
        if(ObjectUtil.isEmpty(mallGoods)){
            return;
        }
        Integer isNormal = mallGoods.getIsNormal();
        if(4 == isNormal){
            //课程卷
            MallMemberClass mallMemberClass = new MallMemberClass();
            mallMemberClass.setMemberId(mallMember.getId());
            mallMemberClass.setOrderId(orderId);
            mallMemberClass.setClassName(goodsName);
            mallMemberClass.setClassPic(skuImage);
            mallMemberClass.setClassDec(mallGoods.getGoodsIntrodution());
            mallMemberClass.setClassUrl(mallGoods.getVideoUrl());
            mallMemberClass.setCreateTime(DateUtil.date());
            mallMemberClassMapper.insert(mallMemberClass);
            return;
        }else if(5 == isNormal){
            //民宿卷
            MallMemberHouse mallMemberHouse = new MallMemberHouse();
            mallMemberHouse.setOrderId(orderId);
            mallMemberHouse.setOrderNo(mallOrderInfo.getOrderNo());
            mallMemberHouse.setMemberId(memberId);
            mallMemberHouse.setState(1);
            mallMemberHouse.setCreateTime(DateUtil.date());
            mallMemberHouse.setUpdateTime(mallOrderInfo.getUseTime());
            mallMemberHouse.setUnuseTime(DateUtil.date().offset(DateField.HOUR_OF_DAY,48));
            mallMemberHouse.setHouseName(mallGoods.getHouseName());
            mallMemberHouse.setHouseAddress(mallGoods.getHouseAddress());
            mallMemberHouse.setHousePic(mallGoods.getThumb());
            mallMemberHouseMapper.insert(mallMemberHouse);
            return;
        }else{
            return;
        }
    }
    public static void main(String[] args) {
        DateTime offset = DateUtil.date().offset(DateField.HOUR_OF_DAY, 48);
        System.out.println(offset);
//        RestTemplate restTemplate = new RestTemplate();
//        String accessToken = "70__DR_q_qmjcMfPQEBwmjdfJFWnpml55Bq6JK2vt9MMdcRLsHaYM1BQGFWzLUISjcFC8HAYTKOaPJH93KHNvo4KIeMZkxFF2qP66nAdygUQ6c";
//        String openId = "oXL7Y6LW5KGQTbmmP5W3JljjApSo";
//        String requrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+openId+"&lang=zh_CN";
//        // 创建一个StringHttpMessageConverter,并设置字符集为UTF-8
//        StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
//        stringConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.TEXT_PLAIN));
//        // 将StringHttpMessageConverter添加到RestTemplate的消息转换器列表中
//        restTemplate.getMessageConverters().add(0, stringConverter);
//        // 创建HttpHeaders对象,设置Accept头部的值为"text/plain;charset=UTF-8"
//        HttpHeaders headers = new HttpHeaders();
//        headers.setAccept(Collections.singletonList(MediaType.TEXT_PLAIN));
//        headers.set(HttpHeaders.ACCEPT_CHARSET, "UTF-8");
//
//        String responseStr = restTemplate.getForObject(requrl, String.class);
//        net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(responseStr);
//        log.info("微信获取用户信息={}", json);
//        String nickname = json.getString("nickname");
//        String headImgUrl = json.getString("headimgurl");
//        System.out.println(nickname);
//        System.out.println(headImgUrl);
    }
}