44323
2024-02-22 aa8ff2d61669d0779fdacdba76e26388587b435d
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/HouseResourceService.java
@@ -3,37 +3,60 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.internal.util.codec.Base64;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.mongodb.client.result.UpdateResult;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.file.OSSService;
import com.stylefeng.guns.modular.system.dao.HouseResourceMapper;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.util.WxAppletTools;
import com.stylefeng.guns.modular.system.warpper.PointLocation;
import com.stylefeng.guns.modular.system.warpper.req.AddHouseReq;
import com.stylefeng.guns.modular.system.warpper.req.HouseQuery;
import com.stylefeng.guns.modular.system.warpper.req.SearchHouseResourceReq;
import com.stylefeng.guns.modular.system.warpper.req.UserInfoQuery;
import com.stylefeng.guns.modular.system.warpper.res.*;
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.Circle;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Metrics;
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.query.Criteria;
import org.springframework.data.mongodb.core.query.CriteriaDefinition;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.http.*;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -57,10 +80,18 @@
    private MongoTemplate mongoTemplate;
    @Autowired
    private IHousingDemandService housingDemandService;
    @Autowired
    private WxAppletTools wxAppletTools;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private IUserService userService;
    @Autowired
    private OSSService ossService;
    @Value("${wx.appletsAppid}")
    private String wxAppletsAppid;
    @Value("${wx.appletsAppSecret}")
    private String wxAppletsAppSecret;
    /**
     * 获取房源列表
     * @param req
@@ -70,12 +101,22 @@
    public SearchHouseResourceRes searchHouseResource(SearchHouseResourceReq req) {
        req.setPageNum((req.getPageNum() - 1) * req.getPageSize());
        //租房处理推荐和记录历史搜索数据
        if(req.getType() == 1){
            fillSearchHistory(req);
        }
        fillSearchHistory(req);
        //区域
        List<Integer> districtIds = new ArrayList<>();
        List<Integer> cityIds = new ArrayList<>();
        if (req.getDataType()!=null && req.getDataType()==1 && req.getUserType()==5 && req.getDistrict()==null && req.getArea()==null){
            // 如果用户有历史 并且在首页列表的时候 看他有没有历史搜索
            if (appUserService.getAppUser()!=null){
                SearchHistoryCondition app_user_id = searchHistoryConditionService.selectOne(new EntityWrapper<SearchHistoryCondition>()
                        .eq("app_user_id", appUserService.getAppUser().getId()));
                if (app_user_id!=null){
                    if(StringUtils.hasLength(app_user_id.getDistrict()) ){
                        districtIds.add(Integer.valueOf(app_user_id.getDistrict()));
                    }
                }
            }
        }
        if (req.getDistrict() != null &&(!req.getDistrict().equals("")) ){
            // 一级id
            Integer integer = Integer.valueOf(req.getDistrict());
@@ -86,6 +127,12 @@
                    cityIds.add(Integer.valueOf(s));
                }
            }
        }else if (StringUtils.hasLength(req.getArea())){
            String[] split = req.getArea().split(",");
            for (String s : split) {
                cityIds.add(Integer.valueOf(s));
            }
            // 根据用户历史搜索 推荐对应的区域
        }
//        if(StringUtils.hasLength(req.getDistrict())){
//            cityIds = new ArrayList<>();
@@ -109,9 +156,17 @@
        Double saleAmountStart = null;
        Double saleAmountEnd = null;
        if(StringUtils.hasLength(req.getSaleAmount())){
            String[] split = req.getSaleAmount().split("-");
            saleAmountStart = Double.valueOf(split[0]);
            saleAmountEnd = Double.valueOf(split[1]);
            if (req.getSaleAmount().contains("以上")){
                saleAmountStart = Double.valueOf(req.getSaleAmount().substring(0, req.getSaleAmount().length() - 2));
                saleAmountEnd = 10000000000000000000000.0;
            }else if (req.getSaleAmount().contains("以下")){
                saleAmountStart = 0.0;
                saleAmountEnd = Double.valueOf(req.getSaleAmount().substring(0, req.getSaleAmount().length() - 2));
            }else{
                String[] split = req.getSaleAmount().split("-");
                saleAmountStart = Double.valueOf(split[0]);
                saleAmountEnd = Double.valueOf(split[1]);
            }
        }
        //户型
        List<String> houseModels = null;
@@ -128,15 +183,49 @@
                houseTypeIds.add(Integer.valueOf(s));
            }
        }
        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){
            cityIds=null;
            districtIds=null;
            searchHouseResourceListRes = this.baseMapper.searchHouseResource(req, cityIds, districtIds, saleAmountStart, saleAmountEnd, houseModels, houseTypeIds);
        }
        for (SearchHouseResourceListRes t : searchHouseResourceListRes) {
            if (t.getIsManage()!=null && t.getIsManage() == 1){
                // 后台添加设置为中介房源
                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);
        Integer integer = this.baseMapper.searchHouseResourceCount(req, cityIds, districtIds, saleAmountStart, saleAmountEnd, houseModels, houseTypeIds);
        searchHouseResource.setTotal(integer);
        List<SearchHouseResourceListRes> searchHouseResourceListRes1 = this.baseMapper.searchHouseResource1(req, cityIds, districtIds, saleAmountStart, saleAmountEnd, houseModels, houseTypeIds);
        searchHouseResource.setTotal(searchHouseResourceListRes1.size());
        return searchHouseResource;
    }
    /**
     * 填装历史搜索记录和修改历史搜索记录
@@ -200,11 +289,23 @@
     */
    @Override
    public HouseResourceInfoRes getHouseResourceInfo(Integer id) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        AppUser appUser = appUserService.getAppUser();
        HouseResource houseResource = this.selectById(id);
        SearchHouseResourceReq req = new SearchHouseResourceReq();
        if (houseResource.getDistrictId()!=null)req.setDistrict(houseResource.getCityId().toString());
        if (houseResource.getSaleAmount()!=null)req.setSaleAmount(houseResource.getSaleAmount().toString());
        req.setHouseModel(houseResource.getHouseModel());
        req.setElevator(houseResource.getElevator());
        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());
        houseResourceInfoRes.setVideoPhoto(houseResource.getVideoPhoto());
        houseResourceInfoRes.setQrCode(houseResource.getQrCode());
        houseResourceInfoRes.setTitle(houseResource.getTitle());
        houseResourceInfoRes.setSaleAmount(houseResource.getSaleAmount());
        houseResourceInfoRes.setHouseModel(houseResource.getHouseModel());
