Browse Source

Merge branches 'dev_bugfix_ljj' and 'master' of http://121.42.41.42:7070/r/epmet-cloud into dev_bugfix_ljj

 Conflicts:
	epmet-user/epmet-user-server/src/main/resources/excel/ic_nat.xlsx
master
yinzuomei 3 years ago
parent
commit
181b179120
  1. 21
      epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/ComplementLogOperationDTO.java
  2. 20
      epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/form/LogOperationListFormDTO.java
  3. 5
      epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/region/LogOperationResultDTO.java
  4. 25
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/LogOperationController.java
  5. 20
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/dao/LogOperationDao.java
  6. 2
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/entity/LogOperationEntity.java
  7. 2
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/mq/listener/RocketMQConsumerRegister.java
  8. 122
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/mq/listener/listener/CheckAndExportOperationLogListener.java
  9. 21
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/LogOperationService.java
  10. 75
      epmet-admin/epmet-admin-server/src/main/java/com/epmet/service/impl/LogOperationServiceImpl.java
  11. 2
      epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.24__alter_log_operation.sql
  12. 3
      epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.25__alter_log_operation2.sql
  13. 62
      epmet-admin/epmet-admin-server/src/main/resources/mapper/LogOperationDao.xml
  14. 17
      epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java
  15. 2
      epmet-auth/src/main/java/com/epmet/dto/result/ResiDingAppLoginResDTO.java
  16. 7
      epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java
  17. 1
      epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java
  18. 6
      epmet-auth/src/main/java/com/epmet/service/impl/IcLoginServiceImpl.java
  19. 31
      epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java
  20. 5
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/ConsomerGroupConstants.java
  21. 5
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/constants/TopicConstants.java
  22. 33
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/messages/CheckMQMsg.java
  23. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java
  24. 38
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/commondto/IcEventComDTO.java
  25. 65
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/commondto/TopicInfoComDTO.java
  26. 28
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/YtDataSyncResDTO.java
  27. 80
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/YtHscyResDTO.java
  28. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/YtHsjcResDTO.java
  29. 4
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  30. 4
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonUserFeignClient.java
  31. 6
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonUserFeignClientFallback.java
  32. 12
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  33. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerOrgRedis.java
  34. 38
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerResiUserRedis.java
  35. 29
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerStaffRedis.java
  36. 133
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/bean/CustomerStaffInfoDTOCache.java
  37. 15
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/bean/HouseInfoCache.java
  38. 539
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/bean/IcResiUserInfoCache.java
  39. 20
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ScanContentUtils.java
  40. 200
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/YtHsResUtils.java
  41. 79
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/OrgData.java
  42. 199
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/SM4UtilsForYanTai.java
  43. 184
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/TestMs4.java
  44. 50
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/UserData.java
  45. 282
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/YantaiApi.java
  46. 35
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/YantaiSSOUser.java
  47. 4
      epmet-gateway/src/main/resources/bootstrap.yml
  48. 2
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govissue/IssueApplicationDTO.java
  49. 6
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govissue/result/IssueListResultDTO.java
  50. 5
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/StaffDetailV2FormDTO.java
  51. 12
      epmet-module/data-aggregator/data-aggregator-server/pom.xml
  52. 14
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/EpmetUserController.java
  53. 11
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/IcResiUserDao.java
  54. 3
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govissue/IssueApplicationEntity.java
  55. 13
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java
  56. 150
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java
  57. 7
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java
  58. 43
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/IcResiUserDao.xml
  59. 14
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govissue/IssueApplicationDao.xml
  60. 6
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govissue/IssueDao.xml
  61. 2
      epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/AreaCodeServiceImpl.java
  62. 1
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java
  63. 1
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcUserDemandRecController.java
  64. 1
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcUserDemandRecService.java
  65. 66
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcUserDemandRecServiceImpl.java
  66. 6
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/NatInfoScanTask.java
  67. 36
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/YTUserAndOrgPullTask.java
  68. 6
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/SystemMessageType.java
  69. 3
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SystemMessageServiceImpl.java
  70. 3
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointRuleServiceImpl.java
  71. 139
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/DataSyncOrgDataDTO.java
  72. 124
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/DataSyncUserDataDTO.java
  73. 36
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/yantai/YtSyncStaffIdFormDTO.java
  74. 36
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/yantai/YtUserPageFormDTO.java
  75. 23
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/yantai/DataSyncOrgDataDTO.java
  76. 56
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/yantai/YtUserPageResDTO.java
  77. 4
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java
  78. 20
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/ThirdOpenFeignClient.java
  79. 5
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdOpenFeignClientFallback.java
  80. 10
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/ThirdOpenFeignClientFallback.java
  81. 12
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/YanTaiConstant.java
  82. 84
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/DataSyncUserAndOrgController.java
  83. 41
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/DataSyncUserAndOrgService.java
  84. 180
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/DataSyncUserAndOrgServiceImpl.java
  85. 199
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/SM4UtilsForYanTai.java
  86. 27
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/yantai/DataSyncOrgDataDao.java
  87. 41
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/yantai/DataSyncUserDataDao.java
  88. 106
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/yantai/DataSyncOrgDataEntity.java
  89. 91
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/yantai/DataSyncUserDataEntity.java
  90. 78
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/DataSyncOrgDataService.java
  91. 78
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/DataSyncUserDataService.java
  92. 83
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/DataSyncOrgDataServiceImpl.java
  93. 83
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/DataSyncUserDataServiceImpl.java
  94. 5
      epmet-module/epmet-third/epmet-third-server/src/main/resources/logback-spring.xml
  95. 55
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/yantai/DataSyncOrgDataDao.xml
  96. 90
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/yantai/DataSyncUserDataDao.xml
  97. 2
      epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/GovMenuServiceImpl.java
  98. 14
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/IssueApplicationDTO.java
  99. 116
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/IssueAttachmentDTO.java
  100. 34
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/IssueDTO.java

21
epmet-admin/epmet-admin-client/src/main/java/com/epmet/dto/ComplementLogOperationDTO.java

@ -0,0 +1,21 @@
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2022/10/20 14:21
* @DESC
*/
@Data
public class ComplementLogOperationDTO implements Serializable {
private static final long serialVersionUID = 7563210356670229204L;
private String staffId;
private String orgId;
private String orgIdPath;
}

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

@ -10,4 +10,24 @@ public class LogOperationListFormDTO {
private Integer pageNo = 1;
private Integer pageSize = 10;
/**
* 姓名
*/
private String operatorName;
/**
* 手机号
*/
private String operatorMobile;
/**
* yyyyMMdd
*/
private String startTime;
/**
* yyyyMMdd
*/
private String endTime;
/**
* 默认传data_tm
*/
private String category;
}

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

@ -1,7 +1,10 @@
package com.epmet.dto.region;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
*
*/
@ -45,4 +48,6 @@ public class LogOperationResultDTO {
*/
private Long operatingTime;
@JsonFormat(pattern="yyyy-MM-dd HH:mm")
private Date operateTime;
}

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

@ -1,7 +1,10 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.annotation.RequirePermission;
import com.epmet.commons.tools.enums.RequirePermissionEnum;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
@ -45,4 +48,26 @@ public class LogOperationController {
return new Result<List<LogOperationResultDTO>>().ok(resultList);
}
/**
* 数字社区-操作记录
* @param formDTO
* @return
*/
@PostMapping("page")
public Result<PageData<LogOperationResultDTO>> page(@RequestBody LogOperationListFormDTO formDTO, @LoginUser TokenDto tokenDto){
return new Result<PageData<LogOperationResultDTO>>().ok(logOperationService.page(loginUserUtil.getLoginUserCustomerId(),
formDTO.getStartTime(),
formDTO.getEndTime(),
formDTO.getOperatorName(),
formDTO.getOperatorMobile(),
formDTO.getPageNo(),
formDTO.getPageSize(),
formDTO.getCategory(),tokenDto));
}
@PostMapping("complementLogOperation")
public Result complementLogOperation(){
logOperationService.complementLogOperation();
return new Result();
}
}

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

@ -18,8 +18,14 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.ComplementLogOperationDTO;
import com.epmet.dto.region.LogOperationResultDTO;
import com.epmet.entity.LogOperationEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* 操作日指标
@ -29,5 +35,17 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface LogOperationDao extends BaseDao<LogOperationEntity> {
List<LogOperationResultDTO> pageList(@Param("customerId") String customerId,
@Param("startTime")String startTime,
@Param("endTime")String endTime,
@Param("operatorName")String operatorName,
@Param("operatorMobile")String operatorMobile,
@Param("category")String category,
@Param("agencyId")String agencyId);
List<Map<String,String>> getStaffId();
void updateBatchLog(@Param("list") List<ComplementLogOperationDTO> list);
}

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

@ -79,6 +79,8 @@ public class LogOperationEntity extends BaseEpmetEntity {
* 操作人手机号
*/
private String operatorMobile;
private String orgId;
private String orgIdPath;
/**
* 操作时间,该时间不是插入数据的时间而是操作发生的真实时间

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

@ -5,6 +5,7 @@ import com.epmet.commons.rocketmq.constants.TopicConstants;
import com.epmet.commons.rocketmq.register.MQAbstractRegister;
import com.epmet.commons.rocketmq.register.MQConsumerProperties;
import com.epmet.mq.listener.listener.AuthOperationLogListener;
import com.epmet.mq.listener.listener.CheckAndExportOperationLogListener;
import com.epmet.mq.listener.listener.PointOperationLogListener;
import com.epmet.mq.listener.listener.ProjectOperationLogListener;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
@ -19,6 +20,7 @@ public class RocketMQConsumerRegister extends MQAbstractRegister {
register(consumerProperties, ConsomerGroupConstants.AUTH_OPERATION_LOG_GROUP, MessageModel.CLUSTERING, TopicConstants.AUTH, "*", new AuthOperationLogListener());
register(consumerProperties, ConsomerGroupConstants.PROJECT_OPERATION_LOG_GROUP, MessageModel.CLUSTERING, TopicConstants.PROJECT_CHANGED, "*", new ProjectOperationLogListener());
register(consumerProperties, ConsomerGroupConstants.POINT_OPERATION_LOG_GROUP, MessageModel.CLUSTERING, TopicConstants.POINT, "*", new PointOperationLogListener());
register(consumerProperties, ConsomerGroupConstants.CHECK_OR_EXPORT_GROUP, MessageModel.CLUSTERING, TopicConstants.CHECK_OR_EXPORT, "*", new CheckAndExportOperationLogListener());
// ...其他监听器类似
}

122
epmet-admin/epmet-admin-server/src/main/java/com/epmet/mq/listener/listener/CheckAndExportOperationLogListener.java

@ -0,0 +1,122 @@
package com.epmet.mq.listener.listener;
import com.alibaba.fastjson.JSON;
import com.epmet.auth.constants.AuthOperationEnum;
import com.epmet.commons.rocketmq.constants.MQUserPropertys;
import com.epmet.commons.rocketmq.messages.CheckMQMsg;
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.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.SpringContextUtils;
import com.epmet.entity.LogOperationEntity;
import com.epmet.mq.listener.bean.log.LogOperationHelper;
import com.epmet.mq.listener.bean.log.OperatorInfo;
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 zxc
* @Description 查询明文或者导出操作日志监听器
*/
public class CheckAndExportOperationLogListener implements MessageListenerConcurrently {
private Logger logger = LoggerFactory.getLogger(getClass());
private RedisUtils redisUtils;
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
if (redisUtils == null) {
redisUtils = SpringContextUtils.getBean(RedisUtils.class);
}
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());
String pendingMsgLabel = messageExt.getUserProperty(MQUserPropertys.BLOCKED_MSG_LABEL);
logger.info("查询明文或者导出操作日志监听器-收到消息内容:{}", msg);
CheckMQMsg msgObj = JSON.parseObject(msg, CheckMQMsg.class);
//获取操作人信息
OperatorInfo operatorInfo = LogOperationHelper.getInstance().getOperatorInfo(msgObj.getUserId());
LogOperationEntity logEntity = new LogOperationEntity();
logEntity.setCategory("data_tm");
logEntity.setType(msgObj.getType());
logEntity.setTypeDisplay(msgObj.getTypeDisplay());
logEntity.setIp(msgObj.getIp());
logEntity.setFromApp(msgObj.getFromApp());
logEntity.setFromClient(msgObj.getFromClient());
logEntity.setTargetId("");
logEntity.setCustomerId(operatorInfo.getCustomerId());
logEntity.setOperatorId(msgObj.getUserId());
logEntity.setOperatorName(operatorInfo.getName());
logEntity.setOperatorMobile(operatorInfo.getMobile());
logEntity.setOperatingTime(msgObj.getOperateTime());
logEntity.setContent(msgObj.getContent());
logEntity.setOrgId(msgObj.getOrgId());
logEntity.setOrgIdPath(msgObj.getOrgIdPath());
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);
}
if (StringUtils.isNotBlank(pendingMsgLabel)) {
try {
removePendingMqMsgCache(pendingMsgLabel);
} catch (Exception e) {
logger.error("【查询明文或者导出操作日志监听器】-删除mq阻塞消息缓存失败:{}", ExceptionUtils.getErrorStackTrace(e));
}
}
}
/**
* @description
*
* @param pendingMsgLabel
* @return
* @author wxz
* @date 2021.10.14 16:32:32
*/
private void removePendingMqMsgCache(String pendingMsgLabel) {
String key = RedisKeys.blockedMqMsgKey(pendingMsgLabel);
redisUtils.delete(key);
//logger.info("【登录操作事件监听器】删除pendingMsgLabel成功:{}", pendingMsgLabel);
}
}

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

@ -1,5 +1,7 @@
package com.epmet.service;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dto.region.LogOperationResultDTO;
import com.epmet.entity.LogOperationEntity;
@ -25,4 +27,23 @@ public interface LogOperationService {
* @date 2021.06.07 21:56
*/
List<LogOperationResultDTO> listOperationLogs(String condition, String customerId, Integer pageNo, Integer pageSize);
/**
* 数字社区-操作记录
* @param loginUserCustomerId
* @param startTime
* @param endTime
* @param operatorName
* @param operatorMobile
* @return
*/
PageData<LogOperationResultDTO> page(String loginUserCustomerId,
String startTime,
String endTime,
String operatorName,
String operatorMobile,
Integer pageNo, Integer pageSize, String category, TokenDto tokenDto);
void complementLogOperation();
}

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

@ -4,20 +4,30 @@ 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.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dao.LogOperationDao;
import com.epmet.dto.ComplementLogOperationDTO;
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 com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
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 org.springframework.util.CollectionUtils;
import java.util.*;
@ -174,7 +184,72 @@ public class LogOperationServiceImpl implements LogOperationService, ResultDataR
ldto.setCustomerId(l.getCustomerId());
ldto.setOperatorMobile(staffMap.get(l.getOperatorId()).getMobile());
ldto.setOperatorName(staffMap.get(l.getOperatorId()).getRealName());
ldto.setOperateTime(l.getOperatingTime());
return ldto;
}).collect(Collectors.toList());
}
/**
* 数字社区-操作记录
*
* @param customerId
* @param startTime
* @param endTime
* @param operatorName
* @param operatorMobile
* @return
*/
@Override
public PageData<LogOperationResultDTO> page(String customerId, String startTime, String endTime, String operatorName, String operatorMobile,
Integer pageNo, Integer pageSize, String category, TokenDto tokenDto) {
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(tokenDto.getCustomerId(), tokenDto.getUserId());
if (null == staffInfo){
throw new EpmetException("未查询工作人员信息:"+tokenDto.getUserId());
}
// 列表/导出查询
PageHelper.startPage(pageNo, pageSize);
List<LogOperationResultDTO> list = logOperationDao.pageList(customerId, startTime, endTime, operatorName, operatorMobile,category,staffInfo.getAgencyId());
PageInfo<LogOperationResultDTO> pageInfo = new PageInfo<>(list);
return new PageData<>(list, pageInfo.getTotal());
}
/**
* Desc: 补全 log_operation 表的 org_id org_id_path
* @param
* @author zxc
* @date 2022/10/20 13:50
*/
@Override
public void complementLogOperation() {
Integer no = NumConstant.ONE;
Integer size;
do {
PageInfo<Map<String,String>> pageInfo = PageHelper.startPage(no, NumConstant.ONE_HUNDRED).doSelectPageInfo(() -> logOperationDao.getStaffId());
size = pageInfo.getList().size();
if (!CollectionUtils.isEmpty(pageInfo.getList())){
List<ComplementLogOperationDTO> needUpdate = new ArrayList<>();
for (Map<String, String> m : pageInfo.getList()) {
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(m.get("CUSTOMER_ID"), m.get("OPERATOR_ID"));
if (null == staffInfo){
logger.warn("未查询到工作人员信息"+m.get("OPERATOR_ID"));
continue;
}
ComplementLogOperationDTO dto = new ComplementLogOperationDTO();
dto.setStaffId(staffInfo.getStaffId());
dto.setOrgId(staffInfo.getAgencyId());
dto.setOrgIdPath(StringUtils.isBlank(staffInfo.getAgencyPIds()) ? staffInfo.getAgencyId() : staffInfo.getAgencyPIds().concat(":").concat(staffInfo.getAgencyId()));
needUpdate.add(dto);
}
if (!CollectionUtils.isEmpty(needUpdate)){
updateLog(needUpdate);
}
}
no++;
}while (size == NumConstant.ONE_HUNDRED);
}
@Transactional(rollbackFor = Exception.class)
public void updateLog(List<ComplementLogOperationDTO> list){
logOperationDao.updateBatchLog(list);
}
}

2
epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.24__alter_log_operation.sql

@ -0,0 +1,2 @@
ALTER TABLE log_operation MODIFY COLUMN CATEGORY varchar(64) not null COMMENT '操作类型大类。例如login和logout都属于login大类。项目立项,项目流转,项目结案都属于项目大类;data_tm:数据脱敏;';

3
epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.25__alter_log_operation2.sql

@ -0,0 +1,3 @@
alter table log_operation add COLUMN ORG_ID VARCHAR(32) comment '组织ID' AFTER ID;
alter table log_operation add COLUMN ORG_ID_PATH VARCHAR(255) comment '组织ID全路径,包括组织ID' AFTER ORG_ID;

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

