Browse Source

Merge branch 'dev_compare_data' of http://git.elinkit.com.cn:7070/r/epmet-cloud into dev_compare_data

master
wangxianzhang 3 years ago
parent
commit
f7403a7261
  1. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  2. 25
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/NatInfoScanTask.java
  3. 89
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcSyncJobDTO.java
  4. 2
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DataSyncTaskParam.java
  5. 13
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
  6. 19
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java
  7. 21
      epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java
  8. 46
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncConfigController.java
  9. 4
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/DataSyncConfigDao.java
  10. 16
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcSyncJobDao.java
  11. 59
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcSyncJobEntity.java
  12. 27
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/DataSyncConfigService.java
  13. 78
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcSyncJobService.java
  14. 273
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java
  15. 83
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcSyncJobServiceImpl.java
  16. 11
      epmet-user/epmet-user-server/src/main/resources/mapper/DataSyncConfigDao.xml
  17. 6
      epmet-user/epmet-user-server/src/main/resources/mapper/IcSyncJobDao.xml

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

@ -217,6 +217,8 @@ public enum EpmetErrorCode {
CUSTOMER_CATEGORY(9101,"分类已使用,不允许删除"),
CATEGORY_NAME(9102,"分类名称已存在,不允许重复"),
EXIST_SYNC_JOB_ERROR(9103,"存在同步任务"),
OTHER_SYNC_JOB_ERROR(9104,"同步任务已提交,请稍后查看数据"),
// open api异常
OPEN_API_UNAUTHENTICATED(10100, "请求未认证"),

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

@ -30,11 +30,34 @@ public class NatInfoScanTask implements ITask {
if (StringUtils.isNotBlank(params)) {
formDTO = JSON.parseObject(params, DataSyncTaskParam.class);
}
Result result = userOpenFeignClient.natInfoScanTask(formDTO);
/*Result result = userOpenFeignClient.dataSyncForYanTaiTask(formDTO);
if (result.success()) {
log.info("NatInfoScanTask定时任务执行成功");
} else {
log.error("NatInfoScanTask定时任务执行失败:" + result.getMsg());
}*/
// 核酸检测
Result natResult = userOpenFeignClient.natInfoScanTask(formDTO);
if (natResult.success()) {
log.info("NatInfoScanTask定时任务执行成功");
} else {
log.error("NatInfoScanTask定时任务执行失败:" + natResult.getMsg());
}
// 死亡
Result deathResult = userOpenFeignClient.deathInfoScanTask(formDTO);
if (deathResult.success()) {
log.info("deathInfoScanTask定时任务执行成功");
} else {
log.error("deathInfoScanTask定时任务执行失败:" + deathResult.getMsg());
}
// 残疾
Result disabilityResult = userOpenFeignClient.disabilityInfoScanTask(formDTO);
if (disabilityResult.success()) {
log.info("disabilityInfoScanTask定时任务执行成功");
} else {
log.error("disabilityInfoScanTask定时任务执行失败:" + disabilityResult.getMsg());
}
}
}

89
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcSyncJobDTO.java

@ -0,0 +1,89 @@
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-11-08
*/
@Data
public class IcSyncJobDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* ID
*/
private String id;
/**
* 客户ID
*/
private String customerId;
/**
* 组织ID
*/
private String orgId;
/**
* 组织ID的上级
*/
private String pid;
/**
* 组织ID的所有上级包括org_id
*/
private String orgIdPath;
/**
* 任务类型残疾disability死亡death核酸nat
*/
private String jobType;
/**
* 操作员IDstaffId
*/
private String operatorId;
/**
* 操作状态,等待中waiting进行中processing结束finish
*/
private String operationStatus;
/**
*
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

2
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DataSyncTaskParam.java

@ -47,4 +47,6 @@ public class DataSyncTaskParam implements Serializable {
*/
private String agencyId = null;
private String dataCode;
private String staffId;
}

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

