Browse Source

Merge remote-tracking branch 'remotes/origin/dev_voice_attachment' into dev

# Conflicts:
#	epmet-gateway/src/main/resources/bootstrap.yml
master
jianjun 4 years ago
parent
commit
3abed293ef
  1. 4
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysDeptController.java
  2. 4
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysDictDataController.java
  3. 4
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysDictTypeController.java
  4. 2
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysLogErrorController.java
  5. 2
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysLogLoginController.java
  6. 2
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysLogOperationController.java
  7. 4
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysMenuController.java
  8. 5
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysParamsController.java
  9. 10
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysRegionController.java
  10. 4
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysRoleController.java
  11. 6
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysUserController.java
  12. 95
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/log/LogConsumer.java
  13. 8
      epmet-auth/src/main/java/com/epmet/service/impl/AuthServiceImpl.java
  14. 2
      epmet-auth/src/main/java/com/epmet/service/impl/GovLoginServiceImpl.java
  15. 2
      epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java
  16. 24
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/LogOperation.java
  17. 26
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aop/NoRepeatSubmitAop.java
  18. 121
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/LogOperationAspect.java
  19. 8
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  20. 153
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/RenExceptionHandler.java
  21. 43
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/log/producer/LogProducer.java
  22. 19
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  23. 2
      epmet-gateway/src/main/resources/bootstrap.yml
  24. 6
      epmet-module/epmet-activiti/epmet-activiti-server/src/main/java/com/epmet/controller/ActModelController.java
  25. 6
      epmet-module/epmet-activiti/epmet-activiti-server/src/main/java/com/epmet/controller/ActProcessController.java
  26. 4
      epmet-module/epmet-activiti/epmet-activiti-server/src/main/java/com/epmet/controller/ActRunningController.java
  27. 2
      epmet-module/epmet-activiti/epmet-activiti-server/src/main/java/com/epmet/controller/ActTaskController.java
  28. 5
      epmet-module/epmet-activiti/epmet-activiti-server/src/main/java/com/epmet/demo/controller/CorrectionController.java
  29. 19
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/controller/ScheduleJobController.java
  30. 1
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/controller/MailTemplateController.java
  31. 16
      epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/form/RemoveFileFormDTO.java
  32. 6
      epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/result/UploadImgResultDTO.java
  33. 8
      epmet-module/epmet-oss/epmet-oss-server/pom.xml
  34. 21
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AbstractCloudStorageService.java
  35. 74
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AliyunCloudStorageService.java
  36. 14
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/FastDFSCloudStorageService.java
  37. 14
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/LocalCloudStorageService.java
  38. 31
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/OssFactory.java
  39. 14
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QcloudCloudStorageService.java
  40. 14
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QiniuCloudStorageService.java
  41. 67
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java
  42. 4
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/dao/OssDao.java
  43. 10
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/OssService.java
  44. 68
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/impl/OssServiceImpl.java
  45. 4
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/utils/ModuleConstant.java
  46. 6
      epmet-module/epmet-oss/epmet-oss-server/src/main/resources/mapper/SysOssDao.xml
  47. 16
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ArticleContentDTO.java
  48. 7
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/DraftContentDTO.java
  49. 11
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/DraftContentFromDTO.java
  50. 7
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/ArticleContentResultDTO.java
  51. 7
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/DraftContentDetailDTO.java
  52. 7
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GovArticleContentDTO.java
  53. 7
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GovDraftContentDTO.java
  54. 6
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/constant/DraftConstant.java
  55. 10
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/ArticleContentEntity.java
  56. 10
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/DraftContentEntity.java
  57. 5
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java
  58. 6
      epmet-module/gov-voice/gov-voice-server/src/main/resources/db/migration/V0.0.3__addpdf.sql
  59. 8
      epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleDao.xml
  60. 6
      epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/DraftContentDao.xml
  61. 4
      epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/DraftDao.xml

4
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysDeptController.java

