Commit 303d0f20 authored by 赵啸非's avatar 赵啸非

修改同步逻辑

parent 8432a1f3
......@@ -39,6 +39,10 @@ public class DevicePdu extends BaseEntityLong {
* 站点名称
*/
private String siteName;
/**
* 产品ID
*/
private Long productId;
/**
* 产品编码
*/
......
package com.mortals.xhx.feign.site;
import com.alibaba.fastjson.JSON;
import com.mortals.framework.common.Rest;
import com.mortals.xhx.common.pdu.RespData;
import com.mortals.xhx.common.pdu.site.SitePdu;
import com.mortals.xhx.feign.IFeign;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 站点 Feign接口
*
* @author zxfei
* @date 2022-06-28
*/
@FeignClient(name = "base-manager", path = "/base", fallbackFactory = SiteFeignFallbackFactory.class)
public interface ISiteFeign extends IFeign {
/**
* 查看站点列表
*
* @param sitePdu
* @return
*/
@PostMapping(value = "/site/interlist")
Rest<RespData<List<SitePdu>>> list(@RequestBody SitePdu sitePdu);
/**
* 查看站点
*
* @param id
* @return
*/
@GetMapping(value = "/site/interinfo")
Rest<SitePdu> info(@RequestParam(value = "id") Long id);
/**
* 删除站点
*
* @param ids
* @return
*/
@GetMapping(value = "/site/delete")
Rest<Void> delete(Long[] ids, @RequestHeader("Authorization") String authorization);
/**
* 站点保存更新
*
* @param sitePdu
* @return
*/
@PostMapping(value = "/site/save")
Rest<RespData<SitePdu>> save(@RequestBody SitePdu sitePdu, @RequestHeader("Authorization") String authorization);
/**
* 获取站点树
*
* @return
*/
@GetMapping(value = "/site/siteTree")
String siteTree(@RequestHeader("Authorization") String authorization);
/**
* 查询站点及子站点
*
* @param sitePdu
* @return
*/
@PostMapping(value = "/site/getFlatSitesBySiteId")
Rest<List<SitePdu>> getFlatSitesBySiteId(@RequestBody SitePdu sitePdu);
/**
* 查询站点及子站点
*
* @param sitePdu
* @return
*/
@PostMapping(value = "/site/getFlatSitesByAreaCode")
Rest<List<SitePdu>> getFlatSitesByAreaCode(@RequestBody SitePdu sitePdu);
}
@Slf4j
@Component
class SiteFeignFallbackFactory implements FallbackFactory<ISiteFeign> {
@Override
public ISiteFeign create(Throwable t) {
log.error("异常:", t);
return new ISiteFeign() {
@Override
public Rest<RespData<List<SitePdu>>> list(SitePdu sitePdu) {
return Rest.fail("暂时无法获取站点列表,请稍后再试!");
}
@Override
public Rest<SitePdu> info(Long id) {
return Rest.fail("暂时无法获取站点详细,请稍后再试!");
}
@Override
public Rest<Void> delete(Long[] ids, String authorization) {
return Rest.fail("暂时无法删除站点,请稍后再试!");
}
@Override
public Rest<RespData<SitePdu>> save(SitePdu sitePdu, String authorization) {
return Rest.fail("暂时无法保存站点,请稍后再试!");
}
@Override
public String siteTree(String authorization) {
return JSON.toJSONString(Rest.fail("暂时无法获取站点树,请稍后再试!"));
}
@Override
public Rest<List<SitePdu>> getFlatSitesBySiteId(SitePdu sitePdu) {
return Rest.fail("暂时无法获取站点子站点,请稍后再试!");
}
@Override
public Rest<List<SitePdu>> getFlatSitesByAreaCode(SitePdu sitePdu) {
return Rest.fail("暂时无法获取站点子站点,请稍后再试!");
}
};
}
}
package com.mortals.xhx.feign.site;
import com.mortals.framework.common.Rest;
import com.mortals.xhx.common.pdu.RespData;
import com.mortals.xhx.common.pdu.site.SiteMatterPdu;
import com.mortals.xhx.feign.IFeign;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 站点事项 Feign接口
* @author zxfei
* @date 2023-02-17
*/
@FeignClient(name = "base-manager", path = "/base", fallbackFactory = SiteMatterFeignFallbackFactory.class)
public interface ISiteMatterFeign extends IFeign {
/**
* 查看站点事项列表
*
* @param siteMatterPdu
* @return
*/
@PostMapping(value = "/site/matter/interlist")
Rest<RespData<List<SiteMatterPdu>>> list(@RequestBody SiteMatterPdu siteMatterPdu);
/**
* 查看站点事项
*
* @param id
* @return
*/
@GetMapping(value = "/site/matter/interinfo")
Rest<SiteMatterPdu> info(@RequestParam(value = "id") Long id);
/**
* 删除站点事项
*
* @param ids
* @return
*/
@GetMapping(value = "/site/matter/delete")
Rest<Void> delete(Long[] ids,@RequestHeader("Authorization") String authorization);
/**
* 站点事项保存更新
*
* @param siteMatterPdu
* @return
*/
@PostMapping(value = "/site/matter/save")
Rest<RespData<SiteMatterPdu>> save(@RequestBody SiteMatterPdu siteMatterPdu,@RequestHeader("Authorization") String authorization);
}
@Slf4j
@Component
class SiteMatterFeignFallbackFactory implements FallbackFactory<ISiteMatterFeign> {
@Override
public ISiteMatterFeign create(Throwable t) {
return new ISiteMatterFeign() {
@Override
public Rest<RespData<List<SiteMatterPdu>>> list(SiteMatterPdu siteMatterPdu) {
return Rest.fail("暂时无法获取站点事项列表,请稍后再试!");
}
@Override
public Rest<SiteMatterPdu> info(Long id) {
return Rest.fail("暂时无法获取站点事项详细,请稍后再试!");
}
@Override
public Rest<Void> delete(Long[] ids, String authorization) {
return Rest.fail("暂时无法删除站点事项,请稍后再试!");
}
@Override
public Rest<RespData<SiteMatterPdu>> save(SiteMatterPdu siteMatterPdu, String authorization) {
return Rest.fail("暂时无法保存站点事项,请稍后再试!");
}
};
}
}
package com.mortals.xhx.daemon.task;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.ITask;
import com.mortals.framework.service.ITaskExcuteService;
import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.common.pdu.RespData;
import com.mortals.xhx.common.pdu.device.DevicePdu;
import com.mortals.xhx.common.pdu.site.SitePdu;
import com.mortals.xhx.common.utils.BeanUtil;
import com.mortals.xhx.feign.device.IDeviceFeign;
import com.mortals.xhx.feign.site.ISiteFeign;
import com.mortals.xhx.module.device.model.DeviceEntity;
import com.mortals.xhx.module.device.model.DeviceQuery;
import com.mortals.xhx.module.device.service.DeviceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 同步事项列表
*/
@Slf4j
@Service("SyncSiteDeviceTask")
public class SyncSiteDeviceTaskImpl implements ITaskExcuteService {
@Autowired
private ISiteFeign siteFeign;
@Autowired
private IDeviceFeign deviceFeign;
@Autowired
private DeviceService deviceService;
@Override
public void excuteTask(ITask task) throws AppException {
log.info("开始同步设备列表!");
syncDevice();
log.info("结束同步设备列表!");
log.info("开始同步皮肤列表!");
}
private void syncDevice() {
SitePdu sitePdu = new SitePdu();
sitePdu.setId(1L);
Rest<List<SitePdu>> siteRest = siteFeign.getFlatSitesBySiteId(sitePdu);
if (siteRest.getCode() == YesNoEnum.YES.getValue()) {
log.info("站点总数量:{}", siteRest.getData().size());
siteRest.getData().forEach(site -> {
log.info("站点名称:{}", site.getSiteName());
DevicePdu devicePdu = new DevicePdu();
//devicePdu.setProductCode("xxgk");
devicePdu.setProductId(23L);
devicePdu.setSiteId(site.getId());
devicePdu.setSize(-1);
Rest<RespData<List<DevicePdu>>> deviceRest = deviceFeign.list(devicePdu);
log.info("deviceRest:{}", JSON.toJSONString(deviceRest));
if (YesNoEnum.YES.getValue() == deviceRest.getCode()) {
List<DevicePdu> devicePduList = deviceRest.getData().getData();
log.info("信息公开总数量:{}", devicePduList.size());
if (!ObjectUtils.isEmpty(devicePduList)) {
List<DeviceEntity> newDeviceList = devicePduList.stream().map(newDevice -> {
DeviceEntity deviceEntity = new DeviceEntity();
deviceEntity.initAttrValue();
BeanUtils.copyProperties(newDevice, deviceEntity, BeanUtil.getNullPropertyNames(newDevice));
return deviceEntity;
}).collect(Collectors.toList());
List<DeviceEntity> oldDeviceList = deviceService.find(new DeviceQuery().siteId(site.getId()));
log.info("siteId:{} oldDeviceList size:{}", site.getId(), oldDeviceList.size());
Map<String, DeviceEntity> oldDeviceMap = oldDeviceList.stream().collect(Collectors.toMap(x -> x.getDeviceCode(), y -> y, (o, n) -> n));
Map<String, DeviceEntity> newDeviceMap = newDeviceList.stream().collect(Collectors.toMap(x -> x.getDeviceCode(), y -> y, (o, n) -> n));
//log.info("oldDeviceMap:{}", JSON.toJSONString(oldDeviceMap));
List<DeviceEntity> updateDeviceLsit = newDeviceList.stream().map(item -> {
if (oldDeviceMap.containsKey(item.getDeviceCode())) {
item.setId(oldDeviceMap.get(item.getDeviceCode()).getId());
// item.setDeviceId(item.getId());
item.setProductCode(oldDeviceMap.get(item.getDeviceCode()).getProductCode());
item.setProductName(oldDeviceMap.get(item.getDeviceCode()).getProductName());
item.setUpdateTime(new Date());
return item;
}
return null;
}).filter(f -> f != null).collect(Collectors.toList());
List<DeviceEntity> saveDeviceList = newDeviceList.stream().map(item -> {
//log.info("deviceCode:{},oldDeviceMap:{}",item.getDeviceCode(),oldDeviceMap.containsKey(item.getDeviceCode()));
if (!oldDeviceMap.containsKey(item.getDeviceCode())) {
item.setId(item.getId());
item.setCreateUserId(1L);
item.setCreateUserName("系统管理员");
item.setCreateTime(new Date());
return item;
}
return null;
}).filter(f -> f != null).collect(Collectors.toList());
//做差集
List<Long> delDeviceList = oldDeviceList.stream().map(item -> {
if (!newDeviceMap.containsKey(item.getDeviceCode())) {
return item.getId();
}
return null;
}).filter(f -> f != null).collect(Collectors.toList());
if (!ObjectUtils.isEmpty(updateDeviceLsit)) {
log.info("设备更新,size:{}", updateDeviceLsit.size());
deviceService.update(updateDeviceLsit);
}
if (!ObjectUtils.isEmpty(saveDeviceList)) {
log.info("设备新增,size:{}", saveDeviceList.size());
deviceService.save(saveDeviceList);
}
if (!ObjectUtils.isEmpty(delDeviceList)) {
log.info("设备删除,size:{}", delDeviceList.size());
deviceService.remove(delDeviceList, null);
}
}
} else {
log.info("设备列表查询异常,{}", JSON.toJSONString(deviceRest));
}
});
} else {
log.info("站点列表查询异常,{}", JSON.toJSONString(siteRest));
}
}
@Override
public void stopTask(ITask task) throws AppException {
}
public static void main(String[] args) {
String str = "http://10.12.185.213:11071/file%2Ffileupload%2F1682068396920.css";
System.out.println(StrUtil.subAfter(str, "/", true));
}
}
package com.mortals.xhx.module.device.service;
import com.mortals.framework.common.Rest;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDCacheService;
import com.mortals.xhx.module.device.dao.DeviceDao;
import com.mortals.xhx.module.device.model.DeviceEntity;
/**
* DeviceService
*
* 设备 service接口
*
* @author zxfei
* @date 2023-02-25
*/
public interface DeviceService extends ICRUDCacheService<DeviceEntity,Long> {
* DeviceService
* <p>
* 设备 service接口
*
* @author zxfei
* @date 2023-02-25
*/
public interface DeviceService extends ICRUDCacheService<DeviceEntity, Long> {
DeviceDao getDao();
Rest<DeviceEntity> deviceInfoByCode(String deviceCode, Context context);
/**
* 设备激活
*
* @param deviceCode
* @param context
*/
......@@ -26,6 +31,7 @@ public interface DeviceService extends ICRUDCacheService<DeviceEntity,Long> {
/**
* 设备启用停用
*
* @param id
* @param context
*/
......
......@@ -12,10 +12,7 @@ import com.mortals.xhx.common.pdu.LoginForm;
import com.mortals.xhx.common.pdu.device.DeviceReq;
import com.mortals.xhx.feign.device.IDeviceFeign;
import com.mortals.xhx.module.device.dao.DeviceDao;
import com.mortals.xhx.module.device.model.DeviceEntity;
import com.mortals.xhx.module.device.model.DeviceFileQuery;
import com.mortals.xhx.module.device.model.DeviceQuery;
import com.mortals.xhx.module.device.model.DeviceWorkmanQuery;
import com.mortals.xhx.module.device.model.*;
import com.mortals.xhx.module.device.service.DeviceFileService;
import com.mortals.xhx.module.device.service.DeviceService;
import com.mortals.xhx.module.device.service.DeviceWorkmanService;
......@@ -69,6 +66,21 @@ public class DeviceServiceImpl extends AbstractCRUDCacheServiceImpl<DeviceDao, D
super.findAfter(entity, context, list);
}
@Override
public Rest<DeviceEntity> deviceInfoByCode(String deviceCode, Context context) {
DeviceEntity deviceEntity = this.selectOne(new DeviceQuery().deviceCode(deviceCode), context);
if (ObjectUtils.isEmpty(deviceEntity)){
throw new AppException("设备编码未找到相应设备!code:" + deviceCode);
}
List<DeviceWorkmanEntity> deviceWorkmanEntityList = deviceWorkmanService.find(new DeviceWorkmanQuery().deviceId(deviceEntity.getId()));
List<DeviceFileEntity> deviceFileEntityList = deviceFileService.find(new DeviceFileQuery().deviceId(deviceEntity.getId()), context);
deviceEntity.setDeviceWorkmanEntityList(deviceWorkmanEntityList);
deviceEntity.setDeviceFileEntityList(deviceFileEntityList);
return Rest.ok(deviceEntity);
}
@Override
public void active(String deviceCode, Context context) {
DeviceEntity deviceEntity = this.selectOne(new DeviceQuery().deviceCode(deviceCode));
......
......@@ -67,6 +67,30 @@ public class DeviceController extends BaseCRUDJsonBodyMappingController<DeviceSe
}
/**
* 设备获取信息
*/
@PostMapping(value = "infoByCode")
@UnAuth
public Rest<DeviceEntity> deviceInfoByCode(@RequestBody DeviceEntity deviceEntity) {
log.info("设备信息获取:{}", deviceEntity.getDeviceCode());
String busiDesc = this.getModuleDesc() + "设备信息获取";
Rest<DeviceEntity> rest = Rest.ok(busiDesc + " 【成功】");
if (ObjectUtils.isEmpty(deviceEntity.getDeviceCode())) throw new AppException("设备编码不能为空");
try {
rest = this.service.deviceInfoByCode(deviceEntity.getDeviceCode(), getContext());
if (rest.getCode() != 1) {
throw new AppException(rest.getMsg());
}
recordSysLog(request, busiDesc + " 【成功】");
} catch (Exception e) {
log.error("设备信息获取", e);
rest = Rest.fail(super.convertException(e));
}
return rest;
}
/**
* 设备激活
*/
......
......@@ -143,20 +143,20 @@
</trim>
</sql>
<!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="DeviceEntity" useGeneratedKeys="true" keyProperty="id">
<insert id="insert" parameterType="DeviceEntity" >
insert into mortals_xhx_device
(deviceName,roomId,roomName,deviceCode,deviceMac,siteId,siteCode,siteName,productCode,productName,deviceFirmname,resolution,deviceInBuilding,deviceInFloor,defectsLiabilityPeriod,leadingOfficial,deviceAddr,leadingOfficialTelephone,devicePhotoPath,ip,centernum,port,deviceStatus,enabled,deviceRemark,onlineTime,offlineTime,createUserId,createTime,updateUserId,updateTime)
(id,deviceName,roomId,roomName,deviceCode,deviceMac,siteId,siteCode,siteName,productCode,productName,deviceFirmname,resolution,deviceInBuilding,deviceInFloor,defectsLiabilityPeriod,leadingOfficial,deviceAddr,leadingOfficialTelephone,devicePhotoPath,ip,centernum,port,deviceStatus,enabled,deviceRemark,onlineTime,offlineTime,createUserId,createTime,updateUserId,updateTime)
VALUES
(#{deviceName},#{roomId},#{roomName},#{deviceCode},#{deviceMac},#{siteId},#{siteCode},#{siteName},#{productCode},#{productName},#{deviceFirmname},#{resolution},#{deviceInBuilding},#{deviceInFloor},#{defectsLiabilityPeriod},#{leadingOfficial},#{deviceAddr},#{leadingOfficialTelephone},#{devicePhotoPath},#{ip},#{centernum},#{port},#{deviceStatus},#{enabled},#{deviceRemark},#{onlineTime},#{offlineTime},#{createUserId},#{createTime},#{updateUserId},#{updateTime})
(#{id},#{deviceName},#{roomId},#{roomName},#{deviceCode},#{deviceMac},#{siteId},#{siteCode},#{siteName},#{productCode},#{productName},#{deviceFirmname},#{resolution},#{deviceInBuilding},#{deviceInFloor},#{defectsLiabilityPeriod},#{leadingOfficial},#{deviceAddr},#{leadingOfficialTelephone},#{devicePhotoPath},#{ip},#{centernum},#{port},#{deviceStatus},#{enabled},#{deviceRemark},#{onlineTime},#{offlineTime},#{createUserId},#{createTime},#{updateUserId},#{updateTime})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_device
(deviceName,roomId,roomName,deviceCode,deviceMac,siteId,siteCode,siteName,productCode,productName,deviceFirmname,resolution,deviceInBuilding,deviceInFloor,defectsLiabilityPeriod,leadingOfficial,deviceAddr,leadingOfficialTelephone,devicePhotoPath,ip,centernum,port,deviceStatus,enabled,deviceRemark,onlineTime,offlineTime,createUserId,createTime,updateUserId,updateTime)
(id,deviceName,roomId,roomName,deviceCode,deviceMac,siteId,siteCode,siteName,productCode,productName,deviceFirmname,resolution,deviceInBuilding,deviceInFloor,defectsLiabilityPeriod,leadingOfficial,deviceAddr,leadingOfficialTelephone,devicePhotoPath,ip,centernum,port,deviceStatus,enabled,deviceRemark,onlineTime,offlineTime,createUserId,createTime,updateUserId,updateTime)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.deviceName},#{item.roomId},#{item.roomName},#{item.deviceCode},#{item.deviceMac},#{item.siteId},#{item.siteCode},#{item.siteName},#{item.productCode},#{item.productName},#{item.deviceFirmname},#{item.resolution},#{item.deviceInBuilding},#{item.deviceInFloor},#{item.defectsLiabilityPeriod},#{item.leadingOfficial},#{item.deviceAddr},#{item.leadingOfficialTelephone},#{item.devicePhotoPath},#{item.ip},#{item.centernum},#{item.port},#{item.deviceStatus},#{item.enabled},#{item.deviceRemark},#{item.onlineTime},#{item.offlineTime},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime})
(#{id},#{item.deviceName},#{item.roomId},#{item.roomName},#{item.deviceCode},#{item.deviceMac},#{item.siteId},#{item.siteCode},#{item.siteName},#{item.productCode},#{item.productName},#{item.deviceFirmname},#{item.resolution},#{item.deviceInBuilding},#{item.deviceInFloor},#{item.defectsLiabilityPeriod},#{item.leadingOfficial},#{item.deviceAddr},#{item.leadingOfficialTelephone},#{item.devicePhotoPath},#{item.ip},#{item.centernum},#{item.port},#{item.deviceStatus},#{item.enabled},#{item.deviceRemark},#{item.onlineTime},#{item.offlineTime},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime})
</foreach>
</insert>
......
......@@ -8,7 +8,7 @@
"baseLogin": "http://192.168.0.98:11078/base"
},
"test": {
"baseUrl": "http://192.168.0.98:11085/office",
"baseUrl": "http://192.168.0.252:11061/infopublish",
"baseLogin": "http://192.168.0.98:11078/base"
},
"portal": {
......
......@@ -16,7 +16,7 @@ Content-Type: application/json
{
"loginName":"admin",
"password":"admin",
"securityCode":"8888"
"securityCode":"admin"
}
> {%
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment