Browse Source

Merge branch 'dev_log' into dev_temp

# Conflicts:
#	epmet-auth/pom.xml
dev_shibei_match
wxz 4 years ago
parent
commit
eb4414f48f
  1. 13
      epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/form/LogOperationListFormDTO.java
  2. 52
      epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/region/LogOperationResultDTO.java
  3. 44
      epmet-admin/epmet-admin-client/src/main/java/com/epmet/enums/LogOperationTypeEnum.java
  4. 47
      epmet-admin/epmet-admin-server/pom.xml
  5. 4
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/AdminApplication.java
  6. 44
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/LogOperationController.java
  7. 33
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/dao/LogOperationDao.java
  8. 72
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/entity/LogOperationEntity.java
  9. 68
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/mq/listener/RocketMQConsumerRegister.java
  10. 78
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/mq/listener/listener/AuthOperationLogListener.java
  11. 100
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/mq/listener/listener/ProjectOperationLogListener.java
  12. 28
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/LogOperationService.java
  13. 176
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/impl/LogOperationServiceImpl.java
  14. 3
      epmet-admin/epmet-admin-server/src/main/resources/bootstrap.yml
  15. 16
      epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.3__add_log_ope_table.sql
  16. 24
      epmet-admin/epmet-admin-server/src/main/resources/mapper/LogOperationDao.xml
  17. 14
      epmet-auth/epmet-auth-client/pom.xml
  18. 9
      epmet-auth/epmet-auth-client/src/main/java/com/epmet/auth/constants/AuthOperationConstants.java
  19. 43
      epmet-auth/epmet-auth-client/src/main/java/com/epmet/auth/constants/AuthOperationEnum.java
  20. 3
      epmet-auth/pom.xml
  21. 3
      epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java
  22. 52
      epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java
  23. 10
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/ConsomerGroupConstants.java
  24. 8
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/TopicConstants.java
  25. 20
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/messages/LoginMQMsg.java
  26. 11
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/messages/ProjectChangedMQMsg.java
  27. 50
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/ResultDataResolver.java
  28. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/user/LoginUserUtil.java
  29. 7
      epmet-gateway/pom.xml
  30. 2
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/SystemMessageType.java
  31. 2
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/send/SendMqMsgUtil.java
  32. 6
      epmet-module/epmet-message/epmet-message-server/pom.xml
  33. 10
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SystemMessageServiceImpl.java
  34. 5
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
  35. 33
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectProcessServiceImpl.java
  36. 68
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  37. 7
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java
  38. 19
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/CustomerStaffFormDTO.java
  39. 24
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
  40. 10
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java
  41. 23
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java
  42. 8
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/CustomerStaffDao.java
  43. 8
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/CustomerStaffService.java
  44. 6
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerStaffServiceImpl.java
  45. 42
      epmet-user/epmet-user-server/src/main/resources/mapper/CustomerStaffDao.xml

13
epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/form/LogOperationListFormDTO.java

@ -0,0 +1,13 @@
package com.epmet.dto.form;
import lombok.Data;
@Data
public class LogOperationListFormDTO {
private String condition;
private Integer pageNo = 1;
private Integer pageSize = 10;
}

52
epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/region/LogOperationResultDTO.java

@ -0,0 +1,52 @@
package com.epmet.dto.region;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.Date;
/**
*
*/
@Data
public class LogOperationResultDTO {
/**
* 大类别登录login项目流转project
*/
private String category;
/**
* 类型枚举,小类别登录loginlogout退出shift_project议题转项目等
*/
private String type;
/**
* 类型枚举名称
*/
private String typeDisplay;
/**
* 内容
*/
private String content;
/**
* 操作目标ID
*/
private String targetId;
/**
* 操作人ID
*/
private String operatorId;
private String operatorName;
private String operatorMobile;
/**
* 操作时间,该时间不是插入数据的时间而是操作发生的真实时间
*/
private Long operatingTime;
}

44
epmet-admin/epmet-admin-client/src/main/java/com/epmet/enums/LogOperationTypeEnum.java

@ -0,0 +1,44 @@
//package com.epmet.enums;
//
//import lombok.Data;
//
///**
// * 操作日志类型枚举
// */
//public enum LogOperationTypeEnum {
// LOGIN("login", "登录"),
// LOGOUT("logout", "退出登录");
//
// private String type;
// private String typeDisplay;
//
// public String getType() {
// return type;
// }
//
// public String getTypeDisplay() {
// return typeDisplay;
// }
//
// LogOperationTypeEnum(String type, String typeDisplay) {
// this.type = type;
// this.typeDisplay = typeDisplay;
// }
//
// public static LogOperationTypeEnum get(String type) {
// for (LogOperationTypeEnum t : LogOperationTypeEnum.values()) {
// if (t.type.equals(type)) {
// return t;
// }
// }
// return null;
// }
//
// public static String getDisplay(String type) {
// LogOperationTypeEnum object = get(type);
// if (object == null) {
// return null;
// }
// return object.typeDisplay;
// }
//}

47
epmet-admin/epmet-admin-server/pom.xml

