1、后端抖音、微博热搜接口实现

pull/254/head
xjs 4 years ago
parent 278f83277f
commit d9a7b8b0b3

@ -37,6 +37,10 @@ public class ApiConst {
public static final String TIANXING_TOPSEARCHBAIDU= "天行-百度热搜榜"; public static final String TIANXING_TOPSEARCHBAIDU= "天行-百度热搜榜";
public static final String TIANXING_TOPSEARCHWEIBO= "天行-微博热搜榜";
public static final String TIANXING_TOPSEARCHDOUYIN= "天行-抖音热搜榜";
@ -72,6 +76,10 @@ public class ApiConst {
public static final String TIANXING_TOPSEARCHBAIDU_URL= "http://api.tianapi.com/nethot/index"; public static final String TIANXING_TOPSEARCHBAIDU_URL= "http://api.tianapi.com/nethot/index";
public static final String TIANXING_TOPSEARCHWEIBO_URL= "http://api.tianapi.com/weibohot/index";
public static final String TIANXING_TOPSEARCHDOUYIN_URL= "http://api.tianapi.com/douyinhot/index";

@ -0,0 +1,25 @@
package com.xjs.common.client.api.tianxing;
import com.alibaba.fastjson.JSONObject;
import com.xjs.common.aop.ApiLog;
import com.xjs.common.client.factory.TianXingDYRSFeignFactory;
import com.xjs.common.client.factory.TianXingWXRSFeignFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import static com.xjs.consts.ApiConst.*;
/**
* @author xiejs
* @since 2022-01-12
*/
@FunctionalInterface
@FeignClient(name = "tianXingDYRS",url = TIANXING_TOPSEARCHDOUYIN_URL,fallbackFactory = TianXingDYRSFeignFactory.class)
public interface TianXingDYRSFeignClient {
@GetMapping
@ApiLog(name = TIANXING_TOPSEARCHDOUYIN,
url = TIANXING_TOPSEARCHDOUYIN_URL,
method = "Get")
JSONObject topSearchApi(@RequestParam("key") String key);
}

@ -0,0 +1,27 @@
package com.xjs.common.client.api.tianxing;
import com.alibaba.fastjson.JSONObject;
import com.xjs.common.aop.ApiLog;
import com.xjs.common.client.factory.TianXingWBRSFeignFactory;
import com.xjs.common.client.factory.TianXingWXRSFeignFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import static com.xjs.consts.ApiConst.*;
/**
* feign
* @author xiejs
* @since 2022-01-12
*/
@FunctionalInterface
@FeignClient(name = "tianXingWBRSF",url = TIANXING_TOPSEARCHWEIBO_URL,fallbackFactory = TianXingWBRSFeignFactory.class)
public interface TianXingWBRSFeignClient {
@GetMapping
@ApiLog(name = TIANXING_TOPSEARCHWEIBO,
url = TIANXING_TOPSEARCHWEIBO_URL,
method = "Get")
JSONObject topSearchApi(@RequestParam("key") String key);
}

@ -0,0 +1,26 @@
package com.xjs.common.client.factory;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.R;
import com.xjs.common.client.api.tianxing.TianXingDYRSFeignClient;
import lombok.extern.log4j.Log4j2;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* @author xiejs
* @since 2022-01-12
*/
@Component
@Log4j2
public class TianXingDYRSFeignFactory implements FallbackFactory<TianXingDYRSFeignClient> {
@Override
public TianXingDYRSFeignClient create(Throwable cause) {
log.error("api模块天行抖音热搜榜服务调用失败:{},执行降级处理", cause.getMessage());
return key -> {
JSONObject jsonObject = new JSONObject();
jsonObject.put("error", R.FAIL);
return jsonObject;
};
}
}

@ -0,0 +1,28 @@
package com.xjs.common.client.factory;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.R;
import com.xjs.common.client.api.tianxing.TianXingWBRSFeignClient;
import lombok.extern.log4j.Log4j2;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* feign
* @author xiejs
* @since 2022-01-12
*/
@Log4j2
@Component
public class TianXingWBRSFeignFactory implements FallbackFactory<TianXingWBRSFeignClient> {
@Override
public TianXingWBRSFeignClient create(Throwable cause) {
log.error("api模块天行微博热搜榜服务调用失败:{},执行降级处理", cause.getMessage());
return key -> {
JSONObject jsonObject = new JSONObject();
//构建一个异常json给下层接口处理
jsonObject.put("error", R.FAIL);
return jsonObject;
};
}
}

@ -1,8 +1,7 @@
package com.xjs.common.task; package com.xjs.common.task;
import com.xjs.copywriting.service.CopyWritingService; import com.xjs.copywriting.service.CopyWritingService;
import com.xjs.topsearch.service.ApiTopsearchAllnetworkService; import com.xjs.topsearch.service.*;
import com.xjs.topsearch.service.ApiTopsearchWechatService;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
@ -24,6 +23,12 @@ public class DeleteRepeatTask {
private ApiTopsearchAllnetworkService apiTopsearchAllnetworkService; private ApiTopsearchAllnetworkService apiTopsearchAllnetworkService;
@Autowired @Autowired
private ApiTopsearchWechatService apiTopsearchWechatService; private ApiTopsearchWechatService apiTopsearchWechatService;
@Autowired
private ApiTopsearchBaiduService apiTopsearchBaiduService;
@Autowired
private ApiTopsearchDouyinService apiTopsearchDouyinService;
@Autowired
private ApiTopsearchWeiboService apiTopsearchWeiboService;
/** /**
@ -40,5 +45,11 @@ public class DeleteRepeatTask {
log.info("thread id:{},定时清除全网热搜榜重复数据,重复数:{}", Thread.currentThread().getId(),allNetworkCount); log.info("thread id:{},定时清除全网热搜榜重复数据,重复数:{}", Thread.currentThread().getId(),allNetworkCount);
Integer wechatCount = apiTopsearchWechatService.deleteRepeatData(); Integer wechatCount = apiTopsearchWechatService.deleteRepeatData();
log.info("thread id:{},定时清除微信热搜榜重复数据,重复数:{}", Thread.currentThread().getId(),wechatCount); log.info("thread id:{},定时清除微信热搜榜重复数据,重复数:{}", Thread.currentThread().getId(),wechatCount);
Integer baiduCount = apiTopsearchBaiduService.deleteRepeatData();
log.info("thread id:{},定时清除百度热搜榜重复数据,重复数:{}", Thread.currentThread().getId(),baiduCount);
Integer douyinCount = apiTopsearchDouyinService.deleteRepeatData();
log.info("thread id:{},定时清除抖音热搜榜重复数据,重复数:{}", Thread.currentThread().getId(),douyinCount);
Integer weiboCount = apiTopsearchWeiboService.deleteRepeatData();
log.info("thread id:{},定时清除微博热搜榜重复数据,重复数:{}", Thread.currentThread().getId(),weiboCount);
} }
} }

@ -3,9 +3,7 @@ package com.xjs.topsearch.controller;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.security.annotation.RequiresLogin; import com.ruoyi.common.security.annotation.RequiresLogin;
import com.xjs.topsearch.domain.ApiTopsearchAllnetwork; import com.xjs.topsearch.domain.*;
import com.xjs.topsearch.domain.ApiTopsearchBaidu;
import com.xjs.topsearch.domain.ApiTopsearchWechat;
import com.xjs.topsearch.factory.TopserachFactory; import com.xjs.topsearch.factory.TopserachFactory;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -37,6 +35,10 @@ public class ApiTopSearchController {
private TopserachFactory<ApiTopsearchWechat> tianXingTopsearchWechatFactory; private TopserachFactory<ApiTopsearchWechat> tianXingTopsearchWechatFactory;
@Autowired @Autowired
private TopserachFactory<ApiTopsearchBaidu> tianXingTopsearchBaiduFactory; private TopserachFactory<ApiTopsearchBaidu> tianXingTopsearchBaiduFactory;
@Autowired
private TopserachFactory<ApiTopsearchWeibo> tianXingTopsearchWeiboFactory;
@Autowired
private TopserachFactory<ApiTopsearchDouyin> tianXingTopsearchDouyinFactory;
@GetMapping @GetMapping
@ -47,9 +49,9 @@ public class ApiTopSearchController {
//获取全网热搜 //获取全网热搜
List<ApiTopsearchAllnetwork> allnetworkList = tianXingTopsearchAllnetworkFactory.topSearchApi(); List<ApiTopsearchAllnetwork> allnetworkList = tianXingTopsearchAllnetworkFactory.topSearchApi();
//获取微博热搜 //获取微博热搜
List<ApiTopsearchWeibo> weiboList = tianXingTopsearchWeiboFactory.topSearchApi();
//获取抖音热搜 //获取抖音热搜
List<ApiTopsearchDouyin> douyinList = tianXingTopsearchDouyinFactory.topSearchApi();
//获取微信热搜 //获取微信热搜
List<ApiTopsearchWechat> wechatList = tianXingTopsearchWechatFactory.topSearchApi(); List<ApiTopsearchWechat> wechatList = tianXingTopsearchWechatFactory.topSearchApi();
//获取百度热搜 //获取百度热搜
@ -59,7 +61,8 @@ public class ApiTopSearchController {
listHashMap.put("allnetworkList", allnetworkList); listHashMap.put("allnetworkList", allnetworkList);
listHashMap.put("wechatList", wechatList); listHashMap.put("wechatList", wechatList);
listHashMap.put("baiduList", baiduList); listHashMap.put("baiduList", baiduList);
listHashMap.put("weiboList", weiboList);
listHashMap.put("douyinList", douyinList);
return AjaxResult.success(listHashMap); return AjaxResult.success(listHashMap);
} }

@ -0,0 +1,39 @@
package com.xjs.topsearch.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.common.core.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
*
* @author xiejs
* @since 2022-01-12
*/
@Data
public class ApiTopsearchDouyin implements Serializable {
private static final long serialVersionUID = 1L;
/** 主键 */
private Long id;
/** 热搜话题 */
@Excel(name = "热搜话题")
private String word;
/** 热搜标签 */
@Excel(name = "热搜标签")
private String label;
/** 热搜指数 */
@Excel(name = "热搜指数")
private Long hotindex;
@Excel(name = "创建时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
}

@ -0,0 +1,38 @@
package com.xjs.topsearch.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.common.core.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
*
* @author xiejs
* @since 2022-01-12
*/
@Data
public class ApiTopsearchWeibo implements Serializable {
private static final long serialVersionUID = 1L;
/** 主键 */
private Long id;
/** 热搜话题 */
@Excel(name = "热搜话题")
private String hotword;
/** 热搜指数 */
@Excel(name = "热搜指数")
private String hotnum;
/** 热搜标签 */
@Excel(name = "热搜标签")
private String hottag;
@Excel(name = "创建时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
}

@ -0,0 +1,80 @@
package com.xjs.topsearch.factory.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.constant.HttpStatus;
import com.xjs.common.client.api.tianxing.TianXingDYRSFeignClient;
import com.xjs.common.client.api.tianxing.TianXingWBRSFeignClient;
import com.xjs.config.TianXingProperties;
import com.xjs.topsearch.domain.ApiTopsearchDouyin;
import com.xjs.topsearch.domain.ApiTopsearchWeibo;
import com.xjs.topsearch.factory.TopserachFactory;
import com.xjs.topsearch.service.ApiTopsearchDouyinService;
import com.xjs.topsearch.service.ApiTopsearchWeiboService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
*
*
* @author xiejs
* @since 2022-01-12
*/
@Component
@Log4j2
public class TianXingTopsearchDouyinFactory implements TopserachFactory<ApiTopsearchDouyin> {
@Autowired
private TianXingProperties tianXingProperties;
@Autowired
private TianXingDYRSFeignClient tianXingDYRSFeignClient;
@Autowired
private ApiTopsearchDouyinService apiTopsearchDouyinService;
@Override
public List<ApiTopsearchDouyin> topSearchApi() {
JSONObject jsonObject = tianXingDYRSFeignClient.topSearchApi(tianXingProperties.getKey());
if (!jsonObject.containsKey("error")) {
if (jsonObject.getInteger("code") == HttpStatus.SUCCESS) {
JSONArray newslist = jsonObject.getJSONArray("newslist");
List<ApiTopsearchDouyin> collect = newslist.stream().map(arrayJson -> {
ApiTopsearchDouyin apiTopsearchDouyin = new ApiTopsearchDouyin();
JSONObject json = (JSONObject) arrayJson;
apiTopsearchDouyin.setHotindex(json.getLong("hotindex"));
Integer hotwordnum = json.getInteger("label");
switch (hotwordnum) {
case 1:
apiTopsearchDouyin.setLabel("新");
break;
case 2:
apiTopsearchDouyin.setLabel("荐");
break;
case 3:
apiTopsearchDouyin.setLabel("热");
break;
default:
apiTopsearchDouyin.setLabel("-");
}
apiTopsearchDouyin.setWord(json.getString("hotindex"));
return apiTopsearchDouyin;
}).collect(Collectors.toList());
log.info("抖音热搜批量插入成功了嘛---" + apiTopsearchDouyinService.saveBatch(collect));
return collect;
} else {
log.error("天行抖音热搜服务调用成功,但返回异常");
return new ArrayList<>();
}
} else {
log.error("天行抖音热搜服务调用失败,被降级!!");
return new ArrayList<>();
}
}
}

@ -0,0 +1,73 @@
package com.xjs.topsearch.factory.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.constant.HttpStatus;
import com.xjs.common.client.api.tianxing.TianXingWBRSFeignClient;
import com.xjs.config.TianXingProperties;
import com.xjs.topsearch.domain.ApiTopsearchWechat;
import com.xjs.topsearch.domain.ApiTopsearchWeibo;
import com.xjs.topsearch.factory.TopserachFactory;
import com.xjs.topsearch.service.ApiTopsearchWeiboService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* api
*
* @author xiejs
* @since 2022-01-12
*/
@Component
@Log4j2
public class TianXingTopsearchWeiboFactory implements TopserachFactory<ApiTopsearchWeibo> {
@Autowired
private TianXingProperties tianXingProperties;
@Autowired
private TianXingWBRSFeignClient tianXingWBRSFeignClient;
@Autowired
private ApiTopsearchWeiboService apiTopsearchWeiboService;
@Override
@Transactional
public List<ApiTopsearchWeibo> topSearchApi() {
JSONObject jsonObject = tianXingWBRSFeignClient.topSearchApi(tianXingProperties.getKey());
if (!jsonObject.containsKey("error")) {
if (jsonObject.getInteger("code") == HttpStatus.SUCCESS) {
JSONArray newslist = jsonObject.getJSONArray("newslist");
List<ApiTopsearchWeibo> collect = newslist.stream().map(arrayJson -> {
ApiTopsearchWeibo apiTopsearchWeibo = new ApiTopsearchWeibo();
JSONObject json = (JSONObject) arrayJson;
apiTopsearchWeibo.setHotword(json.getString("hotword"));
apiTopsearchWeibo.setHotnum(json.getString("hotwordnum"));
apiTopsearchWeibo.setHottag(json.getString("hottag"));
return apiTopsearchWeibo;
}).collect(Collectors.toList());
log.info("微博热搜批量插入成功了嘛---" + apiTopsearchWeiboService.saveBatch(collect));
return collect;
} else {
log.error("天行微博热搜服务调用成功,但返回异常");
return new ArrayList<>();
}
} else {
log.error("天行微博热搜服务调用失败,被降级!!");
return new ArrayList<>();
}
}
}

@ -8,4 +8,9 @@ import com.xjs.topsearch.domain.ApiTopsearchBaidu;
* @since 2022-01-11 * @since 2022-01-11
*/ */
public interface ApiTopsearchBaiduMapper extends BaseMapper<ApiTopsearchBaidu> { public interface ApiTopsearchBaiduMapper extends BaseMapper<ApiTopsearchBaidu> {
/**
*
* @return Integer
*/
Integer deleteRepeatData();
} }

@ -0,0 +1,16 @@
package com.xjs.topsearch.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xjs.topsearch.domain.ApiTopsearchDouyin;
/**
* @author xiejs
* @since 2022-01-12
*/
public interface ApiTopsearchDouyinMapper extends BaseMapper<ApiTopsearchDouyin> {
/**
*
* @return Integer
*/
Integer deleteRepeatData();
}

@ -9,7 +9,7 @@ import com.xjs.topsearch.domain.ApiTopsearchWechat;
*/ */
public interface ApiTopsearchWechatMapper extends BaseMapper<ApiTopsearchWechat> { public interface ApiTopsearchWechatMapper extends BaseMapper<ApiTopsearchWechat> {
/** /**
* *
* @return Integer * @return Integer
*/ */
Integer deleteRepeatData(); Integer deleteRepeatData();

@ -0,0 +1,16 @@
package com.xjs.topsearch.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xjs.topsearch.domain.ApiTopsearchWeibo;
/**
* @author xiejs
* @since 2022-01-12
*/
public interface ApiTopsearchWeiboMapper extends BaseMapper<ApiTopsearchWeibo> {
/**
*
* @return Integer
*/
Integer deleteRepeatData();
}

@ -8,4 +8,9 @@ import com.xjs.topsearch.domain.ApiTopsearchBaidu;
* @since 2022-01-11 * @since 2022-01-11
*/ */
public interface ApiTopsearchBaiduService extends IService<ApiTopsearchBaidu> { public interface ApiTopsearchBaiduService extends IService<ApiTopsearchBaidu> {
/**
*
* @return Integer
*/
Integer deleteRepeatData();
} }

@ -0,0 +1,17 @@
package com.xjs.topsearch.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xjs.topsearch.domain.ApiTopsearchDouyin;
/**
* @author xiejs
* @since 2022-01-12
*/
public interface ApiTopsearchDouyinService extends IService<ApiTopsearchDouyin> {
/**
*
* @return Integer
*/
Integer deleteRepeatData();
}

@ -9,7 +9,7 @@ import com.xjs.topsearch.domain.ApiTopsearchWechat;
*/ */
public interface ApiTopsearchWechatService extends IService<ApiTopsearchWechat> { public interface ApiTopsearchWechatService extends IService<ApiTopsearchWechat> {
/** /**
* *
* @return Integer * @return Integer
*/ */
Integer deleteRepeatData(); Integer deleteRepeatData();

@ -0,0 +1,16 @@
package com.xjs.topsearch.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xjs.topsearch.domain.ApiTopsearchWeibo;
/**
* @author xiejs
* @since 2022-01-12
*/
public interface ApiTopsearchWeiboService extends IService<ApiTopsearchWeibo> {
/**
*
* @return Integer
*/
Integer deleteRepeatData();
}

@ -6,10 +6,20 @@ import com.xjs.topsearch.mapper.ApiTopsearchBaiduMapper;
import com.xjs.topsearch.service.ApiTopsearchBaiduService; import com.xjs.topsearch.service.ApiTopsearchBaiduService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/** /**
* @author xiejs * @author xiejs
* @since 2022-01-11 * @since 2022-01-11
*/ */
@Service @Service
public class ApiTopsearchBaiduServiceImpl extends ServiceImpl<ApiTopsearchBaiduMapper, ApiTopsearchBaidu> implements ApiTopsearchBaiduService { public class ApiTopsearchBaiduServiceImpl extends ServiceImpl<ApiTopsearchBaiduMapper, ApiTopsearchBaidu> implements ApiTopsearchBaiduService {
@Resource
private ApiTopsearchBaiduMapper apiTopsearchBaiduMapper;
@Override
public Integer deleteRepeatData() {
return apiTopsearchBaiduMapper.deleteRepeatData();
}
} }

@ -0,0 +1,24 @@
package com.xjs.topsearch.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xjs.topsearch.domain.ApiTopsearchDouyin;
import com.xjs.topsearch.mapper.ApiTopsearchDouyinMapper;
import com.xjs.topsearch.service.ApiTopsearchDouyinService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @author xiejs
* @since 2022-01-12
*/
@Service
public class ApiTopsearchDouyinServiceImpl extends ServiceImpl<ApiTopsearchDouyinMapper, ApiTopsearchDouyin> implements ApiTopsearchDouyinService {
@Resource
private ApiTopsearchDouyinMapper apiTopsearchDouyinMapper;
@Override
public Integer deleteRepeatData() {
return apiTopsearchDouyinMapper.deleteRepeatData();
}
}

@ -0,0 +1,24 @@
package com.xjs.topsearch.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xjs.topsearch.domain.ApiTopsearchWeibo;
import com.xjs.topsearch.mapper.ApiTopsearchWeiboMapper;
import com.xjs.topsearch.service.ApiTopsearchWeiboService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @author xiejs
* @since 2022-01-12
*/
@Service
public class ApiTopsearchWeiboServiceImpl extends ServiceImpl<ApiTopsearchWeiboMapper, ApiTopsearchWeibo> implements ApiTopsearchWeiboService {
@Resource
private ApiTopsearchWeiboMapper apiTopsearchWeiboMapper;
@Override
public Integer deleteRepeatData() {
return apiTopsearchWeiboMapper.deleteRepeatData();
}
}

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xjs.topsearch.mapper.ApiTopsearchBaiduMapper">
<delete id="deleteRepeatData">
DELETE
FROM
api_topsearch_baidu
WHERE
title IN ( SELECT t.title FROM ( SELECT title FROM api_topsearch_baidu GROUP BY title HAVING count( title ) > 1 ) t )
AND id NOT IN (
SELECT
c.id
FROM
( SELECT min( id ) id FROM api_topsearch_baidu GROUP BY title HAVING count( title )> 1 ) c
)
</delete>
</mapper>

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xjs.topsearch.mapper.ApiTopsearchDouyinMapper">
<delete id="deleteRepeatData">
DELETE
FROM
api_topsearch_douyin
WHERE
word IN ( SELECT t.word FROM ( SELECT word FROM api_topsearch_douyin GROUP BY word HAVING count( word ) > 1 ) t )
AND id NOT IN (
SELECT
c.id
FROM
( SELECT min( id ) id FROM api_topsearch_douyin GROUP BY word HAVING count( word )> 1 ) c
)
</delete>
</mapper>

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xjs.topsearch.mapper.ApiTopsearchWeiboMapper">
<delete id="deleteRepeatData">
DELETE
FROM
api_topsearch_weibo
WHERE
hotword IN ( SELECT t.hotword FROM ( SELECT hotword FROM api_topsearch_weibo GROUP BY hotword HAVING count( hotword ) > 1 ) t )
AND id NOT IN (
SELECT
c.id
FROM
( SELECT min( id ) id FROM api_topsearch_weibo GROUP BY hotword HAVING count( hotword )> 1 ) c
)
</delete>
</mapper>
Loading…
Cancel
Save