From 23c4967b4cb8dbce8277f830f7152d315c5a4a57 Mon Sep 17 00:00:00 2001 From: luo <2855143437@qq.com> Date: 星期一, 25 十二月 2023 09:25:17 +0800 Subject: [PATCH] 12.25 --- guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppUserServiceImpl.java | 446 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 419 insertions(+), 27 deletions(-) diff --git a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppUserServiceImpl.java b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppUserServiceImpl.java index 0eed1d8..cc6b676 100644 --- a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppUserServiceImpl.java +++ b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AppUserServiceImpl.java @@ -1,27 +1,35 @@ 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.service.IAppUserService; -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.model.*; +import com.stylefeng.guns.modular.system.service.*; +import com.stylefeng.guns.modular.system.util.*; 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 io.swagger.annotations.ApiModelProperty; +import org.springframework.beans.BeanUtils; 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.Date; -import java.util.Map; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; /** * @author zhibing.pu @@ -34,6 +42,20 @@ private WeChatUtil weChatUtil; @Autowired private RedisUtil redisUtil; + @Autowired + private IRegionService regionService; + @Autowired + private IAppUserService appUserService; + @Autowired + private HouseResourceService houseResourceService; + @Autowired + private IHousingDemandService housingDemandService; + @Autowired + private CollectionHouseResourceServiceImpl collectionHouseResourceService; + @Autowired + private ICollectionHousingDemandService collectionHousingDemandService; + + /** @@ -45,7 +67,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,27 +85,59 @@ /** * 小程序登录 - * @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("获取微信身份信息失败"); } String openid = map.get("openid").toString(); AppUser appUser = this.selectOne(new EntityWrapper<AppUser>() - .eq("wechat_openid", openid) - .eq("audit_status", 2) - .eq("status", 1)); - AppletLoginRes appletLoginRes = new AppletLoginRes(); - if(null != appUser){ - String token = JwtTokenUtil.generateToken(appUser.getPhone()); - appletLoginRes.setToken(token); + .eq("wechat_openid", openid)); + if(null != appUser && appUser.getStatus() == 2){ + return ResultUtil.error("账号冻结"); } + AppletLoginRes appletLoginRes = new AppletLoginRes(); + // 当前微信号没有注册过 + if(null == appUser){ + 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("status", 1)); + JSONObject jsonObject = JSONObject.parseObject(phone); + String phone1 = jsonObject.getString("phoneNumber"); + System.err.println("看看json"); + System.err.println(jsonObject); + System.err.println(phone1); + //注册新账号 + appUser = addNewAppUser(openid, phone1); + }else{ + String sessionKey = map.get("sessionKey").toString(); + String phone = WXCore.decrypt(req.getEncryptedPhoneData(), sessionKey, req.getPhone_iv()); + JSONObject jsonObject = JSONObject.parseObject(phone); + String phone1 = jsonObject.getString("phoneNumber"); + appUser.setWechatOpenid(openid); + appUser.setPhone(phone1); + this.updateById(appUser); + } + //生成token + String token = JwtTokenUtil.generateToken(appUser.getPhone()); + + System.err.println("token1111--->" + token); + appletLoginRes.setState(appUser.getAuth()); + appletLoginRes.setToken(token); + appletLoginRes.setUserType(appUser.getUserType()); + System.err.println("看看TOKEN:"+token); + //存入缓存中 + addTokenToRedis(token, appUser.getId()); return ResultUtil.success(appletLoginRes); }catch (Exception e){ e.printStackTrace(); @@ -103,11 +159,16 @@ 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) - .eq("audit_status", 2) + .ne("audit_status", 3) .eq("status", 1)); + if(null != appUser && appUser.getAuditStatus() == 1){ + return ResultUtil.error("账号审核中"); + } AppletLoginRes appletLoginRes = new AppletLoginRes(); if(null == appUser){ String sessionKey = map.get("sessionKey").toString(); @@ -118,8 +179,13 @@ .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); + appUser = addNewAppUser(openid, phone1); }else{ appUser.setWechatOpenid(openid); this.updateById(appUser); @@ -128,6 +194,7 @@ //生成token String token = JwtTokenUtil.generateToken(appUser.getPhone()); appletLoginRes.setToken(token); + appletLoginRes.setUserType(appUser.getUserType()); //存入缓存中 addTokenToRedis(token, appUser.getId()); return ResultUtil.success(appletLoginRes); @@ -137,13 +204,335 @@ } } + @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); + + } + public static boolean isToday(Date date) { + // 将Date类型转换为LocalDate + LocalDate inputDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + // 比较日期是否相等 + return inputDate.isEqual(currentDate); + } + @Override + public ResultUtil<CollectRes> collect(UserInfoQuery query) { + SearchHousingDemandRes searchHousingDemandRes = housingDemandService + .searchHousingDemand1(appUserService.getAppUser().getId()); + List<SearchHousingDemandListRes> list1 = searchHousingDemandRes.getList(); + CollectRes searchIntermediaryRes = new CollectRes(); + List<CollectListRes> list = houseResourceService.collect(appUserService.getAppUser().getId()); + for (SearchHousingDemandListRes temp : list1) { + // 判断顶上去时间是不是今天 + CollectListRes collectListRes = new CollectListRes(); + collectListRes.setSaleAmount(temp.getSaleAmount()); + collectListRes.setData(1); + BeanUtils.copyProperties(temp,collectListRes); + StringBuilder stringBuilder = new StringBuilder(""); + if (temp.getAddress()!=null){ + for (String address : temp.getAddress()) { + stringBuilder.append(address+","); + } + String string = stringBuilder.toString(); + String substring = string.substring(0, string.length() - 1); + collectListRes.setAddress(substring); + } + list.add(collectListRes); + } + for (CollectListRes collectListRes : list) { + // 没有顶过 + if (collectListRes.getUpTime() == null){ + collectListRes.setUp(1); + continue; + } + if (isToday(collectListRes.getUpTime())){ + // 时间相同的话 就不能顶 + collectListRes.setUp(0); + }else{ + collectListRes.setUp(1); + } + } + List<CollectListRes> collect3 = list.stream().distinct().collect(Collectors.toList()); + // 房源数据 + List<CollectListRes> collect1 = collect3.stream().filter(t->t.getData()==2).distinct().collect(Collectors.toList()); + // 求房源数据 + List<CollectListRes> collect2 = collect3.stream().filter(t->t.getData()==1).distinct().collect(Collectors.toList()); + for (CollectListRes collectListRes : collect1) { + // 查询这个房源的收藏 + int collect = collectionHouseResourceService.selectList(new EntityWrapper<CollectionHouseResource>() + .eq("house_resource_id", collectListRes.getId())).size(); + collectListRes.setCollect(collect); + // 根据区id 查询下级 + if (collectListRes.getCityId()==null){ + continue; + } + 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()); + } + for (CollectListRes collectListRes : collect2) { + // 查询这个房源的收藏 + int collect = collectionHousingDemandService.selectList(new EntityWrapper<CollectionHousingDemand>() + .eq("housing_demand_id", collectListRes.getId())).size(); + collectListRes.setCollect(collect); + + } + collect1.addAll(collect2); + List<CollectListRes> testing = testing(collect1.size(), query.getPageNum(), query.getPageSize(), collect1); + List<CollectListRes> collect = testing.stream().filter(t -> t.getData() == 2).distinct().collect(Collectors.toList()); + List<CollectListRes> collectt = testing.stream().filter(t -> t.getData() == 1).distinct().collect(Collectors.toList()); + + long count = collect.stream().filter(t -> t.getType() == 1).count(); + long count1 = collectt.stream().filter(t -> t.getType() == 1).count(); + // 草稿数量 + searchIntermediaryRes.setDraft(Integer.parseInt(String.valueOf(count))+Integer.parseInt(String.valueOf(count1))); + // 上架房源数 + int size = collect.stream().filter(t -> t.getStatus() == 1 && t.getType()==2).collect(Collectors.toList()).size(); + int size2 = collectt.stream().filter(t -> t.getStatus() == 1 && t.getType()==2).collect(Collectors.toList()).size(); + searchIntermediaryRes.setOn(size+size2); + // 下架房源数 + int size1 = collect.stream().filter(t -> t.getStatus() == 0 && t.getType()==2).collect(Collectors.toList()).size(); + int size3 = collectt.stream().filter(t -> t.getStatus() == 0 && t.getType()==2).collect(Collectors.toList()).size(); + searchIntermediaryRes.setOff(size1+size3); +// @ApiModelProperty("是否有电梯(0=否,1=是)") +// private Integer elevator; +// @ApiModelProperty("是否有晾晒区(0=否,1=是)") +// private Integer dryingArea; +// @ApiModelProperty("是否有花园(0=否,1=是)") +// private Integer garden; +// @ApiModelProperty("是否有车位(0=否,1=是)") +// private Integer carport; +// @ApiModelProperty("是否有平台(0=否,1=是)") +// private Integer balcony; +// @ApiModelProperty("是否可养宠物(0=否,1=是)") +// private Integer keepPet; + + for (CollectListRes t : testing) { + StringBuilder temp = new StringBuilder(""); + if (t.getElevator()==null){ + temp.append("电梯,"); + }else if (t.getElevator()==1){ + temp.append("电梯,"); + } + if (t.getDryingArea()==null){ + temp.append("晾晒区,"); + }else if (t.getDryingArea()==1){ + temp.append("晾晒区,"); + } + if (t.getGarden()==null){ + temp.append("花园,"); + }else if (t.getGarden()==1){ + temp.append("花园,"); + } + if (t.getCarport()==null){ + temp.append("车位,"); + }else if (t.getCarport()==1){ + temp.append("车位,"); + } + if (t.getBalcony()==null){ + temp.append("平台,"); + }else if (t.getBalcony()==1){ + temp.append("平台,"); + } + if (t.getKeepPet()==null){ + temp.append("宠物,"); + }else if (t.getKeepPet()==1){ + temp.append("宠物,"); + } + String string = temp.toString(); + if (StringUtils.hasLength(string)){ + String substring = string.substring(0, string.length() - 1); + t.setHead(substring); + }else{ + t.setHead(""); + } + + } + searchIntermediaryRes.setList(testing); + + searchIntermediaryRes.setTotal(testing.size()); + + return ResultUtil.success(searchIntermediaryRes); + } + + + public static List<CollectListRes> testing(long total, long current, long size, List<CollectListRes> str){ + List<CollectListRes> result = new ArrayList<>(); + //获取初始化分页结构 + Page<CollectListRes> page = new Page().getPage(total, size, current - 1); + //获取集合下标初始值 + long startIndex = page.getStartIndex(); + //获取集合下标结束值 + long endInddex = 0; + /** + * 如果初始值startIndex(size * current)超过总记录数 或者 入参size(一页显示多少条)大于总记录树, + * 则下标结束值均设置为集合大小 + */ + if(startIndex + page.getCurrent() >= total || size > total){ + endInddex = total; + }else { + /**当最后一页,开始下标加上要取值的size 大于总条数,则最终索引改为集合大小-1=》为 + *集合的最后下标值,防止下标溢出 + **/ + if(total < startIndex + page.getSize()){ + endInddex = total - 1 ; + }else { + //否则为startIndex(size * current 从哪里开始取)加上一页显示多少条得到结束值 + endInddex = startIndex + page.getSize(); + } + } + //如果输入的开始查询下标大于集合大小,则查询为空值 + if(startIndex > total){ + result = Collections.emptyList(); + }else{ + result = str.subList((int)startIndex,(int)endInddex); + } + /** + * 此处返回结果可以改为Page<T> T为对应业务的实体类型,最终把分页结果再塞入page的records再返回则得到与 + * mybatisplus一样的结构 + * page.setRecords(list); + * return page; + */ + return result; + } + @Override + public ResultUtil<CollectRes> release(UserInfoQuery query) { + // 房源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 = new ArrayList<>(); + if (collect.size()==0){ + }else{ + list = houseResourceService.release(query,collect); + } + + List<CollectListRes> collect1 = list.stream().distinct().collect(Collectors.toList()); + if (ids.size()==0){ + collect=new ArrayList<>(); + list = new ArrayList<>(); + collect1 = new ArrayList<>(); + } + for (CollectListRes collectListRes : collect1) { + // 根据区id 查询下级 + Region city = regionService.selectById(collectListRes.getCityId()); + StringBuilder stringBuilder = new StringBuilder(""); + if (city!=null){ + Region dis = regionService.selectById(collectListRes.getDistrictId()); + if (dis!=null){ + Region region = regionService.selectOne(new EntityWrapper<Region>().eq("parent_id",dis.getId())); + 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()); + } + } + } + // 查询收藏的求房源ids + List<Integer> demand = collectionHousingDemandService.selectList + (new EntityWrapper<CollectionHousingDemand>() + .eq("app_user_id", appUserService.getAppUser().getId())) + .stream().map(CollectionHousingDemand::getHousingDemandId) + .collect(Collectors.toList()); + if (demand.size()!=0){ + SearchHousingDemandRes searchHousingDemandRes = housingDemandService.searchHousingDemand2(demand); + List<SearchHousingDemandListRes> list1 = searchHousingDemandRes.getList(); + for (SearchHousingDemandListRes temp : list1) { + CollectListRes collectListRes = new CollectListRes(); + collectListRes.setSaleAmount(temp.getSaleAmount()); + collectListRes.setData(1); + BeanUtils.copyProperties(temp,collectListRes); + StringBuilder stringBuilder = new StringBuilder(""); + if (temp.getAddress()!=null){ + for (String address : temp.getAddress()) { + stringBuilder.append(address+","); + } + String string = stringBuilder.toString(); + String substring = string.substring(0, string.length() - 1); + collectListRes.setAddress(substring); + } + collect1.add(collectListRes); + } + } + + + CollectRes searchIntermediaryRes = new CollectRes(); + List<CollectListRes> testing = testing(collect1.size(), query.getPageNum(), query.getPageSize(), collect1); + + searchIntermediaryRes.setList(testing); + searchIntermediaryRes.setTotal(testing.size()); + return ResultUtil.success(searchIntermediaryRes); + } + + @Override + public SearchIntermediaryListRes searchIntermediaryInfo(Integer id) { + return this.baseMapper.searchIntermediaryInfo(id); + + } + /** * 添加新用户到数据库 * @param openid 微信openid * @param phone 手机号 */ - private void addNewAppUser(String openid, String phone){ + private AppUser addNewAppUser(String openid, String phone){ AppUser appUser = new AppUser(); appUser.setCode(UUIDUtil.getNumberRandom(16)); appUser.setUserType(1); @@ -151,8 +540,10 @@ appUser.setWechatOpenid(openid); appUser.setAuditStatus(2); appUser.setStatus(1); + appUser.setAuth(0); appUser.setInsertTime(new Date()); this.insert(appUser); + return appUser; } @@ -164,8 +555,8 @@ private void addTokenToRedis(String token, Integer id){ String key = token; int length = token.length(); - if(length > 16){ - key = token.substring(4, 12); + if(length > 32){ + key = token.substring(token.length() - 32); } //30天有效期 redisUtil.setStrValue(key, id.toString(), 2592000); @@ -178,10 +569,11 @@ * @return */ private Integer getAppUserIdFromToken(String token){ + System.err.println("token--->" + token); String key = token; int length = token.length(); - if(length > 16){ - key = token.substring(4, 12); + if(length > 32){ + key = token.substring(token.length() - 32); } String value = redisUtil.getValue(key); if(ToolUtil.isEmpty(value)){ -- Gitblit v1.7.1