@ -26,5 +26,67 @@
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
<update id="updateBatchLog">
update log_operation
<trim prefix="set" suffixOverrides=",">
<trim prefix="ORG_ID =(case" suffix="end),">
<foreach collection="list" item="item">
when OPERATOR_ID = #{item.staffId} then #{item.orgId}
</foreach>
</trim>
<trim prefix="ORG_ID_PATH =(case" suffix="end),">
<foreach collection="list" item="item">
when OPERATOR_ID = #{item.staffId} then #{item.orgIdPath}
</foreach>
</trim>
UPDATED_TIME = NOW()
</trim>
where 1=1
<foreach collection="list" item="item" open="AND( " separator=" OR " index="index" close=")">
OPERATOR_ID = #{item.staffId}
</foreach>
</update>
<select id="pageList" parameterType="map" resultType="com.epmet.dto.region.LogOperationResultDTO">
SELECT
lo.CATEGORY as category,
lo.TYPE as type,
lo.TYPE_DISPLAY as typeDisplay,
lo.CONTENT as content,
lo.TARGET_ID as targetId,
lo.CUSTOMER_ID as customerId,
lo.OPERATOR_ID as operatorId,
lo.OPERATOR_NAME as operatorName,
lo.OPERATOR_MOBILE as operatorMobile,
lo.OPERATING_TIME as operateTime
FROM
log_operation lo
WHERE
lo.del_flag = '0'
AND lo.CUSTOMER_ID = #{customerId}
AND lo.ORG_ID_PATH LIKE concat('%',#{agencyId},'%')
<if test="category != null and category != ''">
AND lo.CATEGORY = #{category}
</if>
<if test="operatorName != null and operatorName != ''">
AND lo.OPERATOR_NAME LIKE concat('%',#{operatorName},'%')
</if>
<if test="operatorMobile != null and operatorMobile != ''">
AND lo.OPERATOR_MOBILE LIKE concat('%',#{operatorMobile},'%')
</if>
<if test="startTime != null and startTime != ''">
AND DATE_FORMAT( lo.OPERATING_TIME, '%Y%m%d' ) &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND DATE_FORMAT( lo.OPERATING_TIME, '%Y%m%d' ) &lt;= #{endTime}
</if>
ORDER BY lo.OPERATING_TIME DESC
</select>
<select id="getStaffId" resultType="java.util.Map">
SELECT
OPERATOR_ID,
CUSTOMER_ID
FROM log_operation
GROUP BY OPERATOR_ID
</select>
</mapper>

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

@ -9,10 +9,7 @@ import com.epmet.dto.result.UserTokenResultDTO;
import com.epmet.service.ThirdLoginService;
import org.apache.commons.lang3.StringUtils;
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;
@ -219,4 +216,16 @@ public class ThirdLoginController {
ValidatorUtils.validateEntity(formDTO);
return new Result<UserTokenResultDTO>().ok(thirdLoginService.govLoginInternalDing(formDTO));
}
/**
* 根据免登授权码, 获取登录用户身份
*
* @param authCode 烟台认证中心 授权码
* @return
*/
@PostMapping("sso-govlogin-yantai/{authCode}")
public Result<UserTokenResultDTO> yantaiSSOLogin(@PathVariable(value = "authCode") String authCode) {
return new Result<UserTokenResultDTO>().ok(thirdLoginService.yanTaiSSOLogin(authCode));
}
}

2
epmet-auth/src/main/java/com/epmet/dto/result/ResiDingAppLoginResDTO.java

@ -38,5 +38,7 @@ public class ResiDingAppLoginResDTO {
* false:未注册
*/
private Boolean regFlag;
private String realName;
}

7
epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java

@ -117,4 +117,11 @@ public interface ThirdLoginService {
* @return
*/
UserTokenResultDTO govLoginInternalDing(DingAppLoginMdFormDTO formDTO);
/**
* desc:烟台sso根据authCode 获取本系统token
* @param authCode
* @return
*/
UserTokenResultDTO yanTaiSSOLogin(String authCode);
}

1
epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java

@ -95,6 +95,7 @@ public class GovWebServiceImpl implements GovWebService, ResultDataResolver {
//5.生成token存到redis并返回
UserTokenResultDTO userTokenResultDTO = new UserTokenResultDTO();
userTokenResultDTO.setCustomerId(formDTO.getCustomerId());
userTokenResultDTO.setToken(this.packagingUserToken(formDTO, resultDTO.getUserId()));
return userTokenResultDTO;

6
epmet-auth/src/main/java/com/epmet/service/impl/IcLoginServiceImpl.java

@ -5,11 +5,14 @@ import com.epmet.auth.constants.AuthOperationConstants;
import com.epmet.commons.rocketmq.messages.LoginMQMsg;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.dto.IcTokenDto;
import com.epmet.commons.tools.utils.CpUserDetailRedis;
import com.epmet.commons.tools.utils.IpUtils;
@ -23,6 +26,7 @@ import com.epmet.jwt.JwtTokenProperties;
import com.epmet.jwt.JwtTokenUtils;
import com.epmet.service.IcLoginService;
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.web.context.request.RequestContextHolder;
@ -115,14 +119,12 @@ public class IcLoginServiceImpl implements IcLoginService, ResultDataResolver {
*/
private void sendLoginEvent(String userId, String fromApp, String fromClient) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
LoginMQMsg loginMQMsg = new LoginMQMsg();
loginMQMsg.setUserId(userId);
loginMQMsg.setLoginTime(new Date());
loginMQMsg.setIp(IpUtils.getIpAddr(request));
loginMQMsg.setFromApp(fromApp);
loginMQMsg.setFromClient(fromClient);
SystemMsgFormDTO form = new SystemMsgFormDTO();
form.setMessageType(AuthOperationConstants.LOGIN);
form.setContent(loginMQMsg);

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

@ -12,6 +12,7 @@ import com.epmet.commons.rocketmq.messages.LoginMQMsg;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.enums.EnvEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
@ -19,12 +20,15 @@ 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.redis.common.CustomerDingDingRedis;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.redis.common.bean.DingMiniInfoCache;
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.utils.api.yt.YantaiApi;
import com.epmet.commons.tools.utils.api.yt.YantaiSSOUser;
import com.epmet.commons.tools.validator.PhoneValidatorUtils;
import com.epmet.constant.AuthHttpUrlConstant;
import com.epmet.constant.SmsTemplateConstant;
@ -33,10 +37,7 @@ import com.epmet.dto.dingres.DingUserDetailDTO;
import com.epmet.dto.dingres.V2UserGetuserinfoResDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.EpmetUserFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.feign.*;
import com.epmet.jwt.JwtTokenProperties;
import com.epmet.jwt.JwtTokenUtils;
import com.epmet.redis.CaptchaRedis;
@ -96,6 +97,8 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
private EpmetUserFeignClient epmetUserFeignClient;
@Autowired
private GovWebService govWebService;
@Autowired
private ThirdOpenFeignClient thirdOpenFeignClient;
/**
* @param formDTO
@ -830,7 +833,6 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
loginMQMsg.setIp(IpUtils.getIpAddr(request));
loginMQMsg.setFromApp(fromApp);
loginMQMsg.setFromClient(fromClient);
SystemMsgFormDTO form = new SystemMsgFormDTO();
form.setMessageType(AuthOperationConstants.LOGIN);
form.setContent(loginMQMsg);
@ -1029,14 +1031,13 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
public ResiDingAppLoginResDTO resiLoginInternalDing(DingAppLoginMdFormDTO formDTO) {
// 获取用户手机号
log.info("1、钉钉居民端应用登录入参:" + JSON.toJSONString(formDTO));
ResiDingAppLoginResDTO resDTO = null;
resDTO = new ResiDingAppLoginResDTO();
ResiDingAppLoginResDTO resDTO = new ResiDingAppLoginResDTO();
resDTO.setCustomerId(getCurrentCustomerId());
// 1、获取用户手机号
DingLoginResiFormDTO dingLoginResiFormDTO = getDingLoginResiFormDTOInternal(formDTO.getMiniAppId(), formDTO.getAuthCode());
dingLoginResiFormDTO.setCustomerId(resDTO.getCustomerId());
resDTO.setRealName(dingLoginResiFormDTO.getNick());
// 2、调用userfeign接口获取userId、注册网格相关信息
Result<DingLoginResiResDTO> loginResiResDTOResult = epmetUserOpenFeignClient.dingResiLogin(dingLoginResiFormDTO);
if (!loginResiResDTOResult.success() || null == loginResiResDTOResult.getData()) {
@ -1078,6 +1079,20 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
return govWebService.loginByThirdPlatform(loginGovParam);
}
@Override
public UserTokenResultDTO yanTaiSSOLogin(String authCode) {
YantaiSSOUser ssoUserInfo = YantaiApi.getLoginToken(authCode);
if (ssoUserInfo== null){
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"登录失败-sso获取用户失败","登录失败-sso获取用户失败");
}
GovWebLoginFormDTO loginGovParam = new GovWebLoginFormDTO();
loginGovParam.setCustomerId("1535072605621841922");
loginGovParam.setPhone(ssoUserInfo.getMobile());
return govWebService.loginByThirdPlatform(loginGovParam);
}
/**
* 最原始的企业内部应用开发不授权给产品服务商
* @param miniAppId

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

@ -108,4 +108,9 @@ public interface ConsomerGroupConstants {
* 党建积分操作消费组
*/
String PARTY_BUILDING_GROUP = "party_building_group";
/**
* 查看或者导出 日志记录 消费组
*/
String CHECK_OR_EXPORT_GROUP = "check_or_export_group";
}

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

@ -91,4 +91,9 @@ public interface TopicConstants {
String IC_MESSAGE = "ic_message";
String PARTY_BUILDING = "party_building";
/**
* 查看或者导出 日志记录
*/
String CHECK_OR_EXPORT = "check_or_export";
}

33
epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/messages/CheckMQMsg.java

@ -0,0 +1,33 @@
package com.epmet.commons.rocketmq.messages;
import lombok.Data;
import java.util.Date;
@Data
public class CheckMQMsg {
/**
* 谁登录
*/
private String userId;
private String content;
private String typeDisplay;
private String type;
/**
* 操作时间
*/
private Date operateTime;
private String ip;
private String fromApp;
private String fromClient;
private String orgId;
private String orgIdPath;
}

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java

@ -13,6 +13,8 @@ import org.springframework.http.MediaType;
public interface StrConstant {
String UTF_8 = CharEncoding.UTF_8;
String HTTP_STATUS_OK = "200";
String HTTP_RESP_CODE = "code";
String ISO_8859_1 = CharEncoding.ISO_8859_1;

38
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/commondto/IcEventComDTO.java

@ -0,0 +1,38 @@
package com.epmet.commons.tools.dto.commondto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description
* @Author yzm
* @Date 2022/10/11 13:08
*/
@Data
public class IcEventComDTO implements Serializable {
private static final long serialVersionUID = -5166489408303997740L;
/**
* 事件Id
*/
private String icEventId;
/**
* 事件内容
*/
private String eventContent;
/**
* 处理中processing已办结closed_case
*/
private String status;
/**
* 0:已回复 1:已转项目 2:已转需求3:转议题
*/
private String operationType;
/**
* 项目需求ID议题id
*/
private String operationId;
}

65
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/commondto/TopicInfoComDTO.java

@ -0,0 +1,65 @@
package com.epmet.commons.tools.dto.commondto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Description
* @Author yzm
* @Date 2022/10/11 13:06
*/
@Data
public class TopicInfoComDTO implements Serializable {
private static final long serialVersionUID = 4242861917113716511L;
/**
* 话题id
*/
private String topicId;
/**
* 话题内容
*/
private String topicContent;
/**
* 图片列表
*/
private List<String> topicImgs;
/**
* 话题语音-2022.10.10
*/
private List<String> topicVoices;
/**
* 话题发表人山东路168-尹女士
*/
private String publishedUser;
/**
* 话题发表时间 (时间戳 毫秒级)
*/
private Long publishedTime;
private String releaseTime;
/**
* 小组类型(ordinary:楼院小组 branch:支部小组)
*/
private String groupType;
/**
* 话题所属小组id
*/
private String groupId;
/**
* 话题所属小组名称
*/
private String groupName;
}

28
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/YtDataSyncResDTO.java

@ -0,0 +1,28 @@
package com.epmet.commons.tools.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Description
* @Author yzm
* @Date 2022/9/26 17:04
*/
@NoArgsConstructor
@Data
public class YtDataSyncResDTO {
private int code = 200;
private String msg = "请求成功";
/**
* 响应数据
*/
private String data;
private int total;
public YtDataSyncResDTO(int code, String msg, String data) {
this.code = code;
this.msg = msg;
this.data = data;
}
}

80
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/YtHscyResDTO.java

@ -0,0 +1,80 @@
package com.epmet.commons.tools.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @Description 核算采样结果
* @Author yzm
* @Date 2022/9/26 17:04
*/
@NoArgsConstructor
@Data
public class YtHscyResDTO {
private int code = 200;
private String msg = "请求成功";
/**
* 响应数据
*/
private List<YtHscyResDetail> data;
private int total;
@Data
public static class YtHscyResDetail {
private String id;
private String name;
private String card_type;
private String card_no;
private String create_by;
/**
* 采样时间
*/
private String create_time;
private String sys_org_code;
private String sample_tube;
private String package_id;
private String city;
private String uuid;
private String county;
private String depart_ids;
private Object depart_name;
/**
* 采样点名称
*/
private String realname;
private String upload_time;
private Object sd_id;
private Object sd_batch;
private Object sd_operation;
private Object sd_time;
private String inserttime;
}
/*{
"id":"1570924677539635484",
"name":"杨XX",//姓名
"card_type":"1",//证件类型
"card_no":"37************0813",//证件号码
"create_by":"370613594",//采样点账号
"create_time":"2022-09-17 07:15:22",//采样时间
"sys_org_code":"370613",//部门代码
"sample_tube":"GCJ-0825-0441",//采样管号
"package_id":"bcj00208083952",//采样包号
"city":"烟台市",//城市
"uuid":"6225684525062602095",//
"county":"莱山区",//区县
"depart_ids":"未填写",//街道
"depart_name":null,//部门名称
"realname":"采样点327",//采样点名称
"upload_time":"2022-09-17 07:56:45",//自增时间戳
"sd_id":null,
"sd_batch":null,
"sd_operation":null,
"sd_time":null,
"inserttime":"2022-09-17 09:36:20"//省大数据局返还烟台入库时间
}*/
}

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/YtHsjcResDTO.java

@ -6,7 +6,7 @@ import java.util.List;
/**
* @Description
* @Description 核酸结果查询
* @Author yzm
* @Date 2022/9/26 17:04
*/

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

@ -263,6 +263,10 @@ public enum EpmetErrorCode {
UNIT_EXIST_HOUSES_ERROR(8928,"单元下存在房屋,不可修改单元数"),
IC_VACCINE(8929,"已存在相同记录,请去修改原有记录"),
NOT_MATCH_IC_USER_ERROR(8930,"请联系社区工作人员"),
NAT_TIME_IS_NULL_ERROR(8931,"检测时间不能为空"),
NAT_RESULT_IS_NULL_ERROR(8932,"检测结果不能为空"),
SAMPLE_TIME_IS_NULL_ERROR(8933,"采样时间不能为空"),
SAMPLE_TIME_AND_RESULT_IS_NULL_ERROR(8934,"检测时间或结果不能为空"),
MISMATCH(10086,"人员与房屋信息不匹配,请与工作人员联系。"),

4
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonUserFeignClient.java

@ -2,6 +2,7 @@ package com.epmet.commons.tools.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.feign.fallback.CommonUserFeignClientFallBackFactory;
import com.epmet.commons.tools.redis.common.bean.IcResiUserInfoCache;
import com.epmet.commons.tools.redis.common.bean.ResiUserInfoCache;
import com.epmet.commons.tools.utils.Result;
import org.springframework.cloud.openfeign.FeignClient;
@ -17,4 +18,7 @@ import org.springframework.web.bind.annotation.PostMapping;
public interface CommonUserFeignClient {
@PostMapping("/epmetuser/userbaseinfo/getUserInfo/{userId}")
Result<ResiUserInfoCache> getUserInfo(@PathVariable("userId") String userId);
@PostMapping("/epmetuser/icresiuser/getIcResiUserInfo/{userId}")
Result<IcResiUserInfoCache> getIcResiUserInfo(@PathVariable("userId") String userId);
}

6
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonUserFeignClientFallback.java

@ -2,6 +2,7 @@ package com.epmet.commons.tools.feign.fallback;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.feign.CommonUserFeignClient;
import com.epmet.commons.tools.redis.common.bean.IcResiUserInfoCache;
import com.epmet.commons.tools.redis.common.bean.ResiUserInfoCache;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
@ -20,4 +21,9 @@ public class CommonUserFeignClientFallback implements CommonUserFeignClient {
public Result<ResiUserInfoCache> getUserInfo(String userId) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getUserInfo", userId);
}
@Override
public Result<IcResiUserInfoCache> getIcResiUserInfo(String userId) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getIcResiUserInfo", userId);
}
}

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

@ -393,6 +393,10 @@ public class RedisKeys {
return rootPrefix.concat("resi:user:").concat(userId);
}
public static String getIcResiUserKey(String userId) {
return rootPrefix.concat("resi:icResiUser:").concat(userId);
}
/**
* @param userId
* @return epmet:badge:user:[customerId]:[userId]
@ -533,6 +537,14 @@ public class RedisKeys {
return rootPrefix.concat("gov:staff:").concat(customerId).concat(StrConstant.COLON).concat(staffId);
}
public static String getCustomerAllStaffInfoKey(String customerId) {
return rootPrefix.concat("gov:allCustomerStaff:").concat(customerId).concat(StrConstant.COLON).concat("*");
}
public static String getCustomerStaffInfoKeyByMobile(String customerId,String mobile) {
return rootPrefix.concat("gov:allCustomerStaff:").concat(customerId).concat(StrConstant.COLON).concat(mobile);
}
/**
* @description 网格信息
*

1
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerOrgRedis.java

@ -57,7 +57,6 @@ public class CustomerOrgRedis {
public static GridInfoCache getGridInfo(String gridId){
String key = RedisKeys.getGridInfoKey(gridId);
Map<String, Object> grid = customerOrgRedis.redisUtils.hGetAll(key);
log.info("grid is {}", JSON.toJSONString(grid));
if (!CollectionUtils.isEmpty(grid)) {
return ConvertUtils.mapToEntity(grid, GridInfoCache.class);
}

38
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerResiUserRedis.java

@ -1,10 +1,12 @@
package com.epmet.commons.tools.redis.common;
import cn.hutool.core.bean.BeanUtil;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.CommonUserFeignClient;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.redis.common.bean.IcResiUserInfoCache;
import com.epmet.commons.tools.redis.common.bean.ResiUserInfoCache;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
@ -70,6 +72,31 @@ public class CustomerResiUserRedis {
return resultData;
}
public static IcResiUserInfoCache getIcResiUserInfo(String icResiUserId){
if (StringUtils.isBlank(icResiUserId)){
log.warn("getIcResiUserInfo param is blank,userId:{}",icResiUserId);
return null;
}
String key = RedisKeys.getIcResiUserKey(icResiUserId);
Map<String, Object> map = customerResiUserRedis.redisUtils.hGetAll(key);
if (!CollectionUtils.isEmpty(map)) {
return ConvertUtils.mapToEntity(map, IcResiUserInfoCache.class);
}
Result<IcResiUserInfoCache> result = customerResiUserRedis.commonUserFeignClient.getIcResiUserInfo(icResiUserId);
if (result == null || !result.success()) {
throw new EpmetException("获取居民信息失败");
}
IcResiUserInfoCache data = result.getData();
if (null == data) {
log.warn("居民信息为空,userId:{}", icResiUserId);
return null;
}
Map<String, Object> cacheMap = BeanUtil.beanToMap(data, false, true);
customerResiUserRedis.redisUtils.hMSet(key, cacheMap);
return data;
}
@Nullable
private static ResiUserInfoCache reloadStaffCache(String userId, String key) {
Result<ResiUserInfoCache> result = customerResiUserRedis.commonUserFeignClient.getUserInfo(userId);
@ -87,4 +114,15 @@ public class CustomerResiUserRedis {
return resultData;
}
/**
* Desc: 删除Ic居民缓存
* @param icResiUserId
* @author zxc
* @date 2022/10/20 15:57
*/
public static Boolean delIcResiUserInfo(String icResiUserId){
String key = RedisKeys.getIcResiUserKey(icResiUserId);
return customerResiUserRedis.redisUtils.delete(key);
}
}

29
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerStaffRedis.java

@ -9,6 +9,7 @@ import com.epmet.commons.tools.feign.CommonAggFeignClient;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.redis.common.bean.CustomerStaffInfoCache;
import com.epmet.commons.tools.redis.common.bean.CustomerStaffInfoDTOCache;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import lombok.extern.slf4j.Slf4j;
@ -138,4 +139,32 @@ public class CustomerStaffRedis {
return customerStaffRedis.redisUtils.delete(key);
}
/**
* Desc: 拉取烟台用户时使用
* 根据客户ID 手机号获取工作人员信息没有返回null
* @param customerId
* @param mobile
* @author zxc
* @date 2022/10/19 14:18
*/
public static CustomerStaffInfoDTOCache getStaffInfoByMobile(String customerId, String mobile){
String key = RedisKeys.getCustomerStaffInfoKeyByMobile(customerId, mobile);
Map<String, Object> roleMap = customerStaffRedis.redisUtils.hGetAll(key);
if (!CollectionUtils.isEmpty(roleMap)) {
return ConvertUtils.mapToEntity(roleMap, CustomerStaffInfoDTOCache.class);
}
return null;
}
/**
* Desc: 烟台用删除所有工作人员信息
* @param customerId
* @author zxc
* @date 2022/10/19 14:28
*/
public static void delAllCustomerStaff(String customerId){
String key = RedisKeys.getCustomerAllStaffInfoKey(customerId);
customerStaffRedis.redisUtils.deleteByPattern(key);
}
}

133
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/bean/CustomerStaffInfoDTOCache.java

@ -0,0 +1,133 @@
package com.epmet.commons.tools.redis.common.bean;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Author zxc
* @DateTime 2022/10/19 14:26
* @DESC
*/
@Data
public class CustomerStaffInfoDTOCache implements Serializable {
private static final long serialVersionUID = 6967736754443092229L;
/**
* ID
*/
private String id;
/**
* 关联User表的主键Id
*/
private String userId;
/**
* 账户
*/
private String userAccount;
/**
* 真实姓名
*/
private String realName;
/**
* 性别0.未知1男2.
*/
private Integer gender;
/**
* 邮箱
*/
private String email;
/**
* 手机号-唯一键
*/
private String mobile;
/**
* 地址
*/
private String address;
/**
* 删除标识
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
/**
* fulltime专职parttime兼职
*/
private String workType;
/**
* 头像
*/
private String headPhoto;
/**
* inactive未激活active已激活
*/
private String activeFlag;
/**
* 激活时间
*/
private Date activeTime;
/**
* 未禁用enable,已禁用diabled
*/
private String enableFlag;
/**
* 客户id
*/
private String customerId;
/**
* 角色名称
*/
private String roleName;
/**
* 登录密码
*/
private String password;
/**
* 身份证号
*/
private String idCard;
}

15
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/bean/HouseInfoCache.java

@ -107,4 +107,19 @@ public class HouseInfoCache implements Serializable {
* 二维码地址
*/
private String houseQrcodeUrl;
/**
* 房主姓名
*/
private String ownerName;
/**
* 房主电话
*/
private String ownerPhone;
/**
* 房主身份证
*/
private String ownerIdCard;
}

539
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/bean/IcResiUserInfoCache.java

@ -0,0 +1,539 @@
package com.epmet.commons.tools.redis.common.bean;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Author zxc
* @DateTime 2022/10/17 15:40
* @DESC
*/
@Data
public class IcResiUserInfoCache implements Serializable {
private static final long serialVersionUID = -3644143706074015380L;
/**
* 主键
*/
private String id;
/**
* 客户Id customer.id
*/
private String customerId;
/**
*
*/
private String agencyId;
/**
*
*/
private String pids;
/**
* 网格ID
*/
private String gridId;
/**
* 所属小区ID
*/
private String villageId;
/**
* 所属楼宇Id
*/
private String buildId;
/**
* 单元id
*/
private String unitId;
/**
* 所属家庭Id
*/
private String homeId;
/**
* 是否本地户籍
*/
private String isBdhj;
/**
* 姓名
*/
private String name;
/**
* 手机号
*/
private String mobile;
/**
* 性别
*/
private String gender;
/**
* 身份证号
*/
private String idCard;
/**
* 出生日期
*/
private String birthday;
/**
* 备注
*/
private String remarks;
/**
* 联系人
*/
private String contacts;
/**
* 联系人电话
*/
private String contactsMobile;
/**
* 九小场所url
*/
private String ninePlace;
/**
* 是否党员
*/
private String isParty;
/**
* 是否低保户
*/
private String isDbh;
/**
* 是否保障房
*/
private String isEnsureHouse;
/**
* 是否失业
*/
private String isUnemployed;
/**
* 是否育龄妇女
*/
private String isYlfn;
/**
* 是否退役军人
*/
private String isVeterans;
/**
* 是否统战人员
*/
private String isUnitedFront;
/**
* 是否信访人员
*/
private String isXfry;
/**
* 是否志愿者
*/
private String isVolunteer;
/**
* 是否老年人
*/
private String isOldPeople;
/**
* 是否空巢
*/
private String isKc;
/**
* 是否失独
*/
private String isSd;
/**
* 是否失能
*/
private String isSn;
/**
* 是否失智
*/
private String isSz;
/**
* 是否残疾
*/
private String isCj;
/**
* 是否大病
*/
private String isDb;
/**
* 是否慢病
*/
private String isMb;
/**
* 是否特殊人群
*/
private String isSpecial;
/**
* 是否租户:1 :0
*/
private String isTenant;
/**
* 是否是流动人口:1 :0
*/
private String isFloating;
/**
* 是否新阶层人士:1 :0
*/
private String isXjc;
/**
* 文化程度字典表
*/
private String culture;
/**
* 文化程度备注
*/
private String cultureRemakes;
/**
* 特长字典表
*/
private String specialSkill;
/**
* 兴趣爱好
*/
private String hobby;
/**
* 兴趣爱好备注
*/
private String hobbyRemakes;
/**
* 宗教信仰
*/
private String faith;
/**
* 宗教信仰备注
*/
private String faithRemakes;
/**
* 残疾类别字典表
*/
private String cjlb;
/**
* 残疾登记(状况)字典表
*/
private String cjzk;
/**
* 残疾证号
*/
private String cjzh;
/**
* 残疾说明
*/
private String cjsm;
/**
* 有无监护人yes no
*/
private String ynJdr;
/**
* 有无技能特长yes no
*/
private String ynJntc;
/**
* 有无劳动能力
*/
private String ynLdnl;
/**
* 有无非义务教育阶段助学yes no
*/
private String ynFywjyjdzx;
/**
* 所患大病
*/
private String shdb;
/**
* 患大病时间
*/
private String dbsj;
/**
* 所患慢性病
*/
private String shmxb;
/**
* 患慢性病时间
*/
private String mxbsj;
/**
* 是否参保
*/
private String isCb;
/**
* 自付金额
*/
private String zfje;
/**
* 救助金额
*/
private String jzje;
/**
* 救助时间[yyyy-MM-dd]
*/
private String jzsj;
/**
* 享受救助明细序号
*/
private String jzmxxh;
/**
* 健康信息备注
*/
private String healthRemakes;
/**
* 工作单位
*/
private String gzdw;
/**
* 职业
*/
private String zy;
/**
* 离退休时间
*/
private String ltxsj;
/**
* 工作信息备注
*/
private String workRemake;
/**
* 退休金额
*/
private String txje;
/**
* 月收入
*/
private String ysr;
/**
* 是否经济低保
*/
private String isJjdb;
/**
* 籍贯
*/
private String jg;
/**
* 户籍所在地
*/
private String hjszd;
/**
* 现居住地
*/
private String xjzd;
/**
* 人户情况
*/
private String rhzk;
/**
* 居住信息备注
*/
private String jzxxRemakes;
/**
* 民族字典表
*/
private String mz;
/**
* 与户主关系字典表
*/
private String yhzgx;
/**
* 居住情况字典表
*/
private String jzqk;
/**
* 婚姻状况字典表
*/
private String hyzk;
/**
* 配偶情况字典表
*/
private String poqk;
/**
* 有无赡养人
*/
private String ynSyr;
/**
* 与赡养人关系字典表
*/
private String ysyrgx;
/**
* 赡养人电话
*/
private String syrMobile;
/**
* 家庭信息备注
*/
private String jtxxRemakes;
/**
* 用户状态0:正常;1:迁出;2:注销
*/
private String status;
/**
* 用户详细状态01新增02导入03迁入04新生11迁出21死亡
*/
private String subStatus;
/**
* 删除标识 0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
/**
* 预留字段1
*/
private String field1;
/**
* 预留字段2
*/
private String field2;
/**
* 预留字段3
*/
private String field3;
/**
* 预留字段4
*/
private String field4;
/**
* 预留字段5
*/
private String field5;
/**
* 预留字段6
*/
private String field6;
/**
* 预留字段7
*/
private String field7;
/**
* 预留字段8
*/
private String field8;
/**
* 预留字段9
*/
private String field9;
/**
* 预留字段10
*/
private String field10;
}

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

@ -3,6 +3,7 @@ package com.epmet.commons.tools.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.enums.EnvEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.scan.param.*;
@ -16,6 +17,7 @@ import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 扫描内容工具类
@ -31,6 +33,15 @@ public class ScanContentUtils {
* @return
*/
public static Result<SyncScanResult> imgSyncScan(String url, ImgScanParamDTO param) {
//start 测试环境停机了,先这样改试试
EnvEnum currentEnv = EnvEnum.getCurrentEnv();
if(EnvEnum.LOCAL.getCode().equals(currentEnv.getCode())||EnvEnum.DEV.getCode().equals(currentEnv.getCode())){
SyncScanResult syncScanResult=new SyncScanResult();
syncScanResult.setSuccessDataIds(param.getTasks().stream().map(c -> c.getDataId()).collect(Collectors.toList()));
syncScanResult.setAllPass(true);
return new Result<SyncScanResult>().ok(syncScanResult);
}//end
log.debug("imgSyncScan param:{}", JSON.toJSONString(param));
if (StringUtils.isBlank(url) || param == null) {
throw new RenException("参数错误");
@ -57,6 +68,15 @@ public class ScanContentUtils {
* @return
*/
public static Result<SyncScanResult> textSyncScan(String url, TextScanParamDTO param) {
//start 测试环境停机了,先这样改试试
EnvEnum currentEnv = EnvEnum.getCurrentEnv();
if(EnvEnum.LOCAL.getCode().equals(currentEnv.getCode())||EnvEnum.DEV.getCode().equals(currentEnv.getCode())){
SyncScanResult syncScanResult=new SyncScanResult();
syncScanResult.setSuccessDataIds(param.getTasks().stream().map(c -> c.getDataId()).collect(Collectors.toList()));
syncScanResult.setAllPass(true);
return new Result<SyncScanResult>().ok(syncScanResult);
}//end
log.debug("textSyncScan param:{}", JSON.toJSONString(param));
if (StringUtils.isBlank(url) || param == null) {
throw new RenException("参数错误");

200
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/YtHsResUtils.java

@ -1,6 +1,10 @@
package com.epmet.commons.tools.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.YtDataSyncResDTO;
import com.epmet.commons.tools.dto.result.YtHscyResDTO;
import com.epmet.commons.tools.dto.result.YtHsjcResDTO;
import lombok.extern.slf4j.Slf4j;
@ -15,39 +19,203 @@ import java.util.Map;
*/
@Slf4j
public class YtHsResUtils {
private static String URL = "http://10.2.2.60:8191/sjzt/server/hsjcxx";
private static final String APP_KEY_VALUE = "DR4jF5Be7sCsqDmCamq2tmYCl";
private static String SERVER_URL = "http://10.2.2.60:8191/sjzt/server/";
private static final String APP_KEY = "appkey";
private static final String CARD_NO = "card_no";
private static final String ROW_NUM = "ROWNUM";
private static final String PAGE_SIZE = "PAGESIZE";
/**
* desc:核酸采样查询
*
* @return
*/
public static YtHscyResDTO hscy(String cardNo, Integer rowNum, Integer pageSize) {
try {
Map<String, Object> param = new HashMap<>();
param.put(APP_KEY, "tz45j4kuWcnnjoJOVSlzGWJgI");
param.put(CARD_NO, cardNo);
param.put(ROW_NUM, rowNum);
param.put(PAGE_SIZE, pageSize);
log.info("hscy api param:{}", param);
Result<String> result = HttpClientManager.getInstance().sendGet(SERVER_URL + "hscyxxcx", param);
// String mockData = "{\"code\":\"200\",\"msg\":\"请求成功\",\"data\":[{\"id\":\"1570924677539635484\",\"name\":\"杨XX\",\"card_type\":\"1\",\"card_no\":\"370283199912010302\",\"create_by\":\"370613594\",\"create_time\":\"2022-09-24 06:48:28\",\"sys_org_code\":\"370613\",\"sample_tube\":\"GCJ-0825-0441\",\"package_id\":\"bcj00208083952\",\"city\":\"烟台市\",\"uuid\":\"6225684525062602095\",\"county\":\"莱山区\",\"depart_ids\":\"未填写\",\"depart_name\":null,\"realname\":\"采样点327\",\"upload_time\":\"2022-09-17 07:56:45\",\"sd_id\":null,\"sd_batch\":null,\"sd_operation\":null,\"sd_time\":null,\"inserttime\":\"2022-09-17 09:36:20\"}]}";
// Result<String> result = new Result<String>().ok(mockData);
log.info("hscy api result:{}", JSON.toJSONString(result));
if (result.success()) {
String data = result.getData();
JSONObject jsonObject = JSON.parseObject(data);
if (jsonObject != null && StrConstant.HTTP_STATUS_OK.equals(jsonObject.getString(StrConstant.HTTP_RESP_CODE))) {
return JSON.parseObject(result.getData(), YtHscyResDTO.class);
} else {
log.warn("hscy 调用蓝图接口败");
}
}
} catch (Exception e) {
log.error(String.format("烟台核酸检测结果查询异常cardNo:%s,异常信息:%s", cardNo, e.getMessage()));
}
YtHscyResDTO resultResult = new YtHscyResDTO();
resultResult.setData(new ArrayList<>());
return resultResult;
}
/**
* desc:图片同步扫描
* desc:核酸结果查询
*
* @return
*/
public static YtHsjcResDTO hsjc(String cardNo, Integer rowNum, Integer pageSize) {
try {
//String param = String.format("&card_no=%s&ROWNUM=%s&PAGESIZE=%s", cardNo, rowNum, pageSize);
//String apiUrl = url.concat(param);
Map<String,Object> param = new HashMap<>();
param.put(APP_KEY,APP_KEY_VALUE);
param.put(CARD_NO,cardNo);
param.put(ROW_NUM,rowNum);
param.put(PAGE_SIZE,pageSize);
log.info("hsjc api param:{}",param);
Result<String> result = HttpClientManager.getInstance().sendGet(URL, param);
log.info("hsjc api result:{}",JSON.toJSONString(result));
Map<String, Object> param = new HashMap<>();
param.put(APP_KEY, "DR4jF5Be7sCsqDmCamq2tmYCl");
param.put(CARD_NO, cardNo);
param.put(ROW_NUM, rowNum);
param.put(PAGE_SIZE, pageSize);
log.info("hsjc api param:{}", param);
Result<String> result = HttpClientManager.getInstance().sendGet(SERVER_URL + "hsjcxx", param);
// String mockData = "{\"code\":\"200\",\"msg\":\"请求成功\",\"data\":[{\"id\":\"6a31eb2d38c011eda054fa163ebc7ff4\",\"name\":\"数据同步测试用户\",\"card_no\":\"370283199912010302\",\"telephone\":\"13697890860\",\"address\":\"保利香榭里公馆18-1-302\",\"test_time\":\"2022-09-24 12:52:28\",\"depart_name\":\"天仁医学检验实验室有限公司\",\"county\":\"莱山区\",\"upload_time\":\"2022-09-20 21:23:10\",\"sample_result_pcr\":\"2\",\"sample_time\":\"2022-09-24 06:48:28\",\"sampling_org_pcr\":\"采样点327\"}],\"total\":1}";
// Result<String> result = new Result<String>().ok(mockData);
log.info("hsjc api result:{}", JSON.toJSONString(result));
if (result.success()) {
return JSON.parseObject(result.getData(), YtHsjcResDTO.class);
String data = result.getData();
JSONObject jsonObject = JSON.parseObject(data);
if (jsonObject != null && StrConstant.HTTP_STATUS_OK.equals(jsonObject.getString(StrConstant.HTTP_RESP_CODE))) {
return JSON.parseObject(result.getData(), YtHsjcResDTO.class);
} else {
log.warn("hsjc 调用蓝图接口败");
}
}
} catch (Exception e) {
e.printStackTrace();
log.warn(String.format("烟台核酸检测结果查询异常cardNo:%s,异常信息:%s", cardNo, e.getMessage()));
log.error(String.format("烟台核酸检测结果查询异常cardNo:%s,异常信息:%s", cardNo, e.getMessage()));
}
YtHsjcResDTO resultResult = new YtHsjcResDTO();
resultResult.setData(new ArrayList<>());
return resultResult;
}
/**
* desc:死亡数据同步
*
* @return
*/
public static YtDataSyncResDTO siWang(String cardNo, String userName) {
try {
// 1)appkey秘钥
// 2)name姓名 必填
// 3)idcard身份证号 必填
// 4)start开始默认0
// 5)limit每页记录数
Map<String, Object> param = new HashMap<>();
param.put(APP_KEY, "IGE8TMM6f4t1Sef7FfstOLHAL");
param.put("id_card", cardNo);
param.put("name", userName);
param.put("start", 0);
param.put("limit", 1);
log.info("siWang api param:{}", param);
Result<String> result = HttpClientManager.getInstance().sendGet(SERVER_URL + "mzt_hhrysj1", param);
// String mockData = "{\"code\":\"200\",\"msg\":\"请求成功\",\"data\":\"{\\\"code\\\":200,\\\"data\\\":\\\"{\\\\\\\"data\\\\\\\":[{\\\\\\\"AGE\\\\\\\":\\\\\\\"82\\\\\\\",\\\\\\\"BIRTHDAY\\\\\\\":\\\\\\\"1933-02-23\\\\\\\",\\\\\\\"CARD_TYPE\\\\\\\":\\\\\\\"1\\\\\\\",\\\\\\\"CREATE_ORGAN_NAME\\\\\\\":\\\\\\\"莱州市殡仪馆\\\\\\\",\\\\\\\"CREMATION_TIME\\\\\\\":\\\\\\\"2016-01-03 13:01\\\\\\\",\\\\\\\"DEAD_ID\\\\\\\":\\\\\\\"8abc809851ffaf1501520600555c2849\\\\\\\",\\\\\\\"DEATH_DATE\\\\\\\":\\\\\\\"2016-01-02\\\\\\\",\\\\\\\"FAMILY_ADD\\\\\\\":\\\\\\\"山东省莱州市光州西路420号\\\\\\\",\\\\\\\"FOLK\\\\\\\":\\\\\\\"01\\\\\\\",\\\\\\\"ID_CARD\\\\\\\":\\\\\\\"370625193302231929\\\\\\\",\\\\\\\"NAME\\\\\\\":\\\\\\\"陈秀芬\\\\\\\",\\\\\\\"NATION\\\\\\\":\\\\\\\"156\\\\\\\",\\\\\\\"POPULACE\\\\\\\":\\\\\\\"3381C300B4B9439FE05319003C0A0897\\\\\\\",\\\\\\\"POPULACE_NAME\\\\\\\":\\\\\\\"烟台市莱州市文昌路街道\\\\\\\",\\\\\\\"RECORD_ID\\\\\\\":\\\\\\\"8abc809851ffaf1501520600694e2877\\\\\\\",\\\\\\\"RN\\\\\\\":\\\\\\\"1\\\\\\\",\\\\\\\"SEX\\\\\\\":\\\\\\\"2\\\\\\\"}],\\\\\\\"fields\\\\\\\":[\\\\\\\"RN\\\\\\\",\\\\\\\"RECORD_ID\\\\\\\",\\\\\\\"DEAD_ID\\\\\\\",\\\\\\\"NAME\\\\\\\",\\\\\\\"SEX\\\\\\\",\\\\\\\"CARD_TYPE\\\\\\\",\\\\\\\"ID_CARD\\\\\\\",\\\\\\\"BIRTHDAY\\\\\\\",\\\\\\\"AGE\\\\\\\",\\\\\\\"NATION\\\\\\\",\\\\\\\"FOLK\\\\\\\",\\\\\\\"IF_LOCAL\\\\\\\",\\\\\\\"POPULACE\\\\\\\",\\\\\\\"FAMILY_ADD\\\\\\\",\\\\\\\"WORK_NAME\\\\\\\",\\\\\\\"DEATH_DATE\\\\\\\",\\\\\\\"CREMATION_TIME\\\\\\\",\\\\\\\"CREATE_ORGAN_NAME\\\\\\\",\\\\\\\"POPULACE_NAME\\\\\\\"],\\\\\\\"total\\\\\\\":\\\\\\\"1\\\\\\\"}\\\",\\\"message\\\":\\\"\\\"}\",\"total\":0}";
// Result<String> result = new Result<String>().ok(mockData);
log.info("siWang api result:{}", JSON.toJSONString(result));
if (!result.success()) {
return new YtDataSyncResDTO();
}
String data = result.getData();
JSONObject jsonObject = JSON.parseObject(data);
//他们的结果是成功的
if (jsonObject != null && StrConstant.HTTP_STATUS_OK.equals(jsonObject.getString(StrConstant.HTTP_RESP_CODE))) {
//第一层
JSONObject firstData = JSON.parseObject(jsonObject.getString("data"));
//第二层 data
if (firstData != null && StrConstant.HTTP_STATUS_OK.equals(firstData.getString(StrConstant.HTTP_RESP_CODE))) {
//第一层
JSONObject secondData = JSON.parseObject(firstData.getString("data"));
Object thirdData = "";
if (secondData != null && secondData.getJSONArray("data") != null) {
//第二层 data
thirdData = secondData.getJSONArray("data").get(0);
}
return new YtDataSyncResDTO(200, "", thirdData.toString());
} else {
log.warn("siWang 调用蓝图接口成功但是蓝图的结果中 省平台失败");
}
} else {
log.warn("siWang 调用蓝图接口败");
}
} catch (Exception e) {
log.error(String.format("烟台siWang结果查询异常cardNo:%s,异常信息:%s", cardNo, e.getMessage()));
}
return new YtDataSyncResDTO();
}
/**
* desc:残疾数据同步
*
* @return
* @remark默认失败 因为一旦成功没有数据 会影响残疾人的数据 接口失败数据不做任何处理
*/
public static YtDataSyncResDTO canji(String idCard, String userName) {
YtDataSyncResDTO failResult = new YtDataSyncResDTO();
failResult.setCode(500);
failResult.setMsg("默认错误");
try {
// 1)appkey
// 2)name姓名
// 3)citizenId身份证号
Map<String, Object> param = new HashMap<>();
param.put(APP_KEY, "EWGsaK0aM21wkDjCIWbahGVk2");
param.put("citizenId", idCard);
param.put("name", userName);
log.info("canji api param:{}", param);
Result<String> result = HttpClientManager.getInstance().sendGet(SERVER_URL + "sdcl_xxzx_czcjr1", param);
// String mockData = "{\"code\":\"200\",\"msg\":\"请求成功\",\"data\":\"{\\\"code\\\":200,\\\"data\\\":\\\"{\\\\\\\"result\\\\\\\":true,\\\\\\\"errorcode\\\\\\\":0,\\\\\\\"msg\\\\\\\":\\\\\\\"获取成功\\\\\\\",\\\\\\\"data\\\\\\\":{\\\\\\\"isNewRecord\\\\\\\":true,\\\\\\\"delFlag\\\\\\\":\\\\\\\"0\\\\\\\",\\\\\\\"pageNo\\\\\\\":0,\\\\\\\"pageSize\\\\\\\":0,\\\\\\\"name\\\\\\\":\\\\\\\"数据同步测试用户\\\\\\\",\\\\\\\"genderName\\\\\\\":\\\\\\\"男\\\\\\\",\\\\\\\"citizenId\\\\\\\":\\\\\\\"370682198002072719\\\\\\\",\\\\\\\"cardNum\\\\\\\":\\\\\\\"370283199912010302\\\\\\\",\\\\\\\"idtKindName\\\\\\\":\\\\\\\"精神\\\\\\\",\\\\\\\"idtLevelName\\\\\\\":\\\\\\\"二级\\\\\\\",\\\\\\\"eduLevelName\\\\\\\":\\\\\\\"小学\\\\\\\",\\\\\\\"marriagerName\\\\\\\":\\\\\\\"未婚\\\\\\\",\\\\\\\"guardian\\\\\\\":\\\\\\\"盖希仁\\\\\\\",\\\\\\\"guardianPhone\\\\\\\":\\\\\\\"13854516627\\\\\\\",\\\\\\\"guardianRName\\\\\\\":\\\\\\\"兄/弟/姐/妹\\\\\\\",\\\\\\\"raceName\\\\\\\":\\\\\\\"汉族\\\\\\\",\\\\\\\"certDate\\\\\\\":1620779842000,\\\\\\\"residentAdd\\\\\\\":\\\\\\\"姜疃镇凤头村248号附1号\\\\\\\",\\\\\\\"nowAdd\\\\\\\":\\\\\\\"山东省烟台市莱阳市姜疃镇凤头村委会\\\\\\\",\\\\\\\"phoneNo\\\\\\\":\\\\\\\"13854516627\\\\\\\"}}\\\",\\\"message\\\":\\\"\\\"}\",\"total\":0}";
// Result<String> result = new Result<String>().ok(mockData);
log.info("canji api result:{}", JSON.toJSONString(result));
if (result.success()) {
String data = result.getData();
JSONObject jsonObject = JSON.parseObject(data);
//他们的结果是成功的
if (jsonObject != null && StrConstant.HTTP_STATUS_OK.equals(jsonObject.getString(StrConstant.HTTP_RESP_CODE))) {
//第一层data
JSONObject realObject = JSON.parseObject(jsonObject.getString("data"));
if (realObject != null && StrConstant.HTTP_STATUS_OK.equals(realObject.getString(StrConstant.HTTP_RESP_CODE))) {
//第二层 data
String thirdData = realObject.getString("data");
return JSON.parseObject(thirdData, YtDataSyncResDTO.class);
} else {
log.warn("canji 调用蓝图接口成功但是蓝图的结果中 省平台失败");
}
} else {
log.warn("canji 调用蓝图接口败");
}
}
} catch (Exception e) {
log.error(String.format("烟台canji结果查询异常cardNo:%s,异常信息:%s", idCard, e.getMessage()));
}
return failResult;
}
public static void main(String[] args) {
YtDataSyncResDTO canji = canji("123", "123");
System.out.println("残疾结果:" + JSON.toJSON(canji));
YtDataSyncResDTO siwang = siWang("1213", "!23");
System.out.println("死亡结果:" + JSON.toJSON(siwang));
}
}

79
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/OrgData.java

@ -0,0 +1,79 @@
package com.epmet.commons.tools.utils.api.yt;
import lombok.Data;
import java.io.Serializable;
/**
* desc:组织机构数据 实体类
* @author liujianjun
*/
@Data
public class OrgData implements Serializable {
/**
* 联系人姓名
*/
private String contact;
/**
* 联系电话号码
*/
private String contactTelephoneNumber;
/**
* 详细地址
*/
private String detailAddress;
/**
* 组织机构第一名称
*/
private String firstNameOfOrganization;
/**
* 组织机构全称
*/
private String nameOfOrganization;
/**
* 排序号码
*/
private String orderNumber;
/**
* 组织机构简称
*/
private String organizatioNabbreviation;
/**
* 组织机构ID
*/
private String organizationId;
/**
* 组织机构级别
*/
private String organizationLevel;
/**
* 组织机构路径
*/
private String organizationPath;
/**
* 组织机构类型
*/
private String organizationType;
/**
* 注册类型
*/
private String registrationType;
/**
* 统一社会信用代码
*/
private String unifiedSocialCreditId;
}

199
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/SM4UtilsForYanTai.java

@ -0,0 +1,199 @@
package com.epmet.commons.tools.utils.api.yt;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.Security;
/**
* 烟台的认证中心-国密sm4加解密
*/
public class SM4UtilsForYanTai {
private static String SM4_KEY = "yaweisoftware@xy";
//编码格式
private static final Charset encryptCharset = StandardCharsets.UTF_8;
public enum Algorithm {
SM4("SM4","SM4","国密四,key长16byte");
private String keyAlgorithm;
private String transformation;
private String description;//描述
Algorithm(String keyAlgorithm, String transformation, String description) {
this.keyAlgorithm = keyAlgorithm;
this.transformation = transformation;
this.description = description;
}
public String getKeyAlgorithm() {
return this.keyAlgorithm;
}
public String getTransformation() {
return this.transformation;
}
public String getDescription() {
return this.description;
}
}
private static final String PROVIDER_NAME = "BC";
static {
Security.addProvider(new BouncyCastleProvider());
}
/**
* 自定字符串产生密钥
* @param algorithm 加解密算法
* @param keyStr 密钥字符串
* @param charset 编码字符集
* @return 密钥
*/
public static SecretKey genKeyByStr(Algorithm algorithm, String keyStr, Charset charset) {
return readKeyFromBytes(algorithm, keyStr.getBytes(charset));
}
/**
* 根据指定字节数组产生密钥
* @param algorithm 加解密算法
* @param keyBytes 密钥字节数组
* @return 密钥
*/
public static SecretKey readKeyFromBytes(Algorithm algorithm, byte[] keyBytes) {
return new SecretKeySpec(keyBytes, algorithm.getKeyAlgorithm());
}
/****************************加密*********************************/
/**
* 加密字符串并进行base64编码
* @param algorithm 加解密算法
* @param key 密钥
* @param data 明文
* @param charset 编码字符集
* @return 密文
* @throws InvalidKeyException 密钥错误
*/
public static String encryptBase64(Algorithm algorithm, SecretKey key, String data, Charset charset) throws InvalidKeyException {
return Base64.encodeBase64String(encrypt(algorithm, key, data.getBytes(charset)));
}
/**
* 加密字节数组
* @param algorithm 加解密算法
* @param key 密钥
* @param data 明文
* @return 密文
* @throws InvalidKeyException 密钥错误
*/
public static byte[] encrypt(Algorithm algorithm, SecretKey key, byte[] data) throws InvalidKeyException {
try {
return cipherDoFinal(algorithm, Cipher.ENCRYPT_MODE, key, data);
} catch (BadPaddingException e) {
throw new RuntimeException(e);//明文没有具体格式要求,不会出错。所以这个异常不需要外部捕获。
}
}
/**
* 加解密字节数组
* @param algorithm 加解密算法
* @param opmode 操作1加密2解密
* @param key 密钥
* @param data 数据
* @throws InvalidKeyException 密钥错误
* @throws BadPaddingException 解密密文错误(加密模式没有)
*/
private static byte[] cipherDoFinal(Algorithm algorithm, int opmode, SecretKey key, byte[] data) throws InvalidKeyException, BadPaddingException {
Cipher cipher;
try {
cipher = Cipher.getInstance(algorithm.getTransformation(), PROVIDER_NAME);
} catch (Exception e) {
//NoSuchAlgorithmException:加密算法名是本工具类提供的,如果错了业务没有办法处理。所以这个异常不需要外部捕获。
//NoSuchProviderException:Provider是本工具类提供的,如果错了业务没有办法处理。所以这个异常不需要外部捕获。
//NoSuchPaddingException:没有特定的填充机制,与环境有关,业务没有办法处理。所以这个异常不需要外部捕获。
throw new RuntimeException(e);
}
cipher.init(opmode, key);
try {
return cipher.doFinal(data);
} catch (IllegalBlockSizeException e) {
throw new RuntimeException(e);//业务不需要将数据分块(好像由底层处理了),如果错了业务没有办法处理。所以这个异常不需要外部捕获。
}
}
/****************************解密*********************************/
/**
* 对字符串先进行base64解码再解密
* @param algorithm 加解密算法
* @param key 密钥
* @param data 密文
* @param charset 编码字符集
* @return 明文
* @throws InvalidKeyException 密钥错误
* @throws BadPaddingException 密文错误
*/
public static String decryptBase64(Algorithm algorithm, SecretKey key, String data, Charset charset)
throws InvalidKeyException, BadPaddingException {
return new String(decrypt(algorithm, key, Base64.decodeBase64(data)), charset);
}
/**
* 解密字节数组
* @param algorithm 加解密算法
* @param key 密钥
* @param data 密文
* @return 明文
* @throws InvalidKeyException 密钥错误
* @throws BadPaddingException 密文错误
*/
public static byte[] decrypt(Algorithm algorithm, SecretKey key, byte[] data) throws InvalidKeyException, BadPaddingException {
return cipherDoFinal(algorithm, Cipher.DECRYPT_MODE, key, data);
}
public static String Encrypt(String data) throws InvalidKeyException {
SecretKey key = genKeyByStr(Algorithm.SM4, SM4_KEY, encryptCharset);
return encryptBase64(Algorithm.SM4, key, data, encryptCharset);
}
public static String Decrypt(String data) throws BadPaddingException, InvalidKeyException {
SecretKey key = genKeyByStr(Algorithm.SM4, SM4_KEY, encryptCharset);
return decryptBase64(Algorithm.SM4, key, data, encryptCharset);
}
//加密
public static String dealEncryptData(Object data) throws JsonProcessingException, InvalidKeyException {
ObjectMapper objectMapper = new ObjectMapper();
String dataString = "";
try {
if(data instanceof String){
dataString = (String) data;
}else {
dataString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(data);
}
String dataEncrypt = Encrypt(dataString);
return dataEncrypt;
}catch (Exception e){
return dataString;
}
}
//解密
public static String dealDecryptData(Object data) throws JsonProcessingException, BadPaddingException, InvalidKeyException {
String dataString = "";
try {
ObjectMapper objectMapper = new ObjectMapper();
if (data instanceof String) {
dataString = (String) data;
} else {
dataString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(data);
}
String dataDecrypt = Decrypt(dataString);
return dataDecrypt;
}catch (Exception e){
return dataString;
}
}
}

184
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/TestMs4.java

@ -0,0 +1,184 @@
package com.epmet.commons.tools.utils.api.yt;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;
import java.util.Arrays;
/**
* sm4加密算法工具类
*
* @explain sm4加密解密与加密结果验证 可逆算法
* @Autorjingyao
*/
public class TestMs4 {
static {
Security.addProvider(new BouncyCastleProvider());
}
private static final String ENCODING = "UTF-8";
public static final String ALGORITHM_NAME = "SM4";
// 加密算法/分组加密模式/分组填充方式
// PKCS5Padding-以8个字节为一组进行分组加密
// 定义分组加密模式使用:PKCS5Padding
public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding";
// 128-32位16进制;256-64位16进制
public static final int DEFAULT_KEY_SIZE = 128;
/**
* 生成ECB暗号
*
* @param algorithmName 算法名称
* @param mode 模式
* @param key
* @return
* @throws Exception
* @explain ECB模式电子密码本模式Electronic codebook
*/
private static Cipher generateEcbCipher(String algorithmName, int mode, byte[] key) throws Exception {
Cipher cipher = Cipher.getInstance(algorithmName, BouncyCastleProvider.PROVIDER_NAME);
Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME);
cipher.init(mode, sm4Key);
return cipher;
}
/**
* 自动生成密钥
*
* @return
* @throws NoSuchAlgorithmException
* @throws NoSuchProviderException
* @explain
*/
public static byte[] generateKey() throws Exception {
return generateKey(DEFAULT_KEY_SIZE);
}
//加密******************************************
/**
* @param keySize
* @return
* @throws Exception
* @explain 系统产生秘钥
*/
public static byte[] generateKey(int keySize) throws Exception {
KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM_NAME, BouncyCastleProvider.PROVIDER_NAME);
kg.init(keySize, new SecureRandom());
return kg.generateKey().getEncoded();
}
/**
* sm4加密
*
* @param hexKey 16进制密钥忽略大小写
* @param paramStr 待加密字符串
* @return 返回16进制的加密字符串
* @throws Exception
* @explain 加密模式ECB 密文长度不固定会随着被加密字符串长度的变化而变化
*/
public static String encryptEcb(String hexKey, String paramStr) throws Exception {
String cipherText = "";
// 16进制字符串-->byte[]
byte[] keyData = ByteUtils.fromHexString(hexKey);
// String-->byte[]
byte[] srcData = paramStr.getBytes(ENCODING);
// 加密后的数组
byte[] cipherArray = encrypt_Ecb_Padding(keyData, srcData);
// byte[]-->hexString
cipherText = ByteUtils.toHexString(cipherArray);
return cipherText;
}
/**
* 加密模式之Ecb
*
* @param key
* @param data
* @return
* @throws Exception
*/
public static byte[] encrypt_Ecb_Padding(byte[] key, byte[] data) throws Exception {
Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, key);//声称Ecb暗号,通过第二个参数判断加密还是解密
return cipher.doFinal(data);
}
//解密****************************************
/**
* sm4解密
*
* @param hexKey 16进制密钥
* @param cipherText 16进制的加密字符串忽略大小写
* @return 解密后的字符串
* @throws Exception
* @explain 解密模式采用ECB
*/
public static String decryptEcb(String hexKey, String cipherText) throws Exception {
// 用于接收解密后的字符串
String decryptStr = "";
// hexString-->byte[]
byte[] keyData = ByteUtils.fromHexString(hexKey);
// hexString-->byte[]
byte[] cipherData = ByteUtils.fromHexString(cipherText);
// 解密
byte[] srcData = decrypt_Ecb_Padding(keyData, cipherData);
// byte[]-->String
decryptStr = new String(srcData, ENCODING);
return decryptStr;
}
/**
* 解密
*
* @param key
* @param cipherText
* @return
* @throws Exception
* @explain
*/
public static byte[] decrypt_Ecb_Padding(byte[] key, byte[] cipherText) throws Exception {
Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.DECRYPT_MODE, key);//生成Ecb暗号,通过第二个参数判断加密还是解密
return cipher.doFinal(cipherText);
}
/**
* 校验加密前后的字符串是否为同一数据
*
* @param hexKey 16进制密钥忽略大小写
* @param cipherText 16进制加密后的字符串
* @param paramStr 加密前的字符串
* @return 是否为同一数据
* @throws Exception
* @explain
*/
public static boolean verifyEcb(String hexKey, String cipherText, String paramStr) throws Exception {
// 用于接收校验结果
boolean flag = false;
// hexString-->byte[]
byte[] keyData = ByteUtils.fromHexString(hexKey);
// 将16进制字符串转换成数组
byte[] cipherData = ByteUtils.fromHexString(cipherText);
// 解密
byte[] decryptData = decrypt_Ecb_Padding(keyData, cipherData);
// 将原字符串转换成byte[]
byte[] srcData = paramStr.getBytes(ENCODING);
// 判断2个数组是否一致
flag = Arrays.equals(decryptData, srcData);
return flag;
}
public static void main(String[] args) throws Exception {
String text = "5d22ea44c7599a48f0d4446b1b7fbb4bb8353922df437d39c3a38549c0f2549cbd021ada00a8be83027ae06203c3daea2eedc5bd0875c7e509c7049045c5349577f2c21bcec328a5ea0bf341191e5bdba978566dddd16f1cf1928ff5cbd826dd33289fb45a8a04585f1f24ab04f59426371a5a0a0f2ee3e7b00d2bdfba7810524ce4c33130eda077546fa4c4191d0117f7a44e1cadac6c69a7d437653be1f958a459e0f025d471e09ab4636c38013032948ffb0827040ed6f3436be090f545186928a7b0b2bfc65782452606607ce8555ba130caacad73998da704428a07276a2699889c9872eebba5de8b72cdbe88705483293b00ab3ecb3aa57d283a4ecab40b71bc0a10e9ec626f07b2293255349fb2270d37e81c5c3d0de0b0f0706ed1872f60f039ce2e51effc39aef9747d67457e072cf3170a9c19589c1bab1a7d9d80";
String s = TestMs4.decryptEcb("dbcff4c9f4774e6cb56080f279149d59", text);
System.out.println(s);
}
}

50
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/UserData.java

@ -0,0 +1,50 @@
package com.epmet.commons.tools.utils.api.yt;
import lombok.Data;
import java.io.Serializable;
/**
* desc:认证中心-用户信息
* @author liujianjun
*/
@Data
public class UserData implements Serializable {
/**
* 性别todo 不知道是什么值
*/
private String gender;
/**
* 手机号码
*/
private String mobileTelephoneNumber;
private String orderNumber;
/**
* 职务
*/
private String position;
/**
* 职级
*/
private String positionLevel;
/**
* 电话号码
*/
private String telephoneNumber;
/**
* 用户编码/id
*/
private String userGuid;
/**
* 用户姓名
*/
private String userName;
/**
* 人员路径
*/
private String userPath;
}

282
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/YantaiApi.java

@ -0,0 +1,282 @@
package com.epmet.commons.tools.utils.api.yt;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.commons.tools.utils.Result;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import javax.crypto.BadPaddingException;
import java.security.InvalidKeyException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* desc:
*
* @author: LiuJanJun
* @date: 2022/10/17 3:57 下午
* @version: 1.0
*/
@Slf4j
public class YantaiApi {
private static final String SSO_SERVER = "http://172.20.46.155:8080/sso/";
/**
* 相当于 appKey
*/
private static final String CLIENT_ID = "1000009";
/**
* 相当于 appSecret 用于解密 他们重定向回来的code 解密他们的token 获取用户嘻嘻
*/
private static final String CLIENT_SECRET = "a1f9879119bc4080ab5575f832b7d98b";
/**
* 调用sso后台api接口的 秘钥
*/
private static final String SSO_API_TOKEN = "iJCDUgCBV/Zk5FkkaxLypA==";
/**
* 政务网地址
*/
private static final String SSO_BACKGROUND_SERVER_URL = "http://172.20.46.155:8082/";
/**
* 互联网地址
*/
//private static final String SSO_BACKGROUND_SERVER_URL = "http://120.220.248.247:8081/";
/**
* desc:根据组织id获取下级组织
*
* @param organizationId
* @return
*/
public static List<OrgData> getChildOuInfoByGuid(String organizationId) {
try {
if (StringUtils.isBlank(organizationId)) {
throw new EpmetException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg());
}
//加密
String organizationIdEn = SM4UtilsForYanTai.dealEncryptData(organizationId);
//pwd = URLEncoder.encode(pwd, "UTF-8");
String url = SSO_BACKGROUND_SERVER_URL + "person/ouinfo/getChildOuInfoByGuid";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("organizationId",organizationIdEn);
log.info("getChildOuInfoByGuid request param:{} url:{}",paramMap, url);
Result<String> result = HttpClientManager.getInstance().sendGet(url, paramMap, getApiHeaderMap());
log.info("getChildOuInfoByGuid request result:{}", result);
if (!result.success()){
return new ArrayList<>();
}
JSONObject jsonObject = JSONObject.parseObject(result.getData());
String secondCode = jsonObject.getString("code");
String secondMessage = jsonObject.getString("message");
if (!"200".equals(secondCode)) {
log.warn("getChildOuInfoByGuid 接口错误");
return new ArrayList<>();
}
//解密
String data = SM4UtilsForYanTai.dealDecryptData(jsonObject.getString("data"));
List<OrgData> orgData = JSON.parseArray(data, OrgData.class);
log.info("getChildOuInfoByGuid request real result:{}", JSON.toJSONString(orgData));
return orgData;
} catch (Exception e) {
log.error("getChildOuInfoByGuid exception", e);
}
return new ArrayList<>();
}
/**
* desc:根据组织id获取下级组织
*
* @param organizationId
* @return
*/
public static List<UserData> getUserByOuGuid(String organizationId) {
try {
if (StringUtils.isBlank(organizationId)) {
throw new EpmetException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg());
}
//加密
String organizationIdEn = SM4UtilsForYanTai.dealEncryptData(organizationId);
//pwd = URLEncoder.encode(pwd, "UTF-8");
String url = SSO_BACKGROUND_SERVER_URL + "person/userInfo/getUserByOuGuid";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("organizationId",organizationIdEn);
log.info("getUserByOuGuid request param: url:{},param:{}", url, paramMap);
Result<String> result = HttpClientManager.getInstance().sendGet(url, paramMap, getApiHeaderMap());
log.info("getUserByOuGuid request result:{}", result);
if (!result.success()){
return new ArrayList<>();
}
JSONObject jsonObject = JSONObject.parseObject(result.getData());
String secondCode = jsonObject.getString("code");
String secondMessage = jsonObject.getString("message");
if (!"200".equals(secondCode)) {
log.warn("getUserByOuGuid 接口错误");
return new ArrayList<>();
}
//解密
String data = SM4UtilsForYanTai.dealDecryptData(jsonObject.getString("data"));
List<UserData> userData = JSON.parseArray(data, UserData.class);
log.info("getUserByOuGuid request real result:{}", JSON.toJSONString(userData));
return userData;
} catch (Exception e) {
log.error("getUserByOuGuid exception", e);
}
return new ArrayList<>();
}
/**
* desc:根据组织id获取下级组织
*
* @param code
* @return
*/
public static YantaiSSOUser getLoginToken(String code) {
try {
if (StringUtils.isBlank(code)) {
throw new EpmetException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg());
}
//加密
String organizationIdEn = SM4UtilsForYanTai.dealEncryptData(code);
//pwd = URLEncoder.encode(pwd, "UTF-8");
log.info("getLoginToken加密组织Id = " + organizationIdEn);
String url = SSO_SERVER + "logintoken?client_id=" + CLIENT_ID + "&client_code=" + code;
Map<String, Object> headerMap = new HashMap<>();
Map<String, Object> paramMap = new HashMap<>();
log.info("getUserByOuGuid request param: url:{},header:{}", url, headerMap);
Result<String> result = HttpClientManager.getInstance().sendGet(url, paramMap, headerMap);
if (!result.success() || StringUtils.isBlank(result.getData())) {
log.info("getUserByOuGuid fail result:{}", JSON.toJSONString(result));
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取token为空", "获取token为空");
}
log.info("getUserByOuGuid request result:{}", result);
JSONObject jsonObject = JSONObject.parseObject(result.getData());
//解密
String errcode = jsonObject.getString("errcode");
if (!NumConstant.ZERO_STR.equals(errcode)) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取token失败", "获取token失败");
}
String sencondData = jsonObject.getString("data");
log.info("getLoginToken jiami data:{}", sencondData);
//String data = SM4UtilsForYanTai.dealDecryptData(sencondData);
String data = TestMs4.decryptEcb(CLIENT_SECRET, sencondData);
log.info("getLoginToken jiemi data:{}", sencondData);
YantaiSSOUser userData = JSON.parseObject(data, YantaiSSOUser.class);
log.info("getUserByOuGuid request real result:{}", JSON.toJSONString(userData));
String userInfoMobile = getUserInfoMobile(userData.getUserGuid());
userData.setMobile(userInfoMobile);
return userData;
} catch (Exception e) {
log.error("getUserByOuGuid exception", e);
}
return null;
}
public static String getUserInfoMobile(String userId) {
try {
String userIdEn = SM4UtilsForYanTai.dealEncryptData(userId);
String serverUrl = SSO_BACKGROUND_SERVER_URL + "person/userInfo/getUserByUserGuid";
//String serverUrl = "http://120.220.248.247:8081/person/userInfo/getUserByUserGuid";
Map<String, Object> param = new HashMap<>();
param.put("userGuid", userIdEn);
Result<String> result = HttpClientManager.getInstance().sendGet(serverUrl, param, getApiHeaderMap());
System.out.println(JSON.toJSONString(result));
if (!result.success() || StringUtils.isBlank(result.getData())) {
log.info("getUserInfoMobile fail result:{}", JSON.toJSONString(result));
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取用户信息失败", "获取用户信息失败");
}
String data = result.getData();
log.info("getUserInfoMobile jiami data:{}", JSON.parseObject(data));
JSONObject jsonObject = JSON.parseObject(data);
String secondCode = jsonObject.getString("code");
String secondMessage = jsonObject.getString("message");
if (!"200".equals(secondCode)) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取人员信息接口返回失败" + secondMessage, "获取人员信息接口返回失败" + secondMessage);
}
String data1 = SM4UtilsForYanTai.dealDecryptData(jsonObject.getString("data"));
String telephoneNumber = JSON.parseObject(data1).getString("mobileTelephoneNumber");
log.info("getUserInfoMobile jiemi data:{}", telephoneNumber);
return telephoneNumber;
} catch (Exception e) {
log.error("getUserInfoMobile exception", e);
}
return null;
}
@NotNull
private static Map<String, Object> getApiHeaderMap() {
Map<String, Object> headerMap = new HashMap<>();
try {
JSONObject token = new JSONObject();
token.put("token", SSO_API_TOKEN);
// token.put("token","iJCDUgCBV/Zk5FkkaxLypA==");
token.put("expiration", System.currentTimeMillis());
String tokanStr = SM4UtilsForYanTai.dealEncryptData(token.toString());
headerMap.put("Authorization", "Bearer " + tokanStr);
} catch (Exception e) {
log.error("getApiHeaderMap exception", e);
}
return headerMap;
}
public static void main(String[] args) throws BadPaddingException, InvalidKeyException, JsonProcessingException {
//testGetUserByUserId();
//code只能用一次
//getLoginToken("0d554bccfbac4be3846d643252daf92b");
String organizationId = "44e05de9-34fa-48f6-b89f-02838d792cf9";
List<OrgData> childOuInfoByGuid = getChildOuInfoByGuid(organizationId);
System.out.println("childOuInfoByGuid:"+JSON.toJSONString(childOuInfoByGuid));
//先用他说的有人的组织id联调
//String orgId = "2b271845-ed51-48aa-9935-00b9e7e06311";
//orgId = "2b271845-ed51-48aa-9935-00b9e7e05778";
List<UserData> userByOuGuid = getUserByOuGuid(organizationId);
System.out.println("getUserByOuGuid:"+JSON.toJSONString(userByOuGuid));
Map<String, Object> apiHeaderMap = getApiHeaderMap();
System.out.println(apiHeaderMap);
//testGetUserByUserId();
}
private static void testGetUserByUserId() throws JsonProcessingException, InvalidKeyException, BadPaddingException {
String testUserId = "0ffd76e2-27b5-4b33-be9a-186f9f878bf1";
String serverUrl = SSO_BACKGROUND_SERVER_URL +"person/userInfo/getUserByUserGuid";
//String serverUrl = "http://120.220.248.247:8081/person/userInfo/getUserByUserGuid";
Map<String, Object> param = new HashMap<>();
param.put("userGuid", SM4UtilsForYanTai.dealEncryptData(testUserId));
Result<String> stringResult = HttpClientManager.getInstance().sendGet(serverUrl, param, getApiHeaderMap());
System.out.println(JSON.toJSONString(stringResult));
String data = stringResult.getData();
JSONObject jsonObject = JSON.parseObject(data);
String secondCode = jsonObject.getString("code");
String secondMessage = jsonObject.getString("message");
System.out.println(secondCode);
System.out.println(secondMessage);
String data1 = SM4UtilsForYanTai.dealDecryptData(jsonObject.getString("data"));
System.out.println("======" + data1);
String s = SM4UtilsForYanTai.dealDecryptData("EsOeQX+A8+GG26lzLnuKeuylkBDRFcTbF+gE/jURIzddlVI8RToQQhzK4EHy0WfpS/L4dSAJC93UyVLJhj+r/pup2RFq/GjpH7Md+1Mjg3dM+eyDuGql71bUrldQwJXYnHrQm3Mn7tk5m2eLhEVNkFvdELjuy3Kg8YihZXf2Sox+kxtmK4DSIn/gxhVCoUneWeL0cA6JGHI6jNuq97rzgcNK3Mwen8MxOoWP3n3r+kIpwZCwIlL70MrBjIZ6FHIhcxpqL82gpLSe1K0TFgeWw+9PMo1yv4cGZn7rU86TDlQFoDP86dVa1jrBoyUmW/vvLXrMKwfBaiv9/EUzcCLZWYxEwH93n0X/NYCYem3pfv4uXk5A7/D+Npgj9OKCEIz0ROn0UW5NiXI5Vibz0dywaq4sfsR/LiwjV81QOGY9tsHzN2+MnyTVpQg1l7looNnq1j+wwLneS0aDmbTqBLEn/baph/Hnr2L/9HYpWfXkhz93XRNAdsbxhXdG5ZIiJSwNasHinPR3e2Hmn/02GOsBPFUifbyNUtslt4RS/gwboonBoXz8wrmXi+PfzUXwN8f2CKdBNEHl72USp70NtBSJUPAkHdXZEQPgGRped63Z9GA=");
System.out.println("sssssss:" + s);
}
}

