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