36 changed files with 895 additions and 129 deletions
@ -0,0 +1,22 @@ |
|||
package com.ccsens.logistics.bean.dto; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* @author 马 |
|||
*/ |
|||
@Data |
|||
public class HttpDto { |
|||
|
|||
@Data |
|||
@ApiModel("温湿度登录接口") |
|||
public static class Login{ |
|||
@ApiModelProperty("账号") |
|||
private String loginName; |
|||
@ApiModelProperty("密码") |
|||
private String password; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,63 @@ |
|||
package com.ccsens.logistics.bean.vo; |
|||
|
|||
import com.alibaba.fastjson.JSON; |
|||
import com.alibaba.fastjson.JSONArray; |
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author 马 |
|||
*/ |
|||
@Data |
|||
public class HttpVo { |
|||
|
|||
@Data |
|||
@ApiModel("温湿度设备分组") |
|||
public static class Groups{ |
|||
@ApiModelProperty("分组id") |
|||
private String groupId; |
|||
@ApiModelProperty("分组名称") |
|||
private String groupName; |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("温湿度设备的数据") |
|||
public static class EnvironmentOfData{ |
|||
@ApiModelProperty("分组id") |
|||
private String groupId; |
|||
@ApiModelProperty("设备编号") |
|||
private String deviceKey; |
|||
@ApiModelProperty("设备地址") |
|||
private Integer deviceAddr; |
|||
@ApiModelProperty("节点编号") |
|||
private Integer nodeID; |
|||
@ApiModelProperty("节点类型") |
|||
private Integer nodeType; |
|||
@ApiModelProperty("停用状态,true停用") |
|||
private Integer deviceDisabled; |
|||
@ApiModelProperty("设备名称") |
|||
private String deviceName; |
|||
@ApiModelProperty("设备状态0未运行,1离线,2在线") |
|||
private Integer deviceStatus; |
|||
@ApiModelProperty("实时数据") |
|||
private JSONArray relTimeData; |
|||
// @ApiModelProperty("实时数据")
|
|||
// private List<RealData> relTimeData;
|
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("实时数据") |
|||
public static class RealData{ |
|||
@ApiModelProperty("模拟量名称") |
|||
private String dataName; |
|||
@ApiModelProperty("实时数据") |
|||
private String dataValue; |
|||
@ApiModelProperty("是否报警") |
|||
private Boolean isAlarm; |
|||
@ApiModelProperty("报警信息") |
|||
private String alarmMsg; |
|||
} |
|||
} |
@ -0,0 +1,25 @@ |
|||
package com.ccsens.logistics.bean.vo; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author 马 |
|||
*/ |
|||
@Data |
|||
public class ParkVo { |
|||
|
|||
@Data |
|||
@ApiModel("仓库及摄像头") |
|||
public static class ParkInfo{ |
|||
@ApiModelProperty("园区设备") |
|||
private List<EquipmentVo.ParkEquipment> parkEquipment = new ArrayList<>(); |
|||
@ApiModelProperty("仓库信息") |
|||
private List<WarehouseVo.AllWarehouse> warehouseInfo = new ArrayList<>(); |
|||
} |
|||
|
|||
} |
@ -1,11 +1,21 @@ |
|||
package com.ccsens.logistics.persist.dao; |
|||
|
|||
import com.ccsens.logistics.bean.vo.EquipmentVo; |
|||
import com.ccsens.logistics.persist.mapper.LogisticsParkEquipmentMapper; |
|||
import org.springframework.stereotype.Repository; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author 马 |
|||
*/ |
|||
@Repository |
|||
public interface LogisticsParkEquipmentDao extends LogisticsParkEquipmentMapper { |
|||
/** |
|||
* 查询园区下的设备 |
|||
* @param parkId 园区id |
|||
* @return 园区设备列表 |
|||
*/ |
|||
List<EquipmentVo.ParkEquipment> selParkEquipment(Long parkId); |
|||
|
|||
} |
|||
|
@ -0,0 +1,31 @@ |
|||
package com.ccsens.logistics.scheduled; |
|||
|
|||
|
|||
import com.ccsens.logistics.service.IHttpService; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.scheduling.annotation.EnableScheduling; |
|||
import org.springframework.scheduling.annotation.Scheduled; |
|||
import org.springframework.stereotype.Component; |
|||
import org.springframework.transaction.annotation.Propagation; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
import javax.annotation.Resource; |
|||
|
|||
/** |
|||
* @author 逗 |
|||
*/ |
|||
@Slf4j |
|||
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) |
|||
@Component |
|||
@EnableScheduling |
|||
public class ScheduledService { |
|||
|
|||
@Resource |
|||
private IHttpService iHttpService; |
|||
|
|||
@Scheduled(cron = "*/30 * * * * ?") |
|||
public void runfirst(){ |
|||
iHttpService.getTemperatureAndHumidity(); |
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,170 @@ |
|||
package com.ccsens.logistics.service; |
|||
|
|||
import cn.hutool.core.lang.Snowflake; |
|||
import com.alibaba.fastjson.JSONArray; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.ccsens.logistics.bean.dto.HttpDto; |
|||
import com.ccsens.logistics.bean.po.LogisticsEnvironmentRecord; |
|||
import com.ccsens.logistics.bean.vo.HttpVo; |
|||
import com.ccsens.logistics.persist.dao.LogisticsEnvironmentRecordDao; |
|||
import com.ccsens.util.JsonResponse; |
|||
import com.ccsens.util.RestTemplateUtil; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.apache.http.Header; |
|||
import org.apache.http.HttpResponse; |
|||
import org.apache.http.client.HttpClient; |
|||
import org.apache.http.client.methods.HttpGet; |
|||
import org.apache.http.impl.client.HttpClients; |
|||
import org.apache.http.util.EntityUtils; |
|||
import org.apache.http.HttpEntity; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Propagation; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
import com.ccsens.logistics.Util.Constant; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.io.IOException; |
|||
import java.math.BigDecimal; |
|||
import java.util.ArrayList; |
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
|
|||
|
|||
/** |
|||
* @author 马 |
|||
*/ |
|||
@Slf4j |
|||
@Service |
|||
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) |
|||
public class HttpService implements IHttpService{ |
|||
|
|||
@Resource |
|||
private LogisticsEnvironmentRecordDao environmentRecordDao; |
|||
@Resource |
|||
private Snowflake snowflake; |
|||
|
|||
@Override |
|||
public void getTemperatureAndHumidity() { |
|||
try { |
|||
List<HttpVo.Groups> groupsList = new ArrayList<>(); |
|||
HttpDto.Login login = new HttpDto.Login(); |
|||
login.setLoginName("t210510sxck"); |
|||
login.setPassword("ccsens123"); |
|||
//调取登录接口 获取userId
|
|||
String userId = getUserId(login); |
|||
//获取设备分组列表
|
|||
// String getGroupOfUrl = "http://iot.0531yun.cn/wsjc/app/GetUserDeviceGroups";
|
|||
// String groupString = getBody(getGroupOfUrl,userId);
|
|||
// JsonResponse<JSONArray> groups = JSONObject.parseObject(groupString,JsonResponse.class);
|
|||
// JSONArray data = groups.getData();
|
|||
// for (int i = 0; i < data.size(); i++) {
|
|||
// HttpVo.Groups oneData = JSONObject.parseObject(data.get(i).toString(), HttpVo.Groups.class);
|
|||
// groupsList.add(oneData);
|
|||
// }
|
|||
|
|||
//循环查询分组id下的设备数据并存入数据库
|
|||
String getDataAndSaveOfUrl = "http://iot.0531yun.cn/wsjc/app/GetDeviceData?groupId="; |
|||
String environmentOfData = getBody(getDataAndSaveOfUrl, userId); |
|||
|
|||
JSONObject jsonObject = JSONObject.parseObject(environmentOfData); |
|||
JSONArray dataArray = jsonObject.getJSONArray("data"); |
|||
for (int i = 0; i < dataArray.size(); i++) { |
|||
LogisticsEnvironmentRecord environmentRecord = new LogisticsEnvironmentRecord(); |
|||
JSONObject oneObject = dataArray.getJSONObject(i); |
|||
//获取设备运行状态 0未运行,1离线,2在线
|
|||
Integer deviceStatus = oneObject.getInteger("deviceStatus"); |
|||
//如果设备为在线状态 将数据存入到数据库
|
|||
if (2 == deviceStatus){ |
|||
environmentRecord.setEquipmentNum(oneObject.getString("deviceAddr")); |
|||
environmentRecord.setRecordTime(System.currentTimeMillis()); |
|||
|
|||
JSONArray realTimeData = oneObject.getJSONArray("realTimeData"); |
|||
for (int j = 0; j < realTimeData.size(); j++) { |
|||
JSONObject realData = realTimeData.getJSONObject(j); |
|||
switch (realData.getString("dataName")){ |
|||
case Constant.TEMP : |
|||
environmentRecord.setId(snowflake.nextId()); |
|||
environmentRecord.setNumType((byte)1); |
|||
environmentRecord.setNumValue(new BigDecimal(realData.getString("dataValue"))); |
|||
environmentRecord.setIsAlarm(realData.getBoolean("isAlarm") ? (byte) 1 : (byte) 0); |
|||
break; |
|||
case Constant.HUMIDITY: |
|||
environmentRecord.setId(snowflake.nextId()); |
|||
environmentRecord.setNumType((byte)0); |
|||
environmentRecord.setNumValue(new BigDecimal(realData.getString("dataValue"))); |
|||
environmentRecord.setIsAlarm(realData.getBoolean("isAlarm") ? (byte) 1 : (byte) 0); |
|||
break; |
|||
case Constant.WATER_OUT: |
|||
environmentRecord.setId(snowflake.nextId()); |
|||
environmentRecord.setNumType((byte)2); |
|||
if(Constant.HAVE_WATER.equals(realData.getString("dataValue"))){ |
|||
environmentRecord.setNumValue(new BigDecimal(100)); |
|||
environmentRecord.setIsAlarm((byte)1); |
|||
}else{ |
|||
environmentRecord.setNumValue(new BigDecimal(0)); |
|||
environmentRecord.setIsAlarm((byte)0); |
|||
} |
|||
break; |
|||
default: |
|||
break; |
|||
} |
|||
environmentRecordDao.insertSelective(environmentRecord); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
}catch (Exception e){ |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 温湿度登录接口 获取设备的userId 调用其他接口 |
|||
* @param login 账号密码 |
|||
* @return userId |
|||
*/ |
|||
public String getUserId(HttpDto.Login login){ |
|||
String requestUrl = "http://iot.0531yun.cn/app/Login"; |
|||
String s = RestTemplateUtil.postBody(requestUrl, login); |
|||
JsonResponse<JSONObject> a = JSONObject.parseObject(s, JsonResponse.class); |
|||
JSONObject data = a.getData(); |
|||
return data.getString("userId"); |
|||
} |
|||
|
|||
|
|||
//get请求
|
|||
public static String getBody(String url,String userId){ |
|||
try { |
|||
HttpGet get = new HttpGet(url); |
|||
get.setHeader("userId",userId); |
|||
HttpClient httpClient = HttpClients.createDefault(); |
|||
HttpResponse response = httpClient.execute(get); |
|||
return getResult(response); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public static String getResult(HttpResponse response) throws IOException { |
|||
// 获取状态码
|
|||
int code = response.getStatusLine().getStatusCode(); |
|||
System.out.println(code); |
|||
// 获取body
|
|||
HttpEntity entity = response.getEntity(); |
|||
String body = EntityUtils.toString(entity); |
|||
System.out.println(body); |
|||
// 获取头信息
|
|||
Header[] allHeaders = response.getAllHeaders(); |
|||
String headers = Arrays.toString(allHeaders); |
|||
System.out.println(headers); |
|||
|
|||
// 返回body
|
|||
return body; |
|||
} |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,13 @@ |
|||
package com.ccsens.logistics.service; |
|||
|
|||
/** |
|||
* @author 马 |
|||
*/ |
|||
public interface IHttpService { |
|||
|
|||
/** |
|||
* 获取温度和湿度 |
|||
*/ |
|||
void getTemperatureAndHumidity(); |
|||
|
|||
} |
Loading…
Reference in new issue