Browse Source

Merge branch 'dev' of yeshijie/wlyy2.0 into dev

叶仕杰 3 years ago
parent
commit
daa4f8f34d

+ 1 - 1
common/common-entity/sql记录

@ -1481,7 +1481,7 @@ CREATE TABLE `base_onenet_device` (
CREATE TABLE `base_onenet_receive_record` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `status` tinyint(1) DEFAULT NULL COMMENT '状态 1新增 2已处理',
  `status` tinyint(1) DEFAULT NULL COMMENT '状态 1新增 2处理失败',
  `content` varchar(5000) DEFAULT NULL COMMENT '内容',
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)

+ 1 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/care/device/OnenetReceiveRecord.java

@ -22,7 +22,7 @@ import java.util.Date;
@SequenceGenerator(name="id_generated", sequenceName="base_onenet_receive_record")
public class OnenetReceiveRecord extends IdEntity {
    private Integer status;//状态 1新增 2已处理
    private Integer status;//状态 1新增 2处理失败
    private String content;//内容
    //创建时间
    @CreatedDate

+ 5 - 0
common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java

@ -521,6 +521,11 @@ public class DateUtil {
        return date;
    }
    public static String getNextMinute(int minutes) {
        Calendar c = Calendar.getInstance();
        c.add(Calendar.MINUTE, minutes);
        return dateToStrLong(c.getTime());
    }
    public static String getNextDay(Date d, int days) {
        Calendar c = Calendar.getInstance();

+ 3 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/doctor/DoctorServicePermissionsDao.java

@ -4,6 +4,8 @@ import com.yihu.jw.entity.care.common.DoctorServicePermissionsDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created with IntelliJ IDEA.
 *
@ -13,5 +15,6 @@ import org.springframework.data.repository.PagingAndSortingRepository;
 */
public interface DoctorServicePermissionsDao extends PagingAndSortingRepository<DoctorServicePermissionsDO, String>, JpaSpecificationExecutor<DoctorServicePermissionsDO> {
    List<DoctorServicePermissionsDO> findByDoctor(String doctor);
}

+ 7 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/doctor/DoctorServicePermissionsEndpoint.java

@ -1,5 +1,6 @@
package com.yihu.jw.base.endpoint.doctor;
import com.yihu.jw.base.dao.doctor.DoctorServicePermissionsDao;
import com.yihu.jw.base.service.doctor.DoctorServicePermissionsService;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
@ -34,6 +35,8 @@ public class DoctorServicePermissionsEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private DoctorServicePermissionsService permissionsService;
    @Autowired
    private DoctorServicePermissionsDao permissionsDao;
    @Autowired
    private BaseDoctorDao doctorDao;
    @PostMapping(value = "create")
@ -42,6 +45,10 @@ public class DoctorServicePermissionsEndpoint extends EnvelopRestEndpoint {
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam String jsonData) throws Exception {
        DoctorServicePermissionsDO permissionsDO = toEntity(jsonData, DoctorServicePermissionsDO.class);
        List<DoctorServicePermissionsDO> permissionsDOList = permissionsDao.findByDoctor(permissionsDO.getDoctor());
        if(permissionsDOList.size()>0){
            return failed("同一个人员只能添加一次", ObjEnvelop.class);
        }
        permissionsDO = permissionsService.save(permissionsDO);
        return success(permissionsDO);
    }

+ 90 - 3
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/OnenetService.java

@ -3,15 +3,23 @@ package com.yihu.jw.care.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.yihu.jw.care.dao.device.DeviceDetailDao;
import com.yihu.jw.care.dao.device.DeviceHealthIndexDao;
import com.yihu.jw.care.dao.device.OnenetDeviceDao;
import com.yihu.jw.care.dao.device.OnenetReceiveRecordDao;
import com.yihu.jw.care.util.DeviceDataPushLogUtil;
import com.yihu.jw.care.util.SecurityOrderUtil;
import com.yihu.jw.entity.care.device.DeviceHealthIndex;
import com.yihu.jw.entity.care.device.OnenetDevice;
import com.yihu.jw.entity.care.device.OnenetReceiveRecord;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.*;
@ -35,28 +43,107 @@ public class OnenetService {
    private DeviceDetailDao deviceDetailDao;
    @Autowired
    private OnenetReceiveRecordDao onenetReceiveRecordDao;
    @Autowired
    private HvDeviceService hvDeviceService;
    @Autowired
    private DeviceDataPushLogUtil dataPushLogUtil;
    @Autowired
    private DeviceHealthIndexDao deviceHealthIndexDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private SecurityOrderUtil orderUtil;
    private static final String MasterAPIkey ="Da0iDvhQ5H8OD6phWq=tMubBcBw=";
    private static final String baseUrl = "https://api.heclouds.com";
    public static void main(String[] args) {
        String value = "001F0000161401000000000400005A1200000701C6FFADFFF900000E620245CA71";
        String order = value.substring(10,14);
        System.out.println(order);
        String gas_Level = value.substring(22,24);
        System.out.println(gas_Level);
    }
    /**
     * 为了防止消息重推 这里只做记录不做业务处理
     * 为了防止消息重推 这里采取异步处理
     * (onenet:应用服务器收到平台每一次推送请求后,需要在有限时间内返回响应(目前是5秒),且HTTP响应状态码应设置为200,否则平台会认为请求发送失败,
     * 进行消息重推。重推采用指数退避策略,每条消息最多重推16次。如果某条消息一直失败,那么会在接下来的2小时45分4秒重推16次,之后不再重试)
     * @param body
     */
    @Async
    public void receive(String body){
        //{"msg":{"at":1630985527067,"imei":"868591057157041","type":1,"ds_id":"3200_0_5505","value":"001f0000041401000000000000005a1300000e01c6ffb1fffa00000e620245ca71","dev_id":768777611},"msg_signature":"qq8nsaH/QEUuDnjK+o8vgw==","nonce":"z8SlxYY%"}
        OnenetReceiveRecord record = new OnenetReceiveRecord();
        try {
            JSONObject jsonObject = JSON.parseObject(body);
            OnenetReceiveRecord record = new OnenetReceiveRecord();
            record.setContent(jsonObject.getJSONObject("msg").toJSONString());
            JSONObject msg = jsonObject.getJSONObject("msg");
            String deviceSn = msg.getString("imei");
            OnenetDevice onenetDevice = onenetDeviceDao.findBySn(deviceSn);
            String categoryCode = "";
            String title = "";
            if(onenetDevice!=null){
                categoryCode = onenetDevice.getCategoryCode();
                if("14".equals(categoryCode)){
                    title = "可燃气体探测器报警信息接收";
                }else if("15".equals(categoryCode)){
                    title = "烟探测器监测信息接收";
                }
            }
            hvDeviceService.updContactStatus(deviceSn,1);
            dataPushLogUtil.savePushLog(deviceSn,msg.toJSONString(),title);
            //未来鹰设备 类型2是设备状态(不准)
            Integer type = msg.getInteger("type");
            String value = msg.getString("value");
            if(type==1){
                String order = value.substring(10,14);
                if("1401".equals(order)){
                    //自定义命令数据更新(心跳/设备状态上报)
                    String gas_Level = value.substring(22,24);
                    Integer gas = Integer.parseInt(gas_Level, 16);
                    if(gas>0){
                        //气体浓度大于0触发报警
                        String sql = "select count(*) from base_device_health_index where device_sn = '"+deviceSn+"'" +
                                " and value>0 and create_time>='"+DateUtil.getNextMinute(-60)+"' ";
                        Integer count = jdbcTemplate.queryForObject(sql,Integer.class);
                        if(count==0){
                            logger.info("气体浓度大于0触发报警,deviceSn:{}",deviceSn);
                            //1小时内不重复发起
                            JSONObject tmp = new JSONObject();
                            tmp.put("gas",gas);
                            orderUtil.createSecurityOrder(deviceSn,null,new JSONObject(),null,6,"11","preventGasLeakage",JSON.toJSONString(tmp, SerializerFeature.WriteMapNullValue));
                        }
                    }
                    DeviceHealthIndex index = new DeviceHealthIndex();
                    index.setDeviceSn(deviceSn);
                    if("14".equals(categoryCode)){
                        index.setUnit("%LEL");
                        index.setDeviceType("1");
                    }else if("15".equals(categoryCode)){
                        index.setUnit("%");
                        index.setDeviceType("2");
                    }
                    index.setValue(gas+"");
                    index.setRecordTime(DateUtil.getStringDate());
                    deviceHealthIndexDao.save(index);
                }
            }
            record.setContent(msg.toJSONString());
            record.setStatus(1);
            record.setCreateTime(new Date());
        }catch (Exception e){
            e.printStackTrace();
            record.setStatus(2);
        }
        try {
            onenetReceiveRecordDao.save(record);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**