@ -54,6 +54,31 @@
<artifactId>feign-httpclient</artifactId>
<version>10.3.0</version>
</dependency>
<!--rocketmq-->
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-commons-rocketmq</artifactId>
<version>2.0.0</version>
</dependency>
<!--user-client-->
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-user-client</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-message-client</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-auth-client</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
<build>
@ -109,6 +134,10 @@
<nacos.ip/>
<spring.flyway.enabled>false</spring.flyway.enabled>
<!--rocketmq-->
<rocketmq.nameserver>192.168.1.130:9876;192.168.1.132:9876</rocketmq.nameserver>
<rocketmq.producer.group>epmet_message</rocketmq.producer.group>
</properties>
</profile>
<profile>
@ -122,14 +151,14 @@
<!-- 数据库配置-->
<spring.datasource.druid.url>
<![CDATA[jdbc:mysql://192.168.1.130:3306/epmet_admin?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai]]>
<![CDATA[jdbc:mysql://118.190.150.119:47306/epmet_admin?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai]]>
</spring.datasource.druid.url>
<spring.datasource.druid.username>epmet_admin_user</spring.datasource.druid.username>
<spring.datasource.druid.password>EpmEt-db-UsEr</spring.datasource.druid.password>
<!-- redis配置 -->
<spring.redis.index>0</spring.redis.index>
<spring.redis.host>192.168.1.130</spring.redis.host>
<spring.redis.port>6379</spring.redis.port>
<spring.redis.host>118.190.150.119</spring.redis.host>
<spring.redis.port>47379</spring.redis.port>
<spring.redis.password>123456</spring.redis.password>
<!-- nacos -->
<nacos.register-enabled>false</nacos.register-enabled>
@ -141,6 +170,10 @@
<nacos.ip/>
<spring.flyway.enabled>false</spring.flyway.enabled>
<!--rocketmq-->
<rocketmq.nameserver>192.168.1.130:9876;192.168.1.132:9876</rocketmq.nameserver>
<rocketmq.producer.group>epmet_message</rocketmq.producer.group>
</properties>
</profile>
<profile>
@ -170,6 +203,10 @@
<nacos.ip/>
<spring.flyway.enabled>true</spring.flyway.enabled>
<!--rocketmq-->
<rocketmq.nameserver>192.168.10.161:9876</rocketmq.nameserver>
<rocketmq.producer.group>epmet_message</rocketmq.producer.group>
</properties>
</profile>
<profile>
@ -199,6 +236,10 @@
<nacos.ip/>
<spring.flyway.enabled>true</spring.flyway.enabled>
<!--rocketmq-->
<rocketmq.nameserver>192.168.11.187:9876;192.168.11.184:9876</rocketmq.nameserver>
<rocketmq.producer.group>epmet_message</rocketmq.producer.group>
</properties>
</profile>
</profiles>

4
epmet-admin/epmet-admin-server/src/main/java/com/epmet/AdminApplication.java

@ -10,6 +10,8 @@ package com.epmet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* 管理后台
@ -18,6 +20,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
* @since 1.0.0
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class AdminApplication {
public static void main(String[] args) {

44
epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/LogOperationController.java

@ -0,0 +1,44 @@
package com.epmet.controller;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.LogOperationListFormDTO;
import com.epmet.dto.region.LogOperationResultDTO;
import com.epmet.service.LogOperationService;
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 java.util.ArrayList;
import java.util.List;
@RequestMapping("log/operation")
@RestController
public class LogOperationController {
@Autowired
private LogOperationService logOperationService;
@Autowired
private LoginUserUtil loginUserUtil;
@PostMapping("/list")
public Result<List<LogOperationResultDTO>> listLogOperations(@RequestBody LogOperationListFormDTO input) {
ValidatorUtils.validateEntity(input);
String condition = input.getCondition();
Integer pageNo = input.getPageNo();
Integer pageSize = input.getPageSize();
String customerId = loginUserUtil.getLoginUserCustomerId();
List<LogOperationResultDTO> resultList = logOperationService.listOperationLogs(condition, customerId, pageNo, pageSize);
if (CollectionUtils.isEmpty(resultList)) {
resultList = new ArrayList<>();
}
return new Result<List<LogOperationResultDTO>>().ok(resultList);
}
}

33
epmet-admin/epmet-admin-server/src/main/java/com/epmet/dao/LogOperationDao.java

@ -0,0 +1,33 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* 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.
* <p>
* 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.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.LogOperationEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 操作日指标
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-07
*/
@Mapper
public interface LogOperationDao extends BaseDao<LogOperationEntity> {
}

72
epmet-admin/epmet-admin-server/src/main/java/com/epmet/entity/LogOperationEntity.java

@ -0,0 +1,72 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* 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.
* <p>
* 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.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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-06-07
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("log_operation")
public class LogOperationEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 大类别登录login项目流转project
*/
private String category;
/**
* 类型枚举,小类别登录loginlogout退出shift_project议题转项目等
*/
private String type;
private String typeDisplay;
/**
* 内容
*/
private String content;
/**
* 操作目标ID
*/
private String targetId;
/**
* 操作人ID
*/
private String operatorId;
/**
* 操作时间,该时间不是插入数据的时间而是操作发生的真实时间
*/
private Date operatingTime;
}

68
epmet-admin/epmet-admin-server/src/main/java/com/epmet/mq/listener/RocketMQConsumerRegister.java

@ -0,0 +1,68 @@
package com.epmet.mq.listener;
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.listener.AuthOperationLogListener;
import com.epmet.mq.listener.listener.ProjectOperationLogListener;
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;
@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(nameServer, ConsomerGroupConstants.AUTH_OPERATION_LOG_GROUP, MessageModel.CLUSTERING, TopicConstants.AUTH, "*", new AuthOperationLogListener());
register(nameServer, ConsomerGroupConstants.PROJECT_OPERATION_LOG_GROUP, MessageModel.CLUSTERING, TopicConstants.PROJECT_CHANGED, "*", new ProjectOperationLogListener());
}
} catch (MQClientException e) {
e.printStackTrace();
}
}
public void register(String nameServer, 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);
// 注册回调实现类来处理从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;
}
}

78
epmet-admin/epmet-admin-server/src/main/java/com/epmet/mq/listener/listener/AuthOperationLogListener.java

@ -0,0 +1,78 @@
package com.epmet.mq.listener.listener;
import com.alibaba.fastjson.JSON;
import com.epmet.auth.constants.AuthOperationEnum;
import com.epmet.commons.rocketmq.messages.LoginMQMsg;
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.entity.LogOperationEntity;
import com.epmet.service.LogOperationService;
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.redisson.api.RLock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* @author wxz
* @Description 登录操作日志监听器
* @return
* @date 2021.06.07 16:12
*/
public class AuthOperationLogListener implements MessageListenerConcurrently {
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> 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 tags = messageExt.getTags();
String msg = new String(messageExt.getBody());
logger.info("认证操作日志监听器-收到消息内容:{}", msg);
LoginMQMsg msgObj = JSON.parseObject(msg, LoginMQMsg.class);
LogOperationEntity logEntity = new LogOperationEntity();
logEntity.setCategory(messageExt.getTopic());
logEntity.setType(tags);
logEntity.setTypeDisplay(AuthOperationEnum.getDisplay(tags));
logEntity.setTargetId("");
logEntity.setOperatorId(msgObj.getUserId());
logEntity.setOperatingTime(msgObj.getLoginTime());
logEntity.setContent("成功登录系统");
DistributedLock distributedLock = null;
RLock lock = null;
try {
distributedLock = SpringContextUtils.getBean(DistributedLock.class);
lock = distributedLock.getLock(String.format("lock:auth_operation_log:%s:%s", logEntity.getType(), logEntity.getOperatorId()),
30L, 30L, TimeUnit.SECONDS);
SpringContextUtils.getBean(LogOperationService.class).log(logEntity);
} 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);
}
}
}

100
epmet-admin/epmet-admin-server/src/main/java/com/epmet/mq/listener/listener/ProjectOperationLogListener.java

