diff --git a/epmet-commons/epmet-commons-rocketmq/pom.xml b/epmet-commons/epmet-commons-rocketmq/pom.xml index 274ec09b58..346f055ccc 100644 --- a/epmet-commons/epmet-commons-rocketmq/pom.xml +++ b/epmet-commons/epmet-commons-rocketmq/pom.xml @@ -16,6 +16,11 @@ org.apache.rocketmq rocketmq-spring-boot-starter 2.0.1 + + + + org.projectlombok + lombok org.projectlombok diff --git a/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/ConsomerGroupConstants.java b/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/ConsomerGroupConstants.java index de07ea3106..5acfebb90e 100644 --- a/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/ConsomerGroupConstants.java +++ b/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/ConsomerGroupConstants.java @@ -26,4 +26,9 @@ public interface ConsomerGroupConstants { */ String PROJECT_CHANGED_COMPONENTS_GROUP = "project_changed_components_group"; + /** + * 小组成就消费者组 + */ + String GROUP_ACHIEVEMENT_COMPONENTS_GROUP = "group_achievement_components_group"; + } diff --git a/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/TopicConstants.java b/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/TopicConstants.java index bbf28a5884..bd9fed05eb 100644 --- a/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/TopicConstants.java +++ b/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/TopicConstants.java @@ -1,6 +1,16 @@ package com.epmet.commons.rocketmq.constants; public interface TopicConstants { + /** + * 初始化客户 + */ String INIT_CUSTOMER = "init_customer"; + /** + * 项目变动 + */ String PROJECT_CHANGED = "project_changed"; + /** + * 小组成就 + */ + String GROUP_ACHIEVEMENT = "group_achievement"; } diff --git a/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/messages/GroupAchievementMQMsg.java b/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/messages/GroupAchievementMQMsg.java new file mode 100644 index 0000000000..f54a2bee52 --- /dev/null +++ b/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/messages/GroupAchievementMQMsg.java @@ -0,0 +1,27 @@ +package com.epmet.commons.rocketmq.messages; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.io.Serializable; + +/** + * desc:小组成就mq消息类 + * + * @author LiuJanJun + * @date 2021/4/22 8:35 下午 + */ +@Data +@AllArgsConstructor +public class GroupAchievementMQMsg implements Serializable { + + private String customerId; + + private String groupId; + + /** + * 成就类型 + * @see com.epmet.modules.enums.AchievementTypeEnum + */ + private String achievementType; +} diff --git a/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/register/ConsumerConfigProperties.java b/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/register/ConsumerConfigProperties.java new file mode 100644 index 0000000000..71a8fea41c --- /dev/null +++ b/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/register/ConsumerConfigProperties.java @@ -0,0 +1,43 @@ +package com.epmet.commons.rocketmq.register; + +import lombok.Data; +import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; + +import java.io.Serializable; + +/** + * desc:mq 消费配置类 + * + * @author: LiuJanJun + * @date: 2021/4/30 2:39 下午 + * @version: 1.0 + */ +@Data +public class ConsumerConfigProperties implements Serializable { + + private static final long serialVersionUID = 2069676324708473773L; + /** + * 消费者组 + */ + private String consumerGroup; + /** + * 主题 + */ + private String topic; + /** + * 标签 + */ + private String tag = "*"; + /** + * 最小消费的线程数 + */ + private int consumeThreadMin = 2; + /** + * 最大消费的线程数 + */ + private int consumeThreadMax = 4; + /** + * 消费监听器 + */ + private MessageListenerConcurrently consumerListener; +} diff --git a/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/register/MQConsumerRegister.java b/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/register/MQConsumerRegister.java new file mode 100644 index 0000000000..3387b55931 --- /dev/null +++ b/epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/register/MQConsumerRegister.java @@ -0,0 +1,79 @@ +package com.epmet.commons.rocketmq.register; + +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.common.protocol.heartbeat.MessageModel; +import org.springframework.beans.factory.annotation.Value; + +import javax.annotation.PostConstruct; + +/** + * desc:注册mq监听器 + * + * @author liujianjun + */ +@Slf4j +public abstract class MQConsumerRegister { + @Value("${spring.profiles.active}") + private String env; + @Value("${rocketmq.name-server}") + private String namesrvAddr; + + public abstract ConsumerConfigProperties getConsumerProperty(); + + + /** + * @return + * @Description 注册监听器 + * @author wxz + * @date 2021.03.03 16:09 + */ + @PostConstruct + public void registerMQListener() { + ConsumerConfigProperties consumerProperty = getConsumerProperty(); + log.info("registerAllListeners consumers:{} success", consumerProperty); + //本地环境不注册 + //if (!"local".equals(env)) { + try { + // 实例化消费者 + DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerProperty.getConsumerGroup()); + + // 设置NameServer的地址 + consumer.setNamesrvAddr(namesrvAddr); + consumer.setMessageModel(MessageModel.CLUSTERING); + consumer.setInstanceName(buildInstanceName()); + // 订阅一个或者多个Topic,以及Tag来过滤需要消费的消息 + consumer.subscribe(consumer.getConsumerGroup(), consumerProperty.getTag()); + // 注册回调实现类来处理从broker拉取回来的消息 + consumer.registerMessageListener(consumerProperty.getConsumerListener()); + consumer.setConsumeThreadMin(consumerProperty.getConsumeThreadMin()); + consumer.setConsumeThreadMax(consumerProperty.getConsumeThreadMax()); + // 启动消费者实例 + consumer.start(); + } catch (MQClientException e) { + log.info("registerMQListener exception", e); + } + + //} + + } + + /** + * desc: 因为docker-compose部署有问题 所有自己命名 + * + * @param + * @return java.lang.String + * @author LiuJanJun + * @date 2021/4/30 5:00 下午 + */ + private String buildInstanceName() { + String instanceName = ""; + for (int i = 0; i < 4; i++) { + int t = (int) (Math.random() * 10); + instanceName = instanceName.concat(t + ""); + } + + return instanceName; + } +} diff --git a/epmet-commons/epmet-commons-tools/pom.xml b/epmet-commons/epmet-commons-tools/pom.xml index 0f8bd545fc..258b1a09b2 100644 --- a/epmet-commons/epmet-commons-tools/pom.xml +++ b/epmet-commons/epmet-commons-tools/pom.xml @@ -134,7 +134,7 @@ org.apache.httpcomponents httpclient - 4.5.2 + 4.5.13 org.apache.httpcomponents diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java index 33f72bee5c..8cdcc9c0a2 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java @@ -41,6 +41,7 @@ public interface NumConstant { int SIXTY = 60; int ONE_HUNDRED = 100; int TWO_HUNDRED = 200; + int FIVE_HUNDRED = 500; BigDecimal ONE_HUNDRED_DECIMAL = new BigDecimal(100); BigDecimal ZERO_DECIMAL = new BigDecimal(0); int ONE_THOUSAND = 1000; diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/mq/MqBaseParamDTO.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/mq/MqBaseParamDTO.java index 9ad8df6cf4..8b400beb45 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/mq/MqBaseParamDTO.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/mq/MqBaseParamDTO.java @@ -14,5 +14,4 @@ import java.io.Serializable; public class MqBaseParamDTO implements Serializable { private String appId; private String token; - private String requestUrl; } diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/mq/eventmsg/BasePointEventMsg.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/mq/eventmsg/BasePointEventMsg.java index 6f371a1e09..9235fe77a7 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/mq/eventmsg/BasePointEventMsg.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/mq/eventmsg/BasePointEventMsg.java @@ -29,6 +29,22 @@ public class BasePointEventMsg implements Serializable { * 客户Id */ private String customerId; + + /** + * 机关Id + */ + private String agencyId; + + /** + * 网格Id + */ + private String gridId; + + /** + * 小组ID + */ + private String groupId; + /** * 被操作用户id */ @@ -54,6 +70,11 @@ public class BasePointEventMsg implements Serializable { */ private String remark; + /** + * 业务类型 eg:活动id + */ + private String sourceType; + /** * 业务id eg:活动id */ @@ -69,4 +90,6 @@ public class BasePointEventMsg implements Serializable { private Date targetDate; private String eventTag; + + private String eventClass; } diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/AchievementTypeEnum.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/AchievementTypeEnum.java new file mode 100644 index 0000000000..255d680c17 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/AchievementTypeEnum.java @@ -0,0 +1,49 @@ +package com.epmet.commons.tools.enums; + +/** + * 小组成就类型枚举类 + * dev|test|prod + * + * @author jianjun liu + * @date 2020-07-03 11:14 + **/ +public enum AchievementTypeEnum { + /** + * 环境变量枚举 + */ + MEMBER("member", "小组成员数"), + TOPIC("topic", "话题数"), + TOISSUE("toissue", "转议题数"), + RESOVLE_TOPIC("resovletopic", "解决话题数"), + ; + + private String code; + private String name; + + + + AchievementTypeEnum(String code, String name) { + this.code = code; + this.name = name; + } + + public static AchievementTypeEnum getEnum(String code) { + AchievementTypeEnum[] values = AchievementTypeEnum.values(); + for (AchievementTypeEnum value : values) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + + public String getCode() { + return code; + } + + public String getName() { + return name; + } + +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/BizTypeEnum.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/BizTypeEnum.java new file mode 100644 index 0000000000..1dec273299 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/BizTypeEnum.java @@ -0,0 +1,28 @@ +package com.epmet.commons.tools.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/4/25 15:49 + */ +@Getter +@AllArgsConstructor +public enum BizTypeEnum { + //枚举类型 + GROUP("group", "小组"), + ACTIVITY("activity", "活动"), + AGENCY("agency", "组织"); + + /** + * 类型 + */ + private String type; + /** + * 描述 + */ + private String typeDesc; + +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/EventEnum.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/EventEnum.java index c1409342d6..44d229ec3b 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/EventEnum.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/EventEnum.java @@ -17,6 +17,7 @@ public enum EventEnum { TOPIC_SHIFTED_TO_ISSUE("topic_to_issue","resi_group","话题被转为议题(小组中发布的话题被组长转为议题)"), SHIFT_TOPIC_TO_ISSUE("shift_topic_to_issue","resi_group","转话题为议题(将自建小组中话题转为议题)"), TOPIC_SHIFTED_TO_PROJECT("topic_to_project","resi_group","话题被转为项目"), + LEADER_RESOLVE_TOPIC("leader_resolve_topic","resi_group","组长解决组内话题"), ; private String eventClass; diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/SourceTypeEnum.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/SourceTypeEnum.java new file mode 100644 index 0000000000..fa44ed89a8 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/SourceTypeEnum.java @@ -0,0 +1,31 @@ +package com.epmet.commons.tools.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/4/25 16:23 + */ +@Getter +@AllArgsConstructor +public enum SourceTypeEnum { + //枚举类型 + ACTIVITY("activity", "活动"), + TOPIC("topic", "话题"), + ISSUE("issue", "议题"), + PROJECT("project", "项目"), + INVITE("invite", "邀请进组"), + MANUAL("manual", "人工调整"), + VOLUNTEER("volunteer", "志愿者"); + + /** + * 类型 + */ + private String type; + /** + * 描述 + */ + private String typeDesc; +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java index 3217260019..1886bd8300 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java @@ -558,6 +558,17 @@ public class DateUtils { return format.format(timestamp * 1000); } + /** + * 日期格式转时间戳 + * @author zhaoqifeng + * @date 2021/4/19 14:52 + * @param date + * @return java.lang.Long + */ + public static Long dateToTimestamp(Date date) { + return date.getTime()/NumConstant.ONE_THOUSAND; + } + /** * @return java.util.Date * @param minStr yyyy-MM-dd HH:mm字符串 diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java index 74809f9d30..eeac282cd8 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java @@ -101,6 +101,7 @@ public class HttpClientManager { private static RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(soTimeout) .setConnectTimeout(connectionTimeout) + .setConnectionRequestTimeout(soTimeout) .build();//设置请求和传输超时时间 public static HttpClientManager getInstance() { diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/SendMqMsgUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/SendMqMsgUtils.java index 7d9889d77b..ac6a2d440c 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/SendMqMsgUtils.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/SendMqMsgUtils.java @@ -29,6 +29,8 @@ import java.util.Map; @Component public class SendMqMsgUtils { private static MqConfig mqConfig; + private static String requestUrl; + /** * desc:发送mq消息(如果失败重试1次) @@ -39,22 +41,23 @@ public class SendMqMsgUtils { if (mqConfig == null) { mqConfig = SpringContextUtils.getBean(MqConfig.class); } - log.info("sendMsg param:{}", JSON.toJSONString(msg)); + if (requestUrl == null){ + requestUrl = mqConfig.getHost().concat(MqMethodPathEnum.SEND_MSG.getCode()); + } try { - // TODO ValidatorUtils.validateEntity(msg, DefaultGroup.class); } catch (ValidateException e) { return new Result().error(e.getMsg()); } msg.setAppId(mqConfig.getAppId()); - msg.setRequestUrl(mqConfig.getHost().concat(MqMethodPathEnum.SEND_MSG.getCode())); msg.setToken(mqConfig.getToken()); try { int retryTime = 0; Result result = null; + log.info("sendMsg url:{},param:{}", requestUrl, JSON.toJSONString(msg)); do { + result = HttpClientManager.getInstance().sendPostByHttps(requestUrl, JSON.toJSONString(msg)); retryTime++; - result = HttpClientManager.getInstance().sendPostByHttps(msg.getRequestUrl(), JSON.toJSONString(msg)); log.info("sendMsg retryTime:{},result:{}", retryTime, JSON.toJSONString(result)); } while ((!result.success()) && retryTime < 2); @@ -78,6 +81,16 @@ public class SendMqMsgUtils { } } + public static void main(String[] args) { + mqConfig = new MqConfig(); + mqConfig.setAppId("202007161443499985fa2d397436d10356542134c8f008c48"); + mqConfig.setToken("52d9d9b0e7d0eb5b8b81c205b579e07c"); + mqConfig.setHost("https://epmet-dev.elinkservice.cn/estos/"); + String msg = "{\"eventClass\":\"resi_group\",\"eventTag\":\"shift_topic_to_issue\",\"msg\":\"[{\\\"actionFlag\\\":\\\"plus\\\",\\\"agencyId\\\":\\\"e9b55911549fe7b0d0427b557f7c5efc\\\",\\\"customerId\\\":\\\"45687aa479955f9d06204d415238f7cc\\\",\\\"eventClass\\\":\\\"resi_group\\\",\\\"eventTag\\\":\\\"topic_to_issue\\\",\\\"gridId\\\":\\\"708a3567b54ced7219666489f9d838ab\\\",\\\"groupId\\\":\\\"5b0bc6c3c409de4b7e2fdc5c13c43b1e\\\",\\\"isCommon\\\":false,\\\"remark\\\":\\\"支部测试1小组中发布的话题\\\\\\\"33\\\\\\\"被转为议题\\\",\\\"sourceId\\\":\\\"798f4081dbe94435a55c5004c7d01458\\\",\\\"sourceType\\\":\\\"issue\\\",\\\"userId\\\":\\\"3e12b2264da616f85def807e89dd7150\\\"},{\\\"actionFlag\\\":\\\"plus\\\",\\\"agencyId\\\":\\\"e9b55911549fe7b0d0427b557f7c5efc\\\",\\\"customerId\\\":\\\"45687aa479955f9d06204d415238f7cc\\\",\\\"eventTag\\\":\\\"shift_topic_to_issue\\\",\\\"gridId\\\":\\\"708a3567b54ced7219666489f9d838ab\\\",\\\"groupId\\\":\\\"5b0bc6c3c409de4b7e2fdc5c13c43b1e\\\",\\\"isCommon\\\":false,\\\"remark\\\":\\\"将话题\\\\\\\"33\\\\\\\"转为议题\\\",\\\"sourceId\\\":\\\"798f4081dbe94435a55c5004c7d01458\\\",\\\"sourceType\\\":\\\"issue\\\",\\\"userId\\\":\\\"3e12b2264da616f85def807e89dd7150\\\"}]\"}"; + MqBaseMsgDTO mqBaseMsgDTO = JSON.parseObject(msg, MqBaseMsgDTO.class); + Result stringResult = sendMsg(mqBaseMsgDTO); + } + /** * desc:发送mq消息 diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/UniqueIdGenerator.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/UniqueIdGenerator.java index fcefbdf2ca..a1c19557d1 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/UniqueIdGenerator.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/UniqueIdGenerator.java @@ -11,6 +11,8 @@ import java.util.concurrent.atomic.AtomicLong; * 唯一ID生成器 */ public class UniqueIdGenerator { + public final static String FORMAT_DMDHS = "yyyyMMddHHmmss"; + private static UniqueValue uniqueValue = new UniqueValue(); private static String middle; @@ -25,7 +27,7 @@ public class UniqueIdGenerator { private static class UniqueValue { private AtomicLong uniqueValue = new AtomicLong(0L); - private volatile String currentTime = DateUtils.format(new Date(), DateUtils.DATE_TIME_NO_SPLIT); + private volatile String currentTime = DateUtils.format(new Date(), FORMAT_DMDHS); private volatile String lastTime = currentTime; /** @@ -35,7 +37,7 @@ public class UniqueIdGenerator { * @return */ public String getCurrentTime() { - currentTime = DateUtils.format(new Date(), DateUtils.DATE_TIME_NO_SPLIT); + currentTime = DateUtils.format(new Date(), FORMAT_DMDHS); if (!currentTime.equals(lastTime)) { lastTime = currentTime; Random random = new Random(); @@ -51,31 +53,32 @@ public class UniqueIdGenerator { /** * 生成一个24位唯一ID - * 15位时间+2位中间值(防止多服务冲突)+2个线程code+5位秒级递增值 + * 14位时间+2位中间值(防止多服务冲突)+3个线程code+5位秒级递增值 * * @return */ - public static String generate() { + public static String generate24() { StringBuilder builder = new StringBuilder(32); builder.append(uniqueValue.getCurrentTime()) .append(middle) - .append(getUniqueThreadCode()) + .append(getUniqueThreadCode(3)) .append(uniqueValue.getCurrentValue()); return builder.toString(); } - public static String getUniqueThreadCode() { - String threadCode = StringUtils.left(String.valueOf(Thread.currentThread().hashCode()), 2); - return StringUtils.leftPad(threadCode, 2, "0"); + public static String getUniqueThreadCode(Integer length) { + String threadCode = StringUtils.left(String.valueOf(Thread.currentThread().hashCode()), length); + return StringUtils.leftPad(threadCode, length, "0"); } public static void main(String[] args) throws InterruptedException { System.out.println(UniqueIdGenerator.uniqueValue.currentTime); System.out.println(UniqueIdGenerator.middle); - System.out.println(UniqueIdGenerator.getUniqueThreadCode()); + System.out.println(UniqueIdGenerator.getUniqueThreadCode(2)); System.out.println(uniqueValue.getCurrentValue()); + System.out.println(UniqueIdGenerator.generate24()); } } diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/net/OkHttpUtil.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/net/OkHttpUtil.java index e329a1f7df..7292e492e8 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/net/OkHttpUtil.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/net/OkHttpUtil.java @@ -48,6 +48,7 @@ public class OkHttpUtil { //支持HTTPS请求,跳过证书验证 clientBuilder.sslSocketFactory(SSLSocketClient.getSSLSocketFactory(), SSLSocketClient.getX509TrustManager()) .hostnameVerifier(SSLSocketClient.getHostnameVerifier()); + //clientBuilder.followRedirects(false).followSslRedirects(false); //clientBuilder.sslSocketFactory(createSSLSocketFactory()); /*clientBuilder.hostnameVerifier(new HostnameVerifier() { @Override diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexExcelDataListener.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexExcelDataListener.java index 9870714357..3fe392276f 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexExcelDataListener.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexExcelDataListener.java @@ -157,7 +157,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { group1 = new IndexGroupTemplateEntity(); group1.setIndexId(indexDictEntity.getId()); group1.setParentIndexGroupId("0"); - group1.setId(UniqueIdGenerator.generate()); + group1.setId(UniqueIdGenerator.generate24()); group1.setIndexCode(Pinyin4jUtil.getSpellPinYin(indexDictEntity.getIndexName(), true, 4)); group1.setAllIndexCodePath(index.getAllIndexCodePath(0)); indexGroupMap.put(index.getLevel1Index(), group1); @@ -173,7 +173,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { group2 = new IndexGroupTemplateEntity(); group2.setIndexId(indexDictEntity.getId()); group2.setParentIndexGroupId(group1.getId()); - group2.setId(UniqueIdGenerator.generate()); + group2.setId(UniqueIdGenerator.generate24()); group2.setIndexCode(Pinyin4jUtil.getSpellPinYin(indexDictEntity.getIndexName(), false, 4)); group2.setAllIndexCodePath(index.getAllIndexCodePath(3)); indexGroupMap.put(level4IndexDetailKey, group2); @@ -184,7 +184,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { templateEntity.setIndexGroupId(group1.getId()); templateEntity.setIndexId(indexDictEntity.getId()); templateEntity.setAllParentIndexCode(allIndexCodeSb.toString()); - templateEntity.setId(UniqueIdGenerator.generate()); + templateEntity.setId(UniqueIdGenerator.generate24()); templateEntity.setCorrelation(index.getCorrelation()); templateEntity.setAllIndexCodePath(index.getAllIndexCodePath(3)); buildIndexGroupDetail(templateEntity, indexDictEntity, index, 2); @@ -202,7 +202,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { templateEntity.setIndexGroupId(group2.getId()); templateEntity.setIndexId(indexDictEntity.getId()); templateEntity.setAllParentIndexCode(allIndexCodeSb.toString()); - templateEntity.setId(UniqueIdGenerator.generate()); + templateEntity.setId(UniqueIdGenerator.generate24()); templateEntity.setCorrelation(index.getCorrelation()); templateEntity.setAllIndexCodePath(index.getAllIndexCodePath(4)); buildIndexGroupDetail(templateEntity, indexDictEntity, index, 5); @@ -217,7 +217,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { group1 = new IndexGroupTemplateEntity(); group1.setIndexId(indexDictEntity.getId()); group1.setParentIndexGroupId("0"); - group1.setId(UniqueIdGenerator.generate()); + group1.setId(UniqueIdGenerator.generate24()); group1.setIndexCode(Pinyin4jUtil.getSpellPinYin(indexDictEntity.getIndexName(), false, 4)); group1.setAllIndexCodePath(index.getAllIndexCodePath(0)); indexGroupMap.put(index.getLevel1Index(), group1); @@ -232,7 +232,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { group2 = new IndexGroupTemplateEntity(); group2.setIndexId(indexDictEntity.getId()); group2.setParentIndexGroupId(group1.getId()); - group2.setId(UniqueIdGenerator.generate()); + group2.setId(UniqueIdGenerator.generate24()); group2.setIndexCode(Pinyin4jUtil.getSpellPinYin(indexDictEntity.getIndexName(), false, 4)); group2.setAllIndexCodePath(index.getAllIndexCodePath(1)); indexGroupMap.put(level2IndexGroupKey, group2); @@ -243,7 +243,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { templateEntity.setIndexGroupId(group2.getId()); templateEntity.setIndexId(indexDictEntity.getId()); templateEntity.setAllParentIndexCode(allIndexCodeSb.toString()); - templateEntity.setId(UniqueIdGenerator.generate()); + templateEntity.setId(UniqueIdGenerator.generate24()); templateEntity.setCorrelation(index.getCorrelation()); templateEntity.setAllIndexCodePath(index.getAllIndexCodePath(1)); buildIndexGroupDetail(templateEntity, indexDictEntity, index, 2); @@ -260,7 +260,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { templateEntity.setIndexGroupId(group2.getId()); templateEntity.setIndexId(indexDictEntity.getId()); templateEntity.setAllParentIndexCode(allIndexCodeSb.toString()); - templateEntity.setId(UniqueIdGenerator.generate()); + templateEntity.setId(UniqueIdGenerator.generate24()); templateEntity.setCorrelation(index.getCorrelation()); templateEntity.setAllIndexCodePath(index.getAllIndexCodePath(4)); buildIndexGroupDetail(templateEntity, indexDictEntity, index, 5); @@ -289,7 +289,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { private void buildIndexDicEntity(IndexModel data, IndexDictEntity entity, IndexDictEntity entity2, IndexDictEntity entity3, IndexDictEntity entity4, IndexDictEntity entity5) { if (!indexDicMap.containsKey(data.getLevel1Index())) { - entity.setId(UniqueIdGenerator.generate()); + entity.setId(UniqueIdGenerator.generate24()); entity.setIndexName(data.getLevel1Index()); entity.setCorrelation(data.getCorrelation()); entity.setLevel("1"); @@ -297,7 +297,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { indexDicMap.put(data.getLevel1Index(), entity); } if (!indexDicMap.containsKey(data.getLevel2Index())) { - entity2.setId(UniqueIdGenerator.generate()); + entity2.setId(UniqueIdGenerator.generate24()); entity2.setIndexName(data.getLevel2Index()); entity2.setCorrelation(data.getCorrelation()); entity2.setLevel("2"); @@ -305,7 +305,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { indexDicMap.put(data.getLevel2Index(), entity2); } if (!indexDicMap.containsKey(data.getLevel3Index())) { - entity3.setId(UniqueIdGenerator.generate()); + entity3.setId(UniqueIdGenerator.generate24()); entity3.setIndexName(data.getLevel3Index()); entity3.setCorrelation(data.getCorrelation()); entity3.setLevel("3"); @@ -313,7 +313,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { indexDicMap.put(data.getLevel3Index(), entity3); } if (!indexDicMap.containsKey(data.getLevel4Index())) { - entity4.setId(UniqueIdGenerator.generate()); + entity4.setId(UniqueIdGenerator.generate24()); entity4.setIndexName(data.getLevel4Index()); entity4.setCorrelation(data.getCorrelation()); entity4.setLevel("4"); @@ -321,7 +321,7 @@ public class IndexExcelDataListener extends AnalysisEventListener { indexDicMap.put(data.getLevel4Index(), entity4); } if (!indexDicMap.containsKey(data.getLevel5Index())) { - entity5.setId(UniqueIdGenerator.generate()); + entity5.setId(UniqueIdGenerator.generate24()); entity5.setIndexName(data.getLevel5Index()); entity5.setCorrelation(data.getCorrelation()); entity5.setLevel("5"); diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java index 952d7b4ba5..ecc2d38a9b 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java @@ -34,6 +34,7 @@ import java.util.stream.Collectors; * @date 2021.03.03 16:10 */ @Slf4j +//@Component public class ProjectChangedCustomListener implements MessageListenerConcurrently { private Logger logger = LoggerFactory.getLogger(getClass()); @@ -56,7 +57,10 @@ public class ProjectChangedCustomListener implements MessageListenerConcurrently private void consumeMessage(String msg) { logger.info("receive customerId:{}", JSON.toJSONString(msg)); ProjectChangedMQMsg msgObj = JSON.parseObject(msg, ProjectChangedMQMsg.class); - + if (msgObj == null){ + log.warn("consumeMessage msg body is blank"); + return; + } DistributedLock distributedLock = null; RLock lock = null; try { @@ -115,4 +119,14 @@ public class ProjectChangedCustomListener implements MessageListenerConcurrently log.info("data-statical-server服务被关闭,执行未执行完的动作"); } + + /*@Override + public ConsumerConfigProperties getConsumerProperty() { + ConsumerConfigProperties configProperties = new ConsumerConfigProperties(); + configProperties.setConsumerGroup(ConsomerGroupConstants.PROJECT_CHANGED_COMPONENTS_GROUP); + configProperties.setTopic(TopicConstants.PROJECT_CHANGED); + configProperties.setTag("*"); + configProperties.setConsumerListener(this); + return configProperties; + }*/ } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java index bcec9ddd31..c383ae1b41 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java @@ -3,22 +3,22 @@ package com.epmet.mq; import com.epmet.commons.rocketmq.constants.ConsomerGroupConstants; import com.epmet.commons.rocketmq.constants.TopicConstants; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.enums.EnvEnum; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.common.protocol.heartbeat.MessageModel; import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @Slf4j @Component -@Order(value = 111) public class RocketMQConsumerRegister { - + @Value("${spring.profiles.active}") + private String env; @Value("${rocketmq.name-server}") private String nameServer; @@ -31,7 +31,9 @@ public class RocketMQConsumerRegister { @PostConstruct public void registerAllListeners() { try { - register(ConsomerGroupConstants.PROJECT_CHANGED_COMPONENTS_GROUP, MessageModel.CLUSTERING, TopicConstants.PROJECT_CHANGED, "*", new ProjectChangedCustomListener()); + if (!EnvEnum.LOCAL.getCode().equals(env)) { + register(ConsomerGroupConstants.PROJECT_CHANGED_COMPONENTS_GROUP, MessageModel.CLUSTERING, TopicConstants.PROJECT_CHANGED, "*", new ProjectChangedCustomListener()); + } } catch (MQClientException e) { log.error("registerAllListeners exception", e); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/IndexGroupServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/IndexGroupServiceImpl.java index 50092d64db..00c019e1ff 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/IndexGroupServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/IndexGroupServiceImpl.java @@ -80,7 +80,7 @@ private IndexGroupTemplateDao indexGroupTemplateDao; List insertGroupList = new ArrayList<>(); groupMap.forEach((oldGroupTempId, o) -> { IndexGroupEntity newGroupEntity = ConvertUtils.sourceToTarget(o, IndexGroupEntity.class); - String newGroupId = UniqueIdGenerator.generate(); + String newGroupId = UniqueIdGenerator.generate24(); newGroupEntity.setId(newGroupId); newGroupEntity.setCustomerId(customerId); groupNewIdMap.put(oldGroupTempId, newGroupId); @@ -99,7 +99,7 @@ private IndexGroupTemplateDao indexGroupTemplateDao; IndexGroupDetailEntity entity = ConvertUtils.sourceToTarget(groupDetailTemp, IndexGroupDetailEntity.class); - entity.setId(UniqueIdGenerator.generate()); + entity.setId(UniqueIdGenerator.generate24()); String newGroupId = groupNewIdMap.get(oldIndexGroupId); if (StringUtils.isBlank(newGroupId)){ log.error("新旧id映射关系有误"); @@ -134,4 +134,4 @@ private IndexGroupTemplateDao indexGroupTemplateDao; });*/ return true; } -} \ No newline at end of file +} diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/resources/db/migration/V0.0.11__groupAchievementRule.sql b/epmet-module/epmet-common-service/common-service-server/src/main/resources/db/migration/V0.0.11__groupAchievementRule.sql new file mode 100644 index 0000000000..c249201058 --- /dev/null +++ b/epmet-module/epmet-common-service/common-service-server/src/main/resources/db/migration/V0.0.11__groupAchievementRule.sql @@ -0,0 +1 @@ +INSERT INTO `epmet_point`.`point_rule_default`(`ID`, `RULE_NAME`, `RULE_DESC`, `EVENT_CODE`, `FUNCTION_ID`, `OPERATE_TYPE`, `UP_LIMIT`, `UP_LIMIT_DESC`, `UP_LIMIT_PREFIX`, `RULE_PERIOD`, `POINT`, `POINT_UNIT`, `ENABLED_FLAG`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('10', '组长解决话题', '组长解决组内话题', 'leader_resolve_topic', '1', 'plus', 0, '无上限', NULL, 'day', 2, 'time', '0', '0', 0, 'APP_USER', '2021-04-19 15:55:18', 'APP_USER', '2021-04-19 15:55:18'); diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActLiveRecServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActLiveRecServiceImpl.java index aeb67a2314..15ff440c80 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActLiveRecServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActLiveRecServiceImpl.java @@ -239,6 +239,7 @@ public class ActLiveRecServiceImpl extends BaseServiceImplcom.epmet epmet-commons-rocketmq 2.0.0 - compile diff --git a/epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/SystemMessageType.java b/epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/SystemMessageType.java index f3f98bac35..282dc7b711 100644 --- a/epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/SystemMessageType.java +++ b/epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/SystemMessageType.java @@ -15,4 +15,9 @@ public interface SystemMessageType { */ String PROJECT_CHANGED = "project_changed"; + /** + * 小组成就 + */ + String GROUP_ACHIEVEMENT = "group_achievement"; + } diff --git a/epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/send/SendMqMsgUtil.java b/epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/send/SendMqMsgUtil.java index 2a382127b9..4e8e7c954a 100644 --- a/epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/send/SendMqMsgUtil.java +++ b/epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/send/SendMqMsgUtil.java @@ -2,6 +2,7 @@ package com.epmet.send; import com.alibaba.fastjson.JSON; import com.epmet.commons.rocketmq.messages.ProjectChangedMQMsg; +import com.epmet.commons.rocketmq.messages.GroupAchievementMQMsg; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.SystemMessageType; @@ -66,4 +67,35 @@ public class SendMqMsgUtil { return false; } + /** + * desc: 发送小组成就消息,计算小组成就 + * + * @param msgContent + * @return boolean + * @author LiuJanJun + * @date 2021/4/23 3:01 下午 + * @remark 失败重试1次,调用端自行判断如果失败是否要继续执行 + */ + public boolean sendGroupAchievementMqMsg(GroupAchievementMQMsg msgContent) { + try { + SystemMsgFormDTO systemMsgFormDTO = new SystemMsgFormDTO(); + systemMsgFormDTO.setMessageType(SystemMessageType.GROUP_ACHIEVEMENT); + systemMsgFormDTO.setContent(msgContent); + Result sendMsgResult = null; + log.info("sendGroupAchievementMqMsg param:{}",msgContent); + int retryTime = 0; + do { + sendMsgResult = epmetMessageOpenFeignClient.sendSystemMsgByMQ(systemMsgFormDTO); + } while ((sendMsgResult == null || !sendMsgResult.success()) && retryTime++ < NumConstant.TWO); + + if (sendMsgResult != null && sendMsgResult.success()) { + return true; + } + log.error("发送(小组成就)系统消息到message服务失败:{},msg:{}", JSON.toJSONString(sendMsgResult), JSON.toJSONString(systemMsgFormDTO)); + } catch (Exception e) { + log.error("sendMqMsg exception", e); + } + return false; + } + } diff --git a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SystemMessageServiceImpl.java b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SystemMessageServiceImpl.java index c82b22701b..db9be4c1ba 100644 --- a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SystemMessageServiceImpl.java +++ b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SystemMessageServiceImpl.java @@ -67,6 +67,9 @@ public class SystemMessageServiceImpl implements SystemMessageService { case SystemMessageType.PROJECT_CHANGED: topic = TopicConstants.PROJECT_CHANGED; break; + case SystemMessageType.GROUP_ACHIEVEMENT: + topic = TopicConstants.GROUP_ACHIEVEMENT; + break; } return topic; } diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/BizPointTotalDetailDTO.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/BizPointTotalDetailDTO.java new file mode 100644 index 0000000000..f057816b87 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/BizPointTotalDetailDTO.java @@ -0,0 +1,101 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.dto; + +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + + +/** + * 按业务类型积分总计 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-20 + */ +@Data +public class BizPointTotalDetailDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private String id; + + /** + * 客户ID + */ + private String customerId; + + /** + * 组织Id + */ + private String agencyId; + + /** + * 网格ID + */ + private String gridId; + + /** + * 业务类型:小组:group + */ + private String bizType; + + /** + * 业务类型的对象id + */ + private String objectId; + + /** + * OBJECTID的总积分 总积分=objectId下所有的用户积分 + */ + private Integer totalPoint; + + /** + * 删除标识 + */ + private String delFlag; + + /** + * 乐观锁 + */ + private Integer revision; + + /** + * 创建人 + */ + private String createdBy; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新人 + */ + private String updatedBy; + + /** + * 更新时间 + */ + private Date updatedTime; + +} \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/BizPointUserTotalDetailDTO.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/BizPointUserTotalDetailDTO.java new file mode 100644 index 0000000000..3e5dc04f11 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/BizPointUserTotalDetailDTO.java @@ -0,0 +1,106 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.dto; + +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + + +/** + * 按业务类型积分总计 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-20 + */ +@Data +public class BizPointUserTotalDetailDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private String id; + + /** + * 客户ID + */ + private String customerId; + + /** + * 组织Id + */ + private String agencyId; + + /** + * 网格ID + */ + private String gridId; + + /** + * 用户ID + */ + private String userId; + + /** + * 业务类型:小组:group + */ + private String bizType; + + /** + * 业务类型的对象id + */ + private String objectId; + + /** + * OBJECTID的总积分 总积分=objectId下所有的用户积分 + */ + private Integer totalPoint; + + /** + * 删除标识 + */ + private String delFlag; + + /** + * 乐观锁 + */ + private Integer revision; + + /** + * 创建人 + */ + private String createdBy; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新人 + */ + private String updatedBy; + + /** + * 更新时间 + */ + private Date updatedTime; + +} \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/UserPointActionLogDTO.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/UserPointActionLogDTO.java index 113572b051..4f8523d82a 100644 --- a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/UserPointActionLogDTO.java +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/UserPointActionLogDTO.java @@ -53,6 +53,18 @@ public class UserPointActionLogDTO implements Serializable { */ private String actionFlag; + /** + * 业务类型:小组:group + */ + private String bizType; + + /** + * 业务类型的对象id + */ + private String objectId; + + private String sourceType; + /** * 来源Id,可以是活动Id * */ diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/form/GroupPointFormDTO.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/form/GroupPointFormDTO.java new file mode 100644 index 0000000000..8da5ab5729 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/form/GroupPointFormDTO.java @@ -0,0 +1,17 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/4/21 9:50 + */ +@Data +public class GroupPointFormDTO implements Serializable { + private static final long serialVersionUID = -3231073030413434313L; + private String groupId; + private String gridId; +} diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GroupPointRankingResultDTO.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GroupPointRankingResultDTO.java new file mode 100644 index 0000000000..275a5917ba --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GroupPointRankingResultDTO.java @@ -0,0 +1,38 @@ +package com.epmet.dto.result; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/4/21 10:34 + */ +@NoArgsConstructor +@Data +public class GroupPointRankingResultDTO implements Serializable { + + private static final long serialVersionUID = -9215609608003827403L; + /** + * 排名 + */ + private String ranking; + /** + * 小组名 + */ + private String groupName; + /** + * 小组积分 + */ + private String point; + /** + * 是否本小组 + */ + private String isMine; + /** + * 小组ID + */ + private String groupId; +} diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GroupPointRuleResultDTO.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GroupPointRuleResultDTO.java new file mode 100644 index 0000000000..05717983ee --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GroupPointRuleResultDTO.java @@ -0,0 +1,26 @@ +package com.epmet.dto.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/4/22 15:15 + */ +@Data +public class GroupPointRuleResultDTO implements Serializable { + private static final long serialVersionUID = -1651136821935977327L; + private List rules; + /** + * 个人贡献概述 + */ + private String contriSummary; + + /** + * 小组积分概述 + */ + private String groupSummary; +} diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/PointRankingResultDTO.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/PointRankingResultDTO.java new file mode 100644 index 0000000000..c063eb8286 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/PointRankingResultDTO.java @@ -0,0 +1,44 @@ +package com.epmet.dto.result; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/4/21 10:05 + */ +@NoArgsConstructor +@Data +public class PointRankingResultDTO implements Serializable { + + private static final long serialVersionUID = -5383837225811609227L; + /** + * 头像 + */ + private String headPhoto; + /** + * 支部小组-姓名/普通小组-昵称 + */ + private String name; + /** + * 积分 + */ + private String point; + /** + * 排名 + */ + private String ranking; + /** + * 是否本人 + */ + private String isMine; + /** + * 用户ID + */ + @JsonIgnore + private String userId; +} diff --git a/epmet-module/epmet-point/epmet-point-server/pom.xml b/epmet-module/epmet-point/epmet-point-server/pom.xml index d582216f11..8669a27eb7 100644 --- a/epmet-module/epmet-point/epmet-point-server/pom.xml +++ b/epmet-module/epmet-point/epmet-point-server/pom.xml @@ -87,6 +87,12 @@ 2.0.0 compile + + com.epmet + resi-group-client + 2.0.0 + compile + diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/GroupPointController.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/GroupPointController.java new file mode 100644 index 0000000000..4984d2ce0b --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/GroupPointController.java @@ -0,0 +1,96 @@ +package com.epmet.controller; + +import com.epmet.commons.tools.annotation.LoginUser; +import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.form.GroupPointFormDTO; +import com.epmet.dto.result.GroupPointRuleResultDTO; +import com.epmet.resi.group.dto.group.result.GroupPointDetailResultDTO; +import com.epmet.dto.result.GroupPointRankingResultDTO; +import com.epmet.dto.result.PointRankingResultDTO; +import com.epmet.service.BizPointTotalDetailService; +import com.epmet.service.BizPointUserTotalDetailService; +import com.epmet.service.PointRuleService; +import com.epmet.utils.ModuleConstant; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author zhaoqifeng + * 小组积分 + * @date 2021/4/21 9:45 + */ +@RestController +@RequestMapping("group/point") +public class GroupPointController { + + @Autowired + private BizPointUserTotalDetailService bizPointUserTotalDetailService; + @Autowired + private BizPointTotalDetailService bizPointTotalDetailService; + @Autowired + private PointRuleService pointRuleService; + + /** + * 小组积分贡献榜 + * + * @param tokenDto + * @param formDTO + * @return com.epmet.commons.tools.utils.Result> + * @author zhaoqifeng + * @date 2021/4/21 14:02 + */ + @PostMapping("pointranking") + public Result> pointRanking(@LoginUser TokenDto tokenDto, @RequestBody GroupPointFormDTO formDTO) { + List list = bizPointUserTotalDetailService.pointRanking(tokenDto, formDTO); + return new Result>().ok(list); + } + + /** + * 网格小组积分排行 + * + * @param formDTO + * @return com.epmet.commons.tools.utils.Result> + * @author zhaoqifeng + * @date 2021/4/21 14:02 + */ + @PostMapping("grouppointranking") + public Result> groupPointRanking(@RequestBody GroupPointFormDTO formDTO) { + List list = bizPointTotalDetailService.groupPointRanking(formDTO); + return new Result>().ok(list); + } + + /** + * 小组积分详情 + * + * @param formDTO + * @return com.epmet.commons.tools.utils.Result + * @author zhaoqifeng + * @date 2021/4/21 14:02 + */ + @PostMapping("pointdetail") + public Result pointDetail(@RequestBody GroupPointFormDTO formDTO) { + GroupPointDetailResultDTO result = bizPointTotalDetailService.pointDetail(formDTO); + return new Result().ok(result); + } + + /** + * 小组积分规则 + * @author zhaoqifeng + * @date 2021/4/22 15:36 + * @param tokenDto + * @return com.epmet.commons.tools.utils.Result + */ + @PostMapping("pointrule") + public Result pointRule(@LoginUser TokenDto tokenDto) { + GroupPointRuleResultDTO result = pointRuleService.getGroupRule(tokenDto.getCustomerId()); + result.setContriSummary(ModuleConstant.CONTRI_SUMMARY); + result.setGroupSummary(ModuleConstant.GROUP_RULE_SUMMARY); + return new Result().ok(result); + } +} diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/BizPointTotalDetailDao.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/BizPointTotalDetailDao.java new file mode 100644 index 0000000000..26e05f5a7b --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/BizPointTotalDetailDao.java @@ -0,0 +1,43 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.dao; + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dto.BizPointTotalDetailDTO; +import com.epmet.entity.BizPointTotalDetailEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 按业务类型积分总计 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-20 + */ +@Mapper +public interface BizPointTotalDetailDao extends BaseDao { + /** + * 根据业务类型查找数据 + * @author zhaoqifeng + * @date 2021/4/20 16:57 + * @param type + * @param objectId + * @return com.epmet.dto.BizPointTotalDetailDTO + */ + BizPointTotalDetailDTO selectDataByObject(@Param("type")String type, @Param("objectId")String objectId); +} \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/BizPointUserTotalDetailDao.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/BizPointUserTotalDetailDao.java new file mode 100644 index 0000000000..0813114d27 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/BizPointUserTotalDetailDao.java @@ -0,0 +1,44 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.dao; + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.entity.BizPointUserTotalDetailEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 按业务类型积分总计 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-20 + */ +@Mapper +public interface BizPointUserTotalDetailDao extends BaseDao { + + /** + * 获取今日积分增量 + * @author zhaoqifeng + * @date 2021/4/21 16:56 + * @param type + * @param objectId + * @return java.lang.Integer + */ + Integer selectIncrease(@Param("type")String type, @Param("objectId")String objectId); + +} \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointActionLogDao.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointActionLogDao.java index 40c3277d6d..a2c1963e85 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointActionLogDao.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointActionLogDao.java @@ -53,4 +53,14 @@ public interface UserPointActionLogDao extends BaseDao * @date 2020.07.31 15:11 **/ Integer selectSumByEvent(@Param("userId") String userId, @Param("eventId") String eventId, @Param("sourceId") String sourceId, @Param("customerId") String customerId, @Param("dateCheck") Date dateCheck,@Param("right")Date right); + + /** + * 获取今日积分增量 + * @author zhaoqifeng + * @date 2021/4/21 16:56 + * @param type + * @param objectId + * @return java.lang.Integer + */ + Integer selectIncrease(@Param("type")String type, @Param("objectId")String objectId); } \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/entity/BizPointTotalDetailEntity.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/entity/BizPointTotalDetailEntity.java new file mode 100644 index 0000000000..b05bc59705 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/entity/BizPointTotalDetailEntity.java @@ -0,0 +1,71 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +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; + +/** + * 按业务类型积分总计 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-20 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("biz_point_total_detail") +public class BizPointTotalDetailEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + /** + * 客户ID + */ + private String customerId; + + /** + * 组织Id + */ + private String agencyId; + + /** + * 网格ID + */ + private String gridId; + + /** + * 业务类型:小组:group + */ + private String bizType; + + /** + * 业务类型的对象id + */ + private String objectId; + + /** + * OBJECTID的总积分 总积分=objectId下所有的用户积分 + */ + private Integer totalPoint; + +} diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/entity/BizPointUserTotalDetailEntity.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/entity/BizPointUserTotalDetailEntity.java new file mode 100644 index 0000000000..e0f2960604 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/entity/BizPointUserTotalDetailEntity.java @@ -0,0 +1,76 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +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; + +/** + * 按业务类型积分总计 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-20 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("biz_point_user_total_detail") +public class BizPointUserTotalDetailEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + /** + * 客户ID + */ + private String customerId; + + /** + * 组织Id + */ + private String agencyId; + + /** + * 网格ID + */ + private String gridId; + + /** + * 用户ID + */ + private String userId; + + /** + * 业务类型:小组:group + */ + private String bizType; + + /** + * 业务类型的对象id + */ + private String objectId; + + /** + * OBJECTID的总积分 总积分=objectId下所有的用户积分 + */ + private Integer totalPoint; + +} diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/entity/UserPointActionLogEntity.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/entity/UserPointActionLogEntity.java index b52ed79b2f..2a282b06f3 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/entity/UserPointActionLogEntity.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/entity/UserPointActionLogEntity.java @@ -58,6 +58,18 @@ public class UserPointActionLogEntity extends BaseEpmetEntity { */ private String eventId; + /** + * 业务类型:小组:group + */ + private String bizType; + + /** + * 业务类型的对象id + */ + private String objectId; + + private String sourceType; + /** * 来源Id,可以是活动Id * */ diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/BizPointTotalDetailService.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/BizPointTotalDetailService.java new file mode 100644 index 0000000000..f72e49ba39 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/BizPointTotalDetailService.java @@ -0,0 +1,129 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.service; + +import com.epmet.commons.mybatis.service.BaseService; +import com.epmet.commons.tools.page.PageData; +import com.epmet.dto.BizPointTotalDetailDTO; +import com.epmet.dto.form.GroupPointFormDTO; +import com.epmet.resi.group.dto.group.result.GroupPointDetailResultDTO; +import com.epmet.dto.result.GroupPointRankingResultDTO; +import com.epmet.entity.BizPointTotalDetailEntity; + +import java.util.List; +import java.util.Map; + +/** + * 按业务类型积分总计 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-20 + */ +public interface BizPointTotalDetailService extends BaseService { + + /** + * 默认分页 + * + * @param params + * @return PageData + * @author generator + * @date 2021-04-20 + */ + PageData page(Map params); + + /** + * 默认查询 + * + * @param params + * @return java.util.List + * @author generator + * @date 2021-04-20 + */ + List list(Map params); + + /** + * 单条查询 + * + * @param id + * @return BizPointTotalDetailDTO + * @author generator + * @date 2021-04-20 + */ + BizPointTotalDetailDTO get(String id); + + /** + * 默认保存 + * + * @param dto + * @return void + * @author generator + * @date 2021-04-20 + */ + void save(BizPointTotalDetailDTO dto); + + /** + * 默认更新 + * + * @param dto + * @return void + * @author generator + * @date 2021-04-20 + */ + void update(BizPointTotalDetailDTO dto); + + /** + * 批量删除 + * + * @param ids + * @return void + * @author generator + * @date 2021-04-20 + */ + void delete(String[] ids); + + /** + * 根据业务类型查找数据 + * + * @param type + * @param objectId + * @return com.epmet.dto.BizPointTotalDetailDTO + * @author zhaoqifeng + * @date 2021/4/20 16:53 + */ + BizPointTotalDetailDTO getDataByObject(String type, String objectId); + + /** + * 小组积分详情 + * + * @param formDTO + * @return com.epmet.resi.group.dto.group.result.GroupPointDetailResultDTO + * @author zhaoqifeng + * @date 2021/4/21 14:05 + */ + GroupPointDetailResultDTO pointDetail(GroupPointFormDTO formDTO); + + /** + * 网格小组积分排行 + * + * @param formDTO + * @return java.util.List + * @author zhaoqifeng + * @date 2021/4/21 14:05 + */ + List groupPointRanking(GroupPointFormDTO formDTO); +} \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/BizPointUserTotalDetailService.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/BizPointUserTotalDetailService.java new file mode 100644 index 0000000000..51e8172f7c --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/BizPointUserTotalDetailService.java @@ -0,0 +1,143 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.service; + +import com.epmet.commons.mybatis.service.BaseService; +import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.dto.BizPointUserTotalDetailDTO; +import com.epmet.dto.form.GroupPointFormDTO; +import com.epmet.dto.result.PointRankingResultDTO; +import com.epmet.entity.BizPointUserTotalDetailEntity; + +import java.util.List; +import java.util.Map; + +/** + * 按业务类型积分总计 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-20 + */ +public interface BizPointUserTotalDetailService extends BaseService { + + /** + * 默认分页 + * + * @param params + * @return PageData + * @author generator + * @date 2021-04-20 + */ + PageData page(Map params); + + /** + * 默认查询 + * + * @param params + * @return java.util.List + * @author generator + * @date 2021-04-20 + */ + List list(Map params); + + /** + * 单条查询 + * + * @param id + * @return BizPointUserTotalDetailDTO + * @author generator + * @date 2021-04-20 + */ + BizPointUserTotalDetailDTO get(String id); + + /** + * 默认保存 + * + * @param dto + * @return void + * @author generator + * @date 2021-04-20 + */ + void save(BizPointUserTotalDetailDTO dto); + + /** + * 默认更新 + * + * @param dto + * @return void + * @author generator + * @date 2021-04-20 + */ + void update(BizPointUserTotalDetailDTO dto); + + /** + * 批量删除 + * + * @param ids + * @return void + * @author generator + * @date 2021-04-20 + */ + void delete(String[] ids); + + + /** + * 根据业务类型查找用户数据 + * + * @param type + * @param objectId + * @param userId + * @return com.epmet.dto.BizPointTotalDetailDTO + * @author zhaoqifeng + * @date 2021/4/20 16:53 + */ + BizPointUserTotalDetailDTO getDataByObject(String type, String objectId, String userId); + + /** + * 根据业务类型查找积分总和 + * + * @param type + * @param objectId + * @return java.lang.Integer + * @author zhaoqifeng + * @date 2021/4/20 17:21 + */ + Integer getTotalByObject(String type, String objectId); + + /** + * 小组积分贡献榜 + * + * @param tokenDto + * @param formDTO + * @return java.util.List + * @author zhaoqifeng + * @date 2021/4/21 14:06 + */ + List pointRanking(TokenDto tokenDto, GroupPointFormDTO formDTO); + + /** + * 获取今日增量 + * @author zhaoqifeng + * @date 2021/4/21 16:41 + * @param type + * @param objectId + * @return java.lang.Integer + */ + Integer getIncrease(String type, String objectId); +} \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/PointRuleService.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/PointRuleService.java index 28ec8991c2..cd39750f34 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/PointRuleService.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/PointRuleService.java @@ -24,6 +24,7 @@ import com.epmet.dto.form.PointDetailFormDTO; import com.epmet.dto.form.PointRuleFormDTO; import com.epmet.dto.form.PointRuleListFormDTO; import com.epmet.dto.result.CustomerFunctionResultDTO; +import com.epmet.dto.result.GroupPointRuleResultDTO; import com.epmet.dto.result.PointDetailResultDTO; import com.epmet.dto.result.PointRuleResultDTO; import com.epmet.entity.PointRuleEntity; @@ -69,4 +70,13 @@ public interface PointRuleService extends BaseService { PointRuleEntity getByEventCodeAndCustomerId(String customerId,String eventCode); InitPointRuleResultDTO initPointRule(); + + /** + * 获取小组积分规则 + * @author zhaoqifeng + * @date 2021/4/22 15:20 + * @param customerId + * @return com.epmet.dto.result.GroupPointRuleResultDTO + */ + GroupPointRuleResultDTO getGroupRule(String customerId); } \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/UserPointActionLogService.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/UserPointActionLogService.java index 8a35954ef0..892fd67a11 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/UserPointActionLogService.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/UserPointActionLogService.java @@ -123,4 +123,14 @@ public interface UserPointActionLogService extends BaseService + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.constant.FieldConstant; +import com.epmet.commons.tools.utils.Result; +import com.epmet.dao.BizPointTotalDetailDao; +import com.epmet.dto.BizPointTotalDetailDTO; +import com.epmet.dto.form.GroupPointFormDTO; +import com.epmet.resi.group.dto.group.result.GroupPointDetailResultDTO; +import com.epmet.dto.result.GroupPointRankingResultDTO; +import com.epmet.entity.BizPointTotalDetailEntity; +import com.epmet.resi.group.dto.group.ResiGroupDTO; +import com.epmet.resi.group.feign.ResiGroupOpenFeignClient; +import com.epmet.service.BizPointTotalDetailService; +import com.epmet.service.BizPointUserTotalDetailService; +import com.epmet.service.UserPointActionLogService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.Collator; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * 按业务类型积分总计 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-20 + */ +@Service +public class BizPointTotalDetailServiceImpl extends BaseServiceImpl implements BizPointTotalDetailService { + + @Autowired + private ResiGroupOpenFeignClient resiGroupOpenFeignClient; + @Autowired + private BizPointUserTotalDetailService bizPointUserTotalDetailService; + @Autowired + private UserPointActionLogService userPointActionLogService; + + @Override + public PageData page(Map params) { + IPage page = baseDao.selectPage( + getPage(params, FieldConstant.CREATED_TIME, false), + getWrapper(params) + ); + return getPageData(page, BizPointTotalDetailDTO.class); + } + + @Override + public List list(Map params) { + List entityList = baseDao.selectList(getWrapper(params)); + + return ConvertUtils.sourceToTarget(entityList, BizPointTotalDetailDTO.class); + } + + private QueryWrapper getWrapper(Map params){ + String id = (String)params.get(FieldConstant.ID_HUMP); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id); + + return wrapper; + } + + @Override + public BizPointTotalDetailDTO get(String id) { + BizPointTotalDetailEntity entity = baseDao.selectById(id); + return ConvertUtils.sourceToTarget(entity, BizPointTotalDetailDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(BizPointTotalDetailDTO dto) { + BizPointTotalDetailEntity entity = ConvertUtils.sourceToTarget(dto, BizPointTotalDetailEntity.class); + insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(BizPointTotalDetailDTO dto) { + BizPointTotalDetailEntity entity = ConvertUtils.sourceToTarget(dto, BizPointTotalDetailEntity.class); + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(String[] ids) { + // 逻辑删除(@TableLogic 注解) + baseDao.deleteBatchIds(Arrays.asList(ids)); + } + + /** + * 根据业务类型查找数据 + * + * @param type + * @param objectId + * @return com.epmet.dto.BizPointTotalDetailDTO + * @author zhaoqifeng + * @date 2021/4/20 16:53 + */ + @Override + public BizPointTotalDetailDTO getDataByObject(String type, String objectId) { + return baseDao.selectDataByObject(type, objectId); + } + + /** + * 小组积分详情 + * + * @param formDTO + * @return com.epmet.resi.group.dto.group.result.GroupPointDetailResultDTO + * @author zhaoqifeng + * @date 2021/4/21 14:05 + */ + @Override + public GroupPointDetailResultDTO pointDetail(GroupPointFormDTO formDTO) { + Result result = resiGroupOpenFeignClient.groupPointDetail(formDTO.getGroupId()); + if (!result.success() || null == result.getData()) { + throw new RenException(result.getCode(), result.getMsg()); + } + GroupPointDetailResultDTO detail = result.getData(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("BIZ_TYPE", "group") + .eq("OBJECT_ID", formDTO.getGroupId()) + .eq("DEL_FLAG", NumConstant.ZERO_STR); + BizPointTotalDetailEntity entity = baseDao.selectOne(wrapper); + Integer increase = userPointActionLogService.getIncrease("group", formDTO.getGroupId()); + detail.setIncrease(increase.toString()); + if (null == entity) { + detail.setToUpgrade(detail.getNextLevelPoint()); + detail.setTotal(NumConstant.ZERO_STR); + detail.setCurrentPoint(NumConstant.ZERO_STR); + } else { + int toUpgrade = Integer.parseInt(detail.getNextLevelPoint()) - entity.getTotalPoint(); + detail.setToUpgrade(Integer.toString(toUpgrade)); + detail.setTotal(entity.getTotalPoint().toString()); + detail.setCurrentPoint(entity.getTotalPoint().toString()); + } + return detail; + } + + /** + * 网格小组积分排行 + * + * @param formDTO + * @return java.util.List + * @author zhaoqifeng + * @date 2021/4/21 14:05 + */ + @Override + public List groupPointRanking(GroupPointFormDTO formDTO) { + List list; + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("BIZ_TYPE", "group") + .eq("GRID_ID", formDTO.getGridId()) + .eq("DEL_FLAG", NumConstant.ZERO_STR) + .orderByDesc("TOTAL_POINT"); + List totalDetailList = baseDao.selectList(wrapper); + Result> groupList = resiGroupOpenFeignClient.getGroupListByGrid(formDTO.getGridId()); + list = groupList.getData().stream().map(item -> { + GroupPointRankingResultDTO dto = new GroupPointRankingResultDTO(); + dto.setGroupId(item.getId()); + dto.setGroupName(item.getGroupName()); + dto.setPoint(NumConstant.ZERO_STR); + if (formDTO.getGroupId().equals(item.getId())) { + dto.setIsMine(NumConstant.ONE_STR); + } else { + dto.setIsMine(NumConstant.ZERO_STR); + } + return dto; + }).collect(Collectors.toList()); + list.forEach(item -> totalDetailList.stream().filter(detail -> item.getGroupId().equals(detail.getObjectId())).forEach(total -> { + item.setPoint(total.getTotalPoint().toString()); + + })); + list = + list.stream().sorted(Comparator.comparing(GroupPointRankingResultDTO :: getPoint, Comparator.comparingInt(Integer::parseInt)).reversed() + .thenComparing(GroupPointRankingResultDTO::getGroupName, Collator.getInstance(Locale.CHINA))) + .collect(Collectors.toList()); + AtomicInteger i = new AtomicInteger(1); + list.forEach(dto -> { + dto.setRanking(String.valueOf(i.getAndIncrement())); + }); + return list; + } + +} \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/BizPointUserTotalDetailServiceImpl.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/BizPointUserTotalDetailServiceImpl.java new file mode 100644 index 0000000000..1e3563fb6d --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/BizPointUserTotalDetailServiceImpl.java @@ -0,0 +1,251 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.FieldConstant; +import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.constant.StrConstant; +import com.epmet.commons.tools.enums.BizTypeEnum; +import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.utils.Result; +import com.epmet.dao.BizPointUserTotalDetailDao; +import com.epmet.dto.BizPointUserTotalDetailDTO; +import com.epmet.dto.form.GroupPointFormDTO; +import com.epmet.dto.result.PointRankingResultDTO; +import com.epmet.dto.result.UserBaseInfoResultDTO; +import com.epmet.entity.BizPointUserTotalDetailEntity; +import com.epmet.feign.EpmetUserOpenFeignClient; +import com.epmet.resi.group.dto.group.ResiGroupDTO; +import com.epmet.resi.group.dto.member.ResiGroupMemberDTO; +import com.epmet.resi.group.feign.ResiGroupOpenFeignClient; +import com.epmet.service.BizPointUserTotalDetailService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.Collator; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * 按业务类型积分总计 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-20 + */ +@Service +public class BizPointUserTotalDetailServiceImpl extends BaseServiceImpl implements BizPointUserTotalDetailService { + + @Autowired + private EpmetUserOpenFeignClient epmetUserOpenFeignClient; + @Autowired + private ResiGroupOpenFeignClient resiGroupOpenFeignClient; + + @Override + public PageData page(Map params) { + IPage page = baseDao.selectPage( + getPage(params, FieldConstant.CREATED_TIME, false), + getWrapper(params) + ); + return getPageData(page, BizPointUserTotalDetailDTO.class); + } + + @Override + public List list(Map params) { + List entityList = baseDao.selectList(getWrapper(params)); + + return ConvertUtils.sourceToTarget(entityList, BizPointUserTotalDetailDTO.class); + } + + private QueryWrapper getWrapper(Map params){ + String id = (String)params.get(FieldConstant.ID_HUMP); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id); + + return wrapper; + } + + @Override + public BizPointUserTotalDetailDTO get(String id) { + BizPointUserTotalDetailEntity entity = baseDao.selectById(id); + return ConvertUtils.sourceToTarget(entity, BizPointUserTotalDetailDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(BizPointUserTotalDetailDTO dto) { + BizPointUserTotalDetailEntity entity = ConvertUtils.sourceToTarget(dto, BizPointUserTotalDetailEntity.class); + insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(BizPointUserTotalDetailDTO dto) { + BizPointUserTotalDetailEntity entity = ConvertUtils.sourceToTarget(dto, BizPointUserTotalDetailEntity.class); + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(String[] ids) { + // 逻辑删除(@TableLogic 注解) + baseDao.deleteBatchIds(Arrays.asList(ids)); + } + + /** + * 根据业务类型查找用户数据 + * + * @param type + * @param objectId + * @param userId + * @return com.epmet.dto.BizPointTotalDetailDTO + * @author zhaoqifeng + * @date 2021/4/20 16:53 + */ + @Override + public BizPointUserTotalDetailDTO getDataByObject(String type, String objectId, String userId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("BIZ_TYPE", type) + .eq("OBJECT_ID", objectId) + .eq("USER_ID", userId) + .eq("DEL_FLAG", NumConstant.ZERO_STR); + BizPointUserTotalDetailEntity entity = baseDao.selectOne(wrapper); + return ConvertUtils.sourceToTarget(entity, BizPointUserTotalDetailDTO.class); + } + + /** + * 根据业务类型查找积分总和 + * + * @param type + * @param objectId + * @return java.lang.Integer + * @author zhaoqifeng + * @date 2021/4/20 17:21 + */ + @Override + public Integer getTotalByObject(String type, String objectId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("IFNULL(SUM(TOTAL_POINT), 0) as TOTAL_POINT") + .eq("BIZ_TYPE", type) + .eq("OBJECT_ID", objectId) + .eq("DEL_FLAG", NumConstant.ZERO_STR); + BizPointUserTotalDetailEntity entity = baseDao.selectOne(wrapper); + if (null == entity) { + return NumConstant.ZERO; + } + return entity.getTotalPoint(); + } + + public static void main(String[] args) { + System.out.println(BizTypeEnum.ACTIVITY.getType()); + } + + /** + * 小组积分贡献榜 + * + * @param tokenDto + * @param formDTO + * @return java.util.List + * @author zhaoqifeng + * @date 2021/4/21 14:06 + */ + @Override + public List pointRanking(TokenDto tokenDto, GroupPointFormDTO formDTO) { + List list = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("BIZ_TYPE", "group") + .eq("OBJECT_ID", formDTO.getGroupId()) + .eq("DEL_FLAG", NumConstant.ZERO_STR) + .orderByDesc("TOTAL_POINT"); + List userTotalList = baseDao.selectList(wrapper); + AtomicInteger i = new AtomicInteger(1); + + //获取小组信息 + Result group = resiGroupOpenFeignClient.getGroupDetail(formDTO.getGroupId()); + if (!group.success() || null == group.getData()) { + throw new RenException(group.getCode(), group.getMsg()); + } + List memberList = group.getData().getMemberList(); + list = memberList.stream().map(item -> { + PointRankingResultDTO dto = new PointRankingResultDTO(); + dto.setUserId(item.getCustomerUserId()); + dto.setPoint(NumConstant.ZERO_STR); + if (tokenDto.getUserId().equals(item.getCustomerUserId())) { + dto.setIsMine(NumConstant.ONE_STR); + } else { + dto.setIsMine(NumConstant.ZERO_STR); + } + return dto; + }).collect(Collectors.toList()); + list.forEach(item -> userTotalList.stream().filter(user -> user.getUserId().equals(item.getUserId())).forEach(total -> { + item.setPoint(total.getTotalPoint().toString()); + })); + //获取用户信息 + List userIds = memberList.stream().map(ResiGroupMemberDTO :: getCustomerUserId).collect(Collectors.toList()); + Result> userInfoListResult = epmetUserOpenFeignClient.queryUserBaseInfo(userIds); + if (!userInfoListResult.success() || null == userInfoListResult.getData()) { + throw new RenException(userInfoListResult.getCode(), userInfoListResult.getMsg()); + } + list.forEach(item -> userInfoListResult.getData().stream().filter(baseInfo -> item.getUserId().equals(baseInfo.getUserId())).forEach( + user -> { + //楼院小组显示昵称,支部小组显示姓名 + if (("ordinary").equals(group.getData().getGroupType())) { + item.setName(user.getNickname()); + } else { + item.setName(StrConstant.EPMETY_STR); + if (StringUtils.isNotBlank(user.getSurname())){ + item.setName(user.getSurname()); + } + if (StringUtils.isNotBlank(user.getName())){ + item.setName(item.getName().concat(user.getName())); + } + } + item.setHeadPhoto(user.getHeadImgUrl()); + } + )); + list = list.stream().sorted(Comparator.comparing(PointRankingResultDTO :: getPoint, Comparator.comparingInt(Integer::parseInt)).reversed() + .thenComparing(PointRankingResultDTO::getName, Collator.getInstance(Locale.CHINA))) + .collect(Collectors.toList()); + list.forEach(item -> item.setRanking(String.valueOf(i.getAndIncrement()))); + return list; + } + + /** + * 获取今日增量 + * + * @param type + * @param objectId + * @return java.lang.Integer + * @author zhaoqifeng + * @date 2021/4/21 16:41 + */ + @Override + public Integer getIncrease(String type, String objectId) { + return baseDao.selectIncrease(type, objectId); + } + +} diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointAdjustmentLogServiceImpl.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointAdjustmentLogServiceImpl.java index 3d943ba887..e5aad18cef 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointAdjustmentLogServiceImpl.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointAdjustmentLogServiceImpl.java @@ -206,6 +206,11 @@ public class PointAdjustmentLogServiceImpl extends BaseServiceImpl list = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("CUSTOMER_ID", customerId) + .eq("DEL_FLAG", NumConstant.ZERO_STR); + List ruleList = baseDao.selectList(wrapper); + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(ruleList)) { + AtomicInteger index=new AtomicInteger(1); + list = ruleList.stream().filter(i -> ("resi_group").equals(Objects.requireNonNull(EventEnum.getEnum(i.getEventCode())).getEventClass())).map(item -> { + String rule = index.getAndIncrement() + "." + item.getRuleName() + "," + "" + item.getPoint() + "分"; + if (NumConstant.ZERO != item.getUpLimit()) { + rule = rule + "(每天最多得" + item.getUpLimit() + "分)"; + } + return rule; + }).collect(Collectors.toList()); + } + resultDTO.setRules(list); + return resultDTO; + } + private void insertOperateRecord(TokenDto tokenDTO, PointRuleEntity entityNew, PointRuleEntity entityDB, String opType) { RuleOperateLogEntity record = new RuleOperateLogEntity(); if (tokenDTO != null) { diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointActionLogServiceImpl.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointActionLogServiceImpl.java index 3fce5f3edd..af4b5fd499 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointActionLogServiceImpl.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointActionLogServiceImpl.java @@ -31,17 +31,14 @@ import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.dao.UserPointActionLogDao; +import com.epmet.dto.BizPointTotalDetailDTO; +import com.epmet.dto.BizPointUserTotalDetailDTO; import com.epmet.dto.UserPointActionLogDTO; import com.epmet.dto.form.CommonPageUserFormDTO; import com.epmet.dto.result.ResiPointLogListResultDTO; import com.epmet.dto.result.ResiPointLogPeriodResultDTO; -import com.epmet.entity.PointRuleEntity; -import com.epmet.entity.UserPointActionLogEntity; -import com.epmet.entity.UserPointStatisticalDailyEntity; -import com.epmet.entity.UserPointTotalEntity; -import com.epmet.service.UserPointActionLogService; -import com.epmet.service.UserPointStatisticalDailyService; -import com.epmet.service.UserPointTotalService; +import com.epmet.entity.*; +import com.epmet.service.*; import com.epmet.utils.DimIdGenerator; import com.epmet.utils.ModuleConstant; import com.epmet.utils.RuleCycleEnum; @@ -77,6 +74,10 @@ public class UserPointActionLogServiceImpl extends BaseServiceImpl page(Map params) { IPage page = baseDao.selectPage( @@ -253,7 +254,7 @@ public class UserPointActionLogServiceImpl extends BaseServiceImpl NumConstant.ZERO){ //不按照sourceId查询,查询指定日期内的相关积分规则的总和 Integer sum = baseDao.selectSumByEvent(event.getUserId(),eventCode,null,event.getCustomerId(),dateCheck,right); - if(null == sum) sum = NumConstant.ZERO; + if(null == sum) { + sum = NumConstant.ZERO; + } if(StringUtils.equals(ModuleConstant.OPERATION_TYPE_PLUS,ruleInfo.getOperateType())){ if(ruleInfo.getPoint() < NumConstant.ZERO){ //保证要加的积分是正数 @@ -317,8 +320,16 @@ public class UserPointActionLogServiceImpl extends BaseServiceImpl【%s】", JSON.toJSON(event))); + log.error(String.format("未检测到该用户下有效的积分规则,消息体->【%s】", JSON.toJSON(event))); } } + /** + * 获取今日增量 + * + * @param type + * @param objectId + * @return java.lang.Integer + * @author zhaoqifeng + * @date 2021/4/21 16:41 + */ + @Override + public Integer getIncrease(String type, String objectId) { + return baseDao.selectIncrease(type, objectId); + } + private void plusPoint(SendPointFormDTO grantPoint) { ValidatorUtils.validateEntity(grantPoint, SendPointFormDTO.SendPointGroup.class); @@ -379,6 +446,7 @@ public class UserPointActionLogServiceImpl extends BaseServiceImpl wrapper = new QueryWrapper<>(); + wrapper.select("IFNULL(SUM(POINT), 0) as POINT") + .eq("BIZ_TYPE", type) + .eq("OBJECT_ID", objectId) + .eq("ACTION_FLAG", "plus") + .eq("DEL_FLAG", NumConstant.ZERO_STR); + UserPointActionLogEntity entity1 = baseDao.selectOne(wrapper); + int plusTotal = null == entity1? NumConstant.ZERO : entity1.getPoint(); + wrapper = new QueryWrapper<>(); + wrapper.select("IFNULL(SUM(POINT), 0) as POINT") + .eq("BIZ_TYPE", type) + .eq("OBJECT_ID", objectId) + .eq("ACTION_FLAG", "minus") + .eq("DEL_FLAG", NumConstant.ZERO_STR); + UserPointActionLogEntity entity2 = baseDao.selectOne(wrapper); + int minusTotal = null == entity2? NumConstant.ZERO : entity2.getPoint(); + return plusTotal - minusTotal; + } + + private Integer getUserTotalByObject(String type, String objectId, String userId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("IFNULL(SUM(POINT), 0) as POINT") + .eq("BIZ_TYPE", type) + .eq("OBJECT_ID", objectId) + .eq("USER_ID", userId) + .eq("ACTION_FLAG", "plus") + .eq("DEL_FLAG", NumConstant.ZERO_STR); + UserPointActionLogEntity entity1 = baseDao.selectOne(wrapper); + int plusTotal = null == entity1? NumConstant.ZERO : entity1.getPoint(); + wrapper = new QueryWrapper<>(); + wrapper.select("IFNULL(SUM(POINT), 0) as POINT") + .eq("BIZ_TYPE", type) + .eq("OBJECT_ID", objectId) + .eq("USER_ID", userId) + .eq("ACTION_FLAG", "minus") + .eq("DEL_FLAG", NumConstant.ZERO_STR); + UserPointActionLogEntity entity2 = baseDao.selectOne(wrapper); + int minusTotal = null == entity2? NumConstant.ZERO : entity2.getPoint(); + return plusTotal - minusTotal; + } } \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/utils/ModuleConstant.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/utils/ModuleConstant.java index be66473992..b65cab7b2a 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/utils/ModuleConstant.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/utils/ModuleConstant.java @@ -122,4 +122,7 @@ public interface ModuleConstant extends Constant { String EVENT_NAME_ADD_LIVE = "添加活动实况"; String VERIFICATED_POINT_CAN_NOT_BE_NULL = "核销积分不能为空"; + + String GROUP_RULE_SUMMARY = "小组积分是指组内所有成员在本组内活动时所获取的积分总和。"; + String CONTRI_SUMMARY = "组内贡献是指组内成员在本组进行活动时所获取的积分贡献值。"; } diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.10__updateRule.sql b/epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.10__updateRule.sql new file mode 100644 index 0000000000..e9fa5a7fd7 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.10__updateRule.sql @@ -0,0 +1,3 @@ +UPDATE point_rule_default SET RULE_NAME = '组长转话题为议题' WHERE EVENT_CODE = 'shift_topic_to_issue'; +UPDATE point_rule SET RULE_NAME = '组长转话题为议题' WHERE EVENT_CODE = 'shift_topic_to_issue'; +INSERT INTO `epmet_point`.`point_rule_default`(`ID`, `RULE_NAME`, `RULE_DESC`, `EVENT_CODE`, `FUNCTION_ID`, `OPERATE_TYPE`, `UP_LIMIT`, `UP_LIMIT_DESC`, `UP_LIMIT_PREFIX`, `RULE_PERIOD`, `POINT`, `POINT_UNIT`, `ENABLED_FLAG`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('10', '组长解决话题', '组长解决组内话题', 'leader_resolve_topic', '1', 'plus', 0, '无上限', NULL, 'day', 2, 'time', '0', '0', 0, 'APP_USER', '2021-04-19 15:55:18', 'APP_USER', '2021-04-19 15:55:18'); diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.9__groupPoint.sql b/epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.9__groupPoint.sql new file mode 100644 index 0000000000..3e22e64f7a --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/resources/db/migration/V0.0.9__groupPoint.sql @@ -0,0 +1,40 @@ +CREATE TABLE `biz_point_total_detail` ( + `ID` varchar(64) NOT NULL COMMENT '主键', + `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户ID', + `AGENCY_ID` varchar(64) NOT NULL COMMENT '组织Id', + `GRID_ID` varchar(64) NOT NULL COMMENT '网格ID', + `BIZ_TYPE` varchar(64) NOT NULL DEFAULT '0' COMMENT '业务类型:小组:group', + `OBJECT_ID` varchar(64) NOT NULL DEFAULT '0' COMMENT '业务类型的对象id', + `TOTAL_POINT` int(11) NOT NULL DEFAULT '0' COMMENT 'OBJECTID的总积分 总积分=objectId下所有的用户积分', + `DEL_FLAG` varchar(1) NOT NULL DEFAULT '0' COMMENT '删除标识', + `REVISION` int(11) NOT NULL DEFAULT '0' COMMENT '乐观锁', + `CREATED_BY` varchar(64) NOT NULL COMMENT '创建人', + `CREATED_TIME` datetime NOT NULL COMMENT '创建时间', + `UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人', + `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE KEY `unx_o_point` (`OBJECT_ID`,`BIZ_TYPE`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='按业务类型积分总计'; +CREATE TABLE `biz_point_user_total_detail` ( + `ID` varchar(64) NOT NULL COMMENT '主键', + `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户ID', + `AGENCY_ID` varchar(64) NOT NULL COMMENT '组织Id', + `GRID_ID` varchar(64) NOT NULL COMMENT '网格ID', + `USER_ID` varchar(64) NOT NULL COMMENT '用户ID', + `BIZ_TYPE` varchar(64) NOT NULL DEFAULT '0' COMMENT '业务类型:小组:group', + `OBJECT_ID` varchar(64) NOT NULL DEFAULT '0' COMMENT '业务类型的对象id', + `TOTAL_POINT` int(11) NOT NULL DEFAULT '0' COMMENT 'OBJECTID的总积分 总积分=objectId下所有的用户积分', + `DEL_FLAG` varchar(1) NOT NULL DEFAULT '0' COMMENT '删除标识', + `REVISION` int(11) NOT NULL DEFAULT '0' COMMENT '乐观锁', + `CREATED_BY` varchar(64) NOT NULL COMMENT '创建人', + `CREATED_TIME` datetime NOT NULL COMMENT '创建时间', + `UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人', + `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE KEY `unx_point` (`USER_ID`,`OBJECT_ID`,`BIZ_TYPE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='按业务类型积分总计'; + +ALTER TABLE `user_point_action_log` + ADD COLUMN `BIZ_TYPE` varchar(64) NULL COMMENT '业务类型:小组:group 活动 activity' AFTER `EVENT_ID`, + ADD COLUMN `OBJECT_ID` varchar(64) NULL COMMENT '业务类型的对象id' AFTER `BIZ_TYPE`, + ADD COLUMN `SOURCE_TYPE` varchar(20) NULL COMMENT '活动 activity 活动ID\r\n志愿者 volunteer 用户ID\r\n邀请进组 invite 用户ID\r\n话题 topic 话题ID\r\n话题转议题 issue 议题id\r\n话题转项目 project 话题ID' AFTER `OBJECT_ID`; \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/BizPointTotalDetailDao.xml b/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/BizPointTotalDetailDao.xml new file mode 100644 index 0000000000..e1e8202e83 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/BizPointTotalDetailDao.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/BizPointUserTotalDetailDao.xml b/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/BizPointUserTotalDetailDao.xml new file mode 100644 index 0000000000..a846469881 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/BizPointUserTotalDetailDao.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/PointRuleDao.xml b/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/PointRuleDao.xml index 23d372e0e7..c18c78976b 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/PointRuleDao.xml +++ b/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/PointRuleDao.xml @@ -28,7 +28,11 @@ SELECT DISTINCT FUNCTION_ID FROM point_rule WHERE CUSTOMER_ID = #{customerId,jdbcType=VARCHAR} UPDATE point_rule @@ -50,4 +54,4 @@ - \ No newline at end of file + diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointActionLogDao.xml b/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointActionLogDao.xml index 8e9a860b37..c7c6bf89c2 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointActionLogDao.xml +++ b/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointActionLogDao.xml @@ -65,4 +65,12 @@ AND CREATED_TIME #{right} + \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java index 2977849e22..190cbaf2f8 100644 --- a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java +++ b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java @@ -301,4 +301,12 @@ public interface GovIssueOpenFeignClient { **/ @PostMapping(value = "/gov/issue/issueprojectcategorydict/getcategorytaglist") Result getCategoryTagList(@RequestBody CategoryTagListFormDTO formDTO); + + /** + * @param customerId + * @Description 根据客户Id获取 议题列表 + * @Author sun + **/ + @PostMapping(value = "/gov/issue/issue/getissuelist") + Result> getIssueList(@RequestParam String customerId); } diff --git a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java index d8cc8c9d92..67e41d309a 100644 --- a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java +++ b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java @@ -256,4 +256,9 @@ public class GovIssueOpenFeignClientFallBack implements GovIssueOpenFeignClient public Result getCategoryTagList(CategoryTagListFormDTO formDTO) { return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "getCategoryTagList", formDTO); } + + @Override + public Result> getIssueList(String customerId) { + return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "getIssueList", customerId); + } } diff --git a/epmet-module/gov-issue/gov-issue-server/pom.xml b/epmet-module/gov-issue/gov-issue-server/pom.xml index cce26d7129..db20e31756 100644 --- a/epmet-module/gov-issue/gov-issue-server/pom.xml +++ b/epmet-module/gov-issue/gov-issue-server/pom.xml @@ -216,7 +216,6 @@ 192.168.1.130:9876;192.168.1.132:9876 - epmet_message diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueController.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueController.java index c64573730a..a539727606 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueController.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueController.java @@ -12,10 +12,7 @@ import com.epmet.resi.group.dto.group.result.GroupVotingListResultDTO; import com.epmet.resi.group.dto.topic.form.TopicInfoFormDTO; import com.epmet.service.IssueService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -246,5 +243,18 @@ public class IssueController { return new Result>().ok(issueService.getClosedListByGroup(formDTO)); } + /** + * desc: 获取议题列表 + * + * @param customerId + * @return com.epmet.commons.tools.utils.Result> + * @author LiuJanJun + * @date 2021/4/27 10:19 上午 + */ + @PostMapping("getissuelist") + public Result> getIssueList(@RequestParam String customerId) { + return new Result>().ok(issueService.getIssueList(customerId)); + } + } diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueService.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueService.java index e22236e324..90e06f1185 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueService.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueService.java @@ -315,4 +315,14 @@ public interface IssueService extends BaseService { * @return java.util.List */ List getClosedListByGroup(AllIssueFormDTO formDTO); + + /** + * desc: 根据客户Id获取议题列表 + * + * @param customerId + * @return java.util.List + * @author LiuJanJun + * @date 2021/4/27 10:23 上午 + */ + List getIssueList(String customerId); } diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java index 9b6bdb6688..7532a52fdb 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.nacos.client.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.rocketmq.messages.GroupAchievementMQMsg; import com.epmet.commons.tools.constant.AppClientConstant; import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.NumConstant; @@ -27,14 +28,15 @@ import com.epmet.dao.IssueDao; import com.epmet.dao.IssueProcessDao; import com.epmet.dao.IssueProjectRelationDao; import com.epmet.dto.*; -import com.epmet.dto.form.*; import com.epmet.dto.form.IssueAuditionFormDTO; import com.epmet.dto.form.IssueShiftedFromTopicFormDTO; +import com.epmet.dto.form.*; import com.epmet.dto.result.*; import com.epmet.entity.IssueEntity; import com.epmet.entity.IssueProcessEntity; import com.epmet.entity.IssueProjectRelationEntity; import com.epmet.feign.*; +import com.epmet.commons.tools.enums.AchievementTypeEnum; import com.epmet.redis.GovIssueRedis; import com.epmet.redis.IssueVoteDetailRedis; import com.epmet.resi.group.dto.group.form.AllIssueFormDTO; @@ -44,10 +46,11 @@ import com.epmet.resi.group.dto.group.result.GroupInfoResultDTO; import com.epmet.resi.group.dto.group.result.GroupShiftProjectListResultDTO; import com.epmet.resi.group.dto.group.result.GroupVotingListResultDTO; import com.epmet.resi.group.dto.topic.ResiTopicDTO; -import com.epmet.resi.group.dto.topic.form.*; import com.epmet.resi.group.dto.topic.form.GovTopicIssueInfoFormDTO; +import com.epmet.resi.group.dto.topic.form.*; import com.epmet.resi.group.dto.topic.result.GovTopicIssueInfoResultDTO; import com.epmet.resi.group.feign.ResiGroupOpenFeignClient; +import com.epmet.send.SendMqMsgUtil; import com.epmet.service.*; import com.epmet.utils.ModuleConstants; import com.github.pagehelper.PageHelper; @@ -553,7 +556,12 @@ public class IssueServiceImpl extends BaseServiceImpl imp //} //applicationService.update(app2update); - + //发送小组成就消息 + boolean flag = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient) + .sendGroupAchievementMqMsg(new GroupAchievementMQMsg(application.getCustomerId(), application.getGroupId(), AchievementTypeEnum.TOISSUE.getCode())); + if (!flag) { + logger.error("发送(小组成就)系统消息到message服务失败"); + } return app2update.getIssueId(); } @@ -1387,4 +1395,17 @@ public class IssueServiceImpl extends BaseServiceImpl imp return baseDao.selectClosedListByTopic(formDTO); } + @Override + public List getIssueList(String customerId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda() + .eq(IssueEntity::getCustomerId,customerId) + .eq(IssueEntity::getDelFlag,NumConstant.ZERO_STR); + List issueEntities = baseDao.selectList(queryWrapper); + if (CollectionUtils.isEmpty(issueEntities)){ + return null; + } + return ConvertUtils.sourceToTarget(issueEntities,IssueDTO.class); + } + } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java index b378946ff3..bfe0f9f00f 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java @@ -2,6 +2,7 @@ package com.epmet.mq; import com.epmet.commons.rocketmq.constants.ConsomerGroupConstants; import com.epmet.commons.rocketmq.constants.TopicConstants; +import com.epmet.commons.tools.enums.EnvEnum; import com.epmet.mq.listener.InitCustomerOrgRolesListener; import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.consumer.listener.MessageListener; @@ -14,7 +15,8 @@ import javax.annotation.PostConstruct; @Component public class RocketMQConsumerRegister { - + @Value("${spring.profiles.active}") + private String env; @Value("${rocketmq.name-server}") private String nameServer; @@ -27,7 +29,9 @@ public class RocketMQConsumerRegister { @PostConstruct public void registerAllListeners() { try { - register(nameServer, ConsomerGroupConstants.INIT_CUSTOMER_ORG_ROLES_GROUP, MessageModel.CLUSTERING, TopicConstants.INIT_CUSTOMER, "*", new InitCustomerOrgRolesListener()); + if (!EnvEnum.LOCAL.getCode().equals(env)) { + register(nameServer, ConsomerGroupConstants.INIT_CUSTOMER_ORG_ROLES_GROUP, MessageModel.CLUSTERING, TopicConstants.INIT_CUSTOMER, "*", new InitCustomerOrgRolesListener()); + } } catch (MQClientException e) { e.printStackTrace(); } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/listener/InitCustomerOrgListener.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/listener/InitCustomerOrgListener.java deleted file mode 100644 index 6ddc79801b..0000000000 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/listener/InitCustomerOrgListener.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.epmet.mq.listener; - -import com.alibaba.fastjson.JSON; -import com.epmet.commons.rocketmq.constants.ConsomerGroupConstants; -import com.epmet.commons.rocketmq.constants.TopicConstants; -import com.epmet.commons.rocketmq.messages.InitCustomerMQMsg; -import com.epmet.commons.tools.distributedlock.DistributedLock; -import com.epmet.commons.tools.exception.ExceptionUtils; -import com.epmet.commons.tools.exception.RenException; -import com.epmet.constant.UserWorkType; -import com.epmet.dto.CustomerAgencyDTO; -import com.epmet.dto.form.AddAgencyAndStaffFormDTO; -import com.epmet.dto.form.AdminStaffFromDTO; -import com.epmet.service.AgencyService; -import org.apache.rocketmq.common.message.MessageExt; -import org.apache.rocketmq.spring.annotation.MessageModel; -import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; -import org.apache.rocketmq.spring.core.RocketMQListener; -import org.redisson.api.RLock; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.concurrent.TimeUnit; - -/** - * 监听初始化客户动作,为客户初始化角色列表 - */ -//@RocketMQMessageListener(topic = TopicConstants.INIT_CUSTOMER, -// consumerGroup = ConsomerGroupConstants.INIT_CUSTOMER_ORG_ROLES_GROUP, -// messageModel = MessageModel.CLUSTERING, -// selectorExpression = "*") -//@Component -public class InitCustomerOrgListener implements RocketMQListener { - - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Autowired - private AgencyService agencyService; - - @Autowired - private DistributedLock distributedLock; - - @Override - public void onMessage(MessageExt messageExt) { - String msg = new String(messageExt.getBody()); - logger.info("初始化客户-初始化组织信息-收到消息内容:{}", msg); - InitCustomerMQMsg msgObj = JSON.parseObject(msg, InitCustomerMQMsg.class); - - RLock lock = null; - try { - lock = distributedLock.getLock(String.format("lock:init_customer_org:%s", msgObj.getCustomerId()), - 30l, 30l, TimeUnit.SECONDS); - agencyService.saveRootAgency(constructRootAndAgencyDTO(msgObj)); - } catch (RenException e) { - // 如果是我们手动抛出的异常,说明在业务可控范围内。目前不需要MQ重试 - logger.error("【RocketMQ】初始化客户组织失败:".concat(ExceptionUtils.getErrorStackTrace(e))); - } catch (Exception e) { - // 不是我们自己抛出的异常,可以让MQ重试 - logger.error("【RocketMQ】初始化客户组织失败:".concat(ExceptionUtils.getErrorStackTrace(e))); - throw e; - } finally { - distributedLock.unLock(lock); - } - } - - /** - * @Description 构造dto - * @return - * @author wxz - * @date 2021.01.06 15:03 - */ - private AddAgencyAndStaffFormDTO constructRootAndAgencyDTO(InitCustomerMQMsg msgObj) { - AddAgencyAndStaffFormDTO agencyAndStaff = new AddAgencyAndStaffFormDTO(); - //客户组织信息 - CustomerAgencyDTO agencyDTO = new CustomerAgencyDTO(); - agencyDTO.setId(msgObj.getAgency().getAgencyId()); - agencyDTO.setCustomerId(msgObj.getCustomerId()); - agencyDTO.setOrganizationName(msgObj.getAgency().getOrganizationName()); - agencyDTO.setLevel(msgObj.getAgency().getLevel()); - agencyDTO.setAreaCode(msgObj.getAgency().getAreaCode()); - agencyDTO.setProvince(msgObj.getAgency().getProvince()); - agencyDTO.setCity(msgObj.getAgency().getCity()); - agencyDTO.setDistrict(msgObj.getAgency().getDistrict()); - agencyAndStaff.setAgencyDTO(agencyDTO); - - //客户管理员信息 - AdminStaffFromDTO staffSubmitFrom = new AdminStaffFromDTO(); - staffSubmitFrom.setCustomerId(msgObj.getCustomerId()); - staffSubmitFrom.setAgencyId(msgObj.getStaff().getAgencyId()); - staffSubmitFrom.setGender(msgObj.getStaff().getGender()); - staffSubmitFrom.setMobile(msgObj.getStaff().getMobile()); - staffSubmitFrom.setName(msgObj.getStaff().getName()); - staffSubmitFrom.setWorkType(UserWorkType.FULL_TIME); - agencyAndStaff.setStaffDTO(staffSubmitFrom); - - return agencyAndStaff; - } -} diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/listener/InitCustomerOrgRolesListener.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/listener/InitCustomerOrgRolesListener.java index 1225da9abd..010e2044a3 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/listener/InitCustomerOrgRolesListener.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/listener/InitCustomerOrgRolesListener.java @@ -23,11 +23,12 @@ import java.util.List; import java.util.concurrent.TimeUnit; /** + * @author wxz * @Description 创建客户-组织和角色监听器 * @return - * @author wxz * @date 2021.03.03 16:10 -*/ + */ +//@Component public class InitCustomerOrgRolesListener implements MessageListenerConcurrently { private Logger logger = LoggerFactory.getLogger(getClass()); @@ -37,7 +38,8 @@ public class InitCustomerOrgRolesListener implements MessageListenerConcurrently try { msgs.forEach(msg -> consumeMessage(msg)); } catch (Exception e) { - return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; + logger.error(ExceptionUtils.getErrorStackTrace(e)); + return ConsumeConcurrentlyStatus.RECONSUME_LATER; } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } @@ -52,7 +54,7 @@ public class InitCustomerOrgRolesListener implements MessageListenerConcurrently try { distributedLock = SpringContextUtils.getBean(DistributedLock.class); lock = distributedLock.getLock(String.format("lock:init_customer_org:%s", msgObj.getCustomerId()), - 30l, 30l, TimeUnit.SECONDS); + 30L, 30L, TimeUnit.SECONDS); SpringContextUtils.getBean(AgencyService.class).saveRootAgency(constructRootAndAgencyDTO(msgObj)); } catch (RenException e) { // 如果是我们手动抛出的异常,说明在业务可控范围内。目前不需要MQ重试 @@ -67,8 +69,8 @@ public class InitCustomerOrgRolesListener implements MessageListenerConcurrently } /** - * @Description 构造dto * @return + * @Description 构造dto * @author wxz * @date 2021.01.06 15:03 */ @@ -98,4 +100,14 @@ public class InitCustomerOrgRolesListener implements MessageListenerConcurrently return agencyAndStaff; } + + /* @Override + public ConsumerConfigProperties getConsumerProperty() { + ConsumerConfigProperties configProperties = new ConsumerConfigProperties(); + configProperties.setConsumerGroup(ConsomerGroupConstants.INIT_CUSTOMER_ORG_ROLES_GROUP); + configProperties.setTopic(TopicConstants.INIT_CUSTOMER); + configProperties.setTag("*"); + configProperties.setConsumerListener(this); + return configProperties; + }*/ } diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java new file mode 100644 index 0000000000..057cf3c501 --- /dev/null +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java @@ -0,0 +1,62 @@ +package com.epmet.mq; + +import com.epmet.commons.rocketmq.constants.ConsomerGroupConstants; +import com.epmet.commons.rocketmq.constants.TopicConstants; +import com.epmet.mq.listener.InitCustomerComponentsListener; +import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; +import org.apache.rocketmq.client.consumer.listener.MessageListener; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.common.protocol.heartbeat.MessageModel; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +public class RocketMQConsumerRegister { + + @Value("${rocketmq.name-server}") + private String nameServer; + + /** + * @return + * @Description 注册监听器 + * @author wxz + * @date 2021.03.03 16:09 + */ + @PostConstruct + public void registerAllListeners() { + try { + register(nameServer, ConsomerGroupConstants.INIT_CUSTOMER_COMPONENTS_GROUP, MessageModel.CLUSTERING, TopicConstants.INIT_CUSTOMER, "*", new InitCustomerComponentsListener()); + } catch (MQClientException e) { + e.printStackTrace(); + } + } + + public void register(String nameServer, String group, MessageModel messageModel, String topic, String subException, MessageListener listener) throws MQClientException { + // 实例化消费者 + DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(group); + + // 设置NameServer的地址 + consumer.setNamesrvAddr(nameServer); + consumer.setMessageModel(messageModel); + consumer.setInstanceName(buildInstanceName()); + // 订阅一个或者多个Topic,以及Tag来过滤需要消费的消息 + consumer.subscribe(topic, subException); + // 注册回调实现类来处理从broker拉取回来的消息 + consumer.registerMessageListener(listener); + // 启动消费者实例 + consumer.start(); + } + + private String buildInstanceName() { + String instanceName = ""; + for (int i = 0; i < 4; i++) { + int t = (int) (Math.random() * 10); + instanceName = instanceName.concat(t + ""); + } + + return instanceName; + } + +} diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/mq/listener/InitCustomerCustomizeListener.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/mq/listener/InitCustomerComponentsListener.java similarity index 54% rename from epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/mq/listener/InitCustomerCustomizeListener.java rename to epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/mq/listener/InitCustomerComponentsListener.java index 6fa846c46c..d21ea39357 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/mq/listener/InitCustomerCustomizeListener.java +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/mq/listener/InitCustomerComponentsListener.java @@ -1,46 +1,45 @@ package com.epmet.mq.listener; import com.alibaba.fastjson.JSON; -import com.epmet.commons.rocketmq.constants.ConsomerGroupConstants; -import com.epmet.commons.rocketmq.constants.TopicConstants; import com.epmet.commons.rocketmq.messages.InitCustomerMQMsg; import com.epmet.commons.tools.distributedlock.DistributedLock; import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.utils.SpringContextUtils; import com.epmet.dto.CustomerHomeDTO; import com.epmet.service.CustomerHomeService; +import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext; +import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; +import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; import org.apache.rocketmq.common.message.MessageExt; -import org.apache.rocketmq.spring.annotation.MessageModel; -import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; -import org.apache.rocketmq.spring.core.RocketMQListener; import org.redisson.api.RLock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.List; import java.util.concurrent.TimeUnit; /** * 监听初始化客户动作,为客户初始化角色列表 */ -@RocketMQMessageListener(topic = TopicConstants.INIT_CUSTOMER, - consumerGroup = ConsomerGroupConstants.INIT_CUSTOMER_COMPONENTS_GROUP, - messageModel = MessageModel.CLUSTERING, - selectorExpression = "*") -@Component -public class InitCustomerCustomizeListener implements RocketMQListener { +//@Component +public class InitCustomerComponentsListener implements MessageListenerConcurrently { private Logger logger = LoggerFactory.getLogger(getClass()); - @Autowired - private CustomerHomeService customerHomeService; - - @Autowired - private DistributedLock distributedLock; - @Override - public void onMessage(MessageExt messageExt) { + public ConsumeConcurrentlyStatus consumeMessage(List msgs, ConsumeConcurrentlyContext context) { + try { + msgs.forEach(msg -> consumeMessage(msg)); + } catch (Exception e) { + logger.error(ExceptionUtils.getErrorStackTrace(e)); + return ConsumeConcurrentlyStatus.RECONSUME_LATER; + } + return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; + } + + private void consumeMessage(MessageExt messageExt) { String msg = new String(messageExt.getBody()); logger.info("初始化客户-初始化客户自定义信息-收到消息内容:{}", msg); InitCustomerMQMsg msgObj = JSON.parseObject(msg, InitCustomerMQMsg.class); @@ -48,10 +47,14 @@ public class InitCustomerCustomizeListener implements RocketMQListener + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.resi.group.dto.group; + +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + + +/** + * 小组成就统计表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-19 + */ +@Data +public class ResiGroupAchievementStatsDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private String id; + + /** + * 客户Id + */ + private String customerId; + + /** + * 小组Id + */ + private String groupId; + + /** + * 里程ID + */ + private String achievementId; + + /** + * 里程名称 + */ + private String achievementName; + + /** + * 实现时间 + */ + private Date arriveTime; + + /** + * 当前值 + */ + private Integer currentValue; + + /** + * 目标值 + */ + private Integer targetValue; + + /** + * 目标是否实现,是:1;否:0 + */ + private Integer isArrive; + + /** + * 删除标记 0:未删除,1:已删除 + */ + private String delFlag; + + /** + * 乐观锁 + */ + private Integer revision; + + /** + * 创建人 + */ + private String createdBy; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新人 + */ + private String updatedBy; + + /** + * 更新时间 + */ + private Date updatedTime; + +} \ No newline at end of file diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/ResiGroupDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/ResiGroupDTO.java index eb83fd5162..9ed8c34510 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/ResiGroupDTO.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/ResiGroupDTO.java @@ -17,10 +17,12 @@ package com.epmet.resi.group.dto.group; +import com.epmet.resi.group.dto.member.ResiGroupMemberDTO; import lombok.Data; import java.io.Serializable; import java.util.Date; +import java.util.List; /** @@ -85,6 +87,16 @@ Ps: 如果一个小组被拒绝,当前小组的状态将永久停留在“审 */ private String visitSwitch; + /** + * 小组类型(ordinary:楼院小组 branch:支部小组) + */ + private String groupType; + + /** + * 小组等级 + */ + private Integer level; + /** * 删除标记 0:未删除,1:已删除 */ @@ -114,9 +126,7 @@ Ps: 如果一个小组被拒绝,当前小组的状态将永久停留在“审 * 更新时间 */ private Date updatedTime; + + private List memberList; - /** - * 小组类型(ordinary:楼院小组 branch:支部小组) - */ - private String groupType; } diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/ResiGroupInfoRedisDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/ResiGroupInfoRedisDTO.java index 88fa69ac31..66014b9c5e 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/ResiGroupInfoRedisDTO.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/ResiGroupInfoRedisDTO.java @@ -46,6 +46,11 @@ public class ResiGroupInfoRedisDTO implements Serializable{ * */ private String gridId; + /** + * 小组等级 + * */ + private String level; + /** * 组状态 * */ diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/form/GroupFormDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/form/GroupFormDTO.java new file mode 100644 index 0000000000..2fc8ba7b9a --- /dev/null +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/form/GroupFormDTO.java @@ -0,0 +1,17 @@ +package com.epmet.resi.group.dto.group.form; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/4/19 15:57 + */ +@Data +public class GroupFormDTO implements Serializable { + private static final long serialVersionUID = 5330629771935235995L; + private String groupId; + private String gridId; +} diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/AchievementDetailResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/AchievementDetailResultDTO.java new file mode 100644 index 0000000000..76ebe24978 --- /dev/null +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/AchievementDetailResultDTO.java @@ -0,0 +1,41 @@ +package com.epmet.resi.group.dto.group.result; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/4/19 14:19 + */ +@NoArgsConstructor +@Data +public class AchievementDetailResultDTO implements Serializable { + + private static final long serialVersionUID = 2426917315141725167L; + /** + * 小组创建时间 + */ + private Long createdDate; + private List achievement; + + @NoArgsConstructor + @Data + public static class AchievementBean { + /** + * 达成时间 + */ + private Long completionDate; + /** + * 成就描述(分拼在一起) + */ + private String describe; + /** + * 是否达成 0,1 + */ + private Integer isArrive; + } +} diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GovGroupSummarizeResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GovGroupSummarizeResultDTO.java index e0b0c2fd4c..da9773d04a 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GovGroupSummarizeResultDTO.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GovGroupSummarizeResultDTO.java @@ -40,4 +40,8 @@ public class GovGroupSummarizeResultDTO implements Serializable { * 话题总数 */ private Integer totalTopics; + /** + * 小组等级 + */ + private String level; } diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GroupPointDetailResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GroupPointDetailResultDTO.java new file mode 100644 index 0000000000..bc98f16da2 --- /dev/null +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GroupPointDetailResultDTO.java @@ -0,0 +1,46 @@ +package com.epmet.resi.group.dto.group.result; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/4/21 10:37 + */ +@NoArgsConstructor +@Data +public class GroupPointDetailResultDTO implements Serializable { + + private static final long serialVersionUID = -1158521486690554498L; + /** + * 小组当前等级 + */ + private String level; + /** + * 总积分 + */ + private String total; + /** + * 今日增长 + */ + private String increase; + /** + * 距离升级所需积分 + */ + private String toUpgrade; + /** + * 下一等级积分 + */ + private String nextLevelPoint; + /** + * 下一等级 + */ + private String nextLevel; + /** + * 当前积分 + */ + private String currentPoint; +} diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GroupSummarizeResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GroupSummarizeResultDTO.java index 0b19208c9f..dbf681b90d 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GroupSummarizeResultDTO.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GroupSummarizeResultDTO.java @@ -69,6 +69,8 @@ public class GroupSummarizeResultDTO implements Serializable { * 进组审核open开启;close关闭 */ private String auditSwitch; + + private String level; public GroupSummarizeResultDTO(){ this.setGroupId(""); this.setGroupHeadPhoto(""); diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/result/AchievementResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/result/AchievementResultDTO.java new file mode 100644 index 0000000000..29c1954dea --- /dev/null +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/result/AchievementResultDTO.java @@ -0,0 +1,18 @@ +package com.epmet.resi.group.dto.member.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/4/22 9:24 + */ +@Data +public class AchievementResultDTO implements Serializable { + private static final long serialVersionUID = 8079550501852632061L; + private String groupId; + private String achievementDesc; +} diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/result/GroupAchievementDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/result/GroupAchievementDTO.java new file mode 100644 index 0000000000..f041bba578 --- /dev/null +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/result/GroupAchievementDTO.java @@ -0,0 +1,18 @@ +package com.epmet.resi.group.dto.member.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/4/22 9:42 + */ +@Data +public class GroupAchievementDTO implements Serializable { + private static final long serialVersionUID = 2195790168656351743L; + private String groupId; + private String groupName; + private String achievementName; +} diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/ResiGroupOpenFeignClient.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/ResiGroupOpenFeignClient.java index 26dab5da6b..292972c45e 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/ResiGroupOpenFeignClient.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/ResiGroupOpenFeignClient.java @@ -5,10 +5,7 @@ import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.utils.Result; import com.epmet.resi.group.dto.group.ResiGroupDTO; import com.epmet.resi.group.dto.group.form.*; -import com.epmet.resi.group.dto.group.result.ApplicationDetailCopyResultDTO; -import com.epmet.resi.group.dto.group.result.ApplyingGroupResultDTO; -import com.epmet.resi.group.dto.group.result.GroupEditionDetailResultDTO; -import com.epmet.resi.group.dto.group.result.GroupInfoResultDTO; +import com.epmet.resi.group.dto.group.result.*; import com.epmet.resi.group.dto.topic.MyCreateTopicsFormDTO; import com.epmet.resi.group.dto.topic.ResiTopicDTO; import com.epmet.resi.group.dto.topic.form.*; @@ -226,4 +223,34 @@ public interface ResiGroupOpenFeignClient { */ @PostMapping("/resi/group/topic/allmessages") Result> allMessages(@RequestBody AllMessagesFormDTO formDTO); + + /** + * 获取小组详情 + * @author zhaoqifeng + * @date 2021/4/21 15:20 + * @param groupId + * @return com.epmet.commons.tools.utils.Result + */ + @PostMapping("resi/group/group/groupDetail/{groupId}") + Result getGroupDetail(@PathVariable String groupId); + + /** + * 获取网格下小组 + * @author zhaoqifeng + * @date 2021/4/21 15:57 + * @param gridId + * @return com.epmet.commons.tools.utils.Result> + */ + @PostMapping("resi/group/group/groupList/{gridId}") + Result> getGroupListByGrid(@PathVariable String gridId); + + /** + * 小组积分详情 + * @author zhaoqifeng + * @date 2021/4/21 16:30 + * @param groupId + * @return com.epmet.commons.tools.utils.Result + */ + @PostMapping("resi/group/group/groupPointDetail/{groupId}") + Result groupPointDetail(@PathVariable String groupId); } diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/fallback/ResiGroupOpenFeignClientFallback.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/fallback/ResiGroupOpenFeignClientFallback.java index 544e18c6ba..84dee1113d 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/fallback/ResiGroupOpenFeignClientFallback.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/fallback/ResiGroupOpenFeignClientFallback.java @@ -5,10 +5,7 @@ import com.epmet.commons.tools.utils.ModuleUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.resi.group.dto.group.ResiGroupDTO; import com.epmet.resi.group.dto.group.form.*; -import com.epmet.resi.group.dto.group.result.ApplicationDetailCopyResultDTO; -import com.epmet.resi.group.dto.group.result.ApplyingGroupResultDTO; -import com.epmet.resi.group.dto.group.result.GroupEditionDetailResultDTO; -import com.epmet.resi.group.dto.group.result.GroupInfoResultDTO; +import com.epmet.resi.group.dto.group.result.*; import com.epmet.resi.group.dto.topic.MyCreateTopicsFormDTO; import com.epmet.resi.group.dto.topic.ResiTopicDTO; import com.epmet.resi.group.dto.topic.form.*; @@ -162,4 +159,43 @@ public class ResiGroupOpenFeignClientFallback implements ResiGroupOpenFeignClien public Result> allMessages(AllMessagesFormDTO formDTO) { return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "allMessages", formDTO); } + + /** + * 获取小组详情 + * + * @param groupId + * @return com.epmet.commons.tools.utils.Result + * @author zhaoqifeng + * @date 2021/4/21 15:20 + */ + @Override + public Result getGroupDetail(String groupId) { + return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "getGroupDetail", groupId); + } + + /** + * 获取网格下小组 + * + * @param gridId + * @return com.epmet.commons.tools.utils.Result> + * @author zhaoqifeng + * @date 2021/4/21 15:57 + */ + @Override + public Result> getGroupListByGrid(String gridId) { + return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "getGroupListByGrid", gridId); + } + + /** + * 小组积分详情 + * + * @param groupId + * @return com.epmet.commons.tools.utils.Result + * @author zhaoqifeng + * @date 2021/4/21 16:30 + */ + @Override + public Result groupPointDetail(String groupId) { + return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "groupPointDetail", groupId); + } } diff --git a/epmet-module/resi-group/resi-group-server/pom.xml b/epmet-module/resi-group/resi-group-server/pom.xml index e7432526b2..05aeff9885 100644 --- a/epmet-module/resi-group/resi-group-server/pom.xml +++ b/epmet-module/resi-group/resi-group-server/pom.xml @@ -112,6 +112,18 @@ 2.0.0 compile + + + com.epmet + epmet-commons-rocketmq + 2.0.0 + + + com.epmet + oper-crm-client + 2.0.0 + compile + @@ -185,6 +197,10 @@ SEC080aac67ff78e79fdaba132aa51e3fb3f6060dec99492feaac82cabf9f8b6a19 + + + 192.168.1.130:9876;192.168.1.132:9876 + epmet_message @@ -237,6 +253,8 @@ SEC080aac67ff78e79fdaba132aa51e3fb3f6060dec99492feaac82cabf9f8b6a19 + + 192.168.1.130:9876;192.168.1.132:9876 @@ -288,6 +306,9 @@ SEC080aac67ff78e79fdaba132aa51e3fb3f6060dec99492feaac82cabf9f8b6a19 + + + 192.168.10.161:9876 @@ -336,6 +357,9 @@ SEC95f4f40b533ad379ea6a6d1af6dd37029383cfe1b7cd96dfac2678be2c1c3ed1 + + + 192.168.11.187:9876;192.168.11.184:9876 diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupController.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupController.java index 54fe089221..0cbfbe2e52 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupController.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupController.java @@ -25,18 +25,21 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.modules.group.service.ResiGroupService; import com.epmet.modules.group.service.ResiGroupStatisticalService; +import com.epmet.modules.group.service.StatsAchievementService; import com.epmet.resi.group.dto.group.GroupProcessingCountResultDTO; import com.epmet.resi.group.dto.group.ResiGroupDTO; import com.epmet.resi.group.dto.group.form.*; import com.epmet.resi.group.dto.group.result.*; import com.epmet.resi.group.dto.member.form.EditAuditSwitchFormDTO; import com.epmet.resi.group.dto.member.form.ResiIdentityFormDTO; +import com.epmet.resi.group.dto.member.result.AchievementResultDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; @@ -55,6 +58,8 @@ public class ResiGroupController { private ResiGroupService resiGroupService; @Autowired private ResiGroupStatisticalService resiGroupStatisticalService; + @Autowired + private StatsAchievementService statsAchievementService; /** * @param tokenDto @@ -511,4 +516,78 @@ public class ResiGroupController { return new Result>().ok(resiGroupService.allGroupList(formDTO)); } + /** + * 小组成就详情 + * @author zhaoqifeng + * @date 2021/4/19 14:25 + * @param formDTO + * @return com.epmet.commons.tools.utils.Result + */ + @PostMapping("achievementdetail") + public Result achievementDetail(@RequestBody GroupFormDTO formDTO) { + return new Result().ok(resiGroupService.achievementDetail(formDTO)); + } + + /** + * 获取小组详情 + * @author zhaoqifeng + * @date 2021/4/21 15:17 + * @param groupId + * @return com.epmet.commons.tools.utils.Result + */ + @PostMapping("groupDetail/{groupId}") + public Result getGroupDetail(@PathVariable String groupId) { + ResiGroupDTO groupDTO = resiGroupService.getGroupInfoAndGroupMember(groupId); + return new Result().ok(groupDTO); + } + + /** + * 获取网格下小组 + * @author zhaoqifeng + * @date 2021/4/21 15:57 + * @param gridId + * @return com.epmet.commons.tools.utils.Result> + */ + @PostMapping("groupList/{gridId}") + public Result> getGroupListByGrid(@PathVariable String gridId) { + List list = resiGroupService.getGroupListByGrid(gridId); + return new Result>().ok(list); + } + + /** + * 小组积分详情 + * @author zhaoqifeng + * @date 2021/4/21 16:22 + * @param groupId + * @return com.epmet.commons.tools.utils.Result + */ + @PostMapping("groupPointDetail/{groupId}") + public Result groupPointDetail(@PathVariable String groupId) { + return new Result().ok(resiGroupService.groupPointDetail(groupId)); + } + + /** + * 小组近段时间实现的成就列表 + * @author zhaoqifeng + * @date 2021/4/22 9:27 + * @param tokenDto + * @return com.epmet.commons.tools.utils.Result + */ + @PostMapping("achievement") + public Result> achievement(@LoginUser TokenDto tokenDto, @RequestBody GroupFormDTO formDTO) { + return new Result>().ok(resiGroupService.achievement(tokenDto, formDTO)); + } + + /** + * desc: 初始化小组成就(用于小组成就上线后-历史小组的成就的初始化;执行过后就再无意义) + * + * @param customerId + * @return com.epmet.commons.tools.utils.Result + * @author LiuJanJun + * @date 2021/4/25 12:41 下午 + */ + @GetMapping("initachievement") + public Result initAchievement(@RequestParam String customerId) { + return new Result().ok(statsAchievementService.initAllGroupAchievement(customerId)); + } } diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupAchievementConfigDao.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupAchievementConfigDao.java new file mode 100644 index 0000000000..b53a2cf69c --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupAchievementConfigDao.java @@ -0,0 +1,57 @@ +package com.epmet.modules.group.dao; /** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.modules.group.entity.ResiGroupAchievementConfigEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 小组成就配置表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-19 + */ +@Mapper +public interface ResiGroupAchievementConfigDao extends BaseDao { + + /** + * desc: 获取成就配置 比targetValue + * + * @param achievementType + * @param offset + * @param pageSize + * @return java.util.List + * @author LiuJanJun + * @date 2021/4/21 10:04 下午 + */ + List selectMoreThanOneByValue(@Param("achievementType") String achievementType, @Param("offset") int offset, @Param("pageSize") int pageSize); + + /** + * desc: 获取最后一条配置 + * + * @param achievementType + * @return com.epmet.modules.group.entity.ResiGroupAchievementConfigEntity + * @author LiuJanJun + * @date 2021/4/22 1:58 下午 + */ + ResiGroupAchievementConfigEntity getLastOne(@Param("achievementType") String achievementType); +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupAchievementStatsDao.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupAchievementStatsDao.java new file mode 100644 index 0000000000..d79f769aeb --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupAchievementStatsDao.java @@ -0,0 +1,68 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.modules.group.dao; + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.modules.group.entity.ResiGroupAchievementStatsEntity; +import com.epmet.resi.group.dto.group.ResiGroupAchievementStatsDTO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 小组成就统计表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-19 + */ +@Mapper +public interface ResiGroupAchievementStatsDao extends BaseDao { + /** + * 获取未完成的成就 + * + * @param groupId + * @return java.util.List + * @author zhaoqifeng + * @date 2021/4/19 15:52 + */ + List selectUnAchieved(@Param("groupId") String groupId); + + /** + * desc: 获取级别最低的最后一个未实现的成就 + * + * @param customerId + * @param groupId + * @param achievementType + * @return com.epmet.modules.group.entity.ResiGroupAchievementStatsEntity + * @author LiuJanJun + * @date 2021/4/21 8:34 下午 + */ + ResiGroupAchievementStatsEntity selectLastUnAchieved(@Param("customerId") String customerId, @Param("groupId") String groupId, @Param("achievementType") String achievementType); + + /** + * desc: 插入或更新成就 + * + * @param list + * @param updateAll + * @return int + * @author LiuJanJun + * @date 2021/4/22 3:03 下午 + */ + int saveOrUpdate(@Param("list") List list, @Param("updateAll") boolean updateAll); +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupDao.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupDao.java index e372cd4d70..d31a9a22c0 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupDao.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupDao.java @@ -29,6 +29,7 @@ import com.epmet.resi.group.dto.notice.result.UnReadListResultDTO; import com.epmet.resi.group.dto.topic.result.AllMessagesResultDTO; import com.epmet.resi.group.dto.topic.result.GetPastTopicListV2ResultDTO; import com.epmet.resi.group.dto.topic.result.LatestTenResultDTO; +import com.epmet.resi.group.dto.member.result.GroupAchievementDTO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -323,4 +324,13 @@ public interface ResiGroupDao extends BaseDao { * @date 2021/4/25 上午9:10 */ List selectReadFlagByUserAndId(@Param("ids")List ids,@Param("userIds")List userIds); + + /** + * 我所在小组最近完成的成就 + * @author zhaoqifeng + * @date 2021/4/22 9:47 + * @param userId + * @return java.util.List + */ + List selectRecentGroupAchievements(@Param("userId") String userId, @Param("gridId") String gridId); } diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupAchievementConfigEntity.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupAchievementConfigEntity.java new file mode 100644 index 0000000000..8749ef16a0 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupAchievementConfigEntity.java @@ -0,0 +1,58 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.modules.group.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.epmet.commons.mybatis.entity.BaseEpmetEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 小组成就配置表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-19 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("resi_group_achievement_config") +public class ResiGroupAchievementConfigEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + /** + * 客户Id + */ + private String customerId; + + /** + * 里程名称 + */ + private String achievementName; + + /** + * 目标值 + */ + private Integer targetValue; + + /** + * 里程类型:小组人数:member;topic:话题数;转议题数:toIssue;话题解决数:resloveTopic + */ + private String achievementType; + +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupAchievementStatsEntity.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupAchievementStatsEntity.java new file mode 100644 index 0000000000..3559786095 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupAchievementStatsEntity.java @@ -0,0 +1,86 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.modules.group.entity; + +import com.baomidou.mybatisplus.annotation.TableName; + +import com.epmet.commons.mybatis.entity.BaseEpmetEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 小组成就统计表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-19 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("resi_group_achievement_stats") +public class ResiGroupAchievementStatsEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + /** + * 客户Id + */ + private String customerId; + + /** + * 小组Id + */ + private String groupId; + + /** + * 成就ID + */ + private String achievementId; + + /** + * 成就名称 + */ + private String achievementName; + + /** + * 成就类型 + */ + private String achievementType; + + /** + * 实现时间 + */ + private Date arriveTime; + + /** + * 当前值 + */ + private Integer currentValue; + + /** + * 目标值 + */ + private Integer targetValue; + + /** + * 目标是否实现,是:1;否:0 + */ + private Integer isArrive; + +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupEntity.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupEntity.java index 147aed6717..b50f50a417 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupEntity.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupEntity.java @@ -88,4 +88,9 @@ Ps: 如果一个小组被拒绝,当前小组的状态将永久停留在“审 * 小组类型(ordinary:楼院小组 branch:支部小组) */ private String groupType; + + /** + * 小组等级 + */ + private Integer level; } diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/redis/ResiGroupRedis.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/redis/ResiGroupRedis.java index 03dcc4ecba..9d52a420b1 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/redis/ResiGroupRedis.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/redis/ResiGroupRedis.java @@ -101,6 +101,7 @@ public class ResiGroupRedis { ResiGroupInfoRedisDTO groupRedis = ConvertUtils.sourceToTarget(groupMySql,ResiGroupInfoRedisDTO.class); groupRedis.setGroupId(groupMySql.getId()); groupRedis.setGroupState(groupMySql.getState()); + groupRedis.setLevel("LV" + groupMySql.getLevel()); Map param = new HashMap<>(); param.put(TopicConstant.RESI_GROUP_ID,groupId); param.put(FieldConstant.DEL_FLAG, NumConstant.ZERO_STR); diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/AbstractStatsAchievementService.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/AbstractStatsAchievementService.java new file mode 100644 index 0000000000..6bc56370a5 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/AbstractStatsAchievementService.java @@ -0,0 +1,138 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.modules.group.service; + +import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.constant.StrConstant; +import com.epmet.commons.tools.enums.AchievementTypeEnum; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.utils.UniqueIdGenerator; +import com.epmet.modules.group.entity.ResiGroupAchievementConfigEntity; +import com.epmet.modules.group.entity.ResiGroupAchievementStatsEntity; +import com.epmet.modules.support.GroupAchievementUtils; +import com.epmet.resi.group.dto.group.ResiGroupAchievementStatsDTO; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.List; + +/** + * desc:实时计算小组成就完成情况 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-19 + */ +public abstract class AbstractStatsAchievementService { + + @Autowired + private ResiGroupAchievementConfigService achievementConfigService; + @Autowired + private ResiGroupAchievementStatsService achievementStatsService; + + + /** + * desc: 根据成绩类型 分页获取成就配置 按targetValue 升序 + * + * @param pageNum + * @param pageSize + * @return java.util.List + * @author LiuJanJun + * @date 2021/4/22 1:36 下午 + */ + protected List getAchievementConfigPage(int pageNum, int pageSize, String achievementType) { + return achievementConfigService.selectMoreThanOneByValue(achievementType, (pageNum - NumConstant.ONE) * pageSize, pageSize); + } + + /** + * desc:初始化配置5条 + * + * @param achievementType + * @return + */ + protected List initAchievementConfig(String achievementType) { + AchievementTypeEnum anEnum = AchievementTypeEnum.getEnum(achievementType); + if (anEnum == null) { + throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode()); + } + if (AchievementTypeEnum.MEMBER.getCode().equals(anEnum.getCode())) { + throw new RenException("小组人数都到10000啦?"); + } + ResiGroupAchievementConfigEntity lastOne = achievementConfigService.getLastOne(achievementType); + if (lastOne == null){ + throw new RenException("小组成就配置有误,type:{}",achievementType); + } + List newConfigList = new ArrayList<>(); + Integer nextTargetValue = null; + int preValue = lastOne.getTargetValue(); + String oldName = lastOne.getAchievementName().replace(String.valueOf(lastOne.getTargetValue()), StrConstant.UNDER_LINE); + for (int i = 0; i < 5; i++) { + nextTargetValue = GroupAchievementUtils.getNextTargetValue(achievementType, preValue); + ResiGroupAchievementConfigEntity next = new ResiGroupAchievementConfigEntity(); + //生成ID 自增 + next.setId(UniqueIdGenerator.generate24()); + next.setCustomerId(lastOne.getCustomerId()); + next.setAchievementName(oldName.replace(StrConstant.UNDER_LINE, String.valueOf(nextTargetValue))); + preValue = nextTargetValue; + next.setTargetValue(nextTargetValue); + next.setAchievementType(lastOne.getAchievementType()); + newConfigList.add(next); + } + achievementConfigService.insertBatch(newConfigList); + return newConfigList; + } + + /** + * desc: 插入或新增成就统计 + * + * @param haveArrive + * @param updateAll + * @return void + * @author LiuJanJun + * @date 2021/4/25 12:26 下午 + */ + protected Integer saveOrUpdate(List haveArrive, boolean updateAll){ + return achievementStatsService.saveOrUpdate(haveArrive,updateAll); + } + + /** + * desc: 获取小组最后一个未实现的成就 + * + * @param customerId + * @param groupId + * @param achievementType + * @return com.epmet.modules.group.entity.ResiGroupAchievementStatsEntity + * @author LiuJanJun + * @date 2021/4/25 12:28 下午 + */ + protected ResiGroupAchievementStatsEntity selectLastUnAchieved(String customerId, String groupId, String achievementType){ + return achievementStatsService.selectLastUnAchieved(customerId, groupId, achievementType); + } + + /** + * desc: 更新小组成就 + * + * @param recordDTO + * @return java.lang.Integer + * @author LiuJanJun + * @date 2021/4/25 12:30 下午 + */ + protected void update(ResiGroupAchievementStatsDTO recordDTO){ + achievementStatsService.update(recordDTO); + } +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupAchievementConfigService.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupAchievementConfigService.java new file mode 100644 index 0000000000..d7de022e82 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupAchievementConfigService.java @@ -0,0 +1,36 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.modules.group.service; + +import com.epmet.commons.mybatis.service.BaseService; +import com.epmet.modules.group.entity.ResiGroupAchievementConfigEntity; + +import java.util.List; + +/** + * 小组成就配置表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-19 + */ +public interface ResiGroupAchievementConfigService extends BaseService { + + ResiGroupAchievementConfigEntity getLastOne(String achievementType); + + List selectMoreThanOneByValue(String achievementType,int offset,int pageSize); +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupAchievementStatsService.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupAchievementStatsService.java new file mode 100644 index 0000000000..4ad098eedc --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupAchievementStatsService.java @@ -0,0 +1,84 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.modules.group.service; + +import com.epmet.commons.mybatis.service.BaseService; +import com.epmet.modules.group.entity.ResiGroupAchievementStatsEntity; +import com.epmet.resi.group.dto.group.ResiGroupAchievementStatsDTO; + +import java.util.List; + +/** + * 小组成就统计表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-19 + */ +public interface ResiGroupAchievementStatsService extends BaseService { + + /** + * 默认更新 + * + * @param dto + * @return void + * @author generator + * @date 2021-04-19 + */ + void update(ResiGroupAchievementStatsDTO dto); + + /** + * 已达成的成就 + * @author zhaoqifeng + * @date 2021/4/19 15:15 + * @param groupId + * @return java.util.List + */ + List getAchieved(String groupId); + + /** + * 未达成的成就 + * @author zhaoqifeng + * @date 2021/4/19 15:15 + * @param groupId + * @return java.util.List + */ + List getUnAchieved(String groupId); + + /** + * desc: 获取最后未实现的成就 实际每种类型 数据库只存在一条未实现的成就 + * + * @param customerId + * @param groupId + * @param achievementType + * @return com.epmet.modules.group.entity.ResiGroupAchievementStatsEntity + * @author LiuJanJun + * @date 2021/4/22 2:35 下午 + */ + ResiGroupAchievementStatsEntity selectLastUnAchieved(String customerId, String groupId, String achievementType); + + /** + * desc: 插入或更新成就 + * + * @param haveArrive + * @param updateAll + * @return int + * @author LiuJanJun + * @date 2021/4/22 3:03 下午 + */ + int saveOrUpdate(List haveArrive, boolean updateAll); +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupService.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupService.java index c2073a7952..d5ae200dd7 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupService.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupService.java @@ -20,6 +20,7 @@ package com.epmet.modules.group.service; import com.epmet.commons.mybatis.service.BaseService; import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; import com.epmet.modules.group.entity.ResiGroupEntity; import com.epmet.resi.group.dto.UserRoleDTO; @@ -28,6 +29,8 @@ import com.epmet.resi.group.dto.group.ResiGroupDTO; import com.epmet.resi.group.dto.group.form.*; import com.epmet.resi.group.dto.group.result.*; import com.epmet.resi.group.dto.member.form.EditAuditSwitchFormDTO; +import com.epmet.resi.group.dto.member.result.AchievementResultDTO; +import jdk.nashorn.internal.parser.Token; import java.util.HashMap; import java.util.List; @@ -378,4 +381,49 @@ public interface ResiGroupService extends BaseService { * @Description 所有小组查询 **/ List allGroupList(AllGroupListFormDTO formDTO); + + /** + * 小组成就详情 + * @author zhaoqifeng + * @date 2021/4/19 14:25 + * @param formDTO + * @return com.epmet.resi.group.dto.group.result.AchievementDetailResultDTO + */ + AchievementDetailResultDTO achievementDetail(GroupFormDTO formDTO); + + /** + * 获取网格下小组列表 + * @author zhaoqifeng + * @date 2021/4/21 15:42 + * @param gridId + * @return java.util.List + */ + List getGroupListByGrid(String gridId); + + /** + * 小组积分详情 + * @author zhaoqifeng + * @date 2021/4/21 16:22 + * @param groupId + * @return com.epmet.resi.group.dto.group.result.GroupPointDetailResultDTO + */ + GroupPointDetailResultDTO groupPointDetail(String groupId); + + /** + * 小组近段时间实现的成就列表 + * @author zhaoqifeng + * @date 2021/4/22 9:27 + * @param tokenDto + * @return com.epmet.resi.group.dto.member.result.AchievementResultDTO + */ + List achievement(TokenDto tokenDto, GroupFormDTO formDTO); + + /** + * 获取小组信息及小组成员 + * @author zhaoqifeng + * @date 2021/4/23 14:56 + * @param groupId + * @return com.epmet.resi.group.dto.group.ResiGroupDTO + */ + ResiGroupDTO getGroupInfoAndGroupMember(String groupId); } diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/StatsAchievementService.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/StatsAchievementService.java new file mode 100644 index 0000000000..981c31f46a --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/StatsAchievementService.java @@ -0,0 +1,51 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.modules.group.service; + +/** + * desc:实时计算小组成就完成情况 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-19 + */ +public interface StatsAchievementService{ + + /** + * desc: 初始化所有小组的各种成就入口 + * + * @param customerId + * @return java.lang.Boolean + * @author LiuJanJun + * @date 2021/4/20 + */ + Boolean initAllGroupAchievement(String customerId); + + /** + * desc: 根据小组Id计算小组成就 入口 + * + * @param customerId + * @param groupId + * @param achievementType 成就类型 小组人数、话题数、转议题数、小组内问题解决数 + * @return java.lang.Boolean + * @author LiuJanJun + * @date 2021/4/20 + */ + Boolean calculateAcm(String customerId, String groupId, String achievementType); + + +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupAchievementConfigServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupAchievementConfigServiceImpl.java new file mode 100644 index 0000000000..85a8077e78 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupAchievementConfigServiceImpl.java @@ -0,0 +1,46 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.modules.group.service.impl; + +import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.modules.group.dao.ResiGroupAchievementConfigDao; +import com.epmet.modules.group.entity.ResiGroupAchievementConfigEntity; +import com.epmet.modules.group.service.ResiGroupAchievementConfigService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 小组成就配置表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-19 + */ +@Service +public class ResiGroupAchievementConfigServiceImpl extends BaseServiceImpl implements ResiGroupAchievementConfigService { + + @Override + public ResiGroupAchievementConfigEntity getLastOne(String achievementType) { + return baseDao.getLastOne(achievementType); + } + + @Override + public List selectMoreThanOneByValue(String achievementType,int offset,int pageSize) { + return baseDao.selectMoreThanOneByValue(achievementType,offset,pageSize); + } +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupAchievementStatsServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupAchievementStatsServiceImpl.java new file mode 100644 index 0000000000..f111f2f3b7 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupAchievementStatsServiceImpl.java @@ -0,0 +1,92 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.modules.group.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.modules.group.dao.ResiGroupAchievementStatsDao; +import com.epmet.modules.group.entity.ResiGroupAchievementStatsEntity; +import com.epmet.modules.group.service.ResiGroupAchievementStatsService; +import com.epmet.resi.group.dto.group.ResiGroupAchievementStatsDTO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 小组成就统计表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2021-04-19 + */ +@Service +public class ResiGroupAchievementStatsServiceImpl extends BaseServiceImpl implements ResiGroupAchievementStatsService { + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(ResiGroupAchievementStatsDTO dto) { + ResiGroupAchievementStatsEntity entity = ConvertUtils.sourceToTarget(dto, ResiGroupAchievementStatsEntity.class); + updateById(entity); + } + + /** + * 已达成的成就 + * + * @param groupId + * @return java.util.List + * @author zhaoqifeng + * @date 2021/4/19 15:15 + */ + @Override + public List getAchieved(String groupId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("GROUP_ID", groupId); + wrapper.eq("IS_ARRIVE", NumConstant.ONE); + wrapper.eq("DEL_FLAG", NumConstant.ZERO); + wrapper.orderByDesc("ARRIVE_TIME"); + wrapper.orderByDesc("TARGET_VALUE"); + List list = baseDao.selectList(wrapper); + return ConvertUtils.sourceToTarget(list, ResiGroupAchievementStatsDTO.class); + } + + /** + * 未达成的成就 + * + * @param groupId + * @return java.util.List + * @author zhaoqifeng + * @date 2021/4/19 15:15fang + */ + @Override + public List getUnAchieved(String groupId) { + return baseDao.selectUnAchieved(groupId); + } + + @Override + public ResiGroupAchievementStatsEntity selectLastUnAchieved(String customerId, String groupId, String achievementType) { + return baseDao.selectLastUnAchieved(customerId,groupId,achievementType); + } + + @Override + public int saveOrUpdate(List haveArrive, boolean updateAll) { + return baseDao.saveOrUpdate(haveArrive, updateAll); + } + +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java index bf50316c61..2c73841cbc 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java @@ -21,6 +21,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.rocketmq.messages.GroupAchievementMQMsg; import com.epmet.commons.tools.constant.*; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.RenException; @@ -30,6 +31,7 @@ import com.epmet.commons.tools.scan.param.ImgTaskDTO; import com.epmet.commons.tools.scan.param.TextScanParamDTO; import com.epmet.commons.tools.scan.param.TextTaskDTO; import com.epmet.commons.tools.scan.result.SyncScanResult; +import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.user.LoginUserUtil; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.DateUtils; @@ -43,6 +45,7 @@ import com.epmet.dto.result.UserRoleResultDTO; import com.epmet.feign.EpmetMessageOpenFeignClient; import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.modules.constant.UserMessageConstant; +import com.epmet.commons.tools.enums.AchievementTypeEnum; import com.epmet.modules.feign.EpmetMessageFeignClient; import com.epmet.modules.feign.EpmetUserFeignClient; import com.epmet.modules.feign.GovOrgFeignClient; @@ -53,15 +56,14 @@ import com.epmet.modules.group.entity.GroupEditSubmitRecordEntity; import com.epmet.modules.group.entity.ResiGroupEntity; import com.epmet.modules.group.entity.ResiGroupOperationEntity; import com.epmet.modules.group.redis.ResiGroupRedis; -import com.epmet.modules.group.service.ResiGroupCodeService; -import com.epmet.modules.group.service.ResiGroupOperationService; -import com.epmet.modules.group.service.ResiGroupService; -import com.epmet.modules.group.service.ResiGroupStatisticalService; +import com.epmet.modules.group.service.*; import com.epmet.modules.member.dao.GroupMemeberOperationDao; import com.epmet.modules.member.dao.ResiGroupMemberDao; +import com.epmet.modules.member.entity.ResiGroupMemberEntity; import com.epmet.modules.member.redis.ResiGroupMemberRedis; import com.epmet.modules.member.service.GroupMemeberOperationService; import com.epmet.modules.member.service.ResiGroupMemberService; +import com.epmet.modules.support.GroupLevelUtils; import com.epmet.modules.topic.service.ResiTopicService; import com.epmet.modules.utils.ModuleConstant; import com.epmet.resi.group.constant.*; @@ -75,7 +77,11 @@ import com.epmet.resi.group.dto.member.GroupMemeberOperationDTO; import com.epmet.resi.group.dto.member.ResiGroupMemberDTO; import com.epmet.resi.group.dto.member.ResiGroupMemberInfoRedisDTO; import com.epmet.resi.group.dto.member.form.EditAuditSwitchFormDTO; +import com.epmet.resi.group.dto.member.result.AchievementResultDTO; +import com.epmet.resi.group.dto.member.result.GroupAchievementDTO; +import com.epmet.send.SendMqMsgUtil; import com.github.pagehelper.PageHelper; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -85,7 +91,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.TransactionSynchronizationAdapter; import org.springframework.transaction.support.TransactionSynchronizationManager; -import org.springframework.util.CollectionUtils; import java.text.SimpleDateFormat; import java.util.*; @@ -168,6 +173,9 @@ public class ResiGroupServiceImpl extends BaseServiceImpl page(Map params) { IPage page = baseDao.selectPage( @@ -689,6 +697,14 @@ public class ResiGroupServiceImpl extends BaseServiceImpl msgList = new ArrayList<>(); msgList.add(wxSubscribeMessageFormDTO); epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList); + + //发送小组成就消息 + boolean flag = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient) + .sendGroupAchievementMqMsg(new GroupAchievementMQMsg(resiGroupDTO.getCustomerId(), resiGroupDTO.getId(), AchievementTypeEnum.MEMBER.getCode())); + if (!flag) { + logger.error("发送(小组成就)系统消息到message服务失败"); + } + return new Result(); } @@ -858,6 +874,7 @@ public class ResiGroupServiceImpl extends BaseServiceImpl> getGroupIdsByGridIdList(List gridIdList) { - if(null == gridIdList || gridIdList.size() < NumConstant.ONE){ + if(null == gridIdList || gridIdList.size() < NumConstant.ONE) { return null; } Map> result = new HashMap<>(); @@ -1222,6 +1239,135 @@ public class ResiGroupServiceImpl extends BaseServiceImpl achievementList = new ArrayList<>(); + //1.小组创建时间 + ResiGroupEntity group = baseDao.selectById(formDTO.getGroupId()); + resultDTO.setCreatedDate(DateUtils.dateToTimestamp(group.getCreatedTime())); + + //2.即将完成的3个成就 + List unAchievedList = resiGroupAchievementStatsService.getUnAchieved(formDTO.getGroupId()); + if (CollectionUtils.isNotEmpty(unAchievedList)) { + Collections.reverse(unAchievedList); + unAchievedList.forEach(item -> { + AchievementDetailResultDTO.AchievementBean bean = new AchievementDetailResultDTO.AchievementBean(); + String describe = item.getAchievementName() + "(" + item.getCurrentValue().toString() + "/" + item.getTargetValue().toString() + ")"; + bean.setDescribe(describe); + bean.setIsArrive(item.getIsArrive()); + achievementList.add(bean); + }); + } + //3.已完成的成就 + List achievedList = resiGroupAchievementStatsService.getAchieved(formDTO.getGroupId()); + if (CollectionUtils.isNotEmpty(achievedList)) { + achievedList.forEach(item -> { + AchievementDetailResultDTO.AchievementBean bean = new AchievementDetailResultDTO.AchievementBean(); + bean.setDescribe(item.getAchievementName()); + if (item.getArriveTime() != null){ + bean.setCompletionDate(DateUtils.dateToTimestamp(item.getArriveTime())); + } + bean.setIsArrive(item.getIsArrive()); + achievementList.add(bean); + }); + } + resultDTO.setAchievement(achievementList); + return resultDTO; + } + + /** + * 获取网格下小组列表 + * + * @param gridId + * @return java.util.List + * @author zhaoqifeng + * @date 2021/4/21 15:42 + */ + @Override + public List getGroupListByGrid(String gridId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("GRID_ID", gridId) + .eq("STATE", GroupStateConstant.GROUP_APPROVED) + .eq("DEL_FLAG", NumConstant.ZERO_STR); + List list = baseDao.selectList(wrapper); + return ConvertUtils.sourceToTarget(list, ResiGroupDTO.class); + } + + /** + * 小组积分详情 + * + * @param groupId + * @return com.epmet.resi.group.dto.group.result.GroupPointDetailResultDTO + * @author zhaoqifeng + * @date 2021/4/21 16:22 + */ + @Override + public GroupPointDetailResultDTO groupPointDetail(String groupId) { + GroupPointDetailResultDTO result = new GroupPointDetailResultDTO(); + ResiGroupEntity group = baseDao.selectById(groupId); + Integer nextLevel = group.getLevel() + 1; + Integer nextLevelPoint = GroupLevelUtils.getPoint(nextLevel); + result.setLevel("LV" + group.getLevel().toString()); + result.setNextLevel("LV" + nextLevel.toString()); + result.setNextLevelPoint(nextLevelPoint.toString()); + return result; + } + + /** + * 小组近段时间实现的成就列表 + * + * @param tokenDto + * @return com.epmet.resi.group.dto.member.result.AchievementResultDTO + * @author zhaoqifeng + * @date 2021/4/22 9:27 + */ + @Override + public List achievement(TokenDto tokenDto, GroupFormDTO formDTO) { + List result = new ArrayList<>(); + + List list = baseDao.selectRecentGroupAchievements(tokenDto.getUserId(), formDTO.getGridId()); + if (CollectionUtils.isNotEmpty(list)) { + result = + list.stream().map(item -> { + AchievementResultDTO dto = new AchievementResultDTO(); + String desc = item.getGroupName() + ":" + "达成“" + item.getAchievementName() + "”" + "成就"; + dto.setAchievementDesc(desc); + dto.setGroupId(item.getGroupId()); + return dto; + }).collect(Collectors.toList()); + } + return result; + } + + /** + * 获取小组信息及小组成员 + * + * @param groupId + * @return com.epmet.resi.group.dto.group.ResiGroupDTO + * @author zhaoqifeng + * @date 2021/4/23 14:56 + */ + @Override + public ResiGroupDTO getGroupInfoAndGroupMember(String groupId) { + ResiGroupDTO group = this.get(groupId); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("RESI_GROUP_ID", groupId) + .eq("STATUS", GroupStateConstant.GROUP_APPROVED) + .eq("DEL_FLAG", NumConstant.ZERO_STR); + List memberList = resiGroupMemberDao.selectList(wrapper); + group.setMemberList(ConvertUtils.sourceToTarget(memberList, ResiGroupMemberDTO.class)); + return group; + } + @Override public GroupDetailResultDTO getGroupDetail(String groupId) { GroupDetailResultDTO groupDetail = new GroupDetailResultDTO(); diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/StatsAchievementServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/StatsAchievementServiceImpl.java new file mode 100644 index 0000000000..e88b2ce588 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/StatsAchievementServiceImpl.java @@ -0,0 +1,399 @@ +package com.epmet.modules.group.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.CustomerDTO; +import com.epmet.dto.IssueDTO; +import com.epmet.feign.GovIssueOpenFeignClient; +import com.epmet.feign.OperCrmOpenFeignClient; +import com.epmet.commons.tools.enums.AchievementTypeEnum; +import com.epmet.modules.group.dao.ResiGroupDao; +import com.epmet.modules.group.entity.ResiGroupAchievementConfigEntity; +import com.epmet.modules.group.entity.ResiGroupAchievementStatsEntity; +import com.epmet.modules.group.entity.ResiGroupEntity; +import com.epmet.modules.group.service.AbstractStatsAchievementService; +import com.epmet.modules.group.service.StatsAchievementService; +import com.epmet.modules.member.dao.ResiGroupMemberDao; +import com.epmet.modules.member.entity.ResiGroupMemberEntity; +import com.epmet.modules.topic.dao.ResiTopicDao; +import com.epmet.modules.topic.entity.ResiTopicEntity; +import com.epmet.resi.group.constant.TopicConstant; +import com.epmet.resi.group.dto.group.ResiGroupAchievementStatsDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * desc: + * + * @author: LiuJanJun + * @date: 2021/4/20 5:48 下午 + * @version: 1.0 + */ +@Slf4j +@Service +public class StatsAchievementServiceImpl extends AbstractStatsAchievementService implements StatsAchievementService { + @Autowired + private ResiGroupMemberDao resiGroupMemberDao; + @Autowired + private ResiTopicDao resiTopicDao; + @Autowired + private ResiGroupDao resiGroupDao; + @Autowired + private OperCrmOpenFeignClient operCrmOpenFeignClient; + @Autowired + private GovIssueOpenFeignClient govIssueOpenFeignClient; + + + /** + * desc: 计算小组成就 统一入口 + * + * @return java.lang.Boolean + * @author LiuJanJun + * @date 2021/4/20 + */ + @Override + public Boolean initAllGroupAchievement(String cId) { + //计算所有类型的 小组人数、话题数、转议题数、小组内问题解决数 + //1。获取客户 + List customerIdList = getCustomerIds(cId); + if (CollectionUtils.isEmpty(customerIdList)) { + throw new RenException("没有需要初始化的客户数据"); + } + for (String customerId : customerIdList) { + //2。获取小组数据 + List groupEntities = getCustomerGroupList(customerId); + if (CollectionUtils.isEmpty(groupEntities)) { + log.warn("没有需要初始化的小组数据,customerId:{}", customerId); + continue; + } + //3 获取客户下议题数据 + Result> issueListResult = govIssueOpenFeignClient.getIssueList(customerId); + if (issueListResult == null || CollectionUtils.isEmpty(issueListResult.getData())) { + log.warn("没有需要初始化的小组转为议题的数据,customerId:{}", customerId); + continue; + } + Map issueCreateTimeMap = issueListResult.getData().stream().collect(Collectors.toMap(IssueDTO::getId, IssueDTO::getCreatedTime)); + for (ResiGroupEntity groupEntity : groupEntities) { + //2.1 获取小组成员数据 + String groupId = groupEntity.getId(); + List groupMemberList = getGroupMemberList(customerId, groupId); + if (CollectionUtils.isEmpty(groupMemberList)) { + log.warn("没有需要初始化的小组成员数据,customerId:{},groupId:{}", customerId, groupId); + //初始化小组的前4个成就 + calculateGroupAchievement(customerId, groupId, NumConstant.ZERO, AchievementTypeEnum.MEMBER.getCode()); + } else { + //2.2 计算出 组成员 达到的成就 + List memberArriveList = new ArrayList<>(); + buildAchievementEntityList(customerId, groupId, AchievementTypeEnum.MEMBER.getCode(), groupMemberList.size(), null, memberArriveList); + //设置实际达到成就时间 最后一条为未实现 所以-1 + for (int j = 0; j < memberArriveList.size() - 1; j++) { + memberArriveList.get(j).setArriveTime(groupMemberList.get(j).getCreatedTime()); + } + saveOrUpdate(memberArriveList, true); + } + + //2.3 获取小组话题数据 + List groupTopicList = getGroupTopicList(customerId, groupId); + if (CollectionUtils.isEmpty(groupTopicList)) { + log.warn("没有需要初始化的小组话题数据,customerId:{},groupId:{}", customerId, groupId); + continue; + } + + //2.4 计算出 话题 达到的成就 + List topicArriveList = new ArrayList<>(); + buildAchievementEntityList(customerId, groupId, AchievementTypeEnum.TOPIC.getCode(), groupTopicList.size(), null, topicArriveList); + //设置实际达到成就时间 最后一条为未实现 所以-1 + for (int j = 0; j < topicArriveList.size() - 1; j++) { + topicArriveList.get(j).setArriveTime(groupTopicList.get(j).getCreatedTime()); + } + + //2.5 计算出 转议题 达到的成就 + List toIssueTopicList = groupTopicList.stream().filter(ResiTopicEntity::getShiftIssue).collect(Collectors.toList()); + List toIssueArriveList = new ArrayList<>(); + buildAchievementEntityList(customerId, groupId, AchievementTypeEnum.TOISSUE.getCode(), toIssueTopicList.size(), null, toIssueArriveList); + + //设置实际达到成就时间 最后一条为未实现 所以-1 + for (int j = 0; j < toIssueArriveList.size() - 1; j++) { + toIssueArriveList.get(j).setArriveTime(issueCreateTimeMap.getOrDefault(toIssueTopicList.get(j).getIssueId(), new Date())); + } + + //2.6 计算出 话题被解决 达到的成就 + List resolveTopicList = groupTopicList.stream() + .filter(o -> TopicConstant.CLOSED.equals(o.getStatus()) && TopicConstant.RESOLVED.equals(o.getClosedStatus())).collect(Collectors.toList()); + List resolveTopicArriveList = new ArrayList<>(); + buildAchievementEntityList(customerId, groupId, AchievementTypeEnum.RESOVLE_TOPIC.getCode(), resolveTopicList.size(), null, resolveTopicArriveList); + + //设置实际达到成就时间 最后一条为未实现 所以-1 + for (int j = 0; j < resolveTopicArriveList.size() - 1; j++) { + resolveTopicArriveList.get(j).setArriveTime(resolveTopicList.get(j).getCreatedTime()); + } + List list = new ArrayList<>(); + list.addAll(topicArriveList); + list.addAll(toIssueArriveList); + list.addAll(resolveTopicArriveList); + saveOrUpdate(list, true); + } + } + + return true; + } + + + /** + * desc: 根据小组Id计算小组成就 入口 + * + * @param customerId + * @param groupId + * @param achievementType 成就类型 小组人数、话题数、转议题数、小组内问题解决数 + * @return java.lang.Boolean + * @author LiuJanJun + * @date 2021/4/20 + */ + @Override + public Boolean calculateAcm(String customerId, String groupId, String achievementType) { + AchievementTypeEnum anEnum = AchievementTypeEnum.getEnum(achievementType); + if (StringUtils.isBlank(customerId) || StringUtils.isBlank(groupId) || anEnum == null) { + return false; + } + Integer currentValue = null; + switch (anEnum) { + case TOPIC: + //查询话题数 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(ResiTopicEntity::getCustomerId, customerId) + .eq(ResiTopicEntity::getGroupId, groupId) + .eq(ResiTopicEntity::getDelFlag, NumConstant.ZERO_STR); + currentValue = resiTopicDao.selectCount(queryWrapper); + break; + case MEMBER: + currentValue = resiGroupMemberDao.countAllMembers(customerId, groupId); + break; + case TOISSUE: + //查询已经转议题的话题数 + queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(ResiTopicEntity::getCustomerId, customerId) + .eq(ResiTopicEntity::getGroupId, groupId) + .eq(ResiTopicEntity::getShiftIssue, NumConstant.ONE) + .eq(ResiTopicEntity::getDelFlag, NumConstant.ZERO_STR); + currentValue = resiTopicDao.selectCount(queryWrapper); + break; + case RESOVLE_TOPIC: + //查询已经关闭且为已解决的话题数 + queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(ResiTopicEntity::getCustomerId, customerId) + .eq(ResiTopicEntity::getGroupId, groupId) + .eq(ResiTopicEntity::getStatus, TopicConstant.CLOSED) + .eq(ResiTopicEntity::getClosedStatus, TopicConstant.RESOLVED) + .eq(ResiTopicEntity::getShiftIssue, NumConstant.ONE) + .eq(ResiTopicEntity::getDelFlag, NumConstant.ZERO_STR); + currentValue = resiTopicDao.selectCount(queryWrapper); + break; + default: + log.info("calculateAcm error"); + } + log.info("calculateAcm achievementType:{},groupId:{},currentValue:{}", groupId, currentValue, achievementType); + calculateGroupAchievement(customerId, groupId, currentValue, achievementType); + return true; + } + + /** + * desc: 插入或更新小组成就 + * + * @param customerId + * @param groupId + */ + private void calculateGroupAchievement(String customerId, String groupId, int currentValue, String achievementType) { + //根据成就类型获取小组未实现成就 数据库正常只会有一条 + ResiGroupAchievementStatsEntity one = super.selectLastUnAchieved(customerId, groupId, achievementType); + + List haveArrive = new ArrayList<>(); + //如果没有实现的成就则说明是初始化 + if (one == null) { + //第一次创建小组时;初始化那集中类型的成就;没有即将完成的成就 且 类型为小组成员 且 成员(不包括组长)数为0 所以需要初始化下 小组成就的那4类 + if (AchievementTypeEnum.MEMBER.getCode().equals(achievementType) && currentValue == NumConstant.ZERO) { + for (AchievementTypeEnum achievement : AchievementTypeEnum.values()) { + initAchievementStat(customerId, groupId, achievement.getCode(), currentValue, haveArrive); + } + } else { + initAchievementStat(customerId, groupId, achievementType, currentValue, haveArrive); + } + + //初始化如果记录存在 只更新修改时间 + super.saveOrUpdate(haveArrive, false); + return; + } + + boolean isBatch = false; + Integer targetValue = one.getTargetValue(); + //改为已实现 + if (currentValue >= targetValue) { + isBatch = true; + buildAchievementEntityList(customerId, groupId, achievementType, currentValue, one.getTargetValue(), haveArrive); + } + + if (isBatch) { + super.saveOrUpdate(haveArrive, true); + } else { + //未实现 只更新当前值 + ResiGroupAchievementStatsDTO newStat = new ResiGroupAchievementStatsDTO(); + newStat.setId(one.getId()); + newStat.setCurrentValue(currentValue); + super.update(newStat); + } + } + + /** + * desc: 初始化成就 + * + * @return void + * @author LiuJanJun + * @date 2021/4/23 6:20 下午 + */ + private void initAchievementStat(String customerId, String groupId, String achievementType, int currentValue, List haveArrive) { + buildAchievementEntityList(customerId, groupId, achievementType, currentValue, null, haveArrive); + if (CollectionUtils.isEmpty(haveArrive)) { + throw new RenException("小组达成成就失败"); + } + } + + private void buildAchievementEntityList(String customerId, String groupId, String achievementType, + Integer currentValue, Integer targetValue, List haveArrive) { + boolean isContinue; + int pageNum = NumConstant.ONE; + int pageSize = NumConstant.TEN; + do { //没有任何数据说明是初始化 + List list = getConfigByType(achievementType, pageNum++, pageSize); + //查询和初始化都失败啦 + if (CollectionUtils.isEmpty(list)) { + log.error("calculateMember get config fail"); + throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode()); + } + isContinue = buildArriveList(customerId, groupId, achievementType, currentValue, targetValue, haveArrive, list); + } while (isContinue); + } + + private boolean buildArriveList(String customerId, String groupId, String achievementType, int currentValue, Integer targetValue, + List haveArrive, List list) { + boolean isContinue = true; + for (ResiGroupAchievementConfigEntity configEntity : list) { + if (targetValue != null) { + //筛选出已经完成的成就 + if (configEntity.getTargetValue() < targetValue) { + continue; + } + } + ResiGroupAchievementStatsEntity statsEntity = new ResiGroupAchievementStatsEntity(); + statsEntity.setCustomerId(customerId); + statsEntity.setGroupId(groupId); + statsEntity.setAchievementId(configEntity.getId()); + statsEntity.setAchievementName(configEntity.getAchievementName()); + + statsEntity.setAchievementType(achievementType); + statsEntity.setCurrentValue(currentValue); + statsEntity.setTargetValue(configEntity.getTargetValue()); + statsEntity.setDelFlag(NumConstant.ZERO_STR); + statsEntity.setArriveTime(new Date()); + + haveArrive.add(statsEntity); + if (currentValue >= configEntity.getTargetValue()) { + statsEntity.setIsArrive(NumConstant.ONE); + + } else { + //如果没有达到则 放入这一条后 退出 + statsEntity.setIsArrive(NumConstant.ZERO); + statsEntity.setArriveTime(null); + isContinue = false; + break; + } + } + return isContinue; + } + + private List getConfigByType(String achievementType, int pageNum, int pageSize) { + List list = super.getAchievementConfigPage(pageNum, pageSize, achievementType); + if (CollectionUtils.isEmpty(list)) { + log.warn("获取小组成就配置错误,{} 开始进行初始化规则", achievementType); + list = super.initAchievementConfig(achievementType); + } + return list; + } + + /** + * desc:获取小组List 按创建时间升序 + * + * @param customerId + * @return + */ + private List getCustomerGroupList(String customerId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda() + .eq(ResiGroupEntity::getDelFlag, NumConstant.ZERO_STR) + .eq(ResiGroupEntity::getCustomerId, customerId) + .orderByAsc(ResiGroupEntity::getCreatedTime); + return resiGroupDao.selectList(queryWrapper); + } + + /** + * desc:获取小组成员(非组长)List 按创建时间升序 + * + * @param customerId + * @return + */ + private List getGroupMemberList(String customerId, String groupId) { + QueryWrapper memberQuery = new QueryWrapper<>(); + memberQuery.lambda() + .eq(ResiGroupMemberEntity::getCustomerId, customerId) + .eq(ResiGroupMemberEntity::getResiGroupId, groupId) + .eq(ResiGroupMemberEntity::getDelFlag, NumConstant.ZERO_STR) + .eq(ResiGroupMemberEntity::getGroupLeaderFlag, TopicConstant.MEMBER) + .orderByAsc(ResiGroupMemberEntity::getCreatedTime); + return resiGroupMemberDao.selectList(memberQuery); + } + + /** + * desc:获取小组话题List 按创建时间升序 + * + * @param customerId + * @return + */ + private List getGroupTopicList(String customerId, String groupId) { + QueryWrapper memberQuery = new QueryWrapper<>(); + memberQuery.lambda() + .eq(ResiTopicEntity::getCustomerId, customerId) + .eq(ResiTopicEntity::getGroupId, groupId) + .eq(ResiTopicEntity::getDelFlag, NumConstant.ZERO_STR) + .orderByAsc(ResiTopicEntity::getCreatedTime); + return resiTopicDao.selectList(memberQuery); + } + + /** + * desc:获取客户IdList + * + * @param customerId + * @return + */ + private List getCustomerIds(String customerId) { + List customerIdList = new ArrayList<>(); + if (StringUtils.isBlank(customerId)) { + Result> allCustomerList = operCrmOpenFeignClient.getAllCustomerList(); + if (allCustomerList != null && !CollectionUtils.isEmpty(allCustomerList.getData())) { + customerIdList.addAll(allCustomerList.getData().stream().map(CustomerDTO::getId).collect(Collectors.toList())); + } + } else { + customerIdList.add(customerId); + } + return customerIdList; + } +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/dao/ResiGroupMemberDao.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/dao/ResiGroupMemberDao.java index 0f9ed73ce4..08b62c9d1c 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/dao/ResiGroupMemberDao.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/dao/ResiGroupMemberDao.java @@ -170,4 +170,15 @@ public interface ResiGroupMemberDao extends BaseDao { String selectUserRole(@Param("groupId")String groupId, @Param("userId")String userId); int exitGroupById(@Param("id") String id, @Param("updatedBy") String updatedBy); + + /** + * desc: 仅统计除组长之外的成员数 + * + * @param customerId + * @param groupId + * @return int + * @author LiuJanJun + * @date 2021/4/23 3:14 下午 + */ + int countAllMembers(@Param("customerId") String customerId, @Param("groupId") String groupId); } diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/GroupMemeberOperationServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/GroupMemeberOperationServiceImpl.java index 6813b2edbc..343a6dbd64 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/GroupMemeberOperationServiceImpl.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/GroupMemeberOperationServiceImpl.java @@ -36,10 +36,13 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.SendMqMsgUtils; import com.epmet.dto.IssueShareLinkRecordDTO; import com.epmet.dto.IssueShareLinkVisitRecordDTO; +import com.epmet.dto.form.CommonGridIdFormDTO; import com.epmet.dto.form.GetRoleKeyListFormDTO; +import com.epmet.dto.result.CommonDataFilterResultDTO; import com.epmet.dto.result.UserBaseInfoResultDTO; import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.feign.GovIssueOpenFeignClient; +import com.epmet.modules.feign.GovOrgFeignClient; import com.epmet.modules.group.dao.ResiGroupDao; import com.epmet.modules.group.entity.ResiGroupEntity; import com.epmet.modules.group.redis.ResiGroupRedis; @@ -115,6 +118,8 @@ public class GroupMemeberOperationServiceImpl extends BaseServiceImpl page(Map params) { @@ -292,11 +297,12 @@ public class GroupMemeberOperationServiceImpl extends BaseServiceImpl visitRecordResult = issueOpenFeignClient.visitRecord(param.getShareLinkId(), param.getUserId()); if(!visitRecordResult.success() || null == visitRecordResult.getData()){ log.error("【{}】该用户入组方式为议题分享链接入组,但未查询到链接访问记录,链接Id【{}】",param.getUserId(),param.getShareLinkId()); throw new RenException("未找到链接访问记录"); } - if(NumConstant.ZERO == visitRecordResult.getData().getIsInviteRegister()) isNew = true; + if(NumConstant.ZERO == visitRecordResult.getData().getIsInviteRegister()) { + isNew = true; + } } if(StringUtils.isNotBlank(inviter)){ + + CommonGridIdFormDTO dataFilterParam = new CommonGridIdFormDTO(); + dataFilterParam.setGridId(resiGroupDTO.getGridId()); + dataFilterParam.setUserId(param.getUserId()); + Result dataFilterResult = govOrgFeignClient.gridDataFilter(dataFilterParam); + if (!dataFilterResult.success() || null == dataFilterResult.getData()) { + throw new RenException(dataFilterResult.getMsg()); + } + //mq的事件类型 MqBaseMsgDTO mqBaseMsgDTO = new MqBaseMsgDTO(); //事件code @@ -340,11 +359,17 @@ public class GroupMemeberOperationServiceImpl extends BaseServiceImpl pointEventMsgList = new ArrayList<>(); BasePointEventMsg pointEventMsg = new BasePointEventMsg(); pointEventMsg.setCustomerId(resiGroupDTO.getCustomerId()); + pointEventMsg.setAgencyId(dataFilterResult.getData().getAgencyId()); + pointEventMsg.setGridId(resiGroupDTO.getGridId()); + pointEventMsg.setGroupId(groupId); + pointEventMsg.setSourceType("invite"); + pointEventMsg.setSourceId(param.getUserId()); pointEventMsg.setUserId(inviter); pointEventMsg.setActionFlag(MqConstant.PLUS); pointEventMsg.setIsCommon(false); pointEventMsg.setTargetDate(current); pointEventMsg.setEventTag(mqBaseMsgDTO.getEventTag()); + pointEventMsg.setEventClass(mqBaseMsgDTO.getEventClass()); //pointEventMsg.setRemark("通过".concat(StringUtils.equals(param.getShareLinkType(),"topic") // ? "话题":"议题").concat("分享链接邀请").concat(isNew ? "新" : "").concat("用户进组")); @@ -391,15 +416,21 @@ public class GroupMemeberOperationServiceImpl extends BaseServiceImpl page(Map params) { @@ -611,7 +619,9 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl response = issueClient.visitRecord(groupMemeberOperationDTO.getGroupInvitationId(), groupMemeberOperationDTO.getCustomerUserId()); @@ -620,7 +630,9 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl dataFilterResult = govOrgFeignClient.gridDataFilter(dataFilterParam); + if (!dataFilterResult.success() || null == dataFilterResult.getData()) { + throw new RenException(dataFilterResult.getMsg()); + } + //mq的事件类型 MqBaseMsgDTO mqBaseMsgDTO = new MqBaseMsgDTO(); mqBaseMsgDTO.setEventClass("resi_group"); @@ -636,6 +657,11 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl pointEventMsgList = new ArrayList<>(); BasePointEventMsg pointEventMsg = new BasePointEventMsg(); pointEventMsg.setCustomerId(groupCache.getCustomerId()); + pointEventMsg.setAgencyId(dataFilterResult.getData().getAgencyId()); + pointEventMsg.setGridId(groupCache.getGridId()); + pointEventMsg.setGroupId(groupCache.getGroupId()); + pointEventMsg.setSourceType("invite"); + pointEventMsg.setSourceId(agreeApplyFormDTO.getUserId()); pointEventMsg.setUserId(inviter); pointEventMsg.setActionFlag(MqConstant.PLUS); pointEventMsg.setIsCommon(false); @@ -664,6 +690,12 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl msgList = new ArrayList<>(); msgList.add(wxSubscribeMessageFormDTO); epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList); + + //发送小组成就消息 + boolean flag = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient) + .sendGroupAchievementMqMsg(new GroupAchievementMQMsg(resiGroupDTO.getCustomerId(), resiGroupDTO.getId(), AchievementTypeEnum.MEMBER.getCode())); + if (!flag) { + logger.error("发送(小组成就)系统消息到message服务失败"); + } + } /** diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/support/GroupAchievementUtils.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/support/GroupAchievementUtils.java new file mode 100644 index 0000000000..2ca6448e93 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/support/GroupAchievementUtils.java @@ -0,0 +1,81 @@ +package com.epmet.modules.support; + +import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.enums.AchievementTypeEnum; + +/** + * desc:小组成就下一等级规则工具类 + * + * @author: LiuJanJun + * @date: 2021/4/19 4:11 下午 + * @version: 1.0 + * @remark 利用此工具类生成下一等级的目标值 + */ +public class GroupAchievementUtils { + //小组人数、话题数、转议题数、小组内问题解决数 + + /** + * desc:获取下一等级的话题数目标值 步长500 起始值 500 + * + * @param currentValue + */ + private static Integer getNextTopicTargetValue(Integer currentValue) { + if (currentValue < NumConstant.FIVE_HUNDRED) { + throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode()); + } + return currentValue + NumConstant.FIVE_HUNDRED; + } + + /** + * desc:获取下一等级的转议题数目标值 步长50 起始值 100 + * + * @param currentValue + */ + private static Integer getNextToIssueTargetValue(Integer currentValue) { + if (currentValue < NumConstant.ONE_HUNDRED) { + throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode()); + } + return currentValue + NumConstant.FIFTY; + } + + /** + * desc:获取下一等级的话题解决数目标值 步长100 起始值 100 + * + * @param currentValue + */ + private static Integer getNextResolveTopicTargetValue(Integer currentValue) { + if (currentValue < NumConstant.ONE_HUNDRED) { + throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode()); + } + return currentValue + NumConstant.ONE_HUNDRED; + } + + /** + * desc:获取下一等级的话题数目标值 步长500 起始值 500 + * + * @param currentValue + */ + public static Integer getNextTargetValue(String achievementType, Integer currentValue) { + AchievementTypeEnum anEnum = AchievementTypeEnum.getEnum(achievementType); + if (anEnum == null){ + throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode()); + } + Integer next = null; + switch (anEnum){ + case TOPIC: + next = getNextTopicTargetValue(currentValue); + break; + case TOISSUE: + next = getNextToIssueTargetValue(currentValue); + break; + case RESOVLE_TOPIC: + next = getNextResolveTopicTargetValue(currentValue); + break; + default: + + } + return next; + } +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/support/GroupLevelUtils.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/support/GroupLevelUtils.java new file mode 100644 index 0000000000..17d14fb2f6 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/support/GroupLevelUtils.java @@ -0,0 +1,76 @@ +package com.epmet.modules.support; + +import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.RenException; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 小组等级积分工具类 0,300,700,1200,1800 + * + * @author zhaoqifeng + * @date 2021/4/21 10:22 + */ +@Slf4j +public class GroupLevelUtils { + + /** + * 根据等级算出升级所需的积分 + * + * @param level + * @return java.lang.Integer + * @author zhaoqifeng + * @date 2021/4/21 10:25 + * @remark 通项公式:an=n(n-1)/2+2n-2(n∈N+) -3+n(n-1)/2(需要特殊处理,所以引用前面的) + */ + public static Integer getPoint(Integer level) { + if (level == null || level < NumConstant.ONE) { + throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode()); + } + Integer point = (level * (level - NumConstant.ONE) / NumConstant.TWO + NumConstant.TWO * level - NumConstant.TWO) * NumConstant.ONE_HUNDRED; + log.info("getPoint level:{},point:{}", level, point); + return point; + } + + /** + * 根据积分算出当前的等级 + * + * @param point + * @return java.lang.Integer + * @author zhaoqifeng + * @date 2021/4/21 10:25 + */ + public static Integer getLevel(Integer point) { + if (point == null || point < NumConstant.ZERO) { + throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode()); + } + //如果是0 则返回等级1 + if (point == NumConstant.ZERO) { + return NumConstant.ONE; + } + AtomicBoolean flag = new AtomicBoolean(false); + AtomicInteger initLevel = new AtomicInteger(1); + do { + Integer point1 = getPoint(initLevel.incrementAndGet()); + if (point < point1) { + int i = initLevel.decrementAndGet(); + log.info("getLevel level:{},point:{}", i, point); + return i; + } + + } while (!flag.get()); + return null; + } + + public static void main(String[] args) { + for (int i = 1; i < 10; i++) { + System.out.println("lv" + i + ":" + getPoint(i)); + } + System.out.println(getLevel(3300)); + System.out.println(getLevel(299)); + + } +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/ResiTopicController.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/ResiTopicController.java index 828401e23e..ef4a773ccf 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/ResiTopicController.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/ResiTopicController.java @@ -47,6 +47,7 @@ public class ResiTopicController { * @Author wangc * @Date 2020.03.31 13:15 **/ + @Deprecated @PostMapping("createtopic") public Result createTopic(@LoginUser TokenDto tokenDto, @RequestBody ResiTopicPublishFormDTO topicPublishFormDTO){ diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicCommentServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicCommentServiceImpl.java index 702c088bcf..dd02ae9142 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicCommentServiceImpl.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicCommentServiceImpl.java @@ -39,8 +39,10 @@ import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.ScanContentUtils; import com.epmet.commons.tools.utils.SendMqMsgUtils; +import com.epmet.dto.form.CommonGridIdFormDTO; import com.epmet.dto.form.UserResiInfoListFormDTO; import com.epmet.dto.result.UserInfoResultDTO; +import com.epmet.dto.result.CommonDataFilterResultDTO; import com.epmet.dto.result.UserResiInfoResultDTO; import com.epmet.modules.comment.entity.ResiTopicCommentEntity; import com.epmet.modules.constant.ResiGroupRedisKeys; @@ -48,6 +50,7 @@ import com.epmet.modules.constant.WxmpSubscribeConstant; import com.epmet.modules.feign.EpmetUserFeignClient; import com.epmet.modules.group.dao.ResiGroupDao; import com.epmet.modules.group.entity.ResiGroupEntity; +import com.epmet.modules.feign.GovOrgFeignClient; import com.epmet.modules.group.redis.ResiGroupRedis; import com.epmet.modules.member.dao.ResiGroupMemberDao; import com.epmet.modules.member.redis.ResiGroupMemberRedis; @@ -62,6 +65,7 @@ import com.epmet.resi.group.constant.TopicConstant; import com.epmet.resi.group.dto.comment.form.ResiQueryCommentFormDTO; import com.epmet.resi.group.dto.comment.result.ResiCommentResultDTO; import com.epmet.resi.group.dto.group.ResiGroupDTO; +import com.epmet.resi.group.dto.group.ResiGroupInfoRedisDTO; import com.epmet.resi.group.dto.member.ResiGroupMemberDTO; import com.epmet.resi.group.dto.member.ResiGroupMemberInfoRedisDTO; import com.epmet.resi.group.dto.member.result.ResiGroupMemberInfoRedisResultDTO; @@ -116,6 +120,8 @@ public class ResiTopicCommentServiceImpl extends BaseServiceImpl dataFilterResult = govOrgFeignClient.gridDataFilter(dataFilterParam); + if (!dataFilterResult.success() || null == dataFilterResult.getData()) { + throw new RenException(dataFilterResult.getMsg()); + } + pointEventMsg.setCustomerId(customerId); + pointEventMsg.setAgencyId(dataFilterResult.getData().getAgencyId()); + pointEventMsg.setGridId(groupCache.getGridId()); + pointEventMsg.setGroupId(topic.getGroupId()); + pointEventMsg.setSourceType("topic"); + pointEventMsg.setSourceId(topic.getId()); pointEventMsg.setUserId(tokenDto.getUserId()); // 加分 pointEventMsg.setActionFlag(MqConstant.PLUS); pointEventMsg.setIsCommon(false); pointEventMsg.setEventTag(mqBaseMsgDTO.getEventTag()); + pointEventMsg.setEventClass(mqBaseMsgDTO.getEventClass()); //某某小组中评论话题“某某某…” StringBuilder builder = new StringBuilder(groupRedis.get(topic.getGroupId()).getGroupName()).append("小组中评论"); String content = CharMatcher.WHITESPACE.trimFrom(topic.getTopicContent()); diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java index bf33cc61d3..6c4ff65b4f 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java @@ -22,6 +22,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.rocketmq.messages.GroupAchievementMQMsg; import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.MqConstant; import com.epmet.commons.tools.constant.NumConstant; @@ -54,6 +55,7 @@ import com.epmet.feign.GovOrgOpenFeignClient; import com.epmet.modules.constant.GroupMemberConstant; import com.epmet.modules.constant.ResiGroupRedisKeys; import com.epmet.modules.constant.WxmpSubscribeConstant; +import com.epmet.commons.tools.enums.AchievementTypeEnum; import com.epmet.modules.feign.EpmetUserFeignClient; import com.epmet.modules.feign.GovIssueFeignClient; import com.epmet.modules.feign.GovOrgFeignClient; @@ -101,9 +103,11 @@ import com.epmet.resi.group.dto.topic.form.*; import com.epmet.resi.group.dto.topic.result.CheckTopicPublisherResultDTO; import com.epmet.resi.group.dto.topic.result.GovTopicIssueInfoResultDTO; import com.epmet.resi.group.dto.topic.result.*; +import com.epmet.send.SendMqMsgUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.google.common.base.CharMatcher; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -125,6 +129,7 @@ import java.util.stream.Collectors; * @author generator generator@elink-cn.com * @since v1.0.0 2020-03-31 */ +@Data @Service @Slf4j public class ResiTopicServiceImpl extends BaseServiceImpl implements ResiTopicService { @@ -406,6 +411,7 @@ public class ResiTopicServiceImpl extends BaseServiceImpl dataFilterResult = govOrgFeignClient.gridDataFilter(dataFilterParam); + if (!dataFilterResult.success() || null == dataFilterResult.getData()) { + throw new RenException(dataFilterResult.getMsg()); } + pointEventMsg.setAgencyId(dataFilterResult.getData().getAgencyId()); pointEventMsg.setUserId(tokenDto.getUserId()); // 加分 pointEventMsg.setActionFlag(MqConstant.PLUS); pointEventMsg.setIsCommon(false); pointEventMsg.setEventTag(mqBaseMsgDTO.getEventTag()); + pointEventMsg.setEventClass(mqBaseMsgDTO.getEventClass()); pointEventMsgList.add(pointEventMsg); mqBaseMsgDTO.setMsg(JSON.toJSONString(pointEventMsgList)); @@ -767,6 +791,61 @@ public class ResiTopicServiceImpl extends BaseServiceImpl dataFilterResult = govOrgFeignClient.gridDataFilter(dataFilterParam); + if (!dataFilterResult.success() || null == dataFilterResult.getData()) { + throw new RenException(dataFilterResult.getMsg()); + } + + + //mq的事件类型 + MqBaseMsgDTO mqBaseMsgDTO = new MqBaseMsgDTO(); + mqBaseMsgDTO.setEventClass("resi_group"); + //事件code 组长解决组内话题 + mqBaseMsgDTO.setEventTag(EventEnum.LEADER_RESOLVE_TOPIC.getEventTag()); + List pointEventMsgList = new ArrayList<>(); + + BasePointEventMsg pointEventMsg = new BasePointEventMsg(); + pointEventMsg.setCustomerId(tokenDto.getCustomerId()); + pointEventMsg.setAgencyId(dataFilterResult.getData().getAgencyId()); + pointEventMsg.setGridId(groupCache.getGridId()); + pointEventMsg.setGroupId(groupCache.getGroupId()); + pointEventMsg.setSourceType("topic"); + pointEventMsg.setSourceId(closeFormDTO.getTopicId()); + pointEventMsg.setUserId(tokenDto.getUserId()); + pointEventMsg.setActionFlag(MqConstant.PLUS); + pointEventMsg.setIsCommon(false); + pointEventMsg.setEventTag(EventEnum.LEADER_RESOLVE_TOPIC.getEventTag()); + pointEventMsg.setEventClass(EventEnum.LEADER_RESOLVE_TOPIC.getEventClass()); + //将话题“某某某…” (前十个字后面省略号) 转为议题 + String content = CharMatcher.WHITESPACE.trimFrom(topic.getTopicContent()); + pointEventMsg.setRemark( + (StringUtils.isBlank(content) + || StringUtils.equals("语音话题", content) ? "语音话题" : + "话题\"" + + content + .substring(NumConstant.ZERO, content.length() < NumConstant.TEN ? content.length() : NumConstant.TEN) + + (NumConstant.TEN > content.length() ? "\"" : "…\"")) + + "已被解决"); + pointEventMsgList.add(pointEventMsg); + + mqBaseMsgDTO.setMsg(JSON.toJSONString(pointEventMsgList)); + if(!SendMqMsgUtils.sendMsg(mqBaseMsgDTO).success()){ + log.error("组长解决话题事件发送失败,参数:{}",JSON.toJSONString(closeFormDTO)); + } + } + //发送小组成就消息 + boolean flag = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient) + .sendGroupAchievementMqMsg(new GroupAchievementMQMsg(topic.getCustomerId(), topic.getGroupId(), AchievementTypeEnum.RESOVLE_TOPIC.getCode())); + if (!flag) { + log.error("发送(小组成就)系统消息到message服务失败"); + } return new Result(); } @@ -1663,6 +1742,7 @@ public class ResiTopicServiceImpl extends BaseServiceImpl { + MqBaseMsgDTO msgDTO = new MqBaseMsgDTO(); + msgDTO.setEventClass("resi_group"); + //事件code 因为楼院小组的事件回调统一入口,外层的EventTag不能够判断具体的事件 + //因为可能会一次发送多个事件集合,需要对集合里的对象逐个判断 + msgDTO.setEventTag(EventEnum.SHIFT_TOPIC_TO_ISSUE.getEventTag()); + List msgList = new ArrayList<>(); + msgList.add(item); + msgDTO.setMsg(JSON.toJSONString(msgList)); + if(!SendMqMsgUtils.sendMsg(msgDTO).success()){ + log.error("话题转议题事件发送失败,参数:{}",JSON.toJSONString(topicTurnIssueFromDTO)); + } + }); + } else { ValidatorUtils.validateEntity(result, FirstTopicShiftedToIssueApplicationResultDTO.AllowAuditionGroup.class); } }else { throw new RenException(dataFilterResult.getMsg()); } - + //发送小组成就消息 + boolean flag = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient) + .sendGroupAchievementMqMsg(new GroupAchievementMQMsg(group.getCustomerId(), group.getGroupId(), AchievementTypeEnum.TOISSUE.getCode())); + if (!flag) { + log.error("发送(小组成就)系统消息到message服务失败"); + } return result; } @@ -1915,26 +2019,36 @@ public class ResiTopicServiceImpl extends BaseServiceImpl dataFilterResult = govOrgFeignClient.gridDataFilter(dataFilterParam); + if (!dataFilterResult.success() || null == dataFilterResult.getData()) { + throw new RenException(dataFilterResult.getMsg()); + } //发送积分 //mq的事件类型 - MqBaseMsgDTO mqBaseMsgDTO = new MqBaseMsgDTO(); - mqBaseMsgDTO.setEventClass("resi_group"); +// MqBaseMsgDTO mqBaseMsgDTO = new MqBaseMsgDTO(); +// mqBaseMsgDTO.setEventClass("resi_group"); //事件code 因为楼院小组的事件回调统一入口,外层的EventTag不能够判断具体的事件 //因为可能会一次发送多个事件集合,需要对集合里的对象逐个判断 - mqBaseMsgDTO.setEventTag(EventEnum.SHIFT_TOPIC_TO_ISSUE.getEventTag()); +// mqBaseMsgDTO.setEventTag(EventEnum.SHIFT_TOPIC_TO_ISSUE.getEventTag()); List pointEventMsgList = new ArrayList<>(); //1.话题被转为议题 组内成员 BasePointEventMsg pointEventMsg = new BasePointEventMsg(); pointEventMsg.setCustomerId(groupCache.getCustomerId()); + pointEventMsg.setAgencyId(dataFilterResult.getData().getAgencyId()); + pointEventMsg.setGridId(group.getGridId()); + pointEventMsg.setGroupId(group.getGroupId()); + pointEventMsg.setSourceType("issue"); + pointEventMsg.setSourceId(param.getIssueId()); pointEventMsg.setUserId(group.getTopicAuthorId()); pointEventMsg.setActionFlag(MqConstant.PLUS); pointEventMsg.setIsCommon(false); pointEventMsg.setEventTag(EventEnum.TOPIC_SHIFTED_TO_ISSUE.getEventTag()); + pointEventMsg.setEventClass(EventEnum.TOPIC_SHIFTED_TO_ISSUE.getEventClass()); //某某小组中发布的话题“某某某…” (前十个字后面省略号) 被转为议题 String content = CharMatcher.WHITESPACE.trimFrom(topic.getTopicContent()); pointEventMsg.setRemark(new StringBuilder(groupCache.getGroupName()).append("小组中发布的") @@ -1951,10 +2065,16 @@ public class ResiTopicServiceImpl extends BaseServiceImpl { + MqBaseMsgDTO msgDTO = new MqBaseMsgDTO(); + msgDTO.setEventClass("resi_group"); + //事件code 因为楼院小组的事件回调统一入口,外层的EventTag不能够判断具体的事件 + //因为可能会一次发送多个事件集合,需要对集合里的对象逐个判断 + msgDTO.setEventTag(EventEnum.SHIFT_TOPIC_TO_ISSUE.getEventTag()); + List msgList = new ArrayList<>(); + msgList.add(item); + msgDTO.setMsg(JSON.toJSONString(msgList)); + if(!SendMqMsgUtils.sendMsg(msgDTO).success()){ + log.error("话题转议题事件发送失败,参数:{}",JSON.toJSONString(param)); + } + }); } return issueInfo; } @@ -2301,6 +2429,15 @@ public class ResiTopicServiceImpl extends BaseServiceImpl dataFilterResult = govOrgFeignClient.gridDataFilter(dataFilterParam); + if (!dataFilterResult.success() || null == dataFilterResult.getData()) { + throw new RenException(dataFilterResult.getMsg()); + } + //某某小组中发布的话题“某某某…” (前十个字后面省略号) 被转为项目 if(EventEnum.TOPIC_SHIFTED_TO_PROJECT == param.getEvent()){ @@ -2313,10 +2450,16 @@ public class ResiTopicServiceImpl extends BaseServiceImpl NumConstant.TEN ? (content.substring(NumConstant.TEN) + "…") : content); + breviary.append("话题\""); + breviary.append(content.length() > NumConstant.TEN ? (content.substring(NumConstant.ZERO,NumConstant.TEN) + "…") : content); breviary.append("\""); }else { - breviary.append("话题"); + breviary.append("语音话题"); } - sendMqMsg(draft.getCreatedBy(), draft.getCustomerId(),draft.getCreatedTime(),resiGroupRedis.get(draft.getGroupId()).getGroupName(),breviary.toString()); //2021.4.22 start sun 因业务调整,新增组内消息记录表,新增话题时相应的初始数据 GroupMessageEntity messageEntity = new GroupMessageEntity(); @@ -814,6 +824,16 @@ public class TopicDraftServiceImpl extends BaseServiceImpl dataFilterResult = govOrgFeignClient.gridDataFilter(dataFilterParam); + if (!dataFilterResult.success() || null == dataFilterResult.getData()) { + throw new RenException(dataFilterResult.getMsg()); + } + + sendMqMsg(draft.getCreatedBy(), draft.getCustomerId(), draft.getCreatedTime(),resiGroupRedis.get(draft.getGroupId()).getGroupName(), + breviary.toString(), dataFilterResult.getData().getAgencyId(), draft.getGridId(), draft.getGroupId(), resiTopic.getId()); } //记录操作记录 entity = baseDao.selectById(formDTO.getTopicDraftId()); @@ -942,7 +962,6 @@ public class TopicDraftServiceImpl extends BaseServiceImpl dataFilterResult = govOrgFeignClient.gridDataFilter(dataFilterParam); + if (!dataFilterResult.success() || null == dataFilterResult.getData()) { + throw new RenException(dataFilterResult.getMsg()); + } + sendMqMsg(tokenDto.getUserId(), formDTO.getCustomerId(), draft.getCreatedTime(), resiGroupRedis.get(draft.getGroupId()).getGroupName(), + breviary.toString(), dataFilterResult.getData().getAgencyId(), formDTO.getGridId(), formDTO.getGroupId(), topic.getId()); + + } /** @@ -970,7 +1000,8 @@ public class TopicDraftServiceImpl extends BaseServiceImpl actPointEventMsgList=new ArrayList<>(); BasePointEventMsg actPointEventMsg=new BasePointEventMsg(); actPointEventMsg.setCustomerId(customerId); + actPointEventMsg.setAgencyId(agencyId); + actPointEventMsg.setGridId(gridId); + actPointEventMsg.setGroupId(groupId); + actPointEventMsg.setSourceType("topic"); + actPointEventMsg.setSourceId(topicId); actPointEventMsg.setUserId(userId); actPointEventMsg.setActionFlag(MqConstant.PLUS); actPointEventMsg.setIsCommon(false); actPointEventMsg.setRemark(new StringBuilder(groupName).append("小组中发布").append(topicBreviary).toString()); actPointEventMsg.setTargetDate(targetDate); actPointEventMsg.setEventTag(EventEnum.PUBLISH_ONE_TOPIC.getEventTag()); + actPointEventMsg.setEventClass(EventEnum.PUBLISH_ONE_TOPIC.getEventClass()); actPointEventMsgList.add(actPointEventMsg); mqBaseMsgDTO.setMsg(JSON.toJSONString(actPointEventMsgList)); @@ -993,6 +1030,14 @@ public class TopicDraftServiceImpl extends BaseServiceImpl msgs, ConsumeConcurrentlyContext context) { + long start = System.currentTimeMillis(); + try { + msgs.forEach(this::consumeMessage); + } catch (Exception e) { + //失败重发 + logger.error("consumeMessage fail,msg:{}",e.getMessage()); + return ConsumeConcurrentlyStatus.RECONSUME_LATER; + } + log.info("consumeMessage success, cost:{} ms",System.currentTimeMillis() - start); + return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; + } + + private void consumeMessage(MessageExt messageExt) { + logger.info("receive msg:{}", JSON.toJSONString(messageExt)); + String msg = new String(messageExt.getBody()); + + GroupAchievementMQMsg msgObj = JSON.parseObject(msg, GroupAchievementMQMsg.class); + if (msgObj == null){ + log.warn("consumeMessage msg body is blank"); + return; + } + + DistributedLock distributedLock = null; + RLock lock = null; + try { + distributedLock = SpringContextUtils.getBean(DistributedLock.class); + lock = distributedLock.getLock(String.format("lock:group_achievement:%s", msgObj.getCustomerId()) + ,30L, 30L, TimeUnit.SECONDS); + + if (StringUtils.isBlank(msgObj.getAchievementType()) || StringUtils.isBlank(msgObj.getCustomerId()) + || StringUtils.isBlank(msgObj.getGroupId())){ + logger.error("consumer groupAchievement fail,msg:{}",msgObj); + return; + } + //消息被消费太快 业务数据还没有完成 歇一会先 + try { + Thread.sleep(60L); + } catch (InterruptedException e) { + logger.error("consumeMessage sleep exception",e); + } + Boolean aBoolean = SpringContextUtils.getBean(StatsAchievementService.class).calculateAcm(msgObj.getCustomerId(), msgObj.getGroupId(), msgObj.getAchievementType()); + logger.info("consumer groupAchievement msg success,{}",aBoolean); + } catch (RenException e) { + // 如果是我们手动抛出的异常,说明在业务可控范围内。目前不需要MQ重试 + logger.error("【RocketMQ】消费小组成就消息失败:",e); + } catch (Exception e) { + // 不是我们自己抛出的异常,可以让MQ重试 + logger.error("【RocketMQ】消费小组成就消息失败:",e); + throw e; + } finally { + if (distributedLock != null){ + distributedLock.unLock(lock); + } + } + } + + + + /*@Override + public ConsumerConfigProperties getConsumerProperty() { + ConsumerConfigProperties configProperties = new ConsumerConfigProperties(); + configProperties.setConsumerGroup(ConsomerGroupConstants.GROUP_ACHIEVEMENT_COMPONENTS_GROUP); + configProperties.setTopic(TopicConstants.GROUP_ACHIEVEMENT); + configProperties.setTag("*"); + configProperties.setConsumerListener(this); + return configProperties; + }*/ +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java new file mode 100644 index 0000000000..e219987289 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java @@ -0,0 +1,68 @@ +package com.epmet.mq; + +import com.epmet.commons.rocketmq.constants.ConsomerGroupConstants; +import com.epmet.commons.rocketmq.constants.TopicConstants; +import com.epmet.commons.tools.enums.EnvEnum; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; +import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.common.protocol.heartbeat.MessageModel; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Slf4j +@Component +public class RocketMQConsumerRegister { + @Value("${spring.profiles.active}") + private String env; + @Value("${rocketmq.name-server}") + private String nameServer; + + /** + * @return + * @Description 注册监听器 + * @author wxz + * @date 2021.03.03 16:09 + */ + @PostConstruct + public void registerAllListeners() { + try { + if (!EnvEnum.LOCAL.getCode().equals(env)) { + register(ConsomerGroupConstants.GROUP_ACHIEVEMENT_COMPONENTS_GROUP, MessageModel.CLUSTERING, TopicConstants.GROUP_ACHIEVEMENT, "*", new GroupAchievementCustomListener()); + } + } catch (MQClientException e) { + log.error("registerAllListeners exception", e); + } + } + + public void register(String group, MessageModel messageModel, String topic, String subException, MessageListenerConcurrently listener) throws MQClientException { + // 实例化消费者 + DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(group); + + // 设置NameServer的地址 + consumer.setNamesrvAddr(nameServer); + consumer.setMessageModel(messageModel); + consumer.setInstanceName(buildInstanceName()); + // 订阅一个或者多个Topic,以及Tag来过滤需要消费的消息 + consumer.subscribe(topic, subException); + consumer.setConsumeMessageBatchMaxSize(10); + // 注册回调实现类来处理从broker拉取回来的消息 + consumer.registerMessageListener(listener); + // 启动消费者实例 + consumer.start(); + } + + private String buildInstanceName() { + String instanceName = ""; + for (int i = 0; i < 4; i++) { + int t = (int) (Math.random() * 10); + instanceName = instanceName.concat(t + ""); + } + + return instanceName; + } + +} diff --git a/epmet-module/resi-group/resi-group-server/src/main/resources/bootstrap.yml b/epmet-module/resi-group/resi-group-server/src/main/resources/bootstrap.yml index 35cade577d..d3a33a6d2a 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/resources/bootstrap.yml +++ b/epmet-module/resi-group/resi-group-server/src/main/resources/bootstrap.yml @@ -157,3 +157,6 @@ shutdown: graceful: enable: true #是否开启优雅停机 waitTimeSecs: 30 # 优雅停机等待时间,每超过30秒,打印一次错误日志 + +rocketmq: + name-server: @rocketmq.nameserver@ diff --git a/epmet-module/resi-group/resi-group-server/src/main/resources/db/migration/V0.0.18__groupAchievement.sql b/epmet-module/resi-group/resi-group-server/src/main/resources/db/migration/V0.0.18__groupAchievement.sql new file mode 100644 index 0000000000..2bb5dc4dd0 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/resources/db/migration/V0.0.18__groupAchievement.sql @@ -0,0 +1,89 @@ +CREATE TABLE `resi_group_achievement_config` ( + `ID` varchar(64) NOT NULL COMMENT '主键', + `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id', + `ACHIEVEMENT_NAME` varchar(64) NOT NULL COMMENT '成就名称', + `TARGET_VALUE` int(11) NOT NULL COMMENT '目标值', + `ACHIEVEMENT_TYPE` varchar(16) NOT NULL COMMENT '成就类型:小组人数:member;topic:话题数;转议题数:toissue;话题解决数:reslovetopic', + `DEL_FLAG` varchar(1) NOT NULL DEFAULT '0' COMMENT '删除标记 0:未删除,1:已删除', + `REVISION` int(11) NOT NULL DEFAULT '0' COMMENT '乐观锁', + `CREATED_BY` varchar(32) NOT NULL COMMENT '创建人', + `CREATED_TIME` datetime NOT NULL COMMENT '创建时间', + `UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人', + `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间', + PRIMARY KEY (`ID`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小组成就配置表'; +CREATE TABLE `resi_group_achievement_stats` ( + `ID` varchar(64) NOT NULL COMMENT '主键', + `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id', + `GROUP_ID` varchar(64) NOT NULL COMMENT '小组Id', + `ACHIEVEMENT_ID` varchar(64) NOT NULL COMMENT '成就ID', + `ACHIEVEMENT_NAME` varchar(64) NOT NULL COMMENT '成就名称', + `ACHIEVEMENT_TYPE` varchar(16) NOT NULL COMMENT '成就类型', + `ARRIVE_TIME` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '实现时间', + `CURRENT_VALUE` int(11) NOT NULL DEFAULT '0' COMMENT '当前值', + `TARGET_VALUE` int(11) NOT NULL DEFAULT '0' COMMENT '目标值', + `IS_ARRIVE` int(1) NOT NULL DEFAULT '0' COMMENT '目标是否实现,是:1;否:0', + `DEL_FLAG` varchar(1) NOT NULL COMMENT '删除标记 0:未删除,1:已删除', + `REVISION` int(11) DEFAULT NULL COMMENT '乐观锁', + `CREATED_BY` varchar(32) NOT NULL COMMENT '创建人', + `CREATED_TIME` datetime NOT NULL COMMENT '创建时间', + `UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人', + `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE KEY `unx_gid_mid` (`GROUP_ID`,`ACHIEVEMENT_ID`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小组成就统计表'; + +ALTER TABLE `resi_group` + ADD COLUMN `LEVEL` int(11) DEFAULT '1' COMMENT '小组等级' AFTER `GROUP_TYPE`; + +-- ---------------------------- +-- Records of resi_group_achievement_config +-- ---------------------------- +BEGIN; +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700001', 'default', '组内第1名成员加入', 1, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700002', 'default', '组内成员达到3人', 3, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700003', 'default', '组内成员达到10人', 10, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700004', 'default', '组内成员达到20人', 20, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700005', 'default', '组内成员达到50人', 50, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700006', 'default', '组内成员达到100人', 100, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700007', 'default', '组内成员达到200人', 200, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700008', 'default', '组内成员达到500人', 500, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700009', 'default', '组内成员达到1000人', 1000, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700010', 'default', '组内成员达到2000人', 2000, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700011', 'default', '组内成员达到5000人', 5000, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261402388211700012', 'default', '组内成员达到10000人', 10000, 'member', '0', 0, 'APP_USER', '2021-04-19 16:19:49', 'APP_USER', '2021-04-19 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700001', 'default', '组内第1条话题诞生', 1, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700002', 'default', '组内发布话题数3条', 3, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700003', 'default', '组内发布话题数5条', 5, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700004', 'default', '组内发布话题数10条', 10, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700005', 'default', '组内发布话题数20条', 20, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700006', 'default', '组内发布话题数50条', 50, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700007', 'default', '组内发布话题数100条', 100, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700008', 'default', '组内发布话题数200条', 200, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700009', 'default', '组内发布话题数500条', 500, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700010', 'default', '组内发布话题数1000条', 1000, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700011', 'default', '组内发布话题数1500条', 1500, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700012', 'default', '组内发布话题数2000条', 2000, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700013', 'default', '组内发布话题数2500条', 2500, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261403464411700014', 'default', '组内发布话题数3000条', 3000, 'topic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404210411700001', 'default', '组内第1次话题转议题', 1, 'toissue', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404210411700002', 'default', '组内话题转议题数3条', 3, 'toissue', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404210411700003', 'default', '组内话题转议题数5条', 5, 'toissue', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404210411700004', 'default', '组内话题转议题数10条', 10, 'toissue', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404210411700005', 'default', '组内话题转议题数20条', 20, 'toissue', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404210411700006', 'default', '组内话题转议题数50条', 50, 'toissue', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404210411700007', 'default', '组内话题转议题数100条', 100, 'toissue', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404210411700008', 'default', '组内话题转议题数150条', 150, 'toissue', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404210411700009', 'default', '组内话题转议题数200条', 200, 'toissue', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404543611700001', 'default', '组内话题第1次被解决', 1, 'resovletopic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404543611700002', 'default', '组内话题解决数3条', 3, 'resovletopic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404543611700003', 'default', '组内话题解决数5条', 5, 'resovletopic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404543611700004', 'default', '组内话题解决数10条', 10, 'resovletopic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404543611700005', 'default', '组内话题解决数30条', 30, 'resovletopic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404543611700006', 'default', '组内话题解决数50条', 50, 'resovletopic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404543611700007', 'default', '组内话题解决数100条', 100, 'resovletopic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404543611700008', 'default', '组内话题解决数200条', 200, 'resovletopic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +INSERT INTO `resi_group_achievement_config` VALUES ('202104261404543611700009', 'default', '组内话题解决数300条', 300, 'resovletopic', '0', 0, 'APP_USER', '2021-04-20 16:19:49', 'APP_USER', '2021-04-20 16:19:52'); +COMMIT; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupAchievementConfigDao.xml b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupAchievementConfigDao.xml new file mode 100644 index 0000000000..cce26029ed --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupAchievementConfigDao.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + diff --git a/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupAchievementStatsDao.xml b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupAchievementStatsDao.xml new file mode 100644 index 0000000000..2d18215754 --- /dev/null +++ b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupAchievementStatsDao.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO resi_group_achievement_stats + ( + ID, + CUSTOMER_ID, + GROUP_ID, + ACHIEVEMENT_ID, + ACHIEVEMENT_NAME, + ACHIEVEMENT_TYPE, + ARRIVE_TIME, + CURRENT_VALUE, + TARGET_VALUE, + IS_ARRIVE, + DEL_FLAG, + REVISION, + CREATED_BY, + CREATED_TIME, + UPDATED_BY, + UPDATED_TIME + ) + VALUES + + ( + #{item.id}, + #{item.customerId}, + #{item.groupId}, + #{item.achievementId}, + #{item.achievementName}, + #{item.achievementType}, + #{item.arriveTime}, + #{item.currentValue}, + #{item.targetValue}, + #{item.isArrive}, + #{item.delFlag}, + #{item.revision}, + #{item.createdBy}, + #{item.createdTime}, + #{item.updatedBy}, + #{item.updatedTime} + ) + + ON DUPLICATE KEY UPDATE + + CURRENT_VALUE = values(CURRENT_VALUE), + TARGET_VALUE = values(TARGET_VALUE), + ARRIVE_TIME = if(IS_ARRIVE,ARRIVE_TIME,values(ARRIVE_TIME)), + IS_ARRIVE = VALUES(IS_ARRIVE), + UPDATED_TIME = VALUES(UPDATED_TIME), + + UPDATED_BY = VALUES(UPDATED_BY) + + + + diff --git a/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupDao.xml b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupDao.xml index 50006ae2dd..74c02e9907 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupDao.xml +++ b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupDao.xml @@ -144,6 +144,7 @@ rgs.TOTAL_MEMBERS AS totalMember, rgs.TOTAL_PARTY_MEMBERS AS totalPartyMember, rgm.GROUP_LEADER_FLAG AS leaderFlag, + CONCAT('LV', rg.level) AS level, ( SELECT count(1) @@ -531,6 +532,23 @@ GROUP BY temp.gridId + + +