From 5bb340081d5b584000e4a932a959233077293b4c Mon Sep 17 00:00:00 2001
From: xufenglei <xufenglei>
Date: Mon, 27 Nov 2017 09:03:39 +0800
Subject: [PATCH] 大屏 接口

---
 src/main/java/com/moral/service/impl/UserServiceImpl.java         |    2 
 src/main/java/com/moral/mapper/OrganizationRelationMapper.java    |   10 
 src/main/resources/mapper/OrganizationRelationMapper.xml          |  181 +
 src/main/java/com/moral/mapper/HistoryMapper.java                 |   33 
 src/main/java/com/moral/service/OperateUserService.java           |   11 
 src/main/java/com/moral/service/impl/OperateUserServiceImpl.java  |   26 
 src/main/resources/system/alarmLevels.json                        |   97 
 src/main/java/com/moral/mapper/AccountMapper.java                 |   15 
 src/main/java/com/moral/service/DeviceService.java                |    8 
 src/main/java/com/moral/util/CalculateUtils.java                  |    9 
 src/main/java/com/moral/util/Crypto.java                          |   32 
 src/main/java/com/moral/entity/HistoryExample.java                |  443 +++
 src/main/java/com/moral/controller/ScreenController.java          |  279 ++
 src/main/java/com/moral/entity/History.java                       |   45 
 src/main/java/com/moral/entity/OperateUserExample.java            |  931 ++++++
 src/main/resources/mapper/DeviceMapper.xml                        |  344 ++
 src/main/java/com/moral/entity/OrganizationRelationExample.java   |  380 ++
 src/main/java/com/moral/entity/Account.java                       |  106 
 src/main/java/com/moral/entity/Device.java                        |  125 
 src/main/resources/system/sysConfig.properties                    |   28 
 src/main/java/com/moral/util/BusinessException.java               |   14 
 src/main/java/com/moral/service/impl/HistoryServiceImpl.java      |  167 +
 src/main/java/com/moral/entity/OrganizationRelation.java          |   33 
 src/main/java/com/moral/mapper/OperateUserMapper.java             |   10 
 src/main/java/com/moral/mapper/OrganizationMapper.java            |   10 
 src/main/java/com/moral/util/ResourceUtil.java                    |   20 
 src/main/java/com/moral/entity/Organization.java                  |  135 
 src/main/java/com/moral/mapper/BaseMapper.java                    |   31 
 src/main/resources/mapper/OperateUserMapper.xml                   |  306 ++
 src/main/java/com/moral/service/OrganizationService.java          |    9 
 src/main/java/com/moral/util/RedisUtil.java                       |   26 
 src/main/resources/mapper/AccountMapper.xml                       |  302 ++
 src/main/java/com/moral/mapper/UserMapper.java                    |    4 
 src/main/java/com/moral/util/Constants.java                       |   18 
 pom.xml                                                           |   15 
 src/main/java/com/moral/service/impl/DeviceServiceImpl.java       |   49 
 src/main/java/com/moral/entity/DeviceExample.java                 |  961 +++++++
 src/main/java/com/moral/entity/OperateUser.java                   |  115 
 src/main/java/com/moral/mapper/DeviceMapper.java                  |   14 
 src/main/resources/mapper/HistoryMapper.xml                       |  376 ++
 src/main/java/com/moral/service/AccountService.java               |   18 
 src/main/resources/mapper/OrganizationMapper.xml                  |  338 ++
 src/main/java/com/moral/service/impl/AccountServiceImpl.java      |   86 
 src/main/java/com/moral/entity/AccountExample.java                |  855 ++++++
 /dev/null                                                         |   10 
 src/main/java/com/moral/service/HistoryService.java               |   15 
 src/main/java/com/moral/entity/OrganizationExample.java           | 1041 +++++++
 src/main/java/com/moral/service/impl/OrganizationServiceImpl.java |   44 
 src/main/java/com/moral/util/WebUtils.java                        |   40 
 src/main/resources/application.yml                                |    4 
 50 files changed, 8,156 insertions(+), 15 deletions(-)

diff --git a/pom.xml b/pom.xml
index ef4950d..4a7576c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,6 +95,21 @@
             <artifactId>mysql-connector-java</artifactId>
             <version>5.1.44</version>
         </dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-mongodb</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-lang3</artifactId>