35
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/api/yt/YantaiSSOUser.java

@ -0,0 +1,35 @@
package com.epmet.commons.tools.utils.api.yt;
import lombok.Data;
import java.io.Serializable;
/**
* sso认证中心 用户信息
* @author liujianjun
*/
@Data
public class YantaiSSOUser implements Serializable {
private static final long serialVersionUID = -2794280342919451106L;
/**
* 他说这个是手机号
*/
private String clientId;
private String departmentCode;
private String expirationTime;
private String ip;
private String issueTime;
private String registerGuid;
private String registerName;
private String userGuid;
private String userName;
/**
* 二次请求结果
*/
private String mobile;
}

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

@ -418,7 +418,11 @@ management:
web:
exposure:
include: "*"
# enabled-by-default: false
endpoint:
gateway:
enabled: false
health:
show-details: ALWAYS

2
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govissue/IssueApplicationDTO.java

@ -73,6 +73,8 @@ public class IssueApplicationDTO implements Serializable {
* 网格ID 居民端议题对应一个网格Id
*/
private String gridId;
private String orgId;
private String orgIdPath;
/**
* 审核通过后对应的 议题id

6
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govissue/result/IssueListResultDTO.java

@ -108,7 +108,10 @@ public class IssueListResultDTO implements Serializable {
@JsonIgnore
private String applyStatus;
/**
* 来源类型 话题resi_topic直接立议题issue事件ic_event
*/
private String sourceType;
public IssueListResultDTO() {
this.issueId = "";
this.issueTitle = "";
@ -129,5 +132,6 @@ public class IssueListResultDTO implements Serializable {
this.projectId = "";
this.issueClosedTime = 0L;
this.issueApplicationId = "";
this.sourceType="";
}
}

5
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/StaffDetailV2FormDTO.java

@ -42,5 +42,10 @@ public class StaffDetailV2FormDTO implements Serializable {
private String orgType = "";
//职责名称列表
private List<String> roles;
/**
* 数字社区里的角色名称
*/
private List<String> szsqRoles;
private String customerId;
}

12
epmet-module/data-aggregator/data-aggregator-server/pom.xml

@ -126,6 +126,18 @@
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-commons-rocketmq</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>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

14
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/EpmetUserController.java

@ -14,6 +14,8 @@ import com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO;
import com.epmet.dataaggre.excel.StaffPatrollExcel;
import com.epmet.dataaggre.service.datastats.DataStatsService;
import com.epmet.dataaggre.service.epmetuser.EpmetUserService;
import com.epmet.dto.form.DetailByTypeFormDTO;
import com.epmet.dto.result.DetailByTypeResultDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -285,4 +287,16 @@ public class EpmetUserController {
return new Result<List<GridMemberPatrolListResultDTO>>().ok(epmetUserService.gridMemberPatrolList(formDTO));
}
/**
* Desc: 数据明文查询
* @param formDTO
* @author zxc
* @date 2022/10/17 13:45
*/
@PostMapping("detailByType")
public Result<DetailByTypeResultDTO> detailByType(@RequestBody DetailByTypeFormDTO formDTO, @LoginUser TokenDto tokenDto){
ValidatorUtils.validateEntity(formDTO, DetailByTypeFormDTO.DetailByTypeForm.class);
return new Result<DetailByTypeResultDTO>().ok(epmetUserService.detailByType(formDTO,tokenDto));
}
}

