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 |  548 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 494 insertions(+), 54 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 a5d177c..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
@@ -3,31 +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.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -49,10 +78,20 @@
     private ICollectionHouseResourceService collectionHouseResourceService;
     @Resource
     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
@@ -62,38 +101,72 @@
     public SearchHouseResourceRes searchHouseResource(SearchHouseResourceReq req) {
         req.setPageNum((req.getPageNum() - 1) * req.getPageSize());
         //租房处理推荐和记录历史搜索数据
-        if(req.getType() == 1){
-            fillSearchHistory(req);
-        }
-
+        fillSearchHistory(req);
         //区域
-        List<Integer> districtIds = null;
-        List<Integer> cityIds = null;
-        if(StringUtils.hasLength(req.getDistrict())){
-            cityIds = new ArrayList<>();
-            districtIds = new ArrayList<>();
-            JSONArray jsonArray = JSON.parseArray(req.getDistrict());
-            for (int i = 0; i < jsonArray.size(); i++) {
-                JSONObject jsonObject = jsonArray.getJSONObject(i);
-                Integer cityId = jsonObject.getInteger("cityId");
-                Integer districtId = jsonObject.getInteger("districtId");
-                //不限区域
-                if(0 == districtId || null == districtId){
-                    List<Region> regions = regionService.selectList(new EntityWrapper<Region>().eq("parent_id", cityId));
-                    districtIds.addAll(regions.stream().map(Region::getId).collect(Collectors.toList()));
+        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()));
+                    }
                 }
-                cityIds.add(cityId);
-                districtIds.add(districtId);
             }
         }
+        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));
+                }
+            }
+        }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<>();
+//            districtIds = new ArrayList<>();
+//            JSONArray jsonArray = JSON.parseArray(req.getDistrict());
+//            for (int i = 0; i < jsonArray.size(); i++) {
+//                JSONObject jsonObject = jsonArray.getJSONObject(i);
+//                Integer cityId = jsonObject.getInteger("cityId");
+//                Integer districtId = jsonObject.getInteger("districtId");
+//                //不限区域
+//                if(0 == districtId || null == districtId){
+//                    List<Region> regions = regionService.selectList(new EntityWrapper<Region>().eq("parent_id", cityId));
+//                    districtIds.addAll(regions.stream().map(Region::getId).collect(Collectors.toList()));
+//                }
+//                cityIds.add(cityId);
+//                districtIds.add(districtId);
+//            }
+//        }
 
         //价格范围
         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;
@@ -110,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;
     }
-
 
     /**
      * 填装历史搜索记录和修改历史搜索记录
@@ -128,7 +235,8 @@
         AppUser appUser = appUserService.getAppUser();
         if(null != appUser){
             //获取历史搜索数据
-            SearchHistoryCondition searchHistoryCondition = searchHistoryConditionService.selectOne(new EntityWrapper<SearchHistoryCondition>().eq("app_user_id", appUser.getId()));
+            SearchHistoryCondition searchHistoryCondition = searchHistoryConditionService
+                    .selectOne(new EntityWrapper<SearchHistoryCondition>().eq("app_user_id", appUser.getId()));
             if(null == searchHistoryCondition){
                 //没有历史记录,将现有记录添加进去
                 searchHistoryCondition = new SearchHistoryCondition();
@@ -144,11 +252,11 @@
                 if(ToolUtil.isEmpty(req.getDistrict()) && ToolUtil.isEmpty(req.getSaleAmount()) &&
                         ToolUtil.isEmpty(req.getHouseModel()) && ToolUtil.isEmpty(req.getElevator()) &&
                         ToolUtil.isEmpty(req.getHouseTypeId())){
-                    req.setDistrict(searchHistoryCondition.getDistrict());
-                    req.setSaleAmount(searchHistoryCondition.getPrice());
-                    req.setHouseModel(searchHistoryCondition.getHouseModels());
-                    req.setElevator(searchHistoryCondition.getElevator());
-                    req.setHouseTypeId(searchHistoryCondition.getHouseTypeIds());
+//                    req.setDistrict(searchHistoryCondition.getDistrict());
+//                    req.setSaleAmount(searchHistoryCondition.getPrice());
+//                    req.setHouseModel(searchHistoryCondition.getHouseModels());
+//                    req.setElevator(searchHistoryCondition.getElevator());
+//                    req.setHouseTypeId(searchHistoryCondition.getHouseTypeIds());
                 }else{
                     //更新历史搜索记录
                     searchHistoryCondition.setDistrict(req.getDistrict());
@@ -181,27 +289,47 @@
      */
     @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());
         houseResourceInfoRes.setRentalDuration(houseResource.getRentalDuration());
-        houseResourceInfoRes.setSaleDate(sdf.format(houseResource.getSaleDate()));
+        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());
@@ -211,7 +339,18 @@
         houseResourceInfoRes.setNickname(appUser1.getNickname());
         houseResourceInfoRes.setUserType(appUser1.getUserType());
         houseResourceInfoRes.setInsertTime(sdf.format(houseResource.getInsertTime()));
-        houseResourceInfoRes.setUpdateTime(sdf.format(houseResource.getUpdateTime()));
+        // 后台添加的
+        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()));
+        }
         houseResourceInfoRes.setCode(houseResource.getCode());
         int collectionTimes = collectionHouseResourceService.selectCount(new EntityWrapper<CollectionHouseResource>().eq("house_resource_id", id));
         houseResourceInfoRes.setCollectionTimes(collectionTimes);
@@ -224,7 +363,6 @@
         addViewsNumber(houseResource);
         return houseResourceInfoRes;
     }
-
 
     /**
      * 添加访问次数记录
@@ -245,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);
@@ -252,21 +391,31 @@
         Query query = Query.query(Criteria.where("geoJsonPoint").withinSphere(circle));
         List<PointLocation> pointLocations = mongoTemplate.find(query, PointLocation.class);
         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());
@@ -276,6 +425,11 @@
             searchHouseResourceListRes.setKeepPet(resource.getKeepPet());
             list.add(searchHouseResourceListRes);
         }
+            return list;
+        }
+
+        }
+        List<SearchHouseResourceListRes> list = new ArrayList<>();
         return list;
     }
 
@@ -288,13 +442,299 @@
     @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;
     }
 
+    @Override
+    public SearchHouseResourceRes listHouse(HouseQuery query) {
+        SearchHouseResourceRes res = new SearchHouseResourceRes();
+        res.setList(this.baseMapper.listHouse(query));
+        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("status", 1));
+        if (appUser!=null){
+            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条房源信息");
+                    }
+                }
+                }
+            }
+            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(2);
+            houseResource.setLeaseTime(req.getTime());
+            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);
+                }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==2 && appUser.getUserType()==2){
+
+        }else{
+            appUser.setChangeTime(new Date());
+        }
+        appUser.setUserType(userType);
+        appUserService.updateById(appUser);
+
+        return ResultUtil.success();
+    }
+
+    @Override
+    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);
+    }
 
 
+    public List<CollectListRes> release(UserInfoQuery query, List<Integer> collect) {
+        return this.baseMapper.release(query,collect);
+    }
 }

--
Gitblit v1.7.1