Browse Source

Merge remote-tracking branch 'remotes/市北/release' into 市北生产

feature/teamB_zz_wgh
jianjun 4 years ago
parent
commit
250c1467ea
  1. 32
      epmet-auth/src/main/java/com/epmet/StringRandomUtils.java
  2. 24
      epmet-auth/src/main/java/com/epmet/controller/LoginController.java
  3. 10
      epmet-auth/src/main/java/com/epmet/service/CaptchaService.java
  4. 20
      epmet-auth/src/main/java/com/epmet/service/impl/CaptchaServiceImpl.java
  5. 55
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/ResultDataResolver.java
  6. 14
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java
  7. 12
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenExtractDailyController.java
  8. 71
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/external/IndexCalculateController.java
  9. 10
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java
  10. 7
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/biz/impl/BizDataStatsServiceImpl.java
  11. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/CalCpcIndexServiceImpl.java
  12. 78
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexOriginExtractServiceImpl.java
  13. 29
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginExtractServiceImpl.java
  14. 56
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenExtractServiceImpl.java
  15. 5
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/IndexCalculateService.java
  16. 31
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/impl/IndexCalculateServiceImpl.java
  17. 1
      epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/ExternalAppServiceImpl.java
  18. 2
      epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/ExternalAppDao.xml
  19. 4
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/ShiftProjectFormDTO.java
  20. 4
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java
  21. 3
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueService.java
  22. 37
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
  23. 2
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffServiceImpl.java
  24. 4
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectSatisfactionStatisticsServiceImpl.java
  25. 20
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  26. 26
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/TopicDraftServiceImpl.java

32
epmet-auth/src/main/java/com/epmet/StringRandomUtils.java

@ -0,0 +1,32 @@
package com.epmet;
import com.epmet.commons.tools.constant.StrConstant;
/**
* desc:随机生成字母
*
* @author: LiuJanJun
* @date: 2022/3/1 5:16 下午
* @version: 1.0
*/
public class StringRandomUtils {
public static String getRandomStr(int length){
String result = StrConstant.EPMETY_STR;
//小写字母范围: 97~122
for (int i = 0; i < length; i++) {
int randomNumber = 97 + (int) (Math.random()* (122+1-97));
result += (char)randomNumber;
}
return result;
}
public static void main(String[] args) {
StringRandomUtils test = new StringRandomUtils();
//测试
for (int i = 0; i < 1000000; i++) {
System.out.println(getRandomStr(5));
}
}
}

24
epmet-auth/src/main/java/com/epmet/controller/LoginController.java

@ -68,30 +68,6 @@ public class LoginController {
} }
} }
/**
* @description 基层治理平台登录验证码
*
* @param response
* @return
* @author wxz
* @date 2021.10.25 14:19:40
*/
@GetMapping("ic-login-captcha")
public void icLoginCaptcha(HttpServletResponse response, String uuid) throws IOException {
try {
//生成图片验证码
BufferedImage image = captchaService.createIcLoginCaptcha(uuid);
response.reset();
response.setHeader("Cache-Control", "no-store, no-cache");
response.setContentType("image/jpeg");
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
out.close();
} catch (IOException e) {
log.error("获取登陆验证码异常", e);
}
}
/** /**
* @param formDTO * @param formDTO
* @return com.epmet.commons.tools.utils.Result<java.lang.String> * @return com.epmet.commons.tools.utils.Result<java.lang.String>

10
epmet-auth/src/main/java/com/epmet/service/CaptchaService.java

@ -23,16 +23,6 @@ public interface CaptchaService {
*/ */
BufferedImage create(String uuid); BufferedImage create(String uuid);
/**
* @description 基层治理平台登录验证码
*
* @param
* @return
* @author wxz
* @date 2021.10.25 14:15:30
*/
BufferedImage createIcLoginCaptcha(String uuid);
/** /**
* 验证码效验 * 验证码效验
* @param uuid uuid * @param uuid uuid

20
epmet-auth/src/main/java/com/epmet/service/impl/CaptchaServiceImpl.java

@ -8,16 +8,17 @@
package com.epmet.service.impl; package com.epmet.service.impl;
import com.google.code.kaptcha.Producer; import com.epmet.StringRandomUtils;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.redis.CaptchaRedis; import com.epmet.redis.CaptchaRedis;
import com.epmet.service.CaptchaService; import com.epmet.service.CaptchaService;
import com.google.code.kaptcha.Producer;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.UUID;
/** /**
* 验证码 * 验证码
@ -35,8 +36,8 @@ public class CaptchaServiceImpl implements CaptchaService {
@Override @Override
public BufferedImage create(String uuid) { public BufferedImage create(String uuid) {
//生成验证码 //生成验证码 //producer.createText();
String captcha = producer.createText(); String captcha = StringRandomUtils.getRandomStr(NumConstant.FIVE);
//logger.info("uuid:"+uuid+",生成的验证码:"+captcha); //logger.info("uuid:"+uuid+",生成的验证码:"+captcha);
//保存验证码 //保存验证码
captchaRedis.set(uuid, captcha); captchaRedis.set(uuid, captcha);
@ -44,17 +45,6 @@ public class CaptchaServiceImpl implements CaptchaService {
return producer.createImage(captcha); return producer.createImage(captcha);
} }
@Override
public BufferedImage createIcLoginCaptcha(String uuid) {
//生成验证码
String captchaText = producer.createText();
//logger.info("uuid:"+uuid+",生成的验证码:"+captcha);
//保存验证码
captchaRedis.setIcLoginCaptcha(uuid, captchaText);
return producer.createImage(captchaText);
}
@Override @Override
public boolean validate(String uuid, String code) { public boolean validate(String uuid, String code) {
String captcha = captchaRedis.get(uuid); String captcha = captchaRedis.get(uuid);

55
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/ResultDataResolver.java

@ -1,9 +1,12 @@
package com.epmet.commons.tools.feign; package com.epmet.commons.tools.feign;
import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* Feign请求结果解析器 * Feign请求结果解析器
@ -12,30 +15,30 @@ public interface ResultDataResolver {
/** /**
* @Description 获取Result种的data如果失败(返回result为null或者result.success为false)那么返回null * @Description 获取Result种的data如果失败(返回result为null或者result.success为false)那么返回null
* @return * @return data数据
* @author wxz * @author wxz
* @date 2021.06.07 22:45 * @date 2021.06.07 22:45
*/ */
//default <R> R tryGetResultData(Result<R> result, String targetServiceName) { default <R> R getResultDataOrReturnNull(Result<R> result, String targetServiceName) {
// Logger logger = LoggerFactory.getLogger(ResultDataResolver.class); Logger logger = LoggerFactory.getLogger(ResultDataResolver.class);
// if (result == null) { if (result == null) {
// logger.error("调用{}服务发生错误,返回Result为null", targetServiceName); logger.error("调用{}服务发生错误,返回Result为null", targetServiceName);
// return null; return null;
// } }
// if (!result.success()) { if (!result.success()) {
// logger.error("调用{}服务发生错误,错误信息:{}", targetServiceName, result.getInternalMsg()); logger.error("调用{}服务发生错误,内部信息:{},错误信息:{}", targetServiceName, result.getInternalMsg(), result.getMsg());
// return null; return null;
// } }
// return result.getData(); return result.getData();
//} }
/** /**
* @Description * @Description 解析Result中的结果如果请求上游服务返回的结果不成功则抛出异常
* @return * @return data数据
* @param targetServiceName 目标service名称 * @param targetServiceName 目标service名称
* @param errorCode 错误码可以为空为空则使用上游服务抛出的错误码 * @param errorCode 错误码可以为空为空则使用8000
* @param errorInternalMsg 内部错误信息可以为空为空则使用上游服务抛出的异常信息 * @param errorInternalMsg 内部错误信息可以为空为空则internalMsg=""
* @param showMsg 展示给前端程序的错误信息可以为空为空则根据errorCode给定错误msg信息 * @param showMsg 展示给前端程序的错误信息可以为空为空则showMsg=""
* @author wxz * @author wxz
* @date 2021.06.07 22:45 * @date 2021.06.07 22:45
*/ */
@ -43,11 +46,25 @@ public interface ResultDataResolver {
if (result == null) { if (result == null) {
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), "调用{}服务发生错误,返回Result为null", targetServiceName); throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), "调用{}服务发生错误,返回Result为null", targetServiceName);
} }
if (!result.success()) {
// 考虑到:上游服务抛出的异常代码和错误消息并不一定适用于当前服务,并且上有服务的错误消息弹出之后可能给用户造成困扰,
// 因此,当前服务抛出异常的时候,不再继承上游服务返回的错误码和错误消息
/*if (!result.success()) {
Integer finalErrorCode = errorCode == null ? result.getCode() : errorCode; Integer finalErrorCode = errorCode == null ? result.getCode() : errorCode;
String finalErrorInternalMsg = StringUtils.isBlank(errorInternalMsg) ? result.getInternalMsg() : errorInternalMsg; String finalErrorInternalMsg = StringUtils.isBlank(errorInternalMsg) ? result.getInternalMsg() : errorInternalMsg;
throw new RenException(finalErrorCode, finalErrorInternalMsg, showMsg, RenException.MessageMode.CODE_INTERNAL_EXTERNAL); throw new RenException(finalErrorCode, finalErrorInternalMsg, showMsg, RenException.MessageMode.CODE_INTERNAL_EXTERNAL);
}*/
if (!result.success()) {
// 如果不通过参数指定code,则默认使用8000服务器开小差
Integer finalErrorCode = errorCode == null ? EpmetErrorCode.SERVER_ERROR.getCode() : errorCode;
String finalErrorInternalMsg = StringUtils.isBlank(errorInternalMsg) ? "" : errorInternalMsg;
String finalShowMsg = StringUtils.isBlank(showMsg) ? "" : showMsg;
throw new EpmetException(finalErrorCode, finalErrorInternalMsg, finalShowMsg);
} }
return result.getData(); return result.getData();
} }