11
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/IcResiUserDao.java

@ -30,6 +30,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* 用户基础信息
@ -138,4 +139,14 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
@Param("agencyId")String agencyId,
@Param("staffOrgIds")String staffOrgIds,
@Param("search")String search);
Map<String,String> getTripReportRecordInfo(@Param("id")String id);
Map<String,String> getVaccineRecordInfo(@Param("id")String id);
Map<String,String> getSpecialAttentionInfo(@Param("id")String id);
Map<String,String> getNoNatCompareInfo(@Param("id")String id);
Map<String,String> getNatInfo(@Param("id")String id);
}

3
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govissue/IssueApplicationEntity.java

@ -70,6 +70,9 @@ public class IssueApplicationEntity extends BaseEpmetEntity {
*/
private String gridId;
private String orgId;
private String orgIdPath;
/**
* 审核通过后对应的 议题id
*/

13
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java

@ -1,6 +1,7 @@
package com.epmet.dataaggre.service.epmetuser;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dataaggre.dto.datastats.form.NowStatsDataFormDTO;
import com.epmet.dataaggre.dto.datastats.result.NowStatsDataResultDTO;
import com.epmet.dataaggre.dto.epmetuser.form.*;
@ -20,6 +21,8 @@ import com.epmet.dataaggre.entity.epmetuser.IcPointVaccinesInoculationEntity;
import com.epmet.dataaggre.entity.epmetuser.IcResiUserEntity;
import com.epmet.dto.IcResiUserDTO;
import com.epmet.dto.UserBaseInfoDTO;
import com.epmet.dto.form.DetailByTypeFormDTO;
import com.epmet.dto.result.DetailByTypeResultDTO;
import java.util.List;
import java.util.Map;
@ -250,4 +253,14 @@ public interface EpmetUserService {
List<IcPointVaccinesInoculationEntity> listVaccinePoints(String customerId, String agencyId, String staffOrgIds, String search);
List<IcPointNucleicMonitoringEntity> listNucleicPoints(String customerId, String agencyId,String staffOrgIds, String search);
/**
* Desc: 数据明文查询
* @param formDTO
* @author zxc
* @date 2022/10/17 13:45
*/
DetailByTypeResultDTO detailByType(DetailByTypeFormDTO formDTO, TokenDto tokenDto);
}

150
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java

@ -2,16 +2,29 @@ package com.epmet.dataaggre.service.epmetuser.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.rocketmq.constants.TopicConstants;
import com.epmet.commons.rocketmq.messages.CheckMQMsg;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.form.IdAndNameDTO;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.enums.OrgTypeEnum;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerIcHouseRedis;
import com.epmet.commons.tools.redis.common.CustomerResiUserRedis;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.redis.common.bean.HouseInfoCache;
import com.epmet.commons.tools.redis.common.bean.IcResiUserInfoCache;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.IpUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.BadgeConstant;
import com.epmet.constant.NeighborhoodConstant;
import com.epmet.constant.OrgInfoConstant;
import com.epmet.dataaggre.constant.DataSourceConstant;
import com.epmet.dataaggre.dao.epmetuser.*;
@ -42,7 +55,14 @@ import com.epmet.dataaggre.service.govproject.GovProjectService;
import com.epmet.dataaggre.service.opercustomize.CustomerFootBarService;
import com.epmet.dto.IcResiUserDTO;
import com.epmet.dto.UserBaseInfoDTO;
import com.epmet.dto.form.DetailByTypeFormDTO;
import com.epmet.dto.form.SystemMsgFormDTO;
import com.epmet.dto.result.DetailByTypeResultDTO;
import com.epmet.dto.form.GetStaffExistRoleFormDTO;
import com.epmet.dto.result.NewUserRoleResultDTO;
import com.epmet.dto.result.StaffRoleResultDTO;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.GovAccessFeignClient;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
@ -51,8 +71,11 @@ import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.NumberFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -98,6 +121,10 @@ public class EpmetUserServiceImpl implements EpmetUserService {
private IcPointVaccinesInoculationDao pointVaccinesInoculationDao;
@Resource
private IcPointNucleicMonitoringDao pointNucleicMonitoringDao;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Autowired
private GovAccessFeignClient govAccessFeignClient;
/**
* @Description 根据UserIds查询
@ -714,7 +741,8 @@ public class EpmetUserServiceImpl implements EpmetUserService {
//基本信息
CustomerStaffDTO dto = customerStaffDao.selectByStaffId(staffId);
if (null == dto) {
return result;
// return result;
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"customer_staff is null staffId:"+staffId,"未查询到工作人员基础信息");
}
//角色信息
List<String> list = staffRoleDao.selectByStaffId(staffId);
@ -724,7 +752,16 @@ public class EpmetUserServiceImpl implements EpmetUserService {
result.setName(dto.getRealName());
result.setGender(dto.getGender().toString());
result.setRoles(list);
// 获取数字社区里的新角色
GetStaffExistRoleFormDTO getStaffExistRoleFormDTO = new GetStaffExistRoleFormDTO();
getStaffExistRoleFormDTO.setStaffId(staffId);
getStaffExistRoleFormDTO.setCustomerId(dto.getCustomerId());
Result<List<NewUserRoleResultDTO>> staffExistRole = govAccessFeignClient.getStaffExistRole(getStaffExistRoleFormDTO);
if (staffExistRole.success()&&CollectionUtils.isNotEmpty(staffExistRole.getData())){
// 过滤selected=true的
List<String> szsqRoles=staffExistRole.getData().stream().filter(t->t.getSelected()).map(m -> m.getRoleName()).distinct().collect(Collectors.toList());
result.setSzsqRoles(szsqRoles);
}
return result;
}
@ -971,4 +1008,113 @@ public class EpmetUserServiceImpl implements EpmetUserService {
query.like(StringUtils.isNotBlank(search), IcPointNucleicMonitoringEntity::getName, search);
return pointNucleicMonitoringDao.selectList(query);
}
@Override
public DetailByTypeResultDTO detailByType(DetailByTypeFormDTO formDTO, TokenDto tokenDto) {
DetailByTypeResultDTO result = new DetailByTypeResultDTO();
String customerId = tokenDto.getCustomerId();
String userId = tokenDto.getUserId();
CheckMQMsg msg = new CheckMQMsg();
if (formDTO.getType().equals(NeighborhoodConstant.CHECK_HOUSE)){
HouseInfoCache houseInfo = CustomerIcHouseRedis.getHouseInfo(customerId, formDTO.getId());
if (null == houseInfo){
throw new EpmetException("查询房屋信息失败:"+formDTO.getId());
}
result.setMobile(houseInfo.getOwnerPhone());
result.setIdCard(houseInfo.getOwnerIdCard());
msg.setContent("查看"+houseInfo.getAllName()+"房屋的敏感信息");
}else if (formDTO.getType().equals(NeighborhoodConstant.CHECK_IC_RESI_USER)){
IcResiUserInfoCache icResiUserInfo = CustomerResiUserRedis.getIcResiUserInfo(formDTO.getId());
if (null == icResiUserInfo){
throw new EpmetException("查询icResiUser失败:"+formDTO.getId());
}
result.setIdCard(icResiUserInfo.getIdCard());
result.setMobile(icResiUserInfo.getMobile());
msg.setContent("查看"+icResiUserInfo.getName()+"的敏感信息");
}else if (formDTO.getType().equals(NeighborhoodConstant.JMFYXX)){
IcResiUserInfoCache icResiUserInfo = CustomerResiUserRedis.getIcResiUserInfo(formDTO.getId());
if (null == icResiUserInfo){
throw new EpmetException("查询icResiUser失败:"+formDTO.getId());
}
result.setIdCard(icResiUserInfo.getIdCard());
result.setMobile(icResiUserInfo.getMobile());
msg.setContent("查看"+icResiUserInfo.getName()+"的敏感信息(居民防疫信息)");
}else if (formDTO.getType().equals(NeighborhoodConstant.ROUTE_FOLLOW)){
Map<String, String> info = icResiUserDao.getTripReportRecordInfo(formDTO.getId());
if (null == info){
throw new EpmetException("未查询到行程随访信息:"+formDTO.getId());
}
result.setIdCard(info.get(NeighborhoodConstant.ID_CARD));
result.setMobile(info.get(NeighborhoodConstant.MOBILE));
msg.setContent("查看"+info.get(NeighborhoodConstant.NAME)+"的敏感信息(行程随访)");
}else if (formDTO.getType().equals(NeighborhoodConstant.VACCINATION_RECORD)){
Map<String, String> info = icResiUserDao.getVaccineRecordInfo(formDTO.getId());
if (null == info){
throw new EpmetException("未查询到疫苗接种信息:"+formDTO.getId());
}
result.setIdCard(info.get(NeighborhoodConstant.ID_CARD));
result.setMobile(info.get(NeighborhoodConstant.MOBILE));
msg.setContent("查看"+info.get(NeighborhoodConstant.NAME)+"的敏感信息(疫苗接种记录)");
}else if (formDTO.getType().equals(NeighborhoodConstant.VACCINE_SPECIAL_ATTENTION)
|| formDTO.getType().equals(NeighborhoodConstant.FOCUS_GROUP_SPECIAL_ATTENTION_QUARANTINE)
|| formDTO.getType().equals(NeighborhoodConstant.FOCUS_GROUP_SPECIAL_ATTENTION_HISTORY)){
Map<String, String> info = icResiUserDao.getSpecialAttentionInfo(formDTO.getId());
if (null == info){
throw new EpmetException("未查询到特别关注名单信息:"+formDTO.getId());
}
result.setIdCard(info.get(NeighborhoodConstant.ID_CARD));
result.setMobile(info.get(NeighborhoodConstant.MOBILE));
String cMsg = "";
switch (formDTO.getType()){
case NeighborhoodConstant.VACCINE_SPECIAL_ATTENTION:
cMsg = "疫苗接种关注名单";
break;
case NeighborhoodConstant.FOCUS_GROUP_SPECIAL_ATTENTION_QUARANTINE:
cMsg = "重点人群关注名单(防疫隔离)";
break;
case NeighborhoodConstant.FOCUS_GROUP_SPECIAL_ATTENTION_HISTORY:
cMsg = "重点人群关注名单(历史记录)";
break;
default:
}
msg.setContent("查看"+info.get(NeighborhoodConstant.NAME)+"的敏感信息("+cMsg+")");
}else if (formDTO.getType().equals(NeighborhoodConstant.NO_NAT_COMPARE)){
Map<String, String> info = icResiUserDao.getNoNatCompareInfo(formDTO.getId());
if (null == info){
throw new EpmetException("未查询到未做核酸比对信息:"+formDTO.getId());
}
result.setIdCard(info.get(NeighborhoodConstant.ID_CARD));
result.setMobile(info.get(NeighborhoodConstant.MOBILE));
msg.setContent("查看"+info.get(NeighborhoodConstant.NAME)+"的敏感信息(未做核酸比对)");
}else if (formDTO.getType().equals(NeighborhoodConstant.NAT_RECORD)){
Map<String, String> info = icResiUserDao.getNatInfo(formDTO.getId());
if (null == info){
throw new EpmetException("未查询到核酸检测信息:"+formDTO.getId());
}
result.setIdCard(info.get(NeighborhoodConstant.ID_CARD));
result.setMobile(info.get(NeighborhoodConstant.MOBILE));
msg.setContent("查看"+info.get(NeighborhoodConstant.NAME)+"的敏感信息(核酸检测信息)");
}
// 发送mq消息
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
msg.setOperateTime(new Date());
msg.setType(formDTO.getType());
msg.setTypeDisplay(msg.getContent());
msg.setUserId(userId);
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(customerId, userId);
if(null == staffInfo){
throw new EpmetException("未查询到工作人员信息:"+userId);
}
msg.setOrgId(staffInfo.getAgencyId());
msg.setOrgIdPath(StringUtils.isBlank(staffInfo.getAgencyPIds()) ? staffInfo.getAgencyId() : staffInfo.getAgencyPIds().concat(":").concat(staffInfo.getAgencyId()));
msg.setFromApp(tokenDto.getApp());
msg.setIp(IpUtils.getIpAddr(request));
msg.setFromClient(tokenDto.getClient());
SystemMsgFormDTO form = new SystemMsgFormDTO();
form.setMessageType(TopicConstants.CHECK_OR_EXPORT);
form.setContent(msg);
epmetMessageOpenFeignClient.sendSystemMsgByMQ(form);
return result;
}
}

7
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java

@ -504,8 +504,9 @@ public class GovOrgServiceImpl implements GovOrgService {
public StaffDetailV2FormDTO staffDetailV2(StaffDetailV2ResultDTO formDTO) {
//1.查询工作人员基本信息、角色信息
StaffDetailV2FormDTO result = epmetUserService.selectByStaffId(formDTO.getStaffId());
if (null == result) {
return new StaffDetailV2FormDTO();
if (null == result||StringUtils.isBlank(result.getStaffId())) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"customer_staff is null staffId:"+formDTO.getStaffId(),"未查询到工作人员基本信息");
// return new StaffDetailV2FormDTO();
}
//2.查询工作人员注册组织关系信息
@ -513,7 +514,7 @@ public class GovOrgServiceImpl implements GovOrgService {
staffIdList.add(formDTO.getStaffId());
List<StaffOrgNameResultDTO> list = customerAgencyDao.selelctStaffOrg(staffIdList);
if (null == list || list.size() < NumConstant.ONE) {
throw new RenException("未查询到工作人员注册组织信息");
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"未查询到工作人员注册组织信息","未查询到工作人员所属组织信息");
}
//3.封装数据并返回

43
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/IcResiUserDao.xml

@ -283,4 +283,47 @@
having volunteerCategory is null
or volunteerCategory = ''
</select>
<select id="getTripReportRecordInfo" resultType="java.util.Map">
select
MOBILE,
ID_CARD,
NAME
from ic_trip_report_record
where id = #{id}
</select>
<select id="getVaccineRecordInfo" resultType="java.util.Map">
select
MOBILE,
ID_CARD,
NAME
from ic_vaccine
where id = #{id}
</select>
<select id="getSpecialAttentionInfo" resultType="java.util.Map">
select
MOBILE,
ID_CARD,
NAME
from ic_epidemic_special_attention
where id = #{id}
</select>
<select id="getNoNatCompareInfo" resultType="java.util.Map">
select
MOBILE,
ID_CARD,
NAME
from ic_nat_compare_record
where id = #{id}
</select>
<select id="getNatInfo" resultType="java.util.Map">
select
MOBILE,
ID_CARD,
NAME
from ic_nat
where id = #{id}
</select>
</mapper>

14
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govissue/IssueApplicationDao.xml

@ -12,7 +12,12 @@
ia.TOPIC_ID,
iah.REASON AS rejectedReason,
ia.grid_id,
ia.apply_status
ia.apply_status,
(
case when ia.TOPIC_ID is not null then 'resi_topic'
else ''
end
) as sourceType
FROM issue_application_history iah
LEFT JOIN issue_application ia ON iah.ISSUE_APPLICATION_ID = ia.ID AND ia.APPLY_STATUS = 'rejected'
WHERE ia.DEL_FLAG = 0
@ -31,7 +36,12 @@
ISSUE_TITLE,
UNIX_TIMESTAMP(CREATED_TIME) AS auditingTime,
TOPIC_ID,
grid_id
grid_id,
(
case when TOPIC_ID is not null then 'resi_topic'
else ''
end
) as sourceType
FROM issue_application
WHERE DEL_FLAG = 0
AND (

6
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govissue/IssueDao.xml

@ -12,7 +12,8 @@
ISSUE_TITLE AS issueTitle ,
UNIX_TIMESTAMP(CREATED_TIME) AS createTime,
SUGGESTION,
grid_id
grid_id,
SOURCE_TYPE as sourceType
FROM issue
WHERE DEL_FLAG = '0'
AND ISSUE_STATUS = #{issueStatus}
@ -30,7 +31,8 @@
SUGGESTION ,
UNIX_TIMESTAMP(SHIFTED_TIME) AS shiftProjectTime,
grid_id,
issue_title
issue_title,
SOURCE_TYPE as sourceType
FROM issue
WHERE DEL_FLAG = '0'
AND ISSUE_STATUS = 'shift_project'

2
epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/AreaCodeServiceImpl.java

@ -833,7 +833,7 @@ public class AreaCodeServiceImpl extends BaseServiceImpl<AreaCodeDao, AreaCodeEn
private String addDistrictAreaCode(String cityCode, String countyName) {
AreaCodeDTO city = baseDao.selectByCityCode(cityCode);
AreaCodeEntity insert = ConvertUtils.sourceToTarget(city, AreaCodeEntity.class);
insert.setCityName(countyName);
insert.setCountyName(countyName);
AreaCodeDTO maxCountyDTO = baseDao.selectMaxCounty(cityCode);
if (null == maxCountyDTO) {
insert.setCountyCode(cityCode.concat(AreaCodeConstant.FIRST_TOW_UD));

1
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java

@ -173,6 +173,7 @@ public interface EpmetHeartOpenFeignClient {
/**
* desc:根据来源id 删除需求 只删主表
* 服务需求相关表都删除ic_user_demand_recic_user_demand_serviceic_user_demand_satisfactionic_user_demand_operate_log
* @param originId
* @param origin
* @return

1
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcUserDemandRecController.java

@ -398,6 +398,7 @@ public class IcUserDemandRecController implements ResultDataResolver {
/**
* desc:根据来源id 删除需求 只删主表
* 2022.10.12:删除服务需求ic_user_demand_recic_user_demand_serviceic_user_demand_satisfactionic_user_demand_operate_log
* @param originId
* @param origin
* @return

1
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcUserDemandRecService.java

@ -268,6 +268,7 @@ public interface IcUserDemandRecService extends BaseService<IcUserDemandRecEntit
/**
* desc:根据来源id 删除需求 只删主表
* 2022.10.12:删除服务需求ic_user_demand_recic_user_demand_serviceic_user_demand_satisfactionic_user_demand_operate_log
* @param originId
* @param origin
* @return

66
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcUserDemandRecServiceImpl.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.conditions.update.LambdaUpdateWrapper;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
@ -520,18 +521,66 @@ public class IcUserDemandRecServiceImpl extends BaseServiceImpl<IcUserDemandRecD
return serverInfoDTO;
}
/**
* 此方法是删除事件时调用如果事件被转了服务服务记录也要删除
* @param originId
* @param origin
* @return
*/
@Override
public Integer deleteByOriginId(String originId, String origin) {
if(StringUtils.isBlank(originId) || StringUtils.isBlank(origin)){
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"参数错误","参数错误");
}
LambdaUpdateWrapper<IcUserDemandRecEntity> wrapper = new LambdaUpdateWrapper();
wrapper.eq(IcUserDemandRecEntity::getOriginId, originId)
.eq(IcUserDemandRecEntity::getOrigin,origin)
.set(IcUserDemandRecEntity::getUpdatedTime,new Date())
.set(IcUserDemandRecEntity::getCreatedBy,loginUserUtil.getLoginUserId())
.set(IcUserDemandRecEntity::getDelFlag,NumConstant.ONE_STR);
return baseDao.update(null, wrapper);
LambdaQueryWrapper<IcUserDemandRecEntity> queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(IcUserDemandRecEntity::getOrigin,origin).eq(IcUserDemandRecEntity::getOriginId,originId);
IcUserDemandRecEntity recEntity = baseDao.selectOne(queryWrapper);
if (null == recEntity) {
return 0;
}
//删除服务需求
deleteUserDemand(Arrays.asList(recEntity.getId()));
return 1;
}
/**
* 删除服务需求
* ic_user_demand_recic_user_demand_serviceic_user_demand_satisfactionic_user_demand_operate_log
* @param ids
*/
@Transactional(rollbackFor = Exception.class)
public void deleteUserDemand(List<String> ids) {
Date nowTime = new Date();
String currentUserId = loginUserUtil.getLoginUserId();
for (String id : ids) {
LambdaUpdateWrapper<IcUserDemandRecEntity> wrapper = new LambdaUpdateWrapper();
wrapper.eq(IcUserDemandRecEntity::getId, id)
.set(IcUserDemandRecEntity::getUpdatedTime, nowTime)
.set(IcUserDemandRecEntity::getUpdatedBy, currentUserId)
.set(IcUserDemandRecEntity::getDelFlag, NumConstant.ONE_STR);
baseDao.update(null, wrapper);
LambdaUpdateWrapper<IcUserDemandServiceEntity> serviceWrapper = new LambdaUpdateWrapper();
serviceWrapper.eq(IcUserDemandServiceEntity::getDemandRecId, id)
.set(IcUserDemandServiceEntity::getUpdatedTime, nowTime)
.set(IcUserDemandServiceEntity::getUpdatedBy, currentUserId)
.set(IcUserDemandServiceEntity::getDelFlag, NumConstant.ONE_STR);
demandServiceDao.update(null, serviceWrapper);
LambdaUpdateWrapper<IcUserDemandSatisfactionEntity> statWrapper = new LambdaUpdateWrapper();
statWrapper.eq(IcUserDemandSatisfactionEntity::getDemandRecId, id)
.set(IcUserDemandSatisfactionEntity::getUpdatedTime, nowTime)
.set(IcUserDemandSatisfactionEntity::getUpdatedBy, currentUserId)
.set(IcUserDemandSatisfactionEntity::getDelFlag, NumConstant.ONE_STR);
demandSatisfactionDao.update(null, statWrapper);
LambdaUpdateWrapper<IcUserDemandOperateLogEntity> logWrapper = new LambdaUpdateWrapper();
logWrapper.eq(IcUserDemandOperateLogEntity::getDemandRecId, id)
.set(IcUserDemandOperateLogEntity::getUpdatedTime, nowTime)
.set(IcUserDemandOperateLogEntity::getUpdatedBy, currentUserId)
.set(IcUserDemandOperateLogEntity::getDelFlag, NumConstant.ONE_STR);
operateLogDao.update(null, logWrapper);
}
}
/**
@ -563,6 +612,7 @@ public class IcUserDemandRecServiceImpl extends BaseServiceImpl<IcUserDemandRecD
//1.2、更新服务记录,记录实际开始,实际结束时间
serviceEntity.setServiceStartTime(formDTO.getServiceStartTime());
serviceEntity.setServiceEndTime(formDTO.getServiceEndTime());
serviceEntity.setUpdatedTime(nowDate);
demandServiceDao.updateById(serviceEntity);
//1.3、修改主表状态为已完成
entity.setStatus(UserDemandConstant.FINISHED);
@ -604,6 +654,7 @@ public class IcUserDemandRecServiceImpl extends BaseServiceImpl<IcUserDemandRecD
finishResultDTO.setRemark(String.format(UserDemandConstant.GRANT_POINT_REMARK,entity.getDemandUserName(),content));
finishResultDTO.setFinishResult(StringUtils.isNotBlank(formDTO.getFinishResult())?formDTO.getFinishResult():UserDemandConstant.UN_RESOLVED);
}
entity.setUpdatedTime(nowDate);
baseDao.updateById(entity);
// 5、如果是居民端用户提出的需求,发消息:您提出的需求已完成,请进行服务评价。
@ -623,6 +674,7 @@ public class IcUserDemandRecServiceImpl extends BaseServiceImpl<IcUserDemandRecD
dto.setType("demand");
dto.setServiceParty(str);
dto.setActualServiceTime(DateUtils.format(formDTO.getServiceStartTime(), DateUtils.DATE_TIME_PATTERN)+"至"+DateUtils.format(formDTO.getServiceEndTime(), DateUtils.DATE_TIME_PATTERN));
dto.setCloseCaseTime(nowDate);
Result result = govProjectOpenFeignClient.closeProjectOrDemand(dto);
if (!result.success()) {
throw new RenException("需求完成,修改事件管理数据失败...");

6
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/NatInfoScanTask.java

@ -3,7 +3,7 @@ package com.epmet.task;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.NatInfoScanTaskFormDTO;
import com.epmet.dto.form.DataSyncTaskParam;
import com.epmet.feign.EpmetUserOpenFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -26,9 +26,9 @@ public class NatInfoScanTask implements ITask {
@Override
public void run(String params) {
NatInfoScanTaskFormDTO formDTO = new NatInfoScanTaskFormDTO();
DataSyncTaskParam formDTO = new DataSyncTaskParam();
if (StringUtils.isNotBlank(params)) {
formDTO = JSON.parseObject(params, NatInfoScanTaskFormDTO.class);
formDTO = JSON.parseObject(params, DataSyncTaskParam.class);
}
Result result = userOpenFeignClient.natInfoScanTask(formDTO);
if (result.success()) {

36
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/YTUserAndOrgPullTask.java

@ -0,0 +1,36 @@
package com.epmet.task;
import com.epmet.commons.tools.utils.Result;
import com.epmet.feign.ThirdOpenFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author zxc
* @dscription 拉取yt用户信息和组织信息
*/
@Slf4j
@Component("YTUserAndOrgPullTask")
public class YTUserAndOrgPullTask implements ITask {
@Autowired
private ThirdOpenFeignClient thirdOpenFeignClient;
@Override
public void run(String params) {
Result<Boolean> yanTaiOrgInfo = thirdOpenFeignClient.getYanTaiOrgInfo("44e05de9-34fa-48f6-b89f-02838d792cf9");
if (yanTaiOrgInfo.success()) {
log.info("yt拉取组织信息定时任务执行成功");
} else {
log.error("yt拉取组织信息定时任务执行失败:" + yanTaiOrgInfo.getMsg());
}
Result<Boolean> yanTaiUserInfo = thirdOpenFeignClient.getYanTaiUserInfo("44e05de9-34fa-48f6-b89f-02838d792cf9");
if (yanTaiUserInfo.success()) {
log.info("yt拉取用户信息定时任务执行成功");
} else {
log.error("yt拉取用户信息定时任务执行失败:" + yanTaiUserInfo.getMsg());
}
}
}

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

@ -175,6 +175,12 @@ public interface SystemMessageType {
*/
String PARTY_MEETING_MESSAGE = "party_meeting_message";
/**
* 查看或者导出 日志记录
*/
String CHECK_OR_EXPORT = "check_or_export";
String ZBWYH = "参加支部委员会";
String ZBDYDH = "参加支部党员大会";
String DXZH = "参加党小组会";

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

@ -248,6 +248,9 @@ public class SystemMessageServiceImpl implements SystemMessageService {
case SystemMessageType.WMFWHD:
topic=TopicConstants.PARTY_BUILDING;
break;
case SystemMessageType.CHECK_OR_EXPORT:
topic = TopicConstants.CHECK_OR_EXPORT;
break;
default:
logger.error("getTopicByMsgType msgType:{} is not support for any topic", msgType);
}

3
epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointRuleServiceImpl.java

@ -26,11 +26,14 @@ import com.epmet.commons.rocketmq.messages.PointRuleChangedMQMsg;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.enums.CommonOperateTypeEnum;
import com.epmet.commons.tools.enums.EventEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;

139
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/DataSyncOrgDataDTO.java

@ -0,0 +1,139 @@
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 2022-10-18
*/
@Data
public class DataSyncOrgDataDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private String id;
/**
* 联系人姓名
*/
private String contact;
/**
* 联系电话号码
*/
private String contacttelephoneNumber;
/**
* 详细地址
*/
private String detailAddress;
/**
* 组织机构第一名称
*/
private String firstnameofOrganization;
/**
* 组织机构全称
*/
private String nameofOrganization;
/**
* 排序号码
*/
private String orderNumber;
/**
* 组织机构简称
*/
private String organizatioNabbreviation;
/**
* 组织机构ID
*/
private String organizationId;
/**
* 组织机构级别
*/
private String organizationLevel;
/**
* 组织机构路径
*/
private String organizationPath;
/**
* 组织机构类型
*/
private String organizationType;
/**
* 注册类型
*/
private String registrationType;
/**
* 统一社会信用代码
*/
private String unifiedsocialcreditId;
/**
* 删除标识 0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
/**
* 客户id;烟台id
*/
private String customerId;
/**
* 上级组织机构id:ORGANIZATION_ID; 根级组织赋值0
*/
private String pid;
/**
* 上级组织机构名称ORGANIZATIO_NABBREVIATION
*/
private String parentOrgName;
/**
* 所有上级组织不包含本身
*/
private String pids;
}

124
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/DataSyncUserDataDTO.java

@ -0,0 +1,124 @@
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 2022-10-18
*/
@Data
public class DataSyncUserDataDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private String id;
/**
* 性别:0未知1男2女
*/
private String gender;
/**
* 手机号码
*/
private String mobileTelephoneNumber;
/**
* 排序号码
*/
private String orderNumber;
/**
* 职务
*/
private String position;
/**
* 职级
*/
private String positionLevel;
/**
* 电话号码
*/
private String telephoneNumber;
/**
* 统一用户编码
*/
private String userGuid;
/**
* 用户姓名
*/
private String userName;
/**
* 人员路径
*/
private String userPath;
/**
* data_sync_org_data.组织机构ID;
*/
private String organizationId;
/**
* 删除标识 0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
/**
* 客户id
*/
private String customerId;
/**
* 0未创建1已创建
*/
private String status;
/**
* customer_staff.userId
*/
private String staffId;
/**
* 备注目前为空
*/
private String remark;
}

