无关风月
16 小时以前 b5ead35c1d955f2a0e2e10da79254860d0ba95e9
ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/UserController.java
@@ -7,30 +7,33 @@
import com.ruoyi.admin.api.feignClient.AdminClient;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.constant.RedisConstants;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.vo.AddressDto;
import com.ruoyi.common.core.vo.UserDto;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.system.api.model.LoginUserInfo;
import com.ruoyi.user.entity.RecoveryClassify;
import com.ruoyi.user.entity.RecoveryServe;
import com.ruoyi.user.entity.User;
import com.ruoyi.user.entity.*;
import com.ruoyi.user.request.LoginPhoneRequest;
import com.ruoyi.user.service.RecoveryClassifyService;
import com.ruoyi.user.service.RecoveryServeService;
import com.ruoyi.user.service.UserService;
import com.ruoyi.user.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -57,6 +60,35 @@
    private RecoveryClassifyService recoveryClassifyService;
    @Resource
    private RecoveryServeService recoveryServeService;
    @Resource
    private     UserRecipientService userRecipientService;
    /**
     * 用户端默认头像
     */
    @Value("${default.profilePicture}")
    private String profilePicture;
    /**
     * 解密用户敏感数据
     *
     * @param encryptedData 明文,加密数据
     * @param iv            加密算法的初始向量
     * @param code          用户允许登录后,回调内容会带上 code(有效期五分钟),开发者需要将 code 发送到开发者服务器后台,使用code 换取 session_key api,将 code 换成 openid 和 session_key
     * @return 登录信息
     */
    @ApiOperation("微信授权一键登录")
    @GetMapping("/wxAuthorize")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "用户允许登录后回调内容code", name = "code", dataType = "String", required = true),
            @ApiImplicitParam(value = "明文,加密数据", name = "encryptedData", dataType = "String", required = true),
            @ApiImplicitParam(value = "加密算法的初始向量", name = "iv", dataType = "String", required = true)
    })
    public R<Map<String, Object>> decodeUserInfo(@RequestParam("code") String code,
                                                 @RequestParam("encryptedData") String encryptedData,
                                                 @RequestParam("iv") String iv) {
        return R.ok(userService.decodeUserInfo(code, encryptedData, iv));
    }
    /**
     * 用户端-获取微信openId
@@ -65,7 +97,7 @@
     */
    @ApiOperation(value = "获取微信openId", tags = {"用户端-登录"})
    @PostMapping(value = "/decodeOpenid")
    public R<String> decodeOpenid(HttpServletResponse response, @RequestParam String code) {
    public R<String> decodeOpenid(HttpServletResponse response, String code) {
        return userService.decodeOpenid(response, code);
    }
@@ -84,13 +116,13 @@
            // 手机验证码校验获取缓存验证码
            Object phoneCodeRedis = redisService.getCacheObject(RedisConstants.USER_LOGIN_PHONE_CODE + phone);
            if (null == phoneCodeRedis) {
                return R.errorCode("登录失败,验证码已过期!");
                return R.errorCode("验证码错误!");
            } else {
                // redis 验证码的value 为 code:时间戳
                String rCodeAndTime = String.valueOf(phoneCodeRedis);
                String rCode = rCodeAndTime.split(":")[0];
                if (!rCode.equalsIgnoreCase(phoneCode)) {
                    return R.errorCode("登录失败,验证码无效!");
                    return R.errorCode("验证码错误!");
                }
            }
        }
