Sfoglia il codice sorgente

房源读取接口

houweiyu 4 anni fa
parent
commit
77ff2efc09

+ 11 - 0
src/main/java/fcb/project/manager/base/service/impl/TmApiHouseRecommendServiceImpl.java

@@ -59,6 +59,17 @@ public class TmApiHouseRecommendServiceImpl extends ServiceImpl<TmApiHouseRecomm
         return null;
     }
 
+    public List<TmApiHouseRecommend> getRecommendList(String sceneNum , String communicateRoomId){
+        if(StringUtils.isNotBlank(sceneNum)){
+            LambdaQueryWrapper<TmApiHouseRecommend> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+            lambdaQueryWrapper.eq(TmApiHouseRecommend::getSceneNum , sceneNum);
+            lambdaQueryWrapper.eq(TmApiHouseRecommend::getEnable , 1);
+            lambdaQueryWrapper.eq(TmApiHouseRecommend::getCommunicateRoomId , communicateRoomId);
+            return getBaseMapper().selectList(lambdaQueryWrapper);
+        }
+        return null;
+    }
+
     public int insertRecommend(TmApiHouseRecommend tmApiHouseRecommend){
         if(null == tmApiHouseRecommend){
             return -1;

+ 50 - 2
src/main/java/fcb/project/manager/core/controller/ApiFormatHouseController.java

@@ -11,6 +11,13 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.rocketmq.client.exception.MQBrokerException;
+import org.apache.rocketmq.client.exception.MQClientException;
+import org.apache.rocketmq.client.producer.DefaultMQProducer;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.common.message.Message;
+import org.apache.rocketmq.remoting.common.RemotingHelper;
+import org.apache.rocketmq.remoting.exception.RemotingException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.CollectionUtils;
@@ -19,6 +26,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.io.UnsupportedEncodingException;
 import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.Map;
@@ -37,6 +45,15 @@ public class ApiFormatHouseController {
     @Value("${4dkankan.host.url}")
     private String redirectVrUrl;
 
+    @Value("${rocketmq.consumer.group}")
+    private String rocketMqGroup;
+
+    @Value("${rocketmq.consumer.topic}")
+    private String rocketTopic;
+
+    @Value("${rocketmq.name-server}")
+    private String rocketNameServer;
+
     @Autowired
     private RedisServiceUtils redisServiceUtils;
 
@@ -97,8 +114,8 @@ public class ApiFormatHouseController {
             resultMap.put("roomId", tmApiHouseInfo.getCommunicateRoomId());
         }
 
-        //写入mq,异步落库
-
+        //写入mq,异步落库 todo:这里要改成线程安全
+        enqueueMq(tmApiHouseInfo);
 
         if(!CollectionUtils.isEmpty(resultMap)){
             return Result.success(resultMap);
@@ -107,6 +124,37 @@ public class ApiFormatHouseController {
         return Result.success("成功提交");
     }
 
+    public void enqueueMq(TmApiHouseInfo tmApiHouseInfo){
+        if(null == tmApiHouseInfo){
+            return;
+        }
+        DefaultMQProducer producer = new DefaultMQProducer(rocketMqGroup);
+        // Specify name server addresses.
+        producer.setNamesrvAddr(rocketNameServer);
+        Message message = null;
+        try {
+            message = new Message(rocketTopic , "TagA" , JSON.toJSONString(tmApiHouseInfo).getBytes(RemotingHelper.DEFAULT_CHARSET));
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        if(null != message){
+            try {
+                SendResult sendResult = producer.send(message, 5000);
+                log.info("mq发送消息[{}]完成,结果为:{}" , message.getKeys() , sendResult);
+            } catch (MQClientException e) {
+                e.printStackTrace();
+            } catch (RemotingException e) {
+                e.printStackTrace();
+            } catch (MQBrokerException e) {
+                e.printStackTrace();
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            producer.shutdown();
+        }
+
+    }
+
     private String genVrLink(TmApiHouseInfo houseInfo) {
         String terminalTypeStr = houseInfo.getTerminalType();
         String userId = "";

+ 86 - 1
src/main/java/fcb/project/manager/core/controller/ApiQueryHouseController.java

@@ -1,12 +1,97 @@
 package fcb.project.manager.core.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import fcb.project.manager.base.entity.TmApiHouseInfo;
+import fcb.project.manager.base.entity.TmApiHouseRecommend;
+import fcb.project.manager.base.service.impl.TmApiHouseInfoServiceImpl;
+import fcb.project.manager.base.service.impl.TmApiHouseRecommendServiceImpl;
+import fdage.back.sdk.base.entity.Result;
+import fdage.back.sdk.base.enums.ResultCodeEnum;
+import fdage.back.sdk.base.exception.CommonBaseException;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.Duration;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 2 * @Author: Abner
  * 3 * @Date: 2021/1/11 10:10
  * 4
  */
-
+@Log4j2
+@RestController
+@RequestMapping("api/query")
 public class ApiQueryHouseController {
 
+    @Autowired
+    private TmApiHouseInfoServiceImpl tmApiHouseInfoService;
+
+    @Autowired
+    private TmApiHouseRecommendServiceImpl tmApiHouseRecommendService;
+
+
+    @ApiOperation(value = "H5页面请求房源信息")
+    @ResponseBody
+    @GetMapping(value = "/getHouseInfo")
+    @Transactional(rollbackFor = Exception.class)
+    //TODO:这里要添加写入和读取缓存
+    public Result getHouseInfo(@RequestParam(value = "scene_code") String sceneCode,
+                               @RequestParam(value = "user_id") String userId,
+                               @RequestParam(value = "room_id") String roomId,
+                               @RequestParam(value = "terminal_type") String terminalType) {
+
+        if (!StringUtils.isNoneBlank(sceneCode , roomId)) {
+            throw new CommonBaseException(ResultCodeEnum.D3001);
+        }
+
+        log.info("上送的场景码为:{},终端类型为:{}", sceneCode, terminalType);
+        Instant stepOneStart = Instant.now();
+        Map<String, Object> result = new HashMap<>();
+        TmApiHouseInfo tmHouseInfo = tmApiHouseInfoService.getHouseBySceneAndRoomId(sceneCode , roomId);
+        if (null == tmHouseInfo) {
+            //todo:补充异常返回信息
+            throw new CommonBaseException(ResultCodeEnum.D101);
+        }
+        Instant stepOneEnd = Instant.now();
+        long stepOneDuration = Duration.between(stepOneStart , stepOneEnd).toMillis();
+        log.info("======={}=============1、捞取房源数据耗时:{}===================" , "获取房源阶段" , stepOneDuration);
+        //覆盖推荐房源字段
+        Instant stepTwoStart = Instant.now();
+        List<TmApiHouseInfo> recList = getRecommends(tmHouseInfo);
+        tmHouseInfo.setRecommendHouses(JSON.toJSONString(recList));
+        Instant stepTwoEnd = Instant.now();
+        long stepTwoDuration = Duration.between(stepTwoStart , stepTwoEnd).toMillis();
+        log.info("========{}============2、生成推荐房源数据耗时:{}===================" ,"获取房源阶段" , stepTwoDuration);
+        result.put("houseInfo", tmHouseInfo);
+        return Result.success("请求结束", result);
+    }
+
+    private List<TmApiHouseInfo> getRecommends(TmApiHouseInfo houseInfo) {
+        List<TmApiHouseInfo> houseInfoList = new ArrayList<>();
+        if (null != houseInfo) {
+            List<TmApiHouseRecommend> houseRecommendList = tmApiHouseRecommendService.getRecommendList(houseInfo.getSceneNum() , houseInfo.getCommunicateRoomId());
+            if (!CollectionUtils.isEmpty(houseRecommendList)) {
+                for (TmApiHouseRecommend recommend : houseRecommendList) {
+                    TmApiHouseInfo tmHouseInfo = tmApiHouseInfoService.getHouseBySceneAndRoomId(recommend.getSceneNum() , recommend.getCommunicateRoomId());
+                    if (null != tmHouseInfo) {
+                        houseInfoList.add(tmHouseInfo);
+                    }
+                }
+            }
+        }
+        return houseInfoList;
+    }
 
 }