36
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/yantai/YtSyncStaffIdFormDTO.java

@ -0,0 +1,36 @@
package com.epmet.dto.form.yantai;
import com.epmet.commons.tools.validator.group.AddGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @Description 工作端新增完用户后需要调用此接口更新data_sync_user_data
* @Author yzm
* @Date 2022/10/18 13:54
*/
@Data
public class YtSyncStaffIdFormDTO {
/**
* 客户ID
*/
@NotBlank(message = "customerId不能为空",groups = AddGroup.class)
private String customerId;
/**
* 人员ID
*/
@NotBlank(message = "staffId不能为空",groups = AddGroup.class)
private String staffId;
@NotBlank(message = "name不能为空",groups = AddGroup.class)
private String name;
@NotBlank(message = "mobile不能为空",groups = AddGroup.class)
private String mobile;
@NotBlank(message = "当前操作人id不能为空",groups = AddGroup.class)
private String operUserId;
}

36
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/yantai/YtUserPageFormDTO.java

@ -0,0 +1,36 @@
package com.epmet.dto.form.yantai;
import com.epmet.commons.tools.dto.form.PageFormDTO;
import lombok.Data;
/**
* @Description 运营端统一认证 列表查询入参
* @Author yzm
* @Date 2022/10/18 11:12
*/
@Data
public class YtUserPageFormDTO extends PageFormDTO {
/**
* 0本机
* 1本级及下级
*/
private String type;
/**
* 组织id
* data_sync_org_data.ORGANIZATION_ID
*/
private String orgId;
/**
* 姓名
*/
private String name;
/**
* 手机号
*/
private String mobile;
/**
* 0未创建已创建
*/
private String status;
}

