diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterController.java index 885db14e1e20659ffd15a64f11ad645f34e52157..13022c407a8b837a9c6e26ae52058c5d9615a204 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterController.java @@ -5,22 +5,19 @@ import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.common.enums.MediaType; import com.linkwechat.common.utils.SnowFlakeUtil; import com.linkwechat.common.utils.StringUtils; -import com.linkwechat.wecom.domain.WeMaterial; import com.linkwechat.wecom.domain.WePoster; -import com.linkwechat.wecom.domain.WePosterFont; import com.linkwechat.wecom.domain.WePosterSubassembly; import com.linkwechat.wecom.service.IWePosterFontService; import com.linkwechat.wecom.service.IWePosterService; import com.linkwechat.wecom.service.IWePosterSubassemblyService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import java.awt.*; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -46,8 +43,9 @@ public class WePosterController extends BaseController { @PostMapping(value = "insert") @ApiOperation("创建海报") + @PreAuthorize("@ss.hasAnyPermi('wecom:poster:insert')") @Transactional(rollbackFor = RuntimeException.class) - public AjaxResult insert(@RequestBody WePoster poster){ + public AjaxResult insert(@RequestBody WePoster poster) { wePosterService.generateSimpleImg(poster); poster.setId(SnowFlakeUtil.nextId()); poster.setDelFlag(0); @@ -68,37 +66,38 @@ public class WePosterController extends BaseController { @PutMapping(value = "update") @ApiOperation("修改海报") + @PreAuthorize("@ss.hasAnyPermi('wecom:poster:update')") @Transactional(rollbackFor = RuntimeException.class) - public AjaxResult update(@RequestBody WePoster poster){ - if(poster.getId() == null){ + public AjaxResult update(@RequestBody WePoster poster) { + if (poster.getId() == null) { return AjaxResult.error("id为空"); } poster.setMediaType(null); wePosterService.generateSimpleImg(poster); wePosterService.saveOrUpdate(poster); - List posterSubassemblyList = wePosterSubassemblyService.lambdaQuery().eq(WePosterSubassembly::getPosterId,poster.getId()).eq(WePosterSubassembly::getDelFlag,1).list(); - Map posterSubassemblyMap = posterSubassemblyList.stream().collect(Collectors.toMap(WePosterSubassembly::getId,p->p)); + List posterSubassemblyList = wePosterSubassemblyService.lambdaQuery().eq(WePosterSubassembly::getPosterId, poster.getId()).eq(WePosterSubassembly::getDelFlag, 1).list(); + Map posterSubassemblyMap = posterSubassemblyList.stream().collect(Collectors.toMap(WePosterSubassembly::getId, p -> p)); List insertList = new ArrayList<>(); List updateList = new ArrayList<>(); poster.getPosterSubassemblyList().forEach(wePosterSubassembly -> { - if(wePosterSubassembly.getId() == null){ + if (wePosterSubassembly.getId() == null) { wePosterSubassembly.setId(SnowFlakeUtil.nextId()); wePosterSubassembly.setPosterId(poster.getId()); wePosterSubassembly.setDelFlag(0); insertList.add(wePosterSubassembly); - }else { + } else { posterSubassemblyMap.remove(wePosterSubassembly.getId()); updateList.add(wePosterSubassembly); } }); - if(!CollectionUtils.isEmpty(insertList)) { + if (!CollectionUtils.isEmpty(insertList)) { wePosterSubassemblyService.saveBatch(insertList); } - if(!CollectionUtils.isEmpty(updateList)) { + if (!CollectionUtils.isEmpty(updateList)) { wePosterSubassemblyService.updateBatchById(updateList); } List deleteList = new ArrayList<>(posterSubassemblyMap.values()); - if(!CollectionUtils.isEmpty(deleteList)){ + if (!CollectionUtils.isEmpty(deleteList)) { deleteList.forEach(wePosterSubassembly -> wePosterSubassembly.setDelFlag(1)); wePosterSubassemblyService.updateBatchById(deleteList); } @@ -118,19 +117,21 @@ public class WePosterController extends BaseController { }*/ @GetMapping(value = "entity/{id}") + @PreAuthorize("@ss.hasAnyPermi('wecom:poster:entity')") @ApiOperation("查询海报详情") - public AjaxResult entity(@PathVariable Long id){ + public AjaxResult entity(@PathVariable Long id) { return AjaxResult.success(wePosterService.selectOne(id)); } @GetMapping(value = "page") @ApiOperation("分页查询海报") - public AjaxResult page(Long categoryId,String name){ + @PreAuthorize("@ss.hasAnyPermi('wecom:poster:page')") + public AjaxResult page(Long categoryId, String name) { startPage(); List fontList = wePosterService.lambdaQuery() - .eq(WePoster::getDelFlag,0) - .eq(categoryId != null,WePoster::getCategoryId,categoryId) - .like(StringUtils.isNotBlank(name),WePoster::getTitle,name) + .eq(WePoster::getDelFlag, 0) + .eq(categoryId != null, WePoster::getCategoryId, categoryId) + .like(StringUtils.isNotBlank(name), WePoster::getTitle, name) .orderByDesc(WePoster::getCreateTime) .list(); return AjaxResult.success(getDataTable(fontList)); @@ -138,14 +139,15 @@ public class WePosterController extends BaseController { @DeleteMapping(value = "delete/{id}") @ApiOperation(value = "删除海报") + @PreAuthorize("@ss.hasAnyPermi('wecom:poster:delete')") @Transactional(rollbackFor = RuntimeException.class) - public AjaxResult deletePosterFont(@PathVariable Long id){ - wePosterService.lambdaUpdate().set(WePoster::getDelFlag,1).eq(WePoster::getId,id); - wePosterSubassemblyService.lambdaUpdate().set(WePosterSubassembly::getDelFlag,1).eq(WePosterSubassembly::getPosterId,id); + public AjaxResult deletePosterFont(@PathVariable Long id) { + wePosterService.update( + wePosterService.lambdaUpdate().set(WePoster::getDelFlag, 1).eq(WePoster::getId, id)); + wePosterSubassemblyService.update( + wePosterSubassemblyService.lambdaUpdate().set(WePosterSubassembly::getDelFlag, 1).eq(WePosterSubassembly::getPosterId, id)); return AjaxResult.success("删除成功"); } - - } diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterFontController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterFontController.java index f38522e1807fceabcda7e6d3b4272f8224a8eaeb..28d691e5e075680fa411c9743b1bf925823008db 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterFontController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterFontController.java @@ -4,7 +4,6 @@ import com.linkwechat.common.core.controller.BaseController; import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.common.enums.MediaType; import com.linkwechat.common.utils.SnowFlakeUtil; -import com.linkwechat.web.controller.common.CommonController; import com.linkwechat.wecom.domain.WePosterFont; import com.linkwechat.wecom.service.IWePosterFontService; import io.swagger.annotations.Api; @@ -30,7 +29,7 @@ public class WePosterFontController extends BaseController { @PostMapping(value = "posterFont") @ApiOperation("创建海报字体") @Transactional(rollbackFor = RuntimeException.class) - public AjaxResult insertPosterFont(@RequestBody WePosterFont posterFont){ + public AjaxResult insertPosterFont(@RequestBody WePosterFont posterFont) { posterFont.setId(SnowFlakeUtil.nextId()); posterFont.setDelFlag(0); posterFont.setMediaType(MediaType.POSTER_FONT.getType()); @@ -42,8 +41,8 @@ public class WePosterFontController extends BaseController { @PutMapping(value = "posterFont") @ApiOperation("修改海报字体") @Transactional(rollbackFor = RuntimeException.class) - public AjaxResult updatePosterFont(@RequestBody WePosterFont posterFont){ - if(posterFont.getId() == null){ + public AjaxResult updatePosterFont(@RequestBody WePosterFont posterFont) { + if (posterFont.getId() == null) { return AjaxResult.error("id为空"); } posterFont.setMediaType(null); @@ -53,9 +52,9 @@ public class WePosterFontController extends BaseController { @GetMapping(value = "posterFontList") @ApiOperation("列表查询海报字体") - public AjaxResult selectPosterFontList(){ + public AjaxResult selectPosterFontList() { List fontList = wePosterFontService.lambdaQuery() - .eq(WePosterFont::getDelFlag,0) + .eq(WePosterFont::getDelFlag, 0) .orderByDesc(WePosterFont::getOrder) .orderByDesc(WePosterFont::getCreateTime) .list(); @@ -64,10 +63,10 @@ public class WePosterFontController extends BaseController { @GetMapping(value = "posterFontPage") @ApiOperation("分页查询海报字体") - public AjaxResult selectPosterFontPage(){ + public AjaxResult selectPosterFontPage() { startPage(); List fontList = wePosterFontService.lambdaQuery() - .eq(WePosterFont::getDelFlag,0) + .eq(WePosterFont::getDelFlag, 0) .orderByDesc(WePosterFont::getOrder) .orderByDesc(WePosterFont::getCreateTime) .list(); @@ -77,11 +76,11 @@ public class WePosterFontController extends BaseController { @DeleteMapping(value = "posterFont/{id}") @ApiOperation("删除海报字体") @Transactional(rollbackFor = RuntimeException.class) - public AjaxResult deletePosterFont(@PathVariable Long id){ - wePosterFontService.lambdaUpdate().set(WePosterFont::getDelFlag,1).eq(WePosterFont::getId,id); + public AjaxResult deletePosterFont(@PathVariable Long id) { + wePosterFontService.update( + wePosterFontService.lambdaUpdate().set(WePosterFont::getDelFlag, 1).eq(WePosterFont::getId, id)); return AjaxResult.success("删除成功"); } - } diff --git a/linkwe-common/src/main/java/com/linkwechat/common/core/elasticsearch/ElasticSearch.java b/linkwe-common/src/main/java/com/linkwechat/common/core/elasticsearch/ElasticSearch.java index 7ad7c6e39b4345e23220a433f6091b58fd008f7e..523d0738ca73dab3e0712cb40dcd7db89a2151b9 100644 --- a/linkwe-common/src/main/java/com/linkwechat/common/core/elasticsearch/ElasticSearch.java +++ b/linkwe-common/src/main/java/com/linkwechat/common/core/elasticsearch/ElasticSearch.java @@ -216,7 +216,7 @@ public class ElasticSearch { */ public void insertBatchAsync(String idxName, List list, List>> consumers) { BulkRequest request = new BulkRequest(); - list.forEach(item -> request.add(new IndexRequest(idxName, "_doc").id(item.getString("msgid")) + list.parallelStream().forEach(item -> request.add(new IndexRequest(idxName, "_doc").id(item.getString("msgid")) .source(item, XContentType.JSON))); try { restHighLevelClient.bulkAsync(request, RequestOptions.DEFAULT, getActionListener(list, consumers)); diff --git a/linkwe-common/src/main/java/com/linkwechat/common/utils/img/NetFileUtils.java b/linkwe-common/src/main/java/com/linkwechat/common/utils/img/NetFileUtils.java index 547dfe0d5e00d8328bfb7a0dbeb6ecee7dfe4766..f8ceee1d830fd7b9304db063af8dc73fae011a17 100644 --- a/linkwe-common/src/main/java/com/linkwechat/common/utils/img/NetFileUtils.java +++ b/linkwe-common/src/main/java/com/linkwechat/common/utils/img/NetFileUtils.java @@ -25,19 +25,6 @@ public class NetFileUtils { private static final WebClient webClient = WebClient.create(vertx); - public static void main(String[] args) { - FileCallable fileCallable = getNetFile("https://pc-index-skin.cdn.bcebos.com/hiphoto/51631423522.jpg?x-bce-process=image/crop,x_0,y_13,w_1999,h_1250"); - ByteArrayOutputStream byteArrayOutputStream = getByteArrayOutputStream(fileCallable,true); - StreamMultipartFile file = new StreamMultipartFile("你好啊.jpg",byteArrayOutputStream.toByteArray()); - File f = new File("D:/网页/2.jpg"); - try { - file.transferTo(f); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public static FileCallable getNetFile(String urlPath){ FileCallable fileCallable = new FileCallable(); diff --git a/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/RyTask.java b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/RyTask.java index b1155dc137474b4d24a618e602af29a2950d239c..57beccf9c6689019a66ffcdf59d4072276c299ad 100644 --- a/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/RyTask.java +++ b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/RyTask.java @@ -76,10 +76,10 @@ public class RyTask { "", redisCache); if (CollectionUtil.isNotEmpty(chatDataList)){ try { + List elasticSearchEntities = weChatContactMappingService.saveWeChatContactMapping(chatDataList); List>> consumerList = Lists.newArrayList(); - consumerList.add(weChatContactMappingService::saveWeChatContactMapping); consumerList.add(weSensitiveService::hitSensitive); - elasticSearch.insertBatchAsync(WeConstans.WECOM_FINANCE_INDEX, chatDataList, consumerList); + elasticSearch.insertBatchAsync(WeConstans.WECOM_FINANCE_INDEX, elasticSearchEntities, consumerList); } catch (Exception e) { log.error("消息处理异常:ex:{}", e); e.printStackTrace(); diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeChatContactMappingService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeChatContactMappingService.java index 2270549eecbc63ef133d57636c6c805f690915a3..7d2af458d651b46e18cfb1ef28e0413cf208646e 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeChatContactMappingService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeChatContactMappingService.java @@ -70,7 +70,7 @@ public interface IWeChatContactMappingService extends IService saveWeChatContactMapping(List query); + public List saveWeChatContactMapping(List query); /** * 按客户查询关系映射列表 diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeChatContactMappingServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeChatContactMappingServiceImpl.java index 7c0a9d45d29f3a44ff4a1805e5369b88a8ecc10a..7df1e32510d0be92748d28432be8c710e3c49dd0 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeChatContactMappingServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeChatContactMappingServiceImpl.java @@ -160,11 +160,9 @@ public class WeChatContactMappingServiceImpl extends ServiceImpl saveWeChatContactMapping(List query) { - List resultList = new ArrayList<>(); + public List saveWeChatContactMapping(List query) { + List resultList = new ArrayList<>(); query.stream().filter(chatData -> StringUtils.isNotEmpty(chatData.getString("from"))).forEach(chatData -> { - ElasticSearchEntity elasticSearchEntity = new ElasticSearchEntity(); - elasticSearchEntity.setId(chatData.getString("msgid")); //发送人映射数据 WeChatContactMapping fromWeChatContactMapping = new WeChatContactMapping(); String fromId = chatData.getString("from"); @@ -194,8 +192,7 @@ public class WeChatContactMappingServiceImpl extends ServiceImpl i @Resource private ServerConfig serverConfig; + @Resource + private IWeCategoryService weCategoryService; + /** * 查询一条 @@ -86,8 +91,10 @@ public class WePosterServiceImpl extends ServiceImpl i }); } } - } + /*if(poster.getCategoryId() != null){ + weCategoryService.findWeCategoryById(poster.getId()); + }*/ return poster; } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeSensitiveServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeSensitiveServiceImpl.java index 639a05ae95ea1799e642cf598cfe2bc72572c75e..9944490aaea488dc8ca3e3ff552515f19bc3b800 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeSensitiveServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeSensitiveServiceImpl.java @@ -22,6 +22,8 @@ import com.linkwechat.wecom.service.IWeUserService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.exception.ExceptionUtils; +import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; @@ -30,7 +32,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Objects; @@ -165,6 +166,7 @@ public class WeSensitiveServiceImpl implements IWeSensitiveService { @Override public void hitSensitive(List entityList) { + log.info("执行敏感词命中过滤,time=[{}]", System.currentTimeMillis()); //获取所有的敏感词规则 List allSensitiveRules = weSensitiveMapper.selectWeSensitiveList(new WeSensitive()); //根据规则过滤命中 @@ -175,18 +177,14 @@ public class WeSensitiveServiceImpl implements IWeSensitiveService { List users = getScopeUsers(weSensitive.getAuditUserScope()); jsonList.addAll(hitSensitiveInES(patternWords, users)); //将命中结果插入es - try { - addHitSensitiveList(jsonList, weSensitive); - } catch (IOException e) { - log.warn("添加敏感词命中信息失败, jsonList={}, auditUserId={}, exception={}", - jsonList, weSensitive.getAuditUserId(), ExceptionUtils.getStackTrace(e)); - } + addHitSensitiveList(jsonList, weSensitive); }); } } @Override public PageInfo getHitSensitiveList(WeSensitiveHitQuery weSensitiveHitQuery) { + elasticSearch.createIndex2(WeConstans.WECOM_SENSITIVE_HIT_INDEX, getSensitiveHitMapping()); List userIds = Lists.newArrayList(); if (weSensitiveHitQuery.getScopeType().equals(WeConstans.USE_SCOP_BUSINESSID_TYPE_USER)) { userIds.add(weSensitiveHitQuery.getAuditScopeId()); @@ -218,9 +216,8 @@ public class WeSensitiveServiceImpl implements IWeSensitiveService { return elasticSearch.searchPage(WeConstans.WECOM_SENSITIVE_HIT_INDEX, builder, pageNum, pageSize, JSONObject.class); } - private void addHitSensitiveList(List json, WeSensitive weSensitive) throws IOException { - //创建索引 - elasticSearch.createIndex2(WeConstans.WECOM_SENSITIVE_HIT_INDEX, elasticSearch.getFinanceMapping()); + private void addHitSensitiveList(List json, WeSensitive weSensitive) { + elasticSearch.createIndex2(WeConstans.WECOM_SENSITIVE_HIT_INDEX, getSensitiveHitMapping()); if (weSensitive.getAlertFlag().equals(1)) { //针对每一条命中信息发送消息通知给相应的审计人 TODO } @@ -270,4 +267,43 @@ public class WeSensitiveServiceImpl implements IWeSensitiveService { builder.query(searchBuilder); return elasticSearch.search(WeConstans.WECOM_FINANCE_INDEX, builder, JSONObject.class); } + + private XContentBuilder getSensitiveHitMapping() { + try { + //创建索引 + XContentBuilder mapping = XContentFactory.jsonBuilder() + .startObject() + .startObject("properties") + .startObject("msgid") + .field("type", "keyword") + .endObject() + .startObject("seq") + .field("type", "long") + .endObject() + .startObject("action") + .field("type", "keyword") + .endObject() + .startObject("from") + .field("type", "keyword") + .endObject() + .startObject("roomid") + .field("type", "keyword") + .endObject() + .startObject("msgtime") + .field("type", "long") + .endObject() + .startObject("msgtype") + .field("type", "keyword") + .endObject() + .startObject("alerted") + .field("type", "keyword") + .endObject() + .endObject() + .endObject(); + return mapping; + } catch (Exception e) { + log.warn("create sensitive-hit mapping failed, exception={}", ExceptionUtils.getStackTrace(e)); + } + return null; + } }