xufenglei
2019-07-22 d70f7cf3cf5afbfa3d9ca396068d9ff4bfe4046f
app更新
4 files modified
80 ■■■■■ changed files
src/main/java/com/moral/mapper/SensorUnitMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/HistoryService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/HistoryServiceImpl.java 52 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/SensorUnitMapper.xml 24 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/SensorUnitMapper.java
@@ -14,4 +14,6 @@
    
    List<Map<String, Object>> getSensorsByMonitPointId(@Param("id")String id);
    
    List<Map<String, Object>> getSensorUnitByDeviceMac(Map<String, Object> parameters);
}
src/main/java/com/moral/service/HistoryService.java
@@ -21,4 +21,6 @@
    Map<String, Object> getActualDataByRegion(Map<String, Object> parameters);
    Map<String, Object> getSensorUnitByDeviceMac(Map<String, Object> parameters);
}
src/main/java/com/moral/service/impl/HistoryServiceImpl.java
@@ -24,6 +24,8 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Expression;
import com.moral.common.util.ValidateUtil;
import com.moral.entity.Device;
import com.moral.entity.Profession;
@@ -31,6 +33,7 @@
import com.moral.mapper.DeviceMapper;
import com.moral.mapper.HistoryMapper;
import com.moral.mapper.SensorMapper;
import com.moral.mapper.SensorUnitMapper;
import com.moral.service.AccountService;
import com.moral.service.HistoryService;
import com.moral.service.ProfessionService;
@@ -241,26 +244,55 @@
            map = JSON.parseObject(values.get(0).get("value").toString());
        }
        Device device = deviceMapper.selectByPrimaryKey(Integer.valueOf((String) parameters.get("deviceId")));
        Map<String, Object> sensorUnits = getSensorUnitByDeviceMac(parameters);
        for (Map<String, Object> sensor : sensors) {
            Object sensorKey = sensor.get("sensor_key");
            sensor.put("name", sensor.get("description"));
            sensor.put("state", device.getState());
            if (!ObjectUtils.isEmpty(map)) {
                sensor.put("value", map.remove(sensor.get("sensor_key")));
            }
            sensor.put("state", device.getState());
            sensor.put("name", sensor.get("description"));
            if (sensorUnits.containsKey(sensorKey)) {
                Map<String, Object> sensorUnit  = (Map<String, Object>) sensorUnits.get(sensorKey);
                sensor.put("unit", sensorUnit.get("name"));
                if (sensor.containsKey("value")) {
                    Object value = sensor.get("value");
                    String rules = sensorUnit.get("rules").toString();
                    rules = rules.replace("d", "").replace("{0}", "value");
                    Expression expression = AviatorEvaluator.compile(rules);
                    Map<String, Object> env = new HashMap<String, Object>();
                    env.put("value", Double.valueOf(value.toString()));
                    value = expression.execute(env);
                    sensor.put("value",String.format("%.2f", value));
                }
            }
        }
        return sensors;
    }
    @Override
    public List<Map<String, Object>> getSensorDataBySensorKey(Map<String, Object> parameters) {
        ValidateUtil.notNull(parameters.get("sensorKey"), "param.is.null");
        Object sensorKey = parameters.get("sensorKey");
        ValidateUtil.notNull(sensorKey, "param.is.null");
        ValidateUtil.notNull(parameters.get("mac"), "param.is.null");
        ValidateUtil.notNull(parameters.get("size"), "param.is.null");
        parameters.put("size", Integer.valueOf(parameters.remove("size").toString()));
        List<Map<String, Object>> values = historyMapper.getValueByMacAndSize(parameters);
        Map<String, Object> sensorUnits = getSensorUnitByDeviceMac(parameters);
        for (Map<String, Object> value : values) {
            JSONObject json = JSON.parseObject(value.remove("value").toString());
            value.put("value", json.get(parameters.get("sensorKey")));
            Object sensorKeyValue = json.get(sensorKey);
            if (sensorUnits.containsKey(sensorKey)) {
                Map<String, Object> sensorUnit  = (Map<String, Object>) sensorUnits.get(sensorKey);
                String rules = sensorUnit.get("rules").toString();
                rules = rules.replace("d", "").replace("{0}", "sensorKeyValue");
                Expression expression = AviatorEvaluator.compile(rules);
                Map<String, Object> env = new HashMap<String, Object>();
                env.put("value", Double.valueOf(sensorKeyValue.toString()));
                sensorKeyValue = expression.execute(env);
                sensorKeyValue = String.format("%.2f", sensorKeyValue);
            }
            value.put("value", sensorKeyValue);
        }
        return values;
    }
@@ -295,4 +327,16 @@
        return result;
    }
    @Resource
    private SensorUnitMapper sensorUnitMapper;
    @Override
    public Map<String, Object> getSensorUnitByDeviceMac(Map<String, Object> parameters){
        Map<String, Object> resultMap = new HashMap<String, Object>();
        List<Map<String, Object>> list = sensorUnitMapper.getSensorUnitByDeviceMac(parameters);
        for (Map<String, Object> map : list) {
            resultMap.put(map.remove("sensor_key").toString(), map);
        }
        return resultMap;
    }
}
src/main/resources/mapper/SensorUnitMapper.xml
@@ -35,4 +35,28 @@
    AND su.is_delete=0
    AND mp.id = #{id}
  </select>
    <select id="getSensorUnitByDeviceMac" resultType="java.util.Map">
        SELECT
            su.* ,
            s.sensor_key
        FROM
            device d,
            sensor_unit su,
            organization_sensor_unit osu,
            monitor_point mp,
            device_version_sensor dvs,
            sensor s
        WHERE
            d.monitor_point_id = mp.id
            AND su.is_delete = '0'
            AND mp.organization_id = osu.organization_id
            AND osu.sensor_unit_id = su.id
            AND su.sensor_id = s.id
            AND d.device_version_id = dvs.device_version_id
            AND su.sensor_id = dvs.sensor_id
            AND d.mac = #{mac}
            <if test="sensorKey != null">
                AND s.sensor_key = #{sensorKey}
            </if>
    </select>
</mapper>