23
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/yantai/DataSyncOrgDataDTO.java

@ -0,0 +1,23 @@
package com.epmet.dto.result.yantai;
import lombok.Data;
import java.io.Serializable;
/**
* @Description
* @Author yzm
* @Date 2022/10/18 14:21
*/
@Data
public class DataSyncOrgDataDTO implements Serializable {
private static final long serialVersionUID = -3011177998045994250L;
private String orgId;
private String orgName;
private String pid;
/**
* true代表有下级
*/
private Boolean haveChild;
}

56
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/yantai/YtUserPageResDTO.java

@ -0,0 +1,56 @@
package com.epmet.dto.result.yantai;
import lombok.Data;
/**
* @Description 运营端统一认证 列表返参
* @Author yzm
* @Date 2022/10/18 11:53
*/
@Data
public class YtUserPageResDTO {
/**
* 统一用户编码
*/
private String userGuid;
/**
* data_sync_org_data.组织机构ID;
*/
private String organizationId;
/**
* XXX-XXX
*/
private String orgName;
/**
* 用户姓名
*/
private String userName;
/**
* 电话号码
*/
private String telephoneNumber;
/**
* 性别:0未知1男2女
*/
private String gender;
/**
* 0未创建已创建
*/
private String status;
/**
* customer_staff.userId
*/
private String staffId;
/**
* 备注目前为空
*/
private String remark;
private String customerId;
}

