展连设备数据解析策略

This commit is contained in:
mi9688
2024-11-21 17:48:58 +08:00
parent db13870ffe
commit 148800d58f
26 changed files with 515 additions and 196 deletions

View File

@ -1,5 +1,6 @@
package com.fastbee.framework.web.service; package com.fastbee.framework.web.service;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.fastbee.common.constant.CacheConstants; import com.fastbee.common.constant.CacheConstants;
import com.fastbee.common.constant.Constants; import com.fastbee.common.constant.Constants;
import com.fastbee.common.core.domain.entity.SysDept; import com.fastbee.common.core.domain.entity.SysDept;
@ -19,6 +20,7 @@ import com.fastbee.common.utils.ip.IpUtils;
import com.fastbee.framework.manager.AsyncManager; import com.fastbee.framework.manager.AsyncManager;
import com.fastbee.framework.manager.factory.AsyncFactory; import com.fastbee.framework.manager.factory.AsyncFactory;
import com.fastbee.framework.security.context.AuthenticationContextHolder; import com.fastbee.framework.security.context.AuthenticationContextHolder;
import com.fastbee.system.mapper.SysDeptMapper;
import com.fastbee.system.service.ISysConfigService; import com.fastbee.system.service.ISysConfigService;
import com.fastbee.system.service.ISysDeptService; import com.fastbee.system.service.ISysDeptService;
import com.fastbee.system.service.ISysUserService; import com.fastbee.system.service.ISysUserService;
@ -59,8 +61,11 @@ public class SysLoginService {
@Resource @Resource
private SysPasswordService passwordService; private SysPasswordService passwordService;
@Resource // @Resource
private ISysDeptService sysDeptService; // private ISysDeptService sysDeptService;
@Autowired
private SysDeptMapper deptMapper;
/** /**
* 登录验证 * 登录验证
@ -111,7 +116,11 @@ public class SysLoginService {
// throw new ServiceException("只允许终端用户登录!"); // throw new ServiceException("只允许终端用户登录!");
// } // }
// } // }
SysDept sysDept = sysDeptService.selectDeptById(deptId);
SysDept sysDept = new LambdaQueryChainWrapper<>(deptMapper)
.select(SysDept::getDeptUserId)
.eq(SysDept::getDeptId, deptId)
.one();
recordLoginInfo(loginUser.getUserId()); recordLoginInfo(loginUser.getUserId());
loginUser.setLanguage(language); loginUser.setLanguage(language);
loginUser.setDeptUserId(sysDept.getDeptUserId()); loginUser.setDeptUserId(sysDept.getDeptUserId());

View File

@ -1,12 +1,10 @@
package com.fastbee.data.controller.aaScreenAgricultural; package com.fastbee.data.controller.aaScreenAgricultural;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.fastbee.common.core.controller.BaseController; import com.fastbee.common.core.controller.BaseController;
import com.fastbee.common.core.domain.AjaxResult; import com.fastbee.common.core.domain.AjaxResult;
import com.fastbee.deviceData.api.devlink.service.DevLinkBaseService; import com.fastbee.deviceData.api.devlink.service.ZhanLianBaseService;
import com.fastbee.deviceInfo.manager.DeviceInformationManager; import com.fastbee.deviceInfo.manager.DeviceInformationManager;
import com.fastbee.iot.domain.AlertLog; import com.fastbee.iot.domain.AlertLog;
import com.fastbee.iot.mapper.AlertLogMapper; import com.fastbee.iot.mapper.AlertLogMapper;
@ -26,7 +24,7 @@ import java.util.Map;
public class DeviceAlarmController extends BaseController { public class DeviceAlarmController extends BaseController {
@Autowired @Autowired
private DevLinkBaseService devLinkBaseService; private ZhanLianBaseService zhanLianBaseService;
@Autowired @Autowired
private AlertLogMapper alertLogMapper; private AlertLogMapper alertLogMapper;
@ -75,7 +73,7 @@ public class DeviceAlarmController extends BaseController {
HashMap<String, Object> body = new HashMap<>(); HashMap<String, Object> body = new HashMap<>();
body.put("method","get"); body.put("method","get");
body.put("path","api/v1/product/device/list"); body.put("path","api/v1/product/device/list");
JSONObject data = devLinkBaseService.baseRequest(body); JSONObject data = zhanLianBaseService.baseRequest(body);
//仁科设备 //仁科设备

View File

@ -1,6 +1,7 @@
package com.fastbee.data.controller.aaScreenAgricultural; package com.fastbee.data.controller.aaScreenAgricultural;
import com.fastbee.common.core.domain.AjaxResult; import com.fastbee.common.core.domain.AjaxResult;
import com.fastbee.deviceData.service.IDeviceRealtimedataMeteorologyService;
import com.fastbee.deviceData.service.impl.DeviceRealtimedataMeteorologyServiceImpl; import com.fastbee.deviceData.service.impl.DeviceRealtimedataMeteorologyServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -12,7 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
public class DeviceRealtimedataMeteorologyController { public class DeviceRealtimedataMeteorologyController {
@Autowired @Autowired
private DeviceRealtimedataMeteorologyServiceImpl deviceRealtimedataMeteorologyService; private IDeviceRealtimedataMeteorologyService deviceRealtimedataMeteorologyService;
/** /**
* 获取最新的一条气象数据 * 获取最新的一条气象数据

View File

@ -2,7 +2,9 @@ package com.fastbee.data.controller.aaScreenAgricultural;
import com.fastbee.common.core.domain.AjaxResult; import com.fastbee.common.core.domain.AjaxResult;
import com.fastbee.deviceData.domain.DeviceRealtimedataMoisture; import com.fastbee.deviceData.domain.DeviceRealtimedataMoisture;
import com.fastbee.deviceData.service.IDeviceRealtimedataMoistureService;
import com.fastbee.deviceData.service.impl.DeviceRealtimedataMoistureServiceImpl; import com.fastbee.deviceData.service.impl.DeviceRealtimedataMoistureServiceImpl;
import com.fastbee.deviceInfo.service.IDeviceInformationMoistureService;
import com.fastbee.deviceInfo.service.impl.DeviceInformationMoistureServiceImpl; import com.fastbee.deviceInfo.service.impl.DeviceInformationMoistureServiceImpl;
import io.lettuce.core.dynamic.annotation.Param; import io.lettuce.core.dynamic.annotation.Param;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -14,21 +16,26 @@ import org.springframework.web.bind.annotation.RestController;
@RestController() @RestController()
@RequestMapping("/moisture") @RequestMapping("/moisture")
public class DeviceRealtimedataMoistureController { public class DeviceRealtimedataMoistureController {
@Autowired @Autowired
private DeviceRealtimedataMoistureServiceImpl deviceRealtimedataMoistureServiceImpl; private IDeviceRealtimedataMoistureService deviceRealtimedataMoistureService;
@Autowired @Autowired
private DeviceInformationMoistureServiceImpl deviceInformationMoistureServiceImpl; private IDeviceInformationMoistureService deviceInformationMoistureService;
/** /**
* 获取最新一条墒情数据 * 获取最新一条墒情数据
* @return
*/ */
@GetMapping("/weather/realtimedata") @GetMapping("/weather/realtimedata")
public AjaxResult getLatestWeatherRealtimedata( String deviceId) { public AjaxResult getLatestWeatherRealtimedata( String deviceId) {
return AjaxResult.success(deviceRealtimedataMoistureServiceImpl.getLatestWeatherRealtimedata(deviceId)); return AjaxResult.success(deviceRealtimedataMoistureService.getLatestWeatherRealtimedata(deviceId));
} }
/**
* 获取最新一条墒情设备下拉列表
*/
@GetMapping("/weather/pullDown") @GetMapping("/weather/pullDown")
public AjaxResult getLatestWeatherPullDown() { public AjaxResult getLatestWeatherPullDown() {
return AjaxResult.success(deviceInformationMoistureServiceImpl.selectDeviceInformationMoistureList(null)); return AjaxResult.success(deviceInformationMoistureService.selectDeviceInformationMoistureList(null));
} }
} }