@@ -212,15 +313,23 @@
        houseResourceInfoRes.setSaleDate(houseResource.getStartTime());
        houseResourceInfoRes.setHousePhoto(houseResource.getHousePhoto());
        HouseType houseType = houseTypeService.selectById(houseResource.getHouseTypeId());
        houseResourceInfoRes.setHouseType(houseType.getName());
        if (houseType!=null)houseResourceInfoRes.setHouseType(houseType.getName());
        houseResourceInfoRes.setFloor(houseResource.getFloor());
        houseResourceInfoRes.setElevator(houseResource.getElevator());
        houseResourceInfoRes.setDryingArea(houseResource.getDryingArea());
        if (houseResource.getBalcony()!=null&&houseResource.getBalcony()==1)houseResourceInfoRes.setDryingAreas("阳台");
        if (houseResource.getDryingArea()!=null&&houseResource.getDryingArea()==1)houseResourceInfoRes.setDryingAreas("天台");
        if (houseResource.getAir()!=null&&houseResource.getAir()==1)houseResourceInfoRes.setDryingAreas("无");
        houseResourceInfoRes.setHouseArea(houseResource.getHouseArea());
        houseResourceInfoRes.setKeepPet(houseResource.getKeepPet());
        Region region = regionService.selectById(houseResource.getDistrictId());
        Region region1 = regionService.selectById(houseResource.getCityId());
        houseResourceInfoRes.setAddress(region1.getName() + " > " + region.getName() + "/" + houseResource.getHouseAddress());
        if (region != null&&region1 != null){
            if (houseResource.getHouseAddress()==null){
                houseResourceInfoRes.setAddress(region1.getName() + " > " + region.getName());
            }else{
                houseResourceInfoRes.setAddress(region1.getName() + " > " + region.getName() + "/" +houseResource.getHouseAddress() );
            }
        }
        houseResourceInfoRes.setLongitude(houseResource.getLongitude());
        houseResourceInfoRes.setLatitude(houseResource.getLatitude());
        houseResourceInfoRes.setMoreIntroduction(houseResource.getMoreIntroduction());
@@ -230,6 +339,15 @@
        houseResourceInfoRes.setNickname(appUser1.getNickname());
        houseResourceInfoRes.setUserType(appUser1.getUserType());
        houseResourceInfoRes.setInsertTime(sdf.format(houseResource.getInsertTime()));
        // 后台添加的
        if (houseResource.getIsManage()!=null && houseResource.getIsManage()==1){
            User user = userService.selectById(houseResource.getInsertUserId());
            if (user!=null){
                houseResourceInfoRes.setNickname(user.getName());
                houseResourceInfoRes.setProfilePhoto(user.getAvatar());
                houseResourceInfoRes.setUserType(3);
            }
        }
        if (houseResource.getUpdateTime()!=null){
            houseResourceInfoRes.setUpdateTime(sdf.format(houseResource.getUpdateTime()));
        }