@ -922,8 +922,8 @@ public interface EpmetUserOpenFeignClient {
@PostMapping("/epmetuser/userbaseinfo/dingResiLogin")
Result<DingLoginResiResDTO> dingResiLogin(@RequestBody DingLoginResiFormDTO formDTO);
@PostMapping("/epmetuser/dataSyncConfig/natInfoScanTask")
Result natInfoScanTask(@RequestBody DataSyncTaskParam formDTO);
@PostMapping("/epmetuser/dataSyncConfig/dataSyncForYanTaiTask")
Result dataSyncForYanTaiTask(@RequestBody DataSyncTaskParam formDTO);
/**
* Desc: 客户下所有工作人员放缓存
@ -943,4 +943,13 @@ public interface EpmetUserOpenFeignClient {
*/
@PostMapping("/epmetuser/registerrelation/getAllResiByGrid")
Result<Integer> getAllResiByGrid(@RequestBody AllResiByGridFormDTO formDTO);
@PostMapping("/epmetuser/dataSyncConfig/natInfoScanTask")
Result natInfoScanTask(@RequestBody DataSyncTaskParam formDTO);
@PostMapping("/epmetuser/dataSyncConfig/deathInfoScanTask")
Result deathInfoScanTask(@RequestBody DataSyncTaskParam formDTO);
@PostMapping("/epmetuser/dataSyncConfig/disabilityInfoScanTask")
Result disabilityInfoScanTask(@RequestBody DataSyncTaskParam formDTO);
}

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

@ -713,8 +713,8 @@ public class EpmetUserOpenFeignClientFallback implements EpmetUserOpenFeignClien
}
@Override
public Result natInfoScanTask(DataSyncTaskParam formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "natInfoScanTask", formDTO);
public Result dataSyncForYanTaiTask(DataSyncTaskParam formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "dataSyncForYanTaiTask", formDTO);
}
@Override
@ -726,4 +726,19 @@ public class EpmetUserOpenFeignClientFallback implements EpmetUserOpenFeignClien
public Result<Integer> getAllResiByGrid(AllResiByGridFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getAllResiByGrid", formDTO);
}
@Override
public Result natInfoScanTask(DataSyncTaskParam formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "natInfoScanTaskV2", formDTO);
}
@Override
public Result deathInfoScanTask(DataSyncTaskParam formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "deathInfoScanTask", formDTO);
}
@Override
public Result disabilityInfoScanTask(DataSyncTaskParam formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "disabilityInfoScanTask", formDTO);
}
}

21
epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java

@ -0,0 +1,21 @@
package com.epmet.constant;
public interface EpidemicConstant {
/**
* 数据配置的dataCode
* 核酸检测
* 残疾人
* 死亡
*/
String DATA_CODE_NAT = "hesuan";
String DATA_CODE_DISABILITY = "canji";
String DATA_CODE_DEATH = "siwang";
String JOB_TYPE_NAT = "nat";
String OPERATION_STATUS_WAITING = "waiting";
String OPERATION_STATUS_PROCESSING = "processing";
String OPERATION_STATUS_FINISH = "finish";
}

46
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncConfigController.java

@ -106,9 +106,53 @@ public class DataSyncConfigController {
return new Result();
}
@PostMapping("dataSyncForYanTaiTask")
public Result dataSyncForYanTaiTask(@RequestBody DataSyncTaskParam formDTO){
dataSyncConfigService.dataSyncForYanTaiTask(formDTO);
return new Result();
}
/**
* @Description 核酸检测信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/8 10:37
*/
@PostMapping("natInfoScanTask")
public Result natInfoScanTask(@RequestBody DataSyncTaskParam formDTO){
dataSyncConfigService.dataSyncForYanTaiTask(formDTO);
dataSyncConfigService.natInfoScanTask(formDTO);
return new Result();
}
@PostMapping("natInfoSyncButton")
public Result natInfoSyncButton(@RequestBody DataSyncTaskParam formDTO, @LoginUser TokenDto tokenDto){
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setStaffId(tokenDto.getUserId());
dataSyncConfigService.natInfoSyncButton(formDTO);
return new Result();
}
/**
* @Description 死亡信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/8 09:01
*/
@PostMapping("deathInfoScanTask")
public Result deathInfoScanTask(@RequestBody DataSyncTaskParam formDTO){
dataSyncConfigService.deathInfoScanTask(formDTO);
return new Result();
}
/**
* @Description 残疾信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/8 09:01
*/
@PostMapping("disabilityInfoScanTask")
public Result disabilityInfoScanTask(@RequestBody DataSyncTaskParam formDTO){
dataSyncConfigService.disabilityInfoScanTask(formDTO);
return new Result();
}

