Browse Source

异步执行校验结果后的逻辑

dev
jianjun 5 years ago
parent
commit
58a8ab6386
  1. 6
      epmet-commons/epmet-commons-tools/pom.xml
  2. 24
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/ImgScanParamDTO.java
  3. 28
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/ImgTaskDTO.java
  4. 24
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/TextScanParamDTO.java
  5. 28
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/TextTaskDTO.java
  6. 42
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/result/SyncScanResult.java
  7. 172
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java
  8. 58
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ScanContentUtils.java
  9. 5
      epmet-module/gov-voice/gov-voice-server/pom.xml
  10. 5
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/constant/ArticleConstant.java
  11. 12
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java
  12. 5
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/DraftContentDao.java
  13. 4
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/DraftCoverDao.java
  14. 23
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/ArticleService.java
  15. 178
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java
  16. 15
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/utils/ModuleConstant.java
  17. 5
      epmet-module/gov-voice/gov-voice-server/src/main/resources/bootstrap.yml
  18. 4
      epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/DraftContentDao.xml
  19. 5
      epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/DraftCoverDao.xml

6
epmet-commons/epmet-commons-tools/pom.xml

@ -123,6 +123,12 @@
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
</dependencies>
<build>

24
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/ImgScanParamDTO.java

@ -0,0 +1,24 @@
package com.epmet.commons.tools.scan.param;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 审查参数
*
* @author jianjun liu
* @date 2020-06-04 21:57
**/
@Data
public class ImgScanParamDTO implements Serializable {
private static final long serialVersionUID = -5982388188212400644L;
/**
* 要检测的内容列表必填
* remark一组任务列表中的taskId不能相同
*/
private List<ImgTaskDTO> tasks;
}

28
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/ImgTaskDTO.java

@ -0,0 +1,28 @@
package com.epmet.commons.tools.scan.param;
import lombok.Data;
import java.io.Serializable;
/**
* 任务参数
*
* @author jianjun liu
* @email liujianjun@yunzongnet.com
* @date 2020-06-04 22:13
**/
@Data
public class ImgTaskDTO implements Serializable {
private static final long serialVersionUID = -747206284930578105L;
/**
* 要检测的数据id 非必填
*
* */
private String dataId;
/**
* 图片url 必填
*/
private String url;
}

24
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/TextScanParamDTO.java

@ -0,0 +1,24 @@
package com.epmet.commons.tools.scan.param;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 文本审查参数
*
* @author jianjun liu
* @date 2020-06-05 11:17
**/
@Data
public class TextScanParamDTO implements Serializable {
private static final long serialVersionUID = -6244354240835340471L;
/**
* 要检测的内容列表必填
* remark一组任务列表中的taskId不能相同
*/
private List<TextTaskDTO> tasks;
}

28
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/TextTaskDTO.java

@ -0,0 +1,28 @@
package com.epmet.commons.tools.scan.param;
import lombok.Data;
import java.io.Serializable;
/**
* 任务参数
*
* @author jianjun liu
* @email liujianjun@yunzongnet.com
* @date 2020-06-04 22:13
**/
@Data
public class TextTaskDTO implements Serializable {
private static final long serialVersionUID = 6957195274696018630L;
/**
* 要检测的数据id 非必填
*
* */
private String dataId;
/**
* 文本内容 必填 最多不能超过10000
*/
private String content;
}

42
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/result/SyncScanResult.java

@ -0,0 +1,42 @@
package com.epmet.commons.tools.scan.result;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 检测结果
*
* @author jianjun liu
* @email liujianjun@yunzongnet.com
* @date 2020-06-05 10:52
**/
@Data
public class SyncScanResult implements Serializable {
/**
* 执行成功的任务Id集合
*/
private List<String> successDataIds = new ArrayList<>();
/**
* 执行失败的任务Id集合
*/
private List<String> failDataIds = new ArrayList<>();
/**
* 本地是否全部通过
*/
private boolean isAllPass;
public boolean isAllPass() {
if (failDataIds.isEmpty() && !successDataIds.isEmpty()) {
return true;
}
return isAllPass;
}
public void setAllPass(boolean allPass) {
isAllPass = allPass;
}
}

172
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java

