Browse Source

行程上报拉取暂提

dev
zxc 3 years ago
parent
commit
b0c7b23fdb
  1. 19
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/YTTripReportListDTO.java
  2. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java
  3. 16
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcTripReportRecordDao.java
  4. 60
      epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiTripReportSyncProcessor.java
  5. 145
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java
  6. 200
      epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml

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

@ -0,0 +1,19 @@
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2022/11/11 15:05
*/
@Data
public class YTTripReportListDTO implements Serializable {
private static final long serialVersionUID = -5583350209850076659L;
private String cardno;
}

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

@ -18,9 +18,11 @@ public interface EpidemicConstant {
* ic_sync_job 任务类型 * ic_sync_job 任务类型
* 核酸检测 * 核酸检测
* 疫苗接种 * 疫苗接种
* 行程上报
*/ */
String JOB_TYPE_NAT = "nat"; String JOB_TYPE_NAT = "nat";
String JOB_TYPE_VACCINE = "vaccine"; String JOB_TYPE_VACCINE = "vaccine";
String JOB_TYPE_TRIP_REPORT = "trip_report";
// 居民信息对比 // 居民信息对比
String JOB_TYPE_COMPARISON_RESI = "comparison_resi"; String JOB_TYPE_COMPARISON_RESI = "comparison_resi";

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

@ -63,4 +63,20 @@ public interface IcTripReportRecordDao extends BaseDao<IcTripReportRecordEntity>
*/ */
List<EmphasisTripPieDetailResultDTO> emphasisTripPieDetail(EmphasisTripPieDetailFormDTO formDTO); List<EmphasisTripPieDetailResultDTO> emphasisTripPieDetail(EmphasisTripPieDetailFormDTO formDTO);
/**
* @Description 根据身份证查询存在的行程上报记录ID
* @param idCards
* @Author zxc
* @Date 2022/11/22 16:16
*/
List<String> getExistsTripReport(@Param("idCards")List<String> idCards);
/**
* @Description 批量更新行程上报
* @param list
* @Author zxc
* @Date 2022/11/22 16:54
*/
void updateTripReportList(@Param("list")List<IcTripReportRecordEntity> list);
} }

60
epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiTripReportSyncProcessor.java

@ -0,0 +1,60 @@
package com.epmet.processor;
import com.epmet.constant.EpidemicConstant;
import com.epmet.entity.IcSyncJobEntity;
import com.epmet.service.DataSyncConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import static com.epmet.constant.EpidemicConstant.JOB_TYPE_TRIP_REPORT;
import static com.epmet.constant.EpidemicConstant.JOB_TYPE_VACCINE;
/**
* @Description 烟台行程上报数据同步处理器
* @Author zxc
* @Date 2022/11/22 14:08
*/
@Component
@Slf4j
public class YanTaiTripReportSyncProcessor extends AbstractDataSyncJobProcessor {
@Autowired
private DataSyncConfigService dataSyncConfigService;
/**
* @Description 定时扫描和执行同步任务行程上报
* @Author zxc
* @Date 2022/11/11 10:32
*/
@Scheduled(cron = "0/10 * * * * ? ")
public void scanJobs() {
scanAndExecWaitingJobs();
}
@Override
protected void execJobTask(IcSyncJobEntity jobEntity) {
dataSyncConfigService.execSyncByJobProcessor(jobEntity);
}
@Override
protected String getDistributeLockKey() {
return "data:sync:" + JOB_TYPE_TRIP_REPORT;
}
@Override
protected String getJobType() {
return EpidemicConstant.JOB_TYPE_TRIP_REPORT;
}
@Override
protected long getDistributeLockLeaseTime() {
return 60;
}
@Override
protected long getDistributeLockWaitTime() {
return 60;
}
}

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