4
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java

@ -5,6 +5,7 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.BlockChainCreateProjectFormDTO;
import com.epmet.dto.form.BlockChainProcessProjectFormDTO;
import com.epmet.dto.form.ProjectApplyAssistFormDTO;
import com.epmet.dto.form.yantai.YtSyncStaffIdFormDTO;
import com.epmet.dto.result.ProjectAssistResult;
import com.epmet.dto.result.UploadFileResultDTO;
import com.epmet.feign.fallback.EpmetThirdOpenFeignClientFallbackFactory;
@ -75,6 +76,9 @@ public interface EpmetThirdOpenFeignClient {
@PostMapping("/third/blockchain/project/process")
Result blockChainProcessProject(@RequestBody BlockChainProcessProjectFormDTO input);
@PostMapping("/third/dataSync/update-staff")
Result dataSyncUpdateStaff(@RequestBody YtSyncStaffIdFormDTO ytSyncStaffIdFormDTO);
class MultipartSupportConfig {
@Autowired

20
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/ThirdOpenFeignClient.java

@ -8,6 +8,7 @@ import com.epmet.feign.fallback.ThirdOpenFeignClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@ -69,4 +70,23 @@ public interface ThirdOpenFeignClient {
*/
@PostMapping("/third/blockchain/project/process")
Result blockChainProcessProject(@RequestBody BlockChainProcessProjectFormDTO input);
/**
* Desc: 从统一认证中心 拉取组织信息
* @param orgId
* @author zxc
* @date 2022/10/18 16:50
*/
@PostMapping("/third/dataSync/yanTai/sync/org")
Result<Boolean> getYanTaiOrgInfo(@RequestParam("orgId") String orgId);
/**
* Desc: 从统一认证中心 拉取用户信息
* @param orgId
* @author zxc
* @date 2022/10/18 16:50
*/
@PostMapping("/third/dataSync/yanTai/sync/user")
Result<Boolean> getYanTaiUserInfo(@RequestParam("orgId") String orgId);
}

5
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdOpenFeignClientFallback.java

@ -6,6 +6,7 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.BlockChainCreateProjectFormDTO;
import com.epmet.dto.form.BlockChainProcessProjectFormDTO;
import com.epmet.dto.form.ProjectApplyAssistFormDTO;
import com.epmet.dto.form.yantai.YtSyncStaffIdFormDTO;
import com.epmet.dto.result.ProjectAssistResult;
import com.epmet.dto.result.UploadFileResultDTO;
import com.epmet.feign.EpmetThirdOpenFeignClient;
@ -57,4 +58,8 @@ public class EpmetThirdOpenFeignClientFallback implements EpmetThirdOpenFeignCli
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "processProject", input);
}
@Override
public Result dataSyncUpdateStaff(YtSyncStaffIdFormDTO ytSyncStaffIdFormDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "updateStaff", ytSyncStaffIdFormDTO);
}
}

10
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/ThirdOpenFeignClientFallback.java

@ -40,4 +40,14 @@ public class ThirdOpenFeignClientFallback implements ThirdOpenFeignClient {
public Result blockChainProcessProject(BlockChainProcessProjectFormDTO input) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "blockChainProcessProject", input);
}
@Override
public Result<Boolean> getYanTaiOrgInfo(String orgId) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "getYanTaiOrgInfo", orgId);
}
@Override
public Result<Boolean> getYanTaiUserInfo(String orgId) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "getYanTaiUserInfo", orgId);
}
}

12
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/YanTaiConstant.java

@ -0,0 +1,12 @@
package com.epmet.constant;
/**
* @Author zxc
* @DateTime 2022/10/18 16:43
* @DESC
*/
public interface YanTaiConstant {
String YT_CUSTOMER_ID = "1535072605621841922";
}

84
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/DataSyncUserAndOrgController.java

@ -0,0 +1,84 @@
package com.epmet.controller.yantai;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.dto.form.yantai.YtSyncStaffIdFormDTO;
import com.epmet.dto.form.yantai.YtUserPageFormDTO;
import com.epmet.dto.result.yantai.DataSyncOrgDataDTO;
import com.epmet.dto.result.yantai.YtUserPageResDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* desc: 从各个平台-同步用户和组织数据到本地 用于生成本系统账号
*
* @author LiuJanJun
* @date 2022/10/17 3:41 下午
*/
@RestController
@RequestMapping("dataSync")
public class DataSyncUserAndOrgController {
@Autowired
private DataSyncUserAndOrgService dataSyncUserAndOrgService;
/**
* desc:从统一认证中心 拉取用户信息
* @return
*/
@PostMapping("yanTai/sync/user")
public Result<Boolean> getYanTaiUserInfo(@RequestParam("orgId")String orgId) {
Boolean flag = dataSyncUserAndOrgService.yanTaiSyncUser(orgId);
return new Result<Boolean>().ok(flag);
}
/**
* desc:从统一认证中心 拉取组织信息
* @return
*/
@PostMapping("yanTai/sync/org")
public Result<Boolean> getYanTaiOrgInfo(@RequestParam("orgId")String orgId) {
Boolean extJson = dataSyncUserAndOrgService.yanTaiSyncOrg(orgId);
return new Result<Boolean>().ok(extJson);
}
/**
* 运营端统一认证 列表查询
*
* @param formDTO
* @return
*/
@PostMapping("page-user")
public Result<PageData<YtUserPageResDTO>> pageUser(@RequestBody YtUserPageFormDTO formDTO) {
return new Result<PageData<YtUserPageResDTO>>().ok(dataSyncUserAndOrgService.pageUser(formDTO));
}
/**
* 工作端新增完用户后需要调用此接口更新data_sync_user_data
*
* @param formDTO
* @return
*/
@PostMapping("update-staff")
public Result updateStaff(@RequestBody YtSyncStaffIdFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AddGroup.class);
dataSyncUserAndOrgService.updateStaff(formDTO.getCustomerId(),formDTO.getOperUserId(),formDTO.getStaffId(),formDTO.getName(),formDTO.getMobile());
return new Result();
}
/**
* 运营端统一认证 列表查询条件 那颗树 调用此接口
* @param formDTO
* @return
*/
@PostMapping("ytorglist")
public Result<List<DataSyncOrgDataDTO>> ytOrgList(@RequestBody YtUserPageFormDTO formDTO){
List<DataSyncOrgDataDTO> list=dataSyncUserAndOrgService.ytOrgList(formDTO.getOrgId());
return new Result<List<DataSyncOrgDataDTO>>().ok(list);
}
}

41
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/DataSyncUserAndOrgService.java

@ -0,0 +1,41 @@
package com.epmet.controller.yantai;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.form.yantai.YtUserPageFormDTO;
import com.epmet.dto.result.yantai.DataSyncOrgDataDTO;
import com.epmet.dto.result.yantai.YtUserPageResDTO;
import java.util.List;
/**
* @author liujianjun
*/
public interface DataSyncUserAndOrgService {
Boolean yanTaiSyncUser(String organizationId);
Boolean yanTaiSyncOrg(String organizationId);
/**
* 运营端-统一认证
* 用户列表
* @param formDTO
* @return
*/
PageData<YtUserPageResDTO> pageUser(YtUserPageFormDTO formDTO);
/**
* 工作端新增完用户后需要调用此接口更新data_sync_user_data
* @param customerId
* @param staffId
* @param name
* @param mobile
*/
int updateStaff(String customerId,String operUserId, String staffId, String name, String mobile);
/**
* 根据组织id查询下级组织
* @param pid
* @return
*/
List<DataSyncOrgDataDTO> ytOrgList(String pid);
}

180
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/DataSyncUserAndOrgServiceImpl.java

@ -0,0 +1,180 @@
package com.epmet.controller.yantai;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.redis.common.bean.CustomerStaffInfoDTOCache;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.api.yt.OrgData;
import com.epmet.commons.tools.utils.api.yt.UserData;
import com.epmet.commons.tools.utils.api.yt.YantaiApi;
import com.epmet.dao.yantai.DataSyncOrgDataDao;
import com.epmet.dao.yantai.DataSyncUserDataDao;
import com.epmet.dto.CustomerStaffDTO;
import com.epmet.dto.form.yantai.YtUserPageFormDTO;
import com.epmet.dto.result.yantai.DataSyncOrgDataDTO;
import com.epmet.dto.result.yantai.YtUserPageResDTO;
import com.epmet.entity.yantai.DataSyncOrgDataEntity;
import com.epmet.entity.yantai.DataSyncUserDataEntity;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.service.DataSyncOrgDataService;
import com.epmet.service.DataSyncUserDataService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import static com.epmet.constant.YanTaiConstant.YT_CUSTOMER_ID;
/**
* desc:烟台 从认证中心同步组织和用户信息 到本地
*
* @author: LiuJanJun
* @date: 2022/10/17 3:42 下午
* @version: 1.0
*/
@Service
@Slf4j
public class DataSyncUserAndOrgServiceImpl implements DataSyncUserAndOrgService {
@Autowired
private DataSyncUserDataDao dataSyncUserDataDao;
@Autowired
private DataSyncOrgDataDao dataSyncOrgDataDao;
@Autowired
private DataSyncOrgDataService dataSyncOrgDataService;
@Autowired
private DataSyncUserDataService dataSyncUserDataService;
@Autowired
private EpmetUserOpenFeignClient epmetUserOpenFeignClient;
/**
* Desc: 从org表查询组织在根据组织去查询用户
* @param organizationId
* @author zxc
* @date 2022/10/19 13:27
*/
@Override
public Boolean yanTaiSyncUser(String organizationId) {
String customerId = YT_CUSTOMER_ID;
// 缓存初始化staffs
epmetUserOpenFeignClient.allCustomerStaffInCache(customerId);
Integer no = NumConstant.ONE;
Integer size;
do {
// 分批获取org
PageInfo<com.epmet.dto.DataSyncOrgDataDTO> pageInfo = PageHelper.startPage(no, NumConstant.ONE_HUNDRED).doSelectPageInfo(() -> dataSyncOrgDataDao.getAllList(customerId));
size = pageInfo.getList().size();
if (CollectionUtils.isNotEmpty(pageInfo.getList())){
List<DataSyncUserDataEntity> needInsert = new ArrayList<>();
pageInfo.getList().forEach(org -> {
// 根据org查用户
List<UserData> data = YantaiApi.getUserByOuGuid(org.getOrganizationId());
if (CollectionUtils.isNotEmpty(data)){
for (UserData u : data) {
CustomerStaffInfoDTOCache staffInfo = CustomerStaffRedis.getStaffInfoByMobile(customerId, u.getMobileTelephoneNumber());
DataSyncUserDataEntity entity = ConvertUtils.sourceToTarget(u, DataSyncUserDataEntity.class);
entity.setCustomerId(customerId);
entity.setRemark("");
if (null == staffInfo){
entity.setStatus(NumConstant.ZERO_STR);
entity.setOrganizationId("");
entity.setStaffId("");
}else {
CustomerStaffInfoCacheResult staffInfo1 = CustomerStaffRedis.getStaffInfo(customerId, staffInfo.getUserId());
entity.setStatus(NumConstant.ONE_STR);
entity.setOrganizationId(null == staffInfo1 ? "" : staffInfo1.getAgencyId());
entity.setStaffId(staffInfo.getUserId());
}
needInsert.add(entity);
}
}
});
dataSyncUserDataService.insertBatch(needInsert,NumConstant.FIVE_HUNDRED);
}
no++;
}while (size == NumConstant.ONE_HUNDRED);
// 删除staffs缓存
CustomerStaffRedis.delAllCustomerStaff(customerId);
return false;
}
@Override
public Boolean yanTaiSyncOrg(String organizationId) {
List<OrgData> data = YantaiApi.getChildOuInfoByGuid(organizationId);
if (CollectionUtils.isNotEmpty(data)){
List<OrgData> needInsert = new ArrayList<>();
data.forEach(d -> {
needInsert.add(d);
disposeYanTaiSyncOrg(d.getOrganizationId(),needInsert);
});
List<DataSyncOrgDataEntity> entities = needInsert.stream().map(m -> {
DataSyncOrgDataEntity entity = ConvertUtils.sourceToTarget(m, DataSyncOrgDataEntity.class);
entity.setCustomerId(YT_CUSTOMER_ID);
entity.setPid("");
entity.setParentOrgName("");
entity.setPids("");
return entity;
}).collect(Collectors.toList());
dataSyncOrgDataService.insertBatch(entities, NumConstant.ONE_HUNDRED);
}
return false;
}
public void disposeYanTaiSyncOrg(String organizationId, List<OrgData> needInsert){
List<OrgData> data = YantaiApi.getChildOuInfoByGuid(organizationId);
if (CollectionUtils.isNotEmpty(data)){
needInsert.addAll(data);
data.forEach(d -> {
disposeYanTaiSyncOrg(d.getOrganizationId(),needInsert);
});
}
}
/**
* 运营端-统一认证
* 用户列表
*
* @param formDTO
* @return
*/
@Override
public PageData<YtUserPageResDTO> pageUser(YtUserPageFormDTO formDTO) {
PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage());
List<YtUserPageResDTO> list = dataSyncUserDataDao.pageUser(formDTO);
PageInfo<YtUserPageResDTO> pageInfo = new PageInfo<>(list);
return new PageData<>(list, pageInfo.getTotal());
}
/**
* 工作端新增完用户后需要调用此接口更新data_sync_user_data
*
* @param customerId
* @param staffId
* @param name
* @param mobile
*/
@Override
public int updateStaff(String customerId, String operUserId,String staffId, String name, String mobile) {
return dataSyncUserDataDao.updateStaff(customerId,operUserId,staffId,name,mobile);
}
/**
* 根据组织id查询下级组织
*
* @param pid
* @return
*/
@Override
public List<DataSyncOrgDataDTO> ytOrgList(String pid) {
List<DataSyncOrgDataDTO> list=dataSyncOrgDataDao.queryList(pid);
return list;
}
}

199
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/SM4UtilsForYanTai.java

@ -0,0 +1,199 @@
package com.epmet.controller.yantai;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.Security;
/**
* 烟台的认证中心-国密sm4加解密
*/
public class SM4UtilsForYanTai {
private static String SM4_KEY = "yaweisoftware@xy";
//编码格式
private static final Charset encryptCharset = StandardCharsets.UTF_8;
public enum Algorithm {
SM4("SM4","SM4","国密四,key长16byte");
private String keyAlgorithm;
private String transformation;
private String description;//描述
Algorithm(String keyAlgorithm, String transformation, String description) {
this.keyAlgorithm = keyAlgorithm;
this.transformation = transformation;
this.description = description;
}
public String getKeyAlgorithm() {
return this.keyAlgorithm;
}
public String getTransformation() {
return this.transformation;
}
public String getDescription() {
return this.description;
}
}
private static final String PROVIDER_NAME = "BC";
static {
Security.addProvider(new BouncyCastleProvider());
}
/**
* 自定字符串产生密钥
* @param algorithm 加解密算法
* @param keyStr 密钥字符串
* @param charset 编码字符集
* @return 密钥
*/
public static SecretKey genKeyByStr(Algorithm algorithm, String keyStr, Charset charset) {
return readKeyFromBytes(algorithm, keyStr.getBytes(charset));
}
/**
* 根据指定字节数组产生密钥
* @param algorithm 加解密算法
* @param keyBytes 密钥字节数组
* @return 密钥
*/
public static SecretKey readKeyFromBytes(Algorithm algorithm, byte[] keyBytes) {
return new SecretKeySpec(keyBytes, algorithm.getKeyAlgorithm());
}
/****************************加密*********************************/
/**
* 加密字符串并进行base64编码
* @param algorithm 加解密算法
* @param key 密钥
* @param data 明文
* @param charset 编码字符集
* @return 密文
* @throws InvalidKeyException 密钥错误
*/
public static String encryptBase64(Algorithm algorithm, SecretKey key, String data, Charset charset) throws InvalidKeyException {
return Base64.encodeBase64String(encrypt(algorithm, key, data.getBytes(charset)));
}
/**
* 加密字节数组
* @param algorithm 加解密算法
* @param key 密钥
* @param data 明文
* @return 密文
* @throws InvalidKeyException 密钥错误
*/
public static byte[] encrypt(Algorithm algorithm, SecretKey key, byte[] data) throws InvalidKeyException {
try {
return cipherDoFinal(algorithm, Cipher.ENCRYPT_MODE, key, data);
} catch (BadPaddingException e) {
throw new RuntimeException(e);//明文没有具体格式要求,不会出错。所以这个异常不需要外部捕获。
}
}
/**
* 加解密字节数组
* @param algorithm 加解密算法
* @param opmode 操作1加密2解密
* @param key 密钥
* @param data 数据
* @throws InvalidKeyException 密钥错误
* @throws BadPaddingException 解密密文错误(加密模式没有)
*/
private static byte[] cipherDoFinal(Algorithm algorithm, int opmode, SecretKey key, byte[] data) throws InvalidKeyException, BadPaddingException {
Cipher cipher;
try {
cipher = Cipher.getInstance(algorithm.getTransformation(), PROVIDER_NAME);
} catch (Exception e) {
//NoSuchAlgorithmException:加密算法名是本工具类提供的,如果错了业务没有办法处理。所以这个异常不需要外部捕获。
//NoSuchProviderException:Provider是本工具类提供的,如果错了业务没有办法处理。所以这个异常不需要外部捕获。
//NoSuchPaddingException:没有特定的填充机制,与环境有关,业务没有办法处理。所以这个异常不需要外部捕获。
throw new RuntimeException(e);
}
cipher.init(opmode, key);
try {
return cipher.doFinal(data);
} catch (IllegalBlockSizeException e) {
throw new RuntimeException(e);//业务不需要将数据分块(好像由底层处理了),如果错了业务没有办法处理。所以这个异常不需要外部捕获。
}
}
/****************************解密*********************************/
/**
* 对字符串先进行base64解码再解密
* @param algorithm 加解密算法
* @param key 密钥
* @param data 密文
* @param charset 编码字符集
* @return 明文
* @throws InvalidKeyException 密钥错误
* @throws BadPaddingException 密文错误
*/
public static String decryptBase64(Algorithm algorithm, SecretKey key, String data, Charset charset)
throws InvalidKeyException, BadPaddingException {
return new String(decrypt(algorithm, key, Base64.decodeBase64(data)), charset);
}
/**
* 解密字节数组
* @param algorithm 加解密算法
* @param key 密钥
* @param data 密文
* @return 明文
* @throws InvalidKeyException 密钥错误
* @throws BadPaddingException 密文错误
*/
public static byte[] decrypt(Algorithm algorithm, SecretKey key, byte[] data) throws InvalidKeyException, BadPaddingException {
return cipherDoFinal(algorithm, Cipher.DECRYPT_MODE, key, data);
}
public static String Encrypt(String data) throws InvalidKeyException {
SecretKey key = genKeyByStr(Algorithm.SM4, SM4_KEY, encryptCharset);
return encryptBase64(Algorithm.SM4, key, data, encryptCharset);
}
public static String Decrypt(String data) throws BadPaddingException, InvalidKeyException {
SecretKey key = genKeyByStr(Algorithm.SM4, SM4_KEY, encryptCharset);
return decryptBase64(Algorithm.SM4, key, data, encryptCharset);
}
//加密
public static String dealEncryptData(Object data) throws JsonProcessingException, InvalidKeyException {
ObjectMapper objectMapper = new ObjectMapper();
String dataString = "";
try {
if(data instanceof String){
dataString = (String) data;
}else {
dataString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(data);
}
String dataEncrypt = Encrypt(dataString);
return dataEncrypt;
}catch (Exception e){
return dataString;
}
}
//解密
public static String dealDecryptData(Object data) throws JsonProcessingException, BadPaddingException, InvalidKeyException {
String dataString = "";
try {
ObjectMapper objectMapper = new ObjectMapper();
if (data instanceof String) {
dataString = (String) data;
} else {
dataString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(data);
}
String dataDecrypt = Decrypt(dataString);
return dataDecrypt;
}catch (Exception e){
return dataString;
}
}
}

27
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/yantai/DataSyncOrgDataDao.java

@ -0,0 +1,27 @@
package com.epmet.dao.yantai;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.result.yantai.DataSyncOrgDataDTO;
import com.epmet.entity.yantai.DataSyncOrgDataEntity;
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 2022-10-18
*/
@Mapper
public interface DataSyncOrgDataDao extends BaseDao<DataSyncOrgDataEntity> {
/**
* 根据pid查询下一级组织列表
* @param pid
* @return
*/
List<DataSyncOrgDataDTO> queryList(@Param("pid") String pid);
List<com.epmet.dto.DataSyncOrgDataDTO> getAllList(@Param("customerId") String customerId);
}