@ -0,0 +1,172 @@
package com.epmet.commons.tools.utils;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* desc: http 工具类
* date: 2020/6/4 22:27
*
* @author: jianjun liu
*/
@Slf4j
public class HttpClientManager {
private static int connectionTimeout = 3000;// 连接超时时间,毫秒
private static int soTimeout = 10000;// 读取数据超时时间,毫秒
/**
* HttpClient对象
*/
private static CloseableHttpClient httpclient = HttpClients.custom().disableAutomaticRetries().build();
/*** 超时设置 ****/
private static RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(soTimeout)
.setConnectTimeout(connectionTimeout)
.build();//设置请求和传输超时时间
public static HttpClientManager getInstance() {
return SingleClass.instance;
}
private static class SingleClass {
private final static HttpClientManager instance = new HttpClientManager();
}
/**
* desc: 发送json post 请求
* param: url,jsonStrParam
* return: CallResult<String>
* date: 2019/2/21 9:12
*
* @author: jianjun liu
*/
public Result<String> sendPost(String url, Map<String, String> paramsMap) {
try {
HttpPost httppost = new HttpPost(url);
httppost.setConfig(requestConfig);
httppost.addHeader("Content-Type", "application/x-www-form-urlencoded charset=utf-8");
List<NameValuePair> list = new ArrayList<NameValuePair>();
for (String key : paramsMap.keySet()) {
list.add(new BasicNameValuePair(key, String.valueOf(paramsMap.get(key))));
}
UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(list, "utf-8");
httppost.setEntity(urlEncodedFormEntity);
return execute(httppost);
} catch (Exception e) {
e.printStackTrace();
log.error("send exception", e);
return new Result<String>().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
/**
* desc: 发送json post 请求
* param: url,jsonStrParam
* return: Result<String>
* date: 2019/2/21 9:12
*
* @author: jianjun liu
*/
public Result<String> sendPostByJSON(String url, String jsonStrParam) {
try {
HttpPost httppost = new HttpPost(url);
httppost.setConfig(requestConfig);
httppost.addHeader("Content-Type", "application/json; charset=utf-8");
if (StringUtils.isNotEmpty(jsonStrParam)) {
StringEntity se = new StringEntity(jsonStrParam, "utf-8");
httppost.setEntity(se);
}
return execute(httppost);
} catch (Exception e) {
log.error("send exception", e);
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
/**
* desc: 发送get请求
* param:url, params
* return: CallResult<String>
* date: 2019/2/21 9:16
*
* @author: jianjun liu
*/
public Result<String> sendGet(String url, Map<String, Object> params) {
try {
URIBuilder builder = new URIBuilder(url);
if (!CollectionUtils.isEmpty(params)) {
Set<String> set = params.keySet();
for (String key : set) {
builder.setParameter(key, params.get(key) == null ? "" : String.valueOf(params.get(key)));
}
}
HttpGet httpGet = new HttpGet(builder.build());
httpGet.setConfig(requestConfig);
return execute(httpGet);
} catch (Exception e) {
log.error("sendGet exception", e);
return new Result<String>().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
private Result<String> execute(HttpRequestBase httpMethod) {
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpMethod);
log.debug("http send response:{}", JSON.toJSONString(response));
if (response != null && response.getStatusLine() != null) {
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String result = EntityUtils.toString(response.getEntity());
return new Result<String>().ok(result);
} else {
log.warn("execute http method fail,httpStatus:{0}", response.getStatusLine().getStatusCode());
}
}
} catch (Exception e) {
log.error("execute exception", e);
new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
} finally {
httpMethod.releaseConnection();
try {
if (response != null) {
response.close();
}
} catch (IOException e) {
}
}
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}

58
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ScanContentUtils.java

@ -0,0 +1,58 @@
package com.epmet.commons.tools.utils;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.scan.param.ImgScanParamDTO;
import com.epmet.commons.tools.scan.param.TextScanParamDTO;
import com.epmet.commons.tools.scan.result.SyncScanResult;
import org.apache.commons.lang3.StringUtils;
/**
* 扫描内容工具类
*
* @author jianjun liu
* @email liujianjun@yunzongnet.com
* @date 2020-06-08 8:28
**/
public class ScanContentUtils {
/**
* desc:图片同步扫描
*
* @return
*/
public static SyncScanResult imgSyncScan(String url, ImgScanParamDTO param) {
if (StringUtils.isBlank(url) || param == null) {
throw new RenException("参数错误");
}
try {
Result<String> result = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(param));
if (result.success()) {
return JSON.parseObject(result.getData(), SyncScanResult.class);
}
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), result.getMsg());
} catch (Exception e) {
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage());
}
}
/**
* desc:文字同步扫描
*
* @return
*/
public static SyncScanResult textSyncScan(String url, TextScanParamDTO param) {
if (StringUtils.isBlank(url) || param == null) {
throw new RenException("参数错误");
}
try {
Result<String> result = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(param));
if (result.success()) {
return JSON.parseObject(result.getData(), SyncScanResult.class);
}
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), result.getMsg());
} catch (Exception e) {
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage());
}
}
}