@ -0,0 +1,100 @@
package com.epmet.mq.listener.listener;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.rocketmq.messages.LoginMQMsg;
import com.epmet.commons.rocketmq.messages.ProjectChangedMQMsg;
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.entity.LogOperationEntity;
import com.epmet.service.LogOperationService;
import org.apache.commons.lang3.StringUtils;
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.redisson.api.RLock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* @author wxz
* @Description 项目操作日志监听器
* @return
* @date 2021.06.08 22.21
*/
public class ProjectOperationLogListener implements MessageListenerConcurrently {
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> 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 tags = messageExt.getTags();
String msg = new String(messageExt.getBody());
logger.info("项目变动操作日志监听器-收到消息内容:{}", msg);
ProjectChangedMQMsg msgObj = JSON.parseObject(msg, ProjectChangedMQMsg.class);
String content = StringUtils.isBlank(msgObj.getOperationBrief()) ? "" : msgObj.getOperationBrief();
LogOperationEntity logEntity = new LogOperationEntity();
logEntity.setCategory(messageExt.getTopic());
logEntity.setType(msgObj.getOperation());
logEntity.setTypeDisplay(getOperationTypeDisplay(msgObj.getOperation()));
logEntity.setTargetId(msgObj.getProjectId());
logEntity.setOperatorId(msgObj.getOperatorId());
logEntity.setOperatingTime(msgObj.getOperatingTime());
logEntity.setContent(content);
DistributedLock distributedLock = null;
RLock lock = null;
try {
distributedLock = SpringContextUtils.getBean(DistributedLock.class);
lock = distributedLock.getLock(String.format("lock:project_operation_log:%s:%s", logEntity.getType(), logEntity.getTargetId()),
30L, 30L, TimeUnit.SECONDS);
SpringContextUtils.getBean(LogOperationService.class).log(logEntity);
} 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);
}
}
private String getOperationTypeDisplay(String type) {
switch (type) {
case "response":
return "项目响应处理";
case "issue_shift_project":
return "议题转项目";
case "close":
return "项目结案";
case "return":
return "项目退回";
case "transfer":
return "项目吹哨";
case "created":
return "项目立项";
default:
return null;
}
}
}

28
epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/LogOperationService.java

@ -0,0 +1,28 @@
package com.epmet.service;
import com.epmet.dto.region.LogOperationResultDTO;
import com.epmet.entity.LogOperationEntity;
import java.util.List;
/**
* 操作日志
*/
public interface LogOperationService {
/**
* @Description 记录日志
* @return
* @author wxz
* @date 2021.06.07 21:56
*/
void log(LogOperationEntity msg);
/**
* @Description 查询操作日志 列表
* @return
* @author wxz
* @date 2021.06.07 21:56
*/
List<LogOperationResultDTO> listOperationLogs(String condition, String customerId, Integer pageNo, Integer pageSize);
}

176
epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/impl/LogOperationServiceImpl.java

@ -0,0 +1,176 @@
package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.epmet.auth.constants.AuthOperationEnum;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dao.LogOperationDao;
import com.epmet.dto.CustomerStaffDTO;
import com.epmet.dto.form.CustomerStaffFormDTO;
import com.epmet.dto.region.LogOperationResultDTO;
import com.epmet.entity.LogOperationEntity;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.service.LogOperationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class LogOperationServiceImpl implements LogOperationService, ResultDataResolver {
@Autowired
private LogOperationDao logOperationDao;
@Autowired
private EpmetUserOpenFeignClient userOpenFeignClient;
@Override
public void log(LogOperationEntity msg) {
LambdaQueryWrapper<LogOperationEntity> w = new LambdaQueryWrapper<>();
w.eq(LogOperationEntity::getType, msg.getType());
w.eq(LogOperationEntity::getTargetId, msg.getTargetId());
w.eq(LogOperationEntity::getOperatorId, msg.getOperatorId());
w.eq(LogOperationEntity::getOperatingTime, msg.getOperatingTime());
Integer existsCount = logOperationDao.selectCount(w);
if (existsCount > 0) {
// 该日志已存在,不做任何操作
return;
}
logOperationDao.insert(msg);
}
@Override
public List<LogOperationResultDTO> listOperationLogs(String condition, String customerId, Integer pageNo, Integer pageSize) {
// 1.条件查询
List<LogOperationResultDTO> logDtos = listByOperatorMobile(condition, customerId, pageNo, pageSize);
if (CollectionUtils.isEmpty(logDtos)) {
logDtos = listByOperatorName(condition, pageNo, pageSize);
}
if (CollectionUtils.isEmpty(logDtos)) {
return new ArrayList<>();
}
// 2.直接分页查询
// 条件查询,排序
LambdaQueryWrapper<LogOperationEntity> w = new LambdaQueryWrapper<>();
w.orderByDesc(LogOperationEntity::getOperatingTime);
IPage<LogOperationEntity> iPage = logOperationDao.selectPage(new Page<>(pageNo, pageSize), w);
List<LogOperationEntity> logEntities = iPage.getRecords();
List<String> userIds = logEntities.stream().map(l -> l.getOperatorId()).collect(Collectors.toList());
return convertLogOperationEntity2DTO(logEntities, getStaffMapByUserIds(userIds));
}
private Map<String, CustomerStaffDTO> getStaffMapByUserIds(List<String> userIds) {
CustomerStaffFormDTO form = new CustomerStaffFormDTO();
form.setUserIds(userIds);
Result<List<CustomerStaffDTO>> result = userOpenFeignClient.list(form);
List<CustomerStaffDTO> staffs = getResultDataOrThrowsException(result, ServiceConstant.EPMET_USER_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "调用user服务发生异常");
HashMap<String, CustomerStaffDTO> staffMap = new HashMap<>();
staffs.forEach(s -> {
staffMap.put(s.getUserId(), s);
});
return staffMap;
}
/**
* 通过操作人手机号查询操作日志列表
*
* @param operatorMobile
* @param customerId
*/
private List<LogOperationResultDTO> listByOperatorMobile(String operatorMobile, String customerId, Integer pageNo, Integer pageSize) {
CustomerStaffFormDTO form = new CustomerStaffFormDTO();
form.setCustomerId(customerId);
form.setMobile(operatorMobile);
Result<List<CustomerStaffDTO>> result = userOpenFeignClient.list(form);
List<CustomerStaffDTO> staffs = getResultDataOrThrowsException(result, ServiceConstant.EPMET_USER_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "调用user服务发生异常");
if (staffs.size() == 0) {
return null;
}
CustomerStaffDTO staff = staffs.get(0);
QueryWrapper<LogOperationEntity> w = new QueryWrapper<>();
w.lambda()
.eq(LogOperationEntity::getOperatorId, staff.getUserId())
.eq(LogOperationEntity::getDelFlag, 0)
.orderByDesc(LogOperationEntity::getOperatingTime);
IPage<LogOperationEntity> iPage = logOperationDao.selectPage(new Page<>(pageNo, pageSize), w);
HashMap<String, CustomerStaffDTO> staffMap = new HashMap<>();
staffMap.put(staff.getUserId(), staff);
return convertLogOperationEntity2DTO(iPage.getRecords(), staffMap);
}
/**
* @Description 通过操作人姓名查询操作日志列表
* @return
* @author wxz
* @date 2021.06.08 11:12
*/
private List<LogOperationResultDTO> listByOperatorName(String operatorName, Integer pageNo, Integer pageSize) {
CustomerStaffFormDTO form = new CustomerStaffFormDTO();
form.setRealName(operatorName);
Result<List<CustomerStaffDTO>> result = userOpenFeignClient.list(form);
List<CustomerStaffDTO> staffs = getResultDataOrThrowsException(result, ServiceConstant.EPMET_USER_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "调用user服务查询工作人员信息发生异常");
List<String> userIds = new ArrayList<>();
HashMap<String, CustomerStaffDTO> staffMap = new HashMap<String, CustomerStaffDTO>();
staffs.forEach(s -> {
staffMap.put(s.getUserId(), s);
userIds.add(s.getUserId());
});
if (CollectionUtils.isEmpty(userIds)) {
return new ArrayList<>();
}
LambdaQueryWrapper<LogOperationEntity> w = new LambdaQueryWrapper<>();
w.in(LogOperationEntity::getOperatorId, userIds);
w.eq(LogOperationEntity::getDelFlag, 0);
w.orderByDesc(LogOperationEntity::getOperatingTime);
IPage<LogOperationEntity> iPage = logOperationDao.selectPage(new Page<>(pageNo, pageSize), w);
return convertLogOperationEntity2DTO(iPage.getRecords(), staffMap);
}
/**
* @Description 将操作日志entity转化为dto列表
* @return
* @author wxz
* @date 2021.06.08 11:12
*/
private List<LogOperationResultDTO> convertLogOperationEntity2DTO(List<LogOperationEntity> logOperationEntities, Map<String, CustomerStaffDTO> staffMap) {
return logOperationEntities.stream().map(l -> {
LogOperationResultDTO ldto = new LogOperationResultDTO();
ldto.setCategory(l.getCategory());
ldto.setContent(l.getContent());
ldto.setOperatingTime(l.getOperatingTime().getTime());
ldto.setOperatorId(l.getOperatorId());
ldto.setTargetId(l.getTargetId());
ldto.setType(l.getType());
ldto.setTypeDisplay(l.getTypeDisplay());
ldto.setOperatorMobile(staffMap.get(l.getOperatorId()).getMobile());
ldto.setOperatorName(staffMap.get(l.getOperatorId()).getRealName());
return ldto;
}).collect(Collectors.toList());
}
}