4
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/DataSyncConfigDao.java

@ -38,7 +38,7 @@ public interface DataSyncConfigDao extends BaseDao<DataSyncConfigEntity> {
* @author zxc
* @date 2022/9/26 15:04
*/
List<DataSyncConfigDTO> list(@Param("customerId") String customerId, @Param("switchStatus") String switchStatus);
List<DataSyncConfigDTO> list(@Param("customerId") String customerId, @Param("switchStatus") String switchStatus, @Param("dataCode")String dataCode);
List<DataSyncScopeDTO> scopeList(@Param("id") String id);
@ -60,4 +60,6 @@ public interface DataSyncConfigDao extends BaseDao<DataSyncConfigEntity> {
*/
List<NatUserInfoResultDTO> getIdCardsByScope(DataSyncTaskParam formDTO);
DataSyncConfigDTO getConfigInfoByType(@Param("customerId") String customerId, @Param("switchStatus") String switchStatus,@Param("dataCode")String dataCode);
}

16
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcSyncJobDao.java

@ -0,0 +1,16 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.IcSyncJobEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 同步任务表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-11-08
*/
@Mapper
public interface IcSyncJobDao extends BaseDao<IcSyncJobEntity> {
}

59
epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcSyncJobEntity.java

@ -0,0 +1,59 @@
package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 同步任务表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-11-08
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("ic_sync_job")
public class IcSyncJobEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户ID
*/
private String customerId;
/**
* 组织ID
*/
private String orgId;
/**
* 组织ID的上级
*/
private String pid;
/**
* 组织ID的所有上级包括org_id
*/
private String orgIdPath;
/**
* 任务类型残疾disability死亡death核酸nat
*/
private String jobType;
/**
* 操作员IDstaffId
*/
private String operatorId;
/**
* 操作状态,等待中waiting进行中processing结束finish
*/
private String operationStatus;
}

27
epmet-user/epmet-user-server/src/main/java/com/epmet/service/DataSyncConfigService.java

@ -83,4 +83,31 @@ public interface DataSyncConfigService extends BaseService<DataSyncConfigEntity>
void scopeSave(ScopeSaveFormDTO formDTO);
void dataSyncForYanTaiTask(DataSyncTaskParam formDTO);
/**
* @Description 死亡信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/8 09:01
*/
void deathInfoScanTask(DataSyncTaskParam formDTO);
/**
* @Description 残疾信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/8 09:01
*/
void disabilityInfoScanTask(DataSyncTaskParam formDTO);
/**
* @Description 核酸检测信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/8 10:37
*/
void natInfoScanTask(DataSyncTaskParam formDTO);
void natInfoSyncButton(DataSyncTaskParam formDTO);
}

78
epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcSyncJobService.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.IcSyncJobDTO;
import com.epmet.entity.IcSyncJobEntity;
import java.util.List;
import java.util.Map;
/**
* 同步任务表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-11-08
*/
public interface IcSyncJobService extends BaseService<IcSyncJobEntity> {
/**
* 默认分页
*
* @param params
* @return PageData<IcSyncJobDTO>
* @author generator
* @date 2022-11-08
*/
PageData<IcSyncJobDTO> page(Map<String, Object> params);
/**
* 默认查询
*
* @param params
* @return java.util.List<IcSyncJobDTO>
* @author generator
* @date 2022-11-08
*/
List<IcSyncJobDTO> list(Map<String, Object> params);
/**
* 单条查询
*
* @param id
* @return IcSyncJobDTO
* @author generator
* @date 2022-11-08
*/
IcSyncJobDTO get(String id);
/**
* 默认保存
*
* @param dto
* @return void
* @author generator
* @date 2022-11-08
*/
void save(IcSyncJobDTO dto);
/**
* 默认更新
*
* @param dto
* @return void
* @author generator
* @date 2022-11-08
*/
void update(IcSyncJobDTO dto);
/**
* 批量删除
*
* @param ids
* @return void
* @author generator
* @date 2022-11-08
*/
void delete(String[] ids);
}

