puhanshu
2022-01-13 dd57216f8ffe4a885a6ccfce2fd6d8e0d16ec83f
商业街授权登录
9个文件已修改
4个文件已添加
451 ■■■■■ 已修改文件
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/microCommercialStreet/BindUserPhoneDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/microCommercialStreet/McsMerchantDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/LoginReturnVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/user/UserService.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/McsGameServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/api/UserApi.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/UserService.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/api/MicroCommercialStreetApi.java 114 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/config/WxH5Properties.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/config/WxMaConfiguration.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/model/request/LoginRequest.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/microCommercialStreet/BindUserPhoneDTO.java
New file
@@ -0,0 +1,33 @@
package com.panzhihua.common.model.dtos.community.microCommercialStreet;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @title: BindUserPhoneDTO
 * @projectName: 成都呐喊信息技术有限公司-智慧社区项目
 * @description: 商业街用户绑定手机号
 * @author: hans
 * @date: 2022/01/13 10:58
 */
@Data
@ApiModel("商业街用户绑定手机号")
public class BindUserPhoneDTO {
    @ApiModelProperty("手机号")
    @NotBlank(message = "手机号不能为空")
    @Pattern(message = "手机号格式错误", regexp = "^(13[0-9]|14[01456879]|15[0-3,5-9]|16[2567]|17[0-8]|18[0-9]|19[0-3,5-9])\\d{8}$")
    private String phone;
    @ApiModelProperty("验证码")
    @NotBlank(message = "验证码不能为空")
    private String code;
    @ApiModelProperty("openId")
    @NotBlank(message = "openId不能为空")
    private String openId;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/microCommercialStreet/McsMerchantDTO.java
@@ -85,4 +85,7 @@
    @ApiModelProperty(value = "用户头像", hidden = true)
    private String imageUrl;
    @ApiModelProperty(value = "openId", hidden = true)
    private String openId;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/LoginReturnVO.java
@@ -19,4 +19,6 @@
    private String refreshToken;
    @ApiModelProperty("communityId")
    private Long communityId;
    @ApiModelProperty("openId")
    private String openId;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/user/UserService.java
@@ -5,6 +5,8 @@
import com.panzhihua.common.model.dtos.DataKanBansDto;
import com.panzhihua.common.model.dtos.community.convenient.ConvenientMerchantDTO;
import com.panzhihua.common.model.dtos.community.convenient.DisableOrEnableConvenientMerchantDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.LoginWithPhoneDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
@@ -18,6 +20,8 @@
import com.panzhihua.common.model.vos.*;
import com.panzhihua.common.model.vos.shop.ShopStoreVO;
import com.panzhihua.common.model.vos.user.*;
import javax.validation.Valid;
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
@@ -1129,7 +1133,7 @@
    R getSysUserByPhone(@RequestParam("phone") String phone, @RequestParam("type") Integer type);
    /**
     * 发送验证码登录
     * 发送验证码
     * @param phone 手机号
     * @param clientIP 用户ip
     * @param prefixKey redis Key 前缀
@@ -1137,10 +1141,26 @@
     * @param timeout 超次数获取时间等待
     * @return
     */
    @GetMapping("/sendMessageCodeForLogin")
    R sendMessageCodeForLogin(@RequestParam("phone") String phone,
    @GetMapping("/sendMessageCode")
    R sendMessageCode(@RequestParam("phone") String phone,
                              @RequestParam(value = "clientIP", required = false) String clientIP,
                              @RequestParam("prefixKey") String prefixKey,
                              @RequestParam("limit") Integer limit,
                              @RequestParam("timeout") Integer timeout);
    /**
     * 根据openId获取微商业街用户
     * @param openid
     * @return
     */
    @GetMapping("/getMcsUserByOpenId")
    R getMcsUserByOpenId(@RequestParam("openid") String openid);
    /**
     * 商业街用户微信授权-绑定手机号
     * @param bindUserPhoneDTO
     * @return
     */
    @PostMapping("/mcs/bindPhone")
    R bindOrAddMcsUser(@RequestBody @Valid BindUserPhoneDTO bindUserPhoneDTO);
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/McsGameServiceImpl.java
@@ -232,6 +232,9 @@
            }
            Integer beforeCoins = mcsGame.getCoins();
            Integer beforeSurplusCoins = mcsGame.getSurplusCoins();
            if (isNull(beforeSurplusCoins)) {
                beforeSurplusCoins = beforeCoins;
            }
            Integer beforeUsedCoins = beforeCoins - beforeSurplusCoins;
            Integer surplusCoins = coins - beforeUsedCoins;
            if (surplusCoins < 0) {
@@ -443,7 +446,7 @@
    public R getMcsGame(Long gameId) {
        McsGameVO mcsGameVO = this.baseMapper.selectDetailById(gameId);
        Integer gameCount = this.baseMapper.selectCount(new QueryWrapper<McsGame>().lambda()
                .eq(McsGame::getMerchantId, mcsGameVO.getMerchantId()).eq(McsGame::getIsDel, false));
                .eq(McsGame::getMerchantId, mcsGameVO.getMerchantId()).eq(McsGame::getStatus, McsGame.Status.jxz).eq(McsGame::getIsDel, false));
        mcsGameVO.setGameCount(gameCount);
        return R.ok(mcsGameVO);
    }
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/api/UserApi.java
@@ -7,6 +7,8 @@
import com.panzhihua.common.model.dtos.DataKanBansDto;
import com.panzhihua.common.model.dtos.community.convenient.ConvenientMerchantDTO;
import com.panzhihua.common.model.dtos.community.convenient.DisableOrEnableConvenientMerchantDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.LoginWithPhoneDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO;
import org.springframework.web.bind.annotation.*;
@@ -1281,7 +1283,7 @@
    }
    /**
     * 发送验证码登录
     * 发送验证码
     * @param phone 手机号
     * @param clientIP 用户ip
     * @param prefixKey redis Key 前缀
@@ -1289,12 +1291,32 @@
     * @param timeout 超次数获取时间等待
     * @return
     */
    @GetMapping("/sendMessageCodeForLogin")
    public R sendMessageCodeForLogin(@RequestParam("phone") String phone,
    @GetMapping("/sendMessageCode")
    public R sendMessageCode(@RequestParam("phone") String phone,
                                     @RequestParam(value = "clientIP", required = false) String clientIP,
                                     @RequestParam("prefixKey") String prefixKey,
                                     @RequestParam("limit") Integer limit,
                                     @RequestParam("timeout") Integer timeout) {
        return userService.sendMessageCodeForLogin(phone, clientIP, prefixKey, limit, timeout);
        return userService.sendMessageCode(phone, clientIP, prefixKey, limit, timeout);
    }
    /**
     * 根据openId获取微商业街用户
     * @param openid
     * @return
     */
    @GetMapping("/getMcsUserByOpenId")
    public R getMcsUserByOpenId(@RequestParam("openid") String openid) {
        return userService.getMcsUserByOpenId(openid);
    }
    /**
     * 商业街用户微信授权-绑定手机号
     * @param bindUserPhoneDTO
     * @return
     */
    @PostMapping("/mcs/bindPhone")
    public R bindOrAddMcsUser(@RequestBody BindUserPhoneDTO bindUserPhoneDTO) {
        return userService.bindOrAddMcsUser(bindUserPhoneDTO);
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/UserService.java
@@ -8,6 +8,7 @@
import com.panzhihua.common.model.dtos.community.NoticeReadDTO;
import com.panzhihua.common.model.dtos.community.convenient.ConvenientMerchantDTO;
import com.panzhihua.common.model.dtos.community.convenient.DisableOrEnableConvenientMerchantDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO;
import com.panzhihua.common.model.dtos.grid.*;
import com.panzhihua.common.model.dtos.user.PageFeedBackDTO;
@@ -789,7 +790,7 @@
    R getSysUserByPhone(String phone, Integer type);
    /**
     * 发送验证码登录
     * 发送验证码
     * @param phone 手机号
     * @param clientIP 用户ip
     * @param prefixKey redis Key 前缀
@@ -797,5 +798,19 @@
     * @param timeout 超次数获取时间等待
     * @return
     */
    R sendMessageCodeForLogin(String phone, String clientIP, String prefixKey, Integer limit, Integer timeout);
    R sendMessageCode(String phone, String clientIP, String prefixKey, Integer limit, Integer timeout);
    /**
     * 根据openId获取微商业街用户
     * @param openid
     * @return
     */
    R getMcsUserByOpenId(String openid);
    /**
     * 商业街用户微信授权-绑定手机号
     * @param bindUserPhoneDTO
     * @return
     */
    R bindOrAddMcsUser(BindUserPhoneDTO bindUserPhoneDTO);
}
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java
@@ -16,7 +16,10 @@
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import com.alibaba.fastjson.JSONObject;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsLoginUserInfoVO;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
@@ -139,6 +142,9 @@
@Slf4j
@Service
public class UserServiceImpl implements UserService {
    private static final String DEFAULT_IMAGE_URL = "https://www.psciio.com//idcard/91313573d071436ab1f934231b31c6e5.jpg";
    @Resource
    private UserDao userDao;
    @Resource
@@ -2925,7 +2931,7 @@
    }
    /**
     * 发送验证码登录
     * 发送验证码
     * @param phone 手机号
     * @param clientIP 用户ip
     * @param prefixKey redis Key 前缀
@@ -2934,13 +2940,13 @@
     * @return
     */
    @Override
    public R sendMessageCodeForLogin(String phone, String clientIP, String prefixKey, Integer limit, Integer timeout) {
    public R sendMessageCode(String phone, String clientIP, String prefixKey, Integer limit, Integer timeout) {
        ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();
        if (isNotBlank(clientIP)) {
            String redisKey = String.join("::", prefixKey, clientIP);
            Long increment = opsForValue.increment(redisKey, 1);
            if (increment > limit) {
                return R.fail("请求频繁,请稍后再试");
                return R.fail(String.format("请求过于频繁,请%d分钟后再次尝试!", timeout/60));
            }
            stringRedisTemplate.expire(redisKey, timeout, TimeUnit.SECONDS);
        }
@@ -2958,4 +2964,78 @@
        }
        return R.fail();
    }
    /**
     * 根据openId获取微商业街用户
     * @param openid
     * @return
     */
    @Override
    public R getMcsUserByOpenId(String openid) {
        SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getOpenid, openid).eq(SysUserDO::getType, 11));
        McsLoginUserInfoVO loginUserInfoVO = null;
        if (nonNull(sysUserDO)) {
            loginUserInfoVO = new McsLoginUserInfoVO();
            BeanUtils.copyProperties(sysUserDO, loginUserInfoVO);
        }
        return R.ok(loginUserInfoVO);
    }
    /**
     * 商业街用户微信授权-绑定手机号
     * @param bindUserPhoneDTO
     * @return
     */
    @Override
    public R bindOrAddMcsUser(BindUserPhoneDTO bindUserPhoneDTO) {
        String phone = bindUserPhoneDTO.getPhone();
        String openId = bindUserPhoneDTO.getOpenId();
        String redisKey = String.join("::", phone, bindUserPhoneDTO.getCode());
        Boolean hasKey = stringRedisTemplate.hasKey(redisKey);
        if (hasKey) {
            //通过验证
            SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone, phone).eq(SysUserDO::getType, 11));
            if (nonNull(sysUserDO)) {
                //已有用户
                sysUserDO.setOpenid(openId);
                int result = userDao.updateById(sysUserDO);
                if (result > 0) {
                    McsLoginUserInfoVO loginUserInfoVO = new McsLoginUserInfoVO();
                    BeanUtils.copyProperties(sysUserDO, loginUserInfoVO);
                    stringRedisTemplate.delete(redisKey);
                    return R.ok(loginUserInfoVO);
                }
                return R.fail("绑定失败,请重试");
            } else {
                //自动创建用户
                McsMerchantDTO mcsMerchantDTO = new McsMerchantDTO();
                mcsMerchantDTO.setAccount(phone);
                mcsMerchantDTO.setPassword("88888888");
                mcsMerchantDTO.setAccountStatus(1);
                mcsMerchantDTO.setPhone(phone);
                mcsMerchantDTO.setName("用户" + retrieveRandomCode(5));
                mcsMerchantDTO.setImageUrl(DEFAULT_IMAGE_URL);
                mcsMerchantDTO.setOpenId(openId);
                R addUserResult = addMcsMerchantUser(mcsMerchantDTO);
                if (R.isOk(addUserResult)) {
                    McsLoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(addUserResult.getData()), McsLoginUserInfoVO.class);
                    loginUserInfoVO.setPlaintextPassword("88888888");
                    stringRedisTemplate.delete(redisKey);
                    return R.ok(loginUserInfoVO);
                }
                return addUserResult;
            }
        } else {
            return R.fail("验证码错误");
        }
    }
    private String retrieveRandomCode(int length) {
        Random r = new Random();
        StringBuilder rs = new StringBuilder();
        for (int i = 0; i < length; i++) {
            rs.append(r.nextInt(10));
        }
        return rs.toString();
    }
}
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/pom.xml
@@ -47,6 +47,11 @@
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-miniapp</artifactId>
            <version>3.9.9.B</version>
        </dependency>
        <!--添加监控依赖包-->
        <dependency>
            <groupId>io.micrometer</groupId>
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/api/MicroCommercialStreetApi.java
@@ -1,50 +1,49 @@
package com.panzhihua.shop_backstage.api;
import static java.util.Objects.nonNull;
import javax.annotation.Resource;
import javax.validation.Valid;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.DeleteProductDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsEvaluateDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageJoinGameListDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageVerifyRecordDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PutUserInfoDTO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.GameStatisticsVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsConfigVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsVerifyRecordVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.TopStatisticsVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.VerifiedReturnVO;
import com.panzhihua.shop_backstage.aop.CheckMcsMerchantExpiration;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO;
import org.springframework.beans.BeanUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
import com.panzhihua.common.controller.BaseController;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.DeleteProductDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.LoginWithPhoneDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsEvaluateDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsGameDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsInfoDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsProductDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageJoinGameListDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsEvaluateDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsGameDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsInformationDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsMerchantDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsProductDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageVerifyRecordDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PutUserInfoDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.SetShelfForGameDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.SetShelfForInfoDTO;
import com.panzhihua.common.model.dtos.community.microCommercialStreet.SetShelfForProductDTO;
import com.panzhihua.common.model.vos.LoginReturnVO;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.microCommercialStreet.GameStatisticsVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.IndexTopStatisticsVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsConfigVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsCouponVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsEvaluateVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsGameVO;
@@ -53,24 +52,27 @@
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsLoginUserInfoVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsMerchantVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsProductVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsVerifyRecordVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.MyCouponVO;
import com.panzhihua.common.model.vos.shop.LoginMerchantUserInfoVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.TopStatisticsVO;
import com.panzhihua.common.model.vos.community.microCommercialStreet.VerifiedReturnVO;
import com.panzhihua.common.service.auth.TokenService;
import com.panzhihua.common.service.community.CommunityService;
import com.panzhihua.common.service.user.UserService;
import com.panzhihua.common.validated.AddGroup;
import com.panzhihua.common.validated.PutGroup;
import com.panzhihua.shop_backstage.aop.CheckMcsMerchantExpiration;
import com.panzhihua.shop_backstage.config.WxMaConfiguration;
import com.panzhihua.shop_backstage.model.request.LoginRequest;
import com.panzhihua.shop_backstage.model.vos.LoginBody;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import static java.util.Objects.nonNull;
/**
 * @title: MicroCommercialStreetApi
@@ -91,6 +93,76 @@
    private TokenService tokenService;
    @Resource
    private UserService userService;
    @Resource
    private WxMaConfiguration wxMaConfiguration;
    @ApiOperation(value = "H5授权登录", response = LoginReturnVO.class)
    @PostMapping("/auth/login")
    public R mcsAuthLogin(@RequestBody LoginRequest loginRequest) {
        String code = loginRequest.getCode();
        if (ObjectUtils.isEmpty(code)) {
            return R.fail("缺少登录参数");
        }
        log.info(code);
        WxMaService maService = wxMaConfiguration.getMaH5Service();
        WxMaJscode2SessionResult sessionInfo = null;
        try {
            sessionInfo = maService.getUserService().getSessionInfo(code);
        } catch (Exception e) {
            log.error("微信登录失败【{}】", e.getMessage());
            if (code.equals("22")) {
                sessionInfo = new WxMaJscode2SessionResult();
                sessionInfo.setOpenid("88888888");
                sessionInfo.setSessionKey("9999999");
            } else {
                return R.fail("微信登录失败");
            }
        }
        log.info("微信登录成功【{}】", JSONObject.toJSONString(sessionInfo));
        log.info("loginRequest参数【{}】", JSONObject.toJSONString(loginRequest));
        String openid = sessionInfo.getOpenid();
        R r = userService.getMcsUserByOpenId(openid);
        if (R.isOk(r) && nonNull(r.getData())) {
            McsLoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(r.getData()), McsLoginUserInfoVO.class);
            return tokenService.loginMcsUser(loginUserInfoVO.getAccount(), loginUserInfoVO.getPlaintextPassword());
        }
        LoginReturnVO loginReturnVO = new LoginReturnVO();
        loginReturnVO.setOpenId(openid);
        return R.ok(loginReturnVO);
    }
    @ApiOperation(value = "获取绑定验证码")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "phone", value = "手机号", required = true)
    })
    @GetMapping("/bind/verifyCode")
    public R getBindVerifyCode(@RequestParam("phone") String phone) {
        String clientIP = this.getRequest().getHeader("X-Real-IP");
        log.info("获取验证码用户ip信息【{}】", clientIP);
        try {
            return userService.sendMessageCode(phone, clientIP, "MCS_BIND_WITH_PHONE", 5, 5 * 60);
        } catch (Exception e) {
            return R.fail("获取失败");
        }
    }
    @ApiOperation(value = "微信授权-绑定手机号", response = LoginReturnVO.class)
    @PostMapping("/bindPhone")
    public R bindOrAddMcsUser(@RequestBody @Valid BindUserPhoneDTO bindUserPhoneDTO) {
        R r = userService.bindOrAddMcsUser(bindUserPhoneDTO);
        Boolean isValid = false;
        if (R.isOk(r) && r.getData() != null) {
            McsLoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(r.getData()), McsLoginUserInfoVO.class);
            isValid = loginUserInfoVO.getStatus() == 1;
            if (isValid) {
                R result = tokenService.loginMcsUser(loginUserInfoVO.getAccount(), loginUserInfoVO.getPlaintextPassword());
                return result;
            } else {
                return R.fail("账号被禁用");
            }
        }
        return R.fail(r.getMsg());
    }
    @ApiOperation(value = "微商业街商家后台登录", response = LoginReturnVO.class)
    @PostMapping("/merchant/login")
@@ -141,14 +213,14 @@
    @ApiOperation(value = "获取登录验证码")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "phone", value = "手机号", required = true),
            @ApiImplicitParam(paramType = "header", name = "X-Real-IP", example = "192.168.1.1", value = "用户ip")
            @ApiImplicitParam(name = "phone", value = "手机号", required = true)
    })
    @GetMapping("/verifyCode")
    public R loginWithPhone(@RequestParam("phone") String phone, @RequestHeader(value = "X-Real-IP", required = false) String clientIP) {
    public R getLoginVerifyCode(@RequestParam("phone") String phone) {
        String clientIP = this.getRequest().getHeader("X-Real-IP");
        log.info("获取验证码用户ip信息【{}】", clientIP);
        try {
            return userService.sendMessageCodeForLogin(phone, clientIP, "MCS_LOGIN_WITH_PHONE", 5, 5 * 60);
            return userService.sendMessageCode(phone, clientIP, "MCS_LOGIN_WITH_PHONE", 5, 5 * 60);
        } catch (Exception e) {
            return R.fail("获取失败");
        }
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/config/WxH5Properties.java
New file
@@ -0,0 +1,58 @@
package com.panzhihua.shop_backstage.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import lombok.Data;
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
 * @description: 微信配置
 * @author: huang.hongfa weixin hhf9596 qq 959656820
 * @create: 2020-11-23 14:52
 **/
