diff --git a/ruoyi-ui/src/api/business/webmagic/weixinsougou/weixinsougou.js b/ruoyi-ui/src/api/business/webmagic/weixinsougou/weixinsougou.js new file mode 100644 index 00000000..08c4a37f --- /dev/null +++ b/ruoyi-ui/src/api/business/webmagic/weixinsougou/weixinsougou.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询爬虫微信搜狗搜索列表 +export function listWeixinsougou(query) { + return request({ + url: '/webmagic/weixin_sougou/list', + method: 'get', + params: query + }) +} + +// 删除爬虫微信搜狗搜索 +export function delWeixinsougou(id) { + return request({ + url: '/webmagic/weixin_sougou/' + id, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/layout/mixin/PickerOptions.js b/ruoyi-ui/src/layout/mixin/PickerOptions.js index 209a656c..c4cf2c92 100644 --- a/ruoyi-ui/src/layout/mixin/PickerOptions.js +++ b/ruoyi-ui/src/layout/mixin/PickerOptions.js @@ -25,6 +25,7 @@ export const pickerOptions = { onClick(picker) { const end = new Date(); const start = new Date(); + end.setTime(start.getTime()+3600 * 1000 * 24) start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); picker.$emit('pick', [start, end]); } @@ -33,6 +34,7 @@ export const pickerOptions = { onClick(picker) { const end = new Date(); const start = new Date(); + end.setTime(start.getTime()+3600 * 1000 * 24) start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); picker.$emit('pick', [start, end]); } @@ -41,9 +43,28 @@ export const pickerOptions = { onClick(picker) { const end = new Date(); const start = new Date(); + end.setTime(start.getTime()+3600 * 1000 * 24) start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); picker.$emit('pick', [start, end]); } + },{ + text: '最近半年', + onClick(picker) { + const end = new Date(); + const start = new Date(); + end.setTime(start.getTime()+3600 * 1000 * 24) + start.setTime(start.getTime() - 3600 * 1000 * 24 * 183); + picker.$emit('pick', [start, end]); + } + },{ + text: '最近一年', + onClick(picker) { + const end = new Date(); + const start = new Date(); + end.setTime(start.getTime()+3600 * 1000 * 24) + start.setTime(start.getTime() - 3600 * 1000 * 24 * 365); + picker.$emit('pick', [start, end]); + } }] }, } diff --git a/ruoyi-ui/src/views/business/webmagic/weixinsougou/index.vue b/ruoyi-ui/src/views/business/webmagic/weixinsougou/index.vue new file mode 100644 index 00000000..81852972 --- /dev/null +++ b/ruoyi-ui/src/views/business/webmagic/weixinsougou/index.vue @@ -0,0 +1,224 @@ + + + diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/entity/BaseEntity.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/entity/BaseEntity.java new file mode 100644 index 00000000..592d101c --- /dev/null +++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/entity/BaseEntity.java @@ -0,0 +1,31 @@ +package com.xjs.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.xjs.validation.group.SelectGroup; +import lombok.Data; + +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * 通用参数 + * @author xiejs + * @since 2022-02-22 + */ +@Data +public class BaseEntity { + + /** + * 通用查询条件 + */ + @TableField(exist = false) + @Size(max = 100, message = "请控制长度在100字符", groups = { SelectGroup.class}) + private String condition; + + /** + * 查询条件的结束时间 + */ + @TableField(exist = false) + private Date endCreateTime; + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/ApiAWord.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/ApiAWord.java index 2818f22a..5455173a 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/ApiAWord.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/ApiAWord.java @@ -34,7 +34,7 @@ public class ApiAWord implements Serializable { /** 句子内容 */ @Excel(name = "句子内容") - @Size(max = 255, message = "请控制句子内容长度在255字符", groups = { SelectGroup.class}) + @Size(max = 100, message = "请控制句子内容长度在100字符", groups = { SelectGroup.class}) private String content; /** 来源 */ @@ -44,7 +44,7 @@ public class ApiAWord implements Serializable { /** 释义 */ @Excel(name = "释义") - @Size(max = 255, message = "请控制释义长度在255字符", groups = { SelectGroup.class}) + @Size(max = 100, message = "请控制释义长度在100字符", groups = { SelectGroup.class}) private String note; /** 音频地址 */ diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/oneenglish/domain/ApiEnglish.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/oneenglish/domain/ApiEnglish.java index 93fdfe6d..b826f13b 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/oneenglish/domain/ApiEnglish.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/oneenglish/domain/ApiEnglish.java @@ -29,14 +29,14 @@ public class ApiEnglish implements Serializable { * 英文 */ @Excel(name = "英文") - @Size(max = 255, message = "请控制英文长度在255字符", groups = { SelectGroup.class}) + @Size(max = 100, message = "请控制英文长度在100字符", groups = { SelectGroup.class}) private String en; /** * 中文 */ @Excel(name = "中文") - @Size(max = 255, message = "请控制中文长度在255字符", groups = { SelectGroup.class}) + @Size(max = 100, message = "请控制中文长度在100字符", groups = { SelectGroup.class}) private String zh; diff --git a/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/controller/WeiXinSouGouController.java b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/controller/WeiXinSouGouController.java index e0b0df23..3799274c 100644 --- a/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/controller/WeiXinSouGouController.java +++ b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/controller/WeiXinSouGouController.java @@ -1,26 +1,56 @@ package com.xjs.weixin.controller; +import com.ejlchina.searcher.SearchResult; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.PageDomain; +import com.ruoyi.common.core.web.page.TableSupport; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.xjs.validation.group.SelectGroup; +import com.xjs.web.MyBaseController; +import com.xjs.weixin.pojo.WeiXinSouGou; +import com.xjs.weixin.service.WeiXinSouGouService; import com.xjs.weixin.task.WeiXinSouGouTask; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; /** * 微信搜狗controller + * * @author xiejs * @since 2022-02-22 */ @RestController @RequestMapping("weixin_sougou") @Api(tags = "爬虫模块-微信搜狗") -public class WeiXinSouGouController { +public class WeiXinSouGouController extends MyBaseController { @Autowired private WeiXinSouGouTask weiXinSouGouTask; + @Autowired + private WeiXinSouGouService weiXinSouGouService; + + + /** + * 查询爬虫微信搜狗搜索列表 + */ + @RequiresPermissions("webmagic:weixinsougou:list") + @GetMapping("/list") + public AjaxResult list(@Validated({SelectGroup.class}) WeiXinSouGou weiXinSouGou) { + //startPage(); + PageDomain pageDomain = TableSupport.buildPageRequest(); + SearchResult list = weiXinSouGouService.selectWeiXinSouGouList(weiXinSouGou, pageDomain); + return AjaxResult.success(list); + } @@ -32,4 +62,29 @@ public class WeiXinSouGouController { return R.ok(count); } + + //-------------------------代码生成-------------------------------- + + /** + * 导出爬虫微信搜狗搜索列表 + */ + @RequiresPermissions("webmagic:weixinsougou:export") + @Log(title = "微信搜狗", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, WeiXinSouGou weiXinSouGou) { + List list = weiXinSouGouService.selectWeiXinSouGouList(weiXinSouGou); + ExcelUtil util = new ExcelUtil<>(WeiXinSouGou.class); + util.exportExcel(response, list, "爬虫微信搜狗搜索数据"); + } + + /** + * 删除爬虫微信搜狗搜索 + */ + @RequiresPermissions("webmagic:weixinsougou:remove") + @Log(title = "爬虫微信搜狗搜索", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(weiXinSouGouService.deleteWeiXinSouGouByIds(ids)); + } + } diff --git a/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/mapper/WeiXinSouGouMapper.java b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/mapper/WeiXinSouGouMapper.java index b7a27812..af62b57e 100644 --- a/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/mapper/WeiXinSouGouMapper.java +++ b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/mapper/WeiXinSouGouMapper.java @@ -3,6 +3,8 @@ package com.xjs.weixin.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xjs.weixin.pojo.WeiXinSouGou; +import java.util.List; + /** * 微信搜狗mapper * @author xiejs @@ -15,4 +17,33 @@ public interface WeiXinSouGouMapper extends BaseMapper { * @return int */ int deleteRepeatData(); + + + //----------------------------代码生成----------------------------- + + + + /** + * 查询爬虫微信搜狗搜索列表 + * + * @param weiXinSouGou 爬虫微信搜狗搜索 + * @return 爬虫微信搜狗搜索集合 + */ + public List selectWeiXinSouGouList(WeiXinSouGou weiXinSouGou); + + /** + * 删除爬虫微信搜狗搜索 + * + * @param id 爬虫微信搜狗搜索主键 + * @return 结果 + */ + public int deleteWeiXinSouGouById(Long id); + + /** + * 批量删除爬虫微信搜狗搜索 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteWeiXinSouGouByIds(Long[] ids); } diff --git a/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/pojo/WeiXinSouGou.java b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/pojo/WeiXinSouGou.java index 278b2068..192c7e86 100644 --- a/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/pojo/WeiXinSouGou.java +++ b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/pojo/WeiXinSouGou.java @@ -3,10 +3,16 @@ package com.xjs.weixin.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.ejlchina.searcher.bean.DbField; +import com.ejlchina.searcher.bean.SearchBean; import com.ruoyi.common.core.annotation.Excel; +import com.xjs.entity.BaseEntity; +import com.xjs.validation.group.SelectGroup; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import javax.validation.constraints.Size; import java.io.Serializable; import java.util.Date; @@ -16,36 +22,51 @@ import java.util.Date; * @since 2022-02-22 */ @Data +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("webmagic_weixin_sougou") -public class WeiXinSouGou implements Serializable { +@SearchBean( + tables = "webmagic_weixin_sougou" +) +public class WeiXinSouGou extends BaseEntity implements Serializable { private static final long serialVersionUID = 1L; /** 主键id */ + @DbField("id") private Long id; /** 文章标题 */ @Excel(name = "文章标题") + @DbField("title") + @Size(max = 100, message = "请控制文章标题长度在100字符", groups = { SelectGroup.class}) private String title; /** 简略的内容 */ @Excel(name = "简略的内容") + @DbField("content") + @Size(max = 100, message = "请控制简略的内容长度在100字符", groups = { SelectGroup.class}) private String content; /** 文章来源 */ @Excel(name = "文章来源") + @DbField("source") + @Size(max = 20, message = "请控制文章来源长度在20字符", groups = { SelectGroup.class}) private String source; /** 文章的链接 */ @Excel(name = "文章的链接") + @DbField("url") private String url; /** 图片的链接 */ @Excel(name = "图片的链接") + @DbField("img_url") private String imgUrl; @Excel(name = "创建时间",dateFormat = "yyyy-MM-dd HH:mm:ss") @TableField(fill = FieldFill.INSERT) + @DbField("create_time") private Date createTime; + } diff --git a/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/service/WeiXinSouGouService.java b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/service/WeiXinSouGouService.java index a5fd4706..2b7081a6 100644 --- a/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/service/WeiXinSouGouService.java +++ b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/service/WeiXinSouGouService.java @@ -1,8 +1,12 @@ package com.xjs.weixin.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ejlchina.searcher.SearchResult; +import com.ruoyi.common.core.web.page.PageDomain; import com.xjs.weixin.pojo.WeiXinSouGou; +import java.util.List; + /** * 微信搜狗service接口 * @author xiejs @@ -15,4 +19,38 @@ public interface WeiXinSouGouService extends IService { * @return int */ int deleteRepeatData(); + + /** + * BeanSearcher 分页条件查询 + * @param weiXinSouGou 实体类 + * @param pageDomain 分页参数 + * @return SearchResult + */ + SearchResult selectWeiXinSouGouList(WeiXinSouGou weiXinSouGou, PageDomain pageDomain); + + //------------------------代码生成----------------------------- + + /** + * 查询爬虫微信搜狗搜索列表 + * + * @param weiXinSouGou 爬虫微信搜狗搜索 + * @return 爬虫微信搜狗搜索集合 + */ + List selectWeiXinSouGouList(WeiXinSouGou weiXinSouGou); + + /** + * 批量删除爬虫微信搜狗搜索 + * + * @param ids 需要删除的爬虫微信搜狗搜索主键集合 + * @return 结果 + */ + int deleteWeiXinSouGouByIds(Long[] ids); + + /** + * 删除爬虫微信搜狗搜索信息 + * + * @param id 爬虫微信搜狗搜索主键 + * @return 结果 + */ + int deleteWeiXinSouGouById(Long id); } diff --git a/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/service/impl/WeiXinSouGouServiceImpl.java b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/service/impl/WeiXinSouGouServiceImpl.java index f0920a08..a13f67ac 100644 --- a/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/service/impl/WeiXinSouGouServiceImpl.java +++ b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/weixin/service/impl/WeiXinSouGouServiceImpl.java @@ -1,15 +1,23 @@ package com.xjs.weixin.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ejlchina.searcher.BeanSearcher; +import com.ejlchina.searcher.SearchResult; +import com.ejlchina.searcher.util.MapUtils; +import com.ruoyi.common.core.web.page.PageDomain; import com.xjs.weixin.mapper.WeiXinSouGouMapper; import com.xjs.weixin.pojo.WeiXinSouGou; import com.xjs.weixin.service.WeiXinSouGouService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; +import java.util.Map; /** * 微信搜狗service实现 + * * @author xiejs * @since 2022-02-22 */ @@ -19,8 +27,69 @@ public class WeiXinSouGouServiceImpl extends ServiceImpl selectWeiXinSouGouList(WeiXinSouGou weiXinSouGou, PageDomain pageDomain) { + + Map params = MapUtils.builder() + .page(pageDomain.getPageNum()-1, pageDomain.getPageSize()) + .field(WeiXinSouGou::getTitle,weiXinSouGou.getTitle()) + .op("ct")//构建模糊查询 ct: 包含 + .field(WeiXinSouGou::getContent,weiXinSouGou.getContent()) + .op("ct") + .field(WeiXinSouGou::getSource,weiXinSouGou.getSource()) + .op("ct") + .field(WeiXinSouGou::getCreateTime,weiXinSouGou.getCreateTime(),weiXinSouGou.getEndCreateTime()) + .op("bt") + .orderBy(WeiXinSouGou::getCreateTime,pageDomain.getIsAsc()) + .build(); + + return beanSearcher.search(WeiXinSouGou.class, params); + + } + + @Override public int deleteRepeatData() { return weiXinSouGouMapper.deleteRepeatData(); } + + + //------------------------------代码生成-------------------------------- + + /** + * 查询爬虫微信搜狗搜索列表 + * + * @param weiXinSouGou 爬虫微信搜狗搜索 + * @return 爬虫微信搜狗搜索 + */ + @Override + public List selectWeiXinSouGouList(WeiXinSouGou weiXinSouGou) { + return weiXinSouGouMapper.selectWeiXinSouGouList(weiXinSouGou); + } + + /** + * 批量删除爬虫微信搜狗搜索 + * + * @param ids 需要删除的爬虫微信搜狗搜索主键 + * @return 结果 + */ + @Override + public int deleteWeiXinSouGouByIds(Long[] ids) { + return weiXinSouGouMapper.deleteWeiXinSouGouByIds(ids); + } + + /** + * 删除爬虫微信搜狗搜索信息 + * + * @param id 爬虫微信搜狗搜索主键 + * @return 结果 + */ + @Override + public int deleteWeiXinSouGouById(Long id) { + return weiXinSouGouMapper.deleteWeiXinSouGouById(id); + } } diff --git a/xjs-business/xjs-business-webmagic/src/main/resources/logback.xml b/xjs-business/xjs-business-webmagic/src/main/resources/logback.xml index baf9d85f..3acadcd2 100644 --- a/xjs-business/xjs-business-webmagic/src/main/resources/logback.xml +++ b/xjs-business/xjs-business-webmagic/src/main/resources/logback.xml @@ -64,6 +64,11 @@ + + + + + diff --git a/xjs-business/xjs-business-webmagic/src/main/resources/mapper/webmagic/WeiXinSouGouMapper.xml b/xjs-business/xjs-business-webmagic/src/main/resources/mapper/webmagic/WeiXinSouGouMapper.xml index 5e1ed5d5..e9397b87 100644 --- a/xjs-business/xjs-business-webmagic/src/main/resources/mapper/webmagic/WeiXinSouGouMapper.xml +++ b/xjs-business/xjs-business-webmagic/src/main/resources/mapper/webmagic/WeiXinSouGouMapper.xml @@ -5,6 +5,43 @@ + + + + + + + + + + + + select id, title, content, source, url, img_url, create_time from webmagic_weixin_sougou + + + + + + delete from webmagic_weixin_sougou where id = #{id} + + + + delete from webmagic_weixin_sougou where id in + + #{id} + + + + + delete from webmagic_weixin_sougou where id not in ( SELECT