3
epmet-admin/epmet-admin-server/src/main/resources/bootstrap.yml

@ -134,3 +134,6 @@ shutdown:
graceful:
enable: true #是否开启优雅停机
waitTimeSecs: 30 # 优雅停机等待时间,超过30秒,发出告警
rocketmq:
name-server: @rocketmq.nameserver@

16
epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.3__add_log_ope_table.sql

@ -0,0 +1,16 @@
CREATE TABLE `log_operation` (
`ID` varchar(64) NOT NULL COMMENT '主键ID',
`TYPE` varchar(64) NOT NULL COMMENT '动作类型枚举',
`TYPE_DISPLAY` varchar(64) NOT NULL COMMENT '操作类型中文展示',
`CONTENT` varchar(512) NOT NULL COMMENT '内容',
`CATEGORY` varchar(64) NOT NULL COMMENT '操作类型大类。例如login和logout都属于login大类。项目立项,项目流转,项目结案都属于项目大类',
`TARGET_ID` varchar(64) NOT NULL COMMENT '操作目标ID',
`OPERATOR_ID` varchar(64) NOT NULL COMMENT '操作人ID',
`OPERATING_TIME` datetime NOT NULL COMMENT '操作时间,该时间不是插入数据的时间,而是操作发生的真实时间',
`DEL_FLAG` int(11) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
`REVISION` int(11) NOT 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 '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日指标'

24
epmet-admin/epmet-admin-server/src/main/resources/mapper/LogOperationDao.xml

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.LogOperationDao">
<resultMap type="com.epmet.entity.LogOperationEntity" id="logOperationMap">
<result property="id" column="ID"/>
<result property="type" column="TYPE"/>
<result property="typeDisplay" column="TYPE_DISPLAY"/>
<result property="content" column="CONTENT"/>
<result property="targetId" column="TARGET_ID"/>
<result property="category" column="CATEGORY"/>
<result property="operatorId" column="OPERATOR_ID"/>
<result property="operatingTime" column="OPERATING_TIME"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
</mapper>

14
epmet-auth/epmet-auth-client/pom.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>epmet-auth</artifactId>
<groupId>com.epmet</groupId>
<version>2.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>epmet-auth-client</artifactId>
</project>

9
epmet-auth/epmet-auth-client/src/main/java/com/epmet/auth/constants/AuthOperationConstants.java

@ -0,0 +1,9 @@
package com.epmet.auth.constants;
/**
* 认证操作常量
*/
public interface AuthOperationConstants {
String LOGIN = "login";
String LOGOUT = "logout";
}

43
epmet-auth/epmet-auth-client/src/main/java/com/epmet/auth/constants/AuthOperationEnum.java

@ -0,0 +1,43 @@
package com.epmet.auth.constants;
/**
* 认证操作枚举
*/
public enum AuthOperationEnum {
LOGIN(AuthOperationConstants.LOGIN, "登录"),
LOGOUT(AuthOperationConstants.LOGOUT, "退出");
private String operationType;
private String operationDisplay;
AuthOperationEnum(String operationType, String operationDisplay) {
this.operationType = operationType;
this.operationDisplay = operationDisplay;
}
public String getOperationType() {
return operationType;
}
public String getOperationDisplay() {
return operationDisplay;
}
public static AuthOperationEnum get(String operationType) {
for (AuthOperationEnum e : AuthOperationEnum.values()) {
if (e.getOperationType().equals(operationType)) {
return e;
}
}
return null;
}
public static String getDisplay(String operationType) {
AuthOperationEnum obj = get(operationType);
if (obj == null) {
return null;
}
return obj.getOperationDisplay();
}
}

3
epmet-auth/pom.xml

@ -3,6 +3,9 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.72</version>
<modules>
<module>epmet-auth-client</module>
</modules>
<parent>
<groupId>com.epmet</groupId>
<artifactId>epmet-cloud</artifactId>

3
epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java

@ -1,7 +1,10 @@
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.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.UserDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.StaffOrgsResultDTO;
import com.epmet.dto.result.UserTokenResultDTO;

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

@ -5,18 +5,23 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.util.crypt.WxMaCryptUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.epmet.auth.constants.AuthOperationConstants;
import com.epmet.common.token.constant.LoginConstant;
import com.epmet.commons.rocketmq.messages.LoginMQMsg;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.security.dto.GovTokenDto;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.password.PasswordUtils;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.*;
import com.epmet.commons.tools.validator.PhoneValidatorUtils;
import com.epmet.constant.AuthHttpUrlConstant;
import com.epmet.constant.SmsTemplateConstant;
import com.epmet.constant.SystemMessageType;
import com.epmet.dto.*;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
@ -29,6 +34,7 @@ import com.epmet.redis.CaptchaRedis;
import com.epmet.service.ThirdLoginService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -44,7 +50,7 @@ import java.util.stream.Collectors;
*/
@Slf4j
@Service
public class ThirdLoginServiceImpl implements ThirdLoginService {
public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResolver {
private static final Logger logger = LoggerFactory.getLogger(ThirdLoginServiceImpl.class);
@Autowired
@ -61,6 +67,10 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
private GovOrgOpenFeignClient govOrgOpenFeignClient;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Autowired
private EpmetMessageOpenFeignClient messageOpenFeignClient;
@Autowired
private LoginUserUtil loginUserUtil;
/**
* @param formDTO
@ -170,8 +180,17 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
this.saveLatestGovTokenDto(staffLatestAgencyResultDTO, userWechatDTO, token);
UserTokenResultDTO userTokenResultDTO = new UserTokenResultDTO();
userTokenResultDTO.setToken(token);
return userTokenResultDTO;
//7.发送登录事件
try {
sendLoginEvent(staffLatestAgencyResultDTO.getStaffId(), formDTO.getAppId());
} catch (RenException e) {
log.error(e.getInternalMsg());
} catch (Exception e) {
log.error("【工作端workLogin登录】发送登录事件失败,程序继续执行。错误信息");
}
return userTokenResultDTO;
}
/**
@ -392,6 +411,15 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
UserTokenResultDTO userTokenResultDTO = new UserTokenResultDTO();
userTokenResultDTO.setToken(token);
//6.发送登录事件
try {
sendLoginEvent(customerStaff.getUserId(), formDTO.getAppId());
} catch (RenException e) {
log.error(e.getInternalMsg());
} catch (Exception e) {
log.error("【工作端enterOrg登录】发送登录事件失败,程序继续执行。错误信息");
}
return userTokenResultDTO;
}
@ -635,4 +663,24 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
logger.info(String.format("发送短信验证码成功,手机号[%s]", formDTO.getMobile()));
}
/**
* @Description 发送登录事件
* @return
* @author wxz
* @date 2021.06.08 15:27
*/
private void sendLoginEvent(String userId, String appId) {
LoginMQMsg loginMQMsg = new LoginMQMsg();
loginMQMsg.setUserId(userId);
loginMQMsg.setLoginTime(new Date());
loginMQMsg.setAppId(appId);
SystemMsgFormDTO form = new SystemMsgFormDTO();
form.setMessageType(AuthOperationConstants.LOGIN);
form.setContent(loginMQMsg);
messageOpenFeignClient.sendSystemMsgByMQ(form);
//getResultDataOrThrowsException(result, ServiceConstant.EPMET_MESSAGE_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "调用Message服务,发送登录事件到MQ失败");
}
}

10
epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/ConsomerGroupConstants.java

@ -31,4 +31,14 @@ public interface ConsomerGroupConstants {
*/
String GROUP_ACHIEVEMENT_COMPONENTS_GROUP = "group_achievement_components_group";
/**
* 认证操作日志消费组
*/
String AUTH_OPERATION_LOG_GROUP = "auth_operation_log_group";
/**
* 项目操作日志小肥猪
*/
String PROJECT_OPERATION_LOG_GROUP = "project_operation_log_group";
}

8
epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/TopicConstants.java

@ -1,5 +1,8 @@
package com.epmet.commons.rocketmq.constants;
/**
* 话题列表常量其他服务要想发送消息到mq则应当引入epmet-commons-rocketmq模块并且使用此常量
*/
public interface TopicConstants {
/**
* 初始化客户
@ -13,4 +16,9 @@ public interface TopicConstants {
* 小组成就
*/
String GROUP_ACHIEVEMENT = "group_achievement";
/**
* 认证
*/
String AUTH = "auth";
}

20
epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/messages/LoginMQMsg.java

@ -0,0 +1,20 @@
package com.epmet.commons.rocketmq.messages;
import lombok.Data;
import java.util.Date;
@Data
public class LoginMQMsg {
/**
* 谁登录
*/
private String userId;
private String appId;
/**
* 什么时间登录的
*/
private Date loginTime;
}

11
epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/messages/ProjectChangedMQMsg.java

@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* desc项目变动通知消息实体类
@ -18,4 +19,14 @@ public class ProjectChangedMQMsg implements Serializable {
* 操作类型 议题转项目issue_shift_project, 处理response, 结案close退回return部门流转transfer立项created
*/
private String operation;
// ============> new
private String projectId;
private String operatorId;
private Date operatingTime;
/**
* 操作简介
*/
private String operationBrief;
}

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

@ -0,0 +1,50 @@
package com.epmet.commons.tools.feign;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.Result;
import org.apache.commons.lang3.StringUtils;
/**
* Feign请求结果解析器
*/
public interface ResultDataResolver {
/**
* @Description 获取Result种的data如果失败(返回result为null或者result.success为false)那么返回null
* @return
* @author wxz
* @date 2021.06.07 22:45
*/
//default <R> R tryGetResultData(Result<R> result, String targetServiceName) {
// Logger logger = LoggerFactory.getLogger(ResultDataResolver.class);
// if (result == null) {
// logger.error("调用{}服务发生错误,返回Result为null", targetServiceName);
// return null;
// }
// if (!result.success()) {
// logger.error("调用{}服务发生错误,错误信息:{}", targetServiceName, result.getInternalMsg());
// return null;
// }
// return result.getData();
//}
/**
* @Description 获取Result种的data如果失败(返回result为null或者result.success为false)那么抛出异常
* @return
* @author wxz
* @date 2021.06.07 22:45
*/
default <R> R getResultDataOrThrowsException(Result<R> result, String targetServiceName, Integer errorCode, String errorInternalMsg) {
if (result == null) {
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), "调用{}服务发生错误,返回Result为null", targetServiceName);
}
if (!result.success()) {
Integer finalErrorCode = errorCode == null ? result.getCode() : errorCode;
String finalErrorInternalMsg = StringUtils.isBlank(errorInternalMsg) ? result.getInternalMsg() : errorInternalMsg;
throw new RenException(finalErrorCode, finalErrorInternalMsg);
}
return result.getData();
}
}