@Data
@Component
@ConfigurationProperties(prefix = "wx.h5")
public class WxH5Properties {
    /**
     * 设置微信小程序的appid
     */
    private String appid;
    /**
     * 设置微信小程序的Secret
     */
    private String secret;
    /**
     * 设置微信小程序消息服务器配置的token
     */
    private String token;
    /**
     * 设置微信小程序消息服务器配置的EncodingAESKey
     */
    private String aesKey;
    /**
     * 消息格式,XML或者JSON
     */
    private String msgDataFormat;
    /**
     * 商户号
     */
    private String mchId;
    /**
     * 微信支付密钥
     */
    private String payKey;
    /**
     * 微信支付回调地址
     */
    private String notifyUrl;
}
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/config/WxMaConfiguration.java
New file
@@ -0,0 +1,34 @@
package com.panzhihua.shop_backstage.config;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import lombok.extern.slf4j.Slf4j;
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
 * @description: wexin
 * @author: huang.hongfa weixin hhf9596 qq 959656820
 * @create: 2020-11-23 15:07
 **/
@Slf4j
@Component
public class WxMaConfiguration {
    @Resource
    private WxH5Properties wxH5Properties;
    public WxMaService getMaH5Service() {
        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
        config.setAppid(wxH5Properties.getAppid());
        config.setSecret(wxH5Properties.getSecret());
        config.setMsgDataFormat(wxH5Properties.getMsgDataFormat());
        WxMaService wxMaService = new WxMaServiceImpl();
        wxMaService.setWxMaConfig(config);
        return wxMaService;
    }
}
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/model/request/LoginRequest.java
New file
@@ -0,0 +1,36 @@
package com.panzhihua.shop_backstage.model.request;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
 * @description: 微信登录
 * @author: huang.hongfa weixin hhf9596 qq 959656820
 * @create: 2020-11-23 14:12
 **/
@Data
@ApiModel(value = "小程序登录")
public class LoginRequest {
    @ApiModelProperty(name = "code", value = "登录时获取的 code")
    String code;
    @ApiModelProperty(name = "signature", value = "使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息")
    String signature;
    @ApiModelProperty(name = "rawData", value = "不包括敏感信息的原始数据字符串,用于计算签名")
    String rawData;
    @ApiModelProperty(name = "encryptedData", value = "包括敏感数据在内的完整用户信息的加密数据")
    String encryptedData;
    @ApiModelProperty(name = "iv", value = "加密算法的初始向量")
    String iv;
    @ApiModelProperty(name = "userInfo", value = "用户基本信息")
    WxMaUserInfo userInfo;
}