From aa8ff2d61669d0779fdacdba76e26388587b435d Mon Sep 17 00:00:00 2001 From: 44323 <443237572@qq.com> Date: 星期四, 22 二月 2024 15:40:23 +0800 Subject: [PATCH] 租房新增需求 --- guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseResourceService.java | 276 +++++++++++++++++++++++++++++++++---------------------- 1 files changed, 165 insertions(+), 111 deletions(-) diff --git a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseResourceService.java b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseResourceService.java index c692595..3d683c2 100644 --- a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseResourceService.java +++ b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseResourceService.java @@ -23,6 +23,8 @@ import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.apache.http.entity.ContentType; +import org.dom4j.Document; +import org.dom4j.Element; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -32,7 +34,6 @@ import org.springframework.data.geo.Point; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.geo.GeoJsonPoint; -import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.CriteriaDefinition; import org.springframework.data.mongodb.core.query.Query; @@ -85,54 +86,12 @@ private RestTemplate restTemplate; @Autowired private IUserService userService; - @Autowired private OSSService ossService; @Value("${wx.appletsAppid}") private String wxAppletsAppid; - @Value("${wx.appletsAppSecret}") private String wxAppletsAppSecret; - /** - * 生成小程序码地址 - */ - public static final String CREATE_CODE_URL = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN"; - // 生成小程序码 - - public String generateMiniProgramCode(String outputFilePath) throws IOException { - // 获取access_token - String accessToken = wxAppletTools.getAccessToken(); - // 替换CREATE_CODE_URL - String uri = CREATE_CODE_URL.replace("ACCESS_TOKEN", accessToken); - // 跳转到的小程序页面路径 - String pagePath = "pages/index/index"; - URL url = new URL(uri); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - // 设置请求方法 - connection.setRequestMethod("POST"); - connection.setDoOutput(true); - // 构建请求参数 - String params = "path=" + URLEncoder.encode(pagePath, "UTF-8"); - // 获取输出流 - try (OutputStream outputStream = connection.getOutputStream()) { - outputStream.write(params.getBytes()); - } - // 获取输入流 - try (InputStream inputStream = connection.getInputStream(); - FileOutputStream outputStream = new FileOutputStream(outputFilePath)) { - // 将返回的图片数据写入文件 - byte[] buffer = new byte[1024]; - int bytesRead; - while ((bytesRead = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, bytesRead); - } - ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(buffer); - MultipartFile file = new MockMultipartFile(ContentType.APPLICATION_OCTET_STREAM.toString(), byteArrayInputStream); - return ossService.uploadFile(file); - } - } - - /** * 获取房源列表 * @param req @@ -227,8 +186,10 @@ SearchHouseResourceRes searchHouseResource = new SearchHouseResourceRes(); List<SearchHouseResourceListRes> searchHouseResourceListRes = this.baseMapper.searchHouseResource(req, cityIds, districtIds, saleAmountStart, saleAmountEnd, houseModels, houseTypeIds); + // 如果有根据用户历史来搜索必看 如果没有搜索出数据 那么查询所有必看 - if (req.getDataType()!=null&&req.getDataType()==1 && (!StringUtils.hasLength(req.getDistrict())) && searchHouseResourceListRes!=null&&searchHouseResourceListRes.size()==0){ + if (req.getDataType()!=null&&req.getDataType()==1 && (!StringUtils.hasLength(req.getDistrict())) + && searchHouseResourceListRes!=null&&searchHouseResourceListRes.size()==0){ cityIds=null; districtIds=null; searchHouseResourceListRes = this.baseMapper.searchHouseResource(req, cityIds, districtIds, saleAmountStart, saleAmountEnd, houseModels, houseTypeIds); @@ -239,6 +200,27 @@ t.setHouseResource(3); } } + if (req.getUserType()==5){ + // 中介房源 + List<SearchHouseResourceListRes> collect = searchHouseResourceListRes.stream() + .filter(t -> t.getHouseResource() == 3) + .sorted(Comparator.comparing(SearchHouseResourceListRes::getInsertTime).reversed()) + .collect(Collectors.toList()); + + // 个人房源 + List<SearchHouseResourceListRes> collect1 = searchHouseResourceListRes.stream() + .filter(t -> t.getHouseResource() == 2) + .sorted(Comparator.comparing(SearchHouseResourceListRes::getInsertTime).reversed()) + .collect(Collectors.toList()); + searchHouseResourceListRes = collect; + searchHouseResourceListRes.addAll(collect1); + }else{ + List<SearchHouseResourceListRes> collect = searchHouseResourceListRes.stream() + .sorted(Comparator.comparing(SearchHouseResourceListRes::getInsertTime).reversed()) + .collect(Collectors.toList()); + searchHouseResourceListRes = collect; + } + searchHouseResource.setList(searchHouseResourceListRes); List<SearchHouseResourceListRes> searchHouseResourceListRes1 = this.baseMapper.searchHouseResource1(req, cityIds, districtIds, saleAmountStart, saleAmountEnd, houseModels, houseTypeIds); searchHouseResource.setTotal(searchHouseResourceListRes1.size()); @@ -318,6 +300,7 @@ if (houseResource.getHouseTypeId()!=null)req.setHouseTypeId(houseResource.getHouseTypeId().toString()); fillSearchHistory(req); HouseResourceInfoRes houseResourceInfoRes = new HouseResourceInfoRes(); + houseResourceInfoRes.setAge(houseResource.getAge()); houseResourceInfoRes.setDataType(houseResource.getDataType()); houseResourceInfoRes.setId(id); houseResourceInfoRes.setBuildingOrientation(houseResource.getBuildingOrientation()); @@ -410,7 +393,9 @@ List<Integer> ids = pointLocations.stream().map(PointLocation::getHouseId).collect(Collectors.toList()); if (ids.size()!= 0){ List<HouseResource> houseResources = this.selectBatchIds(ids); - List<HouseResource> collect = houseResources.stream().filter(t -> !t.getId().equals(id) && t.getAuthStatus() == 2 && t.getType() == 2 + List<HouseResource> collect = houseResources.stream() + .filter(t -> !t.getId().equals(id) + && t.getAuthStatus() == 2 && t.getType() == 2 && t.getStatus() == 1 && t.getIsDelete() == 0 && t.getDataType() == houseResource.getDataType()) .collect(Collectors.toList()); List<SearchHouseResourceListRes> list = new ArrayList<>(); @@ -420,13 +405,17 @@ searchHouseResourceListRes.setId(resource.getId()); AppUser appUser = appUserService.selectById(resource.getAppUserId()); searchHouseResourceListRes.setHouseResource(appUser.getUserType()); - searchHouseResourceListRes.setImgUrl(resource.getHousePhoto().split(",")[0]); + if(StringUtils.hasLength(resource.getHousePhoto())){ + searchHouseResourceListRes.setImgUrl(resource.getHousePhoto().split(",")[0]); + } searchHouseResourceListRes.setTitle(resource.getTitle()); searchHouseResourceListRes.setHouseArea(resource.getHouseArea()); searchHouseResourceListRes.setHouseModel(resource.getHouseModel()); Region region = regionService.selectById(houseResource.getDistrictId()); Region region1 = regionService.selectById(houseResource.getCityId()); - searchHouseResourceListRes.setAddress(region1.getName() + " > " + region.getName() + "/" + houseResource.getHouseAddress()); + if (region!=null && region1!=null){ + searchHouseResourceListRes.setAddress(region1.getName() + " > " + region.getName() + "/" + houseResource.getHouseAddress()); + } searchHouseResourceListRes.setSaleAmount(resource.getSaleAmount().doubleValue()); searchHouseResourceListRes.setElevator(resource.getElevator()); searchHouseResourceListRes.setDryingArea(resource.getDryingArea()); @@ -469,9 +458,9 @@ } @Override public ResultUtil addHouse(AddHouseReq req) { -// Integer appUserId = appUserService.getAppUser().getId(); + Integer appUserId = appUserService.getAppUser().getId(); AppUser appUser = appUserService.selectOne(new EntityWrapper<AppUser>() - .eq("id", 40) + .eq("id", appUserId) .eq("status", 1)); if (appUser!=null){ if (req.getId()==null){ @@ -483,7 +472,7 @@ if (appUser.getAuth()!=2){ // 未认证 只能能发布三条房源信息 List<HouseResource> houseResources = this.selectList(new EntityWrapper<HouseResource>() - .eq("app_user_id", 40) + .eq("app_user_id", appUserId) .eq("is_delete", 0) .eq("type", 2) ); @@ -494,22 +483,36 @@ } } HouseResource houseResource = new HouseResource(); + houseResource.setPlatform(req.getPlatform()); BeanUtils.copyProperties(req,houseResource); houseResource.setType(req.getType()); + if (StringUtils.hasLength(req.getHousePhoto())){ + houseResource.setHousePhoto(req.getHousePhoto()); + }else{ + houseResource.setHousePhoto(""); + } houseResource.setInsertTime(new Date()); houseResource.setGoodHouse(0); + houseResource.setAge(req.getAge()); houseResource.setIsDelete(0); - houseResource.setInsertUserId(40); + houseResource.setInsertUserId(appUserId); houseResource.setViewsNumber(0); houseResource.setUpdateTime(new Date()); // todo 修改回审核和上下架状态 houseResource.setStatus(1); + houseResource.setHeadImg(req.getHeadImg()); houseResource.setDataType(req.getDataType()); - houseResource.setAuthStatus(1); + houseResource.setAuthStatus(2); houseResource.setLeaseTime(req.getTime()); - houseResource.setAppUserId(40); + houseResource.setAppUserId(appUserId); houseResource.setFirmHouse(req.getFirmHouse()); + if(req.getRentalMoney()!=null){ + // 如果勾选了同时可租 + houseResource.setKeepPet(null); + houseResource.setLeaseTime(null); + houseResource.setStartTime(""); + } if (StringUtils.hasLength(req.getTime())){ if (req.getTime().contains("年")){ houseResource.setRentalDuration(2); @@ -519,85 +522,75 @@ } if (req.getType()==2){ if (req.getId()==null){ + houseResource.setAuthTime(new Date()); + houseResource.setAuthStatus(2); this.baseMapper.insert(houseResource); }else{ + houseResource.setAuthTime(new Date()); + houseResource.setAuthStatus(2); this.baseMapper.updateById(houseResource); } }else{ if (req.getId()==null){ + houseResource.setAuthTime(new Date()); + houseResource.setAuthStatus(2); this.baseMapper.insert(houseResource); }else{ + houseResource.setAuthTime(new Date()); + houseResource.setAuthStatus(2); this.baseMapper.updateById(houseResource); } } + HouseResource houseResource2 = new HouseResource(); + if(req.getRentalMoney()!=null){ + BeanUtils.copyProperties(houseResource,houseResource2); + houseResource2.setDataType(1); + houseResource2.setId(null); + houseResource2.setLeaseTime(req.getTime()); + houseResource2.setKeepPet(req.getKeepPet()); + houseResource2.setStartTime(req.getStartTime()); + this.baseMapper.insert(houseResource2); + if (req.getType()==2){ + getQRCode(houseResource2); + } + + } if (req.getType()==2 && req.getId()==null){ + if(req.getRentalMoney()!=null && houseResource2.getId()!=null){ + PointLocation pointLocation = new PointLocation(); + GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(req.getLongitude()),Double.valueOf(req.getLatitude())); + pointLocation.setGeoJsonPoint(geoJsonPoint); + pointLocation.setHouseId(houseResource2.getId()); + mongoTemplate.insert(pointLocation); + houseResource2.setCode(pointLocation.getId()); + houseResource2.setAuthStatus(2); + houseResource2.setAuthTime(new Date()); + this.baseMapper.updateById(houseResource2); + } + PointLocation pointLocation = new PointLocation(); GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(req.getLongitude()),Double.valueOf(req.getLatitude())); pointLocation.setGeoJsonPoint(geoJsonPoint); pointLocation.setHouseId(houseResource.getId()); mongoTemplate.insert(pointLocation); houseResource.setCode(pointLocation.getId()); + houseResource.setAuthStatus(2); + houseResource.setAuthTime(new Date()); this.baseMapper.updateById(houseResource); - InputStream inputStream = null; - OutputStream outputStream = null; - String accessToken = wxAppletTools.getAccessToken(); - try { - String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken; - Map<String, Object> param = new HashMap<>(); - param.put("scene","id="+houseResource.getId()); - //pageA/houseDetail - param.put("page", "pageA/houseDetail"); - param.put("check_path", false); - param.put("env_version", "trial"); - param.put("width", 200); //二维码尺寸 - param.put("is_hyaline", true); // 是否需要透明底色, is_hyaline 为true时,生成透明底色的小程序码 参数仅对小程序码生效 - param.put("auto_color", true); // 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调 参数仅对小程序码生效 - Map<String, Object> line_color = new HashMap<>(); - line_color.put("r", 0); - line_color.put("g", 0); - line_color.put("b", 0); - param.put("line_color", line_color); - System.err.println("调用生成微信URL接口传参:" + param); - MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); - HttpEntity requestEntity = new HttpEntity(param, headers); - ResponseEntity<byte[]> entity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]); - System.err.println("调用小程序生成微信永久小程序码URL接口返回结果:" + entity.getBody()); - byte[] result = entity.getBody(); - System.err.println(Base64.encodeBase64String(result)); - inputStream = new ByteArrayInputStream(result); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - // 最后上传生成的文件名 - String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + ".jpg"; - // oss中的文件夹名 - String objectName = sdf.format(new Date()) + "/" + finalFileName; - // 上传oss - String s = ossService.uploadFile2OSS(inputStream, objectName); - //获取文件的URl地址 - String imgUrl = ossService.getImgUrl(objectName); - houseResource.setQrCode(imgUrl); - this.baseMapper.updateById(houseResource); - System.err.println("看看文件路径" + imgUrl); - } catch (Exception e) { - System.err.println("调用小程序生成微信永久小程序码URL接口异常" + e); - } finally { - if (inputStream != null) { - try { - inputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if (outputStream != null) { - try { - outputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - } + getQRCode(houseResource); } if (req.getType()==2 && req.getId()!=null){ + if(req.getRentalMoney()!=null && houseResource2.getId()!=null){ + PointLocation pointLocation = new PointLocation(); + GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(req.getLongitude()),Double.valueOf(req.getLatitude())); + pointLocation.setGeoJsonPoint(geoJsonPoint); + pointLocation.setHouseId(houseResource2.getId()); + mongoTemplate.insert(pointLocation); + houseResource2.setCode(pointLocation.getId()); + houseResource2.setAuthStatus(2); + houseResource2.setAuthTime(new Date()); + this.baseMapper.updateById(houseResource2); + } HouseResource houseResource1 = this.baseMapper.selectById(req.getId()); if (!StringUtils.hasLength(houseResource1.getCode())){ PointLocation pointLocation = new PointLocation(); @@ -606,6 +599,7 @@ pointLocation.setHouseId(req.getId()); mongoTemplate.insert(pointLocation); houseResource1.setCode(pointLocation.getId()); + houseResource1.setAuthStatus(2); this.baseMapper.updateById(houseResource1); } Query query = Query.query(Criteria.where("_id").is(houseResource1.getCode())); @@ -619,11 +613,71 @@ UpdateResult updateResult = mongoTemplate.updateFirst(query, update, PointLocation.class); System.err.println(updateResult.getModifiedCount()); } + return ResultUtil.success(); } return ResultUtil.success(); } + public void getQRCode(HouseResource houseResource) { + InputStream inputStream = null; + OutputStream outputStream = null; + String accessToken = wxAppletTools.getAccessToken(); + try { + String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken; + Map<String, Object> param = new HashMap<>(); + param.put("scene","id="+houseResource.getId()); + param.put("page", "pageA/houseDetail"); + param.put("check_path", false); + param.put("env_version", "trial"); + param.put("width", 200); //二维码尺寸 + param.put("is_hyaline", true); // 是否需要透明底色, is_hyaline 为true时,生成透明底色的小程序码 参数仅对小程序码生效 + param.put("auto_color", true); // 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调 参数仅对小程序码生效 + Map<String, Object> line_color = new HashMap<>(); + line_color.put("r", 0); + line_color.put("g", 0); + line_color.put("b", 0); + param.put("line_color", line_color); + System.err.println("调用生成微信URL接口传参:" + param); + MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); + HttpEntity requestEntity = new HttpEntity(param, headers); + ResponseEntity<byte[]> entity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]); + System.err.println("调用小程序生成微信永久小程序码URL接口返回结果:" + entity.getBody()); + byte[] result = entity.getBody(); + System.err.println(Base64.encodeBase64String(result)); + inputStream = new ByteArrayInputStream(result); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + // 最后上传生成的文件名 + String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + ".jpg"; + // oss中的文件夹名 + String objectName = sdf.format(new Date()) + "/" + finalFileName; + // 上传oss + String s = ossService.uploadFile2OSS(inputStream, objectName); + //获取文件的URl地址 + String imgUrl = ossService.getImgUrl(objectName); + houseResource.setQrCode(imgUrl); + this.baseMapper.updateById(houseResource); + System.err.println("看看文件路径" + imgUrl); + } catch (Exception e) { + System.err.println("调用小程序生成微信永久小程序码URL接口异常" + e); + } finally { + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + @Override public ResultUtil confirm(Integer userType) { AppUser appUser = appUserService.getAppUser(); -- Gitblit v1.7.1