5
epmet-module/gov-voice/gov-voice-server/pom.xml

@ -34,6 +34,11 @@
<artifactId>epmet-commons-tools</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-message-client</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-commons-mybatis</artifactId>

5
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/constant/ArticleConstant.java

@ -39,4 +39,9 @@ public interface ArticleConstant {
* 下线文章操作记录表文案
*/
String OFF_LINE_ARTICLE_MSG = "%s-%s下线文章【%s】";
/**
* 发布文章操作记录表文案
*/
String PUBLISH_ARTICLE_MSG = "%s-%s发布文章【%s】";
}

12
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java

@ -21,6 +21,7 @@ import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.annotation.RequirePermission;
import com.epmet.commons.tools.enums.RequirePermissionEnum;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.scan.result.SyncScanResult;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
@ -200,14 +201,19 @@ public class ArticleController {
Boolean isSuccess = articleService.publish(tokenDto, draftId);
if (isSuccess){
//TODO 异步校验内容
scanContent(draftId);
scanContent(tokenDto,draftId);
}
return new Result<Boolean>().ok(isSuccess);
}
@Async
public void scanContent(String draftId){
articleService.scanContent(draftId);
public void scanContent(TokenDto tokenDto,String draftId){
SyncScanResult syncScanResult = articleService.scanContent(tokenDto,draftId);
if (syncScanResult.isAllPass()){
articleService.scanAllPassPublishArticle(tokenDto,draftId);
}else{
articleService.updateAuditStatusFailById(draftId,syncScanResult);
}
}

5
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/DraftContentDao.java

@ -18,7 +18,6 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.DraftContentDTO;
import com.epmet.entity.DraftContentEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -42,12 +41,12 @@ public interface DraftContentDao extends BaseDao<DraftContentEntity> {
* @author wangc
* @date 2020.06.05 10:28
**/
List<DraftContentDTO> selectByDraftId(@Param("draftId")String draftId,@Param("auditStatus")String auditStatus);
List<DraftContentEntity> selectByDraftId(@Param("draftId")String draftId,@Param("auditStatus")String auditStatus);
/**
* desc:查询需要审核的内容
* @param draftId
* @return
*/
List<DraftContentDTO> selectScanContentByDraftId(String draftId);
List<DraftContentEntity> selectScanContentByDraftId(String draftId);
}

4
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/DraftCoverDao.java

@ -40,7 +40,7 @@ public interface DraftCoverDao extends BaseDao<DraftCoverEntity> {
* @author wangc
* @date 2020.06.05 10:28
**/
DraftCoverDTO selectByDraftId(@Param("draftId")String draftId,@Param("auditStatus")String auditStatus);
DraftCoverEntity selectByDraftId(@Param("draftId")String draftId,@Param("auditStatus")String auditStatus);
/**
* @Description 通过草稿Id 获取未删除的草稿封面id及地址
@ -50,4 +50,6 @@ public interface DraftCoverDao extends BaseDao<DraftCoverEntity> {
* @date 2020.06.05 10:28
**/
DraftCoverDTO selectCoverIdAndUrlByDraftId(@Param("draftId")String draftId);
int updateAuditStatusById(@Param("draftId")String id, @Param("auditStatus")String auditStatus);
}

23
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/ArticleService.java

@ -19,6 +19,7 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.scan.result.SyncScanResult;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
@ -166,18 +167,20 @@ public interface ArticleService extends BaseService<ArticleEntity> {
**/
ArticleDetailResultDTO getArticleDetail(ResiArticleDetailFormDTO articleDetailFormDTO);
/**
* @Description 草稿发布文章
* @param draftId
* @return String 返回新发布文章的Id
* @author wangc
* @date 2020.06.05 09:10
**/
String publishDraftToArticle(String draftId);
/**
* desc:执行审核返回执行结果
* @param tokenDto
* @param draftId
* @return
*/
SyncScanResult scanContent(TokenDto tokenDto, String draftId);
void scanAllPassPublishArticle(TokenDto tokenDto, String draftId);
/**
* desc:异步执行审核如果审核通过则 发布文章否则发送站内信
* desc:修改审核状态为失败
* @param draftId
* @param syncScanResult
*/
void scanContent(String draftId);
void updateAuditStatusFailById(String draftId, SyncScanResult syncScanResult);
}

178
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java

@ -19,28 +19,33 @@ package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.scan.param.ImgScanParamDTO;
import com.epmet.commons.tools.scan.param.ImgTaskDTO;
import com.epmet.commons.tools.scan.param.TextScanParamDTO;
import com.epmet.commons.tools.scan.param.TextTaskDTO;
import com.epmet.commons.tools.scan.result.SyncScanResult;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.ScanContentUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.constant.ArticleConstant;
import com.epmet.constant.DraftConstant;
import com.epmet.constant.RoleKeyConstants;
import com.epmet.constant.TagConstant;
import com.epmet.constant.*;
import com.epmet.dao.*;
import com.epmet.dto.*;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.entity.*;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.redis.ArticleRedis;
@ -54,6 +59,7 @@ import org.apache.commons.lang3.StringUtils;
import org.jsoup.helper.StringUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@ -111,6 +117,11 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
private ArticleDao articleDao;
@Autowired
private ArticleTagsDao articleTagsDao;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Value("${openapi.scan.server.host}")
private String scanApiHost;
private static final String AGENCY = "agency";
private static final String GRID = "grid";
@ -373,7 +384,7 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
coverEntity.setCustomerId(tokenDto.getCustomerId());
coverEntity.setDraftId(fromDTO.getDraftId());
coverEntity.setImgUrl(coverImg);
coverEntity.setAuditStatus("");
coverEntity.setAuditStatus(ModuleConstant.AUDIT_STATUS_PASS);
coverEntity.setAuditReason("");
coverEntity.setRevision(0);
coverEntity.setDelFlag(NumConstant.ZERO_STR);
@ -437,6 +448,8 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
entity.setCustomerId(tokenDto.getCustomerId());
entity.setDraftId(fromDTO.getDraftId());
entity.setOrderNum(i + 1);
//默认通过
entity.setAuditStatus(ModuleConstant.AUDIT_STATUS_PASS);
newContentList.add(entity);
}
@ -508,11 +521,7 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
//4:文章操作记录表新增数据
//4.1:调用epmet-user服务,查询工作人员信息
Result<CustomerStaffDTO> resultStaff = epmetUserOpenFeignClient.getCustomerStaff(formDTO.getStaffId());
if (!resultStaff.success() || null == resultStaff.getData()) {
throw new RenException(ArticleConstant.SELECT_STAFF_EXCEPTION);
}
CustomerStaffDTO staffDTO = resultStaff.getData();
CustomerStaffDTO staffDTO = getCustomerStaff(formDTO.getStaffId());
//4.2:查询文章表数据
ArticleEntity articleEntity = baseDao.selectById(formDTO.getArticleId());
//4.3:新增操作表数据
@ -526,6 +535,14 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
articleOperateRecordService.insert(recordEntity);
}
private CustomerStaffDTO getCustomerStaff(String userId) {
Result<CustomerStaffDTO> resultStaff = epmetUserOpenFeignClient.getCustomerStaff(userId);
if (!resultStaff.success() || null == resultStaff.getData()) {
throw new RenException(ArticleConstant.SELECT_STAFF_EXCEPTION);
}
return resultStaff.getData();
}
@Override
public PageData publishedArticleList(TokenDto tokenDto, PublishedListFormDTO formDTO) {
PageHelper.startPage(formDTO.getPageNo(),formDTO.getPageSize());
@ -799,20 +816,22 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
/**
* @Description 草稿发布文章
* @param draftId
* @param draft
* @return String 返回新发布文章的Id
* @author wangc
* @date 2020.06.05 09:10
**/
@Override
@Transactional(rollbackFor = Exception.class)
public String publishDraftToArticle(String draftId) {
public ArticleEntity publishDraftToArticle(DraftEntity draft) {
//1.查找草稿内容
DraftEntity draft = draftDao.selectById(draftId);
if(null != draft){
draft.setStatusFlag(DraftConstant.PUBLISHED);
draftDao.updateById(draft);
//2.查找草稿内容、封面、发布范围
List<DraftContentDTO> draftContents = draftContentDao.selectByDraftId(draftId,ModuleConstant.AUDIT_STATUS_PASS);
DraftCoverDTO draftCover = draftCoverDao.selectByDraftId(draftId,ModuleConstant.AUDIT_STATUS_PASS);
String draftId = draft.getId();
List<DraftContentEntity> draftContents = draftContentDao.selectByDraftId(draftId,ModuleConstant.AUDIT_STATUS_PASS);
DraftCoverEntity draftCover = draftCoverDao.selectByDraftId(draftId,ModuleConstant.AUDIT_STATUS_PASS);
List<DraftPublishRangeDTO> draftPublishRange = draftPublishRangeDao.selectByDraftId(draftId);
//3.生成文章以及相关记录
@ -828,6 +847,9 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
contentToInsert.setArticleId(article.getId());
contentToInsert.setId(null);
articleContentDao.insert(contentToInsert);
content.setAuditStatus(ModuleConstant.AUDIT_STATUS_PASS);
draftContentDao.updateById(content);
});
}
if(null != draftPublishRange && draftPublishRange.size() > NumConstant.ZERO){
@ -842,51 +864,147 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
coverToInsert.setArticleId(article.getId());
coverToInsert.setId(null);
articleCoverDao.insert(coverToInsert);
draftCover.setAuditStatus(ModuleConstant.AUDIT_STATUS_PASS);
draftCoverDao.updateById(draftCover);
}
}
return article.getId();
//4.3:新增操作表数据
CustomerStaffDTO staffDTO = getCustomerStaff(loginUserUtil.getLoginUserId());
ArticleOperateRecordEntity recordEntity = new ArticleOperateRecordEntity();
recordEntity.setCustomerId(article.getCustomerId());
recordEntity.setArticleId(article.getId());
recordEntity.setOpUser(article.getPublisherName() + "-" + staffDTO.getRealName());
recordEntity.setContent(String.format(ArticleConstant.PUBLISH_ARTICLE_MSG, article.getPublisherName(), staffDTO.getRealName(), article.getTitle()));
recordEntity.setOpType(ArticleConstant.OFFLINE);
recordEntity.setOpTime(new Date());
articleOperateRecordService.insert(recordEntity);
return article;
}
throw new RenException(String.format(ModuleConstant.SPECIFIED_DRAFT_NOT_FOUNT_EXCEPTION_TEMPLATE,draftId));
throw new RenException(String.format(ModuleConstant.SPECIFIED_DRAFT_NOT_FOUNT_EXCEPTION_TEMPLATE,draft.getId()));
}
@Override
public void scanContent(String draftId) {
public SyncScanResult scanContent(TokenDto tokenDto, String draftId) {
DraftEntity draftEntity = draftDao.selectById(draftId);
if (draftEntity == null){
log.error("scanContent draftId:{} is not exist",draftId);
return;
return null;
}
if (!DraftConstant.AUDITING.equals(draftEntity.getStatusFlag())){
log.error("scanContent draftId:{} statusFlag:{} is not support 2 modify",draftId,draftEntity.getStatusFlag());
return;
return null;
}
if (!NumConstant.ONE_STR.equals(draftEntity.getDelFlag())){
log.error("scanContent draftId:{} delFlag:{} is not support 2 modify",draftId,draftEntity.getDelFlag());
return;
return null;
}
Map<String,String> imgMap = new HashMap<>();
Map<String,String> textMap = new HashMap<>();
TextScanParamDTO textScanParamDTO = new TextScanParamDTO();
ImgScanParamDTO imgScanParamDTO = new ImgScanParamDTO();
DraftCoverDTO draftCoverDTO = draftCoverDao.selectCoverIdAndUrlByDraftId(draftId);
if (draftCoverDTO != null){
imgMap.put(ModuleConstant.SCAN_COVER_PREFIX.concat(draftCoverDTO.getId()), draftCoverDTO.getImgUrl());
ImgTaskDTO taskDTO = new ImgTaskDTO();
taskDTO.setDataId(ModuleConstant.SCAN_COVER_PREFIX.concat(draftCoverDTO.getId()));
taskDTO.setUrl(draftCoverDTO.getImgUrl());
imgScanParamDTO.getTasks().add(taskDTO);
}
List<DraftContentDTO> contentDTOList = draftContentDao.selectScanContentByDraftId(draftId);
List<DraftContentEntity> contentDTOList = draftContentDao.selectScanContentByDraftId(draftId);
if(!CollectionUtils.isEmpty(contentDTOList)){
contentDTOList.forEach(content->{
String contentType = content.getContentType();
if (DraftConstant.TEXT.equals(contentType)){
//todo 内容叠加审核吧 id拼起来
textMap.put(content.getId(),content.getContent());
TextTaskDTO textTaskDTO = new TextTaskDTO();
textTaskDTO.setDataId(content.getId());
textTaskDTO.setContent(content.getContent());
}else if (DraftConstant.IMG.equals(contentType)){
imgMap.put(draftCoverDTO.getId(), draftCoverDTO.getImgUrl());
ImgTaskDTO taskDTO = new ImgTaskDTO();
taskDTO.setDataId(content.getId());
taskDTO.setUrl(content.getContent());
imgScanParamDTO.getTasks().add(taskDTO);
}
});
}
//todo 执行审核
SyncScanResult imgSyncScanResult = ScanContentUtils.imgSyncScan(scanApiHost,imgScanParamDTO);
SyncScanResult textSyncScanResult = ScanContentUtils.textSyncScan(scanApiHost,textScanParamDTO);
SyncScanResult result = new SyncScanResult();
if (imgSyncScanResult.isAllPass()){
result.setAllPass(imgSyncScanResult.isAllPass());
result.getSuccessDataIds().addAll(imgSyncScanResult.getSuccessDataIds());
result.getFailDataIds().addAll(imgSyncScanResult.getFailDataIds());
}
if (textSyncScanResult.isAllPass()){
result.setAllPass(result.isAllPass()?textSyncScanResult.isAllPass():false);
result.getSuccessDataIds().addAll(textSyncScanResult.getSuccessDataIds());
result.getFailDataIds().addAll(textSyncScanResult.getFailDataIds());
}
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void scanAllPassPublishArticle(TokenDto tokenDto, String draftId){
DraftEntity draft = draftDao.selectById(draftId);
if (draft == null){
throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(),EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg());
}
try {
//审核通过
ArticleEntity articleEntity = this.publishDraftToArticle(draft);
UpdateCustomerTagCacheDTO updateCustomerTagCacheDTO = this.updateCustomerTag(tokenDto, draftId);
List<UpdateGridTagCacheDTO> updateGridTagCacheDTOS = this.updateGridTag(tokenDto, draftId, updateCustomerTagCacheDTO);
//更新redis
try {
this.updateCacheCustomerTag(updateCustomerTagCacheDTO);
this.updateCacheGridTag(updateGridTagCacheDTOS);
} catch (Exception e) {
log.error("scanAllPassPublishArticle update redis exception", e);
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
} catch (Exception e) {
log.error("scanAllPassPublishArticle update db exception", e);
this.sendMsg(draft.getTitle(), String.format(ModuleConstant.MSG_ARTICLE_PUBLISH_ERROR, draft.getTitle()));
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateAuditStatusFailById(String draftId,SyncScanResult syncScanResult) {
List<String> failDataIds = syncScanResult.getFailDataIds();
failDataIds.forEach(id->{
if (id.indexOf(ModuleConstant.SCAN_COVER_PREFIX)>=0){
draftCoverDao.updateAuditStatusById(id,ModuleConstant.AUDIT_STATUS_FAIL);
}else{
//TODO 修改内容 审核状态
}
});
}
public Result sendMsg(String title,String content) {
UserMessageFormDTO formDTO = new UserMessageFormDTO();
formDTO.setCustomerId(loginUserUtil.getLoginUserApp());
formDTO.setGridId("");
formDTO.setUserId(loginUserUtil.getLoginUserId());
formDTO.setApp(AppClientConstant.APP_GOV);
formDTO.setTitle(String.format(ModuleConstant.MSG_TITLE,title));
formDTO.setMessageContent(content);
formDTO.setReadFlag(ReadFlagConstant.UN_READ);
return epmetMessageOpenFeignClient.saveUserMessage(formDTO);
}
/**
@ -894,7 +1012,6 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
* @param draftId
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
public UpdateCustomerTagCacheDTO updateCustomerTag(TokenDto tokenDto, String draftId){
//获取草稿基本信息
DraftDTO draft = draftService.get(draftId);
@ -946,7 +1063,6 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
* @param formDto
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
public List<UpdateGridTagCacheDTO> updateGridTag(TokenDto tokenDto,String draftId,UpdateCustomerTagCacheDTO formDto){
//获取草稿基本信息
DraftDTO draft = draftService.get(draftId);

15
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/utils/ModuleConstant.java

@ -69,4 +69,19 @@ public interface ModuleConstant {
* */
String SCAN_COVER_PREFIX = "cover_";
/**
* 文章站内消息标题
* */
String MSG_TITLE = "您有一条文章【%s】的消息";
/**
* 文章未审核通过 消息内容模版
* */
String MSG_AUDIT_CONTENT = "您好,您发布的【%s】文章%s审核未通过,请重新编辑后发布,谢谢。";
/**
* 文章发布失败 内部错误导致
* */
String MSG_ARTICLE_PUBLISH_ERROR = "您好,你发布的【%s】文章由于网络错误未发布成功,请重新发布,谢谢。";
}

5
epmet-module/gov-voice/gov-voice-server/src/main/resources/bootstrap.yml

@ -93,3 +93,8 @@ hystrix:
ribbon:
ReadTimeout: 300000
ConnectTimeout: 300000
openapi:
scan:
server:
host: http://localhost:8107/epmetscan

4
epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/DraftContentDao.xml

@ -4,7 +4,7 @@
<mapper namespace="com.epmet.dao.DraftContentDao">
<!-- 通过草稿Id获取草稿内容并按照orderNum排序,默认拿取所有状态 -->
<select id="selectByDraftId" resultType="com.epmet.dto.DraftContentDTO">
<select id="selectByDraftId" resultType="com.epmet.entity.DraftContentEntity">
SELECT
CUSTOMER_ID,
CONTENT,
@ -24,7 +24,7 @@
ORDER BY
ORDER_NUM
</select>
<select id="selectScanContentByDraftId" resultType="com.epmet.dto.DraftContentDTO">
<select id="selectScanContentByDraftId" resultType="com.epmet.entity.DraftContentEntity">
SELECT
ID,
CONTENT,

5
epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/DraftCoverDao.xml

@ -4,7 +4,7 @@
<mapper namespace="com.epmet.dao.DraftCoverDao">
<!-- 通过草稿Id获取草稿封面且创建时间是为最新的 -->
<select id="selectByDraftId" resultType="com.epmet.dto.DraftCoverDTO">
<select id="selectByDraftId" resultType="com.epmet.entity.DraftCoverEntity">
SELECT
cover.CUSTOMER_ID,
cover.IMG_URL,
@ -24,5 +24,8 @@
<select id="selectCoverIdAndUrlByDraftId" resultType="com.epmet.dto.DraftCoverDTO">
SELECT ID,IMG_URL FROM DRAFT_COVER WHERE DEL_FLAG = 0 AND DRAFT_ID = #{draftId,jdbcType=VARCHAR}
</select>
<update id="updateAuditStatusById">
UPDATE DRAFT_COVER SET AUDIT_STATUS = #{auditStatus,jdbcType=VARCHAR}
</update>
</mapper>
Loading…
Cancel
Save