273
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java

@ -1,28 +1,37 @@
package com.epmet.service.impl;
import java.util.Date;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.dto.form.PageFormDTO;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
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 com.epmet.commons.tools.enums.GenderEnum;
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.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
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.YtHsResUtils;
import com.epmet.constant.EpidemicConstant;
import com.epmet.dao.DataSyncConfigDao;
import com.epmet.dao.IcNatDao;
import com.epmet.dao.IcSyncJobDao;
import com.epmet.dto.DataSyncConfigDTO;
import com.epmet.dto.DataSyncRecordDeathDTO;
import com.epmet.dto.DataSyncRecordDisabilityDTO;
@ -39,6 +48,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
@ -49,9 +59,12 @@ import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.epmet.constant.EpidemicConstant.*;
/**
* 数据更新配置表
*
@ -76,6 +89,12 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
private DataSyncRecordDisabilityService dataSyncRecordDisabilityService;
@Autowired
private ExecutorService executorService;
@Autowired
private IcSyncJobService icSyncJobService;
@Autowired
private IcSyncJobDao icSyncJobDao;
@Autowired
private DistributedLock distributedLock;
@Resource(name = "yantaiNamedParamLantuJdbcTemplate")
private NamedParameterJdbcTemplate yantaiNamedParamLantuJdbcTemplate;
@ -134,7 +153,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
public PageData list(TokenDto tokenDto, PageFormDTO formDTO) {
PageData<DataSyncConfigDTO> result = new PageData<>(new ArrayList<>(), NumConstant.ZERO_L);
PageInfo<DataSyncConfigDTO> pageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize())
.doSelectPageInfo(() -> baseDao.list(tokenDto.getCustomerId(), null));
.doSelectPageInfo(() -> baseDao.list(tokenDto.getCustomerId(), null,null));
if (CollectionUtils.isNotEmpty(pageInfo.getList())) {
result.setList(pageInfo.getList());
result.setTotal(Integer.parseInt(String.valueOf(pageInfo.getTotal())));
@ -189,7 +208,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
*/
@Override
public void dataSyncForYanTaiTask(DataSyncTaskParam formDTO) {
List<DataSyncConfigDTO> allConfigList = baseDao.list(formDTO.getCustomerId(), "open");
List<DataSyncConfigDTO> allConfigList = baseDao.list(formDTO.getCustomerId(), "open",null);
if (CollectionUtils.isEmpty(allConfigList)) {
return;
}
@ -225,6 +244,256 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
}
}
/**
* @Description 死亡信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/8 09:01
*/
@Override
public void deathInfoScanTask(DataSyncTaskParam formDTO) {
List<DataSyncConfigDTO> configData = getConfigData(null, EpidemicConstant.DATA_CODE_DEATH);
if (CollectionUtils.isEmpty(configData)){
log.warn("deathInfoScanTask not exists config data,customer is "+formDTO.getCustomerId());
return;
}
long count = configData.stream().filter(o -> CollectionUtils.isNotEmpty(o.getScopeList())).count();
if (count < 1) {
log.warn("deathInfoScanTask scopeList is null");
return;
}
int pageNo = NumConstant.ONE;
int pageSize = NumConstant.ONE_THOUSAND;
List<NatUserInfoResultDTO> dbResiList = null;
do {
for (DataSyncConfigDTO config : configData) {
// 设置查询数据范围
formDTO.setOrgList(config.getScopeList());
DataSyncEnum anEnum = DataSyncEnum.getEnum(config.getDataCode());
dbResiList = getNatUserInfoFromDb(formDTO, pageNo, pageSize);
if (CollectionUtils.isEmpty(dbResiList)) {
continue;
}
switch (anEnum) {
case SI_WANG:
try {
//查询正常状态的居民
siWang(dbResiList);
log.info("======siWang信息拉取结束======");
} catch (Exception e) {
log.error("death thread execute exception", e);
}
default:
log.warn("没有要处理的数据");
}
}
pageNo++;
} while (dbResiList != null && dbResiList.size() == pageSize);
}
/**
* @Description 残疾信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/8 09:01
*/
@Override
public void disabilityInfoScanTask(DataSyncTaskParam formDTO) {
List<DataSyncConfigDTO> configData = getConfigData(null, EpidemicConstant.DATA_CODE_DISABILITY);
if (CollectionUtils.isEmpty(configData)){
log.warn("disabilityInfoScanTask not exists config data,customer is "+formDTO.getCustomerId());
return;
}
long count = configData.stream().filter(o -> CollectionUtils.isNotEmpty(o.getScopeList())).count();
if (count < 1) {
log.warn("disabilityInfoScanTask scopeList is null");
return;
}
int pageNo = NumConstant.ONE;
int pageSize = NumConstant.ONE_THOUSAND;
List<NatUserInfoResultDTO> dbResiList = null;
do {
for (DataSyncConfigDTO config : configData) {
// 设置查询数据范围
formDTO.setOrgList(config.getScopeList());
formDTO.setCategoryColumn("IS_CJ");
DataSyncEnum anEnum = DataSyncEnum.getEnum(config.getDataCode());
dbResiList = getNatUserInfoFromDb(formDTO, pageNo, pageSize);
if (CollectionUtils.isEmpty(dbResiList)) {
continue;
}
switch (anEnum) {
case CAN_JI:
try {
//查询正常状态的居民
canJi(dbResiList);
log.info("======canJi信息拉取结束======");
} catch (Exception e) {
log.error("disability thread execute exception", e);
}
break;
default:
log.warn("没有要处理的数据");
}
}
pageNo++;
} while (dbResiList != null && dbResiList.size() == pageSize);
}
/**
* @Description 核酸检测信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/8 10:37
*/
@Override
public void natInfoScanTask(DataSyncTaskParam formDTO) {
List<DataSyncConfigDTO> configData = new ArrayList<>();
if (StringUtils.isBlank(formDTO.getAgencyId())){
configData = getConfigData(null, EpidemicConstant.DATA_CODE_NAT);
if (CollectionUtils.isEmpty(configData)){
log.warn("natInfoScanTask not exists config data,customer is "+formDTO.getCustomerId());
return;
}
long count = configData.stream().filter(o -> CollectionUtils.isNotEmpty(o.getScopeList())).count();
if (count < 1) {
log.warn("natInfoScanTask scopeList is null");
return;
}
}
int pageNo = NumConstant.ONE;
int pageSize = NumConstant.ONE_THOUSAND;
List<NatUserInfoResultDTO> dbResiList = null;
do {
if (StringUtils.isBlank(formDTO.getAgencyId())){
for (DataSyncConfigDTO config : configData) {
// 设置查询数据范围
formDTO.setOrgList(config.getScopeList());
DataSyncEnum anEnum = DataSyncEnum.getEnum(config.getDataCode());
dbResiList = getNatUserInfoFromDb(formDTO, pageNo, pageSize);
if (CollectionUtils.isEmpty(dbResiList)) {
continue;
}
switch (anEnum) {
case HE_SUAN:
try {
//查询正常状态的居民
yantaiHsjcByDbView(dbResiList, config.getCustomerId(), formDTO.getIsSync());
log.info("======核酸检测信息拉取结束======");
} catch (Exception e) {
log.error("nat thread execute exception", e);
}
break;
default:
log.warn("没有要处理的数据");
}
}
}else {
dbResiList = getNatUserInfoFromDb(formDTO, pageNo, pageSize);
if (CollectionUtils.isEmpty(dbResiList)){
return;
}
yantaiHsjcByDbView(dbResiList, dbResiList.get(NumConstant.ZERO).getCustomerId(), formDTO.getIsSync());
}
pageNo++;
} while (dbResiList != null && dbResiList.size() == pageSize);
}
@Override
public void natInfoSyncButton(DataSyncTaskParam formDTO) {
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId());
if (null == staffInfo){
throw new EpmetException("未查询到工作人员信息:"+formDTO.getStaffId());
}
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(formDTO.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("未查询到组织信息:"+formDTO.getAgencyId());
}
LambdaQueryWrapper<IcSyncJobEntity> qw = new LambdaQueryWrapper<>();
qw.eq(IcSyncJobEntity::getOrgId,formDTO.getAgencyId()).in(IcSyncJobEntity::getOperationStatus,OPERATION_STATUS_WAITING,OPERATION_STATUS_PROCESSING);
List<IcSyncJobEntity> icSyncJobEntities = icSyncJobDao.selectList(qw);
// 当前组织下存在同步任务
if (CollectionUtils.isNotEmpty(icSyncJobEntities)){
throw new EpmetException(EpmetErrorCode.EXIST_SYNC_JOB_ERROR.getCode());
}
// 不存在新增一条记录
IcSyncJobEntity e = new IcSyncJobEntity();
e.setCustomerId(formDTO.getCustomerId());
e.setOrgId(formDTO.getAgencyId());
e.setPid(agencyInfo.getPid());
e.setOrgIdPath(StringUtils.isBlank(agencyInfo.getPids()) ? agencyInfo.getId() : agencyInfo.getPids()+":"+agencyInfo.getId());
e.setJobType(JOB_TYPE_NAT);
e.setOperatorId(formDTO.getStaffId());
e.setOperationStatus(OPERATION_STATUS_WAITING);
insertSync(e);
// 客户下,type=nat 存在两条正在进行中的同步任务
LambdaQueryWrapper<IcSyncJobEntity> qw2 = new LambdaQueryWrapper<>();
qw2.eq(IcSyncJobEntity::getCustomerId,formDTO.getCustomerId())
.eq(IcSyncJobEntity::getOperationStatus,OPERATION_STATUS_PROCESSING)
.eq(IcSyncJobEntity::getJobType,JOB_TYPE_NAT);
List<IcSyncJobEntity> processingList = icSyncJobDao.selectList(qw2);
if (CollectionUtils.isNotEmpty(processingList) && processingList.size() >= NumConstant.TWO){
throw new EpmetException(EpmetErrorCode.OTHER_SYNC_JOB_ERROR.getCode());
}
List<IcSyncJobEntity> waitList;
do {
LambdaQueryWrapper<IcSyncJobEntity> qw3 = new LambdaQueryWrapper<>();
qw3.eq(IcSyncJobEntity::getCustomerId,formDTO.getCustomerId())
.eq(IcSyncJobEntity::getOperationStatus,OPERATION_STATUS_WAITING)
.eq(IcSyncJobEntity::getJobType,JOB_TYPE_NAT)
.orderByAsc(BaseEpmetEntity::getCreatedTime);
waitList = icSyncJobDao.selectList(qw3);
if (CollectionUtils.isNotEmpty(waitList)){
for (IcSyncJobEntity entity : waitList) {
RLock lock = null;
try {
lock = distributedLock.getLock(entity.getOrgId() + JOB_TYPE_NAT, 60L, 60L, TimeUnit.SECONDS);
updateSync(entity.getId(),OPERATION_STATUS_PROCESSING);
}catch (Exception ex){
log.error(ex.getMessage());
throw new EpmetException(ex.getMessage());
}finally {
lock.unlock();
}
formDTO.setAgencyId(entity.getOrgId());
try {
natInfoScanTask(formDTO);
}catch (Exception ee){
log.error(ee.getMessage());
throw new EpmetException(ee.getMessage());
}finally {
updateSync(entity.getId(),OPERATION_STATUS_FINISH);
}
}
}
}while (CollectionUtils.isNotEmpty(waitList));
}
@Transactional(rollbackFor = Exception.class)
public void updateSync(String id,String status){
LambdaUpdateWrapper<IcSyncJobEntity> qwUpdate = new LambdaUpdateWrapper<>();
qwUpdate.eq(BaseEpmetEntity::getId,id)
.set(IcSyncJobEntity::getOperationStatus,status)
.set(BaseEpmetEntity::getUpdatedTime, new Date());
icSyncJobDao.update(null,qwUpdate);
}
@Transactional(rollbackFor = Exception.class)
public void insertSync(IcSyncJobEntity e){
icSyncJobService.insert(e);
}
/**
* @Description 配置信息查询
* @param customerId
* @param dataCode
* @Author zxc
* @Date 2022/11/8 10:41
*/
public List<DataSyncConfigDTO> getConfigData(String customerId, String dataCode){
List<DataSyncConfigDTO> allConfigList = baseDao.list(customerId, "open",dataCode);
return CollectionUtils.isEmpty(allConfigList) ? new ArrayList<>() : allConfigList;
}
private void dataSyncYanTaiParallel(List<DataSyncConfigDTO> configList, DataSyncTaskParam formDTO) {
if (CollectionUtils.isEmpty(configList)) {
log.warn("dataSyncYanTaiParallel configList is null");

83
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcSyncJobServiceImpl.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.IcSyncJobDao;
import com.epmet.dto.IcSyncJobDTO;
import com.epmet.entity.IcSyncJobEntity;
import com.epmet.service.IcSyncJobService;
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-11-08
*/
@Service
public class IcSyncJobServiceImpl extends BaseServiceImpl<IcSyncJobDao, IcSyncJobEntity> implements IcSyncJobService {
@Override
public PageData<IcSyncJobDTO> page(Map<String, Object> params) {
IPage<IcSyncJobEntity> page = baseDao.selectPage(
getPage(params, FieldConstant.CREATED_TIME, false),
getWrapper(params)
);
return getPageData(page, IcSyncJobDTO.class);
}
@Override
public List<IcSyncJobDTO> list(Map<String, Object> params) {
List<IcSyncJobEntity> entityList = baseDao.selectList(getWrapper(params));
return ConvertUtils.sourceToTarget(entityList, IcSyncJobDTO.class);
}
private QueryWrapper<IcSyncJobEntity> getWrapper(Map<String, Object> params){
String id = (String)params.get(FieldConstant.ID_HUMP);
QueryWrapper<IcSyncJobEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id);
return wrapper;
}
@Override
public IcSyncJobDTO get(String id) {
IcSyncJobEntity entity = baseDao.selectById(id);
return ConvertUtils.sourceToTarget(entity, IcSyncJobDTO.class);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void save(IcSyncJobDTO dto) {
IcSyncJobEntity entity = ConvertUtils.sourceToTarget(dto, IcSyncJobEntity.class);
insert(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(IcSyncJobDTO dto) {
IcSyncJobEntity entity = ConvertUtils.sourceToTarget(dto, IcSyncJobEntity.class);
updateById(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(String[] ids) {
// 逻辑删除(@TableLogic 注解)
baseDao.deleteBatchIds(Arrays.asList(ids));
}
}

11
epmet-user/epmet-user-server/src/main/resources/mapper/DataSyncConfigDao.xml

@ -47,6 +47,9 @@
<if test='null != customerId and customerId != "" '>
AND CUSTOMER_ID = #{customerId}
</if>
<if test="dataCode != null and dataCode != ''">
AND data_code = #{dataCode}
</if>
order by sort
</select>
@ -103,4 +106,12 @@
</choose>
ORDER BY CREATED_TIME
</select>
<select id="getConfigInfoByType" resultType="com.epmet.dto.DataSyncConfigDTO">
select * FROM data_sync_config
WHERE DEL_FLAG = 0
AND switch_status = #{switchStatus}
AND CUSTOMER_ID = #{customerId}
AND data_code = #{dataCode}
</select>
</mapper>

6
epmet-user/epmet-user-server/src/main/resources/mapper/IcSyncJobDao.xml

@ -0,0 +1,6 @@
<?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.IcSyncJobDao">
</mapper>
Loading…
Cancel
Save