| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (req.getDistrict() != null &&(!req.getDistrict().equals("")) ){ |
| | | // 一级id |
| | | Integer integer = Integer.valueOf(req.getDistrict()); |
| | |
| | | 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); |
| | |
| | | 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()); |
| | |
| | | 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()); |
| | |
| | | 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<>(); |
| | |
| | | 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()); |
| | |
| | | } |
| | | } |
| | | 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(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(appUserService.getAppUser().getId()); |
| | | 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); |
| | |
| | | } |
| | | 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/cgi-bin/wxaapp/createwxaqrcode?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 |
| | | 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(); |
| | |
| | | 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())); |
| | |
| | | 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(); |