1
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/user/LoginUserUtil.java

@ -6,6 +6,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.List;
/**

7
epmet-gateway/pom.xml

@ -255,10 +255,11 @@
<nacos.ip></nacos.ip>
<!-- gateway routes -->
<!-- 1、认证服务 -->
<!-- <gateway.routes.epmet-auth-server.uri>http://localhost:8081</gateway.routes.epmet-auth-server.uri>-->
<gateway.routes.epmet-auth-server.uri>lb://epmet-auth-server</gateway.routes.epmet-auth-server.uri>
<gateway.routes.epmet-auth-server.uri>http://localhost:8081</gateway.routes.epmet-auth-server.uri>
<!--<gateway.routes.epmet-auth-server.uri>lb://epmet-auth-server</gateway.routes.epmet-auth-server.uri>-->
<!-- 2、Admin服务 -->
<gateway.routes.epmet-admin-server.uri>lb://epmet-admin-server</gateway.routes.epmet-admin-server.uri>
<gateway.routes.epmet-admin-server.uri>http://localhost:8082</gateway.routes.epmet-admin-server.uri>
<!--<gateway.routes.epmet-admin-server.uri>lb://epmet-admin-server</gateway.routes.epmet-admin-server.uri>-->
<!-- 4、OSS服务 -->
<gateway.routes.epmet-oss-server.uri>lb://epmet-oss-server</gateway.routes.epmet-oss-server.uri>
<!-- 5、消息服务 -->

2
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/SystemMessageType.java

@ -1,7 +1,7 @@
package com.epmet.constant;
/**
* 系统消息类型
* 系统消息类型可以理解为动作约等于rocket mq中的tag
*/
public interface SystemMessageType {

2
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/send/SendMqMsgUtil.java

@ -37,7 +37,7 @@ public class SendMqMsgUtil {
}
/**
* desc: 发送小组成就消息,计算小组成就
* desc: 发送项目变动事件消息
*
* @param msgContent
* @return boolean

6
epmet-module/epmet-message/epmet-message-server/pom.xml

@ -125,6 +125,12 @@
<artifactId>epmet-commons-rocketmq</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-auth-client</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
<build>

10
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SystemMessageServiceImpl.java

@ -1,6 +1,8 @@
package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.auth.constants.AuthOperationConstants;
import com.epmet.auth.constants.AuthOperationEnum;
import com.epmet.commons.rocketmq.constants.TopicConstants;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.ExceptionUtils;
@ -43,7 +45,7 @@ public class SystemMessageServiceImpl implements SystemMessageService {
//发送mq消息
try {
Message meMessage = new Message(getTopicByMsgType(messageType), contentStr.getBytes(RemotingHelper.DEFAULT_CHARSET));
Message meMessage = new Message(getTopicByMsgType(messageType), messageType, contentStr.getBytes(RemotingHelper.DEFAULT_CHARSET));
rocketMQTemplate.getProducer().send(meMessage);
} catch (Exception e) {
String errorStackTrace = ExceptionUtils.getErrorStackTrace(e);
@ -70,6 +72,12 @@ public class SystemMessageServiceImpl implements SystemMessageService {
case SystemMessageType.GROUP_ACHIEVEMENT:
topic = TopicConstants.GROUP_ACHIEVEMENT;
break;
case AuthOperationConstants.LOGIN:
topic = TopicConstants.AUTH;
break;
case AuthOperationConstants.LOGOUT:
topic = TopicConstants.AUTH;
break;
}
return topic;
}

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

@ -125,6 +125,8 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
private IssueProjectTagDictService issueProjectTagDictService;
@Autowired
private IssueVoteDetailDao issueVoteDetailDao;
@Autowired
private EpmetMessageOpenFeignClient messageOpenFeignClient;
@Value("${openapi.scan.server.url}")
@ -1041,6 +1043,9 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
if(!resiGroupOpenFeignClient.sendEvent(eventParam).success()){
logger.warn("com.epmet.service.impl.IssueServiceImpl.shiftProjectV2,话题被转为项目积分事件发送失败,参数:{}", JSON.toJSONString(formDTO));
}
//8.记录日志
//SendMqMsgUtil.build().openFeignClient(messageOpenFeignClient).sendProjectChangedMqMsg();
}
/**

33
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectProcessServiceImpl.java

@ -388,8 +388,15 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessDao
logger.error("项目流转,发送手机短信失败" + JSON.toJSONString(result));
}
//项目实时统计消息
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(staffEntity.getCustomerId(), ProjectConstant.OPERATION_TRANSFER);
//生成消息内容,发送mq事件
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(staffEntity.getCustomerId(),
ProjectConstant.OPERATION_TRANSFER,
formDTO.getProjectId(),
staffEntity.getStaffId(),
new Date(),
getProjectTransferMsgContent(formDTO.getProjectId(), staffEntity.getStaffId(), processEntity.getDepartmentName()));
boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(msg);
if (!msgResult) {
log.error("项目实时统计消息发送失败");
@ -397,6 +404,21 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessDao
}
/**
* @Description 生成mq消息内容
* @return
* @author wxz
* @date 2021.06.09 09:15
*/
private String getProjectTransferMsgContent( String projectId, String operatorId, String departmentName) {
CustomerStaffDTO form = new CustomerStaffDTO();
form.setUserId(operatorId);
Result<CustomerStaffDTO> processStaff = epmetUserFeignClient.getCustomerStaffInfoByUserId(form);
ProjectEntity projectEntity = projectService.selectById(projectId);
return String.format("将项目\"%s\"吹哨给%s%s处理", projectEntity.getTitle(), departmentName, processStaff.getData().getRealName());
}
/**
* @Description 项目流转给流转工作人员推送消息
* @author sun
@ -743,7 +765,12 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessDao
}
//项目实时统计消息
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(staffEntity.getCustomerId(), ProjectConstant.OPERATION_TRANSFER);
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(staffEntity.getCustomerId(),
ProjectConstant.OPERATION_TRANSFER,
formDTO.getProjectId(),
staffEntity.getStaffId(),
new Date(),
getProjectTransferMsgContent(formDTO.getProjectId(), staffEntity.getStaffId(), processEntity.getDepartmentName()));
boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(msg);
if (!msgResult) {
log.error("项目实时统计消息发送失败");

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

@ -550,13 +550,30 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
}
//项目实时统计消息
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(projectEntity.getCustomerId(), ProjectConstant.OPERATION_CLOSE);
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(projectEntity.getCustomerId(),
ProjectConstant.OPERATION_CLOSE,
fromDTO.getProjectId(),
fromDTO.getUserId(),
new Date(),
getProjectCloseBrief(fromDTO.getProjectId())
);
boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(msg);
if (!msgResult) {
log.error("项目实时统计消息发送失败");
}
}
/**
* @Description 项目结案消息简介生成
* @return
* @author wxz
* @date 2021.06.09 09:30
*/
private String getProjectCloseBrief(String projectId) {
ProjectEntity project = baseDao.selectById(projectId);
return String.format("将项目\"%s\"结案", project.getTitle());
}
/**
* 项目结案
*
@ -710,7 +727,13 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
}
//项目实时统计消息
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(projectEntity.getCustomerId(), ProjectConstant.OPERATION_CLOSE);
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(projectEntity.getCustomerId(),
ProjectConstant.OPERATION_CLOSE,
fromDTO.getProjectId(),
fromDTO.getUserId(),
new Date(),
getProjectCloseBrief(fromDTO.getProjectId()));
boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(msg);
if (!msgResult) {
log.error("项目实时统计消息发送失败");
@ -883,13 +906,30 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
}
//项目实时统计消息
ProjectChangedMQMsg mqMsg = new ProjectChangedMQMsg(projectStaff.getCustomerId(), ProjectConstant.OPERATION_RETURN);
ProjectChangedMQMsg mqMsg = new ProjectChangedMQMsg(projectStaff.getCustomerId(),
ProjectConstant.OPERATION_RETURN,
fromDTO.getProjectId(),
fromDTO.getUserId(),
new Date(),
getProjectReturnMsgbrief(fromDTO.getProjectId()));
boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(mqMsg);
if (!msgResult) {
log.error("项目实时统计消息发送失败");
}
}
/**
* @Description 项目退回消息内容生成
* @return
* @author wxz
* @date 2021.06.09 09:34
*/
private String getProjectReturnMsgbrief(String projectId) {
ProjectEntity project = baseDao.selectById(projectId);
return String.format("将项目\"%s\"退回", project.getTitle());
}
@Override
public List<ShiftProjectResultDTO> getProjectByIssue(ShiftProjectsFromDTO fromDTO) {
List<ShiftProjectResultDTO> resultList = new ArrayList<>();
@ -1168,8 +1208,15 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
logger.error("项目吹哨,发送手机短信失败" + JSON.toJSONString(result));
}
String mqMsgBrief = String.format("将议题\"%s\"转为项目", formDTO.getIssueDTO().getIssueTitle());
//项目实时统计消息
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(issueDTO.getCustomerId(), ProjectConstant.OPERATION_ISSUE_SHIFT_PROJECT);
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(issueDTO.getCustomerId(),
ProjectConstant.OPERATION_ISSUE_SHIFT_PROJECT,
projectEntity.getId(),
formDTO.getStaffId(),
new Date(),
mqMsgBrief);
boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(msg);
if (!msgResult) {
log.error("项目实时统计消息发送失败");
@ -1178,7 +1225,6 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
return issueProjectResultDTO;
}
@Override
public void response(ProjectResponseFormDTO formDTO) {
//公开回复内容审核
@ -1248,7 +1294,9 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
}
//项目实时统计消息
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(projectStaff.getCustomerId(), ProjectConstant.OPERATION_RESPONSES);
String mqMsgBrief = String.format("响应处理了\"%s\"的项目", projectEntity.getTitle());
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(projectStaff.getCustomerId(), ProjectConstant.OPERATION_RESPONSES,
formDTO.getProjectId(), formDTO.getUserId(), new Date(), mqMsgBrief);
boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(msg);
if (!msgResult) {
log.error("项目实时统计消息发送失败");
@ -2016,7 +2064,9 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
}
//项目实时统计消息
ProjectChangedMQMsg mqMsg = new ProjectChangedMQMsg(projectEntity.getCustomerId(), ProjectConstant.OPERATION_RETURN);
ProjectChangedMQMsg mqMsg = new ProjectChangedMQMsg(projectEntity.getCustomerId(), ProjectConstant.OPERATION_RETURN,
fromDTO.getProjectId(), fromDTO.getUserId(), new Date(), getProjectReturnMsgbrief(fromDTO.getProjectId())
);
boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(mqMsg);
if (!msgResult) {
log.error("项目实时统计消息发送失败");
@ -2103,7 +2153,9 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
}
//项目实时统计消息
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(projectStaff.getCustomerId(), ProjectConstant.OPERATION_RESPONSES);
String mqMsgBrief = String.format("响应处理了\"%s\"的项目", projectEntity.getTitle());
ProjectChangedMQMsg msg = new ProjectChangedMQMsg(projectStaff.getCustomerId(), ProjectConstant.OPERATION_RESPONSES,
formDTO.getProjectId(), formDTO.getUserId(), new Date(), mqMsgBrief);
boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(msg);
if (!msgResult) {
log.error("项目实时统计消息发送失败");

7
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java

@ -509,7 +509,12 @@ public class ProjectTraceServiceImpl<ProjectTagService> implements ProjectTraceS
}
//项目实时统计消息
ProjectChangedMQMsg mqMsg = new ProjectChangedMQMsg(projectEntity.getCustomerId(), ProjectConstant.OPERATION_CREATED);
String mqMsgBrief = String.format("创建了\"%s\"的项目", formDTO.getTitle());
ProjectChangedMQMsg mqMsg = new ProjectChangedMQMsg(projectEntity.getCustomerId(), ProjectConstant.OPERATION_CREATED,
projectEntity.getId(),
formDTO.getUserId(),
new Date(),
mqMsgBrief);
boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(mqMsg);
if (!msgResult) {
log.error("项目实时统计消息发送失败");

19
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/CustomerStaffFormDTO.java

@ -4,6 +4,7 @@ import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
/**
* @Description 根据手机号+客户id获取工作人员基本信息
@ -13,9 +14,23 @@ import java.io.Serializable;
@Data
public class CustomerStaffFormDTO implements Serializable {
private static final long serialVersionUID = 7619815083427853431L;
@NotBlank(message = "手机号不能为空")
// 根据手机号+客户id获取工作人员基本信息
public interface GetCustomerStaffInfo {}
@NotBlank(message = "手机号不能为空", groups = { GetCustomerStaffInfo.class })
private String mobile;
@NotBlank(message = "客户id不能为空")
@NotBlank(message = "客户id不能为空", groups = { GetCustomerStaffInfo.class })
private String customerId;
/**
* 姓名
*/
private String realName;
/**
* 用户id集合
*/
private List<String> userIds;
}

24
epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java

@ -21,7 +21,7 @@ import java.util.Map;
* @author yinzuomei@elink-cn.com
* @date 2020/6/4 13:09
*/
//@FeignClient(name = ServiceConstant.EPMET_USER_SERVER, fallback = EpmetUserOpenFeignClientFallback.class, url = "localhost:8087")
//@FeignClient(name = ServiceConstant.EPMET_USER_SERVER, fallback = EpmetUserOpenFeignClientFallback.class, url = "http://127.0.0.1:8087")
@FeignClient(name = ServiceConstant.EPMET_USER_SERVER, fallback = EpmetUserOpenFeignClientFallback.class)
public interface EpmetUserOpenFeignClient {
@ -224,7 +224,7 @@ public interface EpmetUserOpenFeignClient {
* @Author sun
* @Description 根据客户ID手机号查询政府端工作人员基本信息校验用户是否存在
**/
@GetMapping(value = "epmetuser/customerstaff/getCustsomerStaffByIdAndPhone")
@GetMapping(value = "/epmetuser/customerstaff/getCustsomerStaffByIdAndPhone")
Result<List<CustomerStaffDTO>> getCustsomerStaffByIdAndPhone(@RequestBody ThirdCustomerStaffFormDTO formDTO);
/**
@ -530,4 +530,24 @@ public interface EpmetUserOpenFeignClient {
*/
@PostMapping("/epmetuser/badge/userbadges")
Result<List<UserBadgesResultDTO>> userBadges(@RequestBody UserBadgesFormDTO formDTO);
/**
* 根据用户ID获取工作人员基本信息
*
* @param formDTO
* @return com.epmet.commons.tools.utils.Result<com.epmet.dto.CustomerStaffDTO>
* @author zhaoqifeng
* @date 2020/4/22 10:05
**/
@PostMapping(value = "/epmetuser/customerstaff/getstaffinfobyuserid")
Result<CustomerStaffDTO> getCustomerStaffInfoByUserId(@RequestBody CustomerStaffDTO formDTO);
/**
* @Description 通用批量查询
* @return
* @author wxz
* @date 2021.06.08 10:54
*/
@PostMapping(value = "/epmetuser/customerstaff/list")
Result<List<CustomerStaffDTO>> list(CustomerStaffFormDTO input);
}

10
epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java

@ -373,4 +373,14 @@ public class EpmetUserOpenFeignClientFallback implements EpmetUserOpenFeignClien
public Result<List<UserBadgesResultDTO>> userBadges(UserBadgesFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "userBadges", formDTO);
}
@Override
public Result<CustomerStaffDTO> getCustomerStaffInfoByUserId(CustomerStaffDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getCustomerStaffInfoByUserId", formDTO);
}
@Override
public Result<List<CustomerStaffDTO>> list(CustomerStaffFormDTO input) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "list", input);
}
}

