diff --git a/src/main/java/com/bonus/imgTool/basic/vo/dto/ProDto.java b/src/main/java/com/bonus/imgTool/basic/vo/dto/ProDto.java new file mode 100644 index 0000000..d314e0f --- /dev/null +++ b/src/main/java/com/bonus/imgTool/basic/vo/dto/ProDto.java @@ -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()); + } + +} diff --git a/src/main/java/com/bonus/imgTool/task/dao/ProPullDao.java b/src/main/java/com/bonus/imgTool/task/dao/ProPullDao.java new file mode 100644 index 0000000..1e4864b --- /dev/null +++ b/src/main/java/com/bonus/imgTool/task/dao/ProPullDao.java @@ -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 getProjectData(); + + List getImgProjectData(); + + void addProject(List list); + + void updateProject(ProDto imgProject); +} diff --git a/src/main/java/com/bonus/imgTool/task/job/ProPullTask.java b/src/main/java/com/bonus/imgTool/task/job/ProPullTask.java new file mode 100644 index 0000000..6f48e0b --- /dev/null +++ b/src/main/java/com/bonus/imgTool/task/job/ProPullTask.java @@ -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 proList = dao.getProjectData(); + //影像系统工程 + List proImgList = dao.getImgProjectData(); + syncProjectData(proList, proImgList); + log.info("--------实名制工程数据拉取定时器完毕------"); + } + + // 假设 ProDto 类有一个方法叫做 update() 可以用来更新对象的数据 + public void syncProjectData(List proList, List proImgList) { + // 创建一个Map来快速查找proImgList中的元素 + Map imgProjectMap = new HashMap<>(); + for (ProDto imgProject : proImgList) { + imgProjectMap.put(imgProject.getProId(), imgProject); + } + // 遍历proList进行同步操作 + List 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); + } + } + +} \ No newline at end of file diff --git a/src/main/resources/mappers/basic/ProPullMapper.xml b/src/main/resources/mappers/basic/ProPullMapper.xml new file mode 100644 index 0000000..0ac187d --- /dev/null +++ b/src/main/resources/mappers/basic/ProPullMapper.xml @@ -0,0 +1,132 @@ + + + + + + insert into tb_project ( + id, + `name`, + abbreviation, + pro_type, + voltage_level, + company_name, + origin, + lon, + lat, + `status`, + update_time, + is_active + ) + VALUES + + ( + #{item.proId}, + #{item.proName}, + #{item.abbreviation}, + #{item.proType}, + #{item.voltageLevel}, + #{item.companyName}, + #{item.origin}, + #{item.lon}, + #{item.lat}, + #{item.status}, + #{item.updateTime}, + #{item.isActive} + ) + + + + + update tb_project + + + `name` = #{proName}, + + + abbreviation = #{abbreviation}, + + + pro_type = #{proType}, + + + voltage_level = #{voltageLevel}, + + + company_name = #{companyName}, + + + project_address = #{origin}, + + + lon = #{lon}, + + + lat = #{lat}, + + + status = #{status} + + + update_time = #{updateTime}, + + + is_active = #{isActive} + + + WHERE + id = #{proId} + + + + + + +