@@ -99,14 +131,15 @@
                .eq(User::getIsDelete, 0).one();
        if (null != user) {
            if (!Constants.ONE.equals(user.getState())) {
                return R.notEnabled("登录失败,当前账号未启用!");
                return R.notEnabled("账号已被禁用,请联系平台管理员。");
            }
        } else {
            user = new User();
            // 随机编号
            user.setUserNo(String.format(Constants.USER_NO_PRE, RandomUtil.randomNumbers(Constants.EIGHT)));
            user.setState(Constants.ONE);
            user.setNickname(phone);
            user.setProfilePicture(profilePicture);
            user.setNickname(String.format(Constants.USER_NO_PRE, StringUtils.getCharAndNum(Constants.SIX)));
            user.setPhone(phone);
            user.setCity(loginPhoneRequest.getCity());
            user.setOpenId(loginPhoneRequest.getOpenId());
@@ -130,13 +163,17 @@
    @ApiOperation(value = "用户注册协议/用户隐私协议", tags = {"用户端-登录"})
    @GetMapping(value = "/registerOrAgreement")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "0:用户注册协议、1:用户隐私协议", name = "type", dataType = "Integer", required = true)
            @ApiImplicitParam(value = "0:用户注册协议、1:用户隐私协议;3:服务规则管理", name = "type", dataType = "Integer", required = true)
    })
    public R<Agreement> recoverySearch(@RequestParam Integer type) {
        if (!Constants.ZERO.equals(type) || !Constants.ONE.equals(type)) {
    public R<Agreement> registerOrAgreement(@RequestParam Integer type) {
        if (!Constants.ZERO.equals(type) && !Constants.ONE.equals(type) && !Constants.THREE.equals(type)) {
            throw new GlobalException("获取类型异常!");
        }
        return R.ok(adminClient.dataInfo(type).getData());
        R<Agreement> r = adminClient.agreementPolicy(type);
        if (500 == r.getCode()) {
            return R.fail(r.getMsg());
        }
        return R.ok(r.getData());
    }
    /**
@@ -145,7 +182,29 @@
    @ApiOperation(value = "轮播图列表", tags = {"用户端-首页"})
    @GetMapping(value = "/banner")
    public R<List<Rotate>> banner() {
        return R.ok(adminClient.bannerList().getData());
        R<List<Rotate>> r = adminClient.bannerList();
        List<Rotate> data = r.getData();
        if (null == data) {
            return R.fail(r.getMsg());
        }
        for (Rotate datum : data) {
            RecoveryServe recoveryServe = recoveryServeService.lambdaQuery()
                    .eq(RecoveryServe::getId, datum.getRotateServeId()).one();
            if (null != recoveryServe) {
                Integer classifyId = recoveryServe.getClassifyId();
                RecoveryClassify classify = recoveryClassifyService.lambdaQuery()
                        .eq(RecoveryClassify::getId, classifyId).one();
                if (null != classify) {
                    String supClassify = classify.getSupClassify();
                    if (Constants.RECOVERY.equals(supClassify)) {
                        datum.setType(Constants.ONE);
                    } else {
                        datum.setType(Constants.ZERO);
                    }
                }
            }
        }
        return R.ok(data);
    }
    /**
@@ -155,6 +214,15 @@
    @GetMapping(value = "/notice")
    public R<List<Notices>> notice() {
        return R.ok(adminClient.noticesList().getData());
    }
    /**
     * 用户端-通知公告详情
     */
    @ApiOperation(value = "通知公告详情", tags = {"用户端-首页"})
    @GetMapping(value = "/noticeDetail")
    public R<Notices> notice(@RequestParam Integer id) {
        return R.ok(adminClient.noticesDetail(id).getData());
    }
    /**
@@ -182,7 +250,8 @@
    @ApiOperation(value = "首页回收分类推荐", tags = {"用户端-首页"})
    public R<List<RecoveryClassify>> recommend() {
        return R.ok(recoveryClassifyService.lambdaQuery().eq(RecoveryClassify::getIsRecommend, Constants.ONE)
                .eq(RecoveryClassify::getIsDelete, 0).orderByAsc(RecoveryClassify::getOrder).list());
                .eq(RecoveryClassify::getIsDelete, 0).orderByDesc(RecoveryClassify::getSort)
                .orderByDesc(RecoveryClassify::getCreateTime).list());
    }
    /**
@@ -196,10 +265,62 @@
    public R<List<RecoveryServe>> recoverySearch(@RequestParam String keyword) {
        LambdaQueryChainWrapper<RecoveryServe> wrapper = recoveryServeService.lambdaQuery()
                .eq(RecoveryServe::getIsDelete, 0)
                .orderByAsc(RecoveryServe::getSort);
        wrapper = StringUtils.isNotBlank(keyword) ? wrapper.like(RecoveryServe::getServeName, keyword) : wrapper;
        return R.ok(wrapper.list());
                .orderByDesc(RecoveryServe::getSort);
        wrapper = null != keyword && !"".equals(keyword.trim()) ?
                wrapper.like(RecoveryServe::getServeName, keyword) : wrapper;
        List<RecoveryServe> serveList = wrapper.orderByDesc(RecoveryServe::getCreateTime).list();
        for (RecoveryServe recoveryServe : serveList) {
            RecoveryClassify classify = recoveryClassifyService.lambdaQuery()
                    .eq(RecoveryClassify::getId, recoveryServe.getClassifyId()).one();
            if (null != classify) {
                if (Constants.RECOVERY.equals(classify.getSupClassify())) {
                    recoveryServe.setType(Constants.ONE);
                } else {
                    recoveryServe.setType(Constants.ZERO);
                }
            }
        }
        return R.ok(serveList);
    }
    @PostMapping(value = "/getUser")
    public R<UserDto> updateWithdrawalState(@RequestParam("userId") Integer userId) {
        User byId = userService.getById(userId);
        UserDto userDto = new UserDto();
        BeanUtils.copyProperties(byId,userDto);
        return R.ok(userDto);
    }
//    @ApiOperation(value = "订单列表-更改订单提现状态", tags = {"后台-订单管理"})
    @PostMapping(value = "/getCityCode")
    public R<AddressDto> getCityCode(@RequestParam("addressId") Integer addressId) {
        UserRecipient byId = userRecipientService.getById(addressId);
        AddressDto userDto = new AddressDto();
        userDto.setCityCode(byId.getCityCode());
        userDto.setCity(byId.getCity());
        userDto.setName(byId.getName());
        userDto.setDetail(byId.getAddressDetail());
        return R.ok(userDto);
    }
    @Resource
    private RecoveryServePriceService recoveryServePriceService;
    @PostMapping(value = "/getServePrice")
    public R<BigDecimal> getServePrice(@RequestParam("serveId") Integer serveId, @RequestParam("cityCode") String cityCode) {
        RecoveryServePrice one = recoveryServePriceService.lambdaQuery().eq(RecoveryServePrice::getRecoveryServeId, serveId).eq(RecoveryServePrice::getCity, cityCode).eq(RecoveryServePrice::getIsDelete, 0).one();
        if (one==null){
            return R.ok(null);
        }
        return R.ok(one.getRecoveryPrice());
    }
    /**
     * 用户端-个人中心用户信息
@@ -215,4 +336,34 @@
                .eq(User::getIsDelete, 0).one());
    }
    /**
     * 用户端-修改头像&昵称
     */
    @ApiOperation(value = "修改头像&昵称", tags = {"用户端-个人中心"})
    @GetMapping(value = "/updateInfo")
    public R<Boolean> updateInfo(@RequestParam String picture, @RequestParam String nickname) {
        LoginUserInfo loginUser = tokenService.getLoginUserByUser();
        if (null == loginUser) {
            return R.loginExpire("登录失效!");
        }
        return R.ok(userService.lambdaUpdate().eq(User::getId, loginUser.getUserid())
                .set(User::getProfilePicture, picture)
                .set(User::getNickname, nickname).update());
    }
    /**
     * 用户端-修改用户定位城市
     */
    @ApiOperation(value = "修改用户定位城市", tags = {"用户端-个人中心"})
    @GetMapping(value = "/updateCity")
    public R<Boolean> updateCity(@RequestParam String city, @RequestParam String cityCode) {
        LoginUserInfo loginUser = tokenService.getLoginUserByUser();
        if (null == loginUser) {
            return R.loginExpire("登录失效!");
        }
        return R.ok(userService.lambdaUpdate().eq(User::getId, loginUser.getUserid())
                .set(User::getCity, city)
                .set(User::getCityCode, cityCode).update());
    }
}