44323
2023-12-04 fd83395529437e0c02b8d69b039fe52d40a4ec62
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppUserServiceImpl.java
@@ -1,27 +1,41 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.util.JwtTokenUtil;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.AppUserMapper;
import com.stylefeng.guns.modular.system.model.AppUser;
import com.stylefeng.guns.modular.system.model.CollectionHouseResource;
import com.stylefeng.guns.modular.system.model.HouseResource;
import com.stylefeng.guns.modular.system.model.Region;
import com.stylefeng.guns.modular.system.service.IAppUserService;
import com.stylefeng.guns.modular.system.service.ICollectionHouseResourceService;
import com.stylefeng.guns.modular.system.service.IHousingDemandService;
import com.stylefeng.guns.modular.system.service.IRegionService;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.util.UUIDUtil;
import com.stylefeng.guns.modular.system.util.weChat.WXCore;
import com.stylefeng.guns.modular.system.util.weChat.WeChatUtil;
import com.stylefeng.guns.modular.system.warpper.req.RegisterAccountReq;
import com.stylefeng.guns.modular.system.warpper.res.AppletLoginRes;
import com.stylefeng.guns.modular.system.warpper.req.*;
import com.stylefeng.guns.modular.system.warpper.res.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import sun.rmi.runtime.Log;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @author zhibing.pu
@@ -34,6 +48,16 @@
    private WeChatUtil weChatUtil;
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private IRegionService regionService;
    @Autowired
    private IAppUserService appUserService;
    @Autowired
    private HouseResourceService houseResourceService;
    @Autowired
    private CollectionHouseResourceServiceImpl collectionHouseResourceService;
    /**
@@ -45,7 +69,9 @@
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = servletRequestAttributes.getRequest();
        String authorization = request.getHeader("Authorization");
        if(ToolUtil.isNotEmpty(authorization) && authorization.contains("Bearer")){
        // todo 这里注释了一段代码
        // && authorization.contains("Bearer")
        if(ToolUtil.isNotEmpty(authorization) && authorization.contains("Bearer") ){
            String token = authorization.substring(7);
            //通过token获取用户id
            Integer appUserId = getAppUserIdFromToken(token);
@@ -61,14 +87,13 @@
    /**
     * 小程序登录
     * @param jscode
     * @return
     */
    @Override
    public ResultUtil<AppletLoginRes> appletLogin(String jscode) {
    public ResultUtil<AppletLoginRes> appletLogin(RegisterAccountReq req) {
        try {
            //调用微信获取用户小程序openid
            Map<String, Object> map = weChatUtil.code2Session(jscode);
            Map<String, Object> map = weChatUtil.code2Session(req.getJscode());
            if(null == map){
                return ResultUtil.error("获取微信身份信息失败");
            }
@@ -81,7 +106,40 @@
            if(null != appUser){
                String token = JwtTokenUtil.generateToken(appUser.getPhone());
                appletLoginRes.setToken(token);
                appletLoginRes.setUserType(appUser.getUserType());
            }else{
                System.err.println("新增");
                String sessionKey = map.get("sessionKey").toString();
                //解密手机号
                String phone = WXCore.decrypt(req.getEncryptedPhoneData(), sessionKey, req.getPhone_iv());
                appUser = this.selectOne(new EntityWrapper<AppUser>()
                        .eq("phone", phone)
                        .eq("audit_status", 2)
                        .eq("status", 1));
                if(null == appUser){
                    JSONObject jsonObject = JSONObject.parseObject(phone);
                    String phone1 = jsonObject.getString("phoneNumber");
                    System.err.println("看看json");
                    System.err.println(jsonObject);
                    System.err.println(phone1);
                    //注册新账号
                    addNewAppUser(openid, phone1);
                }else{
                    appUser.setWechatOpenid(openid);
                    this.updateById(appUser);
                }
            }
            AppUser appUser1 = this.selectOne(new EntityWrapper<AppUser>()
                    .eq("wechat_openid", openid)
                    .eq("audit_status", 2)
                    .eq("status", 1));
            //生成token
            String token = JwtTokenUtil.generateToken(appUser1.getPhone());
            appletLoginRes.setToken(token);
            appletLoginRes.setUserType(appUser1.getUserType());
            System.err.println("看看TOKEN:"+token);
            //存入缓存中
            addTokenToRedis(token, appUser1.getId());
            return ResultUtil.success(appletLoginRes);
        }catch (Exception e){
            e.printStackTrace();
@@ -103,6 +161,8 @@
            if(null == map){
                return ResultUtil.error("获取微信身份信息失败");
            }
            System.err.println("看看返回结果map");
            System.err.println(map);
            String openid = map.get("openid").toString();
            AppUser appUser = this.selectOne(new EntityWrapper<AppUser>()
                    .eq("wechat_openid", openid)
@@ -118,18 +178,28 @@
                        .eq("audit_status", 2)
                        .eq("status", 1));
                if(null == appUser){
                    JSONObject jsonObject = JSONObject.parseObject(phone);
                    String phone1 = jsonObject.getString("phoneNumber");
                    System.err.println("看看json");
                    System.err.println(jsonObject);
                    System.err.println(phone1);
                    //注册新账号
                    addNewAppUser(openid, phone);
                    addNewAppUser(openid, phone1);
                }else{
                    appUser.setWechatOpenid(openid);
                    this.updateById(appUser);
                }
            }
            AppUser appUser1 = this.selectOne(new EntityWrapper<AppUser>()
                    .eq("wechat_openid", openid)
                    .eq("audit_status", 2)
                    .eq("status", 1));
            //生成token
            String token = JwtTokenUtil.generateToken(appUser.getPhone());
            String token = JwtTokenUtil.generateToken(appUser1.getPhone());
            appletLoginRes.setToken(token);
            appletLoginRes.setUserType(appUser1.getUserType());
            //存入缓存中
            addTokenToRedis(token, appUser.getId());
            addTokenToRedis(token, appUser1.getId());
            return ResultUtil.success(appletLoginRes);
        }catch (Exception e){
            e.printStackTrace();
@@ -137,6 +207,130 @@
        }
    }
    @Override
    public SearchIntermediaryRes searchIntermediaryList(SearchIntermediaryReq req) {
        req.setPageNum((req.getPageNum() - 1) * req.getPageSize());
        //区域
        List<Integer> districtIds = new ArrayList<>();
        List<Integer> cityIds = new ArrayList<>();
        if (req.getDistrict() != null &&(!req.getDistrict().equals("")) ){
            // 一级id
            Integer integer = Integer.valueOf(req.getDistrict());
            districtIds.add(integer);
            if (req.getArea()!=null && (!req.getArea().equals(""))){
                String[] split = req.getArea().split(",");
                for (String s : split) {
                    cityIds.add(Integer.valueOf(s));
                }
            }
        }
        SearchIntermediaryRes searchIntermediaryRes = new SearchIntermediaryRes();
        List<SearchIntermediaryListRes> res =this.baseMapper.searchIntermediaryList(req,districtIds,cityIds);
        searchIntermediaryRes.setList(res);
        searchIntermediaryRes.setTotal(res.size());
        return searchIntermediaryRes;
    }
    @Override
    public ResultUtil<AppUser> userInfo() {
        // 获取当前登录用户
        AppUser appUser = appUserService.getAppUser();
        return ResultUtil.success(appUser);
    }
    @Autowired
    private IHousingDemandService housingDemandService;
    @Override
    public ResultUtil<CollectRes> collect() {
        // 查询发布的求房源信息
        SearchHousingDemandReq req = new SearchHousingDemandReq();
        SearchHousingDemandRes searchHousingDemandRes = housingDemandService.searchHousingDemand(req);
        List<SearchHousingDemandListRes> list1 = searchHousingDemandRes.getList();
        List<SearchHousingDemandListRes> collect1 = list1.stream().filter(t -> t.getAppuserId() == appUserService.getAppUser().getId()).
                collect(Collectors.toList());
        // 拿到收藏的房源ids
        List<Integer> ids = new ArrayList<>();
        CollectRes searchIntermediaryRes = new CollectRes();
        searchIntermediaryRes.setList1(collect1);
        List<CollectListRes> list = houseResourceService.collect(ids);
        long count1 = collect1.stream().filter(t -> t.getType() == 1).count();
        long count = list.stream().filter(t -> t.getType() == 1).count();
        // 草稿数量
        searchIntermediaryRes.setDraft(Integer.parseInt(String.valueOf(count))+Integer.parseInt(String.valueOf(count1)));
        // 上架房源数
        int size = list.stream().filter(t -> t.getStatus() == 1 && t.getType()==2).collect(Collectors.toList()).size();
        searchIntermediaryRes.setOn(size);
        // 下架房源数
        int size1 = list.stream().filter(t -> t.getStatus() == 0 && t.getType()==2).collect(Collectors.toList()).size();
        searchIntermediaryRes.setOff(size1);
        for (CollectListRes collectListRes : list) {
            // 查询这个房源的收藏
            int collect = collectionHouseResourceService.selectList(new EntityWrapper<CollectionHouseResource>()
                    .eq("house_resource_id", collectListRes.getId())).size();
            collectListRes.setCollect(collect);
            // 根据区id 查询下级
            Region city = regionService.selectById(collectListRes.getCityId());
            Region dis = regionService.selectById(collectListRes.getDistrictId());
            Region region = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",dis.getId()));
            StringBuilder stringBuilder = new StringBuilder("");
            stringBuilder.append(dis.getName());
            if (region!=null){
                stringBuilder.append("/"+region.getName());
                Region region1 = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",region.getId()));
                if (region!=null){
                    stringBuilder.append(region1.getName());
                    Region region2 = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",region1.getId()));
                    if (region2!=null){
                        stringBuilder.append("/"+region2.getName());
                    }
                }
            }
            collectListRes.setAddress(city.getName()+">"+stringBuilder.toString());
        }
        searchIntermediaryRes.setList(list);
        searchIntermediaryRes.setTotal(list.size());
        return ResultUtil.success(searchIntermediaryRes);
    }
    @Override
    public ResultUtil<CollectRes> release(UserInfoQuery query) {
        query.setPageNum((query.getPageNum() - 1) * query.getPageSize());
        // 房源ids
        List<Integer> ids = collectionHouseResourceService.selectList(new EntityWrapper<CollectionHouseResource>()
                .eq("app_user_id", appUserService.getAppUser().getId()))
                .stream().map(CollectionHouseResource::getHouseResourceId).collect(Collectors.toList());
        List<Integer> collect = houseResourceService.selectList(new EntityWrapper<HouseResource>()
                .eq("is_delete", 0)
                .eq("status", 1)
                .eq("auth_status", 2)
                .in("id", ids)).stream().map(HouseResource::getId).collect(Collectors.toList());
        List<CollectListRes> list = houseResourceService.release(query,collect);
        for (CollectListRes collectListRes : list) {
            // 根据区id 查询下级
            Region city = regionService.selectById(collectListRes.getCityId());
            Region dis = regionService.selectById(collectListRes.getDistrictId());
            Region region = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",dis.getId()));
            StringBuilder stringBuilder = new StringBuilder("");
            stringBuilder.append(dis.getName());
            if (region!=null){
                stringBuilder.append("/"+region.getName());
                Region region1 = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",region.getId()));
                if (region!=null){
                    stringBuilder.append(region1.getName());
                    Region region2 = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",region1.getId()));
                    if (region2!=null){
                        stringBuilder.append("/"+region2.getName());
                    }
                }
            }
            collectListRes.setAddress(city.getName()+">"+stringBuilder.toString());
        }
        CollectRes searchIntermediaryRes = new CollectRes();
        searchIntermediaryRes.setList(list);
        searchIntermediaryRes.setTotal(list.size());
        return ResultUtil.success();
    }
    /**
     * 添加新用户到数据库