23
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java

@ -20,6 +20,7 @@ package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
@ -32,10 +33,12 @@ import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.excel.CustomerStaffExcel;
import com.epmet.service.CustomerStaffService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Map;
@ -53,6 +56,9 @@ public class CustomerStaffController {
@Autowired
private CustomerStaffService customerStaffService;
@Autowired
private LoginUserUtil loginUserUtil;
@GetMapping("page")
public Result<PageData<CustomerStaffDTO>> page(@RequestParam Map<String, Object> params) {
PageData<CustomerStaffDTO> page = customerStaffService.page(params);
@ -116,7 +122,7 @@ public class CustomerStaffController {
**/
@PostMapping(value = "getcustomerstaffinfo")
public Result<CustomerStaffDTO> getCustomerStaffInfo(@RequestBody CustomerStaffFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO);
ValidatorUtils.validateEntity(formDTO, CustomerStaffFormDTO.GetCustomerStaffInfo.class);
return customerStaffService.getCustomerStaffInfo(formDTO);
}
@ -410,4 +416,19 @@ public class CustomerStaffController {
return new Result<BasicInfoResultDTO>().ok(customerStaffService.getStaffBasicInfo(fromDTO));
}
/**
* @Description 通用列表查询可以指定customerId如果指定了则使用指定的如果未指定则使用当前登录用户的customerId
* @return
* @author wxz
* @date 2021.06.08 10:54
*/
@PostMapping("list")
public Result<List<CustomerStaffDTO>> list(@RequestBody CustomerStaffFormDTO input) {
String customerId = StringUtils.isBlank(input.getCustomerId()) ? loginUserUtil.getLoginUserCustomerId() : input.getCustomerId();
List<CustomerStaffDTO> staffs = customerStaffService.list(customerId, input.getRealName(), input.getMobile(), input.getUserIds());
return new Result<List<CustomerStaffDTO>>().ok(staffs);
}
}

8
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/CustomerStaffDao.java

@ -197,4 +197,12 @@ public interface CustomerStaffDao extends BaseDao<CustomerStaffEntity> {
* @return
*/
BasicInfoResultDTO getStaffBasicInfo(StaffBasicInfoFromDTO fromDTO);
/**
* 通用列表查询
* @param customerId
* @param realName
* @return
*/
List<CustomerStaffDTO> listDTOS(@Param("customerId") String customerId, @Param("realName") String realName, @Param("mobile") String mobile, @Param("userIds") List<String> userIds);
}

8
epmet-user/epmet-user-server/src/main/java/com/epmet/service/CustomerStaffService.java

@ -321,4 +321,12 @@ public interface CustomerStaffService extends BaseService<CustomerStaffEntity> {
* @return
*/
BasicInfoResultDTO getStaffBasicInfo(StaffBasicInfoFromDTO fromDTO);
/**
* @Description 根据姓名查询工作人员
* @return
* @author wxz
* @date 2021.06.08 10:52
*/
List<CustomerStaffDTO> list(String customerId, String realName, String mobile, List<String> ids);
}

6
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerStaffServiceImpl.java

@ -18,6 +18,7 @@
package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.entity.DataScope;
@ -56,6 +57,7 @@ import com.epmet.service.GovStaffRoleService;
import com.epmet.service.StaffRoleService;
import com.epmet.service.UserService;
import com.epmet.util.ModuleConstant;
import kotlin.jvm.internal.Lambda;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
@ -699,4 +701,8 @@ public class CustomerStaffServiceImpl extends BaseServiceImpl<CustomerStaffDao,
return baseDao.getStaffBasicInfo(fromDTO);
}
@Override
public List<CustomerStaffDTO> list(String customerId, String realName, String mobile, List<String> userIds) {
return baseDao.listDTOS(customerId, realName, mobile, userIds);
}
}

42
epmet-user/epmet-user-server/src/main/resources/mapper/CustomerStaffDao.xml

@ -357,4 +357,46 @@
AND user_id = #{staffId}
LIMIT 1
</select>
<select id="listDTOS" resultType="com.epmet.dto.CustomerStaffDTO">
select id,
customer_id,
user_id,
real_name,
gender,
email,
mobile,
address,
del_flag,
revision,
created_by,
created_time,
updated_by,
updated_time,
work_type,
head_photo,
active_flag,
active_time,
enable_flag
from customer_staff
<where>
<if test="realName != null and realName != ''">
REAL_NAME = #{realName}
</if>
<if test="customerId != null and customerId != ''">
and CUSTOMER_ID = #{customerId}
</if>
<if test="mobile != null and mobile != ''">
and MOBILE = #{mobile}
</if>
<if test="userIds != null and userIds.size() > 0">
and user_id in
<foreach collection="userIds" item="userId" separator="," open="(" close=")">
#{userId}
</foreach>
</if>
and DEL_FLAG = 0
</where>
</select>
</mapper>

Loading…
Cancel
Save