From ea9f0a00572fbee090305dd66b7e2db26834bbd3 Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Tue, 16 Jan 2018 17:00:32 +0800 Subject: [PATCH] 组织配置 --- src/main/java/com/moral/entity/alarm/AlarmMode.java | 2 src/main/resources/mapper/AlarmConfigMapper.xml | 100 +++++++++++ src/main/resources/mapper/mybatis-config.xml | 11 + src/main/java/com/moral/service/AlarmConfigService.java | 9 + src/main/java/com/moral/service/impl/AlarmConfigServiceImpl.java | 95 ++++++++++ src/main/java/com/moral/controller/AlarmConfigController.java | 32 +++ src/main/java/com/moral/common/json/BooleanValueFilter.java | 13 + src/main/java/com/moral/entity/alarm/AlarmSensorLevel.java | 2 src/main/java/com/moral/mapper/type/AlarmConfigValueHandle.java | 47 +++++ src/main/java/com/moral/entity/alarm/AlarmStyle.java | 2 src/main/java/com/moral/common/bean/PageBean.java | 2 src/main/java/com/moral/common/util/RedisUtils.java | 191 +++++++++++++++++++++ src/main/java/com/moral/mapper/AlarmConfigMapper.java | 22 ++ src/main/resources/application.yml | 2 14 files changed, 526 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/moral/common/bean/PageBean.java b/src/main/java/com/moral/common/bean/PageBean.java index b0cb5db..0232fbe 100644 --- a/src/main/java/com/moral/common/bean/PageBean.java +++ b/src/main/java/com/moral/common/bean/PageBean.java @@ -43,6 +43,8 @@ this.pages = page.getPages(); this.data= new ArrayList<>(list); this.size = page.size(); + }else{ + this.data = list; } } diff --git a/src/main/java/com/moral/common/json/BooleanValueFilter.java b/src/main/java/com/moral/common/json/BooleanValueFilter.java new file mode 100644 index 0000000..5029f7c --- /dev/null +++ b/src/main/java/com/moral/common/json/BooleanValueFilter.java @@ -0,0 +1,13 @@ +package com.moral.common.json; + +import com.alibaba.fastjson.serializer.ValueFilter; + +public class BooleanValueFilter implements ValueFilter{ + @Override + public Object process(Object object, String propertyName, Object propertyValue) { + if(propertyValue!=null&&propertyValue instanceof Boolean){ + return (Boolean)propertyValue?1:0; + } + return propertyValue; + } +} diff --git a/src/main/java/com/moral/common/util/RedisUtils.java b/src/main/java/com/moral/common/util/RedisUtils.java new file mode 100644 index 0000000..a05b472 --- /dev/null +++ b/src/main/java/com/moral/common/util/RedisUtils.java @@ -0,0 +1,191 @@ +package com.moral.common.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.moral.common.json.BooleanValueFilter; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +@Component +public class RedisUtils { + private static final String AlarmPrefix = "alarm_"; + public static String getAlarmKey(int organizationId){ + return AlarmPrefix+organizationId; + } + @Resource + private RedisTemplate redisTemplate; + + /** + * ���������������������value + * + * @param keys + */ + public void remove(final String... keys) { + for (String key : keys) { + remove(key); + } + } + + /** + * ������������key + * + * @param pattern + */ + public void removePattern(final String pattern) { + Set<Serializable> keys = redisTemplate.keys(pattern); + if (keys.size() > 0) + redisTemplate.delete(keys); + } + + /** + * ���������������value + * + * @param key + */ + public void remove(final String key) { + if (exists(key)) { + redisTemplate.delete(key); + } + } + + /** + * ���������������������������������value + * + * @param key + * @return + */ + public boolean exists(final String key) { + return redisTemplate.hasKey(key); + } + + /** + * ������������ + * + * @param key + * @return + */ + public Object get(final String key) { + Object result = null; + ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); + result = operations.get(key); + return result; + } + /** + * ������������,������������������ + * + * @param key + * @return + */ + public <T>T get(String key,Class<T> clazz) { + Object obj = get(key); + String json = obj!=null?obj.toString():null; + if(json!=null) { + return (T) parseObject(json,clazz); + } + return null; + } + /** + * ������������,������������������ + * + * @param key + * @return + */ + public <T>T get(String key,TypeReference typeReference) { + Object obj = get(key); + String json = obj!=null?obj.toString():null; + if(json!=null) { + return (T) parseObject(json,typeReference); + } + return null; + } + private static <T>T parseObject(String key,Class<T> clazz) { + return (T) JSON.parseObject(key,clazz); + } + private static <T>T parseObject(String key,TypeReference typeReference) { + return (T) JSON.parseObject(key,typeReference); + } + public <T> List<T> getList(String pattern,TypeReference typeReference){ + List<String> jsonList = getList(pattern); + List<T> list = new ArrayList<T>(); + for(String json:jsonList) { + list.add((T)parseObject(json,typeReference)); + } + return list; + } + public <T> List<T> getList(String pattern,Class<T> clazz){ + List<String> jsonList = getList(pattern); + List<T> list = new ArrayList<>(); + for(String json:jsonList) { + list.add(parseObject(json,clazz)); + } + return list; + } + public List<String> getList(String pattern){ + Set<String> keys = keys(pattern); + List<String> list = new ArrayList<String>(); + for(String key:keys) { + Object obj = get(key); + String json = obj!=null?obj.toString():null; + if(json!=null) { + list.add(json); + } + } + return list; + } + public Set<String> keys(String pattern) { + return redisTemplate.keys(pattern); + } + /** + * ������������ + * + * @param key + * @param value + * @return + */ + public boolean set(final String key, Object value) { + boolean result = false; + try { + if(value!=null&&!(value instanceof String)) { + value = JSON.toJSONString(value,new BooleanValueFilter()); + } + ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); + operations.set(key, value); + result = true; + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * ������������ + * + * @param key + * @param value + * @return + */ + public boolean set(final String key, Object value, Long expireTime) { + boolean result = false; + try { + if(value!=null&&!(value instanceof String)) { + value = JSON.toJSONString(value,new BooleanValueFilter()); + } + ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); + operations.set(key, value); + redisTemplate.expire(key, expireTime, TimeUnit.SECONDS); + result = true; + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } +} diff --git a/src/main/java/com/moral/controller/AlarmConfigController.java b/src/main/java/com/moral/controller/AlarmConfigController.java new file mode 100644 index 0000000..70e1121 --- /dev/null +++ b/src/main/java/com/moral/controller/AlarmConfigController.java @@ -0,0 +1,32 @@ +package com.moral.controller; + + +import com.moral.common.bean.ResultBean; +import com.moral.common.util.RedisUtil; +import com.moral.entity.alarm.AlarmConfig; +import com.moral.service.AlarmConfigService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("alarm-config") +@CrossOrigin(origins = "*", maxAge = 3600) +public class AlarmConfigController { + @Resource + AlarmConfigService alarmConfigService; + @GetMapping("get-by-oid") + public ResultBean<AlarmConfig> getAlarmConfigByOrganizationId(int organizationId){ + AlarmConfig alarmConfig = alarmConfigService.SelectByOrganizationId(organizationId); + ResultBean resultBean = new ResultBean(); + resultBean.setCode(ResultBean.SUCCESS); + resultBean.setData(alarmConfig); + return resultBean; + } + @PostMapping("add-or-modify") + public ResultBean addOrModify(@RequestBody AlarmConfig alarmConfig){ + alarmConfigService.addOrModify(alarmConfig); + ResultBean resultBean = new ResultBean(ResultBean.SUCCESS); + return resultBean; + } +} diff --git a/src/main/java/com/moral/entity/alarm/AlarmMode.java b/src/main/java/com/moral/entity/alarm/AlarmMode.java index dae319b..b3d3f76 100644 --- a/src/main/java/com/moral/entity/alarm/AlarmMode.java +++ b/src/main/java/com/moral/entity/alarm/AlarmMode.java @@ -9,7 +9,7 @@ */ @Data public class AlarmMode { - private int enable; + private boolean enable; private List<AlarmStyle> level1; private List<AlarmStyle> level2; private List<AlarmStyle> level3; diff --git a/src/main/java/com/moral/entity/alarm/AlarmSensorLevel.java b/src/main/java/com/moral/entity/alarm/AlarmSensorLevel.java index 02de3af..fd736d3 100644 --- a/src/main/java/com/moral/entity/alarm/AlarmSensorLevel.java +++ b/src/main/java/com/moral/entity/alarm/AlarmSensorLevel.java @@ -12,7 +12,7 @@ /* ������������������1���������0��������� */ - private int enable; + private boolean enable; /* ������������������������ [100,200,300] */ diff --git a/src/main/java/com/moral/entity/alarm/AlarmStyle.java b/src/main/java/com/moral/entity/alarm/AlarmStyle.java index cf21124..771b58a 100644 --- a/src/main/java/com/moral/entity/alarm/AlarmStyle.java +++ b/src/main/java/com/moral/entity/alarm/AlarmStyle.java @@ -2,5 +2,5 @@ public enum AlarmStyle { //��������������������������������� - weixin,email,sms,vioce + weixin,email,sms,voice } diff --git a/src/main/java/com/moral/mapper/AlarmConfigMapper.java b/src/main/java/com/moral/mapper/AlarmConfigMapper.java new file mode 100644 index 0000000..397db74 --- /dev/null +++ b/src/main/java/com/moral/mapper/AlarmConfigMapper.java @@ -0,0 +1,22 @@ +package com.moral.mapper; + +import java.util.List; +import java.util.Map; + +import com.moral.entity.alarm.AlarmConfig; + +public interface AlarmConfigMapper { + int deleteByPrimaryKey(Integer id); + + int insert(AlarmConfig record); + + int insertSelective(AlarmConfig record); + + AlarmConfig selectByPrimaryKey(Integer id); + //������������id������������������������ + AlarmConfig selectByOrganizationId(Integer organizationId); + + int updateByPrimaryKeySelective(AlarmConfig record); + + int updateByPrimaryKey(AlarmConfig record); +} \ No newline at end of file diff --git a/src/main/java/com/moral/mapper/type/AlarmConfigValueHandle.java b/src/main/java/com/moral/mapper/type/AlarmConfigValueHandle.java new file mode 100644 index 0000000..7c7d465 --- /dev/null +++ b/src/main/java/com/moral/mapper/type/AlarmConfigValueHandle.java @@ -0,0 +1,47 @@ +package com.moral.mapper.type; +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +import com.moral.common.json.BooleanValueFilter; +import com.moral.entity.alarm.AlarmConfig; +import com.moral.entity.alarm.AlarmConfigValue; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; + +import com.alibaba.fastjson.JSON; + +/** + * @author fengxiang + * @Time���2017���11���29��� ������9:38:51 + * @version 1.0 + */ +@MappedJdbcTypes({JdbcType.OTHER}) +@MappedTypes({AlarmConfigValue.class}) +public class AlarmConfigValueHandle extends BaseTypeHandler<AlarmConfigValue> { + + @Override + public AlarmConfigValue getNullableResult(ResultSet resultSet, String s) throws SQLException { + return JSON.parseObject(resultSet.getString(s),AlarmConfigValue.class); + } + + @Override + public AlarmConfigValue getNullableResult(ResultSet resultSet, int i) throws SQLException { + return JSON.parseObject(resultSet.getString(i),AlarmConfigValue.class); + } + + @Override + public AlarmConfigValue getNullableResult(CallableStatement cStatement, int i) throws SQLException { + return JSON.parseObject(cStatement.getString(i),AlarmConfigValue.class); + } + + @Override + public void setNonNullParameter(PreparedStatement preparedStatement, int i, AlarmConfigValue alarmConfigValue, JdbcType jdbcType) + throws SQLException { + preparedStatement.setString(i,JSON.toJSONString(alarmConfigValue,new BooleanValueFilter())); + } + +} diff --git a/src/main/java/com/moral/service/AlarmConfigService.java b/src/main/java/com/moral/service/AlarmConfigService.java new file mode 100644 index 0000000..4080244 --- /dev/null +++ b/src/main/java/com/moral/service/AlarmConfigService.java @@ -0,0 +1,9 @@ +package com.moral.service; + +import com.moral.entity.alarm.AlarmConfig; + +public interface AlarmConfigService { + public AlarmConfig SelectByOrganizationId(int organizationId); + + void addOrModify(AlarmConfig alarmConfig); +} diff --git a/src/main/java/com/moral/service/impl/AlarmConfigServiceImpl.java b/src/main/java/com/moral/service/impl/AlarmConfigServiceImpl.java new file mode 100644 index 0000000..ff3a361 --- /dev/null +++ b/src/main/java/com/moral/service/impl/AlarmConfigServiceImpl.java @@ -0,0 +1,95 @@ +package com.moral.service.impl; + +import com.moral.common.bean.Constants; +import com.moral.common.util.RedisUtils; +import com.moral.entity.alarm.AlarmConfig; +import com.moral.entity.alarm.AlarmConfigValue; +import com.moral.entity.alarm.AlarmMode; +import com.moral.entity.alarm.AlarmSensorLevel; +import com.moral.mapper.AlarmConfigMapper; +import com.moral.service.AlarmConfigService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Service +public class AlarmConfigServiceImpl implements AlarmConfigService{ + @Resource + RedisUtils redisUtils; + @Resource + AlarmConfigMapper alarmConfigMapper; + @Override + public AlarmConfig SelectByOrganizationId(int organizationId) { + return alarmConfigMapper.selectByOrganizationId(organizationId); + } + + @Override + public void addOrModify(AlarmConfig alarmConfig) { + try{ + if(alarmConfig.getId()==null){ + alarmConfig.setCreateTime(new Date()); + alarmConfig.setUpdateTime(new Date()); + alarmConfigMapper.insertSelective(alarmConfig); + }else{ + alarmConfig.setUpdateTime(new Date()); + alarmConfigMapper.updateByPrimaryKeySelective(alarmConfig); + } + String key = RedisUtils.getAlarmKey(alarmConfig.getOrganizationId()); + redisUtils.set(key,simplifyAlarmConfigValue(alarmConfig.getValue())); + } + catch (Exception ex){ + throw ex; + } + } + public AlarmConfigValue simplifyAlarmConfigValue(AlarmConfigValue value){ + Map<String,AlarmSensorLevel> alarmSensorLevelMap = value.getAlarmLevels(); + List<String> cleanKeys = new ArrayList<>(); + for(String key:alarmSensorLevelMap.keySet()){ + AlarmSensorLevel alarmSensorLevel = alarmSensorLevelMap.get(key); + if(!alarmSensorLevel.isEnable()){ + cleanKeys.add(key); + }else{ + List<Float> increments = alarmSensorLevel.getIncrement(); + if(increments!=null){ + boolean isIncrement = increments.size()<3|| + (increments.get(0)==0&&increments.get(1)==0&&increments.get(2)==0); + if(isIncrement){ + alarmSensorLevel.setIncrement(null); + } + } + List<Float> degressions = alarmSensorLevel.getDegression(); + if(degressions!=null){ + boolean isDegression = degressions.size()<3|| + (degressions.get(0)==0&°ressions.get(1)==0&°ressions.get(2)==0); + if(isDegression){ + alarmSensorLevel.setDegression(null); + } + } + } + } + for (String key:cleanKeys){ + alarmSensorLevelMap.remove(key); + } + AlarmMode alarmMode = value.getAlarmMode(); + if(!alarmMode.isEnable()){ + alarmMode.setLevel1(null); + alarmMode.setLevel2(null); + alarmMode.setLevel3(null); + }else{ + if(alarmMode.getLevel1()!=null&&alarmMode.getLevel1().isEmpty()){ + alarmMode.setLevel1(null); + } + if(alarmMode.getLevel2()!=null&&alarmMode.getLevel2().isEmpty()){ + alarmMode.setLevel2(null); + } + if(alarmMode.getLevel3()!=null&&alarmMode.getLevel3().isEmpty()){ + alarmMode.setLevel3(null); + } + } + return value; + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index ddf5b3f..01a9aae 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -63,4 +63,4 @@ mybatis: mapper-locations: classpath*:/mapper/*Mapper.xml - type-aliases-packageS: com.moral.entity \ No newline at end of file + config-location: classpath:/mapper/mybatis-config.xml \ No newline at end of file diff --git a/src/main/resources/mapper/AlarmConfigMapper.xml b/src/main/resources/mapper/AlarmConfigMapper.xml new file mode 100644 index 0000000..9d0bbd4 --- /dev/null +++ b/src/main/resources/mapper/AlarmConfigMapper.xml @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.moral.mapper.AlarmConfigMapper"> + <resultMap id="BaseResultMap" type="com.moral.entity.alarm.AlarmConfig"> + <id column="id" jdbcType="INTEGER" property="id" /> + <result column="organization_id" jdbcType="INTEGER" property="organizationId" /> + <result column="value" jdbcType="OTHER" property="value" typeHandler="AlarmConfigValueHandle" /> + <result column="create_time" jdbcType="TIMESTAMP" property="createTime" /> + <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" /> + </resultMap> + <sql id="Base_Column_List"> + id, organization_id, value, create_time, update_time + </sql> + <select id="selectByOrganizationId" parameterType="java.lang.Integer" resultMap="BaseResultMap"> + select + <include refid="Base_Column_List" /> + from alarm_config + where organization_id = #{organizationId,jdbcType=INTEGER} + limit 0,1 + </select> + <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap"> + select + <include refid="Base_Column_List" /> + from alarm_config + where id = #{id,jdbcType=INTEGER} + </select> + <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> + delete from alarm_config + where id = #{id,jdbcType=INTEGER} + </delete> + <insert id="insert" parameterType="com.moral.entity.alarm.AlarmConfig"> + insert into alarm_config (id, organization_id, value, + create_time, update_time) + values (#{id,jdbcType=INTEGER}, #{organizationId,jdbcType=INTEGER}, #{value,jdbcType=OTHER,typeHandler=AlarmConfigValueHandle}, + #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}) + </insert> + <insert id="insertSelective" parameterType="com.moral.entity.alarm.AlarmConfig"> + insert into alarm_config + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null"> + id, + </if> + <if test="organizationId != null"> + organization_id, + </if> + <if test="value != null"> + value, + </if> + <if test="createTime != null"> + create_time, + </if> + <if test="updateTime != null"> + update_time, + </if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null"> + #{id,jdbcType=INTEGER}, + </if> + <if test="organizationId != null"> + #{organizationId,jdbcType=INTEGER}, + </if> + <if test="value != null"> + #{value,jdbcType=OTHER,typeHandler=AlarmConfigValueHandle}, + </if> + <if test="createTime != null"> + #{createTime,jdbcType=TIMESTAMP}, + </if> + <if test="updateTime != null"> + #{updateTime,jdbcType=TIMESTAMP}, + </if> + </trim> + </insert> + <update id="updateByPrimaryKeySelective" parameterType="com.moral.entity.alarm.AlarmConfig"> + update alarm_config + <set> + <if test="organizationId != null"> + organization_id = #{organizationId,jdbcType=INTEGER}, + </if> + <if test="value != null"> + value = #{value,jdbcType=OTHER,typeHandler=AlarmConfigValueHandle}, + </if> + <if test="createTime != null"> + create_time = #{createTime,jdbcType=TIMESTAMP}, + </if> + <if test="updateTime != null"> + update_time = #{updateTime,jdbcType=TIMESTAMP}, + </if> + </set> + where id = #{id,jdbcType=INTEGER} + </update> + <update id="updateByPrimaryKey" parameterType="com.moral.entity.alarm.AlarmConfig"> + update alarm_config + set organization_id = #{organizationId,jdbcType=INTEGER}, + value = #{value,jdbcType=OTHER,typeHandler=AlarmConfigValueHandle}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + update_time = #{updateTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=INTEGER} + </update> +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/mybatis-config.xml b/src/main/resources/mapper/mybatis-config.xml new file mode 100644 index 0000000..579b6dd --- /dev/null +++ b/src/main/resources/mapper/mybatis-config.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE configuration + PUBLIC "-//mybatis.org//DTD Config 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-config.dtd"> + +<configuration> + <typeAliases> + <typeAlias type="com.moral.mapper.type.AlarmConfigValueHandle" alias="AlarmConfigValueHandle"/> + <package name="com.moral.entity" /> + </typeAliases> +</configuration> \ No newline at end of file -- Gitblit v1.8.0