@ -10,7 +10,6 @@ package com.epmet.controller;
import com.epmet.dto.SysDeptDTO;
import com.epmet.service.SysDeptService;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
@ -56,7 +55,6 @@ public class SysDeptController {
@PostMapping
@ApiOperation("保存")
@LogOperation("Save Dept")
public Result save(@RequestBody SysDeptDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
@ -68,7 +66,6 @@ public class SysDeptController {
@PutMapping
@ApiOperation("修改")
@LogOperation("Update Dept")
public Result update(@RequestBody SysDeptDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
@ -80,7 +77,6 @@ public class SysDeptController {
@DeleteMapping("{id}")
@ApiOperation("删除")
@LogOperation("Delete Dept")
public Result delete(@PathVariable("id") Long id){
//效验数据
AssertUtils.isNull(id, "id");

4
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysDictDataController.java

@ -10,7 +10,6 @@ package com.epmet.controller;
import com.epmet.dto.SysDictDataDTO;
import com.epmet.service.SysDictDataService;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
@ -67,7 +66,6 @@ public class SysDictDataController {
@PostMapping
@ApiOperation("保存")
@LogOperation("保存")
public Result save(@RequestBody SysDictDataDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, DefaultGroup.class);
@ -79,7 +77,6 @@ public class SysDictDataController {
@PutMapping
@ApiOperation("修改")
@LogOperation("修改")
public Result update(@RequestBody SysDictDataDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
@ -91,7 +88,6 @@ public class SysDictDataController {
@DeleteMapping
@ApiOperation("删除")
@LogOperation("删除")
public Result delete(@RequestBody Long[] ids){
//效验数据
AssertUtils.isArrayEmpty(ids, "id");

4
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysDictTypeController.java

@ -10,7 +10,6 @@ package com.epmet.controller;
import com.epmet.dto.SysDictTypeDTO;
import com.epmet.service.SysDictTypeService;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
@ -69,7 +68,6 @@ public class SysDictTypeController {
@PostMapping
@ApiOperation("保存")
@LogOperation("保存")
public Result save(@RequestBody SysDictTypeDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, DefaultGroup.class);
@ -81,7 +79,6 @@ public class SysDictTypeController {
@PutMapping
@ApiOperation("修改")
@LogOperation("修改")
public Result update(@RequestBody SysDictTypeDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
@ -93,7 +90,6 @@ public class SysDictTypeController {
@DeleteMapping
@ApiOperation("删除")
@LogOperation("删除")
public Result delete(@RequestBody Long[] ids){
//效验数据
AssertUtils.isArrayEmpty(ids, "id");

2
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysLogErrorController.java

@ -10,7 +10,6 @@ package com.epmet.controller;
import com.epmet.dto.SysLogErrorDTO;
import com.epmet.service.SysLogErrorService;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ExcelUtils;
@ -59,7 +58,6 @@ public class SysLogErrorController {
@GetMapping("export")
@ApiOperation("导出")
@LogOperation("Export Log Error")
public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
List<SysLogErrorDTO> list = sysLogErrorService.list(params);

2
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysLogLoginController.java

@ -10,7 +10,6 @@ package com.epmet.controller;
import com.epmet.dto.SysLogLoginDTO;
import com.epmet.service.SysLogLoginService;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ExcelUtils;
@ -60,7 +59,6 @@ public class SysLogLoginController {
@GetMapping("export")
@ApiOperation("导出")
@LogOperation("Export Log Login")
@ApiImplicitParams({
@ApiImplicitParam(name = "status", value = "状态 0:失败 1:成功 2:账号已锁定", paramType = "query", dataType="int"),
@ApiImplicitParam(name = "creatorName", value = "用户名", paramType = "query", dataType="String")

2
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysLogOperationController.java

@ -10,7 +10,6 @@ package com.epmet.controller;
import com.epmet.dto.SysLogOperationDTO;
import com.epmet.service.SysLogOperationService;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ExcelUtils;
@ -63,7 +62,6 @@ public class SysLogOperationController {
@GetMapping("export")
@ApiOperation("导出")
@LogOperation("Export Log Operation")
public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
List<SysLogOperationDTO> list = sysLogOperationService.list(params);

4
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysMenuController.java

@ -12,7 +12,6 @@ import com.epmet.dto.MenuResourceDTO;
import com.epmet.dto.SysMenuDTO;
import com.epmet.service.SysMenuService;
import com.epmet.service.SysResourceService;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.security.user.UserDetail;
import com.epmet.commons.tools.utils.Result;
@ -83,7 +82,6 @@ public class SysMenuController {
@PostMapping
@ApiOperation("保存")
@LogOperation("Save Menu")
public Result save(@RequestBody SysMenuDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, DefaultGroup.class);
@ -95,7 +93,6 @@ public class SysMenuController {
@PutMapping
@ApiOperation("修改")
@LogOperation("Update Menu")
public Result update(@RequestBody SysMenuDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, DefaultGroup.class);
@ -107,7 +104,6 @@ public class SysMenuController {
@DeleteMapping("{id}")
@ApiOperation("删除")
@LogOperation("Delete Menu")
public Result delete(@PathVariable("id") Long id){
//效验数据
AssertUtils.isNull(id, "id");

5
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysParamsController.java

@ -10,7 +10,6 @@ package com.epmet.controller;
import com.epmet.dto.SysParamsDTO;
import com.epmet.service.SysParamsService;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ExcelUtils;
@ -72,7 +71,6 @@ public class SysParamsController {
@PostMapping
@ApiOperation("保存")
@LogOperation("Save Params")
public Result save(@RequestBody SysParamsDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
@ -84,7 +82,6 @@ public class SysParamsController {
@PutMapping
@ApiOperation("修改")
@LogOperation("Update Params")
public Result update(@RequestBody SysParamsDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
@ -96,7 +93,6 @@ public class SysParamsController {
@DeleteMapping
@ApiOperation("删除")
@LogOperation("Delete Params")
public Result delete(@RequestBody Long[] ids){
//效验数据
AssertUtils.isArrayEmpty(ids, "id");
@ -108,7 +104,6 @@ public class SysParamsController {
@GetMapping("export")
@ApiOperation("导出")
@LogOperation("Export Params")
@ApiImplicitParam(name = "paramCode", value = "参数编码", paramType = "query", dataType="String")
public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
List<SysParamsDTO> list = sysParamsService.list(params);

10
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysRegionController.java

@ -11,7 +11,6 @@ package com.epmet.controller;
import com.epmet.dto.SysRegionDTO;
import com.epmet.dto.region.RegionProvince;
import com.epmet.service.SysRegionService;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.Result;
@ -71,8 +70,7 @@ public class SysRegionController {
@PostMapping
@ApiOperation("保存")
@LogOperation("保存")
public Result save(@RequestBody SysRegionDTO dto){
public Result save(@RequestBody SysRegionDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
@ -83,8 +81,7 @@ public class SysRegionController {
@PutMapping
@ApiOperation("修改")
@LogOperation("修改")
public Result update(@RequestBody SysRegionDTO dto){
public Result update(@RequestBody SysRegionDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
@ -95,8 +92,7 @@ public class SysRegionController {
@DeleteMapping("{id}")
@ApiOperation("删除")
@LogOperation("删除")
public Result delete(@PathVariable("id") Long id){
public Result delete(@PathVariable("id") Long id){
//效验数据
AssertUtils.isNull(id, "id");

4
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysRoleController.java

@ -10,7 +10,6 @@ package com.epmet.controller;
import com.epmet.dto.SysRoleDTO;
import com.epmet.service.SysRoleService;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
@ -94,7 +93,6 @@ public class SysRoleController {
@PostMapping
@ApiOperation("保存")
@LogOperation("Save Role")
public Result save(@RequestBody SysRoleDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
@ -106,7 +104,6 @@ public class SysRoleController {
@PutMapping
@ApiOperation("修改")
@LogOperation("Update Role")
public Result update(@RequestBody SysRoleDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
@ -118,7 +115,6 @@ public class SysRoleController {
@DeleteMapping
@ApiOperation("删除")
@LogOperation("Delete Role")
public Result delete(@RequestBody Long[] ids){
//效验数据
AssertUtils.isArrayEmpty(ids, "id");

6
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysUserController.java

@ -13,7 +13,6 @@ import com.epmet.dto.PasswordDTO;
import com.epmet.dto.SysUserDTO;
import com.epmet.service.SysResourceService;
import com.epmet.service.SysUserService;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.page.PageData;
@ -98,7 +97,6 @@ public class SysUserController {
@PostMapping
@ApiOperation("保存")
@LogOperation("Save User")
public Result save(@RequestBody SysUserDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
@ -110,7 +108,6 @@ public class SysUserController {
@PutMapping
@ApiOperation("修改")
@LogOperation("Update User")
public Result update(@RequestBody SysUserDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
@ -122,7 +119,6 @@ public class SysUserController {
@PutMapping("password")
@ApiOperation("修改密码")
@LogOperation("Password User")
public Result password(@RequestBody PasswordDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto);
@ -141,7 +137,6 @@ public class SysUserController {
@DeleteMapping
@ApiOperation("删除")
@LogOperation("Delete User")
public Result delete(@RequestBody Long[] ids){
//效验数据
AssertUtils.isArrayEmpty(ids, "id");
@ -153,7 +148,6 @@ public class SysUserController {
@GetMapping("export")
@ApiOperation("导出")
@LogOperation("Export User")
@ApiImplicitParam(name = "username", value = "用户名", paramType = "query", dataType="String")
public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
List<SysUserDTO> list = sysUserService.list(params);

95
epmet-admin/epmet-admin-server/src/main/java/com/epmet/log/LogConsumer.java

@ -1,95 +0,0 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.epmet.log;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.log.BaseLog;
import com.epmet.commons.tools.log.enums.LogTypeEnum;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.entity.SysLogErrorEntity;
import com.epmet.entity.SysLogLoginEntity;
import com.epmet.entity.SysLogOperationEntity;
import com.epmet.service.SysLogErrorService;
import com.epmet.service.SysLogLoginService;
import com.epmet.service.SysLogOperationService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 从Redis队列中获取Log保存到DB
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Slf4j
@Component
public class LogConsumer implements CommandLineRunner {
@Autowired
private RedisUtils redisUtils;
@Autowired
private SysLogErrorService sysLogErrorService;
@Autowired
private SysLogLoginService sysLogLoginService;
@Autowired
private SysLogOperationService sysLogOperationService;
private ScheduledExecutorService scheduledService = new ScheduledThreadPoolExecutor(1,
new BasicThreadFactory.Builder().namingPattern("log-consumer-schedule-pool-%d").daemon(true).build());
@Override
public void run(String... args) {
//上次任务结束后,等待10秒钟,再执行下次任务
scheduledService.scheduleWithFixedDelay(() -> {
try {
receiveQueue();
}catch (Exception e){
log.error("LogConsumer Error:"+ ExceptionUtils.getErrorStackTrace(e));
}
}, 1, 10, TimeUnit.SECONDS);
}
private void receiveQueue() {
String key = RedisKeys.getSysLogKey();
//每次插入100条
int count = 100;
for(int i = 0; i < count; i++){
BaseLog log = (BaseLog) redisUtils.rightPop(key);
if(log == null){
return;
}
//登录日志
if(log.getType() == LogTypeEnum.LOGIN.value()){
SysLogLoginEntity entity = ConvertUtils.sourceToTarget(log, SysLogLoginEntity.class);
sysLogLoginService.save(entity);
}
//操作日志
if(log.getType() == LogTypeEnum.OPERATION.value()){
SysLogOperationEntity entity = ConvertUtils.sourceToTarget(log, SysLogOperationEntity.class);
sysLogOperationService.save(entity);
}
//异常日志
if(log.getType() == LogTypeEnum.ERROR.value()){
SysLogErrorEntity entity = ConvertUtils.sourceToTarget(log, SysLogErrorEntity.class);
sysLogErrorService.save(entity);
}
}
}
}

8
epmet-auth/src/main/java/com/epmet/service/impl/AuthServiceImpl.java

@ -14,7 +14,6 @@ import com.epmet.commons.tools.log.SysLogLogin;
import com.epmet.commons.tools.log.enums.LogTypeEnum;
import com.epmet.commons.tools.log.enums.LoginOperationEnum;
import com.epmet.commons.tools.log.enums.LoginStatusEnum;
import com.epmet.commons.tools.log.producer.LogProducer;
import com.epmet.commons.tools.redis.UserDetailRedis;
import com.epmet.commons.tools.security.password.PasswordUtils;
import com.epmet.commons.tools.security.user.SecurityUser;
@ -49,8 +48,6 @@ public class AuthServiceImpl implements AuthService {
@Autowired
private UserDetailRedis userDetailRedis;
@Autowired
private LogProducer logProducer;
@Autowired
private JwtUtils jwtUtils;
@Autowired
private JwtProperties jwtProperties;
@ -76,7 +73,6 @@ public class AuthServiceImpl implements AuthService {
if(user == null){
log.setStatus(LoginStatusEnum.FAIL.value());
log.setCreatorName(login.getUsername());
logProducer.saveLog(log);
throw new RenException(ErrorCode.ACCOUNT_PASSWORD_ERROR);
}
@ -86,7 +82,6 @@ public class AuthServiceImpl implements AuthService {
log.setStatus(LoginStatusEnum.FAIL.value());
log.setCreator(user.getId());
log.setCreatorName(user.getUsername());
logProducer.saveLog(log);
throw new RenException(ErrorCode.ACCOUNT_PASSWORD_ERROR);
}
@ -96,7 +91,6 @@ public class AuthServiceImpl implements AuthService {
log.setStatus(LoginStatusEnum.LOCK.value());
log.setCreator(user.getId());
log.setCreatorName(user.getUsername());
logProducer.saveLog(log);
throw new RenException(ErrorCode.ACCOUNT_DISABLE);
}
@ -116,7 +110,6 @@ public class AuthServiceImpl implements AuthService {
log.setCreator(user.getId());
log.setCreatorName(user.getUsername());
log.setStatus(LoginStatusEnum.SUCCESS.value());
logProducer.saveLog(log);
return authorization;
}
@ -138,7 +131,6 @@ public class AuthServiceImpl implements AuthService {
log.setCreator(user.getId());
log.setCreatorName(user.getUsername());
log.setCreateDate(new Date());
logProducer.saveLog(log);
userDetailRedis.logout(userId);
}

2
epmet-auth/src/main/java/com/epmet/service/impl/GovLoginServiceImpl.java

@ -362,7 +362,7 @@ public class GovLoginServiceImpl implements GovLoginService {
}
//密码错误
if(!passwordRightFlag){
logger.error(String.format("根据当前手机号(%s)密码未找到所属组织,密码错误",formDTO.getMobile()));
logger.warn(String.format("根据当前手机号(%s)密码未找到所属组织,密码错误",formDTO.getMobile()));
throw new RenException(EpmetErrorCode.PASSWORD_ERROR.getCode());
}
StaffOrgFormDTO staffOrgFormDTO = new StaffOrgFormDTO();

2
epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java

@ -484,7 +484,7 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
}
//密码错误
if(!passwordRightFlag){
logger.error(String.format("根据当前手机号(%s)密码未找到所属组织,密码错误",formDTO.getMobile()));
logger.warn(String.format("根据当前手机号(%s)密码未找到所属组织,密码错误",formDTO.getMobile()));
throw new RenException(EpmetErrorCode.PASSWORD_ERROR.getCode());
}
StaffOrgFormDTO staffOrgFormDTO = new StaffOrgFormDTO();

24
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/LogOperation.java

@ -1,24 +0,0 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.epmet.commons.tools.annotation;
import java.lang.annotation.*;
/**
* 操作日志注解
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogOperation {
String value() default "";
}

26
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aop/NoRepeatSubmitAop.java

@ -7,18 +7,14 @@ import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
@ -35,19 +31,20 @@ public class NoRepeatSubmitAop {
/**
* 重复提交判断时间为2s
*/
private static final Cache<String, Object> CACHES = CacheBuilder.newBuilder()
private static final Cache<String, Integer> CACHES = CacheBuilder.newBuilder()
// 最大缓存 100 个
.maximumSize(1000)
.maximumSize(100)
// 设置写缓存后 5 秒钟过期
.expireAfterWrite(5, TimeUnit.SECONDS)
.build();
@Before("execution(public * com.epmet..*Controller.*(..))")
public void before(JoinPoint joinPoint) {
System.out.println(joinPoint.getSignature().getName());
@Pointcut("@annotation(com.epmet.commons.tools.aop.NoRepeatSubmit)")
public void doAspect() {
}
@Around("execution(public * com.epmet..*Controller.*(..)) && @annotation(com.epmet.commons.tools.aop.NoRepeatSubmit)")
public Object around(ProceedingJoinPoint pjp) {
@Before("doAspect()")
public void around(JoinPoint pjp) {
try {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
assert attributes != null;
@ -55,9 +52,7 @@ public class NoRepeatSubmitAop {
String key = getKey(request.getRequestURI(), pjp.getArgs());
// 如果缓存中有这个url视为重复提交
if (CACHES.getIfPresent(key) == null) {
Object o = pjp.proceed();
CACHES.put(key, NumConstant.ZERO);
return o;
} else {
log.error("重复提交");
throw new RenException(EpmetErrorCode.REPEATED_SUBMIT_ERROR.getCode());
@ -68,7 +63,6 @@ public class NoRepeatSubmitAop {
log.error("验证重复提交时出现未知异常!");
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
}
}
private String getKey(String keyExpress, Object[] args) {
@ -79,4 +73,4 @@ public class NoRepeatSubmitAop {
}
}
}

121
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/LogOperationAspect.java

@ -1,121 +0,0 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.epmet.commons.tools.aspect;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.config.ModuleConfig;
import com.epmet.commons.tools.security.user.SecurityUser;
import com.epmet.commons.tools.log.SysLogOperation;
import com.epmet.commons.tools.log.enums.LogTypeEnum;
import com.epmet.commons.tools.log.enums.OperationStatusEnum;
import com.epmet.commons.tools.log.producer.LogProducer;
import com.epmet.commons.tools.security.user.UserDetail;
import com.epmet.commons.tools.utils.HttpContextUtils;
import com.epmet.commons.tools.utils.IpUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Date;
/**
* 操作日志切面处理类
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Aspect
@Component
public class LogOperationAspect {
@Autowired
private ModuleConfig moduleConfig;
@Autowired
private LogProducer logProducer;
@Pointcut("@annotation(com.epmet.commons.tools.annotation.LogOperation)")
public void logPointCut() {
}
@Around("logPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
long beginTime = System.currentTimeMillis();
try {
//执行方法
Object result = point.proceed();
//执行时长(毫秒)
long time = System.currentTimeMillis() - beginTime;
//保存日志
saveLog(point, time, OperationStatusEnum.SUCCESS.value());
return result;
}catch(Exception e) {
//执行时长(毫秒)
long time = System.currentTimeMillis() - beginTime;
//保存日志
saveLog(point, time, OperationStatusEnum.FAIL.value());
throw e;
}
}
private void saveLog(ProceedingJoinPoint joinPoint, long time, Integer status) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
SysLogOperation log = new SysLogOperation();
LogOperation annotation = method.getAnnotation(LogOperation.class);
if(annotation != null){
//注解上的描述
log.setOperation(annotation.value());
}
//登录用户信息
UserDetail user = SecurityUser.getUser();
if(user != null){
log.setCreator(user.getId());
log.setCreatorName(user.getUsername());
}
log.setType(LogTypeEnum.OPERATION.value());
log.setModule(moduleConfig.getName());
log.setStatus(status);
log.setRequestTime((int)time);
log.setCreateDate(new Date());
//请求相关信息
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
log.setIp(IpUtils.getIpAddr(request));
log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT));
log.setRequestUri(request.getRequestURI());
log.setRequestMethod(request.getMethod());
//请求参数
Object[] args = joinPoint.getArgs();
try{
String params = JSON.toJSONString(args[0]);
log.setRequestParams(params);
}catch (Exception e){
}
//保存到Redis队列里
logProducer.saveLog(log);
}
}

8
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java

@ -125,9 +125,11 @@ public enum EpmetErrorCode {
// 党建声音 前端提示 88段
DRAFT_CONTENT_IS_NULL(8801, "至少需要添加一个段落"),
ARTICLE_PUBLISH_ERROR(8801, "发布文章失败,请刷新重试"),
REPEATED_SUBMIT_ERROR(8998, "请勿重复提交"),
CUSTOMER_VALIDATE_ERROR(8999, "内部数据校验异常"),
DRAFT_CONTENT_FILENAME_NULL(8802, "附件名称不能为空"),
ARTICLE_PUBLISH_ERROR(8803, "发布文章失败,请刷新重试"),
REPEATED_SUBMIT_ERROR(8804, "请勿重复提交"),
CUSTOMER_VALIDATE_ERROR(8805, "内部数据校验异常"),
CATEGORY_IS_NULL(8806, "请设置分类"),
//公众号 865..开头的码
PUBLIC_NOT_EXISTS(8651,"手机号未注册,请先完成信息注册"),

153
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/RenExceptionHandler.java

@ -1,153 +0,0 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.epmet.commons.tools.exception;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.config.ModuleConfig;
import com.epmet.commons.tools.log.SysLogError;
import com.epmet.commons.tools.log.enums.LogTypeEnum;
import com.epmet.commons.tools.log.producer.LogProducer;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.HttpContextUtils;
import com.epmet.commons.tools.utils.IpUtils;
import com.epmet.commons.tools.utils.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.ExceptionHandler;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.Map;
/**
* 异常处理器
* 暂停使用,改用BaseRequestLogAspect
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
//@RestControllerAdvice
public class RenExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(RenExceptionHandler.class);
@Autowired
private ModuleConfig moduleConfig;
@Autowired
private LogProducer logProducer;
@Autowired
private LoginUserUtil loginUserUtil;
/**
* 处理自定义异常
* "code": 8000,
* "msg": "服务器开小差了...",
*/
@ExceptionHandler(RenException.class)
public Result handleRRException(RenException ex){
if (ex.getCode() > 8000) {
Result result=new Result().error(ex.getCode());
result.setData(ex.getInternalMsg());
return result;
}
logger.error(ExceptionUtils.getErrorStackTrace(ex));
Result result=new Result().error();
result.setData(ex.getInternalMsg());
return result;
// return new Result().error();
}
/**
* 处理自定义异常
* "code": 8000,
* "msg": "服务器开小差了...",
*/
@ExceptionHandler(ValidateException.class)
public Result handleVException(ValidateException ex){
logger.error(ExceptionUtils.getErrorStackTrace(ex));
Result result=new Result();
result.setCode(ex.getCode());
result.setMsg(ex.getMsg());
return result;
// return new Result().error();
}
/**
* 运行时异常拦截
* "code": 8000,
* "msg": "服务器开小差了...",
*/
@ExceptionHandler(RuntimeException.class)
public Result handleRuntimeException(RuntimeException ex){
logger.error(ExceptionUtils.getErrorStackTrace(ex));
Result result=new Result().error();
result.setData(ex.getMessage());
return result;
// return new Result().error();
}
/**
* 处理自定义异常
* "code": 10002,
* "msg": "数据库中已存在该记录",
*/
@ExceptionHandler(DuplicateKeyException.class)
public Result handleDuplicateKeyException(DuplicateKeyException ex){
logger.error(ExceptionUtils.getErrorStackTrace(ex));
return new Result().error(ErrorCode.DB_RECORD_EXISTS);
}
/**
* 异常
* "code": 8000,
* "msg": "服务器开小差了...",
*/
@ExceptionHandler(Exception.class)
public Result handleException(Exception ex){
logger.error(ExceptionUtils.getErrorStackTrace(ex));
// saveLog(ex);
Result result=new Result().error();
result.setData(ex.getMessage());
return result;
// return new Result().error();
}
/**
* 保存异常日志
*/
private void saveLog(Exception ex){
SysLogError log = new SysLogError();
log.setType(LogTypeEnum.ERROR.value());
log.setModule(moduleConfig.getName());
//请求相关信息
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT));
log.setRequestUri(request.getRequestURI());
log.setRequestMethod(request.getMethod());
log.setIp(IpUtils.getIpAddr(request));
Map<String, String> params = HttpContextUtils.getParameterMap(request);
if(MapUtil.isNotEmpty(params)){
log.setRequestParams(JSON.toJSONString(params));
}
//登录用户ID
log.setCreator(loginUserUtil.getLoginUserId());
//异常信息
log.setErrorInfo(ExceptionUtils.getErrorStackTrace(ex));
//保存到Redis队列里
log.setCreateDate(new Date());
logProducer.saveLog(log);
}
}

43
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/log/producer/LogProducer.java

@ -1,43 +0,0 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.epmet.commons.tools.log.producer;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.epmet.commons.tools.log.BaseLog;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.concurrent.*;
/**
* 日志通过redis队列异步保存到数据库
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Component
public class LogProducer {
@Autowired
private RedisUtils redisUtils;
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("log-producer-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(5, 200, 0L,TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
/**
* 保存Log到Redis消息队列
*/
public void saveLog(BaseLog log){
String key = RedisKeys.getSysLogKey();
//异步保存到队列
pool.execute(() -> redisUtils.leftPush(key, log, RedisUtils.NOT_EXPIRE));
}
}

19
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java

@ -43,13 +43,6 @@ public class RedisKeys {
return rootPrefix.concat("sys:security:user:").concat(String.valueOf(id));
}
/**
* 系统日志Key
*/
public static String getSysLogKey() {
return rootPrefix.concat("sys:log");
}
/**
* 系统资源Key
*/
@ -386,4 +379,16 @@ public class RedisKeys {
public static String getResiUserBadgeKey(String customerId, String userId) {
return rootPrefix.concat("badge:user:").concat(customerId).concat(":").concat(StringUtils.isBlank(userId) ? "*" : userId);
}
/**
* desc: 根据文件路径获取oss 文件缓存key
*
* @param path
* @return java.lang.String
* @author LiuJanJun
* @date 2021/3/30 9:56 上午
*/
public static String getOssFileKey(String path) {
return rootPrefix.concat("oss:temp:").concat(path);
}
}

2
epmet-gateway/src/main/resources/bootstrap.yml

@ -460,6 +460,8 @@ epmet:
- /epmet/ext/**
- /data/stats/**
- /data/aggregator/**
- /gov/voice/**
- /resi/voice/**
# 内部认证url白名单(在白名单中的,就不会再校验登录了)
internalAuthUrlsWhiteList:

6
epmet-module/epmet-activiti/epmet-activiti-server/src/main/java/com/epmet/controller/ActModelController.java

@ -8,7 +8,6 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
@ -55,7 +54,6 @@ public class ActModelController {
@PostMapping
@ApiOperation("新增模型")
@LogOperation("新增模型")
public Result save(@RequestBody ModelDTO dto) throws Exception{
//效验数据
ValidatorUtils.validateEntity(dto);
@ -67,7 +65,6 @@ public class ActModelController {
@PostMapping("deploy/{id}")
@ApiOperation("部署")
@LogOperation("部署")
public Result deploy(@PathVariable("id") String id) {
actModelService.deploy(id);
return new Result();
@ -75,14 +72,12 @@ public class ActModelController {
@GetMapping("export/{id}")
@ApiOperation("导出")
@LogOperation("导出")
public void export(@PathVariable("id") String id, @ApiIgnore HttpServletResponse response) {
actModelService.export(id, response);
}
@DeleteMapping
@ApiOperation("删除")
@LogOperation("删除")
public Result delete(@RequestBody String[] ids) {
for(String id : ids) {
actModelService.delete(id);
@ -92,7 +87,6 @@ public class ActModelController {
@GetMapping("image/{deploymentId}")
@ApiOperation(value = "查看流程图", produces="application/octet-stream")
@LogOperation("查看流程图")
public void viewDeployImage(@PathVariable("deploymentId") String deploymentId, @ApiIgnore HttpServletResponse response){
actModelService.deployImage(deploymentId, response);
}

6
epmet-module/epmet-activiti/epmet-activiti-server/src/main/java/com/epmet/controller/ActProcessController.java

@ -8,7 +8,6 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.page.PageData;
@ -82,7 +81,6 @@ public class ActProcessController {
@PostMapping("deploy")
@ApiOperation("部署流程文件")
@LogOperation("部署流程文件")
@ApiImplicitParam(name = "processFile", value = "流程文件", paramType = "query", dataType="file")
public Result deploy(@RequestParam("processFile") MultipartFile file) throws IOException {
if (file.isEmpty()) {
@ -95,7 +93,6 @@ public class ActProcessController {
}
@PutMapping("active/{id}")
@LogOperation("激活流程")
public Result active(@PathVariable("id") String id) {
actProcessService.active(id);
@ -104,7 +101,6 @@ public class ActProcessController {
@PutMapping("suspend/{id}")
@ApiOperation("挂起流程")
@LogOperation("挂起流程")
public Result suspend(@PathVariable("id") String id) {
actProcessService.suspend(id);
@ -113,7 +109,6 @@ public class ActProcessController {
@PostMapping("convertToModel/{id}")
@ApiOperation("将部署的流程转换为模型")
@LogOperation("将部署的流程转换为模型")
public Result convertToModel(@PathVariable("id") String id) throws Exception {
actProcessService.convertToModel(id);
@ -122,7 +117,6 @@ public class ActProcessController {
@DeleteMapping
@ApiOperation("删除流程")
@LogOperation("删除流程")
public Result delete(@RequestBody String[] deploymentIds) {
for(String deploymentId : deploymentIds) {
actProcessService.deleteDeployment(deploymentId);

4
epmet-module/epmet-activiti/epmet-activiti-server/src/main/java/com/epmet/controller/ActRunningController.java

@ -8,7 +8,6 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
@ -53,7 +52,6 @@ public class ActRunningController {
@DeleteMapping("{id}")
@ApiOperation("删除")
@LogOperation("删除")
@ApiImplicitParam(name = "id", value = "ID", paramType = "query", dataType="String")
public Result deleteInstance(@PathVariable("id") String id) {
actRunningService.delete(id);
@ -62,7 +60,6 @@ public class ActRunningController {
@PostMapping("start")
@ApiOperation("启动流程实例,依据流程定义KEY,启动流程实例")
@LogOperation("启动流程实例,依据流程定义KEY,启动流程实例")
@ApiImplicitParam(name = "key", value = "流程定义标识key", paramType = "query", dataType="String")
public Result<ProcessInstanceDTO> start(String key){
ProcessInstanceDTO dto = actRunningService.startProcess(key);
@ -71,7 +68,6 @@ public class ActRunningController {
@PostMapping("startOfBusinessKey")
@ApiOperation("启动流程实例,依据流程定义ID和业务唯一标示启动实例")
@LogOperation("启动流程实例,依据流程定义ID和业务唯一标示启动实例")
public Result<ProcessInstanceDTO> startOfBusinessKey(@RequestBody ProcessStartDTO processStartDTO){
ProcessInstanceDTO dto = actRunningService.startOfBusinessKey(processStartDTO);
return new Result().ok(dto);

2
epmet-module/epmet-activiti/epmet-activiti-server/src/main/java/com/epmet/controller/ActTaskController.java

@ -1,6 +1,5 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.page.PageData;
@ -82,7 +81,6 @@ public class ActTaskController {
*/
@GetMapping("task/{id}")
@ApiOperation("获取任务详情")
@LogOperation("获取任务详情")
public Result getTaskById(@PathVariable("id") String id){
TaskDTO task = actTaskService.taskDetail(id);
return new Result().ok(task);

5
epmet-module/epmet-activiti/epmet-activiti-server/src/main/java/com/epmet/demo/controller/CorrectionController.java

@ -1,6 +1,5 @@
package com.epmet.demo.controller;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
@ -59,7 +58,6 @@ public class CorrectionController {
@PostMapping
@ApiOperation("保存")
@LogOperation("保存")
public Result save(@RequestBody CorrectionDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
@ -72,7 +70,6 @@ public class CorrectionController {
@PutMapping
@ApiOperation("修改")
@LogOperation("修改")
public Result update(@RequestBody CorrectionDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
@ -84,7 +81,6 @@ public class CorrectionController {
@DeleteMapping
@ApiOperation("删除")
@LogOperation("删除")
public Result delete(@RequestBody Long[] ids){
//效验数据
AssertUtils.isArrayEmpty(ids, "id");
@ -96,7 +92,6 @@ public class CorrectionController {
@PostMapping("updateInstanceId")
@ApiOperation("更新实例ID")
@LogOperation("更新实例ID")
@ApiImplicitParams({
@ApiImplicitParam(name = "businessKey", value = "业务KEY", paramType = "query", required = true, dataType="String"),
@ApiImplicitParam(name = "processInstanceId", value = "实例ID", paramType = "query",required = true, dataType="String")

19
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/controller/ScheduleJobController.java

@ -8,7 +8,6 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
@ -66,8 +65,7 @@ public class ScheduleJobController {
@PostMapping
@ApiOperation("保存")
@LogOperation("保存")
public Result save(@RequestBody ScheduleJobDTO dto){
public Result save(@RequestBody ScheduleJobDTO dto){
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
scheduleJobService.save(dto);
@ -77,8 +75,7 @@ public class ScheduleJobController {
@PutMapping
@ApiOperation("修改")
@LogOperation("修改")
public Result update(@RequestBody ScheduleJobDTO dto){
public Result update(@RequestBody ScheduleJobDTO dto){
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
scheduleJobService.update(dto);
@ -88,8 +85,7 @@ public class ScheduleJobController {
@DeleteMapping
@ApiOperation("删除")
@LogOperation("删除")
public Result delete(@RequestBody Long[] ids){
public Result delete(@RequestBody Long[] ids){
scheduleJobService.deleteBatch(ids);
return new Result();
@ -97,8 +93,7 @@ public class ScheduleJobController {
@PutMapping("/run")
@ApiOperation("立即执行")
@LogOperation("立即执行")
public Result run(@RequestBody Long[] ids){
public Result run(@RequestBody Long[] ids){
scheduleJobService.run(ids);
return new Result();
@ -106,8 +101,7 @@ public class ScheduleJobController {
@PutMapping("/pause")
@ApiOperation("暂停")
@LogOperation("暂停")
public Result pause(@RequestBody Long[] ids){
public Result pause(@RequestBody Long[] ids){
scheduleJobService.pause(ids);
return new Result();
@ -115,8 +109,7 @@ public class ScheduleJobController {
@PutMapping("/resume")
@ApiOperation("恢复")
@LogOperation("恢复")
public Result resume(@RequestBody Long[] ids){
public Result resume(@RequestBody Long[] ids){
scheduleJobService.resume(ids);
return new Result();

1
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/controller/MailTemplateController.java

@ -9,7 +9,6 @@
package com.epmet.controller;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.annotation.LogOperation;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;

16
epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/form/RemoveFileFormDTO.java

@ -0,0 +1,16 @@
package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2021/3/30 9:51
*/
@Data
public class RemoveFileFormDTO implements Serializable {
private static final long serialVersionUID = 3889369412733647229L;
private String url;
}

6
epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/result/UploadImgResultDTO.java

@ -1,5 +1,6 @@
package com.epmet.dto.result;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
@ -12,4 +13,9 @@ import java.io.Serializable;
@Data
public class UploadImgResultDTO implements Serializable {
private String url;
/**
* 域名
*/
@JsonIgnore
private String domain;
}

8
epmet-module/epmet-oss/epmet-oss-server/pom.xml

@ -14,8 +14,7 @@
<properties>
<qiniu.version>7.2.22</qiniu.version>
<aliyun.oss.version>2.8.3</aliyun.oss.version>
<aliyun.core.version>3.2.2</aliyun.core.version>
<aliyun.oss.version>3.10.2</aliyun.oss.version>
<qcloud.cos.version>5.4.4</qcloud.cos.version>
<fastdfs.version>1.26.2</fastdfs.version>
</properties>
@ -82,11 +81,6 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${aliyun.core.version}</version>
</dependency>
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>

21
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AbstractCloudStorageService.java

@ -25,7 +25,17 @@ import java.util.UUID;
public abstract class AbstractCloudStorageService {
/** 云存储配置信息 */
CloudStorageConfig config;
/**
* desc: 获取oss域名
*
* @param privacy
* @return java.lang.String
* @author LiuJanJun
* @date 2021/3/30 10:05 上午
*/
public String getOssDomain(String privacy){
return null;
};
/**
* 文件路径
* @param prefix 前缀
@ -97,4 +107,13 @@ public abstract class AbstractCloudStorageService {
*/
public abstract void down(String privacyType) throws IOException;
/**
* 文件删除
* @author zhaoqifeng
* @date 2021/3/30 11:05
* @param objectName
* @return boolean
*/
public abstract boolean delete(String objectName, String privacyType);
}

74
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AliyunCloudStorageService.java

@ -8,7 +8,9 @@
package com.epmet.cloud;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.DownloadFileRequest;
import com.aliyun.oss.model.DownloadFileResult;
import com.epmet.commons.tools.exception.RenException;
@ -26,17 +28,44 @@ import java.io.InputStream;
*/
public class AliyunCloudStorageService extends AbstractCloudStorageService {
private OSS internalClient = null;
private OSS externalClient = null;
public AliyunCloudStorageService(CloudStorageConfig config){
this.config = config;
}
/**
* @Description 根据隐私类型获取属性传递internal的时候会返回内部的否则返回外部的即公开的
* @Description 根据隐私类型获取属性获取client
* @return
* @author wxz
* @date 2021.01.04 13:49
*/
private CloudStorageConfig.AliyunCloudStorageConfigProps getPropsByprivacyType(String privacyType) {
public OSS getOssClient(String privacyType) {
if (PrivacyType.INTERNAL.equalsIgnoreCase(privacyType)) {
if (internalClient == null){
CloudStorageConfig.AliyunCloudStorageConfigProps props = config.getAliyun().getInternal();
internalClient = new OSSClientBuilder().build(props.getAliyunEndPoint(), props.getAliyunAccessKeyId(),
props.getAliyunAccessKeySecret());
}
return internalClient;
} else {
if (externalClient == null) {
CloudStorageConfig.AliyunCloudStorageConfigProps props = config.getAliyun().getExternal();
externalClient = new OSSClient(props.getAliyunEndPoint(), props.getAliyunAccessKeyId(),
props.getAliyunAccessKeySecret());
}
return externalClient;
}
}
/**
* @Description 根据隐私类型获取属性传递internal的时候会返回内部的否则返回外部的即公开的
* @return
* @author wxz
* @date 2021.01.04 13:49
*/
public CloudStorageConfig.AliyunCloudStorageConfigProps getPropsByprivacyType(String privacyType) {
if (PrivacyType.INTERNAL.equalsIgnoreCase(privacyType)) {
return config.getAliyun().getInternal();
} else {
@ -44,6 +73,23 @@ public class AliyunCloudStorageService extends AbstractCloudStorageService {
}
}
/**
* desc: 获取oss域名
*
* @param privacy
* @return java.lang.String
* @author LiuJanJun
* @date 2021/3/30 10:05 上午
*/
@Override
public String getOssDomain(String privacy) {
if (PrivacyType.INTERNAL.equalsIgnoreCase(privacy)) {
return config.getAliyun().getInternal().getAliyunDomain();
} else {
return config.getAliyun().getExternal().getAliyunDomain();
}
}
@Override
public String upload(byte[] data, String path, String privacyType) {
return upload(new ByteArrayInputStream(data), path, privacyType);
@ -52,11 +98,10 @@ public class AliyunCloudStorageService extends AbstractCloudStorageService {
@Override
public String upload(InputStream inputStream, String path, String privacyType) {
CloudStorageConfig.AliyunCloudStorageConfigProps props = getPropsByprivacyType(privacyType);
OSSClient client = new OSSClient(props.getAliyunEndPoint(), props.getAliyunAccessKeyId(),
props.getAliyunAccessKeySecret());
OSS client = getOssClient(privacyType);
try {
client.putObject(props.getAliyunBucketName(), path, inputStream);
client.shutdown();
//client.shutdown();
} catch (Exception e){
throw new RenException(ModuleErrorCode.OSS_UPLOAD_FILE_ERROR, e, "");
}
@ -64,6 +109,20 @@ public class AliyunCloudStorageService extends AbstractCloudStorageService {
return props.getAliyunDomain() + "/" + path;
}
@Override
public boolean delete(String objectName,String privacyType) {
CloudStorageConfig.AliyunCloudStorageConfigProps props = getPropsByprivacyType(privacyType);
OSS client = getOssClient(privacyType);
try {
client.deleteObject(props.getAliyunBucketName(), objectName);
//client.shutdown();
} catch (Exception e){
return false;
}
return true;
}
@Override
public String uploadSuffix(byte[] data, String suffix, String privacyType) {
CloudStorageConfig.AliyunCloudStorageConfigProps props = getPropsByprivacyType(privacyType);
@ -79,8 +138,7 @@ public class AliyunCloudStorageService extends AbstractCloudStorageService {
@Override
public void down(String privacyType) throws IOException {
CloudStorageConfig.AliyunCloudStorageConfigProps props = getPropsByprivacyType(privacyType);
OSSClient client = new OSSClient(props.getAliyunEndPoint(), props.getAliyunAccessKeyId(),
props.getAliyunAccessKeySecret());
OSS client = getOssClient(privacyType);
try {
/*
@ -118,7 +176,7 @@ public class AliyunCloudStorageService extends AbstractCloudStorageService {
downloadRes.getObjectMetadata();
// 关闭OSSClient。
client.shutdown();
//client.shutdown();
} catch (Exception e){
throw new RenException(ModuleErrorCode.OSS_UPLOAD_FILE_ERROR, e, "");
} catch (Throwable throwable) {

14
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/FastDFSCloudStorageService.java

@ -65,4 +65,18 @@ public class FastDFSCloudStorageService extends AbstractCloudStorageService {
public void down(String privacyType) throws IOException {
}
/**
* 文件删除
*
* @param objectName
* @param privacyType
* @return boolean
* @author zhaoqifeng
* @date 2021/3/30 11:05
*/
@Override
public boolean delete(String objectName, String privacyType) {
return false;
}
}

14
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/LocalCloudStorageService.java

@ -58,4 +58,18 @@ public class LocalCloudStorageService extends AbstractCloudStorageService {
public void down(String privacyType) throws IOException {
}
/**
* 文件删除
*
* @param objectName
* @param privacyType
* @return boolean
* @author zhaoqifeng
* @date 2021/3/30 11:05
*/
@Override
public boolean delete(String objectName, String privacyType) {
return false;
}
}

31
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/OssFactory.java

@ -20,28 +20,29 @@ import com.epmet.utils.ModuleConstant;
*/
public final class OssFactory {
private static ParamsRemoteService paramsRemoteService;
private static AbstractCloudStorageService abstractCloudStorageService;
static {
OssFactory.paramsRemoteService = SpringContextUtils.getBean(ParamsRemoteService.class);
}
public static AbstractCloudStorageService build(){
//获取云存储配置信息
CloudStorageConfig config = paramsRemoteService.getValueObject(ModuleConstant.CLOUD_STORAGE_CONFIG_KEY, CloudStorageConfig.class);
if(config.getType() == OssTypeEnum.QINIU.value()){
return new QiniuCloudStorageService(config);
}else if(config.getType() == OssTypeEnum.ALIYUN.value()){
return new AliyunCloudStorageService(config);
}else if(config.getType() == OssTypeEnum.QCLOUD.value()){
return new QcloudCloudStorageService(config);
}else if(config.getType() == OssTypeEnum.FASTDFS.value()){
return new FastDFSCloudStorageService(config);
}else if(config.getType() == OssTypeEnum.LOCAL.value()){
return new LocalCloudStorageService(config);
if (abstractCloudStorageService == null){
//获取云存储配置信息
CloudStorageConfig config = paramsRemoteService.getValueObject(ModuleConstant.CLOUD_STORAGE_CONFIG_KEY, CloudStorageConfig.class);
if(config.getType() == OssTypeEnum.QINIU.value()){
abstractCloudStorageService = new QiniuCloudStorageService(config);
}else if(config.getType() == OssTypeEnum.ALIYUN.value()){
abstractCloudStorageService = new AliyunCloudStorageService(config);
}else if(config.getType() == OssTypeEnum.QCLOUD.value()){
abstractCloudStorageService = new QcloudCloudStorageService(config);
}else if(config.getType() == OssTypeEnum.FASTDFS.value()){
abstractCloudStorageService = new FastDFSCloudStorageService(config);
}else if(config.getType() == OssTypeEnum.LOCAL.value()){
abstractCloudStorageService = new LocalCloudStorageService(config);
}
}
return null;
return abstractCloudStorageService;
}
}

14
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QcloudCloudStorageService.java

@ -88,4 +88,18 @@ public class QcloudCloudStorageService extends AbstractCloudStorageService {
public void down(String privacyType) throws IOException {
}
/**
* 文件删除
*
* @param objectName
* @param privacyType
* @return boolean
* @author zhaoqifeng
* @date 2021/3/30 11:05
*/
@Override
public boolean delete(String objectName, String privacyType) {
return false;
}
}

14
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QiniuCloudStorageService.java

@ -82,4 +82,18 @@ public class QiniuCloudStorageService extends AbstractCloudStorageService {
public void down(String privacyType) throws IOException {
}
/**
* 文件删除
*
* @param objectName
* @param privacyType
* @return boolean
* @author zhaoqifeng
* @date 2021/3/30 11:05
*/
@Override
public boolean delete(String objectName, String privacyType) {
return false;
}
}

67
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java

@ -11,15 +11,19 @@ package com.epmet.controller;
import com.epmet.cloud.CloudStorageConfig;
import com.epmet.cloud.OssFactory;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
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.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AliyunGroup;
import com.epmet.commons.tools.validator.group.QcloudGroup;
import com.epmet.commons.tools.validator.group.QiniuGroup;
import com.epmet.dto.UploadDTO;
import com.epmet.dto.form.RemoveFileFormDTO;
import com.epmet.dto.result.UploadImgResultDTO;
import com.epmet.entity.OssEntity;
import com.epmet.enums.OssTypeEnum;
@ -32,6 +36,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.entity.ContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
@ -62,6 +67,8 @@ public class OssController {
private OssService ossService;
@Autowired
private ParamsRemoteService paramsRemoteService;
@Autowired
private RedisUtils redisUtils;
private final static String KEY = ModuleConstant.CLOUD_STORAGE_CONFIG_KEY;
@ -205,26 +212,57 @@ public class OssController {
return ossService.uploadImg(file, null);
}
/**
* desc: 党建声音模块 上传图片2M或附件5M
*
* @param file
* @return com.epmet.commons.tools.utils.Result<com.epmet.dto.result.UploadImgResultDTO>
* @author LiuJanJun
* @date 2021/3/29 4:56 下午
*/
@PostMapping("article/upload")
public Result<UploadImgResultDTO> uploadArticleImg(@RequestParam("file") MultipartFile file) {
// 校验文件类型
if (!MediaType.IMAGE_PNG_VALUE.equals(file.getContentType()) && !MediaType.IMAGE_JPEG_VALUE.equals(file.getContentType())
&& !ModuleConstant.FILE_CONTENT_TYPE_JPG.equals(file.getContentType()) ) {
log.error("uploadArticleImg file type:{} is not support 2 upload",file.getContentType() == null? null:file.getContentType());
// 校验文件类型 图片或pdf
if (!MediaType.IMAGE_PNG_VALUE.equals(file.getContentType())
&& !MediaType.IMAGE_JPEG_VALUE.equals(file.getContentType())
&& !ModuleConstant.FILE_CONTENT_TYPE_JPG.equals(file.getContentType())
&& !ModuleConstant.FILE_CONTENT_TYPE_PDF.equals(file.getContentType())) {
log.error("uploadArticleImg file type:{} is not support 2 upload", file.getContentType());
throw new RenException(EpmetErrorCode.OPER_UPLOAD_FILE_TYPE_ERROR.getCode()
, EpmetErrorCode.OPER_UPLOAD_FILE_TYPE_ERROR.getMsg());
}
// 校验文件体积,不超过2m
long maxSize = 2 * 1024 * 1024;
long size = file.getSize();
if (size > maxSize) {
throw new RenException(EpmetErrorCode.OPER_UPLOAD_FILE_OVER_SIZE.getCode()
, EpmetErrorCode.OPER_UPLOAD_FILE_OVER_SIZE.getMsg());
if (ModuleConstant.FILE_CONTENT_TYPE_PDF.equals(file.getContentType())) {
// 校验文件大小,不超过5m
long maxSize = 5 * 1024 * 1024;
if (size > maxSize) {
throw new RenException(EpmetErrorCode.OPER_UPLOAD_FILE_OVER_SIZE.getCode()
, EpmetErrorCode.OPER_UPLOAD_FILE_OVER_SIZE.getMsg());
}
} else {
// 校验文件大小,不超过2m
long maxSize = 2 * 1024 * 1024;
if (size > maxSize) {
throw new RenException(EpmetErrorCode.OPER_UPLOAD_FILE_OVER_SIZE.getCode()
, EpmetErrorCode.OPER_UPLOAD_FILE_OVER_SIZE.getMsg());
}
}
return ossService.uploadImg(file, null);
Result<UploadImgResultDTO> result = ossService.uploadImg(file, null);
long start = System.currentTimeMillis();
if (result != null && result.success() ){
UploadImgResultDTO data = result.getData();
if ( data!= null && StringUtils.isNotBlank(data.getUrl())){
String path = data.getUrl().replace(data.getDomain(), StrConstant.EPMETY_STR);
if (path.startsWith(StrConstant.SEPARATOR)){
path = path.replaceFirst(StrConstant.SEPARATOR,StrConstant.EPMETY_STR);
}
String fileName = data.getUrl().substring(data.getUrl().lastIndexOf(StrConstant.SEPARATOR)+1);
redisUtils.set(RedisKeys.getOssFileKey(fileName),path,RedisUtils.MINUTE_THIRTY_EXPIRE);
}
}
log.info("service setRedis:{}",System.currentTimeMillis()-start);
return result;
}
@ -321,4 +359,9 @@ public class OssController {
return ossService.uploadVoice(file);
}
@PostMapping("article/remove/file")
public Result<Boolean> articleRemoveFile(@RequestBody RemoveFileFormDTO formDTO) {
return new Result<Boolean>().ok(ossService.articleRemoveFile(formDTO));
}
}

4
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/dao/OssDao.java

@ -11,6 +11,7 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.OssEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 文件上传
@ -19,5 +20,6 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface OssDao extends BaseDao<OssEntity> {
OssEntity selectByUrl(@Param("url") String url);
void deleteDataById(@Param("id") String id);
}

10
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/OssService.java

@ -11,6 +11,7 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.RemoveFileFormDTO;
import com.epmet.dto.result.UploadImgResultDTO;
import com.epmet.entity.OssEntity;
import org.springframework.web.multipart.MultipartFile;
@ -35,4 +36,13 @@ public interface OssService extends BaseService<OssEntity> {
Result<UploadImgResultDTO> uploadVariedFile(MultipartFile file);
Result<UploadImgResultDTO> uploadVoice(MultipartFile file);
/**
* 删除附件
* @author zhaoqifeng
* @date 2021/3/30 9:55
* @param formDTO
* @return boolean
*/
boolean articleRemoveFile(RemoveFileFormDTO formDTO);
}

68
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/impl/OssServiceImpl.java

@ -8,23 +8,31 @@
package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.cloud.AbstractCloudStorageService;
import com.epmet.cloud.OssFactory;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constants.PrivacyType;
import com.epmet.dao.OssDao;
import com.epmet.dto.form.RemoveFileFormDTO;
import com.epmet.dto.result.UploadImgResultDTO;
import com.epmet.entity.OssEntity;
import com.epmet.exception.ModuleErrorCode;
import com.epmet.service.OssService;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@ -34,6 +42,10 @@ import java.util.Map;
@Service
public class OssServiceImpl extends BaseServiceImpl<OssDao, OssEntity> implements OssService {
private static final Logger logger = LoggerFactory.getLogger(OssServiceImpl.class);
@Autowired
private RedisUtils redisUtils;
@Override
public PageData<OssEntity> page(Map<String, Object> params) {
IPage<OssEntity> page = baseDao.selectPage(
@ -56,21 +68,32 @@ public class OssServiceImpl extends BaseServiceImpl<OssDao, OssEntity> implement
//上传文件
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
String url = null;
String ossDomain = null;
long start = System.currentTimeMillis();
try {
url = OssFactory.build().uploadSuffix(file.getBytes(), extension, privacy);
AbstractCloudStorageService storageService = OssFactory.build();
logger.info("build service:{}",System.currentTimeMillis()-start);
start = System.currentTimeMillis();
url = storageService.uploadSuffix(file.getBytes(), extension, privacy);
logger.info("service uploadSuffix:{}",System.currentTimeMillis()-start);
ossDomain = storageService.getOssDomain(privacy);
} catch (IOException e) {
e.printStackTrace();
logger.error("图片上传异常");
logger.error("图片上传异常", e);
throw new RenException("图片上传异常");
}
//保存文件信息
OssEntity ossEntity = new OssEntity();
ossEntity.setUrl(url);
start = System.currentTimeMillis();
baseDao.insert(ossEntity);
logger.info("service insert:{}",System.currentTimeMillis()-start);
//文件信息
UploadImgResultDTO dto = new UploadImgResultDTO();
dto.setUrl(url);
dto.setDomain(ossDomain);
return new Result<UploadImgResultDTO>().ok(dto);
}
@ -117,8 +140,7 @@ public class OssServiceImpl extends BaseServiceImpl<OssDao, OssEntity> implement
try {
url = OssFactory.build().uploadSuffix(file.getBytes(), extension, PrivacyType.INTERNAL);
} catch (IOException e) {
e.printStackTrace();
logger.error("文件上传异常");
logger.error("文件上传异常", e);
throw new RenException("文件上传异常");
}
//保存文件信息
@ -148,13 +170,13 @@ public class OssServiceImpl extends BaseServiceImpl<OssDao, OssEntity> implement
try {
url = OssFactory.build().uploadSuffix(file.getBytes(), extension, null);
} catch (IOException e) {
e.printStackTrace();
logger.error("语音上传异常");
logger.error("语音上传异常", e);
throw new RenException("语音上传异常");
}
//保存文件信息
OssEntity ossEntity = new OssEntity();
ossEntity.setUrl(url);
baseDao.insert(ossEntity);
//文件信息
@ -163,4 +185,36 @@ public class OssServiceImpl extends BaseServiceImpl<OssDao, OssEntity> implement
return new Result<UploadImgResultDTO>().ok(dto);
}
/**
* 删除附件
*
* @return boolean
* @author zhaoqifeng
* @date 2021/3/30 9:55
* @param formDTO
*/
@Override
public boolean articleRemoveFile(RemoveFileFormDTO formDTO) {
logger.info("articleRemoveFile param:{}", JSON.toJSONString(formDTO));
if (StringUtils.isBlank(formDTO.getUrl())){
logger.warn("articleRemoveFile param is empty");
return false;
}
String key = RedisKeys.getOssFileKey(formDTO.getUrl().substring(formDTO.getUrl().lastIndexOf(StrConstant.SEPARATOR) +1));
Object o = redisUtils.get(key);
if (o == null){
return false;
}
redisUtils.delete(key);
String fileName = (String) o;
logger.info("articleRemoveFile oss delete fileName:{}", fileName);
OssFactory.build().delete(fileName,null);
OssEntity entity = baseDao.selectByUrl(formDTO.getUrl());
if (entity != null){
baseDao.deleteDataById(entity.getId());
}
return true;
}
}

4
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/utils/ModuleConstant.java

@ -26,6 +26,10 @@ public interface ModuleConstant extends Constant {
* jpg文件类型
*/
String FILE_CONTENT_TYPE_JPG = "image/jpg";
/**
* pdf文件类型
*/
String FILE_CONTENT_TYPE_PDF = "application/pdf";
/**
* 项目附件-允许上传的文件类型

6
epmet-module/epmet-oss/epmet-oss-server/src/main/resources/mapper/SysOssDao.xml

@ -2,5 +2,11 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.OssDao">
<delete id="deleteDataById">
delete from sys_oss where id = #{id}
</delete>
<select id="selectByUrl" resultType="com.epmet.entity.OssEntity">
select id, created_time from sys_oss where url = #{url}
</select>
</mapper>

16
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ArticleContentDTO.java

@ -17,9 +17,10 @@
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
@ -54,10 +55,19 @@ public class ArticleContentDTO implements Serializable {
private String content;
/**
* 内容类型 图片img文字text
* 内容类型 图片img文字text文件file
*/
private String contentType;
/**
* desc: 请描述类的业务用途
*
* @param null
* @return
* @author LiuJanJun
* @date 2021/3/29 5:42 下午
*/
/**
* 审核状态 通过:pass失败:fail审核中auditing
*/
@ -103,4 +113,4 @@ public class ArticleContentDTO implements Serializable {
*/
private Date updatedTime;
}
}

7
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/DraftContentDTO.java

@ -17,9 +17,10 @@
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
@ -54,7 +55,7 @@ public class DraftContentDTO implements Serializable {
private String content;
/**
* 内容类型 图片img文字text
* 内容类型 图片img文字text文件file
*/
private String contentType;
@ -103,4 +104,4 @@ public class DraftContentDTO implements Serializable {
*/
private Date updatedTime;
}
}

11
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/DraftContentFromDTO.java

@ -67,14 +67,19 @@ public class DraftContentFromDTO implements Serializable {
*/
private String draftContentId;
/**
* 内容
* 内容 当为非文字时存放oss链接地址
*/
@Length(max = 1000, message = "每段文字最长为1000个字")
private String content;
/**
* 内容类型 图片img文字text
* 内容类型 图片img文字text文件file
*/
private String contentType;
/**
* 文件名称
*/
private String fileName;
}
}
}

7
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/ArticleContentResultDTO.java

@ -15,7 +15,7 @@ public class ArticleContentResultDTO implements Serializable {
private static final long serialVersionUID = 2853197212163051558L;
/**
* 内容类型图片img文字text
* 内容类型图片img文字text文件file
* */
private String contentType;
@ -23,4 +23,9 @@ public class ArticleContentResultDTO implements Serializable {
* 内容
* */
private String content;
/**
* 文件名称
* */
private String fileName;
}

7
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/DraftContentDetailDTO.java

@ -24,10 +24,15 @@ public class DraftContentDetailDTO implements Serializable {
private String content;
/**
* 内容类型 图片img文字text
* 内容类型 图片img文字text文件file
*/
private String contentType;
/**
* 文件名称
*/
private String fileName;
/**
* 内容序号
*/

7
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GovArticleContentDTO.java

@ -14,10 +14,15 @@ import java.io.Serializable;
public class GovArticleContentDTO implements Serializable {
private static final long serialVersionUID = 1519014754254863006L;
/**
* 内容类型图片img文字text
* 内容类型图片img文字text; 文件file
*/
private String contentType;
/**
* 文件名称
*/
private String fileName;
/**
* 内容
*/

7
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GovDraftContentDTO.java

@ -15,10 +15,15 @@ public class GovDraftContentDTO implements Serializable {
private static final long serialVersionUID = 5653062658148122552L;
/**
* 内容类型图片img文字text
* 内容类型 图片img文字text文件file
*/
private String contentType;
/**
* 文件名称
*/
private String fileName;
/**
* 内容
*/

6
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/constant/DraftConstant.java

@ -10,7 +10,7 @@ package com.epmet.constant;
/**
* 常量
*
*
* @author sun
* @since 1.0.0
*/
@ -66,6 +66,10 @@ public interface DraftConstant {
* 内容类型-文字
*/
String TEXT = "text";
/**
* 内容类型-文件
*/
String FILE = "file";
/**
* 草稿预览内容大小长度

10
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/ArticleContentEntity.java

@ -18,13 +18,10 @@
package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 文章内容表
*
@ -54,10 +51,15 @@ public class ArticleContentEntity extends BaseEpmetEntity {
private String content;
/**
* 内容类型 图片img文字text
* 内容类型 图片img文字text文件file
*/
private String contentType;
/**
* 文件名称
*/
private String fileName;
/**
* 审核状态 通过:pass失败:fail审核中auditing
*/

10
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/DraftContentEntity.java

@ -18,13 +18,10 @@
package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 草稿内容表
*
@ -54,7 +51,7 @@ public class DraftContentEntity extends BaseEpmetEntity {
private String content;
/**
* 内容类型 图片img文字text
* 内容类型 图片img文字text文件file
*/
private String contentType;
@ -73,4 +70,9 @@ public class DraftContentEntity extends BaseEpmetEntity {
*/
private Integer orderNum;
/**
* 文件名称
*/
private String fileName;
}

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

@ -460,6 +460,9 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
for (int i = NumConstant.ZERO; i < contentList.size(); i++) {
DraftContentFromDTO.DraftContentDTO content = contentList.get(i);
if (DraftConstant.FILE.equals(content.getContentType()) && StringUtils.isBlank(content.getFileName())){
throw new RenException(EpmetErrorCode.DRAFT_CONTENT_FILENAME_NULL.getCode());
}
DraftContentEntity entity = ConvertUtils.sourceToTarget(content, DraftContentEntity.class);
entity.setId(content.getDraftContentId());
entity.setCustomerId(tokenDto.getCustomerId());
@ -1377,4 +1380,4 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
});
articleTagsDao.addArticleTags(addArticleTags);
}
}
}

6
epmet-module/gov-voice/gov-voice-server/src/main/resources/db/migration/V0.0.3__addpdf.sql

@ -0,0 +1,6 @@
ALTER TABLE `epmet_gov_voice`.`draft_content`
MODIFY COLUMN `CONTENT_TYPE` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '内容类型 图片:img;文字:text;文件:file;' AFTER `CONTENT`,
ADD COLUMN `FILE_NAME` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件名称' AFTER `CONTENT_TYPE`;
ALTER TABLE `epmet_gov_voice`.`article_content`
MODIFY COLUMN `CONTENT_TYPE` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '内容类型 图片:img;文字:text;文件:file;' AFTER `CONTENT`,
ADD COLUMN `FILE_NAME` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件名称' AFTER `CONTENT_TYPE`;

8
epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleDao.xml

@ -25,7 +25,8 @@
<select id="queryGovArticleContent" parameterType="java.lang.String" resultType="com.epmet.dto.result.GovArticleContentDTO">
SELECT
ac.CONTENT_TYPE,
ac.CONTENT
ac.CONTENT,
ac.FILE_NAME
FROM
article_content ac
WHERE
@ -275,6 +276,7 @@
<collection property="articleContentList" ofType="com.epmet.dto.result.ArticleContentResultDTO">
<result property="content" column="CONTENT" />
<result property="contentType" column="CONTENT_TYPE" />
<result property="fileName" column="FILE_NAME" />
</collection>
</resultMap>
@ -288,6 +290,7 @@
IFNULL(art.TAGS,'') AS tags,
content2.CONTENT,
content2.CONTENT_TYPE,
content2.FILE_NAME,
(SELECT COUNT(1) FROM ARTICLE_VISIT_RECORD WHERE DEL_FLAG = '0' AND ARTICLE_ID = #{articleId} AND GRID_ID = #{gridId}) AS visitRecordCount,
art.CUSTOMER_ID
FROM
@ -297,6 +300,7 @@
content.ARTICLE_ID,
content.CONTENT,
content.CONTENT_TYPE,
content.FILE_NAME,
content.ORDER_NUM
FROM
ARTICLE_CONTENT content
@ -333,4 +337,4 @@
AND a.draft_id = #{draftId}
</select>
</mapper>
</mapper>

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

@ -9,6 +9,7 @@
CUSTOMER_ID,
CONTENT,
CONTENT_TYPE,
FILE_NAME,
AUDIT_STATUS,
AUDIT_REASON,
ORDER_NUM
@ -28,7 +29,8 @@
SELECT
ID,
CONTENT,
CONTENT_TYPE
CONTENT_TYPE,
FILE_NAME
FROM
DRAFT_CONTENT
WHERE
@ -41,4 +43,4 @@
DELETE FROM draft_content WHERE DRAFT_ID = #{draftId,jdbcType=VARCHAR}
</delete>
</mapper>
</mapper>

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

@ -28,6 +28,7 @@
dc.ID,
dc.CONTENT,
dc.CONTENT_TYPE,
dc.FILE_NAME,
dc.ORDER_NUM,
(case
when dc.AUDIT_STATUS is null then ""
@ -165,6 +166,7 @@
SELECT
dc.CONTENT_TYPE,
dc.CONTENT,
dc.FILE_NAME,
dc.AUDIT_STATUS,
dc.AUDIT_REASON
FROM
@ -190,4 +192,4 @@
</set>
where id=#{draftId,jdbcType=VARCHAR}
</update>
</mapper>
</mapper>

Loading…
Cancel
Save