View File

@ -38,8 +38,6 @@ public class DeviceRealtimedataSeedlingGrowthController {
.list(); .list();
//获取监控播放地址 //获取监控播放地址
list.forEach(this::setPlayUrl); list.forEach(this::setPlayUrl);
return AjaxResult.success(list); return AjaxResult.success(list);
} }

View File

@ -1,53 +0,0 @@
package com.fastbee.deviceData.api.devlink.service;
import org.springframework.stereotype.Component;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.nio.charset.StandardCharsets;
@Component
public class DevLinkAuthorizationService {
private final static String ak = "suibin";
private final static String sk = "MZALH5WB";
private final static String authId = "23";
private final static String BASE_URL = "https://plat.developlink.cloud/prod-api/iot/data/forward";
public String getBaseUrl(){
return BASE_URL;
}
public String getAuth(){
String sign;
// long time = 1731480451430L;
long time = System.currentTimeMillis();
String message = "ak=" + ak + "&authId=" + authId + "&time=" + time;
try {
SecretKeySpec keySpec = new SecretKeySpec(
sk.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
sign = DatatypeConverter.printHexBinary(rawHmac).toLowerCase();
// System.out.println("d6dbca6837dcfec70954b7261eb6dfadc06fcdfdb771d86ee901ab4823bbb33c");
System.err.println("result:"+sign);
} catch (Exception e) {
throw new RuntimeException("Unable to generate HMAC : " + e.getMessage(), e);
}
return "?ak="+ak+"&time="+time+"&sign="+sign+"&authId="+authId;
}
public static void main(String[] args) {
DevLinkAuthorizationService de = new DevLinkAuthorizationService();
de.getAuth();
System.out.println(de.getBaseUrl()+de.getAuth());
}
}

View File

@ -0,0 +1,82 @@
package com.fastbee.deviceData.api.devlink.service;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.nio.charset.StandardCharsets;
@Component
@AllArgsConstructor
@Builder
@NoArgsConstructor
@Data
public class ZhanLianAuthorizationService {
private String ak = "suibin";
private String sk = "MZALH5WB";
private String authId = "23";
private String endpoint = "https://plat.developlink.cloud/prod-api/iot/data/forward";
public String getAuthEndpoint(){
return endpoint + getDefaultAuth();
}
/**
* 鉴权参数生成
*/
public String getDefaultAuth(){
String sign;
long time = System.currentTimeMillis();
String message = "ak=" + ak + "&authId=" + authId + "&time=" + time;
try {
SecretKeySpec keySpec = new SecretKeySpec(
sk.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
sign = DatatypeConverter.printHexBinary(rawHmac).toLowerCase();
// System.err.println("result:"+sign);
} catch (Exception e) {
throw new RuntimeException("签名生成失败! : " + e.getMessage(), e);
}
return "?ak="+ak+"&time="+time+"&sign="+sign+"&authId="+authId;
}
public String getAuth(ZhanLianConfig zhanLianConfig){
String ak = zhanLianConfig.getAk();
String sk = zhanLianConfig.getSk();
String authId = zhanLianConfig.getAuthId();
String sign;
long time = System.currentTimeMillis();
String message = "ak=" + ak + "&authId=" + authId + "&time=" + time;
try {
SecretKeySpec keySpec = new SecretKeySpec(
sk.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
sign = DatatypeConverter.printHexBinary(rawHmac).toLowerCase();
} catch (Exception e) {
throw new RuntimeException("签名生成失败! : " + e.getMessage(), e);
}
return "?ak="+ak+"&time="+time+"&sign="+sign+"&authId="+authId;
}
public static void main(String[] args) {
ZhanLianAuthorizationService de = new ZhanLianAuthorizationService();
System.out.println("完整请求路径:"+de.getAuthEndpoint());
}
}

View File

@ -5,7 +5,6 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.fastbee.common.exception.ServiceException; import com.fastbee.common.exception.ServiceException;
import com.fastbee.deviceData.domain.DeviceRealtimedataMeteorology;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -14,38 +13,70 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Component @Component
public class DevLinkBaseService { public class ZhanLianBaseService {
@Autowired @Autowired
private DevLinkAuthorizationService authorizationService; private ZhanLianAuthorizationService authorizationService;
/** /**
* 获取设备实时数据 * 基本请求
* @param body 请求负载
* @return 请求结果 data
*/
public JSONObject baseRequest(Map<String,Object> body){
String jsonStr = JSONUtil.toJsonStr(body);
String respStr = HttpUtil.post(authorizationService.getAuthEndpoint(), jsonStr);
JSONObject resp = JSONUtil.parseObj(respStr);
if(!resp.get("code").toString().equals("200")){
throw new ServiceException(resp.get("message").toString());
}
return resp.getJSONObject("data");
}
/**
* 请求设备实时数据
* @param deviceId 设备id * @param deviceId 设备id
* @return 实时数据 * @return 实时数据
*/ */
public Map<String,String> getMetDeviceRealData(String deviceId){ private JSONObject requestDeviceData(String deviceId) {
String result = requestDeviceData(deviceId); //构建请求体
HashMap<String, Object> body = new HashMap<>();
body.put("method","get");
body.put("path","api/v1/product/device/run_status");
Map<String,Object> params=new HashMap<>();
params.put("id", deviceId);
body.put("params",params);
return baseRequest(body);
}
/**
* 根据设备id请求数据并解析设备实时数据为易于存储的map键值对
* @param deviceId 设备id
* @return 实时数据
*/
public Map<String,String> getDeviceRealTimeData(String deviceId){
//解析返回数据 //解析返回数据
JSONObject jsonObject = JSONUtil.parseObj(result); JSONObject data = requestDeviceData(deviceId);
Object data = jsonObject.get("data");
//获取设备状态 //获取设备状态
JSONObject jsonObjectData = JSONUtil.parseObj(data); JSONObject jsonObjectData = JSONUtil.parseObj(data);
Object status = jsonObjectData.get("status"); Object status = jsonObjectData.get("status");
// System.err.println("status:"+status);
//获取设备属性以及实时数据值 //获取设备属性以及实时数据值
Object properties = jsonObjectData.get("properties"); Object properties = jsonObjectData.get("properties");
//获取数据上报时间 //获取数据上报时间
String time = jsonObjectData.get("lastOnlineTime").toString(); String time = jsonObjectData.get("lastOnlineTime").toString();
JSONArray propertiesArray = JSONUtil.parseArray(properties); JSONArray propertiesArray = JSONUtil.parseArray(properties);
DeviceRealtimedataMeteorology realData = new DeviceRealtimedataMeteorology();
//获取设备各项属性实时数据 //获取设备各项属性实时数据
//设备属性与值建立map //设备属性与值建立map
Map<String, String> propertiesMap = new HashMap<>(); Map<String, String> propertiesMap = new HashMap<>();
propertiesArray.forEach(p -> { propertiesArray.forEach(p -> {
Object property = JSONUtil.parseObj(p).get("property"); Object property = JSONUtil.parseObj(p).get("property");
JSONObject propertyMap = JSONUtil.parseObj(property); JSONObject propertyMap = JSONUtil.parseObj(property);
// System.err.println("propertyMap:"+propertyMap);
//属性名称 //属性名称
String name = propertyMap.get("name").toString(); String name = propertyMap.get("name").toString();
//属性key //属性key
@ -59,71 +90,32 @@ public class DevLinkBaseService {
//TODO 属性值历史数据是否需要 //TODO 属性值历史数据是否需要
Object list = JSONUtil.parseObj(p).get("list"); Object list = JSONUtil.parseObj(p).get("list");
// System.err.print("name:"+name);
// System.err.print("key:"+key);
// System.err.println("------------value:"+value);
//建立属性-值映射关系 //建立属性-值映射关系
propertiesMap.put(key,value); propertiesMap.put(key,value);
// saveRealData(key,value,realData);
}); });
propertiesMap.put("status",status.toString()); propertiesMap.put("status",status.toString());
propertiesMap.put("deviceId",deviceId); propertiesMap.put("deviceId",deviceId);
propertiesMap.put("realTime",time); propertiesMap.put("realTime",time);
return propertiesMap; return propertiesMap;
} }
/**
* 请求设备实时数据
* @param deviceId 设备id
* @return 实时数据
*/
private String requestDeviceData(String deviceId) {
DevLinkAuthorizationService authorization = new DevLinkAuthorizationService();
//构建请求体
HashMap<String, Object> body = new HashMap<>();
body.put("method","get");
body.put("path","api/v1/product/device/run_status");
Map<String,Object> params=new HashMap<>();
params.put("id", deviceId);
body.put("params",params);
String jsonStr = JSONUtil.toJsonStr(body);
System.err.println(authorization.getBaseUrl() + authorization.getAuth());
return HttpUtil.post(authorization.getBaseUrl() + authorization.getAuth(), jsonStr);
}
/**
* 基本请求
* @return 请求结果data
*/
public JSONObject baseRequest(Map<String,Object> body){
DevLinkAuthorizationService authorization = new DevLinkAuthorizationService();
String jsonStr = JSONUtil.toJsonStr(body);
System.err.println(authorization.getBaseUrl() + authorization.getAuth());
String respStr = HttpUtil.post(authorization.getBaseUrl() + authorization.getAuth(), jsonStr);
JSONObject resp = JSONUtil.parseObj(respStr);
if(!resp.get("code").toString().equals("200")){
throw new ServiceException(resp.get("message").toString());
}
return resp.getJSONObject("data");
}
public BigDecimal toBigDecimalValue(String str) { public BigDecimal toBigDecimalValue(String str) {
if (str == null||"".equals(str)) { if (str == null|| str.isEmpty()) {
return null; return null;
} }
return new BigDecimal(str); return new BigDecimal(str);
} }
public Long toLongValue(String str) { public Long toLongValue(String str) {
if (str == null||"".equals(str)) { if (str == null|| str.isEmpty()) {
return null; return null;
} }
return Long.parseLong(str); return Long.parseLong(str);
} }
public static void main(String[] args) {
DevLinkBaseService devLinkBaseService = new DevLinkBaseService();
Map<String, String> metDeviceRealData = devLinkBaseService.getMetDeviceRealData("3270");
// System.err.println(metDeviceRealData);
}
} }

View File

@ -0,0 +1,21 @@
package com.fastbee.deviceData.api.devlink.service;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@Builder
@NoArgsConstructor
@Data
public class ZhanLianConfig {
private String ak;
private String sk;
private String authId;
private String endpoint;
}

View File

@ -4,9 +4,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
public class DevLinkCountService { public class ZhanLianCountService {
@Autowired @Autowired
private DevLinkAuthorizationService authorizationService; private ZhanLianAuthorizationService authorizationService;
/** /**

View File

@ -17,10 +17,10 @@ import java.util.Map;
* devLink气象设备数据服务 * devLink气象设备数据服务
*/ */
@Service @Service
public class DevLinkMetDataService extends DevLinkBaseService { public class ZhanLianMetDataService extends ZhanLianBaseService {
@Autowired @Autowired
private DevLinkAuthorizationService authorizationService; private ZhanLianAuthorizationService authorizationService;
@Autowired @Autowired
private DeviceRealtimedataMeteorologyMapper deviceRealtimedataMeteorologyMapper; private DeviceRealtimedataMeteorologyMapper deviceRealtimedataMeteorologyMapper;
@ -59,8 +59,8 @@ public class DevLinkMetDataService extends DevLinkBaseService {
} }
public static void main(String[] args) { public static void main(String[] args) {
DevLinkMetDataService devLinkMetDataService = new DevLinkMetDataService(); ZhanLianMetDataService devLinkMetDataService = new ZhanLianMetDataService();
Map<String, String> metDeviceRealData = devLinkMetDataService.getMetDeviceRealData("3269"); Map<String, String> metDeviceRealData = devLinkMetDataService.getDeviceRealTimeData("3269");
devLinkMetDataService.setData(metDeviceRealData); devLinkMetDataService.setData(metDeviceRealData);
} }
} }

View File

@ -16,9 +16,9 @@ import java.util.Map;
* devLink苗情设备数据服务 * devLink苗情设备数据服务
*/ */
@Service @Service
public class DevLinkMiaoQingDataService extends DevLinkBaseService { public class ZhanLianMiaoQingDataService extends ZhanLianBaseService {
@Autowired @Autowired
private DevLinkAuthorizationService authorizationService; private ZhanLianAuthorizationService authorizationService;
@Autowired @Autowired
private DeviceRealtimedataMiaoqingMapper deviceRealtimedataMiaoqingMapper; private DeviceRealtimedataMiaoqingMapper deviceRealtimedataMiaoqingMapper;
public DeviceRealtimedataMiaoqing setData(Map<String, String> propertiesMap){ public DeviceRealtimedataMiaoqing setData(Map<String, String> propertiesMap){
@ -61,8 +61,8 @@ public class DevLinkMiaoQingDataService extends DevLinkBaseService {
} }
public static void main(String[] args) { public static void main(String[] args) {
DevLinkMiaoQingDataService devLinkMiaoQingDataService = new DevLinkMiaoQingDataService(); ZhanLianMiaoQingDataService devLinkMiaoQingDataService = new ZhanLianMiaoQingDataService();
Map<String, String> metDeviceRealData = devLinkMiaoQingDataService.getMetDeviceRealData("3275"); Map<String, String> metDeviceRealData = devLinkMiaoQingDataService.getDeviceRealTimeData("3275");
devLinkMiaoQingDataService.setData(metDeviceRealData); devLinkMiaoQingDataService.setData(metDeviceRealData);
} }
} }

View File

@ -16,9 +16,9 @@ import java.util.Map;
* devLink墒情设备数据服务 * devLink墒情设备数据服务
*/ */
@Service @Service
public class DevLinkMoistureDataService extends DevLinkBaseService { public class ZhanLianMoistureDataService extends ZhanLianBaseService {
@Autowired @Autowired
private DevLinkAuthorizationService authorizationService; private ZhanLianAuthorizationService authorizationService;
@Autowired @Autowired
private DeviceRealtimedataMoistureMapper moistureMapper; private DeviceRealtimedataMoistureMapper moistureMapper;
//封装数据 //封装数据
@ -74,8 +74,8 @@ public class DevLinkMoistureDataService extends DevLinkBaseService {
} }
public static void main(String[] args) { public static void main(String[] args) {
DevLinkMoistureDataService devLinkMoistureDataService = new DevLinkMoistureDataService(); ZhanLianMoistureDataService devLinkMoistureDataService = new ZhanLianMoistureDataService();
Map<String, String> metDeviceRealData = devLinkMoistureDataService.getMetDeviceRealData("3270"); Map<String, String> metDeviceRealData = devLinkMoistureDataService.getDeviceRealTimeData("3270");
devLinkMoistureDataService.setData(metDeviceRealData); devLinkMoistureDataService.setData(metDeviceRealData);
} }
} }

View File

@ -16,9 +16,9 @@ import java.util.Map;
* devLink光伏设备数据服务 * devLink光伏设备数据服务
*/ */
@Service @Service
public class DevLinkPhotovoltaicDataService extends DevLinkBaseService { public class ZhanLianPhotovoltaicDataService extends ZhanLianBaseService {
@Autowired @Autowired
private DevLinkAuthorizationService authorizationService; private ZhanLianAuthorizationService authorizationService;
@Autowired @Autowired
private DeviceRealtimedataPhotovoltaicMapper photovoltaicMapper; private DeviceRealtimedataPhotovoltaicMapper photovoltaicMapper;
//封装数据 //封装数据
@ -84,8 +84,8 @@ public class DevLinkPhotovoltaicDataService extends DevLinkBaseService {
return photovoltaic; return photovoltaic;
} }
public static void main(String[] args) { public static void main(String[] args) {
DevLinkPhotovoltaicDataService devLinkPhotovoltaicDataService = new DevLinkPhotovoltaicDataService(); ZhanLianPhotovoltaicDataService devLinkPhotovoltaicDataService = new ZhanLianPhotovoltaicDataService();
Map<String, String> metDeviceRealData = devLinkPhotovoltaicDataService.getMetDeviceRealData("3276"); Map<String, String> metDeviceRealData = devLinkPhotovoltaicDataService.getDeviceRealTimeData("3276");
devLinkPhotovoltaicDataService.setData(metDeviceRealData); devLinkPhotovoltaicDataService.setData(metDeviceRealData);
} }

View File

@ -86,6 +86,10 @@ public class RenkeDeviceDataService {
JSONArray jsonArray = JSONUtil.parseArray(respBody1.get("data")); JSONArray jsonArray = JSONUtil.parseArray(respBody1.get("data"));
JSONObject entries = JSONUtil.parseObj(jsonArray.get(0)); JSONObject entries = JSONUtil.parseObj(jsonArray.get(0));
//获取害虫种类以及数量
JSONArray analyseData = JSONUtil.parseArray(entries.get("analyseData"));
//有害虫时保存
if(!analyseData.isEmpty()){
//获取拍照图片 //获取拍照图片
Object imagesUrl = entries .get("imagesUrl"); Object imagesUrl = entries .get("imagesUrl");
//获取虫情分析后的图片地址 //获取虫情分析后的图片地址
@ -93,7 +97,7 @@ public class RenkeDeviceDataService {
deviceRealtimedataWorms.setPestPhotos(analyseCoordUrl.toString()); deviceRealtimedataWorms.setPestPhotos(analyseCoordUrl.toString());
deviceRealtimedataWorms.setCamera(imagesUrl.toString()); deviceRealtimedataWorms.setCamera(imagesUrl.toString());
}
deviceRealtimedataWorms.setSaveTime(DateUtils.getNowDate()); deviceRealtimedataWorms.setSaveTime(DateUtils.getNowDate());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

View File

@ -21,8 +21,6 @@ public class RenkeMetDeviceService {
private RenKeAuthorizationService authorizationService; private RenKeAuthorizationService authorizationService;
/** /**
* 获取气象设备全部信息 * 获取气象设备全部信息
* @param deviceStr 设备地址,支持多个用英文逗号分隔 * @param deviceStr 设备地址,支持多个用英文逗号分隔

View File

@ -1,9 +1,6 @@
package com.fastbee.deviceData.service.impl; package com.fastbee.deviceData.service.impl;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -111,9 +108,11 @@ public class DeviceRealtimedataMeteorologyServiceImpl implements IDeviceRealtime
queryWrapper.orderByDesc("real_time"); queryWrapper.orderByDesc("real_time");
queryWrapper.last("limit 1"); queryWrapper.last("limit 1");
DeviceRealtimedataMeteorology meteorology = deviceRealtimedataMeteorologyMapper.selectOne(queryWrapper); DeviceRealtimedataMeteorology meteorology = deviceRealtimedataMeteorologyMapper.selectOne(queryWrapper);
List<Map<String, String>> mapList = new ArrayList<>();
Map<String, String> map = new HashMap<String, String>();
List<DeviceProperties> devicePropertiesList = new ArrayList<>(); List<DeviceProperties> devicePropertiesList = new ArrayList<>();
if(Objects.isNull(meteorology)){
return devicePropertiesList;
}
devicePropertiesList.add(DeviceProperties.builder().name("空气温度").value(meteorology.getAirTemp().toString()).unit("°C").build()); devicePropertiesList.add(DeviceProperties.builder().name("空气温度").value(meteorology.getAirTemp().toString()).unit("°C").build());
devicePropertiesList.add(DeviceProperties.builder().name("空气湿度").value(meteorology.getAirHumi().toString()).unit("°C").build()); devicePropertiesList.add(DeviceProperties.builder().name("空气湿度").value(meteorology.getAirHumi().toString()).unit("°C").build());
devicePropertiesList.add(DeviceProperties.builder().name("风速").value(meteorology.getWindSpeed().toString()).unit("m/s").build()); devicePropertiesList.add(DeviceProperties.builder().name("风速").value(meteorology.getWindSpeed().toString()).unit("m/s").build());

View File

@ -1,9 +1,6 @@
package com.fastbee.deviceData.service.impl; package com.fastbee.deviceData.service.impl;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fastbee.deviceData.domain.dto.DeviceProperties; import com.fastbee.deviceData.domain.dto.DeviceProperties;
@ -101,14 +98,17 @@ public class DeviceRealtimedataMoistureServiceImpl implements IDeviceRealtimedat
* @return * @return
*/ */
public List<DeviceProperties> getLatestWeatherRealtimedata(String deviceId){ public List<DeviceProperties> getLatestWeatherRealtimedata(String deviceId){
System.err.println(deviceId);
QueryWrapper queryWrapper = new QueryWrapper(); QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.orderByDesc("real_time"); queryWrapper.orderByDesc("real_time");
queryWrapper.last("limit 1"); queryWrapper.last("limit 1");
queryWrapper.eq("device_id",deviceId); queryWrapper.eq("device_id",deviceId);
DeviceRealtimedataMoisture moisture = deviceRealtimedataMoistureMapper.selectOne(queryWrapper); DeviceRealtimedataMoisture moisture = deviceRealtimedataMoistureMapper.selectOne(queryWrapper);
List<Map<String, String>> mapList = new ArrayList<>();
Map<String, String> map = new HashMap<String, String>();
List<DeviceProperties> devicePropertiesList = new ArrayList<>(); List<DeviceProperties> devicePropertiesList = new ArrayList<>();
if(Objects.isNull(moisture)){
return devicePropertiesList;
}
devicePropertiesList.add(DeviceProperties.builder().name("土壤温度").value(moisture.getSoilTemp().toString()).unit("°C").build()); devicePropertiesList.add(DeviceProperties.builder().name("土壤温度").value(moisture.getSoilTemp().toString()).unit("°C").build());
devicePropertiesList.add(DeviceProperties.builder().name("土壤湿度").value(moisture.getSoilHumi().toString()).unit("%").build()); devicePropertiesList.add(DeviceProperties.builder().name("土壤湿度").value(moisture.getSoilHumi().toString()).unit("%").build());
devicePropertiesList.add(DeviceProperties.builder().name("土壤EC").value(moisture.getSoilEc().toString()).unit("MS/cm").build()); devicePropertiesList.add(DeviceProperties.builder().name("土壤EC").value(moisture.getSoilEc().toString()).unit("MS/cm").build());

View File

@ -0,0 +1,8 @@
package com.fastbee.iot.strategy;
import cn.hutool.json.JSONObject;
import java.util.List;
public interface DeviceRealTimeDataStrategy {
List<JSONObject> getDeviceRealTimeData(String deviceId);
}

View File

@ -0,0 +1,130 @@
package com.fastbee.iot.strategy.impl;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.fastbee.deviceData.api.devlink.service.ZhanLianConfig;
import com.fastbee.iot.domain.Device;
import com.fastbee.iot.mapper.DeviceMapper;
import com.fastbee.iot.strategy.DeviceRealTimeDataStrategy;
import com.fastbee.iot.zhanlian.ZhanLianAuthorizationService;
import com.fastbee.iot.zhanlian.ZhanLianBaseService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class ZhanLianDeviceRealTimeDataStrategy implements DeviceRealTimeDataStrategy {
@Autowired
private DeviceMapper deviceMapper;
@Override
public List<JSONObject> getDeviceRealTimeData(String deviceId) {
//根据产品查询对应设备
Device device = new LambdaQueryChainWrapper<>(deviceMapper)
.select(Device::getDeviceId,Device::getSerialNumber,Device::getDevParams)
.eq(Device::getSerialNumber,deviceId)
.eq(Device::getDelFlag, 0)
.one();
if(device == null){
throw new RuntimeException("展连设备不存在!设备id为"+deviceId);
}
//解析设备对接参数
String devParams = device.getDevParams();
if(StringUtils.isBlank(devParams)){
throw new RuntimeException("展连设备对接参数为空!设备id为"+device.getDeviceId());
}
JSONArray paramArray = JSONUtil.parseArray(devParams);
//解析参数列表建立map
Map<String, String> params = new HashMap<>();
//解析参数列表建立map
paramArray.forEach(paramObj->{
JSONObject entries = JSONUtil.parseObj(paramObj);
Object key = entries.get("key");
Object value = entries.get("value");
params.put(key.toString(),value.toString());
});
//获取请求地址
String authEndpoint = ZhanLianAuthorizationService.getAuthEndpoint(ZhanLianConfig.builder()
.ak(params.get("ak"))
.sk(params.get("sk"))
.authId( params.get("authId"))
.endpoint("https://plat.developlink.cloud/prod-api/iot/data/forward")
.build());
//请求参数构建
HashMap<String, Object> reqBody = new HashMap<>();
reqBody.put("method","get");
reqBody.put("path","api/v1/product/device/run_status");
Map<String,Object> param =new HashMap<>();
param.put("id", deviceId);
reqBody.put("params",params);
ZhanLianBaseService zhanLianBaseService = new ZhanLianBaseService();
//请求设备
JSONObject respObj = zhanLianBaseService.baseRequest(reqBody, authEndpoint);
//解析设备实时数据
Map<String, String> deviceRealTimeData = getDeviceRealTimeData(respObj, deviceId);
//映射为数据存储对象
return null;
}
/**
* 根据设备id请求数据并解析设备实时数据为易于存储的map键值对
* @param deviceId 设备id
* @return 实时数据
*/
public Map<String,String> getDeviceRealTimeData(JSONObject data ,String deviceId){
//获取设备状态
JSONObject jsonObjectData = JSONUtil.parseObj(data);
Object status = jsonObjectData.get("status");
//获取设备属性以及实时数据值
Object properties = jsonObjectData.get("properties");
//获取数据上报时间
String time = jsonObjectData.get("lastOnlineTime").toString();
JSONArray propertiesArray = JSONUtil.parseArray(properties);
//获取设备各项属性实时数据
//设备属性与值建立map
Map<String, String> propertiesMap = new HashMap<>();
propertiesArray.forEach(p -> {
Object property = JSONUtil.parseObj(p).get("property");
JSONObject propertyMap = JSONUtil.parseObj(property);
//属性名称
String name = propertyMap.get("name").toString();
//属性key
String key = propertyMap.get("key").toString();
//属性值
Object value1 = JSONUtil.parseObj(p).get("value");
String value="" ;
if(value1!=null){
value = value1.toString();
}
//TODO 属性值历史数据,是否需要
Object list = JSONUtil.parseObj(p).get("list");
//建立属性-值映射关系
propertiesMap.put(key,value);
});
propertiesMap.put("status",status.toString());
propertiesMap.put("deviceId",deviceId);
propertiesMap.put("realTime",time);
return propertiesMap;
}
}

View File

@ -1,28 +1,16 @@
package com.fastbee.iot.timer; package com.fastbee.iot.timer;
import cn.hutool.core.date.DateTime; import com.fastbee.deviceData.api.devlink.service.ZhanLianMetDataService;
import cn.hutool.http.HttpRequest; import com.fastbee.deviceData.api.devlink.service.ZhanLianMiaoQingDataService;
import cn.hutool.http.HttpResponse; import com.fastbee.deviceData.api.devlink.service.ZhanLianMoistureDataService;
import com.fastbee.deviceData.api.devlink.service.ZhanLianPhotovoltaicDataService;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.fastbee.deviceData.api.devlink.service.DevLinkMetDataService;
import com.fastbee.deviceData.api.devlink.service.DevLinkMiaoQingDataService;
import com.fastbee.deviceData.api.devlink.service.DevLinkMoistureDataService;
import com.fastbee.deviceData.api.devlink.service.DevLinkPhotovoltaicDataService;
import com.fastbee.deviceData.api.renke.constant.RenKeDeviceTypeConstant;
import com.fastbee.deviceData.api.renke.service.RenKeAuthorizationService;
import com.fastbee.deviceData.api.renke.service.RenkeDeviceDataService; import com.fastbee.deviceData.api.renke.service.RenkeDeviceDataService;
import com.fastbee.deviceData.domain.*; import com.fastbee.deviceData.domain.*;
import com.fastbee.deviceData.mapper.*; import com.fastbee.deviceData.mapper.*;
import com.fastbee.deviceData.service.IDeviceRealtimedataWormsService; import com.fastbee.iot.mapper.DeviceMapper;
import com.fastbee.deviceData.service.impl.DeviceRealtimedataWormsServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
@ -38,6 +26,9 @@ public class DeviceDateTask {
// @Autowired // @Autowired
// private ThreadPoolTaskExecutor taskExecutor; // private ThreadPoolTaskExecutor taskExecutor;
@Autowired
private DeviceMapper deviceMapper;
@Autowired @Autowired
private DeviceRealtimedataWormsMapper deviceRealtimedataWormsMapper; private DeviceRealtimedataWormsMapper deviceRealtimedataWormsMapper;
@ -57,16 +48,16 @@ public class DeviceDateTask {
private RenkeDeviceDataService wormsService; //虫情设备数据获取 private RenkeDeviceDataService wormsService; //虫情设备数据获取
@Autowired @Autowired
private DevLinkMetDataService metDataService; //气象设备数据获取 private ZhanLianMetDataService metDataService; //气象设备数据获取
@Autowired @Autowired
private DevLinkMoistureDataService moistureDataService; //墒情设备数据获取 private ZhanLianMoistureDataService moistureDataService; //墒情设备数据获取
@Autowired @Autowired
private DevLinkPhotovoltaicDataService photovoltaicDataService; //光伏设备数据获取 private ZhanLianPhotovoltaicDataService photovoltaicDataService; //光伏设备数据获取
@Autowired @Autowired
private DevLinkMiaoQingDataService miaoQingDataService; //苗情设备数据获取 private ZhanLianMiaoQingDataService miaoQingDataService; //苗情设备数据获取
@ -76,6 +67,7 @@ public class DeviceDateTask {
* 获取虫情设备实时数据并保存 * 获取虫情设备实时数据并保存
*/ */
public void getWormsDeviceRealtimeData() throws Exception{ public void getWormsDeviceRealtimeData() throws Exception{
DeviceRealtimedataWorms deviceRealtimedataWorms = wormsService.setData("1017240042"); DeviceRealtimedataWorms deviceRealtimedataWorms = wormsService.setData("1017240042");
int i = deviceRealtimedataWormsMapper.insert(deviceRealtimedataWorms); int i = deviceRealtimedataWormsMapper.insert(deviceRealtimedataWorms);
if (i<1){ if (i<1){
@ -87,7 +79,7 @@ public class DeviceDateTask {
* 获取气象设备实时数据并保存 * 获取气象设备实时数据并保存
*/ */
public void getDevLinkMetDeviceRealtimeData() throws Exception{ public void getDevLinkMetDeviceRealtimeData() throws Exception{
DeviceRealtimedataMeteorology deviceRealtimedataMeteorology = metDataService.setData(metDataService.getMetDeviceRealData("3269")); DeviceRealtimedataMeteorology deviceRealtimedataMeteorology = metDataService.setData(metDataService.getDeviceRealTimeData("3269"));
int i = deviceRealtimedataMeteorologyMapper.insert(deviceRealtimedataMeteorology); int i = deviceRealtimedataMeteorologyMapper.insert(deviceRealtimedataMeteorology);
if (i<1){ if (i<1){
System.out.println("插入数据失败!"); System.out.println("插入数据失败!");
@ -98,7 +90,7 @@ public class DeviceDateTask {
* 获取墒情设备实时数据并保存 * 获取墒情设备实时数据并保存
*/ */
public void getDevLinkMoistureDeviceRealtimeData() throws Exception{ public void getDevLinkMoistureDeviceRealtimeData() throws Exception{
DeviceRealtimedataMoisture deviceRealtimedataMoisture = moistureDataService.setData(moistureDataService.getMetDeviceRealData("3270")); DeviceRealtimedataMoisture deviceRealtimedataMoisture = moistureDataService.setData(moistureDataService.getDeviceRealTimeData("3270"));
int i = deviceRealtimedataMoistureMapper.insert(deviceRealtimedataMoisture); int i = deviceRealtimedataMoistureMapper.insert(deviceRealtimedataMoisture);
if (i<1) if (i<1)
System.out.println("插入数据失败!"); System.out.println("插入数据失败!");
@ -108,7 +100,7 @@ public class DeviceDateTask {
* 获取光伏设备实时数据并保存 * 获取光伏设备实时数据并保存
*/ */
public void getDevLinkPhotovoltaicDeviceRealtimeData() throws Exception{ public void getDevLinkPhotovoltaicDeviceRealtimeData() throws Exception{
DeviceRealtimedataPhotovoltaic deviceRealtimedataPhotovoltaic = photovoltaicDataService.setData(photovoltaicDataService.getMetDeviceRealData("3276")); DeviceRealtimedataPhotovoltaic deviceRealtimedataPhotovoltaic = photovoltaicDataService.setData(photovoltaicDataService.getDeviceRealTimeData("3276"));
int i = deviceRealtimedataPhotovoltaicMapper.insert(deviceRealtimedataPhotovoltaic); int i = deviceRealtimedataPhotovoltaicMapper.insert(deviceRealtimedataPhotovoltaic);
if (i<1) if (i<1)
System.out.println("插入数据失败!"); System.out.println("插入数据失败!");
@ -118,7 +110,7 @@ public class DeviceDateTask {
* 获取苗情设备实时数据并保存 * 获取苗情设备实时数据并保存
*/ */
public void getDevLinkMiaoqingDeviceRealtimeData() throws Exception{ public void getDevLinkMiaoqingDeviceRealtimeData() throws Exception{
DeviceRealtimedataMiaoqing deviceRealtimedataMiaoqing = miaoQingDataService.setData(miaoQingDataService.getMetDeviceRealData("3275")); DeviceRealtimedataMiaoqing deviceRealtimedataMiaoqing = miaoQingDataService.setData(miaoQingDataService.getDeviceRealTimeData("3275"));
int i = deviceRealtimedataMiaoqingMapper.insert(deviceRealtimedataMiaoqing); int i = deviceRealtimedataMiaoqingMapper.insert(deviceRealtimedataMiaoqing);
if (i<1) if (i<1)
System.out.println("插入数据失败!"); System.out.println("插入数据失败!");

View File

@ -0,0 +1,49 @@
package com.fastbee.iot.zhanlian;
import com.fastbee.deviceData.api.devlink.service.ZhanLianConfig;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.nio.charset.StandardCharsets;
@AllArgsConstructor
@Builder
@Data
public class ZhanLianAuthorizationService {
public static String getAuthEndpoint(ZhanLianConfig zhanLianConfig){
String ak = zhanLianConfig.getAk();
String sk = zhanLianConfig.getSk();
String authId = zhanLianConfig.getAuthId();
String endpoint = zhanLianConfig.getEndpoint();
String sign;
long time = System.currentTimeMillis();
String message = "ak=" + ak + "&authId=" + authId + "&time=" + time;
try {
SecretKeySpec keySpec = new SecretKeySpec(
sk.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
sign = DatatypeConverter.printHexBinary(rawHmac).toLowerCase();
} catch (Exception e) {
throw new RuntimeException("签名生成失败! : " + e.getMessage(), e);
}
return endpoint+"?ak="+ak+"&time="+time+"&sign="+sign+"&authId="+authId;
}
public static void main(String[] args) {
}
}

View File

@ -0,0 +1,55 @@
package com.fastbee.iot.zhanlian;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.fastbee.common.exception.ServiceException;
import com.fastbee.deviceData.api.devlink.service.ZhanLianAuthorizationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
public class ZhanLianBaseService {
/**
* 基本请求
* @param body 请求负载
* @return 请求结果 data
*/
public JSONObject baseRequest(Map<String,Object> body,String url){
String jsonStr = JSONUtil.toJsonStr(body);
String respStr = HttpUtil.post(url,jsonStr);
JSONObject resp = JSONUtil.parseObj(respStr);
if(!resp.get("code").toString().equals("200")){
throw new ServiceException(resp.get("message").toString());
}
return resp.getJSONObject("data");
}
public BigDecimal toBigDecimalValue(String str) {
if (str == null|| str.isEmpty()) {
return null;
}
return new BigDecimal(str);
}
public Long toLongValue(String str) {
if (str == null|| str.isEmpty()) {
return null;
}
return Long.parseLong(str);
}
}

View File

@ -0,0 +1,21 @@
package com.fastbee.iot.zhanlian;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@Builder
@NoArgsConstructor
@Data
public class ZhanLianConfig {
private String ak;
private String sk;
private String authId;
private String endpoint;
}

View File

@ -129,7 +129,11 @@ public class ProjectServiceImpl implements IProjectService
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int insertProject(Project project) public int insertProject(Project project)
{ {
System.err.println("项目类型:"+project.getType());
//TODO 参数校验 //TODO 参数校验
if (Objects.isNull(project.getType())||!ProjectTypeConstant.isValidProjectType(project.getType())) {
throw new ServiceException("项目类型不能为空或者非法!");
}
//获取当前时间 //获取当前时间
Date nowDate = DateUtils.getNowDate(); Date nowDate = DateUtils.getNowDate();
//处理项目行政区划 //处理项目行政区划
@ -152,7 +156,6 @@ public class ProjectServiceImpl implements IProjectService
newSysDept.setAdministrativeLevel(3); newSysDept.setAdministrativeLevel(3);
//设置机构所属项目id //设置机构所属项目id
//设置机构型行政区域信息 //设置机构型行政区域信息
newSysDept.setAdministrativeAreaCode(Objects.nonNull(project.getAdministrativeAreaCode())?project.getAdministrativeAreaCode():null); newSysDept.setAdministrativeAreaCode(Objects.nonNull(project.getAdministrativeAreaCode())?project.getAdministrativeAreaCode():null);
newSysDept.setAdministrativeArea(Objects.nonNull(project.getAdministrativeArea())?project.getAdministrativeArea():null); newSysDept.setAdministrativeArea(Objects.nonNull(project.getAdministrativeArea())?project.getAdministrativeArea():null);
@ -175,9 +178,7 @@ public class ProjectServiceImpl implements IProjectService
.map(SysMenu::getMenuId) .map(SysMenu::getMenuId)
.toArray(Long[]::new); .toArray(Long[]::new);
//根据项目类型过滤菜单 //根据项目类型过滤菜单
if (!Objects.nonNull(project.getType())||ProjectTypeConstant.isValidProjectType(project.getType())) {
throw new ServiceException("项目类型不能为空或者非法!");
}
if (Objects.equals(project.getType(),ProjectTypeConstant.WATER)) { if (Objects.equals(project.getType(),ProjectTypeConstant.WATER)) {
List<Long> menuList=Arrays.asList(menuIdList); List<Long> menuList=Arrays.asList(menuIdList);

View File

@ -3,6 +3,7 @@ package com.fastbee.system.service.impl;
import cn.hutool.json.JSONArray; import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONException; import cn.hutool.json.JSONException;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.fastbee.common.annotation.DataScope; import com.fastbee.common.annotation.DataScope;
import com.fastbee.common.constant.UserConstants; import com.fastbee.common.constant.UserConstants;
import com.fastbee.common.core.domain.TreeSelect; import com.fastbee.common.core.domain.TreeSelect;
@ -133,7 +134,7 @@ public class SysDeptServiceImpl implements ISysDeptService
* @param roleId 角色ID * @param roleId 角色ID
* @return 选中部门列表 * @return 选中部门列表
*/ */
@Cacheable(value = "dept", key = "#root.methodName + '_' + #roleId", unless = "#result == null") // @Cacheable(value = "dept", key = "#root.methodName + '_' + #roleId", unless = "#result == null")
@Override @Override
public List<Long> selectDeptListByRoleId(Long roleId) public List<Long> selectDeptListByRoleId(Long roleId)
{ {
@ -151,7 +152,13 @@ public class SysDeptServiceImpl implements ISysDeptService
@Override @Override
public SysDept selectDeptById(Long deptId) public SysDept selectDeptById(Long deptId)
{ {
return deptMapper.selectDeptById(deptId); // return deptMapper.selectDeptById(deptId);
SysDept sysDept = new LambdaQueryChainWrapper<>(deptMapper)
.select(SysDept::getDeptUserId)
.eq(SysDept::getDeptId, deptId)
.one();
System.err.println(sysDept);
return sysDept;
} }
/** /**