41
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/yantai/DataSyncUserDataDao.java

@ -0,0 +1,41 @@
package com.epmet.dao.yantai;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.form.yantai.YtUserPageFormDTO;
import com.epmet.dto.result.yantai.YtUserPageResDTO;
import com.epmet.entity.yantai.DataSyncUserDataEntity;
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 2022-10-18
*/
@Mapper
public interface DataSyncUserDataDao extends BaseDao<DataSyncUserDataEntity> {
/**
* 运营端统一认证 列表查询
* @param formDTO
* @return
*/
List<YtUserPageResDTO> pageUser(YtUserPageFormDTO formDTO);
/**
* 更新data_sync_user_data 为已创建记录staffId
* @param customerId
* @param operUserId
* @param staffId
* @param name
* @param mobile
* @return
*/
int updateStaff(@Param("customerId") String customerId,
@Param("operUserId")String operUserId,
@Param("staffId")String staffId,
@Param("name")String name,
@Param("mobile")String mobile);
}

106
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/yantai/DataSyncOrgDataEntity.java

@ -0,0 +1,106 @@
package com.epmet.entity.yantai;
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 2022-10-18
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("data_sync_org_data")
public class DataSyncOrgDataEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 联系人姓名
*/
private String contact;
/**
* 联系电话号码
*/
private String contacttelephoneNumber;
/**
* 详细地址
*/
private String detailAddress;
/**
* 组织机构第一名称
*/
private String firstnameofOrganization;
/**
* 组织机构全称
*/
private String nameofOrganization;
/**
* 排序号码
*/
private String orderNumber;
/**
* 组织机构简称
*/
private String organizatioNabbreviation;
/**
* 组织机构ID
*/
private String organizationId;
/**
* 组织机构级别
*/
private String organizationLevel;
/**
* 组织机构路径
*/
private String organizationPath;
/**
* 组织机构类型
*/
private String organizationType;
/**
* 注册类型
*/
private String registrationType;
/**
* 统一社会信用代码
*/
private String unifiedsocialcreditId;
/**
* 客户id;烟台id
*/
private String customerId;
/**
* 上级组织机构id:ORGANIZATION_ID; 根级组织赋值0
*/
private String pid;
/**
* 上级组织机构名称ORGANIZATIO_NABBREVIATION
*/
private String parentOrgName;
/**
* 所有上级组织不包含本身
*/
private String pids;
}

91
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/yantai/DataSyncUserDataEntity.java

@ -0,0 +1,91 @@
package com.epmet.entity.yantai;
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 2022-10-18
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("data_sync_user_data")
public class DataSyncUserDataEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 性别:0未知1男2女
*/
private String gender;
/**
* 手机号码
*/
private String mobileTelephoneNumber;
/**
* 排序号码
*/
private String orderNumber;
/**
* 职务
*/
private String position;
/**
* 职级
*/
private String positionLevel;
/**
* 电话号码
*/
private String telephoneNumber;
/**
* 统一用户编码
*/
private String userGuid;
/**
* 用户姓名
*/
private String userName;
/**
* 人员路径
*/
private String userPath;
/**
* data_sync_org_data.组织机构ID;
*/
private String organizationId;
/**
* 客户id
*/
private String customerId;
/**
* 0未创建已创建
*/
private String status;
/**
* customer_staff.userId
*/
private String staffId;
/**
* 备注目前为空
*/
private String remark;
}

78
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/DataSyncOrgDataService.java

@ -0,0 +1,78 @@
package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.DataSyncOrgDataDTO;
import com.epmet.entity.yantai.DataSyncOrgDataEntity;
import java.util.List;
import java.util.Map;
/**
*
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-10-18
*/
public interface DataSyncOrgDataService extends BaseService<DataSyncOrgDataEntity> {
/**
* 默认分页
*
* @param params
* @return PageData<DataSyncOrgDataDTO>
* @author generator
* @date 2022-10-18
*/
PageData<DataSyncOrgDataDTO> page(Map<String, Object> params);
/**
* 默认查询
*
* @param params
* @return java.util.List<DataSyncOrgDataDTO>
* @author generator
* @date 2022-10-18
*/
List<DataSyncOrgDataDTO> list(Map<String, Object> params);
/**
* 单条查询
*
* @param id
* @return DataSyncOrgDataDTO
* @author generator
* @date 2022-10-18
*/
DataSyncOrgDataDTO get(String id);
/**
* 默认保存
*
* @param dto
* @return void
* @author generator
* @date 2022-10-18
*/
void save(DataSyncOrgDataDTO dto);
/**
* 默认更新
*
* @param dto
* @return void
* @author generator
* @date 2022-10-18
*/
void update(DataSyncOrgDataDTO dto);
/**
* 批量删除
*
* @param ids
* @return void
* @author generator
* @date 2022-10-18
*/
void delete(String[] ids);
}

78
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/DataSyncUserDataService.java

@ -0,0 +1,78 @@
package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.DataSyncUserDataDTO;
import com.epmet.entity.yantai.DataSyncUserDataEntity;
import java.util.List;
import java.util.Map;
/**
*
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-10-18
*/
public interface DataSyncUserDataService extends BaseService<DataSyncUserDataEntity> {
/**
* 默认分页
*
* @param params
* @return PageData<DataSyncUserDataDTO>
* @author generator
* @date 2022-10-18
*/
PageData<DataSyncUserDataDTO> page(Map<String, Object> params);
/**
* 默认查询
*
* @param params
* @return java.util.List<DataSyncUserDataDTO>
* @author generator
* @date 2022-10-18
*/
List<DataSyncUserDataDTO> list(Map<String, Object> params);
/**
* 单条查询
*
* @param id
* @return DataSyncUserDataDTO
* @author generator
* @date 2022-10-18
*/
DataSyncUserDataDTO get(String id);
/**
* 默认保存
*
* @param dto
* @return void
* @author generator
* @date 2022-10-18
*/
void save(DataSyncUserDataDTO dto);
/**
* 默认更新
*
* @param dto
* @return void
* @author generator
* @date 2022-10-18
*/
void update(DataSyncUserDataDTO dto);
/**
* 批量删除
*
* @param ids
* @return void
* @author generator
* @date 2022-10-18
*/
void delete(String[] ids);
}

83
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/DataSyncOrgDataServiceImpl.java

@ -0,0 +1,83 @@
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.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.dao.yantai.DataSyncOrgDataDao;
import com.epmet.dto.DataSyncOrgDataDTO;
import com.epmet.entity.yantai.DataSyncOrgDataEntity;
import com.epmet.service.DataSyncOrgDataService;
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.util.Arrays;
import java.util.List;
import java.util.Map;
/**
*
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-10-18
*/
@Service
public class DataSyncOrgDataServiceImpl extends BaseServiceImpl<DataSyncOrgDataDao, DataSyncOrgDataEntity> implements DataSyncOrgDataService {
@Override
public PageData<DataSyncOrgDataDTO> page(Map<String, Object> params) {
IPage<DataSyncOrgDataEntity> page = baseDao.selectPage(
getPage(params, FieldConstant.CREATED_TIME, false),
getWrapper(params)
);
return getPageData(page, DataSyncOrgDataDTO.class);
}
@Override
public List<DataSyncOrgDataDTO> list(Map<String, Object> params) {
List<DataSyncOrgDataEntity> entityList = baseDao.selectList(getWrapper(params));
return ConvertUtils.sourceToTarget(entityList, DataSyncOrgDataDTO.class);
}
private QueryWrapper<DataSyncOrgDataEntity> getWrapper(Map<String, Object> params){
String id = (String)params.get(FieldConstant.ID_HUMP);
QueryWrapper<DataSyncOrgDataEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id);
return wrapper;
}
@Override
public DataSyncOrgDataDTO get(String id) {
DataSyncOrgDataEntity entity = baseDao.selectById(id);
return ConvertUtils.sourceToTarget(entity, DataSyncOrgDataDTO.class);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void save(DataSyncOrgDataDTO dto) {
DataSyncOrgDataEntity entity = ConvertUtils.sourceToTarget(dto, DataSyncOrgDataEntity.class);
insert(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(DataSyncOrgDataDTO dto) {
DataSyncOrgDataEntity entity = ConvertUtils.sourceToTarget(dto, DataSyncOrgDataEntity.class);
updateById(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(String[] ids) {
// 逻辑删除(@TableLogic 注解)
baseDao.deleteBatchIds(Arrays.asList(ids));
}
}

83
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/DataSyncUserDataServiceImpl.java

@ -0,0 +1,83 @@
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.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.dao.yantai.DataSyncUserDataDao;
import com.epmet.dto.DataSyncUserDataDTO;
import com.epmet.entity.yantai.DataSyncUserDataEntity;
import com.epmet.service.DataSyncUserDataService;
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.util.Arrays;
import java.util.List;
import java.util.Map;
/**
*
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-10-18
*/
@Service
public class DataSyncUserDataServiceImpl extends BaseServiceImpl<DataSyncUserDataDao, DataSyncUserDataEntity> implements DataSyncUserDataService {
@Override
public PageData<DataSyncUserDataDTO> page(Map<String, Object> params) {
IPage<DataSyncUserDataEntity> page = baseDao.selectPage(
getPage(params, FieldConstant.CREATED_TIME, false),
getWrapper(params)
);
return getPageData(page, DataSyncUserDataDTO.class);
}
@Override
public List<DataSyncUserDataDTO> list(Map<String, Object> params) {
List<DataSyncUserDataEntity> entityList = baseDao.selectList(getWrapper(params));
return ConvertUtils.sourceToTarget(entityList, DataSyncUserDataDTO.class);
}
private QueryWrapper<DataSyncUserDataEntity> getWrapper(Map<String, Object> params){
String id = (String)params.get(FieldConstant.ID_HUMP);
QueryWrapper<DataSyncUserDataEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id);
return wrapper;
}
@Override
public DataSyncUserDataDTO get(String id) {
DataSyncUserDataEntity entity = baseDao.selectById(id);
return ConvertUtils.sourceToTarget(entity, DataSyncUserDataDTO.class);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void save(DataSyncUserDataDTO dto) {
DataSyncUserDataEntity entity = ConvertUtils.sourceToTarget(dto, DataSyncUserDataEntity.class);
insert(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(DataSyncUserDataDTO dto) {
DataSyncUserDataEntity entity = ConvertUtils.sourceToTarget(dto, DataSyncUserDataEntity.class);
updateById(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(String[] ids) {
// 逻辑删除(@TableLogic 注解)
baseDao.deleteBatchIds(Arrays.asList(ids));
}
}

5
epmet-module/epmet-third/epmet-third-server/src/main/resources/logback-spring.xml

@ -140,10 +140,9 @@
</appender>
<!-- 开发、测试环境 -->
<springProfile name="dev,test">
<springProfile name="local,dev,test">
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springboot.sample" level="INFO"/>
<logger name="com.epmet.dao" level="INFO"/>
<logger name="com.epmet.dao" level="DEBUG"/>
<logger name="com.taobao" level="DEBUG"/>
<root level="INFO">
@ -158,7 +157,7 @@
<springProfile name="prod">
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springboot.sample" level="INFO"/>
<logger name="com.epmet.dao" level="INFO"/>
<logger name="com.epmet.dao" level="DEBUG"/>
<logger name="com.taobao" level="DEBUG"/>
<root level="INFO">
<appender-ref ref="CONSOLE"/>

55
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/yantai/DataSyncOrgDataDao.xml

@ -0,0 +1,55 @@
<?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.yantai.DataSyncOrgDataDao">
<resultMap type="com.epmet.entity.yantai.DataSyncOrgDataEntity" id="dataSyncOrgDataMap">
<result property="id" column="ID"/>
<result property="contact" column="CONTACT"/>
<result property="contacttelephoneNumber" column="CONTACTTELEPHONE_NUMBER"/>
<result property="detailAddress" column="DETAIL_ADDRESS"/>
<result property="firstnameofOrganization" column="FIRSTNAMEOF_ORGANIZATION"/>
<result property="nameofOrganization" column="NAMEOF_ORGANIZATION"/>
<result property="orderNumber" column="ORDER_NUMBER"/>
<result property="organizatioNabbreviation" column="ORGANIZATIO_NABBREVIATION"/>
<result property="organizationId" column="ORGANIZATION_ID"/>
<result property="organizationLevel" column="ORGANIZATION_LEVEL"/>
<result property="organizationPath" column="ORGANIZATION_PATH"/>
<result property="organizationType" column="ORGANIZATION_TYPE"/>
<result property="registrationType" column="REGISTRATION_TYPE"/>
<result property="unifiedsocialcreditId" column="UNIFIEDSOCIALCREDIT_ID"/>
<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"/>
<result property="customerId" column="CUSTOMER_ID"/>
<result property="pid" column="PID"/>
<result property="parentOrgName" column="PARENT_ORG_NAME"/>
<result property="pids" column="PIDS"/>
</resultMap>
<select id="queryList" parameterType="map" resultType="com.epmet.dto.result.yantai.DataSyncOrgDataDTO">
select
d.ORGANIZATION_ID as orgId,
d.ORGANIZATIO_NABBREVIATION as orgName,
d.PID,
(
case when (select count(1) from data_sync_org_data d1 where d1.pid=d.ORGANIZATION_ID)>0 then 1 else 0
end
)as haveChild
From data_sync_org_data d
where d.del_flag='0'
<if test='null != pid and "" != pid'>
and d.pid = #{pid}
</if>
order by d.ORDER_NUMBER asc
</select>
<select id="getAllList" resultType="com.epmet.dto.DataSyncOrgDataDTO">
select * from data_sync_org_data
where del_flag = '0'
and CUSTOMER_ID = #{customerId}
order by ORDER_NUMBER asc
</select>
</mapper>

90
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/yantai/DataSyncUserDataDao.xml

@ -0,0 +1,90 @@
<?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.yantai.DataSyncUserDataDao">
<resultMap type="com.epmet.entity.yantai.DataSyncUserDataEntity" id="dataSyncUserDataMap">
<result property="id" column="ID"/>
<result property="gender" column="GENDER"/>
<result property="mobileTelephoneNumber" column="MOBILE_TELEPHONE_NUMBER"/>
<result property="orderNumber" column="ORDER_NUMBER"/>
<result property="position" column="POSITION"/>
<result property="positionLevel" column="POSITION_LEVEL"/>
<result property="telephoneNumber" column="TELEPHONE_NUMBER"/>
<result property="userGuid" column="USER_GUID"/>
<result property="userName" column="USER_NAME"/>
<result property="userPath" column="USER_PATH"/>
<result property="organizationId" column="ORGANIZATION_ID"/>
<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"/>
<result property="customerId" column="CUSTOMER_ID"/>
<result property="status" column="STATUS"/>
<result property="staffId" column="STAFF_ID"/>
<result property="remark" column="REMARK"/>
</resultMap>
<!-- 运营端,统一认证 列表返参 -->
<select id="pageUser" parameterType="com.epmet.dto.form.yantai.YtUserPageFormDTO" resultType="com.epmet.dto.result.yantai.YtUserPageResDTO">
SELECT
u.USER_GUID AS userGuid,
u.ORGANIZATION_ID AS organizationId,
(case when o.PARENT_ORG_NAME is not null and LENGTH(o.PARENT_ORG_NAME)>0
then concat(o.PARENT_ORG_NAME,'-',o.ORGANIZATIO_NABBREVIATION)
else o.ORGANIZATIO_NABBREVIATION
end)as orgName,
u.USER_NAME AS userName,
u.TELEPHONE_NUMBER AS telephoneNumber,
u.GENDER AS gender,
u.`STATUS` AS status,
IFNULL(u.STAFF_ID,'') AS staffId,
IFNULL(u.REMARK, '' ) AS remark,
u.CUSTOMER_ID as customerId
FROM
data_sync_user_data u
LEFT JOIN data_sync_org_data o ON ( u.ORGANIZATION_ID = o.ORGANIZATION_ID )
WHERE
u.DEL_FLAG = '0'
AND o.DEL_FLAG = '0'
<if test="null != type and type ==0">
<if test='null != orgId and "" != orgId'>
AND u.ORGANIZATION_ID = #{orgId}
</if>
</if>
<if test="null != type and type ==1">
<if test='null != orgId and "" != orgId'>
AND (o.ORGANIZATION_ID = #{orgId} OR o.pids LIKE concat( '%', #{orgId}, '%' ) )
</if>
</if>
<if test='null != name and "" != name'>
AND u.USER_NAME LIKE concat( '%', #{name}, '%' )
</if>
<if test='null != mobile and "" != mobile'>
AND u.MOBILE_TELEPHONE_NUMBER LIKE concat( '%', #{mobile}, '%' )
</if>
<if test='null != status and "" != status'>
AND u.`STATUS` = #{status}
</if>
order by o.ORDER_NUMBER asc,u.ORDER_NUMBER asc
</select>
<update id="updateStaff" parameterType="map">
UPDATE data_sync_user_data
SET UPDATED_BY = #{operUserId},
UPDATED_TIME = NOW(),
`STATUS` = '1',
STAFF_ID = #{staffId},
CUSTOMER_ID = #{customerId}
WHERE
MOBILE_TELEPHONE_NUMBER = #{mobile}
AND USER_NAME = #{name}
AND del_flag = '0'
</update>
</mapper>

2
epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/GovMenuServiceImpl.java

@ -234,7 +234,7 @@ public class GovMenuServiceImpl extends BaseServiceImpl<GovMenuDao, GovMenuEntit
// PC端 每个客户的菜单信息,不放入缓存,每次登陆重新查询。
// 或者 你可以选择,在给每个客户 配置可见菜单的时候, 在saveCustomerMenu方法中,增加更新缓存的逻辑
tableName = getTableName(tableName);
return getCustomerMenuList(tokenDto.getCustomerId(), MenuTypeEnum.MENU.value(),tableName,tokenDto.getUserId());
return getCustomerMenuList(tokenDto.getCustomerId(), null,tableName,tokenDto.getUserId());
}
@Override

14
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/IssueApplicationDTO.java

@ -73,6 +73,8 @@ public class IssueApplicationDTO implements Serializable {
* 网格ID 居民端议题对应一个网格Id
*/
private String gridId;
private String orgId;
private String orgIdPath;
/**
* 审核通过后对应的 议题id
@ -130,4 +132,16 @@ public class IssueApplicationDTO implements Serializable {
*/
private Long latestTime;
private String address;
/**
* 经度
*/
private String longitude;
/**
* 纬度
*/
private String latitude;
}

116
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/IssueAttachmentDTO.java

@ -0,0 +1,116 @@
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* issue库附件表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-09-30
*/
@Data
public class IssueAttachmentDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 客户ID
*/
private String customerId;
/**
* 业务id
*/
private String businessId;
/**
* 议题issue
*/
private String attachTo;
/**
* 附件名
*/
private String name;
/**
* 文件格式JPGPNGPDFJPEGBMPMP4WMAM4AMP3DOCDOCXXLS
*/
private String format;
/**
* 附件类型图片 - image 视频 - video 语音 - voice 文档 - doc
*/
private String type;
/**
* 附件地址
*/
private String url;
/**
* 排序字段
*/
private Integer sort;
/**
* 附件状态审核中auditing
auto_passed: 自动通过
review结果不确定需要人工审核
block: 结果违规
rejected人工审核驳回;
approved人工审核通过
现在图片是同步审核的所以图片只有auto_passed一种状态
*/
private String status;
/**
* 失败原因
*/
private String reason;
/**
* 语音或视频时长,
*/
private Integer duration;
/**
* 删除标记 0未删除1已删除
*/
private String delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

34
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/IssueDTO.java

@ -19,8 +19,10 @@ package com.epmet.dto;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
@ -34,6 +36,8 @@ public class IssueDTO implements Serializable {
private static final long serialVersionUID = 1L;
public interface IssueForm{}
/**
* 议题ID
*/
@ -45,7 +49,7 @@ public class IssueDTO implements Serializable {
private String issueStatus;
/**
* 来源类型 eg:resi_topic
* 来源类型 话题resi_topic直接立议题issue事件ic_event
*/
private String sourceType;
@ -67,12 +71,14 @@ public class IssueDTO implements Serializable {
/**
* 议题名称 最多20字
*/
private String issueTitle;
@NotBlank(message = "issueTitle不能为空",groups = IssueForm.class)
private String issueTitle;
/**
* 建议 最多1000字
*/
private String suggestion;
@NotBlank(message = "suggestion不能为空",groups = IssueForm.class)
private String suggestion;
/**
* 客户ID
@ -82,7 +88,8 @@ public class IssueDTO implements Serializable {
/**
* 网格ID 居民端议题对应一个网格Id
*/
private String gridId;
@NotBlank(message = "gridId不能为空",groups = IssueForm.class)
private String gridId;
/**
* 所属机关 数据权限-非必填11:22:33(agencyId)数据权限控制
@ -160,4 +167,23 @@ public class IssueDTO implements Serializable {
private String projectId;
private String issueId;
/**
* 地址
*/
@NotBlank(message = "address不能为空",groups = IssueForm.class)
private String address;
/**
* 经度
*/
private String longitude;
/**
* 纬度
*/
private String latitude;
private String userId;
private List<IssueAttachmentDTO> attachmentList;
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save