同步AED数据

This commit is contained in:
feng
2025-12-03 16:21:22 +08:00
parent 595d702e9e
commit 0b5ec13aab
11 changed files with 199 additions and 20 deletions
@@ -326,4 +326,10 @@ public class AedEquipmentMangerController extends JeecgController<AedEquipmentMa
return Result.ok(aedEquipmentMangerService.selectAedAllBack());
}
@GetMapping("/syncAnYanAedData")
public Result<String> syncAnYanAedData() {
aedEquipmentMangerService.syncAnYanAedData();
return Result.ok();
}
}
@@ -132,4 +132,9 @@ public interface IAedEquipmentMangerService extends IService<AedEquipmentManger>
SrcInfo getSrc();
List<AedEquipmentManger> selectAedAllBack();
/**
* 从安眼系统同步更新AED数据
*/
void syncAnYanAedData();
}
@@ -10,7 +10,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.renkang.emergency.aed.entity.AedLocationEquipment;
import com.renkang.anyan.client.AnYanClient;
import com.renkang.anyan.model.vo.AnYanAedInfo;
import com.renkang.emergency.aed.manage.AedCacheNewManager;
import com.renkang.emergency.aed.manage.AedManagerNew;
import com.renkang.emergency.aed.mapper.AedEquipmentMangerMapper;
@@ -27,6 +28,7 @@ import com.renkang.emergency.aed.vo.res.manager.AedGeo;
import com.renkang.emergency.bean.response.SrcInfo;
import com.renkang.emergency.entity.AedEquipmentManger;
import org.apache.poi.ss.usermodel.Workbook;
import org.jeecg.bean.response.DepartEasyVO;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.util.DictUtil;
import org.jeecg.common.system.vo.DictModel;
@@ -50,6 +52,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@@ -93,6 +96,8 @@ public class AedEquipmentMangerServiceImpl extends ServiceImpl<AedEquipmentMange
private DictUtil dictUtil;
@Autowired
private GlobalManager globalManager;
@Autowired
private AnYanClient anYanClient;
@Override
public IPage<AEDManagerPageRes> queryManagerPageList(Integer pageNo, Integer pageSize, String name, Integer type, String orgCode, String mfrs, String model, String hostSerialNum) {
@@ -580,4 +585,66 @@ public class AedEquipmentMangerServiceImpl extends ServiceImpl<AedEquipmentMange
public List<AedEquipmentManger> selectAedAllBack() {
return list();
}
@Override
public void syncAnYanAedData() {
//通过安眼接口查询AED数据 ps:重要说明 ,此更新接口是完全以安眼接口返回的AED数据为基准,本系统自行维护或者修改的数据都会被覆盖掉(安眼有的数据才会被覆盖)
List<AnYanAedInfo> anYanAedInfos = anYanClient.queryAnYanAedInfo();
if(ObjectUtil.isNotEmpty(anYanAedInfos)){
LambdaQueryWrapper<AedEquipmentManger> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(AedEquipmentManger::getPublishFlag, 1); //只处理已布点的数据
List<AedEquipmentManger> equipmentMangerList = list(wrapper);
List<AedEquipmentManger> saveOrUpdateBatchList = new ArrayList<>();
//通过安眼平台返回的单位名称去反查本系统的orgCode
Map<String, List<DepartEasyVO>> orgMap = sysBaseAPI.queryDeptByName( anYanAedInfos.stream().map(AnYanAedInfo::getThirdOfficeName).collect(Collectors.toSet()));
for (AnYanAedInfo anYanAedInfo : anYanAedInfos) {
try {
AedEquipmentManger equipmentManger = equipmentMangerList.stream().filter(re -> anYanAedInfo.getId().equals(re.getAyId())).findFirst().orElse(new AedEquipmentManger());
equipmentManger.setName("自动体外除颤仪");
equipmentManger.setPublishFlag(0);
if(StrUtil.isNotEmpty(anYanAedInfo.getLat()) && StrUtil.isNotEmpty(anYanAedInfo.getLon())){
equipmentManger.setGeoCollectType(1);
equipmentManger.setPublishFlag(1);
BigDecimal lon = BigDecimal.valueOf(Double.parseDouble(anYanAedInfo.getLon())).setScale(6, RoundingMode.HALF_UP);
BigDecimal lat = BigDecimal.valueOf(Double.parseDouble(anYanAedInfo.getLat())).setScale(6, RoundingMode.HALF_UP);
equipmentManger.setLongitude(lon);
equipmentManger.setLatitude(lat);
equipmentManger.setInstallTime(anYanAedInfo.getCreateDate());
}
//处理所属部门
List<DepartEasyVO> departEasyVOS = orgMap.get(anYanAedInfo.getThirdOfficeName());
if(ObjectUtil.isNotEmpty(departEasyVOS)){
String orgCode = departEasyVOS.stream()
.filter(de -> anYanAedInfo.getSecondOfficeName().equals(de.getParentName()))
.map(DepartEasyVO::getOrgCode)
.findFirst().orElse("");
equipmentManger.setDepartCode(orgCode);
}
equipmentManger.setInstallAddress(anYanAedInfo.getProvidePlace());
equipmentManger.setManageUserMobile(anYanAedInfo.getTel());
equipmentManger.setUpdateTime(new Date());
saveOrUpdate(equipmentManger); //更新信息
saveOrUpdateBatchList.add(equipmentManger);
aedCacheNewManager.deleteCache(equipmentManger.getId()); //删除缓存
aedUtils.removeGeo(equipmentManger.getId()); //删除位置信息
if(equipmentManger.getPublishFlag() == 1){
//添加位置信息
aedUtils.addGeo(equipmentManger.getLongitude().doubleValue(), equipmentManger.getLatitude().doubleValue(), equipmentManger.getId());
}
} catch (Exception e) {
e.printStackTrace();
}
}
//处理需要删除的数据(本次接口没查到的直接删除 , 以安眼接口返回为准)
List<String> anYanAedIds = saveOrUpdateBatchList.stream().map(AedEquipmentManger::getAyId).collect(Collectors.toList());
List<AedEquipmentManger> deleteList = equipmentMangerList.stream().filter(hos -> !anYanAedIds.contains(hos.getAyId())).collect(Collectors.toList());
if(ObjectUtil.isNotEmpty(deleteList)){
for(AedEquipmentManger manger : deleteList){
removeById(manger);
aedCacheNewManager.deleteCache(manger.getId());
aedUtils.removeGeo(manger.getId());
}
}
}
}
}
@@ -1,5 +1,6 @@
package com.renkang.emergency.largeScreen.task;
package com.renkang.emergency.task;
import com.renkang.emergency.aed.service.IAedEquipmentMangerService;
import com.renkang.emergency.largeScreen.service.ILargeScreenService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
@@ -12,6 +13,7 @@ import org.springframework.stereotype.Component;
@RequiredArgsConstructor
public class LargeScreenJob {
private final ILargeScreenService largeScreenService;
private final IAedEquipmentMangerService aedEquipmentMangerService;
/**
* 同步安眼系统数据缓存redis
@@ -41,4 +43,17 @@ public class LargeScreenJob {
return ReturnT.FAIL;
}
}
/**
* 同步安眼系统中的油aed数据
*/
@XxlJob(value = "syncAnYanAedData")
public ReturnT<String> syncAnYanAedData() {
try {
aedEquipmentMangerService.syncAnYanAedData();
return ReturnT.SUCCESS;
} catch (Exception e) {
return ReturnT.FAIL;
}
}
}