From 288d18ea9f93236f179cbd333dc21bebda7c023a Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Wed, 04 Jul 2018 17:12:54 +0800 Subject: [PATCH] 设备,监控点 功能增强 --- src/main/java/com/moral/service/DeviceVersionService.java | 4 + src/main/java/com/moral/entity/DeviceVersion.java | 47 +---------- src/main/java/com/moral/common/util/ExampleUtil.java | 107 +++++++++++++++++--------- src/main/java/com/moral/service/impl/DeviceVersionServiceImpl.java | 31 +++++++ src/main/java/com/moral/controller/DeviceVersionController.java | 8 ++ src/main/java/com/moral/service/impl/DeviceServiceImpl.java | 4 6 files changed, 119 insertions(+), 82 deletions(-) diff --git a/src/main/java/com/moral/common/util/ExampleUtil.java b/src/main/java/com/moral/common/util/ExampleUtil.java index 1852f44..65f8509 100644 --- a/src/main/java/com/moral/common/util/ExampleUtil.java +++ b/src/main/java/com/moral/common/util/ExampleUtil.java @@ -1,10 +1,12 @@ package com.moral.common.util; +import com.moral.common.bean.Constants; import com.moral.common.bean.PageBean; import lombok.extern.log4j.Log4j; import tk.mybatis.mapper.entity.Example; -import java.beans.PropertyDescriptor; + import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URLDecoder; @@ -12,13 +14,14 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; @Log4j public class ExampleUtil { private final static String OR_SPLIT = "or\\|"; private final static String CRITERIA_SPLIT = "\\|\\|\\|"; private final static String CONDITION_SPLIT = "\\|\\|"; - private static Map<String, Method> criteriaMethodMap = null; + private static Map<String, Method> criteriaMethodMap = new ConcurrentHashMap<>(); private static void setOrderByClause(Example example,String orderByClause) throws UnsupportedEncodingException, NoSuchFieldException { orderByClause = URLDecoder.decode(orderByClause,"UTF-8"); String[] orderBys = orderByClause.split(CRITERIA_SPLIT); @@ -38,49 +41,57 @@ } } } - public static Example generateExample(Class clzz, PageBean page) { + public static Example generateExample(Class clazz, PageBean page){ + return generateExample(clazz,false,page); + } + public static Example generateExample(Class clazz, boolean isDelete, PageBean page) { Example example = null; try { String params = page.getQueryParams(); String orderByClause = page.getOrderByClause(); - example = new Example(clzz); + example = new Example(clazz); if(!StringUtils.isNullOrEmpty(orderByClause)){ setOrderByClause(example,orderByClause); } - if(StringUtils.isNullOrEmpty(params)){ return example;} - params = URLDecoder.decode(params, "UTF-8"); - if (!StringUtils.isNullOrEmpty(params) && params.startsWith("or|")) { - String[] criteria = params.trim().split(OR_SPLIT); - for (String criterion : criteria) { - // criterion���null���""������ - if(StringUtils.isNullOrEmpty(criterion)) { continue;}; - Example.Criteria criteriaOfExample = example.or(); - if (!StringUtils.isNullOrEmpty(criterion)) { - String[] conditions = criterion.trim().split(CRITERIA_SPLIT); - for (String condition : conditions) { - if (!StringUtils.isNullOrEmpty(condition)) { - String[] conditionItems = condition.split(CONDITION_SPLIT); - if (conditionItems != null && conditionItems.length > 1) { - //��������� - String methodName = conditionItems[0]; - //��������� - String propertyName = conditionItems[1]; - Method method = getMethod(methodName); - if (method != null && isPropertyOfClass(clzz, propertyName)) { + if(!StringUtils.isNullOrEmpty(params)){ + params = URLDecoder.decode(params, "UTF-8"); + if (!StringUtils.isNullOrEmpty(params) && params.startsWith("or|")) { + String[] criteria = params.trim().split(OR_SPLIT); + for (String criterion : criteria) { + // criterion���null���""������ + if(StringUtils.isNullOrEmpty(criterion)) { continue;}; + Example.Criteria criteriaOfExample = example.or(); + if (!StringUtils.isNullOrEmpty(criterion)) { + String[] conditions = criterion.trim().split(CRITERIA_SPLIT); + for (String condition : conditions) { + if (!StringUtils.isNullOrEmpty(condition)) { + String[] conditionItems = condition.split(CONDITION_SPLIT); + if (conditionItems != null && conditionItems.length > 1) { + //��������� + String methodName = conditionItems[0]; + //��������� + String propertyName = conditionItems[1]; + //������������ List values = new ArrayList<Object>(); if (conditionItems.length > 2) { for (int index = 2; index < conditionItems.length; index++) { values.add(conditionItems[index]); } } - invokeMethod(criteriaOfExample,method,propertyName,values); - } + Method method = getExampleMethod(methodName,values.size()+1); + if (method != null && (methodName.equals("andCondition")||isPropertyOfClass(clazz, propertyName))) { + invokeMethod(criteriaOfExample,method,propertyName,values); + } + } } } } } } + } + if(!isDelete) { + addDeletesToExample(example,clazz); } } catch (Exception ex) { log.error(ex.getMessage()); @@ -119,23 +130,43 @@ } ; - - private static boolean isPropertyOfClass(Class clzz, String propertyName) throws NoSuchFieldException { - return clzz.getDeclaredField(propertyName) != null; + /** + * ������������������������ + * @param example + */ + private static void addDeletesToExample(Example example,Class clzz){ + if(isPropertyOfClass(clzz,"isDelete")) { + List<Example.Criteria> criteriaList = example.getOredCriteria(); + if(criteriaList!=null&&criteriaList.size()>0){ + for(Example.Criteria cri : criteriaList){ + cri.andNotEqualTo("isDelete", Constants.IS_DELETE_TRUE); + } + }else { + example.or().andNotEqualTo("isDelete",Constants.IS_DELETE_TRUE); + } + } + } + private static boolean isPropertyOfClass(Class clzz, String propertyName){ + for(Field field : clzz.getDeclaredFields()) { + if(field.getName().equals(propertyName)) { + return true; + } + } + return false; } - private static Method getMethod(String methodName) { - if (criteriaMethodMap == null) { - criteriaMethodMap = new HashMap<>(); + private static Method getExampleMethod(String methodName, int paramCount) { + String criteriaMethodKey = methodName+"_"+String.valueOf(paramCount); + Method methodTemp = criteriaMethodMap.get(criteriaMethodKey); + if(methodTemp==null) { Method[] methods = Example.Criteria.class.getMethods(); - for (Method m : methods) { - Method method = criteriaMethodMap.get(m.getName()); - //��������������������������������� - if (method==null||m.getParameterTypes().length>method.getParameterTypes().length){ - criteriaMethodMap.put(m.getName(),m); + for (Method method : methods) { + if(method.getName().equals(methodName)&&method.getParameterCount() == paramCount) { + criteriaMethodMap.put(criteriaMethodKey,method); + return method; } } } - return criteriaMethodMap.get(methodName); + return methodTemp; } } diff --git a/src/main/java/com/moral/controller/DeviceVersionController.java b/src/main/java/com/moral/controller/DeviceVersionController.java index a4a3563..06109c8 100644 --- a/src/main/java/com/moral/controller/DeviceVersionController.java +++ b/src/main/java/com/moral/controller/DeviceVersionController.java @@ -37,6 +37,14 @@ public List<Integer> getSensorIds(Integer deviceVersionId){ return deviceVersionService.getSensorIds(deviceVersionId); } + @GetMapping("get-maxverno") + public ResultBean<Integer> getMaxVersionNo(){ + return new ResultBean<Integer>(deviceVersionService.queryMaxVersionNo()); + } + @GetMapping("get-byversion") + public ResultBean<DeviceVersion> getByVersion(Integer version){ + return new ResultBean<DeviceVersion>(deviceVersionService.queryByVersionNo(version)); + } @PostMapping("version-sensor-config/{id}") public ResultBean versionSensorConfig(@PathVariable("id") Integer deviceVersionId,@RequestBody Integer [] sensorIds){ ResultBean resultBean = new ResultBean(); diff --git a/src/main/java/com/moral/entity/DeviceVersion.java b/src/main/java/com/moral/entity/DeviceVersion.java index 6110914..0c91758 100644 --- a/src/main/java/com/moral/entity/DeviceVersion.java +++ b/src/main/java/com/moral/entity/DeviceVersion.java @@ -1,8 +1,11 @@ package com.moral.entity; +import lombok.Data; + import javax.persistence.Id; import java.util.Date; +@Data public class DeviceVersion { @Id private Integer id; @@ -13,45 +16,9 @@ private Date createTime; + private Date updateTime; + + private Boolean isDelete; + private String description; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name == null ? null : name.trim(); - } - - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description == null ? null : description.trim(); - } } \ No newline at end of file diff --git a/src/main/java/com/moral/service/DeviceVersionService.java b/src/main/java/com/moral/service/DeviceVersionService.java index 654a914..fdd3242 100644 --- a/src/main/java/com/moral/service/DeviceVersionService.java +++ b/src/main/java/com/moral/service/DeviceVersionService.java @@ -14,6 +14,10 @@ void versionSensorConfig(Integer deviceVersionId, Integer[] sensorIds); + Integer queryMaxVersionNo(); + + DeviceVersion queryByVersionNo(int versionNo); + List<Integer> getSensorIds(int deviceVersionId); List<DeviceVersion> queryByOrgId(Integer organizationId); diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java index 9d5f219..291d6c6 100644 --- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java @@ -350,8 +350,8 @@ if(pageBean.getPageSize()>0){ PageHelper.startPage(pageBean.getPageIndex(),pageBean.getPageSize()); } - List<Device> organizationList = deviceMapper.selectWithRelationData(example); - return new PageBean(organizationList); + List<Device> deviceList = deviceMapper.selectWithRelationData(example); + return new PageBean(deviceList); } @Override diff --git a/src/main/java/com/moral/service/impl/DeviceVersionServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceVersionServiceImpl.java index 8af2ad5..5c00d47 100644 --- a/src/main/java/com/moral/service/impl/DeviceVersionServiceImpl.java +++ b/src/main/java/com/moral/service/impl/DeviceVersionServiceImpl.java @@ -13,6 +13,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.List; @Service @@ -28,8 +29,10 @@ public void addOrModify(DeviceVersion deviceVersion){ try{ if(deviceVersion.getId()==null){ + deviceVersion.setUpdateTime(new Date()); deviceVersionMapper.insertSelective(deviceVersion); }else{ + deviceVersion.setUpdateTime(new Date()); deviceVersionMapper.updateByPrimaryKeySelective(deviceVersion); } } @@ -42,11 +45,18 @@ public void deleteByIds(Integer... ids) { if(ids!=null&&ids.length>0){ if(ids.length==1){ - deviceVersionMapper.deleteByPrimaryKey(ids[0]); + DeviceVersion deviceVersion = new DeviceVersion(); + deviceVersion.setId(ids[0]); + deviceVersion.setIsDelete(true); + deviceVersion.setUpdateTime(new Date()); + deviceVersionMapper.updateByPrimaryKeySelective(deviceVersion); }else{ + DeviceVersion deviceVersion = new DeviceVersion(); + deviceVersion.setIsDelete(true); + deviceVersion.setUpdateTime(new Date()); Example example = new Example(ENTITY_CLASS); example.or().andIn("id", Arrays.asList(ids)); - deviceVersionMapper.deleteByExample(example); + deviceVersionMapper.updateByExampleSelective(deviceVersion,example); } } @@ -70,6 +80,23 @@ public List<DeviceVersion> getVersionsByOrgId(int organizationId){ return null; } + + @Override + public Integer queryMaxVersionNo() { + Example example = new Example(DeviceVersion.class); + example.orderBy("version").desc(); + List<DeviceVersion> deviceVersionList = deviceVersionMapper.selectByExample(example); + if(deviceVersionList.size()>0){ + return deviceVersionList.get(0).getVersion(); + } + return null; + } + @Override + public DeviceVersion queryByVersionNo(int versionNo) { + DeviceVersion query = new DeviceVersion(); + query.setVersion(versionNo); + return deviceVersionMapper.selectOne(query); + } @Override public List<Integer> getSensorIds(int deviceVersionId){ DeviceVersionSensor deviceVersionSensor = new DeviceVersionSensor(); -- Gitblit v1.8.0