@ -28,10 +28,7 @@ import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.YtHsResUtils; import com.epmet.commons.tools.utils.YtHsResUtils;
import com.epmet.constant.EpidemicConstant; import com.epmet.constant.EpidemicConstant;
import com.epmet.dao.DataSyncConfigDao; import com.epmet.dao.*;
import com.epmet.dao.IcNatDao;
import com.epmet.dao.IcSyncJobDao;
import com.epmet.dao.IcVaccineDao;
import com.epmet.dto.DataSyncConfigDTO; import com.epmet.dto.DataSyncConfigDTO;
import com.epmet.dto.DataSyncRecordDeathDTO; import com.epmet.dto.DataSyncRecordDeathDTO;
import com.epmet.dto.DataSyncRecordDisabilityDTO; import com.epmet.dto.DataSyncRecordDisabilityDTO;
@ -105,6 +102,10 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
private IcVaccineRelationService icVaccineRelationService; private IcVaccineRelationService icVaccineRelationService;
@Autowired @Autowired
private IcVaccineDao icVaccineDao; private IcVaccineDao icVaccineDao;
@Autowired
private IcTripReportRecordService icTripReportRecordService;
@Autowired
private IcTripReportRecordDao icTripReportRecordDao;
@Resource(name = "yantaiNamedParamLantuJdbcTemplate") @Resource(name = "yantaiNamedParamLantuJdbcTemplate")
private NamedParameterJdbcTemplate yantaiNamedParamLantuJdbcTemplate; private NamedParameterJdbcTemplate yantaiNamedParamLantuJdbcTemplate;
@ -1051,6 +1052,10 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
case JOB_TYPE_VACCINE: case JOB_TYPE_VACCINE:
yanTaiVaccineByDbViewPartition(resiBatch, customerId, isSync); yanTaiVaccineByDbViewPartition(resiBatch, customerId, isSync);
break; break;
// 行程上报
case JOB_TYPE_TRIP_REPORT:
yanTaiTripReportByDbViewPartition(resiBatch, customerId, isSync);
break;
default: default:
break; break;
} }
@ -1061,6 +1066,87 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
} }
} }
/**
* @Description 行程上报信息拉取处理
* @param resiInfos
* @param customerId
* @param isSync
* @Author zxc
* @Date 2022/11/22 14:27
*/
public void yanTaiTripReportByDbViewPartition(List<NatUserInfoResultDTO> resiInfos, String customerId, String isSync){
// 将居民信息转化为<idCard,resiInfo>的map
Map<String, NatUserInfoResultDTO> idCardAndResiInfoMap = resiInfos.stream().collect(Collectors.toMap(resi -> resi.getIdCard(), Function.identity()));
List<String> idCards = new ArrayList<>(idCardAndResiInfoMap.keySet());
Map<String, Object> args = new HashMap<>();
args.put("idcards", idCards);
List<Map<String,Object>> tripReportList = yantaiNamedParamLantuJdbcTemplate.queryForList(
"select card_id as idCard, address as presentAddress, i_flag, i_time, i_type, i_date,i_id, travel_code_abnormal, health_code_abnormal, twon_name, county_name, city_name, province_name,\n" +
"carry_hesuan_proof, leave_the_risk_area_time, come_area_full, report_street, arrive_time, shift, come_mode, covid_flag, sex, age,\n" +
"area, card_type, invalid_time, travel_code_img, arrive_lu_time, destination_station, carry_vehicle_number_color, carry_vehicle_number,\n" +
"carry_vehicle, registered_residence_address, registered_residence_city, travel_personnel, via_county, via_city, via_province,\n" +
"nonlocal_residence_history, declaration_status, two_code_one_report_status, detection_abnormal, from t_ymjz_info where cardno in (:idcards)", args);
if (CollectionUtils.isNotEmpty(tripReportList)){
List<List<Map<String, Object>>> partition = ListUtils.partition(tripReportList, NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
// 要更新的
List<IcTripReportRecordEntity> needUpdate = new ArrayList<>();
// 要新增的
List<IcTripReportRecordEntity> entities = ConvertUtils.sourceToTarget(p, IcTripReportRecordEntity.class);
// 数据库存在的
List<String> existsTripReport = icTripReportRecordDao.getExistsTripReport(idCards);
if (CollectionUtils.isNotEmpty(existsTripReport)){
// 要更新的
existsTripReport.forEach(etr -> entities.stream().filter(e -> e.getIId().equals(etr)).forEach(e -> {
needUpdate.add(e);
}));
// 要新增的
existsTripReport.forEach(etr -> {
Iterator<IcTripReportRecordEntity> iterator = entities.iterator();
while (iterator.hasNext()){
IcTripReportRecordEntity next = iterator.next();
if (next.getIId().equals(etr)){
iterator.remove();
}
}
});
if (CollectionUtils.isNotEmpty(entities)){
entities.forEach(e -> {
});
entities.forEach(e -> resiInfos.stream().filter(r ->r.getIdCard().equals(e.getIdCard())).forEach(r -> {
e.setGridId(r.getGridId());
e.setCustomerId(r.getCustomerId());
e.setAgencyId(r.getAgencyId());
e.setPids(r.getPids());
e.setName(r.getName());
e.setMobile(r.getMobile());
e.setUserId(r.getUserId());
e.setUserType("ytPull");
}));
icTripReportRecordService.insertBatch(entities);
}
if (CollectionUtils.isNotEmpty(needUpdate)){
// 因为更新字段较多,所以分批操作
List<List<IcTripReportRecordEntity>> needs = ListUtils.partition(needUpdate, NumConstant.TWENTY);
needs.forEach(n -> {
updateTripReportList(n);
});
}
}
});
}else {
log.warn("未拉取到行程上报信息!");
}
}
@Transactional(rollbackFor = Exception.class)
public void updateTripReportList(List<IcTripReportRecordEntity> need){
icTripReportRecordDao.updateTripReportList(need);
}
/** /**
* @Description 疫苗接种信息处理 * @Description 疫苗接种信息处理
* @param resiInfos * @param resiInfos
@ -1076,38 +1162,6 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
// 1.获取核酸采样信息 // 1.获取核酸采样信息
Map<String, Object> args = new HashMap<>(); Map<String, Object> args = new HashMap<>();
args.put("idcards", idCards); args.put("idcards", idCards);
// todo 疫苗接种视图
String json = "[\n" +
" {\n" +
" \"id\": \"751956862490071040\",\n" +
" \"cardno\": \"370785195001012558\",\n" +
" \"name\": \"李国玺\",\n" +
" \"data\":\n" +
" {\n" +
" \"vaccineList\":\n" +
" [\n" +
" {\n" +
" \"vaccineCount\": \"1\",\n" +
" \"inoculateDate\": \"2021-04-24 16:02:46\",\n" +
" \"lastStationName\": \"烟台市只楚医院临时接种点\"\n" +
" },\n" +
" {\n" +
" \"vaccineCount\": \"2\",\n" +
" \"inoculateDate\": \"2021-06-10 16:20:30\",\n" +
" \"lastStationName\": \"烟台市芝罘岛医院临时接种点\"\n" +
" },\n" +
" {\n" +
" \"vaccineCount\": \"3\",\n" +
" \"inoculateDate\": \"2021-12-10 15:12:24\",\n" +
" \"lastStationName\": \"烟台市芝罘岛医院临时接种点\"\n" +
" }\n" +
" ],\n" +
" \"flag\": 1\n" +
" },\n" +
" \"vaccineCount\": 3\n" +
" }\n" +
"]";
// List<Map> vaccineList = JSON.parseArray(json,Map.class);
List<Map<String,Object>> vaccineList = yantaiNamedParamLantuJdbcTemplate.queryForList( List<Map<String,Object>> vaccineList = yantaiNamedParamLantuJdbcTemplate.queryForList(
"select data, name, cardno, vaccineCount from t_ymjz_info where cardno in (:idcards)", args); "select data, name, cardno, vaccineCount from t_ymjz_info where cardno in (:idcards)", args);
List<YTVaccineListDTO> ytVaccineListFromApi = new ArrayList<>(); List<YTVaccineListDTO> ytVaccineListFromApi = new ArrayList<>();
@ -1129,15 +1183,6 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
}); });
ytVaccineListFromApi.addAll(vaccineList1); ytVaccineListFromApi.addAll(vaccineList1);
} }
//Map<String, Object> data = (Map<String, Object>) v.get("data");
//if (data.containsKey("vaccineList")){
// List<YTVaccineListDTO> vaccineList1 = JSON.parseArray(data.get("vaccineList").toString(), YTVaccineListDTO.class);
// vaccineList1.forEach(v1 -> {
// v1.setCardno(v.get("cardno").toString());
// });
// ytVaccineListDTOS.addAll(vaccineList1);
//}
} }
}); });
List<IcVaccineEntity> entities = new ArrayList<>(); List<IcVaccineEntity> entities = new ArrayList<>();
@ -1157,16 +1202,6 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
iterator.remove(); iterator.remove();
} }
} }
//for (int i = 0; i < ytVaccineListFromApi.size(); i++) {
// String inoculateDateFromApi = ytVaccineListFromApi.get(i).getInoculateDate();
// Matcher matcher = VACCINE_DATE_OF_API_PATTERN.matcher(inoculateDateFromApi);
// if (ytVaccineListFromApi.get(i).getCardno().equals(e.getCardno())
// && matcher.matches()
// && matcher.group(1).equals(e.getInoculateDate())){
// ytVaccineListFromApi.remove(i);
// }
//}
} }
} }
if (CollectionUtils.isNotEmpty(ytVaccineListFromApi)){ if (CollectionUtils.isNotEmpty(ytVaccineListFromApi)){

200
epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml

@ -152,6 +152,17 @@
order by total desc order by total desc
</select> </select>
<!-- 根据身份证查询存在的行程上报记录ID -->
<select id="getExistsTripReport" resultType="java.lang.String">
SELECT
i_id
FROM ic_trip_report_record
WHERE DEL_FLAG = '0'
AND ID_CARD IN (
<foreach collection="idCards" item="idCard" separator=",">#{idCard}</foreach>
)
</select>
<update id="batchDel" parameterType="map"> <update id="batchDel" parameterType="map">
update ic_trip_report_record set del_flag='1',UPDATED_BY=#{userId},UPDATED_TIME=NOW() update ic_trip_report_record set del_flag='1',UPDATED_BY=#{userId},UPDATED_TIME=NOW()
WHERE AGENCY_ID=#{agencyId} WHERE AGENCY_ID=#{agencyId}
@ -161,4 +172,193 @@
</foreach> </foreach>
) )
</update> </update>
<!-- 批量更新行程上报 -->
<update id="updateTripReportList">
UPDATE ic_trip_report_record
<trim prefix="set" suffixOverrides=",">
<trim prefix="travel_code_abnormal = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.travelCodeAbnormal}
</foreach>
</trim>
<trim prefix="health_code_abnormal = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.healthCodeAbnormal}
</foreach>
</trim>
<trim prefix="twon_name = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.twonName}
</foreach>
</trim>
<trim prefix="county_name = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.countyName}
</foreach>
</trim>
<trim prefix="city_name = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.cityName}
</foreach>
</trim>
<trim prefix="province_name = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.provinceName}
</foreach>
</trim>
<trim prefix="carry_hesuan_proof = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.carryHesuanProof}
</foreach>
</trim>
<trim prefix="leave_the_risk_area_time = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.leaveTheRiskAreaTime}
</foreach>
</trim>
<trim prefix="come_area_full = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.comeAreaFull}
</foreach>
</trim>
<trim prefix="report_street = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.reportStreet}
</foreach>
</trim>
<trim prefix="arrive_time = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.arriveTime}
</foreach>
</trim>
<trim prefix="shift = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.shift}
</foreach>
</trim>
<trim prefix="come_mode = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.comeMode}
</foreach>
</trim>
<trim prefix="covid_flag = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.covidFlag}
</foreach>
</trim>
<trim prefix="sex = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.sex}
</foreach>
</trim>
<trim prefix="age = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.age}
</foreach>
</trim>
<trim prefix="area = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.area}
</foreach>
</trim>
<trim prefix="card_type = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.cardType}
</foreach>
</trim>
<trim prefix="invalid_time = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.invalidTime}
</foreach>
</trim>
<trim prefix="travel_code_img = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.travelCodeImg}
</foreach>
</trim>
<trim prefix="arrive_lu_time = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.arriveLuTime}
</foreach>
</trim>
<trim prefix="destination_station = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.destinationStation}
</foreach>
</trim>
<trim prefix="carry_vehicle_number_color = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.carryVehicleNumberColor}
</foreach>
</trim>
<trim prefix="carry_vehicle_number = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.carryVehicleNumber}
</foreach>
</trim>
<trim prefix="carry_vehicle = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.carryVehicle}
</foreach>
</trim>
<trim prefix="registered_residence_address = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.registeredResidenceAddress}
</foreach>
</trim>
<trim prefix="registered_residence_city = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.registeredResidenceCity}
</foreach>
</trim>
<trim prefix="travel_personnel = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.travelPersonnel}
</foreach>
</trim>
<trim prefix="via_county = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.viaCounty}
</foreach>
</trim>
<trim prefix="via_city = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.viaCity}
</foreach>
</trim>
<trim prefix="via_province = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.viaProvince}
</foreach>
</trim>
<trim prefix="nonlocal_residence_history = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.nonlocalResidenceHistory}
</foreach>
</trim>
<trim prefix="declaration_status = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.declarationStatus}
</foreach>
</trim>
<trim prefix="two_code_one_report_status = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.twoCodeOneReportStatus}
</foreach>
</trim>
<trim prefix="detection_abnormal = (case" suffix="end),">
<foreach collection="list" item="l">
when yt_id = #{l.ytId} then #{l.detectionAbnormal}
</foreach>
</trim>
UPDATED_TIME = NOW()
</trim>
WHERE DEL_FLAG = '0'
AND yt_id IN (
<foreach collection="list" item="l" separator=",">
#{l.ytId}
</foreach>
)
</update>
</mapper> </mapper>
Loading…
Cancel
Save