+			<version>3.5</version>
+		</dependency>
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>fastjson</artifactId>
+			<version>1.2.39</version>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
new file mode 100644
index 0000000..01c7c41
--- /dev/null
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -0,0 +1,279 @@
+package com.moral.controller;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.Resource;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONReader;
+import com.alibaba.fastjson.TypeReference;
+import com.moral.util.ResourceUtil;
+import com.moral.service.AccountService;
+import com.moral.service.DeviceService;
+import com.moral.service.HistoryService;
+import com.moral.util.BusinessException;
+import com.moral.util.RedisUtil;
+import com.moral.util.WebUtils;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class ScreenController.
+ */
+@RestController
+@RequestMapping(value = "screen")
+@CrossOrigin(origins = "*", maxAge = 3600)
+public class ScreenController {
+
+	/** The screen service. */
+	@Autowired
+	private HistoryService historyService;
+
+	/** The account service. */
+	@Autowired
+	private AccountService accountService;
+
+	/** The device service. */
+	@Autowired
+	private DeviceService deviceService;
+
+	/** The resource. */
+	@Value(value = "classpath:system/alarmLevels.json")
+	private Resource resource;
+
+	/** The redis template. */
+	@javax.annotation.Resource
+	RedisTemplate<String, String> redisTemplate;
+
+	/** The level key. */
+	private String levelKey = "alarm_level_config";
+
+	/**
+	 * Screen login. ������������
+	 * 
+	 * @param request
+	 *            the request
+	 * @return the map
+	 */
+	@RequestMapping(value = "login", method = RequestMethod.GET)
+	public Map<String, Object> screenLogin(HttpServletRequest request) {
+		Map<String, Object> resultMap = new HashMap<String, Object>();
+		try {
+			Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+			if (!(parameters.containsKey("account") && parameters.containsKey("password"))) {
+				resultMap.put("msg", "������������������������������������");
+				resultMap.put("accountId", -1);
+			} else {
+				resultMap = accountService.screenLogin(parameters);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+			resultMap.put("accountId", -1);
+			resultMap.put("msg", "���������������������������������������������������" + e.getMessage());
+		}
+		return resultMap;
+	}
+
+	/**
+	 * Gets the equipment states. ���������������������������������������
+	 * 
+	 * @param request
+	 *            the request
+	 * @return the equipment states
+	 */
+	@RequestMapping(value = "equipment-state", method = RequestMethod.GET)
+	public Map<String, Object> getDeviceStates(HttpServletRequest request) {
+		Map<String, Object> result = new LinkedHashMap<String, Object>();
+		try {
+			Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+			if (!parameters.containsKey("accountId")) {
+				result.put("msg", "���������������������");
+			} else {
+				result = deviceService.getDeviceStates(parameters);
+			}
+		} catch (BusinessException be) {
+			be.printStackTrace();
+			result.put("msg", be.getMessage());
+		} catch (Exception e) {
+			e.printStackTrace();
+			result.put("msg", "���������������������������������������������������" + e.getMessage());
+		}
+		return result;
+	}
+
+	/**
+	 * Gets the alarm levels. ������������������
+	 * 
+	 * @param request
+	 *            the request
+	 * @return the alarm levels
+	 */
+	@SuppressWarnings("resource")
+	@RequestMapping(value = "alarm-levels", method = RequestMethod.GET)
+	public Map<String, Object> getAlarmLevels(HttpServletRequest request) {
+		Map<String, Object> result = new LinkedHashMap<String, Object>();
+		try {
+			if (RedisUtil.hasKey(redisTemplate, levelKey)) {
+				String levelConfigStr = RedisUtil.get(redisTemplate, levelKey);
+				result = JSON.parseObject(levelConfigStr, new TypeReference<Map<String, Object>>() {});
+			} else {
+				InputStreamReader reader = new InputStreamReader(resource.getInputStream());
+				result = new JSONReader(reader).readObject(new TypeReference<LinkedHashMap<String, Object>>() {});
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+			result.put("msg", "���������������������������������������������������" + e.getMessage());
+		}
+		return result;
+	}
+
+	/**
+	 * Gets the standard by sensor.���������������������������
+	 *
+	 * @param request
+	 *            the request
+	 * @return the standard by sensor
+	 */
+	@RequestMapping(value = "sensor-standard", method = RequestMethod.GET)
+	public Map<String, Object> getStandardBySensor(HttpServletRequest request) {
+		Map<String, Object> result = new HashMap<String, Object>();
+		try {
+			String macKey = request.getParameter("macKey");
+			if (ObjectUtils.isEmpty(macKey)) {
+				result.put("msg", "���������������������");
+			} else {
+				result.put("standard", ResourceUtil.getValue(macKey + "-standard"));
+			}
+		} catch (BusinessException be) {
+			be.printStackTrace();
+			result.put("msg", be.getMessage());
+		} catch (Exception e) {
+			e.printStackTrace();
+			result.put("msg", "���������������������������������������������������" + e.getMessage());
+		}
+		return result;
+	}
+
+	/**
+	 * Gets the day AQI by sensor.���������������AQI������
+	 *
+	 * @param request
+	 *            the request
+	 * @return the day AQI by sensor
+	 */
+	@RequestMapping(value = "day-aqi", method = RequestMethod.GET)
+	public Map<String, Object> getDayAQIByDevice(HttpServletRequest request) {
+		Map<String, Object> result = new HashMap<String, Object>();
+		try {
+			Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+			if (!parameters.containsKey("mac")) {
+				result.put("msg", "���������������������");
+			} else {
+				result = historyService.getDayAQIByDevice(parameters);
+			}
+		} catch (BusinessException be) {
+			be.printStackTrace();
+			result.put("msg", be.getMessage());
+		} catch (Exception e) {
+			e.printStackTrace();
+			result.put("msg", "���������������������������������������������������" + e.getMessage());
+		}
+		return result;
+	}
+
+	/**
+	 * Gets the average by all. ������������������������10������������5������������������������������������������
+	 * 
+	 * @param request
+	 *            the request
+	 * @return the average by all
+	 */
+	@RequestMapping(value = "/all-average", method = RequestMethod.GET)
+	public Map<String, Object> getAverageByAll(HttpServletRequest request) {
+		Map<String, Object> result = new LinkedHashMap<String, Object>();
+		try {
+			Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+			if (!(parameters.containsKey("areaCode") && parameters.containsKey("accountId"))) {
+				result.put("msg", "���������������������");
+			} else {
+				result = historyService.getAverageByAll(parameters);
+			}
+		} catch (BusinessException be) {
+			be.printStackTrace();
+			result.put("msg", be.getMessage());
+		} catch (Exception e) {
+			e.printStackTrace();
+			result.put("msg", "���������������������������������������������������" + e.getMessage());
+		}
+		return result;
+	}
+
+	/**
+	 * Gets the average by sensor.���������������������������������������������
+	 *
+	 * @param request
+	 *            the request
+	 * @return the average by sensor
+	 */
+	@RequestMapping(value = "/sensor-average", method = RequestMethod.GET)
+	public Map<String, Object> getAverageBySensor(HttpServletRequest request) {
+		Map<String, Object> result = new HashMap<String, Object>();
+		try {
+			Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+			if (!(parameters.containsKey("areaCode") && parameters.containsKey("accountId")
+					&& parameters.containsKey("macKey"))) {
+				result.put("msg", "���������������������");
+			} else {
+				result = historyService.getAverageBySensor(parameters);
+			}
+		} catch (BusinessException be) {
+			be.printStackTrace();
+			result.put("msg", be.getMessage());
+		} catch (Exception e) {
+			e.printStackTrace();
+			result.put("msg", "���������������������������������������������������" + e.getMessage());
+		}
+		return result;
+	}
+
+	/**
+	 * Gets the month average by sensor.������������������������������
+	 *
+	 * @param request
+	 *            the request
+	 * @return the month average by sensor
+	 */
+	@RequestMapping(value = "month-sensor-average", method = RequestMethod.GET)
+	public Map<String, Object> getMonthAverageBySensor(HttpServletRequest request) {
+		Map<String, Object> result = new HashMap<String, Object>();
+		try {
+			Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+			if (!(parameters.containsKey("mac") && parameters.containsKey("macKey"))) {
+				result.put("msg", "���������������������");
+			} else {
+				result = historyService.getMonthAverageBySensor(parameters);
+			}
+		} catch (BusinessException be) {
+			be.printStackTrace();
+			result.put("msg", be.getMessage());
+		} catch (Exception e) {
+			e.printStackTrace();
+			result.put("msg", "���������������������������������������������������" + e.getMessage());
+		}
+		return result;
+	}
+
+}
diff --git a/src/main/java/com/moral/entity/Account.java b/src/main/java/com/moral/entity/Account.java
new file mode 100644
index 0000000..813c62d
--- /dev/null
+++ b/src/main/java/com/moral/entity/Account.java
@@ -0,0 +1,106 @@
+package com.moral.entity;
+
+import java.util.Date;
+
+public class Account {
+    private Integer id;
+
+	private String accountName;
+
+	private String password;
+
+	private Integer organizationId;
+
+	private String email;
+
+	private String mobile;
+
+	private String weixin;
+
+	private String isDelete;
+
+	private Date createTime;
+
+	private Date expireTime;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getAccountName() {
+		return accountName;
+	}
+
+	public void setAccountName(String accountName) {
+		this.accountName = accountName;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public Integer getOrganizationId() {
+		return organizationId;
+	}
+
+	public void setOrganizationId(Integer organizationId) {
+		this.organizationId = organizationId;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getMobile() {
+		return mobile;
+	}
+
+	public void setMobile(String mobile) {
+		this.mobile = mobile;
+	}
+
+	public String getWeixin() {
+		return weixin;
+	}
+
+	public void setWeixin(String weixin) {
+		this.weixin = weixin;
+	}
+
+	public String getIsDelete() {
+		return isDelete;
+	}
+
+	public void setIsDelete(String isDelete) {
+		this.isDelete = isDelete;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getExpireTime() {
+		return expireTime;
+	}
+
+	public void setExpireTime(Date expireTime) {
+		this.expireTime = expireTime;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/AccountExample.java b/src/main/java/com/moral/entity/AccountExample.java
new file mode 100644
index 0000000..afe9f2a
--- /dev/null
+++ b/src/main/java/com/moral/entity/AccountExample.java
@@ -0,0 +1,855 @@
+package com.moral.entity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class AccountExample {
+    protected String orderByClause;
+
+	protected boolean distinct;
+
+	protected List<Criteria> oredCriteria;
+
+	public AccountExample() {
+		oredCriteria = new ArrayList<Criteria>();
+	}
+
+	public void setOrderByClause(String orderByClause) {
+		this.orderByClause = orderByClause;
+	}
+
+	public String getOrderByClause() {
+		return orderByClause;
+	}
+
+	public void setDistinct(boolean distinct) {
+		this.distinct = distinct;
+	}
+
+	public boolean isDistinct() {
+		return distinct;
+	}
+
+	public List<Criteria> getOredCriteria() {
+		return oredCriteria;
+	}
+
+	public void or(Criteria criteria) {
+		oredCriteria.add(criteria);
+	}
+
+	public Criteria or() {
+		Criteria criteria = createCriteriaInternal();
+		oredCriteria.add(criteria);
+		return criteria;
+	}
+
+	public Criteria createCriteria() {
+		Criteria criteria = createCriteriaInternal();
+		if (oredCriteria.size() == 0) {
+			oredCriteria.add(criteria);
+		}
+		return criteria;
+	}
+
+	protected Criteria createCriteriaInternal() {
+		Criteria criteria = new Criteria();
+		return criteria;
+	}
+
+	public void clear() {
+		oredCriteria.clear();
+		orderByClause = null;
+		distinct = false;
+	}
+
+	protected abstract static class GeneratedCriteria {
+		protected List<Criterion> criteria;
+
+		protected GeneratedCriteria() {
+			super();
+			criteria = new ArrayList<Criterion>();
+		}
+
+		public boolean isValid() {
+			return criteria.size() > 0;
+		}
+
+		public List<Criterion> getAllCriteria() {
+			return criteria;
+		}
+
+		public List<Criterion> getCriteria() {
+			return criteria;
+		}
+
+		protected void addCriterion(String condition) {
+			if (condition == null) {
+				throw new RuntimeException("Value for condition cannot be null");
+			}
+			criteria.add(new Criterion(condition));
+		}
+
+		protected void addCriterion(String condition, Object value, String property) {
+			if (value == null) {
+				throw new RuntimeException("Value for " + property + " cannot be null");
+			}
+			criteria.add(new Criterion(condition, value));
+		}
+
+		protected void addCriterion(String condition, Object value1, Object value2, String property) {
+			if (value1 == null || value2 == null) {
+				throw new RuntimeException("Between values for " + property + " cannot be null");
+			}
+			criteria.add(new Criterion(condition, value1, value2));
+		}
+
+		public Criteria andIdIsNull() {
+			addCriterion("id is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andIdIsNotNull() {
+			addCriterion("id is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andIdEqualTo(Integer value) {
+			addCriterion("id =", value, "id");
+			return (Criteria) this;
+		}
+
+		public Criteria andIdNotEqualTo(Integer value) {
+			addCriterion("id <>", value, "id");
+			return (Criteria) this;
+		}
+
+		public Criteria andIdGreaterThan(Integer value) {
+			addCriterion("id >", value, "id");
+			return (Criteria) this;
+		}
+
+		public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+			addCriterion("id >=", value, "id");
+			return (Criteria) this;
+		}
+
+		public Criteria andIdLessThan(Integer value) {
+			addCriterion("id <", value, "id");
+			return (Criteria) this;
+		}
+
+		public Criteria andIdLessThanOrEqualTo(Integer value) {
+			addCriterion("id <=", value, "id");
+			return (Criteria) this;
+		}
+
+		public Criteria andIdIn(List<Integer> values) {
+			addCriterion("id in", values, "id");
+			return (Criteria) this;
+		}
+
+		public Criteria andIdNotIn(List<Integer> values) {
+			addCriterion("id not in", values, "id");
+			return (Criteria) this;
+		}
+
+		public Criteria andIdBetween(Integer value1, Integer value2) {
+			addCriterion("id between", value1, value2, "id");
+			return (Criteria) this;
+		}
+
+		public Criteria andIdNotBetween(Integer value1, Integer value2) {
+			addCriterion("id not between", value1, value2, "id");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameIsNull() {
+			addCriterion("account_name is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameIsNotNull() {
+			addCriterion("account_name is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameEqualTo(String value) {
+			addCriterion("account_name =", value, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameNotEqualTo(String value) {
+			addCriterion("account_name <>", value, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameGreaterThan(String value) {
+			addCriterion("account_name >", value, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameGreaterThanOrEqualTo(String value) {
+			addCriterion("account_name >=", value, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameLessThan(String value) {
+			addCriterion("account_name <", value, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameLessThanOrEqualTo(String value) {
+			addCriterion("account_name <=", value, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameLike(String value) {
+			addCriterion("account_name like", value, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameNotLike(String value) {
+			addCriterion("account_name not like", value, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameIn(List<String> values) {
+			addCriterion("account_name in", values, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameNotIn(List<String> values) {
+			addCriterion("account_name not in", values, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameBetween(String value1, String value2) {
+			addCriterion("account_name between", value1, value2, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andAccountNameNotBetween(String value1, String value2) {
+			addCriterion("account_name not between", value1, value2, "accountName");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordIsNull() {
+			addCriterion("password is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordIsNotNull() {
+			addCriterion("password is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordEqualTo(String value) {
+			addCriterion("password =", value, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordNotEqualTo(String value) {
+			addCriterion("password <>", value, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordGreaterThan(String value) {
+			addCriterion("password >", value, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordGreaterThanOrEqualTo(String value) {
+			addCriterion("password >=", value, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordLessThan(String value) {
+			addCriterion("password <", value, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordLessThanOrEqualTo(String value) {
+			addCriterion("password <=", value, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordLike(String value) {
+			addCriterion("password like", value, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordNotLike(String value) {
+			addCriterion("password not like", value, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordIn(List<String> values) {
+			addCriterion("password in", values, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordNotIn(List<String> values) {
+			addCriterion("password not in", values, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordBetween(String value1, String value2) {
+			addCriterion("password between", value1, value2, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andPasswordNotBetween(String value1, String value2) {
+			addCriterion("password not between", value1, value2, "password");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdIsNull() {
+			addCriterion("organization_id is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdIsNotNull() {
+			addCriterion("organization_id is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdEqualTo(Integer value) {
+			addCriterion("organization_id =", value, "organizationId");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdNotEqualTo(Integer value) {
+			addCriterion("organization_id <>", value, "organizationId");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdGreaterThan(Integer value) {
+			addCriterion("organization_id >", value, "organizationId");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdGreaterThanOrEqualTo(Integer value) {
+			addCriterion("organization_id >=", value, "organizationId");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdLessThan(Integer value) {
+			addCriterion("organization_id <", value, "organizationId");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdLessThanOrEqualTo(Integer value) {
+			addCriterion("organization_id <=", value, "organizationId");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdIn(List<Integer> values) {
+			addCriterion("organization_id in", values, "organizationId");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdNotIn(List<Integer> values) {
+			addCriterion("organization_id not in", values, "organizationId");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdBetween(Integer value1, Integer value2) {
+			addCriterion("organization_id between", value1, value2, "organizationId");
+			return (Criteria) this;
+		}
+
+		public Criteria andOrganizationIdNotBetween(Integer value1, Integer value2) {
+			addCriterion("organization_id not between", value1, value2, "organizationId");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailIsNull() {
+			addCriterion("email is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailIsNotNull() {
+			addCriterion("email is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailEqualTo(String value) {
+			addCriterion("email =", value, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailNotEqualTo(String value) {
+			addCriterion("email <>", value, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailGreaterThan(String value) {
+			addCriterion("email >", value, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailGreaterThanOrEqualTo(String value) {
+			addCriterion("email >=", value, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailLessThan(String value) {
+			addCriterion("email <", value, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailLessThanOrEqualTo(String value) {
+			addCriterion("email <=", value, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailLike(String value) {
+			addCriterion("email like", value, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailNotLike(String value) {
+			addCriterion("email not like", value, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailIn(List<String> values) {
+			addCriterion("email in", values, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailNotIn(List<String> values) {
+			addCriterion("email not in", values, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailBetween(String value1, String value2) {
+			addCriterion("email between", value1, value2, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andEmailNotBetween(String value1, String value2) {
+			addCriterion("email not between", value1, value2, "email");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileIsNull() {
+			addCriterion("mobile is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileIsNotNull() {
+			addCriterion("mobile is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileEqualTo(String value) {
+			addCriterion("mobile =", value, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileNotEqualTo(String value) {
+			addCriterion("mobile <>", value, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileGreaterThan(String value) {
+			addCriterion("mobile >", value, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileGreaterThanOrEqualTo(String value) {
+			addCriterion("mobile >=", value, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileLessThan(String value) {
+			addCriterion("mobile <", value, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileLessThanOrEqualTo(String value) {
+			addCriterion("mobile <=", value, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileLike(String value) {
+			addCriterion("mobile like", value, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileNotLike(String value) {
+			addCriterion("mobile not like", value, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileIn(List<String> values) {
+			addCriterion("mobile in", values, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileNotIn(List<String> values) {
+			addCriterion("mobile not in", values, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileBetween(String value1, String value2) {
+			addCriterion("mobile between", value1, value2, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andMobileNotBetween(String value1, String value2) {
+			addCriterion("mobile not between", value1, value2, "mobile");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinIsNull() {
+			addCriterion("weixin is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinIsNotNull() {
+			addCriterion("weixin is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinEqualTo(String value) {
+			addCriterion("weixin =", value, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinNotEqualTo(String value) {
+			addCriterion("weixin <>", value, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinGreaterThan(String value) {
+			addCriterion("weixin >", value, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinGreaterThanOrEqualTo(String value) {
+			addCriterion("weixin >=", value, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinLessThan(String value) {
+			addCriterion("weixin <", value, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinLessThanOrEqualTo(String value) {
+			addCriterion("weixin <=", value, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinLike(String value) {
+			addCriterion("weixin like", value, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinNotLike(String value) {
+			addCriterion("weixin not like", value, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinIn(List<String> values) {
+			addCriterion("weixin in", values, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinNotIn(List<String> values) {
+			addCriterion("weixin not in", values, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinBetween(String value1, String value2) {
+			addCriterion("weixin between", value1, value2, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andWeixinNotBetween(String value1, String value2) {
+			addCriterion("weixin not between", value1, value2, "weixin");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteIsNull() {
+			addCriterion("is_delete is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteIsNotNull() {
+			addCriterion("is_delete is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteEqualTo(String value) {
+			addCriterion("is_delete =", value, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteNotEqualTo(String value) {
+			addCriterion("is_delete <>", value, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteGreaterThan(String value) {
+			addCriterion("is_delete >", value, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteGreaterThanOrEqualTo(String value) {
+			addCriterion("is_delete >=", value, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteLessThan(String value) {
+			addCriterion("is_delete <", value, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteLessThanOrEqualTo(String value) {
+			addCriterion("is_delete <=", value, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteLike(String value) {
+			addCriterion("is_delete like", value, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteNotLike(String value) {
+			addCriterion("is_delete not like", value, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteIn(List<String> values) {
+			addCriterion("is_delete in", values, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteNotIn(List<String> values) {
+			addCriterion("is_delete not in", values, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteBetween(String value1, String value2) {
+			addCriterion("is_delete between", value1, value2, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andIsDeleteNotBetween(String value1, String value2) {
+			addCriterion("is_delete not between", value1, value2, "isDelete");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeIsNull() {
+			addCriterion("create_time is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeIsNotNull() {
+			addCriterion("create_time is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeEqualTo(Date value) {
+			addCriterion("create_time =", value, "createTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeNotEqualTo(Date value) {
+			addCriterion("create_time <>", value, "createTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeGreaterThan(Date value) {
+			addCriterion("create_time >", value, "createTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+			addCriterion("create_time >=", value, "createTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeLessThan(Date value) {
+			addCriterion("create_time <", value, "createTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+			addCriterion("create_time <=", value, "createTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeIn(List<Date> values) {
+			addCriterion("create_time in", values, "createTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeNotIn(List<Date> values) {
+			addCriterion("create_time not in", values, "createTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeBetween(Date value1, Date value2) {
+			addCriterion("create_time between", value1, value2, "createTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+			addCriterion("create_time not between", value1, value2, "createTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeIsNull() {
+			addCriterion("expire_time is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeIsNotNull() {
+			addCriterion("expire_time is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeEqualTo(Date value) {
+			addCriterion("expire_time =", value, "expireTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeNotEqualTo(Date value) {
+			addCriterion("expire_time <>", value, "expireTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeGreaterThan(Date value) {
+			addCriterion("expire_time >", value, "expireTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeGreaterThanOrEqualTo(Date value) {
+			addCriterion("expire_time >=", value, "expireTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeLessThan(Date value) {
+			addCriterion("expire_time <", value, "expireTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeLessThanOrEqualTo(Date value) {
+			addCriterion("expire_time <=", value, "expireTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeIn(List<Date> values) {
+			addCriterion("expire_time in", values, "expireTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeNotIn(List<Date> values) {
+			addCriterion("expire_time not in", values, "expireTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeBetween(Date value1, Date value2) {
+			addCriterion("expire_time between", value1, value2, "expireTime");
+			return (Criteria) this;
+		}
+
+		public Criteria andExpireTimeNotBetween(Date value1, Date value2) {
+			addCriterion("expire_time not between", value1, value2, "expireTime");
+			return (Criteria) this;
+		}
+	}
+
+	public static class Criteria extends GeneratedCriteria {
+		protected Criteria() {
+			super();
+		}
+	}
+
+	public static class Criterion {
+		private String condition;
+		private Object value;
+		private Object secondValue;
+		private boolean noValue;
+		private boolean singleValue;
+		private boolean betweenValue;
+		private boolean listValue;
+		private String typeHandler;
+
+		public String getCondition() {
+			return condition;
+		}
+
+		public Object getValue() {
+			return value;
+		}
+
+		public Object getSecondValue() {
+			return secondValue;
+		}
+
+		public boolean isNoValue() {
+			return noValue;
+		}
+
+		public boolean isSingleValue() {
+			return singleValue;
+		}
+
+		public boolean isBetweenValue() {
+			return betweenValue;
+		}
+
+		public boolean isListValue() {
+			return listValue;
+		}
+
+		public String getTypeHandler() {
+			return typeHandler;
+		}
+
+		protected Criterion(String condition) {
+			super();
+			this.condition = condition;
+			this.typeHandler = null;
+			this.noValue = true;
+		}
+
+		protected Criterion(String condition, Object value, String typeHandler) {
+			super();
+			this.condition = condition;
+			this.value = value;
+			this.typeHandler = typeHandler;
+			if (value instanceof List<?>) {
+				this.listValue = true;
+			} else {
+				this.singleValue = true;
+			}
+		}
+
+		protected Criterion(String condition, Object value) {
+			this(condition, value, null);
+		}
+
+		protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+			super();
+			this.condition = condition;
+			this.value = value;
+			this.secondValue = secondValue;
+			this.typeHandler = typeHandler;
+			this.betweenValue = true;
+		}
+
+		protected Criterion(String condition, Object value, Object secondValue) {
+			this(condition, value, secondValue, null);
+		}
+	}
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/Device.java b/src/main/java/com/moral/entity/Device.java
new file mode 100644
index 0000000..4b8d053
--- /dev/null
+++ b/src/main/java/com/moral/entity/Device.java
@@ -0,0 +1,125 @@
+package com.moral.entity;
+
+import java.util.Date;
+
+public class Device {
+    private Integer id;
+
+    private String name;
+
+    private String address;
+
+    private Float longitude;
+
+    private Float latitude;
+
+    private String mac;
+
+    private String state;
+
+    private Integer operateUserId;
+
+    private Date createTime;
+
+    private Date installTime;
+
+    private Integer monitorPointId;
+
+    private Integer deviceVersionId;
+
+    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;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public Float getLongitude() {
+        return longitude;
+    }
+
+    public void setLongitude(Float longitude) {
+        this.longitude = longitude;
+    }
+
+    public Float getLatitude() {
+        return latitude;
+    }
+
+    public void setLatitude(Float latitude) {
+        this.latitude = latitude;
+    }
+
+    public String getMac() {
+        return mac;
+    }
+
+    public void setMac(String mac) {
+        this.mac = mac;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public Integer getOperateUserId() {
+        return operateUserId;
+    }
+
+    public void setOperateUserId(Integer operateUserId) {
+        this.operateUserId = operateUserId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getInstallTime() {
+        return installTime;
+    }
+
+    public void setInstallTime(Date installTime) {
+        this.installTime = installTime;
+    }
+
+    public Integer getMonitorPointId() {
+        return monitorPointId;
+    }
+
+    public void setMonitorPointId(Integer monitorPointId) {
+        this.monitorPointId = monitorPointId;
+    }
+
+    public Integer getDeviceVersionId() {
+        return deviceVersionId;
+    }
+
+    public void setDeviceVersionId(Integer deviceVersionId) {
+        this.deviceVersionId = deviceVersionId;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/DeviceExample.java b/src/main/java/com/moral/entity/DeviceExample.java
new file mode 100644
index 0000000..e5966e5
--- /dev/null
+++ b/src/main/java/com/moral/entity/DeviceExample.java
@@ -0,0 +1,961 @@
+package com.moral.entity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class DeviceExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public DeviceExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNull() {
+            addCriterion("name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNotNull() {
+            addCriterion("name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameEqualTo(String value) {
+            addCriterion("name =", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotEqualTo(String value) {
+            addCriterion("name <>", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThan(String value) {
+            addCriterion("name >", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThanOrEqualTo(String value) {
+            addCriterion("name >=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThan(String value) {
+            addCriterion("name <", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThanOrEqualTo(String value) {
+            addCriterion("name <=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLike(String value) {
+            addCriterion("name like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotLike(String value) {
+            addCriterion("name not like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIn(List<String> values) {
+            addCriterion("name in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotIn(List<String> values) {
+            addCriterion("name not in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameBetween(String value1, String value2) {
+            addCriterion("name between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotBetween(String value1, String value2) {
+            addCriterion("name not between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressIsNull() {
+            addCriterion("address is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressIsNotNull() {
+            addCriterion("address is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressEqualTo(String value) {
+            addCriterion("address =", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressNotEqualTo(String value) {
+            addCriterion("address <>", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressGreaterThan(String value) {
+            addCriterion("address >", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressGreaterThanOrEqualTo(String value) {
+            addCriterion("address >=", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressLessThan(String value) {
+            addCriterion("address <", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressLessThanOrEqualTo(String value) {
+            addCriterion("address <=", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressLike(String value) {
+            addCriterion("address like", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressNotLike(String value) {
+            addCriterion("address not like", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressIn(List<String> values) {
+            addCriterion("address in", values, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressNotIn(List<String> values) {
+            addCriterion("address not in", values, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressBetween(String value1, String value2) {
+            addCriterion("address between", value1, value2, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressNotBetween(String value1, String value2) {
+            addCriterion("address not between", value1, value2, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeIsNull() {
+            addCriterion("longitude is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeIsNotNull() {
+            addCriterion("longitude is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeEqualTo(Float value) {
+            addCriterion("longitude =", value, "longitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeNotEqualTo(Float value) {
+            addCriterion("longitude <>", value, "longitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeGreaterThan(Float value) {
+            addCriterion("longitude >", value, "longitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeGreaterThanOrEqualTo(Float value) {
+            addCriterion("longitude >=", value, "longitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeLessThan(Float value) {
+            addCriterion("longitude <", value, "longitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeLessThanOrEqualTo(Float value) {
+            addCriterion("longitude <=", value, "longitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeIn(List<Float> values) {
+            addCriterion("longitude in", values, "longitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeNotIn(List<Float> values) {
+            addCriterion("longitude not in", values, "longitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeBetween(Float value1, Float value2) {
+            addCriterion("longitude between", value1, value2, "longitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLongitudeNotBetween(Float value1, Float value2) {
+            addCriterion("longitude not between", value1, value2, "longitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeIsNull() {
+            addCriterion("latitude is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeIsNotNull() {
+            addCriterion("latitude is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeEqualTo(Float value) {
+            addCriterion("latitude =", value, "latitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeNotEqualTo(Float value) {
+            addCriterion("latitude <>", value, "latitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeGreaterThan(Float value) {
+            addCriterion("latitude >", value, "latitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeGreaterThanOrEqualTo(Float value) {
+            addCriterion("latitude >=", value, "latitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeLessThan(Float value) {
+            addCriterion("latitude <", value, "latitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeLessThanOrEqualTo(Float value) {
+            addCriterion("latitude <=", value, "latitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeIn(List<Float> values) {
+            addCriterion("latitude in", values, "latitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeNotIn(List<Float> values) {
+            addCriterion("latitude not in", values, "latitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeBetween(Float value1, Float value2) {
+            addCriterion("latitude between", value1, value2, "latitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andLatitudeNotBetween(Float value1, Float value2) {
+            addCriterion("latitude not between", value1, value2, "latitude");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacIsNull() {
+            addCriterion("mac is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacIsNotNull() {
+            addCriterion("mac is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacEqualTo(String value) {
+            addCriterion("mac =", value, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacNotEqualTo(String value) {
+            addCriterion("mac <>", value, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacGreaterThan(String value) {
+            addCriterion("mac >", value, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacGreaterThanOrEqualTo(String value) {
+            addCriterion("mac >=", value, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacLessThan(String value) {
+            addCriterion("mac <", value, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacLessThanOrEqualTo(String value) {
+            addCriterion("mac <=", value, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacLike(String value) {
+            addCriterion("mac like", value, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacNotLike(String value) {
+            addCriterion("mac not like", value, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacIn(List<String> values) {
+            addCriterion("mac in", values, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacNotIn(List<String> values) {
+            addCriterion("mac not in", values, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacBetween(String value1, String value2) {
+            addCriterion("mac between", value1, value2, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andMacNotBetween(String value1, String value2) {
+            addCriterion("mac not between", value1, value2, "mac");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateIsNull() {
+            addCriterion("state is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateIsNotNull() {
+            addCriterion("state is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateEqualTo(String value) {
+            addCriterion("state =", value, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateNotEqualTo(String value) {
+            addCriterion("state <>", value, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateGreaterThan(String value) {
+            addCriterion("state >", value, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateGreaterThanOrEqualTo(String value) {
+            addCriterion("state >=", value, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateLessThan(String value) {
+            addCriterion("state <", value, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateLessThanOrEqualTo(String value) {
+            addCriterion("state <=", value, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateLike(String value) {
+            addCriterion("state like", value, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateNotLike(String value) {
+            addCriterion("state not like", value, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateIn(List<String> values) {
+            addCriterion("state in", values, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateNotIn(List<String> values) {
+            addCriterion("state not in", values, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateBetween(String value1, String value2) {
+            addCriterion("state between", value1, value2, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andStateNotBetween(String value1, String value2) {
+            addCriterion("state not between", value1, value2, "state");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdIsNull() {
+            addCriterion("operate_user_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdIsNotNull() {
+            addCriterion("operate_user_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdEqualTo(Integer value) {
+            addCriterion("operate_user_id =", value, "operateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdNotEqualTo(Integer value) {
+            addCriterion("operate_user_id <>", value, "operateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdGreaterThan(Integer value) {
+            addCriterion("operate_user_id >", value, "operateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("operate_user_id >=", value, "operateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdLessThan(Integer value) {
+            addCriterion("operate_user_id <", value, "operateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdLessThanOrEqualTo(Integer value) {
+            addCriterion("operate_user_id <=", value, "operateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdIn(List<Integer> values) {
+            addCriterion("operate_user_id in", values, "operateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdNotIn(List<Integer> values) {
+            addCriterion("operate_user_id not in", values, "operateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdBetween(Integer value1, Integer value2) {
+            addCriterion("operate_user_id between", value1, value2, "operateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOperateUserIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("operate_user_id not between", value1, value2, "operateUserId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeIsNull() {
+            addCriterion("install_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeIsNotNull() {
+            addCriterion("install_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeEqualTo(Date value) {
+            addCriterion("install_time =", value, "installTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeNotEqualTo(Date value) {
+            addCriterion("install_time <>", value, "installTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeGreaterThan(Date value) {
+            addCriterion("install_time >", value, "installTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("install_time >=", value, "installTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeLessThan(Date value) {
+            addCriterion("install_time <", value, "installTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeLessThanOrEqualTo(Date value) {
+            addCriterion("install_time <=", value, "installTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeIn(List<Date> values) {
+            addCriterion("install_time in", values, "installTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeNotIn(List<Date> values) {
+            addCriterion("install_time not in", values, "installTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeBetween(Date value1, Date value2) {
+            addCriterion("install_time between", value1, value2, "installTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andInstallTimeNotBetween(Date value1, Date value2) {
+            addCriterion("install_time not between", value1, value2, "installTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdIsNull() {
+            addCriterion("monitor_point_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdIsNotNull() {
+            addCriterion("monitor_point_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdEqualTo(Integer value) {
+            addCriterion("monitor_point_id =", value, "monitorPointId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdNotEqualTo(Integer value) {
+            addCriterion("monitor_point_id <>", value, "monitorPointId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdGreaterThan(Integer value) {
+            addCriterion("monitor_point_id >", value, "monitorPointId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("monitor_point_id >=", value, "monitorPointId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdLessThan(Integer value) {
+            addCriterion("monitor_point_id <", value, "monitorPointId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdLessThanOrEqualTo(Integer value) {
+            addCriterion("monitor_point_id <=", value, "monitorPointId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdIn(List<Integer> values) {
+            addCriterion("monitor_point_id in", values, "monitorPointId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdNotIn(List<Integer> values) {
+            addCriterion("monitor_point_id not in", values, "monitorPointId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdBetween(Integer value1, Integer value2) {
+            addCriterion("monitor_point_id between", value1, value2, "monitorPointId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMonitorPointIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("monitor_point_id not between", value1, value2, "monitorPointId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdIsNull() {
+            addCriterion("device_version_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdIsNotNull() {
+            addCriterion("device_version_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdEqualTo(Integer value) {
+            addCriterion("device_version_id =", value, "deviceVersionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdNotEqualTo(Integer value) {
+            addCriterion("device_version_id <>", value, "deviceVersionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdGreaterThan(Integer value) {
+            addCriterion("device_version_id >", value, "deviceVersionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("device_version_id >=", value, "deviceVersionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdLessThan(Integer value) {
+            addCriterion("device_version_id <", value, "deviceVersionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdLessThanOrEqualTo(Integer value) {
+            addCriterion("device_version_id <=", value, "deviceVersionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdIn(List<Integer> values) {
+            addCriterion("device_version_id in", values, "deviceVersionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdNotIn(List<Integer> values) {
+            addCriterion("device_version_id not in", values, "deviceVersionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdBetween(Integer value1, Integer value2) {
+            addCriterion("device_version_id between", value1, value2, "deviceVersionId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeviceVersionIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("device_version_id not between", value1, value2, "deviceVersionId");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/Equipment.java b/src/main/java/com/moral/entity/Equipment.java
deleted file mode 100644
index ad6c571..0000000
--- a/src/main/java/com/moral/entity/Equipment.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package com.moral.entity;
-
-import java.util.Date;
-
-public class Equipment {
-
-    private Integer id;
-
-    private String name;
-
-    private String address;
-
-    private Double longitude;
-
-    private Double latitude;
-
-    private String mac;
-
-    private Integer state;
-
-    private Date time;
-
-    private String installer;
-
-    private String repairman;
-
-    private String province;
-
-    private String city;
-
-    private String area;
-
-    private String monitorpoint;
-
-    private String ownerId;
-
-    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;
-    }
-
-    public String getAddress() {
-        return address;
-    }
-
-    public void setAddress(String address) {
-        this.address = address;
-    }
-
-    public Double getLongitude() {
-        return longitude;
-    }
-
-    public void setLongitude(Double longitude) {
-        this.longitude = longitude;
-    }
-
-    public Double getLatitude() {
-        return latitude;
-    }
-
-    public void setLatitude(Double latitude) {
-        this.latitude = latitude;
-    }
-
-    public String getMac() {
-        return mac;
-    }
-
-    public void setMac(String mac) {
-        this.mac = mac;
-    }
-
-    public Integer getState() {
-        return state;
-    }
-
-    public void setState(Integer state) {
-        this.state = state;
-    }
-
-    public Date getTime() {
-        return time;
-    }
-
-    public void setTime(Date time) {
-        this.time = time;
-    }
-
-    public String getInstaller() {
-        return installer;
-    }
-
-    public void setInstaller(String installer) {
-        this.installer = installer;
-    }
-
-    public String getRepairman() {
-        return repairman;
-    }
-
-    public void setRepairman(String repairman) {
-        this.repairman = repairman;
-    }
-
-    public String getProvince() {
-        return province;
-    }
-
-    public void setProvince(String province) {
-        this.province = province;
-    }
-
-    public String getCity() {
-        return city;
-    }
-
-    public void setCity(String city) {
-        this.city = city;
-    }
-
-    public String getArea() {
-        return area;
-    }
-
-    public void setArea(String area) {
-        this.area = area;
-    }
-
-    public String getMonitorpoint() {
-        return monitorpoint;
-    }
-
-    public void setMonitorpoint(String monitorpoint) {
-        this.monitorpoint = monitorpoint;
-    }
-
-    public String getOwnerId() {
-        return ownerId;
-    }
-
-    public void setOwnerId(String ownerId) {
-        this.ownerId = ownerId;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/History.java b/src/main/java/com/moral/entity/History.java
new file mode 100644
index 0000000..c3edf08
--- /dev/null
+++ b/src/main/java/com/moral/entity/History.java
@@ -0,0 +1,45 @@
+package com.moral.entity;
+
+import java.util.Date;
+
+public class History {
+    private String mac;
+
+	private Object value;
+
+	private Date time;
+
+	private Integer version;
+
+	public String getMac() {
+		return mac;
+	}
+
+	public void setMac(String mac) {
+		this.mac = mac;
+	}
+
+	public Object getValue() {
+		return value;
+	}
+
+	public void setValue(Object value) {
+		this.value = value;
+	}
+
+	public Date getTime() {
+		return time;
+	}
+
+	public void setTime(Date time) {
+		this.time = time;
+	}
+
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/HistoryExample.java b/src/main/java/com/moral/entity/HistoryExample.java
new file mode 100644
index 0000000..1e80762
--- /dev/null
+++ b/src/main/java/com/moral/entity/HistoryExample.java
@@ -0,0 +1,443 @@
+package com.moral.entity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class HistoryExample {
+    protected String orderByClause;
+
+	protected boolean distinct;
+
+	protected List<Criteria> oredCriteria;
+
+	public HistoryExample() {
+		oredCriteria = new ArrayList<Criteria>();
+	}
+
+	public void setOrderByClause(String orderByClause) {
+		this.orderByClause = orderByClause;
+	}
+
+	public String getOrderByClause() {
+		return orderByClause;
+	}
+
+	public void setDistinct(boolean distinct) {
+		this.distinct = distinct;
+	}
+
+	public boolean isDistinct() {
+		return distinct;
+	}
+
+	public List<Criteria> getOredCriteria() {
+		return oredCriteria;
+	}
+
+	public void or(Criteria criteria) {
+		oredCriteria.add(criteria);
+	}
+
+	public Criteria or() {
+		Criteria criteria = createCriteriaInternal();
+		oredCriteria.add(criteria);
+		return criteria;
+	}
+
+	public Criteria createCriteria() {
+		Criteria criteria = createCriteriaInternal();
+		if (oredCriteria.size() == 0) {
+			oredCriteria.add(criteria);
+		}
+		return criteria;
+	}
+
+	protected Criteria createCriteriaInternal() {
+		Criteria criteria = new Criteria();
+		return criteria;
+	}
+
+	public void clear() {
+		oredCriteria.clear();
+		orderByClause = null;
+		distinct = false;
+	}
+
+	protected abstract static class GeneratedCriteria {
+		protected List<Criterion> criteria;
+
+		protected GeneratedCriteria() {
+			super();
+			criteria = new ArrayList<Criterion>();
+		}
+
+		public boolean isValid() {
+			return criteria.size() > 0;
+		}
+
+		public List<Criterion> getAllCriteria() {
+			return criteria;
+		}
+
+		public List<Criterion> getCriteria() {
+			return criteria;
+		}
+
+		protected void addCriterion(String condition) {
+			if (condition == null) {
+				throw new RuntimeException("Value for condition cannot be null");
+			}
+			criteria.add(new Criterion(condition));
+		}
+
+		protected void addCriterion(String condition, Object value, String property) {
+			if (value == null) {
+				throw new RuntimeException("Value for " + property + " cannot be null");
+			}
+			criteria.add(new Criterion(condition, value));
+		}
+
+		protected void addCriterion(String condition, Object value1, Object value2, String property) {
+			if (value1 == null || value2 == null) {
+				throw new RuntimeException("Between values for " + property + " cannot be null");
+			}
+			criteria.add(new Criterion(condition, value1, value2));
+		}
+
+		public Criteria andMacIsNull() {
+			addCriterion("mac is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacIsNotNull() {
+			addCriterion("mac is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacEqualTo(String value) {
+			addCriterion("mac =", value, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacNotEqualTo(String value) {
+			addCriterion("mac <>", value, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacGreaterThan(String value) {
+			addCriterion("mac >", value, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacGreaterThanOrEqualTo(String value) {
+			addCriterion("mac >=", value, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacLessThan(String value) {
+			addCriterion("mac <", value, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacLessThanOrEqualTo(String value) {
+			addCriterion("mac <=", value, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacLike(String value) {
+			addCriterion("mac like", value, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacNotLike(String value) {
+			addCriterion("mac not like", value, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacIn(List<String> values) {
+			addCriterion("mac in", values, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacNotIn(List<String> values) {
+			addCriterion("mac not in", values, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacBetween(String value1, String value2) {
+			addCriterion("mac between", value1, value2, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andMacNotBetween(String value1, String value2) {
+			addCriterion("mac not between", value1, value2, "mac");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueIsNull() {
+			addCriterion("value is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueIsNotNull() {
+			addCriterion("value is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueEqualTo(Object value) {
+			addCriterion("value =", value, "value");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueNotEqualTo(Object value) {
+			addCriterion("value <>", value, "value");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueGreaterThan(Object value) {
+			addCriterion("value >", value, "value");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueGreaterThanOrEqualTo(Object value) {
+			addCriterion("value >=", value, "value");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueLessThan(Object value) {
+			addCriterion("value <", value, "value");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueLessThanOrEqualTo(Object value) {
+			addCriterion("value <=", value, "value");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueIn(List<Object> values) {
+			addCriterion("value in", values, "value");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueNotIn(List<Object> values) {
+			addCriterion("value not in", values, "value");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueBetween(Object value1, Object value2) {
+			addCriterion("value between", value1, value2, "value");
+			return (Criteria) this;
+		}
+
+		public Criteria andValueNotBetween(Object value1, Object value2) {
+			addCriterion("value not between", value1, value2, "value");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeIsNull() {
+			addCriterion("time is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeIsNotNull() {
+			addCriterion("time is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeEqualTo(Date value) {
+			addCriterion("time =", value, "time");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeNotEqualTo(Date value) {
+			addCriterion("time <>", value, "time");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeGreaterThan(Date value) {
+			addCriterion("time >", value, "time");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeGreaterThanOrEqualTo(Date value) {
+			addCriterion("time >=", value, "time");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeLessThan(Date value) {
+			addCriterion("time <", value, "time");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeLessThanOrEqualTo(Date value) {
+			addCriterion("time <=", value, "time");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeIn(List<Date> values) {
+			addCriterion("time in", values, "time");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeNotIn(List<Date> values) {
+			addCriterion("time not in", values, "time");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeBetween(Date value1, Date value2) {
+			addCriterion("time between", value1, value2, "time");
+			return (Criteria) this;
+		}
+
+		public Criteria andTimeNotBetween(Date value1, Date value2) {
+			addCriterion("time not between", value1, value2, "time");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionIsNull() {
+			addCriterion("version is null");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionIsNotNull() {
+			addCriterion("version is not null");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionEqualTo(Integer value) {
+			addCriterion("version =", value, "version");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionNotEqualTo(Integer value) {
+			addCriterion("version <>", value, "version");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionGreaterThan(Integer value) {
+			addCriterion("version >", value, "version");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionGreaterThanOrEqualTo(Integer value) {
+			addCriterion("version >=", value, "version");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionLessThan(Integer value) {
+			addCriterion("version <", value, "version");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionLessThanOrEqualTo(Integer value) {
+			addCriterion("version <=", value, "version");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionIn(List<Integer> values) {
+			addCriterion("version in", values, "version");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionNotIn(List<Integer> values) {
+			addCriterion("version not in", values, "version");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionBetween(Integer value1, Integer value2) {
+			addCriterion("version between", value1, value2, "version");
+			return (Criteria) this;
+		}
+
+		public Criteria andVersionNotBetween(Integer value1, Integer value2) {
+			addCriterion("version not between", value1, value2, "version");
+			return (Criteria) this;
+		}
+	}
+
+	public static class Criteria extends GeneratedCriteria {
+		protected Criteria() {
+			super();
+		}
+	}
+
+	public static class Criterion {
+		private String condition;
+		private Object value;
+		private Object secondValue;
+		private boolean noValue;
+		private boolean singleValue;
+		private boolean betweenValue;
+		private boolean listValue;
+		private String typeHandler;
+
+		public String getCondition() {
+			return condition;
+		}
+
+		public Object getValue() {
+			return value;
+		}
+
+		public Object getSecondValue() {
+			return secondValue;
+		}
+
+		public boolean isNoValue() {
+			return noValue;
+		}
+
+		public boolean isSingleValue() {
+			return singleValue;
+		}
+
+		public boolean isBetweenValue() {
+			return betweenValue;
+		}
+
+		public boolean isListValue() {
+			return listValue;
+		}
+
+		public String getTypeHandler() {
+			return typeHandler;
+		}
+
+		protected Criterion(String condition) {
+			super();
+			this.condition = condition;
+			this.typeHandler = null;
+			this.noValue = true;
+		}
+
+		protected Criterion(String condition, Object value, String typeHandler) {
+			super();
+			this.condition = condition;
+			this.value = value;
+			this.typeHandler = typeHandler;
+			if (value instanceof List<?>) {
+				this.listValue = true;
+			} else {
+				this.singleValue = true;
+			}
+		}
+
+		protected Criterion(String condition, Object value) {
+			this(condition, value, null);
+		}
+
+		protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+			super();
+			this.condition = condition;
+			this.value = value;
+			this.secondValue = secondValue;
+			this.typeHandler = typeHandler;
+			this.betweenValue = true;
+		}
+
+		protected Criterion(String condition, Object value, Object secondValue) {
+			this(condition, value, secondValue, null);
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/OperateUser.java b/src/main/java/com/moral/entity/OperateUser.java
new file mode 100644
index 0000000..54f89b4
--- /dev/null
+++ b/src/main/java/com/moral/entity/OperateUser.java
@@ -0,0 +1,115 @@
+package com.moral.entity;
+
+import java.util.Date;
+
+public class OperateUser {
+    private Integer id;
+
+    private String jobNumber;
+
+    private String name;
+
+    private String password;
+
+    private Integer organizationId;
+
+    private String mobile;
+
+    private String email;
+
+    private String weixin;
+
+    private String isDelete;
+
+    private Date createTime;
+
+    private Date expireTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getJobNumber() {
+        return jobNumber;
+    }
+
+    public void setJobNumber(String jobNumber) {
+        this.jobNumber = jobNumber;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public Integer getOrganizationId() {
+        return organizationId;
+    }
+
+    public void setOrganizationId(Integer organizationId) {
+        this.organizationId = organizationId;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getWeixin() {
+        return weixin;
+    }
+
+    public void setWeixin(String weixin) {
+        this.weixin = weixin;
+    }
+
+    public String getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(String isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getExpireTime() {
+        return expireTime;
+    }
+
+    public void setExpireTime(Date expireTime) {
+        this.expireTime = expireTime;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/OperateUserExample.java b/src/main/java/com/moral/entity/OperateUserExample.java
new file mode 100644
index 0000000..3e67a6b
--- /dev/null
+++ b/src/main/java/com/moral/entity/OperateUserExample.java
@@ -0,0 +1,931 @@
+package com.moral.entity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class OperateUserExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public OperateUserExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberIsNull() {
+            addCriterion("job_number is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberIsNotNull() {
+            addCriterion("job_number is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberEqualTo(String value) {
+            addCriterion("job_number =", value, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberNotEqualTo(String value) {
+            addCriterion("job_number <>", value, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberGreaterThan(String value) {
+            addCriterion("job_number >", value, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberGreaterThanOrEqualTo(String value) {
+            addCriterion("job_number >=", value, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberLessThan(String value) {
+            addCriterion("job_number <", value, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberLessThanOrEqualTo(String value) {
+            addCriterion("job_number <=", value, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberLike(String value) {
+            addCriterion("job_number like", value, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberNotLike(String value) {
+            addCriterion("job_number not like", value, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberIn(List<String> values) {
+            addCriterion("job_number in", values, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberNotIn(List<String> values) {
+            addCriterion("job_number not in", values, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberBetween(String value1, String value2) {
+            addCriterion("job_number between", value1, value2, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobNumberNotBetween(String value1, String value2) {
+            addCriterion("job_number not between", value1, value2, "jobNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNull() {
+            addCriterion("name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNotNull() {
+            addCriterion("name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameEqualTo(String value) {
+            addCriterion("name =", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotEqualTo(String value) {
+            addCriterion("name <>", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThan(String value) {
+            addCriterion("name >", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThanOrEqualTo(String value) {
+            addCriterion("name >=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThan(String value) {
+            addCriterion("name <", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThanOrEqualTo(String value) {
+            addCriterion("name <=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLike(String value) {
+            addCriterion("name like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotLike(String value) {
+            addCriterion("name not like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIn(List<String> values) {
+            addCriterion("name in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotIn(List<String> values) {
+            addCriterion("name not in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameBetween(String value1, String value2) {
+            addCriterion("name between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotBetween(String value1, String value2) {
+            addCriterion("name not between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordIsNull() {
+            addCriterion("password is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordIsNotNull() {
+            addCriterion("password is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordEqualTo(String value) {
+            addCriterion("password =", value, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordNotEqualTo(String value) {
+            addCriterion("password <>", value, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordGreaterThan(String value) {
+            addCriterion("password >", value, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordGreaterThanOrEqualTo(String value) {
+            addCriterion("password >=", value, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordLessThan(String value) {
+            addCriterion("password <", value, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordLessThanOrEqualTo(String value) {
+            addCriterion("password <=", value, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordLike(String value) {
+            addCriterion("password like", value, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordNotLike(String value) {
+            addCriterion("password not like", value, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordIn(List<String> values) {
+            addCriterion("password in", values, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordNotIn(List<String> values) {
+            addCriterion("password not in", values, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordBetween(String value1, String value2) {
+            addCriterion("password between", value1, value2, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andPasswordNotBetween(String value1, String value2) {
+            addCriterion("password not between", value1, value2, "password");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdIsNull() {
+            addCriterion("organization_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdIsNotNull() {
+            addCriterion("organization_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdEqualTo(Integer value) {
+            addCriterion("organization_id =", value, "organizationId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdNotEqualTo(Integer value) {
+            addCriterion("organization_id <>", value, "organizationId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdGreaterThan(Integer value) {
+            addCriterion("organization_id >", value, "organizationId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("organization_id >=", value, "organizationId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdLessThan(Integer value) {
+            addCriterion("organization_id <", value, "organizationId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdLessThanOrEqualTo(Integer value) {
+            addCriterion("organization_id <=", value, "organizationId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdIn(List<Integer> values) {
+            addCriterion("organization_id in", values, "organizationId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdNotIn(List<Integer> values) {
+            addCriterion("organization_id not in", values, "organizationId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdBetween(Integer value1, Integer value2) {
+            addCriterion("organization_id between", value1, value2, "organizationId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrganizationIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("organization_id not between", value1, value2, "organizationId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileIsNull() {
+            addCriterion("mobile is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileIsNotNull() {
+            addCriterion("mobile is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileEqualTo(String value) {
+            addCriterion("mobile =", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileNotEqualTo(String value) {
+            addCriterion("mobile <>", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileGreaterThan(String value) {
+            addCriterion("mobile >", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileGreaterThanOrEqualTo(String value) {
+            addCriterion("mobile >=", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileLessThan(String value) {
+            addCriterion("mobile <", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileLessThanOrEqualTo(String value) {
+            addCriterion("mobile <=", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileLike(String value) {
+            addCriterion("mobile like", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileNotLike(String value) {
+            addCriterion("mobile not like", value, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileIn(List<String> values) {
+            addCriterion("mobile in", values, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileNotIn(List<String> values) {
+            addCriterion("mobile not in", values, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileBetween(String value1, String value2) {
+            addCriterion("mobile between", value1, value2, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andMobileNotBetween(String value1, String value2) {
+            addCriterion("mobile not between", value1, value2, "mobile");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailIsNull() {
+            addCriterion("email is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailIsNotNull() {
+            addCriterion("email is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailEqualTo(String value) {
+            addCriterion("email =", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailNotEqualTo(String value) {
+            addCriterion("email <>", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailGreaterThan(String value) {
+            addCriterion("email >", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailGreaterThanOrEqualTo(String value) {
+            addCriterion("email >=", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailLessThan(String value) {
+            addCriterion("email <", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailLessThanOrEqualTo(String value) {
+            addCriterion("email <=", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailLike(String value) {
+            addCriterion("email like", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailNotLike(String value) {
+            addCriterion("email not like", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailIn(List<String> values) {
+            addCriterion("email in", values, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailNotIn(List<String> values) {
+            addCriterion("email not in", values, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailBetween(String value1, String value2) {
+            addCriterion("email between", value1, value2, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailNotBetween(String value1, String value2) {
+            addCriterion("email not between", value1, value2, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinIsNull() {
+            addCriterion("weixin is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinIsNotNull() {
+            addCriterion("weixin is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinEqualTo(String value) {
+            addCriterion("weixin =", value, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinNotEqualTo(String value) {
+            addCriterion("weixin <>", value, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinGreaterThan(String value) {
+            addCriterion("weixin >", value, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinGreaterThanOrEqualTo(String value) {
+            addCriterion("weixin >=", value, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinLessThan(String value) {
+            addCriterion("weixin <", value, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinLessThanOrEqualTo(String value) {
+            addCriterion("weixin <=", value, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinLike(String value) {
+            addCriterion("weixin like", value, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinNotLike(String value) {
+            addCriterion("weixin not like", value, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinIn(List<String> values) {
+            addCriterion("weixin in", values, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinNotIn(List<String> values) {
+            addCriterion("weixin not in", values, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinBetween(String value1, String value2) {
+            addCriterion("weixin between", value1, value2, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andWeixinNotBetween(String value1, String value2) {
+            addCriterion("weixin not between", value1, value2, "weixin");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNull() {
+            addCriterion("is_delete is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNotNull() {
+            addCriterion("is_delete is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteEqualTo(String value) {
+            addCriterion("is_delete =", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotEqualTo(String value) {
+            addCriterion("is_delete <>", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThan(String value) {
+            addCriterion("is_delete >", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThanOrEqualTo(String value) {
+            addCriterion("is_delete >=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThan(String value) {
+            addCriterion("is_delete <", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThanOrEqualTo(String value) {
+            addCriterion("is_delete <=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLike(String value) {
+            addCriterion("is_delete like", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotLike(String value) {
+            addCriterion("is_delete not like", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIn(List<String> values) {
+            addCriterion("is_delete in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotIn(List<String> values) {
+            addCriterion("is_delete not in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteBetween(String value1, String value2) {
+            addCriterion("is_delete between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotBetween(String value1, String value2) {
+            addCriterion("is_delete not between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeIsNull() {
+            addCriterion("expire_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeIsNotNull() {
+            addCriterion("expire_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeEqualTo(Date value) {
+            addCriterion("expire_time =", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeNotEqualTo(Date value) {
+            addCriterion("expire_time <>", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeGreaterThan(Date value) {
+            addCriterion("expire_time >", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("expire_time >=", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeLessThan(Date value) {
+            addCriterion("expire_time <", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeLessThanOrEqualTo(Date value) {
+            addCriterion("expire_time <=", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeIn(List<Date> values) {
+            addCriterion("expire_time in", values, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeNotIn(List<Date> values) {
+            addCriterion("expire_time not in", values, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeBetween(Date value1, Date value2) {
+            addCriterion("expire_time between", value1, value2, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeNotBetween(Date value1, Date value2) {
+            addCriterion("expire_time not between", value1, value2, "expireTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/Organization.java b/src/main/java/com/moral/entity/Organization.java
new file mode 100644
index 0000000..983b41f
--- /dev/null
+++ b/src/main/java/com/moral/entity/Organization.java
@@ -0,0 +1,135 @@
+package com.moral.entity;
+
+import java.util.Date;
+
+public class Organization {
+    private Integer id;
+
+    private String name;
+
+    private Integer rank;
+
+    private Integer provinceCode;
+
+    private Integer cityCode;
+
+    private Integer areaCode;
+
+    private String address;
+
+    private String telephone;
+
+    private String email;
+
+    private String isDelete;
+
+    private Date createTime;
+
+    private Date expireTime;
+
+    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;
+    }
+
+    public Integer getRank() {
+        return rank;
+    }
+
+    public void setRank(Integer rank) {
+        this.rank = rank;
+    }
+
+    public Integer getProvinceCode() {
+        return provinceCode;
+    }
+
+    public void setProvinceCode(Integer provinceCode) {
+        this.provinceCode = provinceCode;
+    }
+
+    public Integer getCityCode() {
+        return cityCode;
+    }
+
+    public void setCityCode(Integer cityCode) {
+        this.cityCode = cityCode;
+    }
+
+    public Integer getAreaCode() {
+        return areaCode;
+    }
+
+    public void setAreaCode(Integer areaCode) {
+        this.areaCode = areaCode;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getTelephone() {
+        return telephone;
+    }
+
+    public void setTelephone(String telephone) {
+        this.telephone = telephone;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(String isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getExpireTime() {
+        return expireTime;
+    }
+
+    public void setExpireTime(Date expireTime) {
+        this.expireTime = expireTime;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/OrganizationExample.java b/src/main/java/com/moral/entity/OrganizationExample.java
new file mode 100644
index 0000000..d18d01b
--- /dev/null
+++ b/src/main/java/com/moral/entity/OrganizationExample.java
@@ -0,0 +1,1041 @@
+package com.moral.entity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class OrganizationExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public OrganizationExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNull() {
+            addCriterion("name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNotNull() {
+            addCriterion("name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameEqualTo(String value) {
+            addCriterion("name =", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotEqualTo(String value) {
+            addCriterion("name <>", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThan(String value) {
+            addCriterion("name >", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThanOrEqualTo(String value) {
+            addCriterion("name >=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThan(String value) {
+            addCriterion("name <", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThanOrEqualTo(String value) {
+            addCriterion("name <=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLike(String value) {
+            addCriterion("name like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotLike(String value) {
+            addCriterion("name not like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIn(List<String> values) {
+            addCriterion("name in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotIn(List<String> values) {
+            addCriterion("name not in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameBetween(String value1, String value2) {
+            addCriterion("name between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotBetween(String value1, String value2) {
+            addCriterion("name not between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankIsNull() {
+            addCriterion("rank is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankIsNotNull() {
+            addCriterion("rank is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankEqualTo(Integer value) {
+            addCriterion("rank =", value, "rank");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankNotEqualTo(Integer value) {
+            addCriterion("rank <>", value, "rank");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankGreaterThan(Integer value) {
+            addCriterion("rank >", value, "rank");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankGreaterThanOrEqualTo(Integer value) {
+            addCriterion("rank >=", value, "rank");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankLessThan(Integer value) {
+            addCriterion("rank <", value, "rank");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankLessThanOrEqualTo(Integer value) {
+            addCriterion("rank <=", value, "rank");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankIn(List<Integer> values) {
+            addCriterion("rank in", values, "rank");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankNotIn(List<Integer> values) {
+            addCriterion("rank not in", values, "rank");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankBetween(Integer value1, Integer value2) {
+            addCriterion("rank between", value1, value2, "rank");
+            return (Criteria) this;
+        }
+
+        public Criteria andRankNotBetween(Integer value1, Integer value2) {
+            addCriterion("rank not between", value1, value2, "rank");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeIsNull() {
+            addCriterion("province_code is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeIsNotNull() {
+            addCriterion("province_code is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeEqualTo(Integer value) {
+            addCriterion("province_code =", value, "provinceCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeNotEqualTo(Integer value) {
+            addCriterion("province_code <>", value, "provinceCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeGreaterThan(Integer value) {
+            addCriterion("province_code >", value, "provinceCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("province_code >=", value, "provinceCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeLessThan(Integer value) {
+            addCriterion("province_code <", value, "provinceCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeLessThanOrEqualTo(Integer value) {
+            addCriterion("province_code <=", value, "provinceCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeIn(List<Integer> values) {
+            addCriterion("province_code in", values, "provinceCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeNotIn(List<Integer> values) {
+            addCriterion("province_code not in", values, "provinceCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeBetween(Integer value1, Integer value2) {
+            addCriterion("province_code between", value1, value2, "provinceCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andProvinceCodeNotBetween(Integer value1, Integer value2) {
+            addCriterion("province_code not between", value1, value2, "provinceCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeIsNull() {
+            addCriterion("city_code is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeIsNotNull() {
+            addCriterion("city_code is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeEqualTo(Integer value) {
+            addCriterion("city_code =", value, "cityCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeNotEqualTo(Integer value) {
+            addCriterion("city_code <>", value, "cityCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeGreaterThan(Integer value) {
+            addCriterion("city_code >", value, "cityCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("city_code >=", value, "cityCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeLessThan(Integer value) {
+            addCriterion("city_code <", value, "cityCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeLessThanOrEqualTo(Integer value) {
+            addCriterion("city_code <=", value, "cityCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeIn(List<Integer> values) {
+            addCriterion("city_code in", values, "cityCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeNotIn(List<Integer> values) {
+            addCriterion("city_code not in", values, "cityCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeBetween(Integer value1, Integer value2) {
+            addCriterion("city_code between", value1, value2, "cityCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCityCodeNotBetween(Integer value1, Integer value2) {
+            addCriterion("city_code not between", value1, value2, "cityCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeIsNull() {
+            addCriterion("area_code is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeIsNotNull() {
+            addCriterion("area_code is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeEqualTo(Integer value) {
+            addCriterion("area_code =", value, "areaCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeNotEqualTo(Integer value) {
+            addCriterion("area_code <>", value, "areaCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeGreaterThan(Integer value) {
+            addCriterion("area_code >", value, "areaCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("area_code >=", value, "areaCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeLessThan(Integer value) {
+            addCriterion("area_code <", value, "areaCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeLessThanOrEqualTo(Integer value) {
+            addCriterion("area_code <=", value, "areaCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeIn(List<Integer> values) {
+            addCriterion("area_code in", values, "areaCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeNotIn(List<Integer> values) {
+            addCriterion("area_code not in", values, "areaCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeBetween(Integer value1, Integer value2) {
+            addCriterion("area_code between", value1, value2, "areaCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andAreaCodeNotBetween(Integer value1, Integer value2) {
+            addCriterion("area_code not between", value1, value2, "areaCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressIsNull() {
+            addCriterion("address is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressIsNotNull() {
+            addCriterion("address is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressEqualTo(String value) {
+            addCriterion("address =", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressNotEqualTo(String value) {
+            addCriterion("address <>", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressGreaterThan(String value) {
+            addCriterion("address >", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressGreaterThanOrEqualTo(String value) {
+            addCriterion("address >=", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressLessThan(String value) {
+            addCriterion("address <", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressLessThanOrEqualTo(String value) {
+            addCriterion("address <=", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressLike(String value) {
+            addCriterion("address like", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressNotLike(String value) {
+            addCriterion("address not like", value, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressIn(List<String> values) {
+            addCriterion("address in", values, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressNotIn(List<String> values) {
+            addCriterion("address not in", values, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressBetween(String value1, String value2) {
+            addCriterion("address between", value1, value2, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andAddressNotBetween(String value1, String value2) {
+            addCriterion("address not between", value1, value2, "address");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneIsNull() {
+            addCriterion("telephone is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneIsNotNull() {
+            addCriterion("telephone is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneEqualTo(String value) {
+            addCriterion("telephone =", value, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneNotEqualTo(String value) {
+            addCriterion("telephone <>", value, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneGreaterThan(String value) {
+            addCriterion("telephone >", value, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneGreaterThanOrEqualTo(String value) {
+            addCriterion("telephone >=", value, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneLessThan(String value) {
+            addCriterion("telephone <", value, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneLessThanOrEqualTo(String value) {
+            addCriterion("telephone <=", value, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneLike(String value) {
+            addCriterion("telephone like", value, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneNotLike(String value) {
+            addCriterion("telephone not like", value, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneIn(List<String> values) {
+            addCriterion("telephone in", values, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneNotIn(List<String> values) {
+            addCriterion("telephone not in", values, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneBetween(String value1, String value2) {
+            addCriterion("telephone between", value1, value2, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andTelephoneNotBetween(String value1, String value2) {
+            addCriterion("telephone not between", value1, value2, "telephone");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailIsNull() {
+            addCriterion("email is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailIsNotNull() {
+            addCriterion("email is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailEqualTo(String value) {
+            addCriterion("email =", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailNotEqualTo(String value) {
+            addCriterion("email <>", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailGreaterThan(String value) {
+            addCriterion("email >", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailGreaterThanOrEqualTo(String value) {
+            addCriterion("email >=", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailLessThan(String value) {
+            addCriterion("email <", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailLessThanOrEqualTo(String value) {
+            addCriterion("email <=", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailLike(String value) {
+            addCriterion("email like", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailNotLike(String value) {
+            addCriterion("email not like", value, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailIn(List<String> values) {
+            addCriterion("email in", values, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailNotIn(List<String> values) {
+            addCriterion("email not in", values, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailBetween(String value1, String value2) {
+            addCriterion("email between", value1, value2, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andEmailNotBetween(String value1, String value2) {
+            addCriterion("email not between", value1, value2, "email");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNull() {
+            addCriterion("is_delete is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNotNull() {
+            addCriterion("is_delete is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteEqualTo(String value) {
+            addCriterion("is_delete =", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotEqualTo(String value) {
+            addCriterion("is_delete <>", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThan(String value) {
+            addCriterion("is_delete >", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThanOrEqualTo(String value) {
+            addCriterion("is_delete >=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThan(String value) {
+            addCriterion("is_delete <", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThanOrEqualTo(String value) {
+            addCriterion("is_delete <=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLike(String value) {
+            addCriterion("is_delete like", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotLike(String value) {
+            addCriterion("is_delete not like", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIn(List<String> values) {
+            addCriterion("is_delete in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotIn(List<String> values) {
+            addCriterion("is_delete not in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteBetween(String value1, String value2) {
+            addCriterion("is_delete between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotBetween(String value1, String value2) {
+            addCriterion("is_delete not between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeIsNull() {
+            addCriterion("expire_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeIsNotNull() {
+            addCriterion("expire_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeEqualTo(Date value) {
+            addCriterion("expire_time =", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeNotEqualTo(Date value) {
+            addCriterion("expire_time <>", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeGreaterThan(Date value) {
+            addCriterion("expire_time >", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("expire_time >=", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeLessThan(Date value) {
+            addCriterion("expire_time <", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeLessThanOrEqualTo(Date value) {
+            addCriterion("expire_time <=", value, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeIn(List<Date> values) {
+            addCriterion("expire_time in", values, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeNotIn(List<Date> values) {
+            addCriterion("expire_time not in", values, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeBetween(Date value1, Date value2) {
+            addCriterion("expire_time between", value1, value2, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpireTimeNotBetween(Date value1, Date value2) {
+            addCriterion("expire_time not between", value1, value2, "expireTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionIsNull() {
+            addCriterion("description is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionIsNotNull() {
+            addCriterion("description is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionEqualTo(String value) {
+            addCriterion("description =", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotEqualTo(String value) {
+            addCriterion("description <>", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionGreaterThan(String value) {
+            addCriterion("description >", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionGreaterThanOrEqualTo(String value) {
+            addCriterion("description >=", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionLessThan(String value) {
+            addCriterion("description <", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionLessThanOrEqualTo(String value) {
+            addCriterion("description <=", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionLike(String value) {
+            addCriterion("description like", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotLike(String value) {
+            addCriterion("description not like", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionIn(List<String> values) {
+            addCriterion("description in", values, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotIn(List<String> values) {
+            addCriterion("description not in", values, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionBetween(String value1, String value2) {
+            addCriterion("description between", value1, value2, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotBetween(String value1, String value2) {
+            addCriterion("description not between", value1, value2, "description");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/OrganizationRelation.java b/src/main/java/com/moral/entity/OrganizationRelation.java
new file mode 100644
index 0000000..bf98d83
--- /dev/null
+++ b/src/main/java/com/moral/entity/OrganizationRelation.java
@@ -0,0 +1,33 @@
+package com.moral.entity;
+
+public class OrganizationRelation {
+    private Integer id;
+
+    private Integer parentId;
+
+    private Integer childId;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Integer parentId) {
+        this.parentId = parentId;
+    }
+
+    public Integer getChildId() {
+        return childId;
+    }
+
+    public void setChildId(Integer childId) {
+        this.childId = childId;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/entity/OrganizationRelationExample.java b/src/main/java/com/moral/entity/OrganizationRelationExample.java
new file mode 100644
index 0000000..6367c29
--- /dev/null
+++ b/src/main/java/com/moral/entity/OrganizationRelationExample.java
@@ -0,0 +1,380 @@
+package com.moral.entity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class OrganizationRelationExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public OrganizationRelationExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdIsNull() {
+            addCriterion("parent_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdIsNotNull() {
+            addCriterion("parent_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdEqualTo(Integer value) {
+            addCriterion("parent_id =", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdNotEqualTo(Integer value) {
+            addCriterion("parent_id <>", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdGreaterThan(Integer value) {
+            addCriterion("parent_id >", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("parent_id >=", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdLessThan(Integer value) {
+            addCriterion("parent_id <", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdLessThanOrEqualTo(Integer value) {
+            addCriterion("parent_id <=", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdIn(List<Integer> values) {
+            addCriterion("parent_id in", values, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdNotIn(List<Integer> values) {
+            addCriterion("parent_id not in", values, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdBetween(Integer value1, Integer value2) {
+            addCriterion("parent_id between", value1, value2, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("parent_id not between", value1, value2, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdIsNull() {
+            addCriterion("child_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdIsNotNull() {
+            addCriterion("child_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdEqualTo(Integer value) {
+            addCriterion("child_id =", value, "childId");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdNotEqualTo(Integer value) {
+            addCriterion("child_id <>", value, "childId");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdGreaterThan(Integer value) {
+            addCriterion("child_id >", value, "childId");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("child_id >=", value, "childId");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdLessThan(Integer value) {
+            addCriterion("child_id <", value, "childId");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdLessThanOrEqualTo(Integer value) {
+            addCriterion("child_id <=", value, "childId");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdIn(List<Integer> values) {
+            addCriterion("child_id in", values, "childId");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdNotIn(List<Integer> values) {
+            addCriterion("child_id not in", values, "childId");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdBetween(Integer value1, Integer value2) {
+            addCriterion("child_id between", value1, value2, "childId");
+            return (Criteria) this;
+        }
+
+        public Criteria andChildIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("child_id not between", value1, value2, "childId");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/AccountMapper.java b/src/main/java/com/moral/mapper/AccountMapper.java
new file mode 100644
index 0000000..05581d5
--- /dev/null
+++ b/src/main/java/com/moral/mapper/AccountMapper.java
@@ -0,0 +1,15 @@
+package com.moral.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.moral.entity.Account;
+import com.moral.entity.AccountExample;
+
+@Mapper
+public interface AccountMapper extends BaseMapper<Account, AccountExample, Integer> {
+
+	List<Map<String, Object>> getRoleNameByAccountId(Integer accountId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/BaseMapper.java b/src/main/java/com/moral/mapper/BaseMapper.java
new file mode 100644
index 0000000..8df23db
--- /dev/null
+++ b/src/main/java/com/moral/mapper/BaseMapper.java
@@ -0,0 +1,31 @@
+package com.moral.mapper;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.springframework.dao.DataAccessException;
+
+public interface BaseMapper<Entity, Example, PK extends Serializable> extends Serializable {
+	int insert(Entity record) throws DataAccessException;
+
+	int insertSelective(Entity record) throws DataAccessException;
+
+	int deleteByPrimaryKey(PK PK) throws DataAccessException;
+
+	int deleteByExample(Example example) throws DataAccessException;
+
+	int updateByPrimaryKeySelective(Entity record) throws DataAccessException;
+
+	int updateByPrimaryKey(Entity record) throws DataAccessException;
+
+	int updateByExampleSelective(@Param("record") Entity record, @Param("example") Example example)throws DataAccessException;
+
+	int updateByExample(@Param("record") Entity record, @Param("example") Example example) throws DataAccessException;
+
+	int countByExample(Example example) throws DataAccessException;
+
+	Entity selectByPrimaryKey(PK pk) throws DataAccessException;
+
+	List<Entity> selectByExample(Example example) throws DataAccessException;
+}
diff --git a/src/main/java/com/moral/mapper/DeviceMapper.java b/src/main/java/com/moral/mapper/DeviceMapper.java
new file mode 100644
index 0000000..34eff69
--- /dev/null
+++ b/src/main/java/com/moral/mapper/DeviceMapper.java
@@ -0,0 +1,14 @@
+package com.moral.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.moral.entity.Device;
+import com.moral.entity.DeviceExample;
+
+@Mapper
+public interface DeviceMapper extends BaseMapper<Device, DeviceExample, Integer> {
+	List<Map<String, Object>> getDeviceStates(Map<String, Object> parameters);
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/HistoryMapper.java b/src/main/java/com/moral/mapper/HistoryMapper.java
new file mode 100644
index 0000000..9fb75fa
--- /dev/null
+++ b/src/main/java/com/moral/mapper/HistoryMapper.java
@@ -0,0 +1,33 @@
+package com.moral.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.moral.entity.History;
+import com.moral.entity.HistoryExample;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface HistoryMapper extends BaseMapper<History, HistoryExample, Integer> {
+
+	int countByExample(HistoryExample example);
+
+	int deleteByExample(HistoryExample example);
+
+	int insert(History record);
+
+	int insertSelective(History record);
+
+	List<History> selectByExample(HistoryExample example);
+
+	int updateByExampleSelective(@Param("record") History record, @Param("example") HistoryExample example);
+
+	int updateByExample(@Param("record") History record, @Param("example") HistoryExample example);
+
+	Map<String, Double> getDayAQIByDevice(Map<String, Object> parameters);
+
+	List<Map<String, Object>> getAverageByAll(Map<String, Object> parameters);
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/OperateUserMapper.java b/src/main/java/com/moral/mapper/OperateUserMapper.java
new file mode 100644
index 0000000..66693eb
--- /dev/null
+++ b/src/main/java/com/moral/mapper/OperateUserMapper.java
@@ -0,0 +1,10 @@
+package com.moral.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.moral.entity.OperateUser;
+import com.moral.entity.OperateUserExample;
+
+@Mapper
+public interface OperateUserMapper extends BaseMapper<OperateUser, OperateUserExample, Integer> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/OrganizationMapper.java b/src/main/java/com/moral/mapper/OrganizationMapper.java
new file mode 100644
index 0000000..a6fbdc1
--- /dev/null
+++ b/src/main/java/com/moral/mapper/OrganizationMapper.java
@@ -0,0 +1,10 @@
+package com.moral.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.moral.entity.Organization;
+import com.moral.entity.OrganizationExample;
+
+@Mapper
+public interface OrganizationMapper extends BaseMapper<Organization, OrganizationExample, Integer> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/OrganizationRelationMapper.java b/src/main/java/com/moral/mapper/OrganizationRelationMapper.java
new file mode 100644
index 0000000..250907b
--- /dev/null
+++ b/src/main/java/com/moral/mapper/OrganizationRelationMapper.java
@@ -0,0 +1,10 @@
+package com.moral.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.moral.entity.OrganizationRelation;
+import com.moral.entity.OrganizationRelationExample;
+
+@Mapper
+public interface OrganizationRelationMapper extends BaseMapper<OrganizationRelation, OrganizationRelationExample, Integer> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/UserMapper.java b/src/main/java/com/moral/mapper/UserMapper.java
index 9070663..4e611a6 100644
--- a/src/main/java/com/moral/mapper/UserMapper.java
+++ b/src/main/java/com/moral/mapper/UserMapper.java
@@ -4,8 +4,8 @@
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Repository;
 
-@Mapper
-@Repository
+//@Mapper
+//@Repository
 public interface UserMapper {
 
     public AuthUser findByUsername(String name);
diff --git a/src/main/java/com/moral/service/AccountService.java b/src/main/java/com/moral/service/AccountService.java
new file mode 100644
index 0000000..20014db
--- /dev/null
+++ b/src/main/java/com/moral/service/AccountService.java
@@ -0,0 +1,18 @@
+package com.moral.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.moral.entity.Account;
+
+public interface AccountService {
+
+	Map<String, Object> screenLogin(Map<String, Object> parameters);
+
+	List<Account> getAccountLists(String account, String password);
+	List<Account> getAccountList(String account);
+
+	void setOrgIdsByAccount(Map<String, Object> parameters);
+
+
+}
diff --git a/src/main/java/com/moral/service/DeviceService.java b/src/main/java/com/moral/service/DeviceService.java
new file mode 100644
index 0000000..9e775bd
--- /dev/null
+++ b/src/main/java/com/moral/service/DeviceService.java
@@ -0,0 +1,8 @@
+package com.moral.service;
+
+import java.util.Map;
+
+public interface DeviceService {
+
+	Map<String, Object> getDeviceStates(Map<String, Object> parameters);
+}
diff --git a/src/main/java/com/moral/service/HistoryService.java b/src/main/java/com/moral/service/HistoryService.java
new file mode 100644
index 0000000..985dd4e
--- /dev/null
+++ b/src/main/java/com/moral/service/HistoryService.java
@@ -0,0 +1,15 @@
+package com.moral.service;
+
+import java.util.Map;
+
+
+public interface HistoryService {
+
+	Map<String, Object> getAverageByAll(Map<String, Object> parameters);
+
+	Map<String, Object> getAverageBySensor(Map<String, Object> parameters);
+
+	Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters);
+
+	Map<String, Object> getMonthAverageBySensor(Map<String, Object> parameters);
+}
diff --git a/src/main/java/com/moral/service/OperateUserService.java b/src/main/java/com/moral/service/OperateUserService.java
new file mode 100644
index 0000000..42b4845
--- /dev/null
+++ b/src/main/java/com/moral/service/OperateUserService.java
@@ -0,0 +1,11 @@
+package com.moral.service;
+
+import java.util.List;
+
+import com.moral.entity.OperateUser;
+
+public interface OperateUserService {
+
+	List<OperateUser> getUserList(String mobile);
+	
+}
diff --git a/src/main/java/com/moral/service/OrganizationService.java b/src/main/java/com/moral/service/OrganizationService.java
new file mode 100644
index 0000000..a835f01
--- /dev/null
+++ b/src/main/java/com/moral/service/OrganizationService.java
@@ -0,0 +1,9 @@
+package com.moral.service;
+
+import java.util.Set;
+
+public interface OrganizationService {
+
+	Set<Integer> getChildOrganizationIds(Integer orgId);
+
+}
diff --git a/src/main/java/com/moral/service/impl/AccountServiceImpl.java b/src/main/java/com/moral/service/impl/AccountServiceImpl.java
new file mode 100644
index 0000000..06808ff
--- /dev/null
+++ b/src/main/java/com/moral/service/impl/AccountServiceImpl.java
@@ -0,0 +1,86 @@
+package com.moral.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import com.moral.entity.Account;
+import com.moral.entity.AccountExample;
+import com.moral.mapper.AccountMapper;
+import com.moral.service.AccountService;
+import com.moral.service.OrganizationService;
+import com.moral.util.BusinessException;
+import com.moral.util.Crypto;
+import com.moral.util.ResourceUtil;
+
+@Service
+public class AccountServiceImpl implements AccountService {
+	@Autowired
+	private AccountMapper accountMapper;
+
+	@Autowired
+	private OrganizationService organizationService;
+
+	@Override
+	public Map<String, Object> screenLogin(Map<String, Object> parameters) {
+		Map<String, Object> result = new HashMap<String, Object>();
+		AccountExample example = new AccountExample();
+		String password = Crypto.md5((String) parameters.get("account"));
+		example.or().andAccountNameEqualTo((String) parameters.get("account")).andPasswordEqualTo(password);
+		List<Account> accounts = accountMapper.selectByExample(example);
+		if (ObjectUtils.isEmpty(accounts) || accounts.size() != 1) {
+			result.put("msg", "���������������������������������");
+		} else {
+			Account account = accounts.get(0);
+			if ("1".equals(account.getIsDelete())) {
+				result.put("msg", "���������������");
+				result.put("accountId", account.getId());
+			} else {
+				result.put("msg","���������������������������������������������");
+			}
+		}
+		return result;
+	}
+
+	@Override
+    public List<Account> getAccountLists(String accountName, String password) {
+		AccountExample example = new AccountExample();
+		example.or().andAccountNameEqualTo(accountName).andPasswordEqualTo(password);
+		return accountMapper.selectByExample(example);
+	}
+
+	@Override
+	public List<Account> getAccountList(String accountName) {
+		AccountExample example = new AccountExample();
+		example.or().andAccountNameEqualTo(accountName);
+		return accountMapper.selectByExample(example);
+	}
+
+	@Override
+	public void setOrgIdsByAccount(Map<String, Object> parameters) {
+		String accountId = (String) parameters.get("accountId");
+		accountId = accountId.replaceFirst("-", "");
+		if (!StringUtils.isNumeric((String) parameters.get("accountId"))) {
+			throw new BusinessException("accountId ������������������");
+		}
+
+		Account account = accountMapper.selectByPrimaryKey((Integer.valueOf(accountId)));
+		if (ObjectUtils.isEmpty(account) || "1".equals(account.getIsDelete())) {
+			throw new BusinessException(accountId + "���������������������");
+		}
+		Integer orgId = account.getOrganizationId();
+		// ���������������������������������������������������������������
+		
+		if (!("-1".equals(orgId) || ResourceUtil.getValue("orgId").equals(orgId))) {
+			Set<Integer> orgIds = organizationService.getChildOrganizationIds(orgId);
+			parameters.put("orgIds", orgIds);
+		}
+	}
+
+}
diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
new file mode 100644
index 0000000..6375262
--- /dev/null
+++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
@@ -0,0 +1,49 @@
+package com.moral.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.moral.mapper.DeviceMapper;
+import com.moral.service.AccountService;
+import com.moral.service.DeviceService;
+
+@Service
+public class DeviceServiceImpl implements DeviceService {
+
+	@Autowired
+	private DeviceMapper deviceMapper;
+
+	@Autowired
+	private AccountService accountService;
+
+	@Override
+	public Map<String, Object> getDeviceStates(Map<String, Object> parameters) {
+		Map<String, Object> result = new HashMap<String, Object>();
+		accountService.setOrgIdsByAccount(parameters);
+		List<Map<String, Object>> list = deviceMapper.getDeviceStates(parameters);
+		Long all = 0L, normal = 0L, abnormal = 0L, stop = 0L;
+		for (Map<String, Object> map : list) {
+			Long count = (Long) map.get("count");
+			all += count;
+			switch ((Integer) map.get("state")) {
+			case 0:
+				normal = count;
+				break;
+			case 4:
+				stop = count;
+				break;
+			default:
+				abnormal += count;
+			}
+		}
+		result.put("all", all);
+		result.put("normal", normal);
+		result.put("abnormal", abnormal);
+		result.put("stop", stop);
+		return result;
+	}
+}
diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
new file mode 100644
index 0000000..2a4d64b
--- /dev/null
+++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
@@ -0,0 +1,167 @@
+package com.moral.service.impl;
+
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang3.time.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.aggregation.AggregationResults;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import com.mongodb.BasicDBObject;
+import com.moral.mapper.HistoryMapper;
+import com.moral.service.AccountService;
+import com.moral.service.HistoryService;
+import com.moral.util.CalculateUtils;
+import com.moral.util.Constants;
+import com.moral.util.ResourceUtil;
+
+@Service
+public class HistoryServiceImpl implements HistoryService {
+
+	@Autowired
+	private AccountService accountService;
+
+	@Autowired
+	private HistoryMapper historyMapper;
+
+	@Autowired
+    private MongoTemplate mongoTemplate;
+
+	@Override
+	public Map<String, Object> getAverageByAll(Map<String, Object> parameters) {
+		Map<String, Object> result = new LinkedHashMap<String, Object>();
+
+		accountService.setOrgIdsByAccount(parameters);
+		parameters.put("macKey", "all");
+		Date date = new Date();
+		// ������������ -10������
+		parameters.put("start", DateUtils.addMinutes(date, -10));
+		// ������������ -5������
+		parameters.put("end", DateUtils.addMinutes(date, -5));
+		List<Map<String, Object>> averageByAll = historyMapper.getAverageByAll(parameters);
+
+		for (Map<String, Object> map : averageByAll) {
+			result.put((String) map.get("mac_key"), map.get("avg"));
+		}
+		return result;
+	}
+
+	@Override
+	public Map<String, Object> getAverageBySensor(Map<String, Object> parameters) {
+		Map<String, Object> result = new LinkedHashMap<String, Object>();
+
+		accountService.setOrgIdsByAccount(parameters);
+		Date date = new Date();
+		// ������������ -1������
+		parameters.put("start", DateUtils.addHours(date, -1));
+		parameters.put("end", date);
+		List<Map<String, Object>> averageByAll = historyMapper.getAverageByAll(parameters);
+
+		for (Map<String, Object> map : averageByAll) {
+			result.put((String) map.get("name"), map.get("avg"));
+		}
+		return result;
+	}
+
+	@Override
+	public Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters) {
+		Map<String, Object> resultMap = new HashMap<String, Object>();
+		Date date = new Date();
+		// ������00:00:00
+		parameters.put("start", DateUtils.truncate(DateUtils.addDays(date, -1), Calendar.DATE));
+		// ������00:00:00
+		parameters.put("end", DateUtils.truncate(date, Calendar.DATE));
+		String[] IAQIValues = ResourceUtil.getArrValue("IAQI");
+		Map<String, Double> average = historyMapper.getDayAQIByDevice(parameters);
+		if (ObjectUtils.isEmpty(average)) {
+			resultMap.put("AQI", Constants.NULL_VALUE);
+		} else {
+			Set<Double> IAQIs = new HashSet<Double>();
+			for (Map.Entry<String, Double> entry : average.entrySet()) {
+				double minMacKey = 0, maxMacKey = 0, minIAQI = 0, maxIAQI = 0;
+				String[] macKeyValues = ResourceUtil.getArrValue(entry.getKey());
+				Double avg = entry.getValue();
+				if (ObjectUtils.isEmpty(avg)) {
+					IAQIs.add(null);
+				} else {
+					int index = -1;
+					for (int i = 0; i < macKeyValues.length; i++) {
+						if (avg <= Double.valueOf(macKeyValues[i])) {
+							if (i == 0) {
+								index = i;
+							} else {
+								index = i - 1;
+							}
+							break;
+						}
+					}
+					if (index == -1) {
+						IAQIs.add(Double.MAX_VALUE);
+					} else {
+						minMacKey = Double.valueOf(macKeyValues[index]);
+						maxMacKey = Double.valueOf(macKeyValues[index + 1]);
+						minIAQI = Double.valueOf(IAQIValues[index]);
+						maxIAQI = Double.valueOf(IAQIValues[index + 1]);
+						Double result = CalculateUtils.calculateIAQI(maxIAQI, minIAQI, maxMacKey, minMacKey, avg);
+						IAQIs.add(result);
+					}
+				}
+			}
+			IAQIs.remove(null);
+			if (ObjectUtils.isEmpty(IAQIs)) {
+				resultMap.put("AQI", Constants.NULL_VALUE);
+			} else {
+				Double AQI = Collections.max(IAQIs);
+				if (AQI == Double.MAX_VALUE) {
+					resultMap.put("AQI", IAQIValues[IAQIValues.length - 1]);
+				} else {
+					resultMap.put("AQI", String.format("%.0f", AQI));
+				}
+			}
+		}
+		return resultMap;
+	}
+
+	@Override
+	public Map<String, Object> getMonthAverageBySensor(Map<String, Object> parameters) {
+		Map<String, Object> result = new HashMap<String, Object>();
+		Date date = new Date();
+		Long end = DateUtils.truncate(date, Calendar.DATE).getTime(),start;
+		// ���������������������������������������
+		if (1 == Calendar.getInstance().get(Calendar.DAY_OF_MONTH)) {
+			// ���������1���00:00:00
+			start = DateUtils.truncate(DateUtils.addMonths(date, -1), Calendar.MONTH).getTime();
+		} else {
+			// ���������1���00:00:00
+			start =  DateUtils.truncate(date, Calendar.MONTH).getTime();
+		}
+		Aggregation aggregation = Aggregation.newAggregation(
+				Aggregation.match(Criteria.where("mac").is(parameters.get("mac"))),
+				Aggregation.match(Criteria.where("time").gte(start)), 
+				Aggregation.match(Criteria.where("time").lt(end)),
+				Aggregation.group("mac").avg((String) parameters.get("macKey")).as("average")
+		);
+		AggregationResults<BasicDBObject> results = mongoTemplate.aggregate(aggregation, "data", BasicDBObject.class);
+		List<BasicDBObject> list = results.getMappedResults();
+		if (ObjectUtils.isEmpty(list)) {
+			result.put("average", Constants.NULL_VALUE);
+		} else {
+			result = list.get(0);
+			result.put("average", String.format("%.2f", result.get("average")));
+		}
+		return result;
+	}
+
+}
diff --git a/src/main/java/com/moral/service/impl/OperateUserServiceImpl.java b/src/main/java/com/moral/service/impl/OperateUserServiceImpl.java
new file mode 100644
index 0000000..b310d97
--- /dev/null
+++ b/src/main/java/com/moral/service/impl/OperateUserServiceImpl.java
@@ -0,0 +1,26 @@
+package com.moral.service.impl;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.moral.entity.OperateUser;
+import com.moral.entity.OperateUserExample;
+import com.moral.mapper.OperateUserMapper;
+import com.moral.service.OperateUserService;
+
+@Service
+public class OperateUserServiceImpl implements OperateUserService {
+
+	@Autowired
+	private OperateUserMapper operateUserMapper;
+
+	@Override
+	public List<OperateUser> getUserList(String mobile) {
+		OperateUserExample example = new OperateUserExample();
+		example.or().andMobileEqualTo(mobile);
+		return operateUserMapper.selectByExample(example);
+	}
+
+}
diff --git a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
new file mode 100644
index 0000000..0ee4d6d
--- /dev/null
+++ b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
@@ -0,0 +1,44 @@
+package com.moral.service.impl;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.moral.entity.Organization;
+import com.moral.entity.OrganizationRelation;
+import com.moral.entity.OrganizationRelationExample;
+import com.moral.mapper.OrganizationMapper;
+import com.moral.mapper.OrganizationRelationMapper;
+import com.moral.service.OrganizationService;
+import com.moral.util.Constants;
+
+@Service
+public class OrganizationServiceImpl implements OrganizationService {
+
+    @Autowired
+    private OrganizationMapper organizationMapper;
+
+    @Autowired
+    private OrganizationRelationMapper organizationRelationMapper;
+
+    @Override
+    public Set<Integer> getChildOrganizationIds(Integer orgId){
+    	Set<Integer> orgIds = new HashSet<Integer>();
+    	orgIds.add(orgId);
+    	OrganizationRelationExample example = new OrganizationRelationExample();
+    	example.or().andParentIdEqualTo(orgId);
+    	Organization organization = organizationMapper.selectByPrimaryKey(orgId);
+    	if (Constants.IS_DELETE_FALSE.equals(organization.getIsDelete())) {
+    		List<OrganizationRelation> organizationRelations = organizationRelationMapper.selectByExample(example);
+    		for (OrganizationRelation organizationRelation : organizationRelations) {
+    			Set<Integer> organizationIds = getChildOrganizationIds(organizationRelation.getParentId());
+    			orgIds.addAll(organizationIds);
+    		}
+		}
+    	return orgIds;
+    }
+
+}
diff --git a/src/main/java/com/moral/service/impl/UserServiceImpl.java b/src/main/java/com/moral/service/impl/UserServiceImpl.java
index e6a32cb..1655652 100644
--- a/src/main/java/com/moral/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/UserServiceImpl.java
@@ -12,7 +12,7 @@
 @Service
 public class UserServiceImpl implements UserService {
 
-    @Autowired
+    //@Autowired
     private UserMapper userMapper;
 
     @Override
diff --git a/src/main/java/com/moral/util/BusinessException.java b/src/main/java/com/moral/util/BusinessException.java
new file mode 100644
index 0000000..68cc526
--- /dev/null
+++ b/src/main/java/com/moral/util/BusinessException.java
@@ -0,0 +1,14 @@
+package com.moral.util;
+
+public class BusinessException extends RuntimeException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public BusinessException(String msg) {
+		super(msg);
+	}
+
+}
diff --git a/src/main/java/com/moral/util/CalculateUtils.java b/src/main/java/com/moral/util/CalculateUtils.java
new file mode 100644
index 0000000..71743a1
--- /dev/null
+++ b/src/main/java/com/moral/util/CalculateUtils.java
@@ -0,0 +1,9 @@
+package com.moral.util;
+
+public class CalculateUtils {
+
+	public static double calculateIAQI(double maxIAQI, double minIAQI, double maxMacKey, double minMacKey, double avg) {
+		return (maxIAQI - minIAQI) * (avg - minMacKey) / (maxMacKey - minMacKey) + minIAQI;
+	}
+
+}
diff --git a/src/main/java/com/moral/util/Constants.java b/src/main/java/com/moral/util/Constants.java
new file mode 100644
index 0000000..b693490
--- /dev/null
+++ b/src/main/java/com/moral/util/Constants.java
@@ -0,0 +1,18 @@
+package com.moral.util;
+
+// TODO: Auto-generated Javadoc
+/**
+ * ������������.
+ */
+public class Constants {
+	
+	/** The Constant IS_DELETE_TRUE. */
+	public static final String IS_DELETE_TRUE = "1";
+	
+	/** The Constant IS_DELETE_FALSE. */
+	public static final String IS_DELETE_FALSE = "0";
+	
+	/** The Constant NULL_VALUE. */
+	public static final String NULL_VALUE = "N/V";
+}
+
diff --git a/src/main/java/com/moral/util/Crypto.java b/src/main/java/com/moral/util/Crypto.java
new file mode 100644
index 0000000..09f827c
--- /dev/null
+++ b/src/main/java/com/moral/util/Crypto.java
@@ -0,0 +1,32 @@
+package com.moral.util;
+
+import sun.misc.BASE64Encoder;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class Crypto {
+
+    /**������MD5������������
+     * @param str  ���������������������
+     * @return  ���������������������
+     * @throws NoSuchAlgorithmException  ���������������������������������������
+     * @throws UnsupportedEncodingException
+     */
+    public static String md5(String str) {
+        String newstr = "";
+        try {
+            //������������������
+            MessageDigest md5 = MessageDigest.getInstance("MD5");
+            BASE64Encoder base64en = new BASE64Encoder();
+            //���������������������
+            newstr = base64en.encode(md5.digest(str.getBytes("utf-8")));
+        } catch (NoSuchAlgorithmException e1) {
+            e1.printStackTrace();
+        } catch (UnsupportedEncodingException e2) {
+            e2.printStackTrace();
+        }
+        return newstr;
+    }
+}
diff --git a/src/main/java/com/moral/util/RedisUtil.java b/src/main/java/com/moral/util/RedisUtil.java
new file mode 100644
index 0000000..3092485
--- /dev/null
+++ b/src/main/java/com/moral/util/RedisUtil.java
@@ -0,0 +1,26 @@
+package com.moral.util;
+
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+import org.springframework.data.redis.core.RedisTemplate;
+
+public class RedisUtil {
+
+    public static boolean hasKey(RedisTemplate<String, String> redis, String key) {
+        return redis.hasKey(key);
+    }
+    public static void set(RedisTemplate<String, String> redis, String key, String value) {
+        redis.opsForValue().set(key, value);
+    }
+    public static String get(RedisTemplate<String, String> redis, String key) {
+        return redis.opsForValue().get(key);
+    }
+    public static void set(RedisTemplate<String, String> redis, String key, String value,
+    		int timeout,TimeUnit unit) {
+        redis.opsForValue().set(key, value,timeout, unit);
+    }
+    public static Set<String> keys(RedisTemplate<String, String> redis,String pattern) {
+    	return redis.keys(pattern);
+    }
+}
diff --git a/src/main/java/com/moral/util/ResourceUtil.java b/src/main/java/com/moral/util/ResourceUtil.java
new file mode 100644
index 0000000..14e640e
--- /dev/null
+++ b/src/main/java/com/moral/util/ResourceUtil.java
@@ -0,0 +1,20 @@
+package com.moral.util;
+
+import java.util.ResourceBundle;
+
+/**
+ * Created by a on 2017/7/4.
+ */
+public class ResourceUtil {
+    private static final ResourceBundle bundle = ResourceBundle.getBundle("system/sysConfig");
+
+    public static String getValue(String key){
+		return bundle.getString(key);
+	}
+
+	public static String[] getArrValue(String key){
+		String string = bundle.getString(key);
+		return string.split(",");
+	}
+
+}
diff --git a/src/main/java/com/moral/util/WebUtils.java b/src/main/java/com/moral/util/WebUtils.java
new file mode 100644
index 0000000..ce1d302
--- /dev/null
+++ b/src/main/java/com/moral/util/WebUtils.java
@@ -0,0 +1,40 @@
+package com.moral.util;
+
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.TreeMap;
+
+import javax.servlet.ServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.Assert;
+
+public class WebUtils extends org.springframework.web.util.WebUtils {
+	public static Map<String, Object> getParametersStartingWith(ServletRequest request, String prefix) {
+		Assert.notNull(request, "Request must not be null");
+		Enumeration<String> paramNames = request.getParameterNames();
+		Map<String, Object> params = new TreeMap<String, Object>();
+		if (prefix == null) {
+			prefix = "";
+		}
+		while (paramNames != null && paramNames.hasMoreElements()) {
+			String paramName = paramNames.nextElement();
+			if ("".equals(prefix) || paramName.startsWith(prefix)) {
+				String unprefixed = paramName.substring(prefix.length());
+				String[] values = request.getParameterValues(paramName);
+				if (values == null || values.length == 0 ) {
+					// Do nothing, no values found at all.
+				}
+				else if (values.length > 1) {
+					params.put(unprefixed, values);
+				}
+				else {
+					if (StringUtils.isNotBlank(values[0])) {
+						params.put(unprefixed, values[0]);
+					}
+				}
+			}
+		}
+		return params;
+	}
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 3b5c61a..6eaebf7 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -6,7 +6,7 @@
 
 spring:
   datasource:
-    url: jdbc:mysql://101.37.22.173:3306/monitor?characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
+    url: jdbc:mysql://47.96.19.115:3306/monitor_db?characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
     username: root
     password: xOlx8z9L7Pt6y9YI
     #driver-class-name: com.mysql.cj.jdbc.Driver
@@ -59,7 +59,7 @@
 
   data:
     mongodb:
-      uri: mongodb://101.37.22.173:27017/monitor
+      uri: mongodb://47.96.26.152:27017/monitor
 
 mybatis:
   mapper-locations: classpath*:/mapper/*Mapper.xml
diff --git a/src/main/resources/mapper/AccountMapper.xml b/src/main/resources/mapper/AccountMapper.xml
new file mode 100644
index 0000000..6279878
--- /dev/null
+++ b/src/main/resources/mapper/AccountMapper.xml
@@ -0,0 +1,302 @@
+<?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.AccountMapper">
+  <resultMap id="BaseResultMap" type="com.moral.entity.Account">
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="account_name" jdbcType="VARCHAR" property="accountName" />
+    <result column="password" jdbcType="VARCHAR" property="password" />
+    <result column="organization_id" jdbcType="INTEGER" property="organizationId" />
+    <result column="email" jdbcType="VARCHAR" property="email" />
+    <result column="mobile" jdbcType="VARCHAR" property="mobile" />
+    <result column="weixin" jdbcType="VARCHAR" property="weixin" />
+    <result column="is_delete" jdbcType="CHAR" property="isDelete" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="expire_time" jdbcType="TIMESTAMP" property="expireTime" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, account_name, password, organization_id, email, mobile, weixin, is_delete, create_time, 
+    expire_time
+  </sql>
+  <select id="selectByExample" parameterType="com.moral.entity.AccountExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from account
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from account
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    delete from account
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.moral.entity.AccountExample">
+    delete from account
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.moral.entity.Account">
+    insert into account (id, account_name, password, 
+      organization_id, email, mobile, 
+      weixin, is_delete, create_time, 
+      expire_time)
+    values (#{id,jdbcType=INTEGER}, #{accountName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
+      #{organizationId,jdbcType=INTEGER}, #{email,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, 
+      #{weixin,jdbcType=VARCHAR}, #{isDelete,jdbcType=CHAR}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{expireTime,jdbcType=TIMESTAMP})
+  </insert>
+  <insert id="insertSelective" parameterType="com.moral.entity.Account">
+    insert into account
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="accountName != null">
+        account_name,
+      </if>
+      <if test="password != null">
+        password,
+      </if>
+      <if test="organizationId != null">
+        organization_id,
+      </if>
+      <if test="email != null">
+        email,
+      </if>
+      <if test="mobile != null">
+        mobile,
+      </if>
+      <if test="weixin != null">
+        weixin,
+      </if>
+      <if test="isDelete != null">
+        is_delete,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="expireTime != null">
+        expire_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=INTEGER},
+      </if>
+      <if test="accountName != null">
+        #{accountName,jdbcType=VARCHAR},
+      </if>
+      <if test="password != null">
+        #{password,jdbcType=VARCHAR},
+      </if>
+      <if test="organizationId != null">
+        #{organizationId,jdbcType=INTEGER},
+      </if>
+      <if test="email != null">
+        #{email,jdbcType=VARCHAR},
+      </if>
+      <if test="mobile != null">
+        #{mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="weixin != null">
+        #{weixin,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null">
+        #{isDelete,jdbcType=CHAR},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="expireTime != null">
+        #{expireTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.moral.entity.AccountExample" resultType="java.lang.Integer">
+    select count(*) from account
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update account
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=INTEGER},
+      </if>
+      <if test="record.accountName != null">
+        account_name = #{record.accountName,jdbcType=VARCHAR},
+      </if>
+      <if test="record.password != null">
+        password = #{record.password,jdbcType=VARCHAR},
+      </if>
+      <if test="record.organizationId != null">
+        organization_id = #{record.organizationId,jdbcType=INTEGER},
+      </if>
+      <if test="record.email != null">
+        email = #{record.email,jdbcType=VARCHAR},
+      </if>
+      <if test="record.mobile != null">
+        mobile = #{record.mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="record.weixin != null">
+        weixin = #{record.weixin,jdbcType=VARCHAR},
+      </if>
+      <if test="record.isDelete != null">
+        is_delete = #{record.isDelete,jdbcType=CHAR},
+      </if>
+      <if test="record.createTime != null">
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.expireTime != null">
+        expire_time = #{record.expireTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update account
+    set id = #{record.id,jdbcType=INTEGER},
+      account_name = #{record.accountName,jdbcType=VARCHAR},
+      password = #{record.password,jdbcType=VARCHAR},
+      organization_id = #{record.organizationId,jdbcType=INTEGER},
+      email = #{record.email,jdbcType=VARCHAR},
+      mobile = #{record.mobile,jdbcType=VARCHAR},
+      weixin = #{record.weixin,jdbcType=VARCHAR},
+      is_delete = #{record.isDelete,jdbcType=CHAR},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      expire_time = #{record.expireTime,jdbcType=TIMESTAMP}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.moral.entity.Account">
+    update account
+    <set>
+      <if test="accountName != null">
+        account_name = #{accountName,jdbcType=VARCHAR},
+      </if>
+      <if test="password != null">
+        password = #{password,jdbcType=VARCHAR},
+      </if>
+      <if test="organizationId != null">
+        organization_id = #{organizationId,jdbcType=INTEGER},
+      </if>
+      <if test="email != null">
+        email = #{email,jdbcType=VARCHAR},
+      </if>
+      <if test="mobile != null">
+        mobile = #{mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="weixin != null">
+        weixin = #{weixin,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null">
+        is_delete = #{isDelete,jdbcType=CHAR},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="expireTime != null">
+        expire_time = #{expireTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.moral.entity.Account">
+    update account
+    set account_name = #{accountName,jdbcType=VARCHAR},
+      password = #{password,jdbcType=VARCHAR},
+      organization_id = #{organizationId,jdbcType=INTEGER},
+      email = #{email,jdbcType=VARCHAR},
+      mobile = #{mobile,jdbcType=VARCHAR},
+      weixin = #{weixin,jdbcType=VARCHAR},
+      is_delete = #{isDelete,jdbcType=CHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      expire_time = #{expireTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+
+	<select id="getRoleNameByAccountId" resultType="map">
+		SELECT
+			r.role_name
+		FROM
+			role r,
+			account_role ar
+		WHERE
+			ar.role_id = r.id
+		AND ar.account_id = #{accountId}
+	</select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml
new file mode 100644
index 0000000..846d2b7
--- /dev/null
+++ b/src/main/resources/mapper/DeviceMapper.xml
@@ -0,0 +1,344 @@
+<?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.DeviceMapper" >
+  <resultMap id="BaseResultMap" type="com.moral.entity.Device" >
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="address" property="address" jdbcType="VARCHAR" />
+    <result column="longitude" property="longitude" jdbcType="REAL" />
+    <result column="latitude" property="latitude" jdbcType="REAL" />
+    <result column="mac" property="mac" jdbcType="VARCHAR" />
+    <result column="state" property="state" jdbcType="CHAR" />
+    <result column="operate_user_id" property="operateUserId" jdbcType="INTEGER" />
+    <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
+    <result column="install_time" property="installTime" jdbcType="TIMESTAMP" />
+    <result column="monitor_point_id" property="monitorPointId" jdbcType="INTEGER" />
+    <result column="device_version_id" property="deviceVersionId" jdbcType="INTEGER" />
+  </resultMap>
+  <sql id="Example_Where_Clause" >
+    <where >
+      <foreach collection="oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause" >
+    <where >
+      <foreach collection="example.oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List" >
+    id, name, address, longitude, latitude, mac, state, operate_user_id, create_time, 
+    install_time, monitor_point_id, device_version_id
+  </sql>
+  <select id="selectByExample" resultMap="BaseResultMap" parameterType="com.moral.entity.DeviceExample" >
+    select
+    <if test="distinct" >
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from device
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null" >
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
+    select 
+    <include refid="Base_Column_List" />
+    from device
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
+    delete from device
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.moral.entity.DeviceExample" >
+    delete from device
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.moral.entity.Device" >
+    insert into device (id, name, address, 
+      longitude, latitude, mac, 
+      state, operate_user_id, create_time, 
+      install_time, monitor_point_id, device_version_id
+      )
+    values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}, 
+      #{longitude,jdbcType=REAL}, #{latitude,jdbcType=REAL}, #{mac,jdbcType=VARCHAR}, 
+      #{state,jdbcType=CHAR}, #{operateUserId,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{installTime,jdbcType=TIMESTAMP}, #{monitorPointId,jdbcType=INTEGER}, #{deviceVersionId,jdbcType=INTEGER}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.moral.entity.Device" >
+    insert into device
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="address != null" >
+        address,
+      </if>
+      <if test="longitude != null" >
+        longitude,
+      </if>
+      <if test="latitude != null" >
+        latitude,
+      </if>
+      <if test="mac != null" >
+        mac,
+      </if>
+      <if test="state != null" >
+        state,
+      </if>
+      <if test="operateUserId != null" >
+        operate_user_id,
+      </if>
+      <if test="createTime != null" >
+        create_time,
+      </if>
+      <if test="installTime != null" >
+        install_time,
+      </if>
+      <if test="monitorPointId != null" >
+        monitor_point_id,
+      </if>
+      <if test="deviceVersionId != null" >
+        device_version_id,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=INTEGER},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="address != null" >
+        #{address,jdbcType=VARCHAR},
+      </if>
+      <if test="longitude != null" >
+        #{longitude,jdbcType=REAL},
+      </if>
+      <if test="latitude != null" >
+        #{latitude,jdbcType=REAL},
+      </if>
+      <if test="mac != null" >
+        #{mac,jdbcType=VARCHAR},
+      </if>
+      <if test="state != null" >
+        #{state,jdbcType=CHAR},
+      </if>
+      <if test="operateUserId != null" >
+        #{operateUserId,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null" >
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="installTime != null" >
+        #{installTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="monitorPointId != null" >
+        #{monitorPointId,jdbcType=INTEGER},
+      </if>
+      <if test="deviceVersionId != null" >
+        #{deviceVersionId,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.moral.entity.DeviceExample" resultType="java.lang.Integer" >
+    select count(*) from device
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map" >
+    update device
+    <set >
+      <if test="record.id != null" >
+        id = #{record.id,jdbcType=INTEGER},
+      </if>
+      <if test="record.name != null" >
+        name = #{record.name,jdbcType=VARCHAR},
+      </if>
+      <if test="record.address != null" >
+        address = #{record.address,jdbcType=VARCHAR},
+      </if>
+      <if test="record.longitude != null" >
+        longitude = #{record.longitude,jdbcType=REAL},
+      </if>
+      <if test="record.latitude != null" >
+        latitude = #{record.latitude,jdbcType=REAL},
+      </if>
+      <if test="record.mac != null" >
+        mac = #{record.mac,jdbcType=VARCHAR},
+      </if>
+      <if test="record.state != null" >
+        state = #{record.state,jdbcType=CHAR},
+      </if>
+      <if test="record.operateUserId != null" >
+        operate_user_id = #{record.operateUserId,jdbcType=INTEGER},
+      </if>
+      <if test="record.createTime != null" >
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.installTime != null" >
+        install_time = #{record.installTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.monitorPointId != null" >
+        monitor_point_id = #{record.monitorPointId,jdbcType=INTEGER},
+      </if>
+      <if test="record.deviceVersionId != null" >
+        device_version_id = #{record.deviceVersionId,jdbcType=INTEGER},
+      </if>
+    </set>
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map" >
+    update device
+    set id = #{record.id,jdbcType=INTEGER},
+      name = #{record.name,jdbcType=VARCHAR},
+      address = #{record.address,jdbcType=VARCHAR},
+      longitude = #{record.longitude,jdbcType=REAL},
+      latitude = #{record.latitude,jdbcType=REAL},
+      mac = #{record.mac,jdbcType=VARCHAR},
+      state = #{record.state,jdbcType=CHAR},
+      operate_user_id = #{record.operateUserId,jdbcType=INTEGER},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      install_time = #{record.installTime,jdbcType=TIMESTAMP},
+      monitor_point_id = #{record.monitorPointId,jdbcType=INTEGER},
+      device_version_id = #{record.deviceVersionId,jdbcType=INTEGER}
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.moral.entity.Device" >
+    update device
+    <set >
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="address != null" >
+        address = #{address,jdbcType=VARCHAR},
+      </if>
+      <if test="longitude != null" >
+        longitude = #{longitude,jdbcType=REAL},
+      </if>
+      <if test="latitude != null" >
+        latitude = #{latitude,jdbcType=REAL},
+      </if>
+      <if test="mac != null" >
+        mac = #{mac,jdbcType=VARCHAR},
+      </if>
+      <if test="state != null" >
+        state = #{state,jdbcType=CHAR},
+      </if>
+      <if test="operateUserId != null" >
+        operate_user_id = #{operateUserId,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null" >
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="installTime != null" >
+        install_time = #{installTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="monitorPointId != null" >
+        monitor_point_id = #{monitorPointId,jdbcType=INTEGER},
+      </if>
+      <if test="deviceVersionId != null" >
+        device_version_id = #{deviceVersionId,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.moral.entity.Device" >
+    update device
+    set name = #{name,jdbcType=VARCHAR},
+      address = #{address,jdbcType=VARCHAR},
+      longitude = #{longitude,jdbcType=REAL},
+      latitude = #{latitude,jdbcType=REAL},
+      mac = #{mac,jdbcType=VARCHAR},
+      state = #{state,jdbcType=CHAR},
+      operate_user_id = #{operateUserId,jdbcType=INTEGER},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      install_time = #{installTime,jdbcType=TIMESTAMP},
+      monitor_point_id = #{monitorPointId,jdbcType=INTEGER},
+      device_version_id = #{deviceVersionId,jdbcType=INTEGER}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  
+  	<select id="getDeviceStates" resultType="map">
+		SELECT
+			COUNT( d.state ) count,
+			d.state 
+		FROM
+			device d
+		<if test="orgIds != null and orgIds.size > 0">
+			,monitor_point mp,
+			monitor_point_organization mpo 
+		WHERE
+			d.monitor_point_id = mp.id 
+			AND mp.id = mpo.monitor_point_id 
+			AND mpo.organization_id IN
+			<foreach collection="orgIds" item="listItem" open="(" separator="," close=")" >
+				#{listItem}
+			</foreach>
+		</if>
+		GROUP BY d.state
+	</select>
+  
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/HistoryMapper.xml b/src/main/resources/mapper/HistoryMapper.xml
new file mode 100644
index 0000000..5f805da
--- /dev/null
+++ b/src/main/resources/mapper/HistoryMapper.xml
@@ -0,0 +1,376 @@
+<?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.HistoryMapper">
+  <resultMap id="BaseResultMap" type="com.moral.entity.History">
+    <result column="mac" jdbcType="VARCHAR" property="mac" />
+    <result column="value" jdbcType="OTHER" property="value" />
+    <result column="time" jdbcType="TIMESTAMP" property="time" />
+    <result column="version" jdbcType="INTEGER" property="version" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    mac, value, time, version
+  </sql>
+  <select id="selectByExample" parameterType="com.moral.entity.HistoryExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from history
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <delete id="deleteByExample" parameterType="com.moral.entity.HistoryExample">
+    delete from history
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.moral.entity.History">
+    insert into history (mac, value, time, 
+      version)
+    values (#{mac,jdbcType=VARCHAR}, #{value,jdbcType=OTHER}, #{time,jdbcType=TIMESTAMP}, 
+      #{version,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.moral.entity.History">
+    insert into history
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="mac != null">
+        mac,
+      </if>
+      <if test="value != null">
+        value,
+      </if>
+      <if test="time != null">
+        time,
+      </if>
+      <if test="version != null">
+        version,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="mac != null">
+        #{mac,jdbcType=VARCHAR},
+      </if>
+      <if test="value != null">
+        #{value,jdbcType=OTHER},
+      </if>
+      <if test="time != null">
+        #{time,jdbcType=TIMESTAMP},
+      </if>
+      <if test="version != null">
+        #{version,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.moral.entity.HistoryExample" resultType="java.lang.Integer">
+    select count(*) from history
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update history
+    <set>
+      <if test="record.mac != null">
+        mac = #{record.mac,jdbcType=VARCHAR},
+      </if>
+      <if test="record.value != null">
+        value = #{record.value,jdbcType=OTHER},
+      </if>
+      <if test="record.time != null">
+        time = #{record.time,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.version != null">
+        version = #{record.version,jdbcType=INTEGER},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update history
+    set mac = #{record.mac,jdbcType=VARCHAR},
+      value = #{record.value,jdbcType=OTHER},
+      time = #{record.time,jdbcType=TIMESTAMP},
+      version = #{record.version,jdbcType=INTEGER}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <resultMap id="BaseResultMap" type="com.moral.entity.History">
+    <result column="device_mac" jdbcType="VARCHAR" property="deviceMac" />
+    <result column="value" jdbcType="OTHER" property="value" />
+    <result column="time" jdbcType="TIMESTAMP" property="time" />
+    <result column="version" jdbcType="VARCHAR" property="version" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    device_mac, value, time, version
+  </sql>
+  <select id="selectByExample" parameterType="com.moral.entity.HistoryExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from history
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <delete id="deleteByExample" parameterType="com.moral.entity.HistoryExample">
+    delete from history
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.moral.entity.History">
+    insert into history (device_mac, value, time, 
+      version)
+    values (#{deviceMac,jdbcType=VARCHAR}, #{value,jdbcType=OTHER}, #{time,jdbcType=TIMESTAMP}, 
+      #{version,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.moral.entity.History">
+    insert into history
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="deviceMac != null">
+        device_mac,
+      </if>
+      <if test="value != null">
+        value,
+      </if>
+      <if test="time != null">
+        time,
+      </if>
+      <if test="version != null">
+        version,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="deviceMac != null">
+        #{deviceMac,jdbcType=VARCHAR},
+      </if>
+      <if test="value != null">
+        #{value,jdbcType=OTHER},
+      </if>
+      <if test="time != null">
+        #{time,jdbcType=TIMESTAMP},
+      </if>
+      <if test="version != null">
+        #{version,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.moral.entity.HistoryExample" resultType="java.lang.Integer">
+    select count(*) from history
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update history
+    <set>
+      <if test="record.deviceMac != null">
+        device_mac = #{record.deviceMac,jdbcType=VARCHAR},
+      </if>
+      <if test="record.value != null">
+        value = #{record.value,jdbcType=OTHER},
+      </if>
+      <if test="record.time != null">
+        time = #{record.time,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.version != null">
+        version = #{record.version,jdbcType=VARCHAR},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update history
+    set device_mac = #{record.deviceMac,jdbcType=VARCHAR},
+      value = #{record.value,jdbcType=OTHER},
+      time = #{record.time,jdbcType=TIMESTAMP},
+      version = #{record.version,jdbcType=VARCHAR}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+
+  <select id="getDayAQIBySensor" resultType="map">
+		SELECT
+			AVG(value -&gt; '$.e1') e1,
+			AVG(value -&gt; '$.e2') e2,
+			AVG(value -&gt; '$.e10') e10,
+			AVG(value -&gt; '$.e11') e11,
+			AVG(value -&gt; '$.e15') e15,
+			AVG(value -&gt; '$.e16') e16
+		FROM
+			history
+		WHERE
+			device_mac = #{mac}
+		AND time &gt; #{start}
+		AND time &lt; #{end}
+  </select>
+
+	<select id="getAverageByAll" resultType="map">
+		SELECT
+			<if test="macKey != null and macKey != 'all'">
+				e.name,
+			</if>	
+			<if test="macKey == 'all'">
+				h.mac_key,
+			</if>	
+			AVG(h.mac_value) avg
+		FROM
+			history h,
+			monitorpoint m,
+			equipment e
+		WHERE
+			m.areacode = #{areaCode}
+		AND m.id = epoint
+		AND e.mac = h.mac
+		AND h.time &gt; #{start}
+		AND h.time &lt; #{end}
+		<if test="orgIds != null and orgIds.size &gt; 0">
+			<!-- JOIN org_equ oe ON e.id = oe.equid -->
+			AND e.owner_id IN
+			<foreach close=")" collection="orgIds" item="listItem" open="(" separator=",">
+				#{listItem}
+			</foreach>
+		</if>
+		<if test="macKey != null and macKey != 'all'">
+			AND	h.mac_key = #{macKey}
+			GROUP BY e.id
+			ORDER BY avg
+		</if>	
+		<if test="macKey == 'all'">
+			GROUP BY h.mac_key
+		</if>	
+	</select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/OperateUserMapper.xml b/src/main/resources/mapper/OperateUserMapper.xml
new file mode 100644
index 0000000..b9dc0e9
--- /dev/null
+++ b/src/main/resources/mapper/OperateUserMapper.xml
@@ -0,0 +1,306 @@
+<?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.OperateUserMapper" >
+  <resultMap id="BaseResultMap" type="com.moral.entity.OperateUser" >
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="job_number" property="jobNumber" jdbcType="VARCHAR" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="password" property="password" jdbcType="VARCHAR" />
+    <result column="organization_id" property="organizationId" jdbcType="INTEGER" />
+    <result column="mobile" property="mobile" jdbcType="VARCHAR" />
+    <result column="email" property="email" jdbcType="VARCHAR" />
+    <result column="weixin" property="weixin" jdbcType="VARCHAR" />
+    <result column="is_delete" property="isDelete" jdbcType="CHAR" />
+    <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
+    <result column="expire_time" property="expireTime" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <sql id="Example_Where_Clause" >
+    <where >
+      <foreach collection="oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause" >
+    <where >
+      <foreach collection="example.oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List" >
+    id, job_number, name, password, organization_id, mobile, email, weixin, is_delete, 
+    create_time, expire_time
+  </sql>
+  <select id="selectByExample" resultMap="BaseResultMap" parameterType="com.moral.entity.OperateUserExample" >
+    select
+    <if test="distinct" >
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from operate_user
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null" >
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
+    select 
+    <include refid="Base_Column_List" />
+    from operate_user
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
+    delete from operate_user
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.moral.entity.OperateUserExample" >
+    delete from operate_user
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.moral.entity.OperateUser" >
+    insert into operate_user (id, job_number, name, 
+      password, organization_id, mobile, 
+      email, weixin, is_delete, 
+      create_time, expire_time)
+    values (#{id,jdbcType=INTEGER}, #{jobNumber,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, 
+      #{password,jdbcType=VARCHAR}, #{organizationId,jdbcType=INTEGER}, #{mobile,jdbcType=VARCHAR}, 
+      #{email,jdbcType=VARCHAR}, #{weixin,jdbcType=VARCHAR}, #{isDelete,jdbcType=CHAR}, 
+      #{createTime,jdbcType=TIMESTAMP}, #{expireTime,jdbcType=TIMESTAMP})
+  </insert>
+  <insert id="insertSelective" parameterType="com.moral.entity.OperateUser" >
+    insert into operate_user
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="jobNumber != null" >
+        job_number,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="password != null" >
+        password,
+      </if>
+      <if test="organizationId != null" >
+        organization_id,
+      </if>
+      <if test="mobile != null" >
+        mobile,
+      </if>
+      <if test="email != null" >
+        email,
+      </if>
+      <if test="weixin != null" >
+        weixin,
+      </if>
+      <if test="isDelete != null" >
+        is_delete,
+      </if>
+      <if test="createTime != null" >
+        create_time,
+      </if>
+      <if test="expireTime != null" >
+        expire_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=INTEGER},
+      </if>
+      <if test="jobNumber != null" >
+        #{jobNumber,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="password != null" >
+        #{password,jdbcType=VARCHAR},
+      </if>
+      <if test="organizationId != null" >
+        #{organizationId,jdbcType=INTEGER},
+      </if>
+      <if test="mobile != null" >
+        #{mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="email != null" >
+        #{email,jdbcType=VARCHAR},
+      </if>
+      <if test="weixin != null" >
+        #{weixin,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null" >
+        #{isDelete,jdbcType=CHAR},
+      </if>
+      <if test="createTime != null" >
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="expireTime != null" >
+        #{expireTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.moral.entity.OperateUserExample" resultType="java.lang.Integer" >
+    select count(*) from operate_user
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map" >
+    update operate_user
+    <set >
+      <if test="record.id != null" >
+        id = #{record.id,jdbcType=INTEGER},
+      </if>
+      <if test="record.jobNumber != null" >
+        job_number = #{record.jobNumber,jdbcType=VARCHAR},
+      </if>
+      <if test="record.name != null" >
+        name = #{record.name,jdbcType=VARCHAR},
+      </if>
+      <if test="record.password != null" >
+        password = #{record.password,jdbcType=VARCHAR},
+      </if>
+      <if test="record.organizationId != null" >
+        organization_id = #{record.organizationId,jdbcType=INTEGER},
+      </if>
+      <if test="record.mobile != null" >
+        mobile = #{record.mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="record.email != null" >
+        email = #{record.email,jdbcType=VARCHAR},
+      </if>
+      <if test="record.weixin != null" >
+        weixin = #{record.weixin,jdbcType=VARCHAR},
+      </if>
+      <if test="record.isDelete != null" >
+        is_delete = #{record.isDelete,jdbcType=CHAR},
+      </if>
+      <if test="record.createTime != null" >
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.expireTime != null" >
+        expire_time = #{record.expireTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map" >
+    update operate_user
+    set id = #{record.id,jdbcType=INTEGER},
+      job_number = #{record.jobNumber,jdbcType=VARCHAR},
+      name = #{record.name,jdbcType=VARCHAR},
+      password = #{record.password,jdbcType=VARCHAR},
+      organization_id = #{record.organizationId,jdbcType=INTEGER},
+      mobile = #{record.mobile,jdbcType=VARCHAR},
+      email = #{record.email,jdbcType=VARCHAR},
+      weixin = #{record.weixin,jdbcType=VARCHAR},
+      is_delete = #{record.isDelete,jdbcType=CHAR},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      expire_time = #{record.expireTime,jdbcType=TIMESTAMP}
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.moral.entity.OperateUser" >
+    update operate_user
+    <set >
+      <if test="jobNumber != null" >
+        job_number = #{jobNumber,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="password != null" >
+        password = #{password,jdbcType=VARCHAR},
+      </if>
+      <if test="organizationId != null" >
+        organization_id = #{organizationId,jdbcType=INTEGER},
+      </if>
+      <if test="mobile != null" >
+        mobile = #{mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="email != null" >
+        email = #{email,jdbcType=VARCHAR},
+      </if>
+      <if test="weixin != null" >
+        weixin = #{weixin,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null" >
+        is_delete = #{isDelete,jdbcType=CHAR},
+      </if>
+      <if test="createTime != null" >
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="expireTime != null" >
+        expire_time = #{expireTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.moral.entity.OperateUser" >
+    update operate_user
+    set job_number = #{jobNumber,jdbcType=VARCHAR},
+      name = #{name,jdbcType=VARCHAR},
+      password = #{password,jdbcType=VARCHAR},
+      organization_id = #{organizationId,jdbcType=INTEGER},
+      mobile = #{mobile,jdbcType=VARCHAR},
+      email = #{email,jdbcType=VARCHAR},
+      weixin = #{weixin,jdbcType=VARCHAR},
+      is_delete = #{isDelete,jdbcType=CHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      expire_time = #{expireTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/OrganizationMapper.xml b/src/main/resources/mapper/OrganizationMapper.xml
new file mode 100644
index 0000000..aa64439
--- /dev/null
+++ b/src/main/resources/mapper/OrganizationMapper.xml
@@ -0,0 +1,338 @@
+<?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.OrganizationMapper" >
+  <resultMap id="BaseResultMap" type="com.moral.entity.Organization" >
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="rank" property="rank" jdbcType="INTEGER" />
+    <result column="province_code" property="provinceCode" jdbcType="INTEGER" />
+    <result column="city_code" property="cityCode" jdbcType="INTEGER" />
+    <result column="area_code" property="areaCode" jdbcType="INTEGER" />
+    <result column="address" property="address" jdbcType="VARCHAR" />
+    <result column="telephone" property="telephone" jdbcType="VARCHAR" />
+    <result column="email" property="email" jdbcType="VARCHAR" />
+    <result column="is_delete" property="isDelete" jdbcType="CHAR" />
+    <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
+    <result column="expire_time" property="expireTime" jdbcType="TIMESTAMP" />
+    <result column="description" property="description" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Example_Where_Clause" >
+    <where >
+      <foreach collection="oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause" >
+    <where >
+      <foreach collection="example.oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List" >
+    id, name, rank, province_code, city_code, area_code, address, telephone, email, is_delete, 
+    create_time, expire_time, description
+  </sql>
+  <select id="selectByExample" resultMap="BaseResultMap" parameterType="com.moral.entity.OrganizationExample" >
+    select
+    <if test="distinct" >
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from organization
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null" >
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
+    select 
+    <include refid="Base_Column_List" />
+    from organization
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
+    delete from organization
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.moral.entity.OrganizationExample" >
+    delete from organization
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.moral.entity.Organization" >
+    insert into organization (id, name, rank, 
+      province_code, city_code, area_code, 
+      address, telephone, email, 
+      is_delete, create_time, expire_time, 
+      description)
+    values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{rank,jdbcType=INTEGER}, 
+      #{provinceCode,jdbcType=INTEGER}, #{cityCode,jdbcType=INTEGER}, #{areaCode,jdbcType=INTEGER}, 
+      #{address,jdbcType=VARCHAR}, #{telephone,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, 
+      #{isDelete,jdbcType=CHAR}, #{createTime,jdbcType=TIMESTAMP}, #{expireTime,jdbcType=TIMESTAMP}, 
+      #{description,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.moral.entity.Organization" >
+    insert into organization
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="rank != null" >
+        rank,
+      </if>
+      <if test="provinceCode != null" >
+        province_code,
+      </if>
+      <if test="cityCode != null" >
+        city_code,
+      </if>
+      <if test="areaCode != null" >
+        area_code,
+      </if>
+      <if test="address != null" >
+        address,
+      </if>
+      <if test="telephone != null" >
+        telephone,
+      </if>
+      <if test="email != null" >
+        email,
+      </if>
+      <if test="isDelete != null" >
+        is_delete,
+      </if>
+      <if test="createTime != null" >
+        create_time,
+      </if>
+      <if test="expireTime != null" >
+        expire_time,
+      </if>
+      <if test="description != null" >
+        description,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=INTEGER},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="rank != null" >
+        #{rank,jdbcType=INTEGER},
+      </if>
+      <if test="provinceCode != null" >
+        #{provinceCode,jdbcType=INTEGER},
+      </if>
+      <if test="cityCode != null" >
+        #{cityCode,jdbcType=INTEGER},
+      </if>
+      <if test="areaCode != null" >
+        #{areaCode,jdbcType=INTEGER},
+      </if>
+      <if test="address != null" >
+        #{address,jdbcType=VARCHAR},
+      </if>
+      <if test="telephone != null" >
+        #{telephone,jdbcType=VARCHAR},
+      </if>
+      <if test="email != null" >
+        #{email,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null" >
+        #{isDelete,jdbcType=CHAR},
+      </if>
+      <if test="createTime != null" >
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="expireTime != null" >
+        #{expireTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="description != null" >
+        #{description,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.moral.entity.OrganizationExample" resultType="java.lang.Integer" >
+    select count(*) from organization
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map" >
+    update organization
+    <set >
+      <if test="record.id != null" >
+        id = #{record.id,jdbcType=INTEGER},
+      </if>
+      <if test="record.name != null" >
+        name = #{record.name,jdbcType=VARCHAR},
+      </if>
+      <if test="record.rank != null" >
+        rank = #{record.rank,jdbcType=INTEGER},
+      </if>
+      <if test="record.provinceCode != null" >
+        province_code = #{record.provinceCode,jdbcType=INTEGER},
+      </if>
+      <if test="record.cityCode != null" >
+        city_code = #{record.cityCode,jdbcType=INTEGER},
+      </if>
+      <if test="record.areaCode != null" >
+        area_code = #{record.areaCode,jdbcType=INTEGER},
+      </if>
+      <if test="record.address != null" >
+        address = #{record.address,jdbcType=VARCHAR},
+      </if>
+      <if test="record.telephone != null" >
+        telephone = #{record.telephone,jdbcType=VARCHAR},
+      </if>
+      <if test="record.email != null" >
+        email = #{record.email,jdbcType=VARCHAR},
+      </if>
+      <if test="record.isDelete != null" >
+        is_delete = #{record.isDelete,jdbcType=CHAR},
+      </if>
+      <if test="record.createTime != null" >
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.expireTime != null" >
+        expire_time = #{record.expireTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.description != null" >
+        description = #{record.description,jdbcType=VARCHAR},
+      </if>
+    </set>
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map" >
+    update organization
+    set id = #{record.id,jdbcType=INTEGER},
+      name = #{record.name,jdbcType=VARCHAR},
+      rank = #{record.rank,jdbcType=INTEGER},
+      province_code = #{record.provinceCode,jdbcType=INTEGER},
+      city_code = #{record.cityCode,jdbcType=INTEGER},
+      area_code = #{record.areaCode,jdbcType=INTEGER},
+      address = #{record.address,jdbcType=VARCHAR},
+      telephone = #{record.telephone,jdbcType=VARCHAR},
+      email = #{record.email,jdbcType=VARCHAR},
+      is_delete = #{record.isDelete,jdbcType=CHAR},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      expire_time = #{record.expireTime,jdbcType=TIMESTAMP},
+      description = #{record.description,jdbcType=VARCHAR}
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.moral.entity.Organization" >
+    update organization
+    <set >
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="rank != null" >
+        rank = #{rank,jdbcType=INTEGER},
+      </if>
+      <if test="provinceCode != null" >
+        province_code = #{provinceCode,jdbcType=INTEGER},
+      </if>
+      <if test="cityCode != null" >
+        city_code = #{cityCode,jdbcType=INTEGER},
+      </if>
+      <if test="areaCode != null" >
+        area_code = #{areaCode,jdbcType=INTEGER},
+      </if>
+      <if test="address != null" >
+        address = #{address,jdbcType=VARCHAR},
+      </if>
+      <if test="telephone != null" >
+        telephone = #{telephone,jdbcType=VARCHAR},
+      </if>
+      <if test="email != null" >
+        email = #{email,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null" >
+        is_delete = #{isDelete,jdbcType=CHAR},
+      </if>
+      <if test="createTime != null" >
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="expireTime != null" >
+        expire_time = #{expireTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="description != null" >
+        description = #{description,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.moral.entity.Organization" >
+    update organization
+    set name = #{name,jdbcType=VARCHAR},
+      rank = #{rank,jdbcType=INTEGER},
+      province_code = #{provinceCode,jdbcType=INTEGER},
+      city_code = #{cityCode,jdbcType=INTEGER},
+      area_code = #{areaCode,jdbcType=INTEGER},
+      address = #{address,jdbcType=VARCHAR},
+      telephone = #{telephone,jdbcType=VARCHAR},
+      email = #{email,jdbcType=VARCHAR},
+      is_delete = #{isDelete,jdbcType=CHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      expire_time = #{expireTime,jdbcType=TIMESTAMP},
+      description = #{description,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/OrganizationRelationMapper.xml b/src/main/resources/mapper/OrganizationRelationMapper.xml
new file mode 100644
index 0000000..4af8ead
--- /dev/null
+++ b/src/main/resources/mapper/OrganizationRelationMapper.xml
@@ -0,0 +1,181 @@
+<?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.OrganizationRelationMapper" >
+  <resultMap id="BaseResultMap" type="com.moral.entity.OrganizationRelation" >
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="parent_id" property="parentId" jdbcType="INTEGER" />
+    <result column="child_id" property="childId" jdbcType="INTEGER" />
+  </resultMap>
+  <sql id="Example_Where_Clause" >
+    <where >
+      <foreach collection="oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause" >
+    <where >
+      <foreach collection="example.oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List" >
+    id, parent_id, child_id
+  </sql>
+  <select id="selectByExample" resultMap="BaseResultMap" parameterType="com.moral.entity.OrganizationRelationExample" >
+    select
+    <if test="distinct" >
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from organization_relation
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null" >
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
+    select 
+    <include refid="Base_Column_List" />
+    from organization_relation
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
+    delete from organization_relation
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.moral.entity.OrganizationRelationExample" >
+    delete from organization_relation
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.moral.entity.OrganizationRelation" >
+    insert into organization_relation (id, parent_id, child_id
+      )
+    values (#{id,jdbcType=INTEGER}, #{parentId,jdbcType=INTEGER}, #{childId,jdbcType=INTEGER}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.moral.entity.OrganizationRelation" >
+    insert into organization_relation
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="parentId != null" >
+        parent_id,
+      </if>
+      <if test="childId != null" >
+        child_id,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=INTEGER},
+      </if>
+      <if test="parentId != null" >
+        #{parentId,jdbcType=INTEGER},
+      </if>
+      <if test="childId != null" >
+        #{childId,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.moral.entity.OrganizationRelationExample" resultType="java.lang.Integer" >
+    select count(*) from organization_relation
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map" >
+    update organization_relation
+    <set >
+      <if test="record.id != null" >
+        id = #{record.id,jdbcType=INTEGER},
+      </if>
+      <if test="record.parentId != null" >
+        parent_id = #{record.parentId,jdbcType=INTEGER},
+      </if>
+      <if test="record.childId != null" >
+        child_id = #{record.childId,jdbcType=INTEGER},
+      </if>
+    </set>
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map" >
+    update organization_relation
+    set id = #{record.id,jdbcType=INTEGER},
+      parent_id = #{record.parentId,jdbcType=INTEGER},
+      child_id = #{record.childId,jdbcType=INTEGER}
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.moral.entity.OrganizationRelation" >
+    update organization_relation
+    <set >
+      <if test="parentId != null" >
+        parent_id = #{parentId,jdbcType=INTEGER},
+      </if>
+      <if test="childId != null" >
+        child_id = #{childId,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.moral.entity.OrganizationRelation" >
+    update organization_relation
+    set parent_id = #{parentId,jdbcType=INTEGER},
+      child_id = #{childId,jdbcType=INTEGER}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
deleted file mode 100644
index 65e04c7..0000000
--- a/src/main/resources/mapper/UserMapper.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?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.UserMapper">
-
-    <select id="findByUsername" resultType="com.moral.entity.auth.AuthUser">
-
-    </select>
-
-</mapper>
\ No newline at end of file
diff --git a/src/main/resources/system/alarmLevels.json b/src/main/resources/system/alarmLevels.json
new file mode 100644
index 0000000..5ff876f
--- /dev/null
+++ b/src/main/resources/system/alarmLevels.json
@@ -0,0 +1,97 @@
+{
+    "e1":{
+        "level1":35,
+        "level2":115,
+        "level3":250
+    },
+    "e2":{
+        "level1":50,
+        "level2":250,
+        "level3":420
+    },
+    "e3":{
+        "level1":2000,
+        "level2":5000,
+        "level3":8000
+    },
+    "e4":{
+        "level1":10,
+        "level2":30,
+        "level3":60
+    },
+    "e5":{
+        "level1":0.01,
+        "level2":0.02,
+        "level3":0.05
+    },
+    "e6":{
+        "level1":60,
+        "level2":100,
+        "level3":160
+    },
+    "e7":{
+        "level1":35,
+        "level2":30,
+        "level3":40
+    },
+    "e8":{
+        "level1":30,
+        "level2":40,
+        "level3":50
+    },
+    "e9":{
+        "level1":0.01,
+        "level2":0.02,
+        "level3":0.03
+    },
+    "e10":{
+        "level1":2,
+        "level2":14,
+        "level3":36
+    },
+    "e11":{
+        "level1":0.05,
+        "level2":0.475,
+        "level3":1.6
+    },
+    "e12":{
+        "level1":10000,
+        "level2":15000,
+        "level3":25000
+    },
+    "e13":{
+        "level1":30,
+        "level2":50,
+        "level3":90
+    },
+    "e14":{
+        "level1":2,
+        "level2":4,
+        "level3":6
+    },
+    "e15":{
+        "level1":0.16,
+        "level2":0.3,
+        "level3":0.8
+    },
+    "e16":{
+        "level1":0.04,
+        "level2":0.18,
+        "level3":0.565
+    },
+    "e17":{
+        "level1":1,
+        "level2":2,
+        "level3":5
+    },
+    "e18":{
+        "level1":5,
+        "level2":6,
+        "level3":8
+    },
+    "e19":{
+        "level1":480,
+        "level2":580,
+        "level3":680
+    }
+}
\ No newline at end of file
diff --git a/src/main/resources/system/sysConfig.properties b/src/main/resources/system/sysConfig.properties
new file mode 100644
index 0000000..1e488b7
--- /dev/null
+++ b/src/main/resources/system/sysConfig.properties
@@ -0,0 +1,28 @@
+e1=0,35,75,115,150,250,350,500
+e2=0,50,150,250,350,420,500,600
+e10=0,2,4,14,24,36,48,60
+e11=0,50,150,475,800,1600,2100,2620
+e15=0,100,160,215,265,800,1000,1200
+e16=0,40,80,180,280,565,750,940
+IAQI=0,50,100,150,200,300,400,500,>500
+e1-standard=35
+e2-standard=50
+e10-standard=2
+e11-standard=50
+e15-standard=100
+e16-standard=40
+
+e3-standard=50
+e4-standard=30
+e5-standard=50
+e6-standard=40
+e7-standard=50
+e8-standard=60
+e9-standard=50
+e12-standard=34
+e13-standard=54
+e14-standard=56
+e17-standard=150
+e18-standard=9
+e19-standard=50
+orgId=5212b9dfb55448e699889e01fa0fa6a2
\ No newline at end of file

--
Gitblit v1.8.0