xufenglei
2019-02-13 1bd6a5e7678477f5b1fab449c6d618aae9041611
设备 相关更新
6 files added
13 files modified
443 ■■■■ changed files
src/main/java/com/moral/controller/DeviceController.java 36 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/MobileController.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/entity/Density.java 30 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/entity/Device.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/entity/DeviceProperty.java 32 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/entity/Profession.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/DensityMapper.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/DeviceMapper.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/DevicePropertyMapper.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/DeviceService.java 7 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/ProfessionService.java 7 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/DeviceServiceImpl.java 64 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/HistoryServiceImpl.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/ProfessionServiceImpl.java 29 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/DensityMapper.xml 17 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/DeviceMapper.xml 129 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/DevicePropertyMapper.xml 18 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/ProfessionMapper.xml 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/DeviceController.java
@@ -1,11 +1,5 @@
package com.moral.controller;
import com.moral.common.bean.PageBean;
import com.moral.common.bean.ResultBean;
import com.moral.entity.Device;
import com.moral.service.DeviceService;
import org.springframework.web.bind.annotation.*;
import static com.moral.common.util.WebUtils.getParametersStartingWith;
import java.util.Date;
@@ -14,6 +8,21 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
import com.moral.common.bean.PageBean;
import com.moral.common.bean.ResultBean;
import com.moral.entity.Device;
import com.moral.entity.DeviceProperty;
import com.moral.service.DeviceService;
@RestController
@RequestMapping("device")
@@ -59,4 +68,19 @@
        List<Device> devices = deviceService.getDevicesByProfessionId(parameters);
        return new ResultBean<List<Device>>(devices);
    }
    @PostMapping("save-or-update")
    public ResultBean saveOrUpdate(@RequestBody String jsonString){
        Device device = JSONObject.parseObject(jsonString, Device.class);
        DeviceProperty deviceProperty = JSONObject.parseObject(jsonString, DeviceProperty.class);
        deviceService.saveOrUpdate(device,deviceProperty);
        ResultBean resultBean = new ResultBean(ResultBean.SUCCESS);
        return resultBean;
    }
    @GetMapping("device-list")
    public PageBean getDeviceList(PageBean pageBean) {
        return deviceService.getDeviceList(pageBean);
    }
}
src/main/java/com/moral/controller/MobileController.java
@@ -20,6 +20,7 @@
import com.moral.common.bean.AppData;
import com.moral.common.bean.ResultBean;
import com.moral.common.util.Crypto;
import com.moral.common.util.WebUtils;
import com.moral.entity.Account;
import com.moral.entity.Device;
import com.moral.entity.MonitorPoint;
@@ -327,4 +328,12 @@
        List<Map<String, Object>> sensors = historyService.getSensorDataBySensorKey(parameters);
        return new ResultBean<List<Map<String, Object>>>(sensors);
    }
    @RequestMapping("profession-provincecode")
    public ResultBean<List<Profession>> getProfessionByProvinceCode(HttpServletRequest request){
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        List<Profession> professions = professionService.getProfessiontList(parameters);
        return new ResultBean<List<Profession>>(professions);
    }
}
src/main/java/com/moral/entity/Density.java
New file
@@ -0,0 +1,30 @@
package com.moral.entity;
import java.io.Serializable;
import javax.persistence.Id;
import lombok.Data;
@Data
public class Density implements Serializable {
    @Id
    private Integer id;
    private Integer provinceCode;
    private Integer professionId;
    private Byte tech;
    private String limitVal;
    private String valUnit;
    private String extA;
    private Integer extB;
    private static final long serialVersionUID = 1L;
}
src/main/java/com/moral/entity/Device.java
@@ -3,6 +3,7 @@
import java.util.Date;
import java.util.List;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Transient;
@@ -19,6 +20,7 @@
     * @mbggenerated  Wed Nov 29 16:17:59 CST 2017
     */
    @Id
    @GeneratedValue(generator = "JDBC")
    private Integer id;
    /**
     * This field was generated by MyBatis Generator. This field corresponds to the database column device.name
@@ -115,4 +117,6 @@
    private List<Integer> organizationIds;
    @Transient
    private Profession profession;
    @Transient
    private DeviceProperty deviceProperty;
}
src/main/java/com/moral/entity/DeviceProperty.java
New file
@@ -0,0 +1,32 @@
package com.moral.entity;
import java.io.Serializable;
import javax.persistence.Id;
import lombok.Data;
@Data
public class DeviceProperty implements Serializable {
    @Id
    private Integer id;
    private Byte deviceTech;
    private Byte deviceCat;
    private String deviceSource;
    private Integer extA;
    private Integer extB;
    private String extC;
    private String extD;
    private String extE;
    private static final long serialVersionUID = 1L;
}
src/main/java/com/moral/entity/Profession.java
@@ -3,10 +3,14 @@
import lombok.Data;
import javax.persistence.Id;
import java.io.Serializable;
@Data
public class Profession {
    @Id
public class Profession implements Serializable {
    private String provinceCode;
    private static final long serialVersionUID = 1L;
    @Id
    private Integer id;
    private String name;
src/main/java/com/moral/mapper/DensityMapper.java
New file
@@ -0,0 +1,8 @@
package com.moral.mapper;
import com.moral.common.mapper.BaseMapper;
import com.moral.entity.Density;
public interface DensityMapper extends BaseMapper<Density>{
}
src/main/java/com/moral/mapper/DeviceMapper.java
@@ -8,6 +8,7 @@
import com.moral.common.mapper.BaseMapper;
import com.moral.entity.Device;
import tk.mybatis.mapper.entity.Example;
public interface DeviceMapper extends BaseMapper<Device>{
@@ -38,4 +39,6 @@
    List<Device> getDevicesByOrganizationId(Map<String, Object> parameters);
    List<Map<String, Object>> getDevicesStateByRegion(Map<String, Object> parameters);
    List<Device> getDeviceList(Example example);
}
src/main/java/com/moral/mapper/DevicePropertyMapper.java
New file
@@ -0,0 +1,8 @@
package com.moral.mapper;
import com.moral.common.mapper.BaseMapper;
import com.moral.entity.DeviceProperty;
public interface DevicePropertyMapper extends BaseMapper<DeviceProperty>{
}
src/main/java/com/moral/service/DeviceService.java
@@ -3,10 +3,11 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.moral.common.bean.PageBean;
import com.moral.common.bean.PageResult;
import com.moral.common.bean.ResultBean;
import com.moral.entity.Device;
import com.moral.entity.DeviceProperty;
public interface DeviceService {
@@ -46,4 +47,8 @@
    List<Device> getDevicesByOrganizationId(Map<String, Object> parameters);
    Map<String,Long> queryDeviceStateSummary(Integer orgId);
    void saveOrUpdate(Device device, DeviceProperty deviceProperty);
    PageBean getDeviceList(PageBean pageBean);
}
src/main/java/com/moral/service/ProfessionService.java
@@ -1,12 +1,15 @@
package com.moral.service;
import com.moral.entity.Profession;
import java.util.List;
import java.util.Map;
import com.moral.entity.Profession;
public interface ProfessionService {
    List<Profession> queryByName(String nameLike);
    public List<Profession> getProfessiontList();
    public List<Profession> getProfessiontList(Map<String, Object> parameters);
}
src/main/java/com/moral/service/impl/DeviceServiceImpl.java
@@ -1,21 +1,16 @@
package com.moral.service.impl;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import com.alibaba.fastjson.TypeReference;
import com.github.pagehelper.Page;
import com.moral.common.bean.Constants;
import com.moral.common.bean.PageBean;
import com.moral.common.bean.PageResult;
import com.moral.common.exception.BusinessException;
import com.moral.common.util.ExampleUtil;
import com.moral.common.util.RedisUtils;
import com.moral.entity.DeviceVersion;
import com.moral.mapper.*;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
@@ -24,11 +19,27 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import com.alibaba.fastjson.TypeReference;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.moral.common.bean.Constants;
import com.moral.common.bean.PageBean;
import com.moral.common.bean.PageResult;
import com.moral.common.exception.BusinessException;
import com.moral.common.util.ExampleUtil;
import com.moral.common.util.RedisUtils;
import com.moral.common.util.ValidateUtil;
import com.moral.entity.Device;
import com.moral.entity.DeviceProperty;
import com.moral.mapper.DeviceMapper;
import com.moral.mapper.DevicePropertyMapper;
import com.moral.mapper.DeviceVersionMapper;
import com.moral.mapper.DictionaryDataMapper;
import com.moral.mapper.MonitorPointMapper;
import com.moral.mapper.OrganizationMapper;
import com.moral.service.AccountService;
import com.moral.service.DeviceService;
import tk.mybatis.mapper.entity.Example;
@Service
@@ -508,4 +519,35 @@
        result.put("stop", stop);
        return result;
    }
    @Resource
    private DevicePropertyMapper devicePropertyMapper;
    @Override
    @Transactional
    public void saveOrUpdate(Device device, DeviceProperty deviceProperty) {
        if (ObjectUtils.isEmpty(device.getId())) {
            device.setState(Constants.DEVICE_STATE_OFFLINE);
            device.setIsDelete(Constants.IS_DELETE_FALSE);
            deviceMapper.insertSelective(device);
            deviceProperty.setId(device.getId());
        } else {
            deviceMapper.updateByPrimaryKeySelective(device);
            devicePropertyMapper.deleteByPrimaryKey(deviceProperty);
        }
        devicePropertyMapper.insertSelective(deviceProperty);
        refreshDeviceInRedis(device.getMac());
    }
    @Override
    public PageBean getDeviceList(PageBean pageBean) {
        Example example = ExampleUtil.generateExample(ENTITY_CLASS,pageBean);
        if(pageBean.getPageSize()>0){
            PageHelper.startPage(pageBean.getPageIndex(),pageBean.getPageSize());
        }
        List<Device> deviceList = deviceMapper.getDeviceList(example);
        return new PageBean(deviceList);
    }
}
src/main/java/com/moral/service/impl/HistoryServiceImpl.java
@@ -30,10 +30,10 @@
import com.moral.entity.Sensor;
import com.moral.mapper.DeviceMapper;
import com.moral.mapper.HistoryMapper;
import com.moral.mapper.ProfessionMapper;
import com.moral.mapper.SensorMapper;
import com.moral.service.AccountService;
import com.moral.service.HistoryService;
import com.moral.service.ProfessionService;
@Service
public class HistoryServiceImpl implements HistoryService {
@@ -51,7 +51,7 @@
    private SensorMapper sensorMapper;
    @Resource
    private ProfessionMapper professionMapper;
    private ProfessionService professionService;
    @Override
    public Map<String, Object> getAllSensorAverageByDevice(Map<String, Object> parameters) throws Exception {
@@ -111,6 +111,7 @@
        ValidateUtil.notNull(parameters.get("accountId"), "param.is.null");
        String regionCode = parameters.get("regionCode").toString();
        parameters.put("provinceCode", regionCode.substring(0,2).concat("0000"));
        String regionType = "village";
        String nextLevel = "";
        if (regionCode.length() == 6) {
@@ -168,7 +169,7 @@
            }
        }
        if ("profession".equals(parameters.get("dimension"))) {
            List<Profession> professions = professionMapper.selectAll();
            List<Profession> professions = professionService.getProfessiontList(parameters);
            for (Map<String, Object> map : result) {
                for (Profession profession : professions) {
                    if (map.get("name").equals(profession.getName())) {
src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java
@@ -73,10 +73,10 @@
            List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId);
            params.put("orgIds",orgIds);
            monitorPointList = monitorPointMapper.selectByMap(params);
            for(MonitorPoint monitorPoint:monitorPointList){
                Integer state = getStateFromRedis(monitorPoint.getId());
                monitorPoint.setState(state);
            }
//            for(MonitorPoint monitorPoint:monitorPointList){
//                Integer state = getStateFromRedis(monitorPoint.getId());
//                monitorPoint.setState(state);
//            }
        }
        return monitorPointList == null ? new ArrayList<>() : monitorPointList;
    }
src/main/java/com/moral/service/impl/ProfessionServiceImpl.java
@@ -1,14 +1,19 @@
package com.moral.service.impl;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import com.moral.common.util.StringUtils;
import com.moral.entity.Profession;
import com.moral.mapper.ProfessionMapper;
import com.moral.service.ProfessionService;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource;
import java.util.List;
import tk.mybatis.mapper.entity.Example;
@Service
public class ProfessionServiceImpl implements ProfessionService {
@@ -28,4 +33,20 @@
        return professionMapper.selectAll();
    }
    @Override
    public List<Profession> getProfessiontList(Map<String, Object> parameters) {
        List<Profession> professions = null;
        if (parameters.containsKey("provinceCode")) {
            Profession profession = new Profession();
            profession.setProvinceCode(parameters.get("provinceCode").toString());
            professions = professionMapper.select(profession);
        }
        if (ObjectUtils.isEmpty(professions)) {
            Example example = new Example(Profession.class);
            example.and().andIsNull("provinceCode");
            professions = professionMapper.selectByExample(example);
        }
        return professions;
    }
}
src/main/resources/mapper/DensityMapper.xml
New file
@@ -0,0 +1,17 @@
<?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.DensityMapper">
  <resultMap id="BaseResultMap" type="com.moral.entity.Density">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="province_code" jdbcType="INTEGER" property="provinceCode" />
    <result column="profession_id" jdbcType="INTEGER" property="professionId" />
    <result column="tech" jdbcType="TINYINT" property="tech" />
    <result column="limit_val" jdbcType="CHAR" property="limitVal" />
    <result column="val_unit" jdbcType="VARCHAR" property="valUnit" />
    <result column="ext_a" jdbcType="VARCHAR" property="extA" />
    <result column="ext_b" jdbcType="INTEGER" property="extB" />
  </resultMap>
  <sql id="Base_Column_List">
    id, province_code, profession_id, tech, limit_val, val_unit, ext_a, ext_b
  </sql>
</mapper>
src/main/resources/mapper/DeviceMapper.xml
@@ -1,39 +1,56 @@
<?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" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="address" jdbcType="VARCHAR" property="address" />
    <result column="longitude" jdbcType="REAL" property="longitude" />
    <result column="latitude" jdbcType="REAL" property="latitude" />
    <result column="mac" jdbcType="VARCHAR" property="mac" />
    <result column="operate_user_id" jdbcType="INTEGER" property="operateUserId" />
    <result column="state" jdbcType="CHAR" property="state" />
    <result column="is_delete" jdbcType="CHAR" property="isDelete" />
    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
    <result column="install_time" jdbcType="TIMESTAMP" property="installTime" />
    <result column="monitor_point_id" jdbcType="INTEGER" property="monitorPointId" />
    <result column="device_version_id" jdbcType="INTEGER" property="deviceVersionId" />
    <result column="profession_id" jdbcType="INTEGER" property="professionId" />
      <association property="operateUser" javaType="com.moral.entity.OperateUser">
          <result column="operate_user_id" property="id" jdbcType="INTEGER" />
          <result column="operate_user_name" property="name" jdbcType="VARCHAR" />
      </association>
      <association property="deviceVersion" javaType="com.moral.entity.DeviceVersion">
          <result column="device_version_id" property="id" jdbcType="INTEGER" />
          <result column="device_version_value" property="version" jdbcType="INTEGER" />
          <result column="device_version_name" property="name" jdbcType="VARCHAR" />
      </association>
      <association property="monitorPoint" javaType="com.moral.entity.MonitorPoint">
          <result column="monitor_point_id" property="id" jdbcType="INTEGER" />
          <result column="monitor_point_name" property="name" jdbcType="VARCHAR" />
      </association>
      <association property="profession" javaType="com.moral.entity.Profession">
          <result column="profession_id" property="id" jdbcType="INTEGER" />
          <result column="profession_name" property="name" jdbcType="VARCHAR" />
      </association>
  </resultMap>
    <resultMap id="ResultMap" type="com.moral.entity.Device">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="address" jdbcType="VARCHAR" property="address" />
        <result column="longitude" jdbcType="DOUBLE" property="longitude" />
        <result column="latitude" jdbcType="DOUBLE" property="latitude" />
        <result column="mac" jdbcType="VARCHAR" property="mac" />
        <result column="operate_user_id" jdbcType="INTEGER" property="operateUserId" />
        <result column="state" jdbcType="CHAR" property="state" />
        <result column="is_delete" jdbcType="CHAR" property="isDelete" />
        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
        <result column="install_time" jdbcType="TIMESTAMP" property="installTime" />
        <result column="monitor_point_id" jdbcType="INTEGER" property="monitorPointId" />
        <result column="device_version_id" jdbcType="INTEGER" property="deviceVersionId" />
        <result column="profession_id" jdbcType="INTEGER" property="professionId" />
    </resultMap>
    <resultMap id="BaseResultMap" type="com.moral.entity.Device" extends="ResultMap">
        <association property="operateUser" javaType="com.moral.entity.OperateUser">
            <result column="operate_user_id" property="id" jdbcType="INTEGER" />
            <result column="operate_user_name" property="name" jdbcType="VARCHAR" />
        </association>
        <association property="deviceVersion" javaType="com.moral.entity.DeviceVersion">
            <result column="device_version_id" property="id" jdbcType="INTEGER" />
            <result column="device_version_value" property="version" jdbcType="INTEGER" />
            <result column="device_version_name" property="name" jdbcType="VARCHAR" />
        </association>
        <association property="monitorPoint" javaType="com.moral.entity.MonitorPoint">
            <result column="monitor_point_id" property="id" jdbcType="INTEGER" />
            <result column="monitor_point_name" property="name" jdbcType="VARCHAR" />
            <result column="province_code" property="provinceCode" jdbcType="VARCHAR" />
        </association>
        <association property="profession" javaType="com.moral.entity.Profession">
            <result column="profession_id" property="id" jdbcType="INTEGER" />
            <result column="profession_name" property="name" jdbcType="VARCHAR" />
        </association>
    </resultMap>
    <resultMap id="PropertyResultMap" type="com.moral.entity.Device" extends="BaseResultMap">
        <association property="deviceProperty" javaType="com.moral.entity.DeviceProperty">
            <result column="id" property="id" jdbcType="INTEGER" />
            <result column="device_tech" property="deviceTech" jdbcType="TINYINT" />
            <result column="device_cat" property="deviceCat" jdbcType="TINYINT" />
            <result column="device_source" property="deviceSource" jdbcType="VARCHAR" />
        </association>
    </resultMap>
    <resultMap id="BaseResultWithOrgIdsMap" type="com.moral.entity.Device" extends="BaseResultMap">
        <collection property="organizationIds" column="id" select="selectOrganizationIds"></collection>
    </resultMap>
    <sql id="Example_Where_Clause">
        <where>
            <foreach collection="oredCriteria" item="criteria" separator="or">
@@ -244,9 +261,6 @@
            AND dev.is_delete =0
        </where>
    </select>
    <resultMap id="BaseResultWithOrgIdsMap" type="com.moral.entity.Device" extends="BaseResultMap">
        <collection property="organizationIds" column="id" select="selectOrganizationIds"></collection>
    </resultMap>
    <!-- resultMap引用 -->
    <select id="selectOrganizationIds" resultType="java.lang.Integer">
        call proc_organizationIds_GetByDeviceId(#{id,jdbcType=INTEGER});
@@ -336,23 +350,6 @@
            </if>
    </select>
    <resultMap id="ResultMap" type="com.moral.entity.Device">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="address" jdbcType="VARCHAR" property="address" />
        <result column="longitude" jdbcType="DOUBLE" property="longitude" />
        <result column="latitude" jdbcType="DOUBLE" property="latitude" />
        <result column="mac" jdbcType="VARCHAR" property="mac" />
        <result column="operate_user_id" jdbcType="INTEGER" property="operateUserId" />
        <result column="state" jdbcType="CHAR" property="state" />
        <result column="is_delete" jdbcType="CHAR" property="isDelete" />
        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
        <result column="install_time" jdbcType="TIMESTAMP" property="installTime" />
        <result column="monitor_point_id" jdbcType="INTEGER" property="monitorPointId" />
        <result column="device_version_id" jdbcType="INTEGER" property="deviceVersionId" />
        <result column="profession_id" jdbcType="INTEGER" property="professionId" />
    </resultMap>
    <select id="getDevicesByOrganizationId" resultMap="ResultMap">
        SELECT
            d.* 
@@ -387,4 +384,30 @@
        </if>
        </where>
    </select>
    <select id="getDeviceList" resultMap="PropertyResultMap">
        select
            dev.*,
            ouser.name as operate_user_name,
            dvn.name as device_version_name,
            mpt.name as monitor_point_name,
            mpt.province_code,
            dp.device_tech,
            dp.device_cat,
            dp.device_source
        from device dev
        left join operate_user ouser on dev.operate_user_id = ouser.id
        left join device_version dvn on dev.device_version_id = dvn.id
        left join monitor_point mpt on dev.monitor_point_id = mpt.id
        left join device_property dp on dev.id = dp.id
        where dev.id in (
            select id from device
            <if test="_parameter != null">
                <include refid="Example_Where_Clause" />
            </if>
            <if test="orderByClause != null">
                order by ${orderByClause}
            </if>
        )
    </select>
</mapper>
src/main/resources/mapper/DevicePropertyMapper.xml
New file
@@ -0,0 +1,18 @@
<?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.DevicePropertyMapper">
  <resultMap id="BaseResultMap" type="com.moral.entity.DeviceProperty">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="device_tech" jdbcType="TINYINT" property="deviceTech" />
    <result column="device_cat" jdbcType="TINYINT" property="deviceCat" />
    <result column="device_source" jdbcType="VARCHAR" property="deviceSource" />
    <result column="ext_a" jdbcType="INTEGER" property="extA" />
    <result column="ext_b" jdbcType="INTEGER" property="extB" />
    <result column="ext_c" jdbcType="VARCHAR" property="extC" />
    <result column="ext_d" jdbcType="VARCHAR" property="extD" />
    <result column="ext_e" jdbcType="VARCHAR" property="extE" />
  </resultMap>
  <sql id="Base_Column_List">
    id, device_tech, device_cat, device_source, ext_a, ext_b, ext_c, ext_d, ext_e
  </sql>
</mapper>
src/main/resources/mapper/ProfessionMapper.xml
@@ -1,9 +1,12 @@
<?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.ProfessionMapper" >
    <resultMap id="BaseResultMap" type="com.moral.entity.Profession" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="name" property="name" jdbcType="VARCHAR" />
    </resultMap>
<?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.ProfessionMapper">
  <resultMap id="BaseResultMap" type="com.moral.entity.Profession">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="province_code" jdbcType="VARCHAR" property="provinceCode" />
  </resultMap>
  <sql id="Base_Column_List">
    id, name, province_code
  </sql>
</mapper>