package com.fzzy.gateway.service; import com.bstek.dorado.annotation.DataProvider; import com.bstek.dorado.annotation.DataResolver; import com.bstek.dorado.annotation.Expose; import com.fzzy.api.Constant; import com.fzzy.api.data.ApiCommonDevice; import com.fzzy.api.data.DepotType; import com.fzzy.api.data.GatewayDeviceType; import com.fzzy.api.utils.ContextUtil; import com.fzzy.gateway.GatewayUtils; import com.fzzy.gateway.entity.GatewayDevice; import com.fzzy.gateway.service.repository.GatewayDeviceRep; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; @Slf4j @Component public class GatewayDeviceService { @Resource private GatewayDeviceRep gatewayDeviceRep; /** * gatewayDeviceService#listAll * * @return */ @DataProvider public List listAll() { Sort sort = new Sort(Sort.Direction.ASC, "deviceId"); List list = gatewayDeviceRep.findAll(sort); if (null == list || list.isEmpty()) return list; List result = new ArrayList<>(); ApiCommonDevice commonDevice; for (GatewayDevice device : list) { commonDevice = Constant.getCommonDeviceCache(device.getDeviceSn()); if (null != commonDevice) { device.setIp(commonDevice.getIp()); device.setPort(commonDevice.getPort()); device.setStatus(commonDevice.getStatus()); device.setOnlineTime(commonDevice.getOnlineTime()); } result.add(device); } return result; } /** * gatewayDeviceService#updateSave * * @param data */ @DataResolver public void updateSave(GatewayDevice data) { GatewayDevice data2 = new GatewayDevice(); BeanUtils.copyProperties(data, data2); if (null == data2.getStatus()) { data.setStatus(Constant.YN_Y); if (GatewayDeviceType.TYPE_07.equals(data2.getType())) { data.setStatus(Constant.YN_N); } } if (null == data2.getDeviceSn()) { if (null != data2.getIp()) { data.setDeviceSn(data2.getIp()); } else { data.setDeviceSn(data2.getDeviceId()); } } if (null == data2.getDepotType()) { data2.setDepotType(DepotType.TYPE_01.getCode()); } if (null == data2.getId()) { data2.setId(ContextUtil.getUUID()); gatewayDeviceRep.save(data2); } else { gatewayDeviceRep.save(data2); } flushCache(); } public void updateData(GatewayDevice device) { device.setStatus(Constant.YN_Y); gatewayDeviceRep.save(device); flushCacheOne(device); } /** * gatewayDeviceService#delData * * @param data */ @Expose public String delData(GatewayDevice data) { GatewayDevice data2 = new GatewayDevice(); BeanUtils.copyProperties(data, data2); gatewayDeviceRep.delete(data2); GatewayUtils.removeCache(data2); flushCache(); return null; } public void flushCache() { List list = listAll(); if (null == list || list.isEmpty()) return; for (GatewayDevice device : list) { GatewayUtils.add2Cache(device); } } private void flushCacheOne(GatewayDevice device) { GatewayUtils.add2Cache(device); } @Expose public String test() { log.info("-----------test-------------------"); return "SUCCESS"; } /** * 根据实际通讯分机设置,当前分机在线 * * @param commonDevice 实际通讯设备 */ public void onlineByCommonDevice(ApiCommonDevice commonDevice) { List list = GatewayUtils.getCacheByDeviceSn2(commonDevice.getSn()); if (null == list || list.isEmpty()) return; for (GatewayDevice device : list) { device.setIp(commonDevice.getIp()); device.setPort(commonDevice.getPort()); device.setOnlineTime(new Date()); device.setStatus(Constant.YN_Y); device.setDeviceSn(commonDevice.getSn()); GatewayUtils.add2Cache(device); } } public void OfflineByCommonDevice(ApiCommonDevice commonDevice) { List list = GatewayUtils.getCacheByDeviceSn2(commonDevice.getSn()); if (null == list || list.isEmpty()) return; for (GatewayDevice device : list) { device.setIp(commonDevice.getIp()); device.setPort(commonDevice.getPort()); device.setStatus(Constant.YN_N); GatewayUtils.add2Cache(device); } } }