工程拉取

This commit is contained in:
fl 2025-04-01 15:10:29 +08:00
parent 76758eaeac
commit 8889e38c22
4 changed files with 355 additions and 0 deletions

View File

@ -0,0 +1,122 @@
package com.bonus.imgTool.basic.vo.dto;
import lombok.Data;
/**
* @className:SelectDto
* @author:cwchen
* @date:2024-07-19-13:14
* @version:1.0
* @description:下拉选-dto
*/
@Data
public class ProDto {
/**
* 工程id
*/
private Long proId;
/**
* 工程名称
*/
private String proName;
/**
* 简称
*/
private String abbreviation;
/**
* 工程类型
*/
private String proType;
/**
* 电压等级
*/
private String voltageLevel;
/**
* 公司名称
*/
private String companyName;
/**
* 工程地址
*/
private String origin;
/**
* 经度
*/
private String lon;
/**
* 纬度
*/
private String lat;
/**
* 工程状态
*/
private String status;
/**
* 修改时间
*/
private String updateTime;
/**
* 是否可用
*/
private Integer isActive;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ProDto)) return false;
ProDto proDto = (ProDto) o;
if (getProName() != null ? !getProName().equals(proDto.getProName()) : proDto.getProName() != null)
return false;
if (getAbbreviation() != null ? !getAbbreviation().equals(proDto.getAbbreviation()) : proDto.getAbbreviation() != null)
return false;
if (getProType() != null ? !getProType().equals(proDto.getProType()) : proDto.getProType() != null)
return false;
if (getVoltageLevel() != null ? !getVoltageLevel().equals(proDto.getVoltageLevel()) : proDto.getVoltageLevel() != null)
return false;
if (getCompanyName() != null ? !getCompanyName().equals(proDto.getCompanyName()) : proDto.getCompanyName() != null)
return false;
if (getOrigin() != null ? !getOrigin().equals(proDto.getOrigin()) : proDto.getOrigin() != null)
return false;
if (getLon() != null ? !getLon().equals(proDto.getLon()) : proDto.getLon() != null)
return false;
if (getLat() != null ? !getLat().equals(proDto.getLat()) : proDto.getLat() != null)
return false;
if (getStatus() != null ? !getStatus().equals(proDto.getStatus()) : proDto.getStatus() != null)
return false;
if (getUpdateTime() != null ? !getUpdateTime().equals(proDto.getUpdateTime()) : proDto.getUpdateTime() != null)
return false;
return getIsActive() != null ? getIsActive().equals(proDto.getIsActive()) : proDto.getIsActive() == null;
}
public void update(ProDto source) {
this.setProName(source.getProName());
this.setAbbreviation(source.getAbbreviation());
this.setProType(source.getProType());
this.setVoltageLevel(source.getVoltageLevel());
this.setCompanyName(source.getCompanyName());
this.setOrigin(source.getOrigin());
this.setLon(source.getLon());
this.setLat(source.getLat());
this.setStatus(source.getStatus());
this.setUpdateTime(source.getUpdateTime());
this.setIsActive(source.getIsActive());
}
}

View File

@ -0,0 +1,18 @@
package com.bonus.imgTool.task.dao;
import com.bonus.imgTool.basic.vo.dto.ProDto;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface ProPullDao {
List<ProDto> getProjectData();
List<ProDto> getImgProjectData();
void addProject(List<ProDto> list);
void updateProject(ProDto imgProject);
}

View File

@ -0,0 +1,83 @@
package com.bonus.imgTool.task.job;
import cn.hutool.core.date.DateUtil;
import com.bonus.imgTool.basic.vo.dto.ProDto;
import com.bonus.imgTool.task.dao.ProPullDao;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author zys
* 考勤定时器
*/
@Configuration
@EnableScheduling
@Slf4j
@EnableAsync
public class ProPullTask {
@Resource
private ProPullDao dao;
/**
* 拉取工程数据
*/
@Scheduled(cron = "0 30 0 * * ?")
@Async
public void getAttTempDataTask() {
log.info("--------实名制工程数据拉取定时器开启------");
//实名制工程
List<ProDto> proList = dao.getProjectData();
//影像系统工程
List<ProDto> proImgList = dao.getImgProjectData();
syncProjectData(proList, proImgList);
log.info("--------实名制工程数据拉取定时器完毕------");
}
// 假设 ProDto 类有一个方法叫做 update() 可以用来更新对象的数据
public void syncProjectData(List<ProDto> proList, List<ProDto> proImgList) {
// 创建一个Map来快速查找proImgList中的元素
Map<Long, ProDto> imgProjectMap = new HashMap<>();
for (ProDto imgProject : proImgList) {
imgProjectMap.put(imgProject.getProId(), imgProject);
}
// 遍历proList进行同步操作
List<ProDto> addList = new ArrayList<>();
for (ProDto project : proList) {
if (imgProjectMap.containsKey(project.getProId())) {
// 如果proId存在比较并更新数据
ProDto imgProject = imgProjectMap.get(project.getProId());
if (!project.equals(imgProject)) {
project.update(imgProject); // 使用来自proImgList的数据更新project对象
}else{
// 相同的数据移出proImgList
imgProjectMap.remove(project.getProId());
}
} else {
// 如果proId不存在于proImgList中添加新项目
addList.add(project);
}
}
if (!addList.isEmpty()){
dao.addProject(addList);
}
// 将proImgList中剩下的数据更新到数据库
for (ProDto imgProject : imgProjectMap.values()) {
dao.updateProject(imgProject);
}
}
}

View File

@ -0,0 +1,132 @@
<?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.bonus.imgTool.task.dao.ProPullDao">
<insert id="addProject">
insert into tb_project (
id,
`name`,
abbreviation,
pro_type,
voltage_level,
company_name,
origin,
lon,
lat,
`status`,
update_time,
is_active
)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.proId},
#{item.proName},
#{item.abbreviation},
#{item.proType},
#{item.voltageLevel},
#{item.companyName},
#{item.origin},
#{item.lon},
#{item.lat},
#{item.status},
#{item.updateTime},
#{item.isActive}
)
</foreach>
</insert>
<update id="updateProject">
update tb_project
<set>
<if test="proName != null">
`name` = #{proName},
</if>
<if test="abbreviation != null">
abbreviation = #{abbreviation},
</if>
<if test="proType != null">
pro_type = #{proType},
</if>
<if test="voltageLevel != null">
voltage_level = #{voltageLevel},
</if>
<if test="companyName != null">
company_name = #{companyName},
</if>
<if test="origin != null">
project_address = #{origin},
</if>
<if test="lon != null">
lon = #{lon},
</if>
<if test="lat != null">
lat = #{lat},
</if>
<if test="status != null">
status = #{status}
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if>
<if test="isActive != null">
is_active = #{isActive}
</if>
</set>
WHERE
id = #{proId}
</update>
<select id="getProjectData" resultType="com.bonus.imgTool.basic.vo.dto.ProDto">
SELECT
bp.id AS proId,
bp.`NAME` AS proName,
bp.abbreviation,
bp.pro_type AS proType,
po.`name` AS companyName,
td.`value` AS voltageLevel,
bp.project_address AS origin,
bp.lon,
bp.lat,
CASE
bp.pro_status
WHEN 0 THEN
'在建'
WHEN 1 THEN
'完工'
WHEN 2 THEN
'筹建'
WHEN 3 THEN
'停工'
WHEN 4 THEN
'收尾' ELSE '异常'
END AS `status`,
bp.update_time,
bp.is_active
FROM
ynrealname.bm_project bp
LEFT JOIN ynrealname.pm_organization po ON po.id = bp.two_com_id
LEFT JOIN ynrealname.t_dict td ON td.id = bp.level_id
AND td.type = 'voltageLevel'
</select>
<select id="getImgProjectData" resultType="com.bonus.imgTool.basic.vo.dto.ProDto">
SELECT
id AS proId,
`name` AS proName,
abbreviation,
pro_type,
voltage_level,
company_name,
origin,
lon,
lat,
`status`,
update_time,
is_active
FROM
tb_project
</select>
</mapper>