@@ -245,7 +363,6 @@
        addViewsNumber(houseResource);
        return houseResourceInfoRes;
    }
    /**
     * 添加访问次数记录
@@ -266,6 +383,7 @@
    public List<SearchHouseResourceListRes> getNearbyHouseResource(Integer id) {
        HouseResource houseResource = this.selectById(id);
        //获取中心半径5KM范围内的房源数据
        if (houseResource.getLongitude()!=null && houseResource.getLatitude()!=null){
        Double x = Double.valueOf(houseResource.getLongitude());
        Double y = Double.valueOf(houseResource.getLatitude());
        Point point = new Point(x, y);
@@ -275,20 +393,29 @@
        List<Integer> ids = pointLocations.stream().map(PointLocation::getHouseId).collect(Collectors.toList());
        if (ids.size()!= 0){
        List<HouseResource> houseResources = this.selectBatchIds(ids);
        List<SearchHouseResourceListRes> list = new ArrayList<>();
            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<>();
        //遍历解析出返回数据
        for (HouseResource resource : houseResources) {
        for (HouseResource resource : collect) {
            SearchHouseResourceListRes searchHouseResourceListRes = new SearchHouseResourceListRes();
            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());
@@ -300,9 +427,10 @@
        }
            return list;
        }
        }
        List<SearchHouseResourceListRes> list = new ArrayList<>();
        return list;
    }
@@ -314,10 +442,10 @@
    @Override
    public ContactInformationRes getContactInformation(Integer id) {
        HouseResource houseResource = this.selectById(id);
        AppUser appUser = appUserService.selectById(houseResource.getAppUserId());
        ContactInformationRes contactInformationRes = new ContactInformationRes();
        contactInformationRes.setWhatsApp(appUser.getWatchApp());
        contactInformationRes.setPhone(appUser.getPhone());
        contactInformationRes.setWatchApp(houseResource.getWatchApp());
        contactInformationRes.setPhone(houseResource.getPhone());
        contactInformationRes.setWechatQrCode(houseResource.getWechatQRCode());
        return contactInformationRes;
    }
@@ -328,87 +456,281 @@
        res.setTotal(res.getList().size());
        return res;
    }
    @Override
    public ResultUtil addHouse(AddHouseReq req) {
        Integer appUserId = appUserService.getAppUser().getId();
        AppUser appUser = appUserService.selectOne(new EntityWrapper<AppUser>()
                .eq("id", appUserId)
                .eq("audit_status", 2)
                .eq("status", 1));
        if (appUser!=null){
            if (appUser.getAgentLicenceCode()==null){
                // 未认证 只能能发布三条房源信息
                List<HouseResource> houseResources = this.selectList(new EntityWrapper<HouseResource>()
                        .eq("app_user_id", appUserId)
                        .eq("is_delete", 1)
                        .eq("status", 1)
                );
                if (houseResources.size()>=3){
                    return ResultUtil.error("中介账号未认证,只能同时上架3条房源信息");
            if (req.getId()==null){
                if (req.getType()==2){
                    if (StringUtils.hasLength(req.getWechatQRCode()))appUser.setWechatQrCode1(req.getWechatQRCode());
                    if (StringUtils.hasLength(req.getWatchApp()))appUser.setWatchApp1(req.getWatchApp());
                    if (StringUtils.hasLength(req.getPhone()))appUser.setPhone1(req.getPhone());
                    appUserService.updateById(appUser);
                if (appUser.getAuth()!=2){
                    // 未认证 只能能发布三条房源信息
                    List<HouseResource> houseResources = this.selectList(new EntityWrapper<HouseResource>()
                            .eq("app_user_id", appUserId)
                            .eq("is_delete", 0)
                            .eq("type", 2)
                    );
                    if (houseResources.size()>=3){
                        return ResultUtil.error("未认证中介或认证未通过,只能同时发布3条房源信息");
                    }
                }
            }else{
                // 已经认证 只能能发布20条房源信息
                List<HouseResource> houseResources = this.selectList(new EntityWrapper<HouseResource>()
                        .eq("app_user_id", appUserId)
                        .eq("is_delete", 1)
                        .eq("status", 1)
                );
                if (houseResources.size()>=20){
                    return ResultUtil.error("当前中介账号只能同时上架20条房源信息");
                }
            }
            HouseResource houseResource = new HouseResource();
            houseResource.setPlatform(req.getPlatform());
            BeanUtils.copyProperties(req,houseResource);
            System.err.println(houseResource);
            houseResource.setType(req.getType());
            if (StringUtils.hasLength(req.getHousePhoto())){
                houseResource.setHousePhoto(req.getHousePhoto());
            }else{
                houseResource.setHousePhoto("");
            }
            houseResource.setInsertTime(new Date());
            houseResource.setAuthStatus(1);
            houseResource.setGoodHouse(0);
            houseResource.setAge(req.getAge());
            houseResource.setIsDelete(0);
            houseResource.setInsertUserId(appUserId);
            houseResource.setViewsNumber(0);
            houseResource.setStatus(0);
            houseResource.setUpdateTime(new Date());
            // todo 修改回审核和上下架状态
            houseResource.setStatus(1);
            houseResource.setHeadImg(req.getHeadImg());
            houseResource.setDataType(req.getDataType());
            houseResource.setAuthStatus(2);
            houseResource.setLeaseTime(req.getTime());
            houseResource.setAppUserId(appUserId);
            houseResource.setFirmHouse(req.getFirmHouse());
            if (req.getTime().contains("年")){
                houseResource.setRentalDuration(2);
            }else{
                houseResource.setRentalDuration(1);
            if(req.getRentalMoney()!=null){
                // 如果勾选了同时可租
                houseResource.setKeepPet(null);
                houseResource.setLeaseTime(null);
                houseResource.setStartTime("");
            }
            this.baseMapper.insert(houseResource);
            if (StringUtils.hasLength(req.getTime())){
                if (req.getTime().contains("年")){
                    houseResource.setRentalDuration(2);
                }else{
                    houseResource.setRentalDuration(1);
                }
            }
            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);
                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();
                    GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(req.getLongitude()),Double.valueOf(req.getLatitude()));
                    pointLocation.setGeoJsonPoint(geoJsonPoint);
                    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()));
                PointLocation pointLocation = new PointLocation();
                pointLocation.setId(houseResource1.getCode());
                pointLocation.setHouseId(houseResource.getId());
                GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(req.getLongitude()),Double.valueOf(req.getLatitude()));
                pointLocation.setGeoJsonPoint(geoJsonPoint);
                org.bson.Document document = (org.bson.Document)mongoTemplate.getConverter() .convertToMongoType(pointLocation);
                Update update = Update.fromDocument (document);
                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();
        if (userType == 3){
            // 需要下架所有个人房源和求房源信息
            List<HouseResource> list = this.selectList(new EntityWrapper<HouseResource>()
                    .eq("app_user_id", appUser.getId()));
            for (HouseResource houseResource : list) {
                houseResource.setStatus(0);
                this.baseMapper.updateById(houseResource);
            }
            List<HousingDemand> list2 = housingDemandService.selectList(new EntityWrapper<HousingDemand>()
                    .eq("app_user_id", appUser.getId()));
            for (HousingDemand housingDemand : list2) {
                housingDemand.setStatus(0);
                housingDemandService.updateById(housingDemand);
            }
//            housingDemandService.updateBatchById(list2);
        if (userType==2 && appUser.getUserType()==2){
        }else{
            appUser.setChangeTime(new Date());
        }
        appUser.setUserType(userType);
        appUserService.updateById(appUser);
        return ResultUtil.success();
    }
    @Override
    public List<CollectListRes> collect(List<Integer> ids) {
      return this.baseMapper.collect(ids);
    public List<CollectListRes> collect(Integer id) {
      return this.baseMapper.collect(id);
    }
    @Override
    public ResultUtil<Integer> getSurplusPushNumber1() {
        AppUser appUser = appUserService.getAppUser();
        // 判断这个人是什么身份
        if (appUser.getUserType()==2){
            // 最多只能发布三条房源信息
            int size = this.baseMapper.selectList(new EntityWrapper<HouseResource>()
                    .eq("app_user_id", appUser.getId())
                    .eq("is_delete", 0)
                    .eq("type",2)
            ).size();
            if (3-size<0){
                return ResultUtil.success(0);
            }
            return ResultUtil.success(3-size);
        }
        if (appUser.getUserType()==3){
            // 如果是中介 判断他是否认证成功
            if (appUser.getAuth()==2){
                return ResultUtil.success(99999);
            }else{
                // 如果是中介但是还未认证 最多只能上架三条
                int size = this.baseMapper.selectList(new EntityWrapper<HouseResource>()
                        .eq("app_user_id", appUser.getId())
                        .eq("is_delete", 0)
                        .eq("type",2)
                ).size();
                if (3-size<0){
                    return ResultUtil.success(0);
                }
                return ResultUtil.success(3-size);
            }
        }
        return ResultUtil.success(0);
    }