14
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java

@ -1098,12 +1098,6 @@ public class DemoController {
return new Result(); return new Result();
} }
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("ScreenExtractServiceImpl-pool-%d").build();
ExecutorService threadPool = new ThreadPoolExecutor(3, 6,
10L, TimeUnit.MINUTES,
new LinkedBlockingQueue<>(500), namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
@Autowired @Autowired
private ScreenProjectCategoryGridAndOrgDailyService screenProjectCategoryGridAndOrgDailyService; private ScreenProjectCategoryGridAndOrgDailyService screenProjectCategoryGridAndOrgDailyService;
@ -1118,20 +1112,20 @@ public class DemoController {
if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){ if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){
List<String> daysBetween = DateUtils.getDaysBetween(startDate, endDate); List<String> daysBetween = DateUtils.getDaysBetween(startDate, endDate);
daysBetween.forEach(d -> { daysBetween.forEach(d -> {
threadPool.submit(() -> { executorService.submit(() -> {
screenProjectCategoryGridAndOrgDailyService.extractCategoryProjectGridData(customerId,d); screenProjectCategoryGridAndOrgDailyService.extractCategoryProjectGridData(customerId,d);
}); });
threadPool.submit(() -> { executorService.submit(() -> {
screenProjectCategoryGridAndOrgDailyService.extractCategoryProjectOrgData(customerId,d); screenProjectCategoryGridAndOrgDailyService.extractCategoryProjectOrgData(customerId,d);
}); });
result.add(d); result.add(d);
redisUtils.hSet(RedisKeys.getBackDoorbizExcuteResult("gridandorgdailynew"),customerId,result,3*24*60*60L); redisUtils.hSet(RedisKeys.getBackDoorbizExcuteResult("gridandorgdailynew"),customerId,result,3*24*60*60L);
}); });
}else { }else {
threadPool.submit(() -> { executorService.submit(() -> {
screenProjectCategoryGridAndOrgDailyService.extractCategoryProjectGridData(customerId,dateId); screenProjectCategoryGridAndOrgDailyService.extractCategoryProjectGridData(customerId,dateId);
}); });
threadPool.submit(() -> { executorService.submit(() -> {
screenProjectCategoryGridAndOrgDailyService.extractCategoryProjectOrgData(customerId,dateId); screenProjectCategoryGridAndOrgDailyService.extractCategoryProjectOrgData(customerId,dateId);
}); });
result.add(dateId); result.add(dateId);

12
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenExtractDailyController.java

@ -5,7 +5,6 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.extract.form.ExtractOriginFormDTO; import com.epmet.dto.extract.form.ExtractOriginFormDTO;
import com.epmet.dto.extract.form.ExtractScreenFormDTO; import com.epmet.dto.extract.form.ExtractScreenFormDTO;
import com.epmet.service.evaluationindex.extract.toscreen.ScreenExtractService; import com.epmet.service.evaluationindex.extract.toscreen.ScreenExtractService;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@ -13,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.*; import java.util.concurrent.ExecutorService;
/** /**
* @Author zxc * @Author zxc
@ -23,13 +22,10 @@ import java.util.concurrent.*;
@RestController @RestController
@RequestMapping("screenextract") @RequestMapping("screenextract")
public class ScreenExtractDailyController { public class ScreenExtractDailyController {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("ScreenExtractDailyController-pool-%d").build();
ExecutorService threadPool = new ThreadPoolExecutor(1, 1,
10L, TimeUnit.MINUTES,
new LinkedBlockingQueue<>(500), namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
@Autowired @Autowired
private ScreenExtractService screenExtractService; private ScreenExtractService screenExtractService;
@Autowired
private ExecutorService executorService;
/** /**
* @param extractOriginFormDTO * @param extractOriginFormDTO
@ -39,7 +35,7 @@ public class ScreenExtractDailyController {
*/ */
@PostMapping("extractdailyall") @PostMapping("extractdailyall")
public Result screenExtractDaily(@RequestBody ExtractOriginFormDTO extractOriginFormDTO) { public Result screenExtractDaily(@RequestBody ExtractOriginFormDTO extractOriginFormDTO) {
threadPool.submit(() -> { executorService.submit(() -> {
log.info("screenExtractDaily start,param:{}", JSON.toJSONString(extractOriginFormDTO)); log.info("screenExtractDaily start,param:{}", JSON.toJSONString(extractOriginFormDTO));
try { try {
screenExtractService.extractDailyAll(extractOriginFormDTO); screenExtractService.extractDailyAll(extractOriginFormDTO);

71
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/external/IndexCalculateController.java

@ -1,5 +1,6 @@
package com.epmet.controller.external; package com.epmet.controller.external;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.enums.EnvEnum; import com.epmet.commons.tools.enums.EnvEnum;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.RedisKeys; import com.epmet.commons.tools.redis.RedisKeys;
@ -16,7 +17,6 @@ import com.epmet.model.CalculateFlagModel;
import com.epmet.service.evaluationindex.indexcal.CpcIndexCalculateService; import com.epmet.service.evaluationindex.indexcal.CpcIndexCalculateService;
import com.epmet.service.evaluationindex.indexcal.IndexCalculateService; import com.epmet.service.evaluationindex.indexcal.IndexCalculateService;
import com.epmet.util.DimIdGenerator; import com.epmet.util.DimIdGenerator;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -27,7 +27,8 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.*; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
/** /**
* 指标计算controller * 指标计算controller
@ -39,13 +40,6 @@ import java.util.concurrent.*;
@RestController @RestController
@RequestMapping("indexcalculate") @RequestMapping("indexcalculate")
public class IndexCalculateController { public class IndexCalculateController {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("indexcalculate-pool-%d").build();
ExecutorService singleThreadPool = new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
@Autowired @Autowired
private IndexCalculateService indexCalculateService; private IndexCalculateService indexCalculateService;
@ -54,6 +48,9 @@ public class IndexCalculateController {
@Autowired @Autowired
private RedisUtils redisUtils; private RedisUtils redisUtils;
@Autowired
private ExecutorService executorService;
// 计算同步锁 // 计算同步锁
private Object statsCalLock = new Object(); private Object statsCalLock = new Object();
@ -68,7 +65,7 @@ public class IndexCalculateController {
CalculateFlagModel flag = (CalculateFlagModel) redisUtils.get(RedisKeys.getCustomerStatsCalFlag(customerId)); CalculateFlagModel flag = (CalculateFlagModel) redisUtils.get(RedisKeys.getCustomerStatsCalFlag(customerId));
flag.setStatus(CalculateStatus.PENDDING); flag.setStatus(CalculateStatus.PENDDING);
redisUtils.set(RedisKeys.getCustomerStatsCalFlag(customerId), flag); redisUtils.set(RedisKeys.getCustomerStatsCalFlag(customerId), flag);
log.info("客户【%s】正在执行计算,实例发生重启,修改计算状态为:calculation->pendding", customerId); log.error("客户【%s】正在执行计算,实例发生重启,修改计算状态为:calculation->pendding", customerId);
}); });
} }
@ -97,7 +94,7 @@ public class IndexCalculateController {
} }
/** /**
* 按照客户计算所有指标(按照月份) * 这个是外部客户主动调用的方法入口 按照客户计算所有指标(按照月份)
* *
* @param formDTO * @param formDTO
* @return com.epmet.commons.tools.utils.Result * @return com.epmet.commons.tools.utils.Result
@ -112,6 +109,35 @@ public class IndexCalculateController {
return new Result<Boolean>().ok(true); return new Result<Boolean>().ok(true);
} }
@PostMapping("calSingle")
public Result<Boolean> calculateSingle(@RequestBody CalculateCommonFormDTO formDTO) {
long start = System.currentTimeMillis();
try {
ValidatorUtils.validateEntity(formDTO);
Boolean aBoolean = indexCalculateService.indexCalculate(formDTO);
HttpClientManager.getInstance().sendAlarmMsg(EnvEnum.getCurrentEnv().getName() + "客户Id:" + formDTO.getCustomerId() + ";monthId:" + formDTO.getMonthId() + ",calculateAll全部指标计算完成,是否成功:" + aBoolean + ",总耗时:" + (System.currentTimeMillis() - start) / 1000 + "秒");
if (aBoolean) {
return new Result<Boolean>().ok(true);
}
} catch (Exception e) {
return new Result<Boolean>().error(e.getMessage());
}
return new Result<Boolean>().error("指标计算失败");
}
/**
* desc:异步 连续计算[指定或所有内部客户][多个月份]的指标得分入口 适用于公式调整后或之前计算错误 统一计算
* @param formDTO
* @return
* @remark:不要轻易调用 因为异步 怕有冲突
*/
@PostMapping("warn/moreStats")
public Result indexStatistics(@RequestBody IndexStatisticsFormDTO formDTO){
log.error("moreStats 不要轻易调用 因为异步 怕有冲突,参数:{}", JSON.toJSONString(formDTO));
indexCalculateService.indexStatistics(formDTO);
return new Result();
}
/** /**
* 指标计算 * 指标计算
* *
@ -142,7 +168,7 @@ public class IndexCalculateController {
* @return * @return
*/ */
private void submitCalculate(CalculateCommonFormDTO formDTO) { private void submitCalculate(CalculateCommonFormDTO formDTO) {
Future<?> future = singleThreadPool.submit(() -> { Future<?> future = executorService.submit(() -> {
try { try {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
Boolean aBoolean = indexCalculateService.indexCalculate(formDTO); Boolean aBoolean = indexCalculateService.indexCalculate(formDTO);
@ -202,21 +228,6 @@ public class IndexCalculateController {
return new Result(); return new Result();
} }
@PostMapping("reAll")
public Result<Boolean> calculateAll(@RequestBody CalculateCommonFormDTO formDTO) {
long start = System.currentTimeMillis();
try {
Boolean aBoolean = indexCalculateService.indexCalculate(formDTO);
HttpClientManager.getInstance().sendAlarmMsg(EnvEnum.getCurrentEnv().getName() + "客户Id:" + formDTO.getCustomerId() + ";monthId:" + formDTO.getMonthId() + ",calculateAll全部指标计算完成,是否成功:" + aBoolean + ",总耗时:" + (System.currentTimeMillis() - start) / 1000 + "秒");
if (aBoolean) {
return new Result<Boolean>().ok(true);
}
} catch (Exception e) {
return new Result<Boolean>().error(e.getMessage());
}
return new Result<Boolean>().error("指标计算失败");
}
/** /**
* desc计算党员指标分数 * desc计算党员指标分数
* *
@ -343,12 +354,6 @@ public class IndexCalculateController {
return new Result(); return new Result();
}*/ }*/
@PostMapping("indexstatistics")
public Result indexStatistics(@RequestBody IndexStatisticsFormDTO formDTO){
indexCalculateService.indexStatistics(formDTO);
return new Result();
}
/** /**
* @return com.epmet.commons.tools.utils.Result * @return com.epmet.commons.tools.utils.Result
* @param formDTO * @param formDTO

10
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.epmet.commons.rocketmq.constants.MQUserPropertys; import com.epmet.commons.rocketmq.constants.MQUserPropertys;
import com.epmet.commons.rocketmq.messages.DisputeProcessMQMsg; import com.epmet.commons.rocketmq.messages.DisputeProcessMQMsg;
import com.epmet.commons.rocketmq.messages.ProjectChangedMQMsg; import com.epmet.commons.rocketmq.messages.ProjectChangedMQMsg;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.distributedlock.DistributedLock; import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
@ -111,12 +112,19 @@ public class ProjectChangedCustomListener implements MessageListenerConcurrently
String customerId = msgObj.getCustomerId(); String customerId = msgObj.getCustomerId();
distributedLock = SpringContextUtils.getBean(DistributedLock.class); distributedLock = SpringContextUtils.getBean(DistributedLock.class);
lock = distributedLock.getLock(String.format("lock:project_changed:%s:%s", customerId, msgObj.getProjectId()) lock = distributedLock.getLock(String.format("lock:project_changed:%s:%s", customerId, msgObj.getProjectId())
,30L, 30L, TimeUnit.SECONDS); ,60L, 60L, TimeUnit.SECONDS);
if (StringUtils.isBlank(customerId)){ if (StringUtils.isBlank(customerId)){
logger.error("consumer project_changed fail,msg:{}",customerId); logger.error("consumer project_changed fail,msg:{}",customerId);
return; return;
} }
//睡一秒 要不然那边执行不完
try {
Thread.sleep(NumConstant.ONE_THOUSAND);
} catch (InterruptedException e) {
log.error("consumeMessage exception",e);
}
ExtractOriginFormDTO extractOriginFormDTO = new ExtractOriginFormDTO(); ExtractOriginFormDTO extractOriginFormDTO = new ExtractOriginFormDTO();
extractOriginFormDTO.setCustomerId(customerId); extractOriginFormDTO.setCustomerId(customerId);

7
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/biz/impl/BizDataStatsServiceImpl.java

@ -21,7 +21,6 @@ import com.epmet.service.stats.DimCustomerService;
import com.epmet.service.user.StatsStaffPatrolService; import com.epmet.service.user.StatsStaffPatrolService;
import com.epmet.service.user.UserService; import com.epmet.service.user.UserService;
import com.epmet.util.DimIdGenerator; import com.epmet.util.DimIdGenerator;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -34,7 +33,6 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -47,11 +45,6 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
public class BizDataStatsServiceImpl implements BizDataStatsService { public class BizDataStatsServiceImpl implements BizDataStatsService {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("bizDataStats-pool-%d").build();
ExecutorService threadPool = new ThreadPoolExecutor(3, 6,
10L, TimeUnit.MINUTES,
new LinkedBlockingQueue<>(500), namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
@Autowired @Autowired
private CustomerStaffService customerStaffService; private CustomerStaffService customerStaffService;
@Autowired @Autowired

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/CalCpcIndexServiceImpl.java

@ -311,7 +311,7 @@ public class CalCpcIndexServiceImpl implements CalCpcIndexService {
//1、查询当前党员建了多少个组 //1、查询当前党员建了多少个组
List<String> groupIdList = userCreatedGroups.get(partyMember.getUserId()); List<String> groupIdList = userCreatedGroups.get(partyMember.getUserId());
if (CollectionUtils.isEmpty(groupIdList)) { if (CollectionUtils.isEmpty(groupIdList)) {
log.info("当前党员userId="+partyMember.getUserId()+"没有创建过小组, 【党员相关-党员自建群活跃群众人数】赋值0"); log.warn("当前党员userId="+partyMember.getUserId()+"没有创建过小组, 【党员相关-党员自建群活跃群众人数】赋值0");
map.put(partyMember.getUserId(), NumConstant.ZERO); map.put(partyMember.getUserId(), NumConstant.ZERO);
continue; continue;
} }

78
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexOriginExtractServiceImpl.java

@ -4,11 +4,14 @@ import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.CustomerIdConstant; import com.epmet.commons.tools.constant.CustomerIdConstant;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.enums.EnvEnum;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.extract.form.ExtractIndexFormDTO; import com.epmet.dto.extract.form.ExtractIndexFormDTO;
import com.epmet.dto.indexcal.CalculateCommonFormDTO;
import com.epmet.service.evaluationindex.extract.dataToIndex.*; import com.epmet.service.evaluationindex.extract.dataToIndex.*;
import com.epmet.service.evaluationindex.indexcal.IndexCalculateService;
import com.epmet.service.stats.DimCustomerService; import com.epmet.service.stats.DimCustomerService;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -18,7 +21,8 @@ import org.springframework.util.CollectionUtils;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.*; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
/** /**
* desc指标原始数据抽取服务实现类 * desc指标原始数据抽取服务实现类
@ -26,12 +30,8 @@ import java.util.concurrent.*;
@Slf4j @Slf4j
@Service @Service
public class IndexOriginExtractServiceImpl implements IndexOriginExtractService { public class IndexOriginExtractServiceImpl implements IndexOriginExtractService {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() @Autowired
.setNameFormat("indexOriginExtract-pool-%d").build(); private ExecutorService executorService;
ExecutorService threadPool = new ThreadPoolExecutor(1, 1,
10L, TimeUnit.MINUTES,
new LinkedBlockingQueue<>(500), namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
@Autowired @Autowired
private CalCpcIndexService calCpcIndexService; private CalCpcIndexService calCpcIndexService;
@Autowired @Autowired
@ -46,6 +46,9 @@ public class IndexOriginExtractServiceImpl implements IndexOriginExtractService
private IndexCollDistrictService indexCollDistrictService; private IndexCollDistrictService indexCollDistrictService;
@Autowired @Autowired
private IndexCollDistrictDepartmentService indexCollDistrictDepartmentService; private IndexCollDistrictDepartmentService indexCollDistrictDepartmentService;
@Autowired
private IndexCalculateService indexCalculateService;
/** /**
* desc从统计库对象抽取指标数据 * desc从统计库对象抽取指标数据
* *
@ -91,88 +94,103 @@ public class IndexOriginExtractServiceImpl implements IndexOriginExtractService
private void submitJob(ExtractIndexFormDTO param) { private void submitJob(ExtractIndexFormDTO param) {
CountDownLatch countDownLatch = new CountDownLatch(2); CountDownLatch countDownLatch = new CountDownLatch(NumConstant.SIX);
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
final String customerId = param.getCustomerId(); final String customerId = param.getCustomerId();
final String monthId = param.getMonthId(); final String monthId = param.getMonthId();
threadPool.submit(() -> { executorService.submit(() -> {
try { try {
long startCpc = System.currentTimeMillis(); long startCpc = System.currentTimeMillis();
calCpcIndexService.calCpcPartyAbility(customerId, monthId); calCpcIndexService.calCpcPartyAbility(customerId, monthId);
log.error("党员相关-党建能力执行完毕======总耗时:{}ms,customerId:{}",System.currentTimeMillis()-startCpc, param.getCustomerId()); log.info("党员相关-党建能力执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCpc, param.getCustomerId());
} catch (Exception e) { } catch (Exception e) {
log.error("抽取【党员相关数据】发生异常,参数:" + JSON.toJSONString(param), e); log.error("抽取【党员相关数据】发生异常,参数:" + JSON.toJSONString(param), e);
} finally { } finally {
countDownLatch.countDown(); countDownLatch.countDown();
} }
}); });
threadPool.submit(() -> { executorService.submit(() -> {
try { try {
long startGridGovern = System.currentTimeMillis(); long startGridGovern = System.currentTimeMillis();
calGridIndexService.calGridIndexGovernAbility(customerId, monthId); calGridIndexService.calGridIndexGovernAbility(customerId, monthId);
log.error("网格相关-治理能力执行完毕======总耗时:{}ms,customerId:{}",System.currentTimeMillis()-startGridGovern, param.getCustomerId()); log.info("网格相关-治理能力执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startGridGovern, param.getCustomerId());
} catch (Exception e) { } catch (Exception e) {
log.error("抽取【网格治理能力数据】发生异常,参数:" + JSON.toJSONString(param), e); log.error("抽取【网格治理能力数据】发生异常,参数:" + JSON.toJSONString(param), e);
} }
try { try {
long startGridParty = System.currentTimeMillis(); long startGridParty = System.currentTimeMillis();
calGridIndexService.calGridIndexPartyAbility(customerId, monthId); calGridIndexService.calGridIndexPartyAbility(customerId, monthId);
log.error("网格相关-党建能力执行完毕======总耗时:{}ms,customerId:{}",System.currentTimeMillis()-startGridParty, param.getCustomerId()); log.info("网格相关-党建能力执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startGridParty, param.getCustomerId());
} catch (Exception e) { } catch (Exception e) {
log.error("抽取【网格党建能力数据】发生异常,参数:" + JSON.toJSONString(param), e); log.error("抽取【网格党建能力数据】发生异常,参数:" + JSON.toJSONString(param), e);
} }
try { try {
long startGridService = System.currentTimeMillis(); long startGridService = System.currentTimeMillis();
calGridIndexService.calGridIndexServiceAbility(customerId, monthId); calGridIndexService.calGridIndexServiceAbility(customerId, monthId);
log.error("网格相关-服务能力执行完毕======总耗时:{}ms,customerId:{}",System.currentTimeMillis()-startGridService, param.getCustomerId()); log.info("网格相关-服务能力执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startGridService, param.getCustomerId());
} catch (Exception e) { } catch (Exception e) {
log.error("抽取【网格服务能力数据】发生异常,参数:" + JSON.toJSONString(param), e); log.error("抽取【网格服务能力数据】发生异常,参数:" + JSON.toJSONString(param), e);
} }
countDownLatch.countDown();
});
executorService.submit(() -> {
try { try {
//dimAgency
long startCommunity = System.currentTimeMillis(); long startCommunity = System.currentTimeMillis();
indexCollCommunityService.saveCommunityAbility(customerId, monthId); indexCollCommunityService.saveCommunityAbility(customerId, monthId);
log.error("社区相关-三大能力执行完毕======总耗时:{}ms,customerId:{}",System.currentTimeMillis()-startCommunity, param.getCustomerId()); log.info("社区相关-三大能力执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startCommunity, param.getCustomerId());
} catch (Exception e) { } catch (Exception e) {
log.error("抽取【社区治理能力-社区党建能力-服务能力】发生异常,参数:" + JSON.toJSONString(param), e); log.error("抽取【社区治理能力-社区党建能力-服务能力】发生异常,参数:" + JSON.toJSONString(param), e);
} }
countDownLatch.countDown();
});
executorService.submit(() -> {
try { try {
//dimAgency
long startStreet = System.currentTimeMillis(); long startStreet = System.currentTimeMillis();
indexCollStreetService.saveStreetAbility(customerId, monthId); indexCollStreetService.saveStreetAbility(customerId, monthId);
log.error("街道相关-三大能力执行完毕======总耗时:{}ms,customerId:{}",System.currentTimeMillis()-startStreet, param.getCustomerId()); log.info("街道相关-三大能力执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startStreet, param.getCustomerId());
} catch (Exception e) { } catch (Exception e) {
log.error("抽取【街道治理能力-街道党建能力-服务能力】发生异常,参数:" + JSON.toJSONString(param), e); log.error("抽取【街道治理能力-街道党建能力-服务能力】发生异常,参数:" + JSON.toJSONString(param), e);
} }
countDownLatch.countDown();
});
executorService.submit(() -> {
try { try {
//dimAgency
long startDept = System.currentTimeMillis(); long startDept = System.currentTimeMillis();
indexCollDistrictDepartmentService.saveDepartmentAbility(customerId, monthId); indexCollDistrictDepartmentService.saveDepartmentAbility(customerId, monthId);
log.error("区直部门相关-治理能力执行完毕======总耗时:{}ms,customerId:{}",System.currentTimeMillis()-startDept, param.getCustomerId()); log.info("区直部门相关-治理能力执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startDept, param.getCustomerId());
} catch (Exception e) { } catch (Exception e) {
log.error("抽取【区直部门治理能力】发生异常,参数:" + JSON.toJSONString(param), e); log.error("抽取【区直部门治理能力】发生异常,参数:" + JSON.toJSONString(param), e);
} }
countDownLatch.countDown();
});
executorService.submit(() -> {
try { try {
//dimAgency
long startDistrict = System.currentTimeMillis(); long startDistrict = System.currentTimeMillis();
indexCollDistrictService.saveDistrictAbility(customerId, monthId); indexCollDistrictService.saveDistrictAbility(customerId, monthId);
log.error("全区相关-三大能力执行完毕======总耗时:{}ms,customerId:{}",System.currentTimeMillis()-startDistrict, param.getCustomerId()); log.info("全区相关-三大能力执行完毕======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - startDistrict, param.getCustomerId());
} catch (Exception e) { } catch (Exception e) {
log.error("抽取【全区治理能力-全区党建能力-服务能力】发生异常,参数:" + JSON.toJSONString(param), e); log.error("抽取【全区治理能力-全区党建能力-服务能力】发生异常,参数:" + JSON.toJSONString(param), e);
} }
countDownLatch.countDown(); countDownLatch.countDown();
}); });
log.info("indexOriginExtractAll======总耗时:{}ms,customerId:{}", System.currentTimeMillis() - start, param.getCustomerId());
try { try {
//等前面都执行完 再执行计算指标得分
countDownLatch.await(); countDownLatch.await();
executorService.submit(() -> {
long startT = System.currentTimeMillis();
CalculateCommonFormDTO formDTO1 = new CalculateCommonFormDTO();
try {
formDTO1.setMonthId(monthId);
formDTO1.setCustomerId(customerId);
Boolean aBoolean = indexCalculateService.indexCalculate(formDTO1);
HttpClientManager.getInstance().sendAlarmMsg(EnvEnum.getCurrentEnv().getName() + "客户Id:" + customerId + ";monthId:" + monthId + ",calculateAll全部指标计算完成,是否成功:" + aBoolean + ",总耗时:" + (System.currentTimeMillis() - startT) / 1000 + "秒");
} catch (Exception e) {
log.error("extractMonthly 计算分数异常,参数:{}", JSON.toJSONString(formDTO1));
}
});
} catch (InterruptedException e) { } catch (InterruptedException e) {
log.error("indexOriginExtractAll countDownLatch exception", e); log.error("indexOriginExtractAll countDownLatch exception", e);
} }
log.error("indexOriginExtractAll执行完毕======总耗时:{}ms,customerId:{}",System.currentTimeMillis()-start, param.getCustomerId());
} }
} }

29
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginExtractServiceImpl.java

@ -7,13 +7,10 @@ import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.dto.extract.form.ExtractOriginFormDTO; import com.epmet.dto.extract.form.ExtractOriginFormDTO;
import com.epmet.dto.stats.form.CustomerIdAndDateIdFormDTO; import com.epmet.dto.stats.form.CustomerIdAndDateIdFormDTO;
import com.epmet.service.StatsGroupService;
import com.epmet.service.StatsTopicService;
import com.epmet.service.evaluationindex.extract.todata.*; import com.epmet.service.evaluationindex.extract.todata.*;
import com.epmet.service.stats.DimCustomerPartymemberService; import com.epmet.service.stats.DimCustomerPartymemberService;
import com.epmet.service.stats.DimCustomerService; import com.epmet.service.stats.DimCustomerService;
import com.epmet.util.DimIdGenerator; import com.epmet.util.DimIdGenerator;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -23,7 +20,9 @@ import org.springframework.util.CollectionUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.*; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
/** /**
* desc抽取业务数据 统计库 汇聚类 * desc抽取业务数据 统计库 汇聚类
@ -31,12 +30,6 @@ import java.util.concurrent.*;
@Slf4j @Slf4j
@Service @Service
public class FactOriginExtractServiceImpl implements FactOriginExtractService { public class FactOriginExtractServiceImpl implements FactOriginExtractService {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("factOriginExtract-pool-%d").build();
ExecutorService threadPool = new ThreadPoolExecutor(3, 6,
10L, TimeUnit.MINUTES,
new LinkedBlockingQueue<>(500), namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
@Autowired @Autowired
private IssueExtractService issueExtractService; private IssueExtractService issueExtractService;
@Autowired @Autowired
@ -54,9 +47,7 @@ public class FactOriginExtractServiceImpl implements FactOriginExtractService {
@Autowired @Autowired
private FactGroupActDailyService factGroupActDailyService; private FactGroupActDailyService factGroupActDailyService;
@Autowired @Autowired
private StatsGroupService statsGroupService; private ExecutorService executorService;
@Autowired
private StatsTopicService statsTopicService;
@Override @Override
@ -106,7 +97,7 @@ public class FactOriginExtractServiceImpl implements FactOriginExtractService {
daysBetween = DateUtils.getDaysBetween(param.getStartDate(), param.getEndDate()); daysBetween = DateUtils.getDaysBetween(param.getStartDate(), param.getEndDate());
} }
List<String> finalDaysBetween = daysBetween; List<String> finalDaysBetween = daysBetween;
threadPool.submit(() -> { executorService.submit(() -> {
try { try {
CustomerIdAndDateIdFormDTO formDTO = new CustomerIdAndDateIdFormDTO(); CustomerIdAndDateIdFormDTO formDTO = new CustomerIdAndDateIdFormDTO();
formDTO.setCustomerId(param.getCustomerId()); formDTO.setCustomerId(param.getCustomerId());
@ -132,7 +123,7 @@ public class FactOriginExtractServiceImpl implements FactOriginExtractService {
countDownLatch.countDown(); countDownLatch.countDown();
} }
}); });
threadPool.submit(() -> { executorService.submit(() -> {
try { try {
ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class); ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class);
if (!isRange) { if (!isRange) {
@ -156,7 +147,7 @@ public class FactOriginExtractServiceImpl implements FactOriginExtractService {
countDownLatch.countDown(); countDownLatch.countDown();
} }
}); });
threadPool.submit(() -> { executorService.submit(() -> {
try { try {
log.debug("extractAll start param:{}", JSON.toJSONString(param)); log.debug("extractAll start param:{}", JSON.toJSONString(param));
ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class); ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class);
@ -183,7 +174,7 @@ public class FactOriginExtractServiceImpl implements FactOriginExtractService {
countDownLatch.countDown(); countDownLatch.countDown();
} }
}); });
threadPool.submit(() -> { executorService.submit(() -> {
try { try {
ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class); ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class);
if (!isRange) { if (!isRange) {
@ -222,7 +213,7 @@ public class FactOriginExtractServiceImpl implements FactOriginExtractService {
} }
}); });
//小组活动 //小组活动
threadPool.submit(() -> { executorService.submit(() -> {
try { try {
ExtractOriginFormDTO extractOriginFormDTO = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class); ExtractOriginFormDTO extractOriginFormDTO = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class);
if (!isRange) { if (!isRange) {
@ -339,7 +330,7 @@ public class FactOriginExtractServiceImpl implements FactOriginExtractService {
@Override @Override
public Future<?> submitProjectRelationData(ExtractOriginFormDTO param, List<String> finalDaysBetween) { public Future<?> submitProjectRelationData(ExtractOriginFormDTO param, List<String> finalDaysBetween) {
Future<?> submit = threadPool.submit(() -> { Future<?> submit = executorService.submit(() -> {
ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class); ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class);
if (CollectionUtils.isEmpty(finalDaysBetween)) { if (CollectionUtils.isEmpty(finalDaysBetween)) {
try { try {

56
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenExtractServiceImpl.java

@ -7,22 +7,17 @@ import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.distributedlock.DistributedLock; import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.distributedlock.LockConstants; import com.epmet.commons.tools.distributedlock.LockConstants;
import com.epmet.commons.tools.enums.EnvEnum;
import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.dto.extract.form.ExtractFactGridGovernDailyFromDTO; import com.epmet.dto.extract.form.ExtractFactGridGovernDailyFromDTO;
import com.epmet.dto.extract.form.ExtractOriginFormDTO; import com.epmet.dto.extract.form.ExtractOriginFormDTO;
import com.epmet.dto.extract.form.ExtractScreenFormDTO; import com.epmet.dto.extract.form.ExtractScreenFormDTO;
import com.epmet.dto.indexcal.CalculateCommonFormDTO;
import com.epmet.dto.screen.form.ScreenCentralZoneDataFormDTO; import com.epmet.dto.screen.form.ScreenCentralZoneDataFormDTO;
import com.epmet.service.evaluationindex.extract.todata.FactAgencyGovernDailyService; import com.epmet.service.evaluationindex.extract.todata.FactAgencyGovernDailyService;
import com.epmet.service.evaluationindex.extract.todata.FactGridGovernDailyService; import com.epmet.service.evaluationindex.extract.todata.FactGridGovernDailyService;
import com.epmet.service.evaluationindex.extract.todata.FactGridMemberStatisticsDailyService; import com.epmet.service.evaluationindex.extract.todata.FactGridMemberStatisticsDailyService;
import com.epmet.service.evaluationindex.extract.toscreen.*; import com.epmet.service.evaluationindex.extract.toscreen.*;
import com.epmet.service.evaluationindex.indexcal.IndexCalculateService;
import com.epmet.service.evaluationindex.screen.*; import com.epmet.service.evaluationindex.screen.*;
import com.epmet.service.stats.DimCustomerService; import com.epmet.service.stats.DimCustomerService;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock; import org.redisson.api.RLock;
@ -33,7 +28,9 @@ import org.springframework.util.CollectionUtils;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.*; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
/** /**
* @Author zxc * @Author zxc
@ -42,12 +39,6 @@ import java.util.concurrent.*;
@Service @Service
@Slf4j @Slf4j
public class ScreenExtractServiceImpl implements ScreenExtractService { public class ScreenExtractServiceImpl implements ScreenExtractService {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("ScreenExtractServiceImpl-pool-%d").build();
ExecutorService threadPool = new ThreadPoolExecutor(3, 6,
10L, TimeUnit.MINUTES,
new LinkedBlockingQueue<>(500), namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
@Autowired @Autowired
private DimCustomerService dimCustomerService; private DimCustomerService dimCustomerService;
@Autowired @Autowired
@ -65,8 +56,6 @@ public class ScreenExtractServiceImpl implements ScreenExtractService {
@Autowired @Autowired
private PublicPartiTotalDataExtractService publicPartiTotalDataExtractService; private PublicPartiTotalDataExtractService publicPartiTotalDataExtractService;
@Autowired @Autowired
private IndexCalculateService indexCalculateService;
@Autowired
private ScreenCentralZoneDataAbsorptionService screenCentralZoneDataAbsorptionService; private ScreenCentralZoneDataAbsorptionService screenCentralZoneDataAbsorptionService;
@Autowired @Autowired
private ScreenGrassrootsGovernDataAbsorptionService screenGrassrootsGovernDataAbsorptionService; private ScreenGrassrootsGovernDataAbsorptionService screenGrassrootsGovernDataAbsorptionService;
@ -81,10 +70,6 @@ public class ScreenExtractServiceImpl implements ScreenExtractService {
@Autowired @Autowired
private ScreenProjectSettleService screenProjectSettleService; private ScreenProjectSettleService screenProjectSettleService;
@Autowired @Autowired
private ScreenProjectCategoryGridDailyService projectCategoryGridDailyService;
@Autowired
private ScreenProjectCategoryOrgDailyService projectCategoryOrgDailyService;
@Autowired
private FactGridGovernDailyService factGridGovernDailyService; private FactGridGovernDailyService factGridGovernDailyService;
@Autowired @Autowired
private FactAgencyGovernDailyService factAgencyGovernDailyService; private FactAgencyGovernDailyService factAgencyGovernDailyService;
@ -94,6 +79,9 @@ public class ScreenExtractServiceImpl implements ScreenExtractService {
private ScreenProjectCategoryGridAndOrgDailyService screenProjectCategoryGridAndOrgDailyService; private ScreenProjectCategoryGridAndOrgDailyService screenProjectCategoryGridAndOrgDailyService;
@Autowired @Autowired
private DistributedLock distributedLock; private DistributedLock distributedLock;
@Autowired
private ExecutorService executorService;
/** /**
* @param extractOriginFormDTO * @param extractOriginFormDTO
@ -183,7 +171,7 @@ public class ScreenExtractServiceImpl implements ScreenExtractService {
lock = distributedLock.getLock(LockConstants.SCREEN_DAILY, NumConstant.SIX_HUNDRED_L, NumConstant.TEN_L, TimeUnit.SECONDS); lock = distributedLock.getLock(LockConstants.SCREEN_DAILY, NumConstant.SIX_HUNDRED_L, NumConstant.TEN_L, TimeUnit.SECONDS);
//等待3个线程执行完毕后再 继续执行下一个客户的 避免死锁 //等待3个线程执行完毕后再 继续执行下一个客户的 避免死锁
final CountDownLatch latch = new CountDownLatch(NumConstant.FOUR); final CountDownLatch latch = new CountDownLatch(NumConstant.FOUR);
threadPool.submit(() -> { executorService.submit(() -> {
//党员基本情况screen_cpc_base_data //党员基本情况screen_cpc_base_data
try { try {
try { try {
@ -215,7 +203,7 @@ public class ScreenExtractServiceImpl implements ScreenExtractService {
} }
}); });
threadPool.submit(() -> { executorService.submit(() -> {
//公众参与排行(注册人数、参与人数、话题数、议题数、项目数)screen_public_party_total_data //公众参与排行(注册人数、参与人数、话题数、议题数、项目数)screen_public_party_total_data
try { try {
@ -263,7 +251,7 @@ public class ScreenExtractServiceImpl implements ScreenExtractService {
log.info("extractDaily 2 thread run end ========= dateId:{},customerId:{}", dateId, customerId); log.info("extractDaily 2 thread run end ========= dateId:{},customerId:{}", dateId, customerId);
} }
}); });
threadPool.submit(() -> { executorService.submit(() -> {
try { try {
try { try {
@ -283,7 +271,7 @@ public class ScreenExtractServiceImpl implements ScreenExtractService {
log.info("extractDaily 3 thread run end ========= dateId:{},customerId:{}", dateId, customerId); log.info("extractDaily 3 thread run end ========= dateId:{},customerId:{}", dateId, customerId);
} }
}); });
threadPool.submit(() -> { executorService.submit(() -> {
//治理能力排行screen_govern_rank_data //治理能力排行screen_govern_rank_data
try { try {
try { try {
@ -447,16 +435,6 @@ public class ScreenExtractServiceImpl implements ScreenExtractService {
} catch (Exception e) { } catch (Exception e) {
log.error("党建引领抽取到大屏失败,参数为:" + JSON.toJSONString(formDTO), e); log.error("党建引领抽取到大屏失败,参数为:" + JSON.toJSONString(formDTO), e);
} }
//已经挪到天抽取的抽取里了
/* try {
//基层治理 - 热心市民 screen_party_user_rank_data
ScreenCentralZoneDataFormDTO param = new ScreenCentralZoneDataFormDTO();
param.setCustomerId(customerId);
param.setDateId(monthId);
screenGrassrootsGovernDataAbsorptionService.userScoreDataHub(param);
} catch (Exception e) {
log.error("大屏热心市民/党员得分数据写入失败,参数为:{}" + JSON.toJSONString(formDTO), e);
}*/
try { try {
// 项目(事件)数量分析按网格_按月统计 // 项目(事件)数量分析按网格_按月统计
screenProjectQuantityGridMonthlyService.extractionProjectGridMonthly(customerId, monthId); screenProjectQuantityGridMonthlyService.extractionProjectGridMonthly(customerId, monthId);
@ -474,20 +452,6 @@ public class ScreenExtractServiceImpl implements ScreenExtractService {
log.info("===== extractMonthly method end not contains shi bei:{}======", customerId); log.info("===== extractMonthly method end not contains shi bei:{}======", customerId);
return; return;
} }
//此方法保持在最后即可 计算指标分数 todo 优化 手动创建线程池 控制任务数量
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.submit(() -> {
long start = System.currentTimeMillis();
CalculateCommonFormDTO formDTO1 = new CalculateCommonFormDTO();
try {
formDTO1.setMonthId(monthId);
formDTO1.setCustomerId(customerId);
Boolean aBoolean = indexCalculateService.indexCalculate(formDTO1);
HttpClientManager.getInstance().sendAlarmMsg(EnvEnum.getCurrentEnv().getName() + "客户Id:" + formDTO.getCustomerId() + ";monthId:" + formDTO1.getMonthId() + ",calculateAll全部指标计算完成,是否成功:" + aBoolean + ",总耗时:" + (System.currentTimeMillis() - start) / 1000 + "秒");
} catch (Exception e) {
log.error("extractMonthly 计算分数异常,参数:{}", JSON.toJSONString(formDTO1));
}
});
log.info("===== extractMonthly method end ======"); log.info("===== extractMonthly method end ======");
} }
} }

5
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/IndexCalculateService.java

@ -19,6 +19,11 @@ public interface IndexCalculateService {
*/ */
Boolean indexCalculate(CalculateCommonFormDTO formDTO); Boolean indexCalculate(CalculateCommonFormDTO formDTO);
/**
* desc:异步 连续计算[指定或所有内部客户][多个月份]的指标得分入口
* @param formDTO
* @return
*/
Boolean indexStatistics(IndexStatisticsFormDTO formDTO); Boolean indexStatistics(IndexStatisticsFormDTO formDTO);
/** /**

31
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/impl/IndexCalculateServiceImpl.java

@ -1,7 +1,9 @@
package com.epmet.service.evaluationindex.indexcal.impl; package com.epmet.service.evaluationindex.indexcal.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.enums.EnvEnum; import com.epmet.commons.tools.enums.EnvEnum;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.DateUtils;
@ -17,16 +19,16 @@ import com.epmet.redis.IndexCalRedis;
import com.epmet.service.crm.CustomerRelationService; import com.epmet.service.crm.CustomerRelationService;
import com.epmet.service.evaluationindex.indexcal.*; import com.epmet.service.evaluationindex.indexcal.*;
import com.epmet.service.evaluationindex.indexcoll.FactIndexCollectService; import com.epmet.service.evaluationindex.indexcoll.FactIndexCollectService;
import com.epmet.service.stats.DimCustomerService;
import com.epmet.util.DimIdGenerator; import com.epmet.util.DimIdGenerator;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
/** /**
* @author liujianjun * @author liujianjun
@ -58,6 +60,8 @@ public class IndexCalculateServiceImpl implements IndexCalculateService {
private ScreenCustomerAgencyDao screenCustomerAgencyDao; private ScreenCustomerAgencyDao screenCustomerAgencyDao;
@Autowired @Autowired
private CustomerRelationService customerRelationService; private CustomerRelationService customerRelationService;
@Autowired
private DimCustomerService dimCustomerService;
@Override @Override
public Boolean indexCalculate(CalculateCommonFormDTO formDTO) { public Boolean indexCalculate(CalculateCommonFormDTO formDTO) {
@ -67,14 +71,15 @@ public class IndexCalculateServiceImpl implements IndexCalculateService {
formDTO.setMonthId(DimIdGenerator.getMonthDimId(DateUtils.addDateMonths(new Date(), -1))); formDTO.setMonthId(DimIdGenerator.getMonthDimId(DateUtils.addDateMonths(new Date(), -1)));
} }
//按照客户分组 //按照客户分组
List<String> customerIds = new ArrayList<>(); Set<String> customerIds = new HashSet<>();
if (StringUtils.isBlank(formDTO.getCustomerId())) { if (StringUtils.isBlank(formDTO.getCustomerId())) {
log.error("什么情况下走的这个方法,应该干掉他,因为...=====param:{}",JSON.toJSONString(formDTO));
Result<List<String>> externalCustomerIdsResult = epmetCommonServiceOpenFeignClient.getExternalCustomerIds(); Result<List<String>> externalCustomerIdsResult = epmetCommonServiceOpenFeignClient.getExternalCustomerIds();
if (!externalCustomerIdsResult.success()) { if (!externalCustomerIdsResult.success()) {
log.error("indexCalculate epmetCommonServiceOpenFeignClient.getExternalCustomerIds return fail"); log.error("indexCalculate epmetCommonServiceOpenFeignClient.getExternalCustomerIds return fail");
return false; return false;
} }
customerIds = externalCustomerIdsResult.getData(); customerIds.addAll(externalCustomerIdsResult.getData());
} else { } else {
customerIds.add(formDTO.getCustomerId()); customerIds.add(formDTO.getCustomerId());
} }
@ -95,8 +100,7 @@ public class IndexCalculateServiceImpl implements IndexCalculateService {
} }
return flag; return flag;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.warn("indexCalculate late exception",e);
log.warn("indexCalculate exception:{}",e);
log.error("indexCalculate exception,param:{}", JSON.toJSONString(formDTO)); log.error("indexCalculate exception,param:{}", JSON.toJSONString(formDTO));
} finally { } finally {
//清除缓存 //清除缓存
@ -212,12 +216,15 @@ public class IndexCalculateServiceImpl implements IndexCalculateService {
public Boolean indexStatistics(IndexStatisticsFormDTO formDTO) { public Boolean indexStatistics(IndexStatisticsFormDTO formDTO) {
List<String> customerIds = new ArrayList<>(); List<String> customerIds = new ArrayList<>();
if (StringUtils.isEmpty(formDTO.getCustomerId())){ if (StringUtils.isEmpty(formDTO.getCustomerId())){
Result<List<String>> externalCustomerIds = epmetCommonServiceOpenFeignClient.getExternalCustomerIds(); int pageNo = NumConstant.ONE;
if (!externalCustomerIds.success()){ int pageSize = NumConstant.ONE_HUNDRED;
log.error("indexCalculate epmetCommonServiceOpenFeignClient.getExternalCustomerIds return fail"); List<String> customerIdList = null;
return false; do {
customerIdList = dimCustomerService.selectCustomerIdPage(pageNo++, pageSize);
if (!CollectionUtils.isEmpty(customerIdList)){
customerIds.addAll(customerIdList);
} }
customerIds = externalCustomerIds.getData(); } while (!CollectionUtil.isEmpty(customerIdList) && customerIdList.size() == pageSize);
}else { }else {
customerIds.add(formDTO.getCustomerId()); customerIds.add(formDTO.getCustomerId());
} }

1
epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/ExternalAppServiceImpl.java

@ -187,7 +187,6 @@ public class ExternalAppServiceImpl implements ExternalAppService {
@Override @Override
public List<String> getCustomerIds() { public List<String> getCustomerIds() {
return externalAppDao.getCustomerIds(); return externalAppDao.getCustomerIds();
} }

2
epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/ExternalAppDao.xml

@ -66,7 +66,7 @@
</select> </select>
<select id="getCustomerIds" resultType="java.lang.String"> <select id="getCustomerIds" resultType="java.lang.String">
SELECT CUSTOMER_ID FROM external_app WHERE DEL_FLAG = 0 SELECT ID FROM external_customer WHERE DEL_FLAG = 0
</select> </select>
<!-- 根据appId查询客户ID和密钥 --> <!-- 根据appId查询客户ID和密钥 -->

4
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/ShiftProjectFormDTO.java

@ -52,6 +52,10 @@ public class ShiftProjectFormDTO implements Serializable {
* 议题标签 * 议题标签
*/ */
private List<IssueTagsDTO> tagList; private List<IssueTagsDTO> tagList;
/**
* token中客户Id
*/
private String customerId;
} }

4
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java

@ -181,9 +181,9 @@ public class IssueManageController {
@PostMapping("shiftproject-v2") @PostMapping("shiftproject-v2")
public Result shiftProjectV2(@LoginUser TokenDto tokenDTO, @RequestBody ShiftProjectFormDTO formDTO) { public Result shiftProjectV2(@LoginUser TokenDto tokenDTO, @RequestBody ShiftProjectFormDTO formDTO) {
formDTO.setStaffId(tokenDTO.getUserId()); formDTO.setStaffId(tokenDTO.getUserId());
formDTO.setCustomerId(tokenDTO.getCustomerId());
ValidatorUtils.validateEntity(formDTO); ValidatorUtils.validateEntity(formDTO);
issueService.shiftProjectV2(formDTO); return issueService.shiftProjectV2(formDTO);
return new Result();
} }
/** /**

3
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueService.java

@ -3,6 +3,7 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService; import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.IssueDTO; import com.epmet.dto.IssueDTO;
import com.epmet.dto.form.*; import com.epmet.dto.form.*;
import com.epmet.dto.result.*; import com.epmet.dto.result.*;
@ -219,7 +220,7 @@ public interface IssueService extends BaseService<IssueEntity> {
* @param formDTO * @param formDTO
* @return void * @return void
*/ */
void shiftProjectV2(ShiftProjectFormDTO formDTO); Result shiftProjectV2(ShiftProjectFormDTO formDTO);
/** /**
* @Description 已关闭列表 政府端 * @Description 已关闭列表 政府端

37
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java

@ -9,7 +9,9 @@ import com.epmet.commons.rocketmq.messages.GroupAchievementMQMsg;
import com.epmet.commons.tools.constant.AppClientConstant; import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.enums.AchievementTypeEnum;
import com.epmet.commons.tools.enums.EventEnum; import com.epmet.commons.tools.enums.EventEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.exception.EpmetException;
@ -41,7 +43,6 @@ import com.epmet.entity.IssueEntity;
import com.epmet.entity.IssueProcessEntity; import com.epmet.entity.IssueProcessEntity;
import com.epmet.entity.IssueProjectRelationEntity; import com.epmet.entity.IssueProjectRelationEntity;
import com.epmet.feign.*; import com.epmet.feign.*;
import com.epmet.commons.tools.enums.AchievementTypeEnum;
import com.epmet.redis.GovIssueRedis; import com.epmet.redis.GovIssueRedis;
import com.epmet.redis.IssueVoteDetailRedis; import com.epmet.redis.IssueVoteDetailRedis;
import com.epmet.resi.group.dto.group.form.AllIssueFormDTO; import com.epmet.resi.group.dto.group.form.AllIssueFormDTO;
@ -62,6 +63,7 @@ import com.epmet.utils.ModuleConstants;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.redisson.api.RLock;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -136,6 +138,8 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
private GovProjectOpenFeignClient govProjectOpenFeignClient; private GovProjectOpenFeignClient govProjectOpenFeignClient;
@Autowired @Autowired
private IssueVoteDetailService issueVoteDetailService; private IssueVoteDetailService issueVoteDetailService;
@Autowired
private DistributedLock distributedLock;
@Value("${openapi.scan.server.url}") @Value("${openapi.scan.server.url}")
@ -957,24 +961,28 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
* @date 2020/12/9 10:01 * @date 2020/12/9 10:01
*/ */
@Override @Override
public void shiftProjectV2(ShiftProjectFormDTO formDTO) { public Result shiftProjectV2(ShiftProjectFormDTO formDTO) {
RLock lock = null;
try {
//获取锁,判断当前议题是否已处理
lock = distributedLock.tryLock(formDTO.getCustomerId() + formDTO.getIssueId());
//1:查询议题数据 //1:查询议题数据
IssueEntity entity = baseDao.selectById(formDTO.getIssueId()); IssueEntity entity = baseDao.selectById(formDTO.getIssueId());
if (null == entity) { if (null == entity) {
throw new RenException(IssueConstant.SELECT_EXCEPTION); throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),IssueConstant.SELECT_EXCEPTION,IssueConstant.SELECT_EXCEPTION);
} }
if (IssueConstant.ISSUE_SHIFT_PROJECT.equals(entity.getIssueStatus())) { if (IssueConstant.ISSUE_SHIFT_PROJECT.equals(entity.getIssueStatus())) {
throw new RenException(IssueConstant.ISSUE_SHIFT_PROJECT_EXCEPTION); throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),IssueConstant.ISSUE_SHIFT_PROJECT_EXCEPTION,IssueConstant.ISSUE_SHIFT_PROJECT_EXCEPTION);
} }
if (!IssueConstant.ISSUE_VOTING.equals(entity.getIssueStatus())) { if (!IssueConstant.ISSUE_VOTING.equals(entity.getIssueStatus())) {
throw new RenException(IssueConstant.ISSUE_VOTING_EXCEPTION); throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),IssueConstant.ISSUE_VOTING_EXCEPTION,IssueConstant.ISSUE_VOTING_EXCEPTION);
} }
formDTO.setIssueDTO(ConvertUtils.sourceToTarget(entity, IssueDTO.class)); formDTO.setIssueDTO(ConvertUtils.sourceToTarget(entity, IssueDTO.class));
//获取议题分类 //获取议题分类
List<IssueCategoryDTO> categoryList = issueCategoryService.getCategoryByIssue(formDTO.getIssueId()); List<IssueCategoryDTO> categoryList = issueCategoryService.getCategoryByIssue(formDTO.getIssueId());
if (CollectionUtils.isEmpty(categoryList)) { if (CollectionUtils.isEmpty(categoryList)) {
throw new RenException(EpmetErrorCode.CATEGORY_IS_NULL.getCode()); throw new EpmetException(EpmetErrorCode.CATEGORY_IS_NULL.getCode(),EpmetErrorCode.CATEGORY_IS_NULL.getMsg(),EpmetErrorCode.CATEGORY_IS_NULL.getMsg());
} }
//公开回复内容审核 //公开回复内容审核
@ -986,10 +994,10 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
textScanParamDTO.getTasks().add(taskDTO); textScanParamDTO.getTasks().add(taskDTO);
Result<SyncScanResult> textSyncScanResult = ScanContentUtils.textSyncScan(scanApiUrl.concat(textSyncScanMethod), textScanParamDTO); Result<SyncScanResult> textSyncScanResult = ScanContentUtils.textSyncScan(scanApiUrl.concat(textSyncScanMethod), textScanParamDTO);
if (!textSyncScanResult.success()) { if (!textSyncScanResult.success()) {
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode()); throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(),EpmetErrorCode.SERVER_ERROR.getMsg(),EpmetErrorCode.SERVER_ERROR.getMsg());
} else { } else {
if (!textSyncScanResult.getData().isAllPass()) { if (!textSyncScanResult.getData().isAllPass()) {
throw new RenException(EpmetErrorCode.TEXT_SCAN_FAILED.getCode()); throw new EpmetException(EpmetErrorCode.TEXT_SCAN_FAILED.getCode(),EpmetErrorCode.TEXT_SCAN_FAILED.getMsg(),EpmetErrorCode.TEXT_SCAN_FAILED.getMsg());
} }
} }
} }
@ -999,7 +1007,7 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
//2:调用resi-group查询话题创建人数据(目前议题来源只有来自话题),为了到项目服务初始数据以及发送消息使用 //2:调用resi-group查询话题创建人数据(目前议题来源只有来自话题),为了到项目服务初始数据以及发送消息使用
Result<ResiTopicDTO> resultTopicDTO = resiGroupFeignClient.getTopicById(entity.getSourceId()); Result<ResiTopicDTO> resultTopicDTO = resiGroupFeignClient.getTopicById(entity.getSourceId());
if (!resultTopicDTO.success() || null == resultTopicDTO.getData()) { if (!resultTopicDTO.success() || null == resultTopicDTO.getData()) {
throw new RenException(IssueConstant.SELECT_TOPIC_EXCEPTION); throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),IssueConstant.SELECT_TOPIC_EXCEPTION,IssueConstant.SELECT_TOPIC_EXCEPTION);
} }
ResiTopicDTO topicDTO = resultTopicDTO.getData(); ResiTopicDTO topicDTO = resultTopicDTO.getData();
formDTO.setTopicDTO(topicDTO); formDTO.setTopicDTO(topicDTO);
@ -1011,7 +1019,7 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
Result<IssueProjectResultDTO> resultDTO = govProjectFeignClient.issueShiftProject(formDTO); Result<IssueProjectResultDTO> resultDTO = govProjectFeignClient.issueShiftProject(formDTO);
if (!resultDTO.success() || null == resultDTO.getData()) { if (!resultDTO.success() || null == resultDTO.getData()) {
logger.error(resultDTO.getInternalMsg()); logger.error(resultDTO.getInternalMsg());
throw new RenException(IssueConstant.GOV_PRJECT_EXCEPTION); throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),IssueConstant.GOV_PRJECT_EXCEPTION,IssueConstant.GOV_PRJECT_EXCEPTION);
} }
IssueProjectResultDTO issueProjectResultDTO = resultDTO.getData(); IssueProjectResultDTO issueProjectResultDTO = resultDTO.getData();
//更新项目对标签的引用次数 //更新项目对标签的引用次数
@ -1046,7 +1054,7 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
//5:调用epmet-message服务,给居民端话题创建人、议题发起人以及政府端工作人员发送消息 //5:调用epmet-message服务,给居民端话题创建人、议题发起人以及政府端工作人员发送消息
if (!shiftProjectMessage(issueProjectResultDTO, formDTO, entity).success()) { if (!shiftProjectMessage(issueProjectResultDTO, formDTO, entity).success()) {
throw new RenException(IssueConstant.SAVE_MSG_EXCEPTION); throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),IssueConstant.SAVE_MSG_EXCEPTION,IssueConstant.SAVE_MSG_EXCEPTION);
} }
//5-1:2020.10.26 添加给居民端话题创建人、议题发起人以及政府端工作人员推送微信订阅消息功能 sun //5-1:2020.10.26 添加给居民端话题创建人、议题发起人以及政府端工作人员推送微信订阅消息功能 sun
if (!wxmpShiftProjectMessage(issueProjectResultDTO, formDTO, entity).success()) { if (!wxmpShiftProjectMessage(issueProjectResultDTO, formDTO, entity).success()) {
@ -1078,6 +1086,13 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
//8.记录日志 //8.记录日志
//SendMqMsgUtil.build().openFeignClient(messageOpenFeignClient).sendProjectChangedMqMsg(); //SendMqMsgUtil.build().openFeignClient(messageOpenFeignClient).sendProjectChangedMqMsg();
return new Result();
} catch (Exception e) {
return new Result().error(e.getMessage());
} finally {
distributedLock.unLock(lock);
}
} }
/** /**

2
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffServiceImpl.java

@ -519,7 +519,7 @@ public class StaffServiceImpl implements StaffService {
//2.调用user服务,新增用户信息 //2.调用user服务,新增用户信息
StaffSubmitFromDTO submitDTO = ConvertUtils.sourceToTarget(fromDTO, StaffSubmitFromDTO.class); StaffSubmitFromDTO submitDTO = ConvertUtils.sourceToTarget(fromDTO, StaffSubmitFromDTO.class);
submitDTO.setAgencyId(fromDTO.getOrgId()); submitDTO.setAgencyId(orgDTO.getAgencyId());
Result<CustomerStaffDTO> result = epmetUserFeignClient.addStaff(submitDTO); Result<CustomerStaffDTO> result = epmetUserFeignClient.addStaff(submitDTO);
if (!result.success()) { if (!result.success()) {
if (result.getCode() != EpmetErrorCode.SERVER_ERROR.getCode()) { if (result.getCode() != EpmetErrorCode.SERVER_ERROR.getCode()) {

4
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectSatisfactionStatisticsServiceImpl.java

@ -140,8 +140,8 @@ public class ProjectSatisfactionStatisticsServiceImpl extends BaseServiceImpl<Pr
@Override @Override
public ProjectEvaluateScoreResultDTO projectEvaluateScore(ProjectEvaluateScoreFormDTO formDTO) { public ProjectEvaluateScoreResultDTO projectEvaluateScore(ProjectEvaluateScoreFormDTO formDTO) {
ProjectEntity projectEntity = projectDao.selectById(formDTO.getProjectId()); ProjectEntity projectEntity = projectDao.selectById(formDTO.getProjectId());
if (projectEntity.getOrigin().equals(ProjectConstant.AGENCY)){ if (!projectEntity.getOrigin().equals(ProjectConstant.ISSUE)){
// 直接立项的项目不能评价,所以给0分 // 直接立项的项目不能评价,报事不能评价,所以给0分
return new ProjectEvaluateScoreResultDTO(NumConstant.EIGHTY); return new ProjectEvaluateScoreResultDTO(NumConstant.EIGHTY);
} }
ProjectSatisfactionStatisticsEntity entity = baseDao.selectInfoByProjectId(formDTO.getProjectId()); ProjectSatisfactionStatisticsEntity entity = baseDao.selectInfoByProjectId(formDTO.getProjectId());

20
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java

@ -453,10 +453,12 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
Integer workMinutes = calculateDelta_T(ProjectConstant.PRECISE_CALCULATION, Integer workMinutes = calculateDelta_T(ProjectConstant.PRECISE_CALCULATION,
ProjectConstant.CALCULATION_TYPE_DEFAULT, fromDTO.getProjectId(), projectEntity.getCreatedTime(), current); ProjectConstant.CALCULATION_TYPE_DEFAULT, fromDTO.getProjectId(), projectEntity.getCreatedTime(), current);
projectEntity.setStatus(ProjectConstant.CLOSED); ProjectEntity newProject = new ProjectEntity();
projectEntity.setClosedStatus(fromDTO.getClosedStatus()); newProject.setId(fromDTO.getProjectId());
projectEntity.setWorkMinutes(workMinutes); newProject.setStatus(ProjectConstant.CLOSED);
baseDao.updateById(projectEntity); newProject.setClosedStatus(fromDTO.getClosedStatus());
newProject.setWorkMinutes(workMinutes);
baseDao.updateById(newProject);
//更新项目关联表 //更新项目关联表
ProjectStaffEntity projectStaffEntity = new ProjectStaffEntity(); ProjectStaffEntity projectStaffEntity = new ProjectStaffEntity();
projectStaffEntity.setId(fromDTO.getProjectStaffId()); projectStaffEntity.setId(fromDTO.getProjectStaffId());
@ -655,10 +657,12 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
Integer workMinutes = calculateDelta_T(ProjectConstant.PRECISE_CALCULATION, Integer workMinutes = calculateDelta_T(ProjectConstant.PRECISE_CALCULATION,
ProjectConstant.CALCULATION_TYPE_DEFAULT, fromDTO.getProjectId(), projectEntity.getCreatedTime(), current); ProjectConstant.CALCULATION_TYPE_DEFAULT, fromDTO.getProjectId(), projectEntity.getCreatedTime(), current);
projectEntity.setStatus(ProjectConstant.CLOSED); ProjectEntity newProject = new ProjectEntity();
projectEntity.setClosedStatus(fromDTO.getClosedStatus()); newProject.setId(fromDTO.getProjectId());
projectEntity.setWorkMinutes(workMinutes); newProject.setStatus(ProjectConstant.CLOSED);
baseDao.updateById(projectEntity); newProject.setClosedStatus(fromDTO.getClosedStatus());
newProject.setWorkMinutes(workMinutes);
baseDao.updateById(newProject);
//更新项目关联表 //更新项目关联表
ProjectStaffEntity projectStaffEntity = new ProjectStaffEntity(); ProjectStaffEntity projectStaffEntity = new ProjectStaffEntity();
projectStaffEntity.setId(fromDTO.getProjectStaffId()); projectStaffEntity.setId(fromDTO.getProjectStaffId());

26
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/TopicDraftServiceImpl.java

@ -17,7 +17,6 @@
package com.epmet.modules.topic.service.impl; package com.epmet.modules.topic.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
@ -25,8 +24,8 @@ import com.epmet.commons.rocketmq.messages.GroupAchievementMQMsg;
import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.MqConstant; import com.epmet.commons.tools.constant.MqConstant;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.dto.form.mq.MqBaseMsgDTO;
import com.epmet.commons.tools.dto.form.mq.eventmsg.BasePointEventMsg; import com.epmet.commons.tools.dto.form.mq.eventmsg.BasePointEventMsg;
import com.epmet.commons.tools.enums.AchievementTypeEnum;
import com.epmet.commons.tools.enums.EventEnum; import com.epmet.commons.tools.enums.EventEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
@ -37,19 +36,18 @@ import com.epmet.commons.tools.scan.result.AsyncScanTaskDTO;
import com.epmet.commons.tools.scan.result.SyncScanResult; import com.epmet.commons.tools.scan.result.SyncScanResult;
import com.epmet.commons.tools.scan.result.VoiceResultDTO; import com.epmet.commons.tools.scan.result.VoiceResultDTO;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.*; 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.constant.SystemMessageType; import com.epmet.constant.SystemMessageType;
import com.epmet.dto.form.CommonGridIdFormDTO; import com.epmet.dto.form.CommonGridIdFormDTO;
import com.epmet.dto.form.SystemMsgFormDTO; import com.epmet.dto.form.SystemMsgFormDTO;
import com.epmet.dto.result.AllGridsByUserIdResultDTO; import com.epmet.dto.result.AllGridsByUserIdResultDTO;
import com.epmet.dto.result.UserInfoResultDTO;
import com.epmet.dto.result.CommonDataFilterResultDTO; import com.epmet.dto.result.CommonDataFilterResultDTO;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.dto.result.UserInfoResultDTO; import com.epmet.dto.result.UserInfoResultDTO;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient; import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.commons.tools.enums.AchievementTypeEnum;
import com.epmet.modules.feign.EpmetUserFeignClient;
import com.epmet.modules.group.dao.GroupMessageDao;
import com.epmet.modules.feign.GovOrgFeignClient; import com.epmet.modules.feign.GovOrgFeignClient;
import com.epmet.modules.group.dao.GroupMessageDao; import com.epmet.modules.group.dao.GroupMessageDao;
import com.epmet.modules.group.dao.ResiGroupDao; import com.epmet.modules.group.dao.ResiGroupDao;
@ -58,7 +56,6 @@ import com.epmet.modules.group.entity.GroupMessageEntity;
import com.epmet.modules.group.entity.ResiGroupEntity; import com.epmet.modules.group.entity.ResiGroupEntity;
import com.epmet.modules.group.entity.ResiGroupStatisticalEntity; import com.epmet.modules.group.entity.ResiGroupStatisticalEntity;
import com.epmet.modules.group.redis.ResiGroupRedis; import com.epmet.modules.group.redis.ResiGroupRedis;
import com.epmet.modules.member.dao.ResiGroupMemberDao;
import com.epmet.modules.member.redis.ResiGroupMemberRedis; import com.epmet.modules.member.redis.ResiGroupMemberRedis;
import com.epmet.modules.member.service.ResiGroupMemberService; import com.epmet.modules.member.service.ResiGroupMemberService;
import com.epmet.modules.topic.dao.ResiTopicAttachmentDao; import com.epmet.modules.topic.dao.ResiTopicAttachmentDao;
@ -84,7 +81,6 @@ import com.epmet.resi.group.dto.topic.result.MyAuditingListResultDTO;
import com.epmet.resi.group.dto.topic.result.TopicAuditResultDTO; import com.epmet.resi.group.dto.topic.result.TopicAuditResultDTO;
import com.epmet.send.SendMqMsgUtil; import com.epmet.send.SendMqMsgUtil;
import com.google.common.base.CharMatcher; import com.google.common.base.CharMatcher;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -97,7 +93,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -111,11 +106,6 @@ import java.util.stream.Collectors;
public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicDraftEntity> implements TopicDraftService { public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicDraftEntity> implements TopicDraftService {
private static Logger logger = LoggerFactory.getLogger(TopicDraftServiceImpl.class); private static Logger logger = LoggerFactory.getLogger(TopicDraftServiceImpl.class);
private ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("TopicDraftService-pool-%d").build();
private ExecutorService threadPool = new ThreadPoolExecutor(1, 1,
1L, TimeUnit.MINUTES,
new LinkedBlockingQueue<>(500), namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
@Autowired @Autowired
private GovOrgOpenFeignClient govOrgOpenFeignClient; private GovOrgOpenFeignClient govOrgOpenFeignClient;
@Autowired @Autowired
@ -125,12 +115,8 @@ public class TopicDraftServiceImpl extends BaseServiceImpl<TopicDraftDao, TopicD
@Autowired @Autowired
private ResiTopicOperationDao resiTopicOperationDao; private ResiTopicOperationDao resiTopicOperationDao;
@Autowired @Autowired
private EpmetUserFeignClient epmetUserFeignClient;
@Autowired
private ResiGroupDao resiGroupDao; private ResiGroupDao resiGroupDao;
@Autowired @Autowired
private ResiGroupMemberDao resiGroupMemberDao;
@Autowired
private ResiGroupStatisticalDao resiGroupStatisticalDao; private ResiGroupStatisticalDao resiGroupStatisticalDao;
@Autowired @Autowired
private ResiTopicDao resiTopicDao; private ResiTopicDao resiTopicDao;

Loading…
Cancel
Save