Jelajahi Sumber

Merge remote-tracking branch 'origin/CIS_V1.0' into CIS_V1.0

# Conflicts:
#	src/test/java/com/welampiot/service/UserServiceTest.java
zhj 2 tahun lalu
induk
melakukan
533b573c95
60 mengubah file dengan 1602 tambahan dan 312 penghapusan
  1. 21 4
      src/main/java/com/welampiot/common/InterfaceResultEnum.java
  2. 136 0
      src/main/java/com/welampiot/configuration/LastSqlInterceptor.java
  3. 387 3
      src/main/java/com/welampiot/controller/AcDeviceController.java
  4. 94 91
      src/main/java/com/welampiot/controller/AlarmController.java
  5. 308 138
      src/main/java/com/welampiot/controller/LampController.java
  6. 1 1
      src/main/java/com/welampiot/controller/LampPoleController.java
  7. 1 1
      src/main/java/com/welampiot/controller/RepairController.java
  8. 2 0
      src/main/java/com/welampiot/dao/AcDevInfoDao.java
  9. 1 1
      src/main/java/com/welampiot/dao/AllAlarmInfoLogDao.java
  10. 1 0
      src/main/java/com/welampiot/dao/GlobalLocationDao.java
  11. 1 0
      src/main/java/com/welampiot/dao/GroupDao.java
  12. 11 0
      src/main/java/com/welampiot/dao/IpInfoDao.java
  13. 2 0
      src/main/java/com/welampiot/dao/LampDao.java
  14. 1 0
      src/main/java/com/welampiot/dao/LampPoleDao.java
  15. 4 0
      src/main/java/com/welampiot/dao/RepairDispatchDao.java
  16. 3 0
      src/main/java/com/welampiot/dao/RepairInfoDao.java
  17. 1 1
      src/main/java/com/welampiot/dao/SectionDao.java
  18. 2 2
      src/main/java/com/welampiot/dto/GlobalLocationDTO.java
  19. 11 0
      src/main/java/com/welampiot/dto/IpInfoDTO.java
  20. 11 1
      src/main/java/com/welampiot/dto/RepairDispatchDTO.java
  21. 9 1
      src/main/java/com/welampiot/dto/RepairInfoDTO.java
  22. 3 0
      src/main/java/com/welampiot/service/AcDevInfoService.java
  23. 1 1
      src/main/java/com/welampiot/service/AllAlarmInfoLogService.java
  24. 1 0
      src/main/java/com/welampiot/service/GlobalLocationService.java
  25. 2 0
      src/main/java/com/welampiot/service/GroupService.java
  26. 11 0
      src/main/java/com/welampiot/service/IpInfoService.java
  27. 1 0
      src/main/java/com/welampiot/service/LampPoleService.java
  28. 2 0
      src/main/java/com/welampiot/service/LampService.java
  29. 4 0
      src/main/java/com/welampiot/service/RepairDispatchService.java
  30. 4 0
      src/main/java/com/welampiot/service/RepairInfoService.java
  31. 1 1
      src/main/java/com/welampiot/service/SectionService.java
  32. 10 0
      src/main/java/com/welampiot/service/impl/AcDevInfoServiceImpl.java
  33. 1 1
      src/main/java/com/welampiot/service/impl/AllAlarmInfoLogServiceImpl.java
  34. 4 0
      src/main/java/com/welampiot/service/impl/GlobalLocationServiceImpl.java
  35. 5 0
      src/main/java/com/welampiot/service/impl/GroupServiceImpl.java
  36. 27 0
      src/main/java/com/welampiot/service/impl/IpInfoServiceImpl.java
  37. 4 0
      src/main/java/com/welampiot/service/impl/LampPoleServiceImpl.java
  38. 8 0
      src/main/java/com/welampiot/service/impl/LampServiceImpl.java
  39. 8 0
      src/main/java/com/welampiot/service/impl/RepairDispatchServiceImpl.java
  40. 9 0
      src/main/java/com/welampiot/service/impl/RepairInfoServiceImpl.java
  41. 1 1
      src/main/java/com/welampiot/service/impl/SectionServiceImpl.java
  42. 2 2
      src/main/java/com/welampiot/utils/JwtUtil.java
  43. 212 27
      src/main/java/com/welampiot/utils/ToolUtils.java
  44. 15 0
      src/main/java/com/welampiot/vo/AcDevInfoVO.java
  45. 2 0
      src/main/java/com/welampiot/vo/AllAlarmInfoLogVO.java
  46. 1 1
      src/main/java/com/welampiot/vo/LampPoleVO.java
  47. 14 0
      src/main/java/com/welampiot/vo/RepairDispatchVO.java
  48. 13 0
      src/main/resources/mapper/AcDevInfoMapper.xml
  49. 5 1
      src/main/resources/mapper/AllAlarmInfoLogMapper.xml
  50. 22 0
      src/main/resources/mapper/GlobalLocationMapper.xml
  51. 12 0
      src/main/resources/mapper/GroupMapper.xml
  52. 28 0
      src/main/resources/mapper/IpInfoMapper.xml
  53. 54 7
      src/main/resources/mapper/LampMapper.xml
  54. 20 1
      src/main/resources/mapper/LampPoleMapper.xml
  55. 21 5
      src/main/resources/mapper/NetworkMapper.xml
  56. 0 1
      src/main/resources/mapper/OperationLogMapper.xml
  57. 22 0
      src/main/resources/mapper/RepairDispatchMapper.xml
  58. 19 6
      src/main/resources/mapper/RepairInfoMapper.xml
  59. 8 2
      src/main/resources/mapper/SectionMapper.xml
  60. 17 11
      src/test/java/com/welampiot/service/UserServiceTest.java

+ 21 - 4
src/main/java/com/welampiot/common/InterfaceResultEnum.java

@@ -218,14 +218,31 @@ public enum InterfaceResultEnum {
     CREATE_LIGHT_ERROR("0404","创建灯控失败","Failed to create light control","Ошибка создания управления светом"),
     CREATE_CONTROL_ERROR("0405","添加灯控制器失败","Adding light controller failed","Ошибка добавления контроллера освещения"),
     CREATE_CONTROL_LIGHT_ERROR("0406","添加灯具失败","Adding lamps failed","Ошибка добавления фонаря "),
-    DEVICE_ADDRESS_EXITS_ERROR("0406","设备地址已存在","Device address already exists","Адрес устройства уже существует."),
-
+    DEVICE_ADDRESS_EXITS_ERROR("0407","设备地址已存在","Device address already exists","Адрес устройства уже существует."),
+    POWER_SELECT_ERROR("0408","请填写正确地功率","Please fill in the correct power","Заполните, пожалуйста, правильную мощность"),
 
     //plc设备  0500-0599
     PLC_SERIAL_NUMBER_EXIST_ERROR("0500","灯的序号重复","The serial number of the lamp is repeated","серийный номер лампы"),
     PLC_ADDRESS_EXIST_ERROR("0501","灯的地址重复","The address of the lamp is repeated","повторение адреса лампы"),
-    LACK_PLC_ADDRESS__ERROR("0501","请先添加网关","Please add gateway first","Сначала добавьте шлюз"),
-    LACK_PLC_MACADDRESS__ERROR("0502","请添加灯地址","Please add a light address","Пожалуйста, добавьте адрес лампы."),
+    LACK_PLC_ADDRESS__ERROR("0502","请先添加网关","Please add gateway first","Сначала добавьте шлюз"),
+    LACK_PLC_MACADDRESS__ERROR("0503","请添加灯地址","Please add a light address","Пожалуйста, добавьте адрес лампы."),
+    FILL_LAMP_ADDRESS__ERROR("0504","请填写正确的灯地址","Please fill in the correct lamp address","Укажите правильный адрес лампы"),
+    PLC_SERIAL_NUMBER_SAME__ERROR("0505","设置双灯时,灯序号要一致","When setting up dual lights, the light numbers should be consistent","При установке двойного света номера ламп должны совпадать."),
+
+
+
+    //分组 0600-0699 分组名称必须在1-255数字范围内
+    GROUP_NUMBER_RAND_ERROR("0600","分组名称必须在1-255数字范围内","The group name must be in the range of 1-255 digits","Имя группы должно быть в диапазоне от 1 до 255"),
+
+    //AC 0700-0799
+    AC_RAND_CODE_ERROR("0700","获取随机码失败","Failed to obtain random code","Ошибка получения случайного кода"),
+    AC_CONFIG_ADDRESS_ERROR("0701","请正确配置ip地址或端口配置","Please properly configure the IP address or port configuration","Настройка ip - адреса или порта"),
+    AC_USER_LIST_ERROR("0702","获取用户列表失败","Failed to get user list","Не удалось получить список пользователей"),
+    AC_TOKEN_ERROR("0703","刷新令牌失败","Refresh token failed","Не удалось обновить токен"),
+    AC_GET_TOKEN_ERROR("0704","获取令牌失败","Failed to get token","Ошибка получения маркера"),
+
+    // 告警维修 0800-0899
+    REPAIR_INFOR_ERROR("0800","暂无维修信息","No maintenance information","Пока нет информации о ремонте"),
 
     ;
     private String code;

+ 136 - 0
src/main/java/com/welampiot/configuration/LastSqlInterceptor.java

@@ -0,0 +1,136 @@
+package com.welampiot.configuration;
+
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.ibatis.executor.statement.StatementHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.ParameterMapping;
+import org.apache.ibatis.plugin.*;
+import org.apache.ibatis.reflection.MetaObject;
+import org.apache.ibatis.reflection.SystemMetaObject;
+import org.apache.ibatis.session.Configuration;
+import org.apache.ibatis.session.ResultHandler;
+import org.apache.ibatis.type.TypeHandlerRegistry;
+import org.springframework.stereotype.Component;
+
+import java.sql.Statement;
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.regex.Matcher;
+
+
+@Intercepts({
+        @Signature(type = StatementHandler.class, method = "query", args = {Statement.class, ResultHandler.class}),
+        @Signature(type = StatementHandler.class, method = "update", args = {Statement.class}),
+        @Signature(type = StatementHandler.class, method = "batch", args = {Statement.class})
+})
+@Component
+public class LastSqlInterceptor implements Interceptor {
+    public String sqlContent;
+
+    //获取sql语句
+    @Override
+    public Object intercept(Invocation invocation) throws Throwable {
+        // 耗时开始时间
+        long startTime = System.currentTimeMillis();
+        // 获取 StatementHandler ,默认是 RoutingStatementHandler
+        StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
+        // 获取 StatementHandler 包装类
+        MetaObject metaObjectHandler = SystemMetaObject.forObject(statementHandler);
+        // 获取查询接口映射的相关信息
+        MappedStatement mappedStatement = (MappedStatement) metaObjectHandler.getValue("delegate.mappedStatement");
+        // 获取请求时的参数
+        Object parameterObject = statementHandler.getParameterHandler().getParameterObject();
+        // 获取sql
+        String sql = showSql(mappedStatement.getConfiguration(),  mappedStatement.getBoundSql(parameterObject));
+        // 获取执行sql方法
+        String sqlId = mappedStatement.getId();
+        // 执行sql
+        Object result = invocation.proceed();
+        // 计算总耗时
+        long cost = System.currentTimeMillis() - startTime;
+        System.out.println(" ======> SQL方法 : {} , 总耗时 : {}毫秒,  SQL语句 : {} "+ sqlId+"----"+cost+"----"+sql);
+        this.sqlContent = sql;
+        return result;
+    }
+
+
+    /**
+     * 拦截器对应的封装原始对象的方法,获取代理对象
+     */
+    @Override
+    public Object plugin(Object target) {
+        return (target instanceof StatementHandler) ? Plugin.wrap(target, this) : target;
+    }
+
+
+    /**
+     * 设置注册拦截器时设定的属性,设置代理对象的参数
+     */
+    @Override
+    public void setProperties(Properties properties) {
+    }
+
+
+    private static String showSql(Configuration configuration, BoundSql boundSql) {
+        // 获取参数
+        Object parameterObject = boundSql.getParameterObject();
+        List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
+        // sql语句中多个空格都用一个空格代替
+        String sql = boundSql.getSql().replaceAll("[\\s]+", " ");
+        if (CollectionUtils.isNotEmpty(parameterMappings) && parameterObject != null) {
+            // 获取类型处理器注册器,类型处理器的功能是进行java类型和数据库类型的转换
+            TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
+            // 如果根据parameterObject.getClass()可以找到对应的类型,则替换
+            if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
+                sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(parameterObject)));
+            } else {
+                // MetaObject主要是封装了originalObject对象,提供了get和set的方法用于获取和设置originalObject的属性值,主要支持对JavaBean、Collection、Map三种类型对象的操作
+                MetaObject metaObject = configuration.newMetaObject(parameterObject);
+                for (ParameterMapping parameterMapping : parameterMappings) {
+                    String propertyName = parameterMapping.getProperty();
+                    if (metaObject.hasGetter(propertyName)) {
+                        Object obj = metaObject.getValue(propertyName);
+                        sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(obj)));
+                    } else if (boundSql.hasAdditionalParameter(propertyName)) {
+                        // 该分支是动态sql
+                        Object obj = boundSql.getAdditionalParameter(propertyName);
+                        sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(obj)));
+                    } else {
+                        // 打印出缺失,提醒该参数缺失并防止错位
+                        sql = sql.replaceFirst("\\?", "缺失");
+                    }
+                }
+            }
+        }
+
+        return sql;
+    }
+
+
+    private static String getParameterValue(Object obj) {
+        String value;
+
+        if (obj instanceof String) {
+            value = "'" + obj.toString() + "'";
+        }
+        else if (obj instanceof Date) {
+            DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.CHINA);
+            value = "'" + formatter.format(new Date()) + "'";
+        }
+        else {
+            if (obj != null) {
+                value = obj.toString();
+            } else {
+                value = "";
+            }
+        }
+
+        return value;
+    }
+
+}

+ 387 - 3
src/main/java/com/welampiot/controller/AcDeviceController.java

@@ -1,5 +1,8 @@
 package com.welampiot.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.welampiot.common.BaseResult;
 import com.welampiot.common.InterfaceResultEnum;
 import com.welampiot.dto.AcDevInfoDTO;
@@ -7,17 +10,20 @@ import com.welampiot.service.AcDevInfoService;
 import com.welampiot.utils.ExcelUtil;
 import com.welampiot.utils.ToolUtils;
 import com.welampiot.vo.AcDevInfoVO;
+import jdk.nashorn.internal.runtime.Version;
+import org.apache.commons.collections4.Put;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.DigestUtils;
 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 javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 
 /**
  * ClassName: AcDeviceController
@@ -37,6 +43,10 @@ public class AcDeviceController {
     @Autowired
     private AcDevInfoService acDevInfoService;
 
+    //锐捷ap
+    private final static String appid = "macc2b6d2fd0fa71";
+    private final static String secret = "b3b5a0e09293424392ee5e39c4620e4f";
+    private final static String cookie = "username=033fc7838388kkdjee"; //随便
     /**
      * 获取AC的列表
      * @param request sectionList,page,count,keyword
@@ -185,4 +195,378 @@ public class AcDeviceController {
         }
         return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version);
     }
+    @RequestMapping(value = "getUserList",method = RequestMethod.POST)
+    public BaseResult<?> getUserList(HttpServletRequest request) {
+        Integer version = request.getParameter("version") == null ? 0 : Integer.parseInt(request.getParameter("version"));
+        Integer id = request.getParameter("id")== null ? 0 : Integer.parseInt(request.getParameter("id"));
+        if (id == 0) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR, version);
+
+        Integer page = request.getParameter("page") == null ? 1 : Integer.parseInt(request.getParameter("page"));
+        Integer count = request.getParameter("count") == null ? 16 : Integer.parseInt(request.getParameter("count"));
+        String action = request.getParameter("action");
+        String searchKey = request.getParameter("searchKey")  == null ? "" : request.getParameter("searchKey");;
+
+        AcDevInfoDTO acDevInfoDTO = acDevInfoService.getOneById(id);
+        AcDevInfoVO responeAc = new AcDevInfoVO();
+        responeAc.setStaNum(0);
+        List<AcDevInfoVO> acDevInfoVOList = new ArrayList<>();
+        responeAc.setStaList(acDevInfoVOList);
+
+        if (acDevInfoDTO.getType() == 0){
+            //云之声
+            String networkIP = acDevInfoDTO.getNetworkIP();
+            //获取随机码与登录
+            String loginResult = this.getPassword(networkIP);
+            if (loginResult.equals("获取随机码失败")){
+                return toolUtils.response(InterfaceResultEnum.AC_RAND_CODE_ERROR,version);
+            } else if (loginResult.equals("登录失败")) {
+                return toolUtils.response(InterfaceResultEnum.USER_LOGIN_ERROR,version);
+            }
+            String url = "http://"+networkIP+"/api/apmgr";
+            if (action == null) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version);
+            JSONObject body = new JSONObject();
+            body.put("action",action);
+            body.put("searchkey",searchKey);
+            body.put("numperpage",count);
+            body.put("pagenum",page);
+            try {
+                String respone = toolUtils.sendHttp("post",url,body.toString(),4, ToolUtils.ContentTypeEnum.CONTENT_TYPE_FORM,cookie);
+                if (respone == null || respone.contains("404 Not Found")){
+                    return toolUtils.response(InterfaceResultEnum.AC_CONFIG_ADDRESS_ERROR,version);
+                }else {
+                    JSONObject responeObject = JSON.parseObject(respone);
+                    Integer ret = responeObject.getInteger("ret");
+                   // AcDevInfoVO responeAc = new AcDevInfoVO();
+                    if (ret == 1){
+                        //数组
+                        JSONArray jsonArray = responeObject.getJSONArray("stalist");
+                        Integer staNum = responeObject.getInteger("stanum");
+                        //List<AcDevInfoVO> acDevInfoVOList = new ArrayList<>();
+                        for (Object value: jsonArray) {
+
+                            AcDevInfoVO acDevInfoVO = new AcDevInfoVO();
+                            JSONObject item =  (JSONObject) value;
+                            acDevInfoVO.setMacInfo(item.getString("macinfo"));
+                            acDevInfoVO.setRxRate(item.getLong("rx_rate"));
+                            acDevInfoVO.setTxRate(item.getLong("tx_rate"));
+                            acDevInfoVO.setRxPackets(item.getLong("rx_packets"));
+                            acDevInfoVO.setTxPackets(item.getLong("tx_packets"));
+                            acDevInfoVO.setLastTime(item.getString("lasttime"));
+                            acDevInfoVO.setApMac(item.getString("apmac"));
+                            acDevInfoVO.setMac(acDevInfoDTO.getAcAddress());
+                            acDevInfoVOList.add(acDevInfoVO);
+                        }
+                        responeAc.setStaNum(staNum);
+                        responeAc.setStaList(acDevInfoVOList);
+                        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,responeAc);
+                    }else {
+                        responeAc.setStaNum(0);
+                        //List<AcDevInfoVO> acDevInfoVOList = new ArrayList<>();
+                        responeAc.setStaList(acDevInfoVOList);
+                        return toolUtils.response(InterfaceResultEnum.AC_USER_LIST_ERROR,version,responeAc);
+                    }
+                }
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+
+        }else {
+            //锐捷
+            Date day = new Date();
+            SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
+            String currentDate = sdf.format(day);
+
+            Date date = null;
+            try {
+                date = sdf.parse(currentDate);
+            } catch (ParseException e) {
+                throw new RuntimeException(e);
+            }
+            long timestamp = date.getTime();
+            String[] oldDateArr = acDevInfoDTO.getUpdateTime().split(" ");
+            Date oldDate = null;
+            try {
+                oldDate = sdf.parse(oldDateArr[0]);
+            } catch (ParseException e) {
+                throw new RuntimeException(e);
+            }
+            long oldTimestamp = oldDate.getTime();
+
+            String networkIP = "https://api.cloud.ruijie.com.cn";
+            if (timestamp != oldTimestamp){
+                //获取token
+                String url = networkIP+"/oauth2/access_token?grant_type=client_credential&client_id="+appid+"&client_secret="+secret;
+                String respone = null;
+                try {
+                    respone = toolUtils.sendHttp("get",url,null,4, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
+//                AcDevInfoVO responeAc = new AcDevInfoVO();
+//                responeAc.setStaNum(0);
+//                List<AcDevInfoVO> acDevInfoVOList = new ArrayList<>();
+//                responeAc.setStaList(acDevInfoVOList);
+                if (respone == null){
+                    return toolUtils.response(InterfaceResultEnum.AC_GET_TOKEN_ERROR,version,responeAc);
+                }else {
+                    JSONObject tokeRespone = JSON.parseObject(respone);
+                    Integer code = tokeRespone.getInteger("code");
+                    if (code == 0){
+                        //成功
+                        String access_token = tokeRespone.getString("access_token");
+                        String refresh_token = tokeRespone.getString("refresh_token");
+                       SimpleDateFormat upSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                       String updateTime = upSdf.format(day);
+
+                        //更新数据
+                        AcDevInfoDTO acDevInfo = new AcDevInfoDTO();
+                        acDevInfo.setAccessToken(access_token);
+                        acDevInfo.setRefreshToken(refresh_token);
+                        acDevInfo.setUpdateTime(updateTime);
+                        acDevInfo.setId(id);
+                        acDevInfoService.updateByAcDevData(acDevInfo);
+                         /*1.获取到了token  OMxMalZpqxToW9n5oi7w4c5R5r7V9o5Y
+                           * 2. 获取用户
+                         */
+                        Object ruiJieUser = this.getRuiJieUserList(networkIP, access_token, page, count, acDevInfoDTO);
+                        if (ruiJieUser instanceof AcDevInfoVO){
+                            //成功
+                            responeAc = (AcDevInfoVO)ruiJieUser;
+                            return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,responeAc);
+                        }else {
+                          //不成功
+                            String errorCode = (String) ruiJieUser;
+                            if (errorCode.equals("0389")){
+                                //无效的令牌
+                                return toolUtils.response(InterfaceResultEnum.INVALID_TOKEN_ERROR,version,responeAc);
+                            }else {
+                                //刷新令牌失败
+                                return toolUtils.response(InterfaceResultEnum.AC_TOKEN_ERROR,version,responeAc);
+                            }
+
+                        }
+                    }
+                }
+            }else {
+                /*1.获取到了token  OMxMalZpqxToW9n5oi7w4c5R5r7V9o5Y
+                 * 2. 获取用户
+                 */
+                Object ruiJieUser = this.getRuiJieUserList(networkIP, acDevInfoDTO.getAccessToken(), page, count, acDevInfoDTO);
+                if (ruiJieUser instanceof AcDevInfoVO){
+                    //成功
+                    responeAc = (AcDevInfoVO)ruiJieUser;
+                    return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,responeAc);
+                }else {
+                    //不成功
+                    String errorCode = (String) ruiJieUser;
+                    if (errorCode.equals("0389")){
+                        //无效的令牌
+                        return toolUtils.response(InterfaceResultEnum.INVALID_TOKEN_ERROR,version,responeAc);
+                    }else {
+                        //刷新令牌失败
+                        return toolUtils.response(InterfaceResultEnum.AC_TOKEN_ERROR,version,responeAc);
+                    }
+                }
+            }
+        }
+
+        return toolUtils.response(InterfaceResultEnum.AC_USER_LIST_ERROR,version,responeAc);
+    }
+    private Object getRuiJieUserList(String networkIP,String access_token,Integer page,Integer count,AcDevInfoDTO acDevInfoDTO){
+        AcDevInfoVO responeAc = new AcDevInfoVO();
+        responeAc.setStaNum(0);
+        List<AcDevInfoVO> acDevInfoVOList = new ArrayList<>();
+        responeAc.setStaList(acDevInfoVOList);
+
+       String url = networkIP+"/sta/current_users?access_token="+access_token+"&page="+page+"&per_page="+count+"&sn="+acDevInfoDTO.getAcAddress();
+        String userRestult = null;
+        try {
+            userRestult = toolUtils.sendHttp("get",url,null,6, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        if (userRestult == null){
+            return "0703";
+            //return toolUtils.response(InterfaceResultEnum.AC_TOKEN_ERROR,version,responeAc);
+        }else {
+            JSONObject parseObject = JSON.parseObject(userRestult);
+            Integer reCode = parseObject.getInteger("code");
+            if (reCode == 0) {
+                //成功
+                Integer total = parseObject.getInteger("count");
+                JSONArray jsonArray = parseObject.getJSONArray("list");
+                //List<AcDevInfoVO> userList = new ArrayList<>();
+                for (Object value : jsonArray) {
+                    AcDevInfoVO acDevInfoVO = new AcDevInfoVO();
+                    JSONObject item = (JSONObject) value;
+                    String mac = item.getString("mac");
+                    if (mac == null) {
+                        acDevInfoVO.setMac("");
+                    } else {
+                        acDevInfoVO.setMac(mac);
+                    }
+                    String macinfo = item.getString("manufacture");
+                    if (macinfo == null) {
+                        acDevInfoVO.setMacInfo("");
+                    } else {
+                        acDevInfoVO.setMacInfo(macinfo);
+                    }
+                    acDevInfoVO.setRxRate(item.getLong("uplinkRate"));
+                    acDevInfoVO.setTxRate(item.getLong("downlinkRate"));
+                    acDevInfoVO.setRxPackets(item.getLong("wifiUp"));
+                    acDevInfoVO.setTxPackets(item.getLong("wifiDown"));
+                    acDevInfoVO.setVlan("");
+                    String radio = item.getString("capability");
+                    if (radio == null) {
+                        acDevInfoVO.setRadio("");
+                    } else {
+                        acDevInfoVO.setRadio(radio);
+                    }
+                    String signal = item.getString("rssi");
+                    if (signal == null) {
+                        acDevInfoVO.setSignal("");
+                    } else {
+                        acDevInfoVO.setSignal(signal);
+                    }
+                    acDevInfoVO.setLastTime("");
+                    acDevInfoVO.setApMac("");
+                    String ssid = item.getString("ssid");
+                    if (ssid == null) {
+                        acDevInfoVO.setSsid("");
+                    } else {
+                        acDevInfoVO.setSsid(ssid);
+                    }
+                    String deviceAliasName = item.getString("deviceAliasName");
+                    if (deviceAliasName == null) {
+                        acDevInfoVO.setName("");
+                    } else {
+                        acDevInfoVO.setName(deviceAliasName);
+                    }
+                    acDevInfoVOList.add(acDevInfoVO);
+                }
+                responeAc.setStaNum(total);
+                responeAc.setStaList(acDevInfoVOList);
+                return responeAc;
+                //return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,responeAc);
+            } else {
+                //无效的token
+                return "0389";
+            }
+        }
+    }
+    //get/post的请求
+    private String getPassword(String networkIP){
+        Random random = new Random();
+        int min = 10000;
+        int max = 99999999;
+        Integer randcode = random.nextInt(max-min) + min;
+        String url = "http://"+networkIP+"/api/login?randtime="+randcode;
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("randtime",randcode);
+        try {
+            //获取随机码
+            String respone = toolUtils.sendHttp("get", url, jsonObject.toString(), 4, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
+            if (respone == null){
+                return "获取随机码失败";
+            }else {
+                JSONObject responeObject = JSON.parseObject(respone);
+                Integer ret = responeObject.getInteger("ret");
+                if (ret == 1){
+                    String msg = responeObject.getString("msg");
+                    //登录 - post
+                    url = "http://"+networkIP+"/api/login";
+                    //帐号: admin , 密码: changemeplease
+
+                    String pwdMd5 = DigestUtils.md5DigestAsHex("changemeplease".getBytes()); //md5加密
+                    String joinCode = DigestUtils.md5DigestAsHex((pwdMd5+msg).getBytes()); //md5加密
+
+                    JSONObject body = new JSONObject();
+                   body.put("loginid","admin");
+                   body.put("passwd",joinCode);
+
+                  String passJson =  toolUtils.sendHttp("post",url,body.toString(),4, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,cookie);
+                  if (passJson == null){
+                      return "登录失败";
+                  }else {
+                      JSONObject passObject = JSON.parseObject(passJson);
+                      Integer passRet = passObject.getInteger("ret");
+                      if (passRet == 1){
+                          return "登录成功";
+                      }else {
+                          return "登录失败";
+                      }
+                  }
+
+                }else {
+                    return "获取随机码失败";
+                }
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+//    private function initCul()
+//    {
+//        //$this->initCul();
+//
+//        //初始化
+//        $this->curl = curl_init();
+//        $content = $this->getRandCode();
+//
+//        if (empty($content)) return '1604'; //获取随机码失败
+//        $code = json_decode($content,true);
+//        //获取密码
+//        $this->getPassword($code['msg']);
+//        if (empty($this->result)) return '1908'; //登录失败
+//
+//    }
+//    //获取密码
+//    private function getPassword($code){
+//
+//        $this->url = 'http://'.$this->networkIP.'/api/login';
+//
+//        $this->header = array(
+//                'Content-Type: application/x-www-form-urlencoded'
+//        );
+//        //帐号: admin , 密码: changemeplease
+//        $pwdMd5 = md5('changemeplease');
+//        $joinCode = md5($pwdMd5.$code);
+//
+//        $body = array('loginid'=>'admin','passwd'=>$joinCode);
+//
+//        //发送json
+//        //$data = json_encode($body, true);
+//        $cookieSuccess = dirname(__FILE__)."/cookie.tmp";
+//
+//        curl_setopt($this->curl, CURLOPT_COOKIEJAR, $cookieSuccess);
+//        //发送请求
+//        $this->result = $this->curlSendCmd($body,'POST');
+//
+//    }
+//
+//    //获取随机码 - get请求
+//    private function getRandCode(){
+//        $randcode = rand(10000,99999999);
+//
+//        $this->url = 'http://'.$this->networkIP.'/api/login?randtime='.$randcode;
+//
+//        //1.创建一个新cURL资源
+//        $this->curl = curl_init();
+//
+//        //设置抓取的url
+//        curl_setopt($this->curl, CURLOPT_URL, $this->url);
+//        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
+//        curl_setopt($this->curl, CURLOPT_HEADER, 0);
+//
+//        //设置超时时间
+//        curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 0);
+//        curl_setopt($this->curl, CURLOPT_TIMEOUT, 3); //timeout in seconds
+//
+//
+//        //执行命令
+//        $data = curl_exec($this->curl);
+//
+//        return $data;
+//
+//    }
 }

+ 94 - 91
src/main/java/com/welampiot/controller/AlarmController.java

@@ -81,8 +81,8 @@ public class AlarmController {
         Integer version = (Integer) toolUtils.getRequestContent(request,"version",1);
         Integer status = (Integer) toolUtils.getRequestContent(request,"status",1);
         Integer devType = (Integer) toolUtils.getRequestContent(request,"devType",1);
-        Integer areaId = (Integer) toolUtils.getRequestContent(request,"areaId",1);
-        Integer sectionId = (Integer) toolUtils.getRequestContent(request,"sectionId",1);
+        Integer areaId =  request.getParameter("areaId") == null ? 0 : Integer.valueOf(request.getParameter("areaId"));
+        Integer sectionId =  request.getParameter("sectionId") == null ? 0 : Integer.valueOf(request.getParameter("sectionId"));
         Integer download = (Integer) toolUtils.getRequestContent(request,"download",1);
         int page = request.getParameter("page") == null ? 1 : Integer.parseInt(request.getParameter("page"));
         int count = request.getParameter("count") == null ? 16 : Integer.parseInt(request.getParameter("count"));
@@ -95,7 +95,11 @@ public class AlarmController {
         allAlarmInfoLogVO.setKeyword(keyword);
         allAlarmInfoLogVO.setAreaId(areaId);
         allAlarmInfoLogVO.setSectionId(sectionId);
-        allAlarmInfoLogVO.setSectionList(toolUtils.getSectionList(request));
+        if (sectionId == 0){
+            allAlarmInfoLogVO.setSectionList(toolUtils.getSectionList(request));
+        }else {
+            allAlarmInfoLogVO.setSectionId(sectionId);
+        }
         if (download == 0) {
             allAlarmInfoLogVO.setOffset(count * (page - 1));
             allAlarmInfoLogVO.setLimit(count);
@@ -240,6 +244,28 @@ public class AlarmController {
         allAlarmInfoLogDTO.setId(alarmId);
         allAlarmInfoLogDTO.setStatus(2);
         allAlarmInfoLogService.updateAlarmStatusByAlarmId(allAlarmInfoLogDTO);
+        //维修记录
+        RepairDispatchVO repairDispatchVO = new RepairDispatchVO();
+        repairDispatchVO.setAlarmId(alarmId);
+        repairDispatchVO.setVersion(version);
+        RepairDispatchDTO repairDispatchDTO = repairDispatchService.getRepairDispatchMultiJoinByVO(repairDispatchVO);
+        if (repairDispatchDTO != null && repairDispatchDTO.getRepairUserId() != null){
+            repairDispatchDTO.setAlarmId(alarmId);
+            Date date = new Date();
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String time = dateFormat.format(date);
+            repairDispatchDTO.setRepairTime(time);
+            if (version == 1){
+                //英语
+                String alarmType = toolUtils.changeAlarm(repairDispatchDTO.getAlarmType());
+                repairDispatchDTO.setAlarmType(alarmType);
+            } else if (version == 2) {
+                String alarmType = toolUtils.changeAlarmRu(repairDispatchDTO.getAlarmType());
+                repairDispatchDTO.setAlarmType(alarmType);
+            }
+            repairInfoService.addData(repairDispatchDTO);
+        }
+
         return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version);
     }
 
@@ -252,10 +278,17 @@ public class AlarmController {
     public BaseResult<?> data(HttpServletRequest request) {
         int version = (int) toolUtils.getRequestContent(request,"version",1);
         AllAlarmInfoLogVO allAlarmInfoLogVO = new AllAlarmInfoLogVO();
-        allAlarmInfoLogVO.setSectionList(toolUtils.getSectionList(request));
         AllAlarmInfoLogVO allAlarmInfoLogVO1 = new AllAlarmInfoLogVO();
-        allAlarmInfoLogVO1.setUnTreatedCount(allAlarmInfoLogService.getUnTreatedCountByStatus(allAlarmInfoLogVO));
-        allAlarmInfoLogVO1.setProcessingCount(allAlarmInfoLogService.getProcessingCountByStatus(allAlarmInfoLogVO));
+        UserDTO user = toolUtils.getUser(request);
+        Integer role = user.getRole();
+        if (role != ToolUtils.SYSTEM_ADMIN){
+            //不是超级用户
+            allAlarmInfoLogVO.setSectionList(toolUtils.getSectionList(request));
+        }
+//        allAlarmInfoLogVO1.setUnTreatedCount(allAlarmInfoLogService.getUnTreatedCountByStatus(allAlarmInfoLogVO));
+//        allAlarmInfoLogVO1.setProcessingCount(allAlarmInfoLogService.getProcessingCountByStatus(allAlarmInfoLogVO));
+        allAlarmInfoLogVO1.setHandling(allAlarmInfoLogService.getProcessingCountByStatus(allAlarmInfoLogVO));
+        allAlarmInfoLogVO1.setUnAssigned(allAlarmInfoLogService.getUnTreatedCountByStatus(allAlarmInfoLogVO));
         allAlarmInfoLogVO1.setHandleCount(allAlarmInfoLogService.getHandleCountByStatus(allAlarmInfoLogVO));
         allAlarmInfoLogVO1.setTotal(allAlarmInfoLogService.getAlarmTotalByStatus(allAlarmInfoLogVO));
         return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,allAlarmInfoLogVO1);
@@ -269,8 +302,8 @@ public class AlarmController {
     @RequestMapping(value = "/history", method = RequestMethod.POST)
     public BaseResult<?> history(HttpServletRequest request) {
         Integer version = (Integer) toolUtils.getRequestContent(request,"version",1);
-        Integer areaId = (Integer) toolUtils.getRequestContent(request,"areaId",1);
-        Integer sectionId = (Integer) toolUtils.getRequestContent(request,"sectionId",1);
+        Integer areaId =  request.getParameter("areaId") == null ? 0 : Integer.valueOf(request.getParameter("areaId"));
+        Integer sectionId =  request.getParameter("sectionId") == null ? 0 : Integer.valueOf(request.getParameter("sectionId"));
         Integer download = (Integer) toolUtils.getRequestContent(request,"download",1);
         String keyword = (String) toolUtils.getRequestContent(request,"keyword",2);
         Integer devType = (Integer) toolUtils.getRequestContent(request,"devType",1);
@@ -278,11 +311,14 @@ public class AlarmController {
         int count = request.getParameter("count") == null ? 16 : Integer.parseInt(request.getParameter("count"));
 
         AllAlarmInfoLogVO vo = new AllAlarmInfoLogVO();
-        vo.setSectionId(sectionId);
         vo.setAreaId(areaId);
         vo.setKeyword(keyword);
         vo.setVersion(version);
-        vo.setSectionList(toolUtils.getSectionList(request));
+        if (sectionId == 0){
+            vo.setSectionList(toolUtils.getSectionList(request));
+        }else {
+            vo.setSectionId(sectionId);
+        }
         if (download == 0) {
             vo.setLimit(count * (page - 1));
             vo.setOffset(count);
@@ -411,44 +447,13 @@ public class AlarmController {
         Integer version = (Integer) toolUtils.getRequestContent(request,"version",1);
         Integer id = (Integer) toolUtils.getRequestContent(request,"id",1);
         if (id == 0) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version);
-        AllAlarmInfoLogDTO alarmDTO = allAlarmInfoLogService.getAlarmInfoDTOById(id,version);
-        if (alarmDTO == null) return toolUtils.response(InterfaceResultEnum.PARAM_FAIL,version);
-        AlarmRepairInfoVO alarmRepairInfoVO = new AlarmRepairInfoVO();
-        alarmRepairInfoVO.setArea(alarmDTO.getArea());
-        alarmRepairInfoVO.setSection(alarmRepairInfoVO.getSection());
-        alarmRepairInfoVO.setAlarmType(alarmRepairInfoVO.getAlarmType());
-        if (alarmDTO.getStatus() == 0) {
-            alarmRepairInfoVO.setAlarmStatus("未完成");
-        } else if (alarmDTO.getStatus() == 1) {
-            alarmRepairInfoVO.setAlarmStatus("处理中");
-        } else  {
-            alarmRepairInfoVO.setAlarmStatus("已完成");
-        }
-        RepairDispatchDTO repairDispatchDTO = repairDispatchService.getRepairDispatchByAlarmId(alarmDTO.getId());
-        RepairInfoDTO repairInfoDTO = repairInfoService.getRepairInfoDTOByAlarmId(alarmDTO.getId());
-        if (repairInfoDTO == null || repairDispatchDTO == null)
-            return toolUtils.response(InterfaceResultEnum.PARAM_FAIL,version);
-        alarmRepairInfoVO.setRepairUser(repairInfoDTO.getRepairTime());
-        alarmRepairInfoVO.setRepairUser(repairInfoDTO.getUsername());
-        alarmRepairInfoVO.setDispatchTime(repairDispatchDTO.getUpdateTime());
-        if (alarmDTO.getDevType() == 0) { // 路灯
-            LampInfoDTO lampInfoDTO = lampService.getLampInfoDTOById(alarmDTO.getLampId());
-            alarmRepairInfoVO.setNumber(lampInfoDTO.getNumber());
-        } else if (alarmDTO.getDevType() == 1) { // 灯杆
-            LampPoleDTO lampPoleDTO = lampPoleService.getLampPoleDTOById(alarmDTO.getLampId());
-            alarmRepairInfoVO.setNumber(lampPoleDTO.getNumber());
-        } else if (alarmDTO.getDevType() == 2) { // 井盖
-            ManholeDTO manholeDTO = manholeService.getManholeDTOById(alarmDTO.getLampId());
-            alarmRepairInfoVO.setNumber(manholeDTO.getAddress());
-        } else if (alarmDTO.getDevType() == 3) { // 水浸
-            WaterImmersionDevInfoDTO waterDTO = waterImmersionDevInfoService.getWaterDTOById(alarmDTO.getLampId());
-            alarmRepairInfoVO.setNumber(waterDTO.getNumber());
-        } else if (alarmDTO.getDevType() == 4) { // 配电箱
-            ElectricBoxDTO electricBoxDTO = electricBoxService.getDetailsById(alarmDTO.getLampId());
-            alarmRepairInfoVO.setNumber(electricBoxDTO.getAddress());
+        RepairInfoDTO repairInfo = repairInfoService.getRepairInfoById(id);
+        if (repairInfo == null){
+            return toolUtils.response(InterfaceResultEnum.REPAIR_INFOR_ERROR,version);
+        }else {
+            return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,repairInfo);
         }
-        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,alarmRepairInfoVO);
-    }
+     }
 
     /**
      * 维修人
@@ -458,12 +463,14 @@ public class AlarmController {
     @RequestMapping(value = "/repairUser", method = RequestMethod.POST)
     public BaseResult<?> repairUser(HttpServletRequest request) {
         Integer version = (Integer) toolUtils.getRequestContent(request,"version",1);
+        //维修信息的id
         Integer id = (Integer) toolUtils.getRequestContent(request,"id",1);
         if (id == 0) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version);
         RepairInfoDTO dto = repairInfoService.getRepairInfoDTOByAlarmId(id);
         if (dto == null) return toolUtils.response(InterfaceResultEnum.PARAM_FAIL,version);
-        RepairPersonnelDetailsVO vo = repairPersonnelService.getDetailsByRepairPersonnelDTO(dto.getRepairUserid());
-        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,vo);
+        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,dto);
+//        RepairPersonnelDetailsVO vo = repairPersonnelService.getDetailsByRepairPersonnelDTO(dto.getRepairUserId());
+//        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,vo);
     }
 
     /**
@@ -474,9 +481,11 @@ public class AlarmController {
     @RequestMapping(value = "/del", method = RequestMethod.POST)
     public BaseResult<?> del(HttpServletRequest request) {
         Integer version = (Integer) toolUtils.getRequestContent(request,"version",1);
-        Integer id = (Integer) toolUtils.getRequestContent(request,"id",1);
-        if (id == 0) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version);
-        allAlarmInfoLogService.deleteAlarmData(id);
+        //Integer id = (Integer) toolUtils.getRequestContent(request,"id",1);
+       String id = request.getParameter("id");
+       if (id == null ) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version);
+        String[] ids = id.split(",");
+        allAlarmInfoLogService.deleteAlarmData(ids);
         return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version);
     }
 
@@ -488,50 +497,44 @@ public class AlarmController {
     @RequestMapping(value = "/alarmNav", method = RequestMethod.POST)
     public BaseResult<?> alarmNav(HttpServletRequest request) {
         Integer version = (Integer) toolUtils.getRequestContent(request,"version",1);
-        String username = (String) toolUtils.getRequestContent(request,"username",2);
-        if (username.length() == 0) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version);
-        UserDTO userDTO = userService.getPrivilegeList(username);
-        if (userDTO == null) return toolUtils.response(InterfaceResultEnum.PARAM_FAIL,version);
-        GlobalLocationVO globalLocationVO = new GlobalLocationVO();
-        globalLocationVO.setList(new ArrayList<>());
-        if (userDTO.getZoneList() == null || userDTO.getZoneList().isEmpty()) {
-            return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,globalLocationVO);
+        UserDTO user = toolUtils.getUser(request);
+        List<SectionDTO> allList = null;
+        SectionDTO sectionDTO = new SectionDTO();
+        if (user.getRole() == ToolUtils.SYSTEM_ADMIN){
+            //超级用户(id,pid)
+             allList = sectionService.getAllList(sectionDTO);
+        }else {
+            List sectionList = toolUtils.getSectionList(request);
+            sectionDTO.setSectionList(sectionList);
+            allList = sectionService.getAllList(sectionDTO);
         }
+        List<GlobalLocationDTO> globalList = new ArrayList<>();
+        if (allList == null) return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,globalList);
 
-        List<String> zones = Arrays.asList(userDTO.getZoneList().split(","));
-        List<SectionDTO> list2;
-        List<GlobalLocationDTO> areaList = globalLocationService.getGlobalList(4, version);
-        List<SectionDTO> sectionList = sectionService.getListByIdList(zones);
-        List<GlobalLocationDTO> countryOfSectionList = globalLocationService.getCountryOfSectionList(1, version);
-        List<GlobalLocationDTO> provinceOfSectionList = globalLocationService.getCountryOfSectionList(2, version);
-        List<GlobalLocationDTO> cityOfSectionList = globalLocationService.getCountryOfSectionList(3, version);
-        areaList = Stream.of(areaList, countryOfSectionList, provinceOfSectionList, cityOfSectionList)
-                .flatMap(Collection::stream)
-                .collect(Collectors.toList());
-
-        List<GlobalLocationDTO> newAreaList = new ArrayList<>();
-        for (GlobalLocationDTO g : areaList) {
-            list2 = new ArrayList<>();
-            boolean isFlag = false;
-            for (SectionDTO s : sectionList) {
-                if (Objects.equals(g.getId(),s.getPid())) {
-                    list2.add(s);
-                    isFlag = true;
+        //获取pid,并去重
+        Set<Integer> pidList = new HashSet<>();
+        for (SectionDTO item: allList) {
+            pidList.add(item.getPid());
+        }
+        //转换成list
+        ArrayList<Integer> integers = new ArrayList<>(pidList);
+        //查询区域的名称
+        GlobalLocationDTO globalLocationDTO = new GlobalLocationDTO();
+        globalLocationDTO.setVersion(version);
+        globalLocationDTO.setPidList(integers);
+        List<GlobalLocationDTO> areaList = globalLocationService.getAreaList(globalLocationDTO);
+        for (GlobalLocationDTO item : areaList) {
+            ArrayList<SectionDTO> sectionList = new ArrayList<>();
+            for (SectionDTO section: allList) {
+                if (item.getId().equals(section.getPid())){
+                    sectionList.add(section);
                 }
             }
-            if (isFlag) {
-                GlobalLocationDTO dto = new GlobalLocationDTO();
-                dto.setId(g.getId());
-                dto.setPid(g.getPid());
-                dto.setName(g.getName());
-                dto.setSectionList(list2);
-                newAreaList.add(dto);
-            }
+            item.setSectionList(sectionList);
+            globalList.add(item);
         }
-
-        globalLocationVO.setList(newAreaList);
-        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,globalLocationVO);
-    }
+        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,globalList);
+     }
 
     /**
      * 推送人员列表

+ 308 - 138
src/main/java/com/welampiot/controller/LampController.java

@@ -7,10 +7,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.welampiot.common.BaseResult;
 import com.welampiot.common.InterfaceResultEnum;
-import com.welampiot.configuration.FreqConfig;
-import com.welampiot.configuration.FreqMapConfig;
-import com.welampiot.configuration.QuHuiPlc;
-import com.welampiot.configuration.ZhongLightPlc;
+import com.welampiot.configuration.*;
 import com.welampiot.dto.*;
 import com.welampiot.service.*;
 import com.welampiot.utils.AESUtils;
@@ -47,6 +44,7 @@ import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @RestController
 @CrossOrigin
@@ -84,6 +82,8 @@ public class LampController {
     private FreqMapConfig freqMapConfig;
     @Autowired
     private JwtUtil jwtUtil;
+    @Autowired
+    private LastSqlInterceptor lastSqlInterceptor; //获取sql语句
     /**
      * 灯控列表
      * @param request
@@ -151,12 +151,11 @@ public class LampController {
         LampInfoDTO detailsById = lampService.getDetailsById(lampId,version);
         return BaseResult.success(detailsById);
     }
-//    @RequestMapping(value = "/getkk",method = RequestMethod.POST)
-//public Integer kk(HttpServletRequest request){
-//        UserDTO user = toolUtils.getUser(request);
-//        System.out.println("===dd===:"+user);
-//        return user.getId();
-//}
+    @RequestMapping(value = "/getkk", method = RequestMethod.POST)
+    public Integer kk(HttpServletRequest request) {
+        toolUtils.addOpertaionLog(request,null,null,null,null,null,null,null,null,null,null,null,null,null);
+        return 0;
+    }
     /**
      * 添加编辑灯控
      * @param request
@@ -233,6 +232,9 @@ public class LampController {
                 this.savePlcAddress(macAddress,sn);
             }
         }
+        String groupId = request.getParameter("groupId");
+        String lampPoleId = request.getParameter("lampPoleId");
+
         Date day = new Date();
         SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String updateTime = sdf.format(day);
@@ -245,18 +247,26 @@ public class LampController {
             lampInfo.setSectionId(sectionId);
             lampInfo.setNumber(number);
 
-            Integer byVO = lampService.findByVO(lampInfo);
-            if (byVO > 0) return toolUtils.response(InterfaceResultEnum.NUMBER_EXIST_ERROR,version);
+            //若两灯的,只添加其中一个的就要判断了
+//            Integer byVO = lampService.findByVO(lampInfo);
+//            if (byVO > 0) return toolUtils.response(InterfaceResultEnum.NUMBER_EXIST_ERROR,version);
             lampInfo.setSectionId(null);
             lampInfo.setNumber(null);
             lampInfo.setAddress(sn);
             NetworkDTO networkData = new NetworkDTO();
             //同一个plc下不允许有相同的序号/相同灯的地址
             Integer header = 0; //灯头:0代表没,1代表灯头1,2代表灯头2
-            Integer plcNetCount = 0; //0:没有创建 ,1: 创建过了
+            Integer plcNetCount = 0; //网关, 0:没有创建 ,1: 创建过了
             if (protocolType == 11 && controlType != 26 && controlType != 27){
+                String otherDevAddr = ""; //另外一个
                 lampInfo.setMacAddress(macAddress);
                 if (controlType == 4 || controlType == 11 || controlType == 12 || controlType == 14 ){
+                    //同一个路段下编号不允相同
+                    LampInfoDTO newLamp = new LampInfoDTO();
+                    newLamp.setNumber(number);
+                    newLamp.setSectionId(sectionId);
+                    Integer byVO = lampService.findByVO(newLamp);
+                    if (byVO > 0) return toolUtils.response(InterfaceResultEnum.NUMBER_EXIST_ERROR,version);
                     //单灯的情况下是不允许有重复地址的
                     //灯地址
                     Integer macAddressTotal = lampService.checkData(lampInfo);
@@ -269,18 +279,44 @@ public class LampController {
                         return toolUtils.response(InterfaceResultEnum.PLC_ADDRESS_EXIST_ERROR,version);
                     }else {
                         //不存在或只存在一个灯头
-                        if (dtoList != null){
+                        if (dtoList != null && dtoList.size() == 1){
                             //存在一个灯头
                             header = dtoList.get(0).getMode() + 1;
+                            otherDevAddr = dtoList.get(0).getDevAddr();
+                        }else {
+                            //同一个路段下编号不允相同
+                            LampInfoDTO newLamp = new LampInfoDTO();
+                            newLamp.setNumber(number);
+                            newLamp.setSectionId(sectionId);
+                            Integer byVO = lampService.findByVO(newLamp);
+                            if (byVO > 0) return toolUtils.response(InterfaceResultEnum.NUMBER_EXIST_ERROR,version);
                         }
                     }
                 }
                 //灯序号
-                lampInfo.setMacAddress(null);
-                lampInfo.setDevAddr(devAddr);
-                Integer devAddrTotal = lampService.checkData(lampInfo);
-                if (devAddrTotal > 0) return toolUtils.response(InterfaceResultEnum.PLC_SERIAL_NUMBER_EXIST_ERROR,version);
-                lampInfo.setMacAddress(macAddress);
+                if (header == 0){
+                    lampInfo.setMacAddress(null);
+                    lampInfo.setDevAddr(devAddr);
+                    Integer devAddrTotal = lampService.checkData(lampInfo);
+                    if (devAddrTotal > 0) return toolUtils.response(InterfaceResultEnum.PLC_SERIAL_NUMBER_EXIST_ERROR,version);
+                    lampInfo.setMacAddress(macAddress);
+                }else {
+                    //双灯只添加其中一个
+                    if (!devAddr.equals(otherDevAddr)){
+                       //跟原来的不一样
+                        return toolUtils.response(InterfaceResultEnum.PLC_SERIAL_NUMBER_SAME__ERROR,version);
+                    }else {
+                        lampInfo.setDevAddr(devAddr);
+                    }
+                }
+
+            }else {
+                //同一个路段下编号不允相同
+                LampInfoDTO newLamp = new LampInfoDTO();
+                newLamp.setNumber(number);
+                newLamp.setSectionId(sectionId);
+                Integer byVO = lampService.findByVO(newLamp);
+                if (byVO > 0) return toolUtils.response(InterfaceResultEnum.NUMBER_EXIST_ERROR,version);
             }
             if (protocolType == 13 || controlType == 26 || controlType == 27){
                 lampInfo.setMacAddress(macAddress);
@@ -300,20 +336,22 @@ public class LampController {
                 lampInfo.setNetworkId(network.getId());
             }
             Integer checkAddressTotal = lampService.checkData(lampInfo);
+
             if (protocolType != 11 && protocolType != 5 && protocolType != 13 && checkAddressTotal > 0){
+
                 LampInfoDTO dataByVO = lampService.getDataByVO(lampInfo);
                 //section
                 SectionDTO sectionDTO = new SectionDTO();
-                sectionDTO.setId(dataByVO.getId());
+                sectionDTO.setId(dataByVO.getSectionId());
                 sectionDTO= sectionService.getDataByVO(sectionDTO);
                 //location
                 GlobalLocationDTO areaData = new GlobalLocationDTO();
                 areaData.setId(sectionDTO.getPid());
                 areaData = globalLocationService.getDataByDto(areaData);
 
-                String chinaMsg = "无线地址已存在,区域: "+areaData.getChineseName()+"-->路段:"+sectionDTO.getName()+"-->路灯编号:"+lampInfo.getNumber();
-                String engMsg = "The wireless address already exists,area: "+areaData.getEnglishName()+"-->section:"+sectionDTO.getName()+"-->number:"+lampInfo.getNumber();
-                String ruMsg = "Беспроводной адрес уже существует,область: "+areaData.getRuName()+"-->участок дороги:"+sectionDTO.getName()+"-->Номер фонаря:"+lampInfo.getNumber();
+                String chinaMsg = "无线模块地址已存在,区域: "+areaData.getChineseName()+"-->路段:"+sectionDTO.getName()+"-->路灯编号:"+dataByVO.getNumber();
+                String engMsg = "The wireless address already exists,area: "+areaData.getEnglishName()+"-->section:"+sectionDTO.getName()+"-->number:"+dataByVO.getNumber();
+                String ruMsg = "Беспроводной адрес уже существует,область: "+areaData.getRuName()+"-->участок дороги:"+sectionDTO.getName()+"-->Номер фонаря:"+dataByVO.getNumber();
                 if (version == 0){
                     String code = "0403";
                     if (version == 0){
@@ -328,20 +366,21 @@ public class LampController {
                     }
                 }
             }
+
             lampInfo.setBindStatus(bindStatus);
-            String netAddress = "";
+            //String netAddress = "";
             if (protocolType == 0 || protocolType == 3 || protocolType == 4 || protocolType == 5 || protocolType == 6 || protocolType == 7 || protocolType == 8 || protocolType == 9 || protocolType == 10 || protocolType == 11 || protocolType == 13){
                 lampInfo.setNetType(1);
                 //直连设备
                 if (protocolType == 11 || protocolType == 5){
-                    netAddress = sn;
+                    //netAddress = sn;
                     //plc下有单灯控制器和双灯控制器
                     lampInfo.setBindStatus(0);
                 }else {
-                    netAddress = sn.length() == 13 ? String.valueOf(Integer.parseInt(sn,10)) : sn;
+                    sn = sn.length() == 13 ? String.valueOf(Integer.parseInt(sn,10)) : sn;
                 }
                 //networkData = new NetworkDTO();
-                networkData.setDeviceSn(netAddress);
+                networkData.setDeviceSn(sn);
                 NetworkDTO simpleData = networkService.getSimpleData(networkData);
                 //zigbee设备 plc
                 if (protocolType == 5 && controlType == 13){
@@ -363,6 +402,7 @@ public class LampController {
                            //成功
                          lampInfo.setLampCtrId(((ZhongLightPlcVO)lightObject).getLampCtrlId());
                          lampInfo.setUid(((ZhongLightPlcVO)lightObject).getUid());
+                         lampInfo.setBindStatus(1);
                        }
                    }
                 }
@@ -391,7 +431,7 @@ public class LampController {
                 if (protocolType == 8 && (controlType == 29 || controlType == 33 || controlType == 19)) networkData.setDeviceType(4);
                 if (protocolType == 3 && controlType == 9) networkData.setDeviceType(4);
                 if (controlType == 16 || controlType == 20) networkData.setDeviceType(5);
-                networkData.setNetworkName(netAddress);
+                networkData.setNetworkName(sn);
                 networkData.setNetType(1);
                 networkData.setCreateTime(updateTime);
                 networkData.setUserId(userId);
@@ -427,8 +467,8 @@ public class LampController {
                             JSONObject parseObject = JSON.parseObject(result);
                             Integer code = parseObject.getInteger("code");
                             if (code == 200){
-                                Integer networkId = networkService.add(networkData);
-                                lampInfo.setNetworkId(networkId);
+                                networkService.add(networkData);
+                                lampInfo.setNetworkId(networkData.getId());
                             } else  {
                                 String msg = parseObject.getString("msg");
                                 BaseResult<Object> objectBaseResult = new BaseResult<>(code.toString(), msg, new Object());
@@ -437,8 +477,8 @@ public class LampController {
                         }
                     }else {
                         //力合微 plc
-                        Integer networkId = networkService.add(networkData);
-                        lampInfo.setNetworkId(networkId);
+                         networkService.add(networkData);
+                        lampInfo.setNetworkId(networkData.getId());
                     }
                 }else {
                     NetworkDTO network =  networkService.getSimpleData(networkData);
@@ -450,13 +490,13 @@ public class LampController {
                     networkData.setProtocolType(protocolType);
                     networkData.setAreaId(areaId);
                     networkData.setSectionId(sectionId);
-                    networkData.setDeviceSn(netAddress);
-                    networkData.setNetworkName(netAddress);
+                    networkData.setDeviceSn(sn);
+                    networkData.setNetworkName(sn);
                     networkData.setNetType(1);
                     networkData.setCreateTime(updateTime);
                 }
-                Integer networkId =  networkService.add(networkData);
-                lampInfo.setNetworkId(networkId);
+                networkService.add(networkData);
+                lampInfo.setNetworkId(networkData.getId());
             }
             SectionDTO sectionDTO = new SectionDTO();
             sectionDTO.setId(sectionId);
@@ -468,101 +508,176 @@ public class LampController {
 
             lampInfo.setCreateTime(updateTime);
             //添加plc控制器节点 - 启慧
-            if (protocolType == 11 && (controlType == 11 || controlType == 12 || controlType == 14)){
+            if (protocolType == 11 && (controlType == 11 || controlType == 12 || controlType == 14)) {
                 String url = "childnode/deviceRegister";
-//                $nodeType = $this->selectNodeType($data['ratedpower']);
+                String nodeType = this.selectNodeType(power);
+                if (nodeType == null || nodeType.length() == 0) return toolUtils.response(InterfaceResultEnum.POWER_SELECT_ERROR,version);
+                JSONObject qiObject = new JSONObject();
+                if (groupId != null && groupId.length() != 0){
+                    String[] groupIds = groupId.split(",");
+                    List<GroupDTO> list = groupService.getListByIds(groupIds);
+                    //有分组 (只有: 1- 255)
+                    for (GroupDTO item:list) {
+                        Integer groupNumber = Integer.parseInt(item.getNumber());
+                        if (groupNumber < 1 || groupNumber > 255){
+                            //分组没有在规定的范围内
+                            return toolUtils.response(InterfaceResultEnum.GROUP_NUMBER_RAND_ERROR,version);
+                        }else {
+                            //注意:nodeId是12位数的,不够时,前面补0
+                            String nodeId = "";
+                            String zero = "";
+                            if (macAddress.length() <= 12){
+                                for (int i = 0; i < 12 - macAddress.length();i++){
+                                    zero += "0";
+                                }
+                                nodeId = zero+macAddress;
+                            }else {
+                                //大于12位数了
+                                return toolUtils.response(InterfaceResultEnum.FILL_LAMP_ADDRESS__ERROR,version);
+                            }
+
+                            qiObject.put("nodeId",nodeId);
+                            qiObject.put("nodeType",nodeType);
+                            qiObject.put("deviceId",sn);
+                            qiObject.put("groupNum",groupNumber);
+
+                        }
+                    }
+                }else {
+                    //没有分组的
+                    //注意:nodeId是12位数的,不够时,前面补0
+                    String nodeId = "";
+                    String zero = "";
+                    if (macAddress.length() <= 12){
+                        for (int i = 0; i < 12 - macAddress.length();i++){
+                            zero += "0";
+                        }
+                        nodeId = zero+macAddress;
+                    }else {
+                        //大于12位数了
+                        return toolUtils.response(InterfaceResultEnum.FILL_LAMP_ADDRESS__ERROR,version);
+                    }
+                    qiObject.put("nodeId",nodeId);
+                    qiObject.put("nodeType",nodeType);
+                    qiObject.put("deviceId",sn);
+                }
+                String respone = this.quiHuiPlcDevice(url, qiObject, 4);
+                if (respone == null || respone.length() == 0){
+                    return toolUtils.response(InterfaceResultEnum.SEND_CMD_TIME_OUT,version);
+                }else {
+                    JSONObject parseObject = JSON.parseObject(respone);
+                    Integer code = parseObject.getInteger("code");
+                    if (code != 200){
+                       String msg = parseObject.getString("msg");
+                        BaseResult<Object> objectBaseResult = new BaseResult<>(code.toString(), msg, new Object());
+                        return objectBaseResult;
+                    }else {
+                        lampInfo.setBindStatus(1);
+                    }
+                }
             }
-//            if (($protocoltype == 11 && $data['control_type'] == 11) || ($protocoltype == 11 &&  $data['control_type'] == 12) || ($protocoltype == 11 &&  $data['control_type'] == 14)){
-//
-//                $url = 'childnode/deviceRegister';
-//                $nodeType = $this->selectNodeType($data['ratedpower']);
-//
-//                if (empty($nodeType))  exit(json_result('0323',$this->response['0323']));
-//                $params = '';
-//                if (!empty($groupid)){
-//                    //有分组 (只有: 1- 255)
-//                    $groupid = implode(',', explode(',', $groupid));
-//                    $groupList = $this->db->query('select id,`name` from `group` where id in ('.$groupid.')')->result_array();
-//                    foreach ($groupList as $key=>$item){
-//                        if (is_numeric($item)){
-//                            if (intval($item) > 225 || intval($item) < 1){
-//                                //分组没有在规定的范围内
-//                                exit(json_result('0420',$this->response['0420']));
-//                            }else{
-//                                //注意:nodeId是12位数的,不够时,前面补0
-//                                $nodeId = '';
-//                                $zero = '';
-//                                if (mb_strlen($data['macAddress']) <= 12){
-//                                    for ($i = 0; $i < 12-(mb_strlen($data['macAddress'])); $i ++){
-//                                        $zero .= '0';
-//                                    }
-//                                    $nodeId = $zero.$data['macAddress'];
-//                                }else{
-//                                    //大于12位数了
-//                                    exit(json_result('0324',$this->response['0324']));
-//                                }
-//                                $params = array('nodeId'=>$nodeId,'nodeType'=>$nodeType,'deviceId'=>$data['address'],'groupNum'=>intval($item));
-//                            }
-//                        }else{
-//                            //分组没有在规定的范围内
-//                            exit(json_result('0420',$this->response['0420']));
-//                        }
-//                    }
-//                }else{
-//                    //没有分组的
-//                    //注意:nodeId是12位数的,不够时,前面补0
-//                    $nodeId = '';
-//                    $zero = '';
-//                    if (mb_strlen($data['macAddress']) <= 12){
-//                        for ($i = 0; $i < 12-(mb_strlen($data['macAddress'])); $i ++){
-//                            $zero .= '0';
-//                        }
-//                        $nodeId = $zero.$data['macAddress'];
-//                    }else{
-//                        //大于12位数了
-//                        exit(json_result('0324',$this->response['0324']));
-//                    }
-//                    $params = array('nodeId'=>$nodeId,'nodeType'=>$nodeType,'deviceId'=>$data['address']);
-//                }
-//
-//                $result = $this->plcDevice($url,$params,3);
-//                $resultObj = json_decode($result);
-//
-//                if ($resultObj->code != 200){
-//                    //不成功
-//                    exit(json_result($resultObj->code,$resultObj->msg));
-//                }
-
-
-                //添加网关
-            NetworkDTO networkDTO = new NetworkDTO();
-            networkDTO.setDeviceSn(sn);
-            //查询有没有网关
-           Integer count = networkService.checkNetworkData(networkDTO);
-           if (count == 0){
-               //添加网关
-               //networkService.addNetworkData();
-           }
-            //添加灯控
-            LampInfoDTO lampInfoDTO = new LampInfoDTO();
-            lampInfoDTO.setProtocolType(protocolType);
-            lampInfoDTO.setSn(sn);
-            lampInfoDTO.setNumber(number);
-            lampInfoDTO.setSectionId(sectionId);
-            lampInfoDTO.setName(name);
-            lampInfoDTO.setLatitude(Float.valueOf(latitude));
-            lampInfoDTO.setLongitude(Float.valueOf(longitude));
-            lampInfoDTO.setNumber(number);
-            lampInfoDTO.setSn(sn);
-            lampInfoDTO.setAreaId(areaId);
-            lampInfoDTO.setControlType(controlType);
-            lampInfoDTO.setInstallDate(installDate);
-            lampInfoDTO.setExpirationDate(expirationDate);
-            lampInfoDTO.setRatedPower(power);
-            lampInfoDTO.setDevAddr(devAddr);
-            lampInfoDTO.setFreqId(Integer.parseInt(freqId));
-            lampInfoDTO.setZegbeeSectionId(loopNumber);
-            return lampService.add(lampInfoDTO);
+
+            lampInfo.setControlType(controlType);
+            lampInfo.setRatedPower(power);
+            lampInfo.setLongitude(Float.valueOf(longitude));
+            lampInfo.setLatitude(Float.valueOf(latitude));
+            lampInfo.setAreaId(areaId);
+            lampInfo.setSectionId(sectionId);
+            lampInfo.setAddress(sn);
+            lampInfo.setNumber(number);
+            lampInfo.setName(name);
+
+            if (protocolType == 11 && controlType == 8 && header > 0){
+                //添加其中一个灯头
+                if (header == 1){//灯头1
+                    //设置灯头2
+                    lampInfo.setMode(1);
+                }else {//灯头2
+                    //设置灯头1
+                    lampInfo.setMode(0);
+                }
+                lampService.addByDto(lampInfo);
+
+            }else {
+                lampService.addByDto(lampInfo);
+            }
+
+            //修改了 4G 双控 plc 双控 nb 双控 蓝牙双灯
+            if (protocolType == 10 && (controlType == 5 || controlType == 22 || controlType == 34) || (protocolType == 11 && controlType == 8 && header == 0) || (protocolType == 3 && controlType == 9) || controlType == 25 || controlType == 27 || controlType ==29){
+                lampInfo.setMode(1);
+                lampService.addByDto(lampInfo);
+            }
+            String lastSql = lastSqlInterceptor.sqlContent; //插入的sql语句
+            if (lampPoleId != null && lampPoleId.length() != 0){
+                toolUtils.setPoleType(Integer.parseInt(lampPoleId),0);
+            }
+
+            // 添加到分组
+            if (groupId != null && groupId.length() != 0){
+                String[] groupIdArr = groupId.split(",");
+                List<GroupDTO> groupDTOList = groupService.getListByIds(groupIdArr);
+                for (GroupDTO item:groupDTOList) {
+                    String[] lampArr = item.getLampId().split(",");
+                    //是否包含某个元素
+                    boolean ifContain = Arrays.asList(lampArr).contains(lampInfo.getId());
+                    if (ifContain == false){
+                        //转换成list
+                        List<String> list = new ArrayList<>(Arrays.asList(lampArr));
+                        list.add(lampInfo.getId().toString());
+                        //list数组按规定拼接成字符串
+                        String newLampId= list.stream().collect(Collectors.joining(","));
+                        //更新
+                        item.setLampId(newLampId);
+                        groupService.updateGroupLampId(item);
+                    }
+                }
+            }
+            networkData = networkService.getSimpleData(networkData);
+            Integer lampCount = networkData.getLampCount();
+
+            if (controlType == 1 || controlType == 3 || controlType == 5 || controlType == 8 || controlType == 9 || controlType == 22){
+                //更新lampcount
+                //如果两灯就是添加2个
+                if (lampCount == null || lampCount == 0){
+                    networkData.setLampCount(2);
+                }else {
+                    if (header > 0 && controlType == 8){
+                        //只增加一个
+                        lampCount = lampCount + 1;
+                        networkData.setLampCount(lampCount);
+                    }else {
+                        lampCount = lampCount + 2;
+                        networkData.setLampCount(lampCount);
+                    }
+                }
+                networkService.updateSimDate(networkData);
+            }else {
+                //单灯
+                //如果两灯就是添加1个
+                if (protocolType != 11 && protocolType != 5){
+                    networkData.setLampCount(1);
+                    networkService.updateSimDate(networkData);
+                }else if((protocolType == 11  || protocolType == 5) && controlType != 26 && controlType != 27) {
+                    //plc可以带很多灯 ,//zigbee也是带多个灯
+                    if (lampCount == null || lampCount == 0){
+                        networkData.setLampCount(1);
+                    }else {
+                        lampCount = lampCount + 1;
+                        networkData.setLampCount(lampCount);
+                    }
+                    networkService.updateSimDate(networkData);
+                }
+            }
+
+            String cRemark = "添加路灯 区域:"+areaDTO.getChineseName()+"->路段:"+sectionDTO.getName()+"->路灯编号:"+number+" id:"+lampInfo.getId();
+            String eRemark = "Add lamp area:"+areaDTO.getEnglishName()+"->section:"+sectionDTO.getName()+"->number:"+number+" id:"+lampInfo.getId();
+            String rRemark = "Добавить зону светильников:"+areaDTO.getRuName()+"->участок дороги:"+sectionDTO.getName()+"->нумерация:"+number+" id:"+lampInfo.getId();
+            toolUtils.addOpertaionLog(request, "添加", cRemark, 0, 1, 1, number, areaDTO.getChineseName(), sectionDTO.getName(), sn, sectionId, sectionDTO.getId(), lampInfo.getId(), lastSql);
+            toolUtils.addOpertaionLog(request, "Insert", eRemark, 1,1,1, number, areaDTO.getEnglishName(), sectionDTO.getName(), sn, sectionId, sectionDTO.getId(), lampInfo.getId(), lastSql);
+            toolUtils.addOpertaionLog(request,"Подкючено",rRemark,2,1,1,number,areaDTO.getRuName(),sectionDTO.getName(),sn,sectionId,sectionDTO.getId(), lampInfo.getId(),lastSql);
+
+            return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version);
+
         }else { // 编辑
 //            LampInfoDTO oldLamp = lampService.getDetailsById(lampId,version);
 //            if (oldLamp.getProtocolType() != protocolType){
@@ -639,7 +754,7 @@ public class LampController {
         String url = "http://47.112.108.98:8090/api/devices";
         String respone = null;
         try {
-            respone = toolUtils.sendHttp("post", url, data.toString(), token, null, 5, null, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON);
+            respone = toolUtils.sendHttp("post", url, data.toString(), token, null, 5, null, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
             System.out.println("=====dddd:"+respone);
             if (respone == null){
                 respone = jwtUtil.setActivate(deviceId);
@@ -866,7 +981,62 @@ public class LampController {
         }
         return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version);
     }
-
+    private String selectNodeType(Integer power){
+        String nodeType = "";
+        switch (power){
+            case 30:
+                nodeType = "01";
+                break;
+            case 40:
+                nodeType = "02";
+                break;
+            case 50:
+                nodeType = "50";
+                break;
+            case 60:
+                nodeType = "06";
+                break;
+            case 75:
+                nodeType = "0A";
+                break;
+            case 80:
+                nodeType = "12";
+                break;
+            case 90:
+                nodeType = "15";
+                break;
+            case 100:
+                nodeType = "19";
+                break;
+            case 120:
+                nodeType = "1D";
+                break;
+            case 150:
+                nodeType = "2C";
+                break;
+            case 160:
+                nodeType = "27";
+                break;
+            case 180:
+                nodeType = "36";
+                break;
+            case 185:
+                nodeType = "38";
+                break;
+            case 200:
+                nodeType = "40";
+                break;
+            case 240:
+                nodeType = "45";
+                break;
+            case 260:
+                nodeType = "48";
+                break;
+            default:
+                nodeType = "";
+        }
+        return nodeType;
+    }
     //中灯 - 调光
     private Object getToken(){
         String url = zhongLightPlc.getZhongUrl()+"query_token";
@@ -880,7 +1050,7 @@ public class LampController {
         String bodyStr = this.encryptAndMd5(objectString);
         String result = null;
         try {
-            result = toolUtils.sendHttp("post", url, bodyStr,3, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON);
+            result = toolUtils.sendHttp("post", url, bodyStr,3, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
@@ -947,7 +1117,7 @@ public class LampController {
 
         String respone = null;
         try {
-            respone = toolUtils.sendHttp("post",url,bodyJsonString,tokenObject.getToken(),null,4,"Bearer", ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON);
+            respone = toolUtils.sendHttp("post",url,bodyJsonString,tokenObject.getToken(),null,4,"Bearer", ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
             JSONObject parseObject = JSON.parseObject(respone);
             System.out.println("======ddd:"+parseObject);
             Integer ret = parseObject.getInteger("Ret");
@@ -1035,7 +1205,7 @@ public class LampController {
 
         String respone = null;
         try {
-            respone = toolUtils.sendHttp("post",url,bodyStr,token,sessionId,4,"Bearer", ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON);
+            respone = toolUtils.sendHttp("post",url,bodyStr,token,sessionId,4,"Bearer", ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
             System.out.println("=====diming:"+respone);
             JSONObject parseObject = JSON.parseObject(respone);
             Integer ret = parseObject.getInteger("Ret");
@@ -1119,7 +1289,7 @@ public class LampController {
         String sessionId = ((ZhongLightPlcVO) loginObject).getSessionId();
         String respone = null;
         try {
-            respone = toolUtils.sendHttp("post", url, bodyStr, token, sessionId, 5,"Bearer", ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON);
+            respone = toolUtils.sendHttp("post", url, bodyStr, token, sessionId, 5,"Bearer", ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
             System.out.println("===dd:"+respone);
 
             JSONObject parseObject = JSON.parseObject(respone);
@@ -1192,7 +1362,7 @@ public class LampController {
         String sessionId = ((ZhongLightPlcVO) loginObject).getSessionId();
         String respone = null;
         try {
-            respone = toolUtils.sendHttp("post", url, bodyStr, token, sessionId, 5,"Bearer", ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON);
+            respone = toolUtils.sendHttp("post", url, bodyStr, token, sessionId, 5,"Bearer", ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
             System.out.println("===light:"+respone);
 
             JSONObject parseObject = JSON.parseObject(respone);
@@ -1263,7 +1433,7 @@ public class LampController {
         String bodyJsonString = bodyJson.toString();
         return bodyJsonString;
     }
-    //广东启慧-调光/集中器设备注册(网关)
+    //广东启慧-调光/集中器设备注册(网关)/控制器
     private String quiHuiPlcDevice(String url,JSONObject params,Integer timeOut) {
         String plcUrl = quHuiPlc.getUrl()+url;
         Random random = new Random();
@@ -1291,7 +1461,7 @@ public class LampController {
         //发送post请求
         String result = null;
         try {
-             result = toolUtils.sendHttp("post",plcUrl, json, timeOut, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON);
+             result = toolUtils.sendHttp("post",plcUrl, json, timeOut, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
         } catch (IOException e) {
             throw new RuntimeException(e);
         }

+ 1 - 1
src/main/java/com/welampiot/controller/LampPoleController.java

@@ -86,7 +86,7 @@ public class LampPoleController {
     @RequestMapping(value = "/nav",method = RequestMethod.POST)
     public BaseResult<LampInfoDTO> nav(HttpServletRequest request){
         Integer version = request.getParameter("version") == null ? 0 : Integer.parseInt(request.getParameter("version"));
-        Integer devType = request.getParameter("devType") == null || request.getParameter("devType").length() == 0 ? null : Integer.parseInt(request.getParameter("devType"));
+        String devType = request.getParameter("devType"); // == null || request.getParameter("devType").length() == 0 ? null : Integer.parseInt(request.getParameter("devType"));
         Integer devId = request.getParameter("devId") == null || request.getParameter("devId").length() == 0 ? null : Integer.parseInt(request.getParameter("devId"));
         LampPoleVO lampPoleVO = new LampPoleVO();
         List sectionList = toolUtils.getSectionList(request);

+ 1 - 1
src/main/java/com/welampiot/controller/RepairController.java

@@ -223,7 +223,7 @@ public class RepairController {
         int count = request.getParameter("count") == null ? 16 : Integer.parseInt(request.getParameter("count"));
 
         RepairInfoDTO dto = new RepairInfoDTO();
-        dto.setRepairUserid(id);
+        dto.setRepairUserId(id);
         dto.setPage(count * (page - 1));
         dto.setCount(count);
 

+ 2 - 0
src/main/java/com/welampiot/dao/AcDevInfoDao.java

@@ -27,4 +27,6 @@ public interface AcDevInfoDao {
     void updateAcDevData(AcDevInfoDTO dto);
 
     Integer checkAcDevData(AcDevInfoDTO dto);
+    AcDevInfoDTO getOneById( Integer id);
+    void updateByAcDevData(AcDevInfoDTO dto);
 }

+ 1 - 1
src/main/java/com/welampiot/dao/AllAlarmInfoLogDao.java

@@ -43,7 +43,7 @@ public interface AllAlarmInfoLogDao {
 
     AllAlarmInfoLogDTO getAlarmInfoDTOById(@Param("id") Integer id, @Param("version") Integer version);
 
-    void deleteAlarmData(@Param("id") Integer id);
+    void deleteAlarmData(String[] id);
 
     List<AllAlarmInfoLogDTO> getAlarmOperationList(AllAlarmInfoLogVO vo);
 

+ 1 - 0
src/main/java/com/welampiot/dao/GlobalLocationDao.java

@@ -49,4 +49,5 @@ public interface GlobalLocationDao {
 
     List<GlobalLocationDTO> getCityLampPoleCountList(GlobalLocationVO vo);
     GlobalLocationDTO getDataByDto(GlobalLocationDTO dto);
+    List<GlobalLocationDTO> getAreaList(GlobalLocationDTO dto);
 }

+ 1 - 0
src/main/java/com/welampiot/dao/GroupDao.java

@@ -20,4 +20,5 @@ public interface GroupDao {
     Integer getGroupTotalByDTO(GroupDTO dto);
     GroupDTO getGroupDTOById(@Param("id") Integer id);
     void updateGroupLampId(GroupDTO dto);
+    List<GroupDTO> getListByIds(@Param("ids") String[] ids);
 }

+ 11 - 0
src/main/java/com/welampiot/dao/IpInfoDao.java

@@ -0,0 +1,11 @@
+package com.welampiot.dao;
+
+import com.welampiot.dto.IpInfoDTO;
+
+import java.util.List;
+
+public interface IpInfoDao {
+    IpInfoDTO getDataByIp(String ip);
+    void updateByIp(IpInfoDTO dto);
+    void add(IpInfoDTO dto);
+}

+ 2 - 0
src/main/java/com/welampiot/dao/LampDao.java

@@ -64,4 +64,6 @@ public interface LampDao {
     List<LampInfoDTO> findLampDeviceBySn(@Param("address") String address, @Param("version") Integer version);
     LampInfoDTO getDataByVO(LampInfoDTO vo);
     List<LampInfoDTO> getListByDto(LampInfoDTO dto);
+    void addByDto(LampInfoDTO dto);
+    void updateById(LampInfoDTO dto);
 }

+ 1 - 0
src/main/java/com/welampiot/dao/LampPoleDao.java

@@ -61,4 +61,5 @@ public interface LampPoleDao {
     List<LampPoleDTO> getLampPoleAlarmListByLampPoleId(@Param("lampPoleId") Integer lampPoleId);
     LampPoleDTO getNewLampPoleDetailsById(@Param("id") Integer id);
     List<LampPoleDTO> getLampListByLampPoleId(@Param("lampPoleId") Integer lampPoleId);
+    void updateById(LampPoleDTO lampPoleDTO);
 }

+ 4 - 0
src/main/java/com/welampiot/dao/RepairDispatchDao.java

@@ -1,8 +1,11 @@
 package com.welampiot.dao;
 
 import com.welampiot.dto.RepairDispatchDTO;
+import com.welampiot.vo.RepairDispatchVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * ClassName: RepairDispatchDao
  * Package: com.welampiot.dao
@@ -14,4 +17,5 @@ import org.apache.ibatis.annotations.Param;
  */
 public interface RepairDispatchDao {
     RepairDispatchDTO getRepairDispatchByAlarmId(@Param("alarmId") Integer alarmId);
+    RepairDispatchDTO getRepairDispatchMultiJoinByVO(RepairDispatchVO repairDispatchVO);
 }

+ 3 - 0
src/main/java/com/welampiot/dao/RepairInfoDao.java

@@ -1,5 +1,6 @@
 package com.welampiot.dao;
 
+import com.welampiot.dto.RepairDispatchDTO;
 import com.welampiot.dto.RepairInfoDTO;
 import org.apache.ibatis.annotations.Param;
 
@@ -20,4 +21,6 @@ public interface RepairInfoDao {
     void deleteRepairInfoDataById(@Param("id") Integer id);
 
     RepairInfoDTO getRepairInfoDTOByAlarmId(@Param("alarmId") Integer alarmId);
+    void addData(RepairDispatchDTO repairDispatchDTO);
+    RepairInfoDTO getRepairInfoById(Integer alarmId);
 }

+ 1 - 1
src/main/java/com/welampiot/dao/SectionDao.java

@@ -7,7 +7,7 @@ import org.apache.ibatis.annotations.Param;
 import java.util.List;
 
 public interface SectionDao {
-    List<SectionDTO> getAllList();
+    List<SectionDTO> getAllList(SectionDTO sectionDTO);
     List<SectionDTO> getListByPid(@Param("pid") Integer pid);
     List<SectionDTO> getListByPidList(@Param("pidList") List pidList);
     List<SectionDTO> getListByIdList(@Param("idList") List idList);

+ 2 - 2
src/main/java/com/welampiot/dto/GlobalLocationDTO.java

@@ -48,9 +48,9 @@ public class GlobalLocationDTO implements Serializable {
 
     private Integer timeType;//时区类型
 
-    private float longitude;//经度
+    private Float longitude;//经度
 
-    private float latitude;//纬度
+    private Float latitude;//纬度
 
     private String name;
     private String name1;

+ 11 - 0
src/main/java/com/welampiot/dto/IpInfoDTO.java

@@ -0,0 +1,11 @@
+package com.welampiot.dto;
+
+import lombok.Data;
+
+@Data
+public class IpInfoDTO {
+    private Integer id;
+    private String ipAddr;
+    private String location;
+
+}

+ 11 - 1
src/main/java/com/welampiot/dto/RepairDispatchDTO.java

@@ -17,7 +17,7 @@ import java.io.Serializable;
 public class RepairDispatchDTO implements Serializable {
     private Integer id;
 
-    private Integer repairUserid; // 调度人员id
+    //private Integer repairUserid; // 调度人员id
 
     private String finishTime; // 实际完成时间
 
@@ -26,4 +26,14 @@ public class RepairDispatchDTO implements Serializable {
     private Integer alarmId; // 告警id
 
     private Integer lampId; // 路灯id
+
+    private Integer repairUserId;
+    private String area;
+    private String section;
+    private String userName;
+    private String alarmType;
+    private String alrmTime;
+    private String keyword;
+    private String repairTime;
+    private String alarmTime;
 }

+ 9 - 1
src/main/java/com/welampiot/dto/RepairInfoDTO.java

@@ -19,7 +19,7 @@ public class RepairInfoDTO implements Serializable {
     private Integer id;
 
     /** 维修人员id **/
-    private Integer repairUserid;
+    private Integer repairUserId;
 
     /** 行政区 **/
     private String area;
@@ -52,4 +52,12 @@ public class RepairInfoDTO implements Serializable {
     private Integer count;
 
     private static final long serialVersionUID = 1L;
+
+    private String repairUser;
+
+    private String dispatchTime;
+    private String name;
+    private String email;
+    private String phone;
+    private String company;
 }

+ 3 - 0
src/main/java/com/welampiot/service/AcDevInfoService.java

@@ -2,6 +2,7 @@ package com.welampiot.service;
 
 import com.welampiot.dto.AcDevInfoDTO;
 import com.welampiot.vo.AcDevInfoVO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -26,4 +27,6 @@ public interface AcDevInfoService {
     void updateAcDevData(AcDevInfoDTO dto);
 
     Integer checkAcDevData(AcDevInfoDTO dto);
+    AcDevInfoDTO getOneById(Integer id);
+    void updateByAcDevData(AcDevInfoDTO dto);
 }

+ 1 - 1
src/main/java/com/welampiot/service/AllAlarmInfoLogService.java

@@ -42,7 +42,7 @@ public interface AllAlarmInfoLogService {
 
     AllAlarmInfoLogDTO getAlarmInfoDTOById(Integer id, Integer version);
 
-    void deleteAlarmData(Integer id);
+    void deleteAlarmData(String[] id);
 
     List<AllAlarmInfoLogDTO> getAlarmOperationList(AllAlarmInfoLogVO vo);
 

+ 1 - 0
src/main/java/com/welampiot/service/GlobalLocationService.java

@@ -34,4 +34,5 @@ public interface GlobalLocationService {
     List<GlobalLocationDTO> getOnlyOneLevelList(Integer level, Integer version);
     List<GlobalLocationDTO> getCountryOfSectionList(Integer level, Integer version);
     GlobalLocationDTO getDataByDto(GlobalLocationDTO dto);
+    List<GlobalLocationDTO> getAreaList(GlobalLocationDTO dto);
 }

+ 2 - 0
src/main/java/com/welampiot/service/GroupService.java

@@ -22,4 +22,6 @@ public interface GroupService {
     Integer getGroupTotalByDTO(GroupDTO dto);
     GroupDTO getGroupDTOById(Integer id);
     void updateGroupLampId(GroupDTO dto);
+    List<GroupDTO> getListByIds(@Param("ids") String[] ids);
+
 }

+ 11 - 0
src/main/java/com/welampiot/service/IpInfoService.java

@@ -0,0 +1,11 @@
+package com.welampiot.service;
+
+import com.welampiot.dto.IpInfoDTO;
+import org.springframework.stereotype.Service;
+
+
+public interface IpInfoService {
+    IpInfoDTO getDataByIp(String ip);
+    void updateByIp(IpInfoDTO dto);
+    void add(IpInfoDTO dto);
+}

+ 1 - 0
src/main/java/com/welampiot/service/LampPoleService.java

@@ -53,4 +53,5 @@ public interface LampPoleService {
     LampPoleDTO getNewLampPoleDetailsById(Integer id);
     List<LampPoleDTO> getLampListByLampPoleId(Integer lampPoleId);
     LampPoleInfoVO getLampPoleBigScreenCount(LampPoleDTO lampPoleDTO, LampInfoDTO lampInfoDTO);
+    void updateById(LampPoleDTO lampPoleDTO);
 }

+ 2 - 0
src/main/java/com/welampiot/service/LampService.java

@@ -64,4 +64,6 @@ public interface LampService {
     List<LampInfoDTO> findLampDeviceBySn(String address, Integer version);
     LampInfoDTO getDataByVO(LampInfoDTO vo);
     List<LampInfoDTO> getListByDto(LampInfoDTO dto);
+    void addByDto(LampInfoDTO dto);
+    void updateById(LampInfoDTO dto);
 }

+ 4 - 0
src/main/java/com/welampiot/service/RepairDispatchService.java

@@ -1,8 +1,11 @@
 package com.welampiot.service;
 
 import com.welampiot.dto.RepairDispatchDTO;
+import com.welampiot.vo.RepairDispatchVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * ClassName: RepairDispatchService
  * Package: com.welampiot.service
@@ -14,4 +17,5 @@ import org.apache.ibatis.annotations.Param;
  */
 public interface RepairDispatchService {
     RepairDispatchDTO getRepairDispatchByAlarmId(@Param("alarmId") Integer alarmId);
+    RepairDispatchDTO getRepairDispatchMultiJoinByVO(RepairDispatchVO repairDispatchVO);
 }

+ 4 - 0
src/main/java/com/welampiot/service/RepairInfoService.java

@@ -1,5 +1,6 @@
 package com.welampiot.service;
 
+import com.welampiot.dto.RepairDispatchDTO;
 import com.welampiot.dto.RepairInfoDTO;
 import com.welampiot.vo.RepairInfoVO;
 
@@ -18,4 +19,7 @@ public interface RepairInfoService {
     void deleteRepairInfoDataById(Integer id);
 
     RepairInfoDTO getRepairInfoDTOByAlarmId(Integer alarmId);
+    void addData(RepairDispatchDTO repairDispatchDTO);
+    RepairInfoDTO getRepairInfoById(Integer alarmId);
+
 }

+ 1 - 1
src/main/java/com/welampiot/service/SectionService.java

@@ -7,7 +7,7 @@ import org.apache.ibatis.annotations.Param;
 import java.util.List;
 
 public interface SectionService {
-    List<SectionDTO> getAllList();
+    List<SectionDTO> getAllList(SectionDTO sectionDTO);
 
     List<SectionDTO> getListByPid(Integer pid);
     List<SectionDTO> getListByPidList(List pidList);

+ 10 - 0
src/main/java/com/welampiot/service/impl/AcDevInfoServiceImpl.java

@@ -4,6 +4,7 @@ import com.welampiot.dao.AcDevInfoDao;
 import com.welampiot.dto.AcDevInfoDTO;
 import com.welampiot.service.AcDevInfoService;
 import com.welampiot.vo.AcDevInfoVO;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -52,4 +53,13 @@ public class AcDevInfoServiceImpl implements AcDevInfoService {
     public Integer checkAcDevData(AcDevInfoDTO dto) {
         return acDevInfoDao.checkAcDevData(dto);
     }
+    @Override
+    public AcDevInfoDTO getOneById( Integer id){
+        return acDevInfoDao.getOneById(id);
+    }
+
+    @Override
+    public void updateByAcDevData(AcDevInfoDTO dto){
+        acDevInfoDao.updateByAcDevData( dto);
+    }
 }

+ 1 - 1
src/main/java/com/welampiot/service/impl/AllAlarmInfoLogServiceImpl.java

@@ -184,7 +184,7 @@ public class AllAlarmInfoLogServiceImpl implements AllAlarmInfoLogService {
     }
 
     @Override
-    public void deleteAlarmData(Integer id) {
+    public void deleteAlarmData(String[] id) {
         allAlarmInfoLogDao.deleteAlarmData(id);
     }
 

+ 4 - 0
src/main/java/com/welampiot/service/impl/GlobalLocationServiceImpl.java

@@ -243,4 +243,8 @@ public class GlobalLocationServiceImpl implements GlobalLocationService {
     public GlobalLocationDTO getDataByDto(GlobalLocationDTO dto){
         return globalLocationDao.getDataByDto(dto);
     }
+    @Override
+    public List<GlobalLocationDTO> getAreaList(GlobalLocationDTO dto){
+        return globalLocationDao.getAreaList(dto);
+    }
 }

+ 5 - 0
src/main/java/com/welampiot/service/impl/GroupServiceImpl.java

@@ -7,6 +7,7 @@ import com.welampiot.dto.GroupDTO;
 import com.welampiot.service.GroupService;
 import com.welampiot.utils.ToolUtils;
 import com.welampiot.vo.GroupVO;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -185,4 +186,8 @@ public class GroupServiceImpl implements GroupService {
     public void updateGroupLampId(GroupDTO dto) {
         groupDao.updateGroupLampId(dto);
     }
+    @Override
+    public List<GroupDTO> getListByIds(@Param("ids") String[] ids){
+        return groupDao.getListByIds(ids);
+    }
 }

+ 27 - 0
src/main/java/com/welampiot/service/impl/IpInfoServiceImpl.java

@@ -0,0 +1,27 @@
+package com.welampiot.service.impl;
+
+import com.welampiot.dao.IpInfoDao;
+import com.welampiot.dto.IpInfoDTO;
+import com.welampiot.service.IpInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class IpInfoServiceImpl implements IpInfoService {
+
+    @Autowired
+    private IpInfoDao ipInfoDao;
+    @Override
+    public IpInfoDTO getDataByIp(String ip) {
+        return ipInfoDao.getDataByIp(ip);
+    }
+    @Override
+    public void updateByIp(IpInfoDTO dto){
+        ipInfoDao.updateByIp(dto);
+    }
+
+    @Override
+    public void add(IpInfoDTO dto) {
+        ipInfoDao.add(dto);
+    }
+}

+ 4 - 0
src/main/java/com/welampiot/service/impl/LampPoleServiceImpl.java

@@ -619,4 +619,8 @@ public class LampPoleServiceImpl implements LampPoleService {
     public Integer getAlarmCountByVO(LampPoleCountVO lampPoleCountVO) {
         return lampPoleDao.getAlarmCountByVO(lampPoleCountVO);
     }
+    @Override
+    public void updateById(LampPoleDTO lampPoleDTO){
+        lampPoleDao.updateById( lampPoleDTO);
+    }
 }

+ 8 - 0
src/main/java/com/welampiot/service/impl/LampServiceImpl.java

@@ -774,4 +774,12 @@ public class LampServiceImpl implements LampService {
     public List<LampInfoDTO> getListByDto(LampInfoDTO dto){
         return lampDao.getListByDto(dto);
     }
+    @Override
+    public void addByDto(LampInfoDTO dto){
+         lampDao.addByDto(dto);
+    }
+    @Override
+    public void updateById(LampInfoDTO dto){
+         lampDao.updateById( dto);
+    }
 }

+ 8 - 0
src/main/java/com/welampiot/service/impl/RepairDispatchServiceImpl.java

@@ -3,9 +3,12 @@ package com.welampiot.service.impl;
 import com.welampiot.dao.RepairDispatchDao;
 import com.welampiot.dto.RepairDispatchDTO;
 import com.welampiot.service.RepairDispatchService;
+import com.welampiot.vo.RepairDispatchVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * ClassName: RepairDispatchServiceImpl
  * Package: com.welampiot.service.impl
@@ -24,4 +27,9 @@ public class RepairDispatchServiceImpl implements RepairDispatchService {
     public RepairDispatchDTO getRepairDispatchByAlarmId(Integer alarmId) {
         return repairDispatchDao.getRepairDispatchByAlarmId(alarmId);
     }
+
+    @Override
+    public RepairDispatchDTO getRepairDispatchMultiJoinByVO(RepairDispatchVO repairDispatchVO) {
+        return repairDispatchDao.getRepairDispatchMultiJoinByVO(repairDispatchVO);
+    }
 }

+ 9 - 0
src/main/java/com/welampiot/service/impl/RepairInfoServiceImpl.java

@@ -1,6 +1,7 @@
 package com.welampiot.service.impl;
 
 import com.welampiot.dao.RepairInfoDao;
+import com.welampiot.dto.RepairDispatchDTO;
 import com.welampiot.dto.RepairInfoDTO;
 import com.welampiot.service.RepairInfoService;
 import com.welampiot.vo.RepairInfoVO;
@@ -72,4 +73,12 @@ public class RepairInfoServiceImpl implements RepairInfoService {
     public RepairInfoDTO getRepairInfoDTOByAlarmId(Integer alarmId) {
         return repairInfoDao.getRepairInfoDTOByAlarmId(alarmId);
     }
+    @Override
+    public void addData(RepairDispatchDTO repairDispatchDTO){
+        repairInfoDao.addData(repairDispatchDTO);
+    }
+    @Override
+    public RepairInfoDTO getRepairInfoById(Integer alarmId){
+        return repairInfoDao.getRepairInfoById(alarmId);
+    }
 }

+ 1 - 1
src/main/java/com/welampiot/service/impl/SectionServiceImpl.java

@@ -14,7 +14,7 @@ public class SectionServiceImpl implements SectionService {
     @Autowired
     private SectionDao sectionDao;
     @Override
-    public List<SectionDTO> getAllList() {return sectionDao.getAllList();}
+    public List<SectionDTO> getAllList(SectionDTO sectionDTO) {return sectionDao.getAllList(sectionDTO);}
 
     @Override
     public List<SectionDTO> getListByPid(Integer pid) {return sectionDao.getListByPid(pid);}

+ 2 - 2
src/main/java/com/welampiot/utils/JwtUtil.java

@@ -35,7 +35,7 @@ public class JwtUtil {
      *  'sub'=>'www.admin.com',  //面向的用户
      *  'jti'=>md5(uniqid('JWT').time())  //该Token唯一标识
      * ]
-     * @return string
+     * @return string  https://jwt.io/  中base64UrlEncode编码实现
      */
     public String signatureToToken() {// String message
         Map<String, Object> header = new HashMap<>();
@@ -95,7 +95,7 @@ public class JwtUtil {
         String url = "http://47.112.108.98:8090/api/devices/00000000"+deviceId+"/activate";
         String respone = null;
         try {
-            respone = toolUtils.sendHttp("post", url, data.toString(), token, null, 5, null, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON);
+            respone = toolUtils.sendHttp("post", url, data.toString(), token, null, 5, null, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
         } catch (IOException e) {
             throw new RuntimeException(e);
         }

+ 212 - 27
src/main/java/com/welampiot/utils/ToolUtils.java

@@ -2,6 +2,7 @@ package com.welampiot.utils;
 
 import com.alibaba.druid.support.json.JSONUtils;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.welampiot.common.BaseResult;
 import com.welampiot.common.DevInfoEnum;
@@ -11,11 +12,9 @@ import com.welampiot.configuration.MqttConfig;
 import com.welampiot.configuration.PlcMqttConfig;
 import com.welampiot.dto.*;
 import com.welampiot.handle.MqttHandler;
-import com.welampiot.service.GlobalLocationService;
-import com.welampiot.service.LampPoleService;
-import com.welampiot.service.SectionService;
-import com.welampiot.service.UserService;
+import com.welampiot.service.*;
 import com.welampiot.vo.DevEnumVO;
+import com.welampiot.vo.LampPoleVO;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.methods.PostMethod;
 import org.apache.poi.ss.formula.functions.T;
@@ -38,8 +37,10 @@ import java.lang.reflect.Field;
 import java.net.*;
 import java.nio.charset.StandardCharsets;
 import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 import java.util.zip.CRC32;
 
 @Component
@@ -55,6 +56,11 @@ public class ToolUtils {
             this.contentType = contentType;
         }
     }
+    //用户的权限
+    final static public Integer SYSTEM_ADMIN = 1;
+    final static public Integer COMPANY_ADMIN = 2;
+    final static public Integer COMPANY_CUSTOMER = 3;
+
     private UserDTO user;
     @Autowired
     private UserService userService;
@@ -73,6 +79,10 @@ public class ToolUtils {
     private static final String PATTERN = "^(?=.*[0-9])(?=.*[a-zA-Z]).{8,20}$";
     private static final String PATTERN_PHONE = "^1[3-9]\\d{9}$";
     private static final String PATTERN_EMAIL = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$";
+    @Autowired
+    private IpInfoService ipInfoService;
+    @Autowired
+    private OperationLogService operationLogService;
 
     /**
      * 获取用户所有路段 id
@@ -168,9 +178,10 @@ public class ToolUtils {
     public UserDTO getUser(HttpServletRequest request) {
         String username = request.getParameter("username");
         ArrayList<Object> sectionList = new ArrayList<>();
-        if (user == null) {
-            user = userService.findUserByUserName(username);
-        }
+//        if (user == null) {//若换了帐号,还是上次的帐号
+//            user = userService.findUserByUserName(username);
+//        }
+        user = userService.findUserByUserName(username);
         return user;
     }
 
@@ -1073,13 +1084,13 @@ System.out.println(res);
     }
 
     /* 向第三方请求post
-     *@param  request:请求方式
+     *@param  requestMethod:请求方式
      * @param  url:路径
      * @param param:参数
      * @param ContentTypeEnum: 编码类型
      * @return 返回类型字符串
     */
-    public  String sendHttp(String request,String url, String param,Integer timeOut,ContentTypeEnum typeEnum) throws IOException {
+    public  String sendHttp(String requestMethod,String url, String param,Integer timeOut,ContentTypeEnum typeEnum,String cookie) throws IOException {
         String result = "";
         URL postUrl = new URL(url);
         // 打开连接
@@ -1096,7 +1107,7 @@ System.out.println(res);
             connection.setReadTimeout(timeOut * 1000); //单位:毫秒
         }
         // Set the post method. Default is GET
-        connection.setRequestMethod(request.toUpperCase());
+        connection.setRequestMethod(requestMethod.toUpperCase());
         // Post 请求不能使用缓存
         connection.setUseCaches(false);
         // URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数
@@ -1108,17 +1119,23 @@ System.out.println(res);
         }else {
             connection.setRequestProperty("Content-Type",typeEnum.contentType);
         }
+        if (cookie != null){
+            connection.setRequestProperty("Cookie",cookie);
+        }
         // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
         // 要注意的是connection.getOutputStream会隐含的进行connect。
         connection.connect();
-        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
-        // 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
-        // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
-        out.writeBytes(param);
-        out.flush();
-        out.close(); // flush and close
-        BufferedReader reader = new BufferedReader(new InputStreamReader(
-                connection.getInputStream()));
+        if (!requestMethod.equals("GET") && !requestMethod.equals("get")){
+            DataOutputStream out = new DataOutputStream(connection.getOutputStream());
+            // 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
+            // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
+            out.writeBytes(param);
+            out.flush();
+            out.close(); // flush and close
+        }
+
+        //读取服务器返回的数据
+        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
         String line;
         while ((line = reader.readLine()) != null) {
             result += line;
@@ -1139,7 +1156,7 @@ System.out.println(res);
      * @param typeEnum: 编码类型
      * @return 返回类型字符串
      */
-    public  String sendHttp(String request,String url, String param,String token,String sessionId,Integer timeOut,String mark,ContentTypeEnum typeEnum) throws IOException {
+    public  String sendHttp(String requestMethod,String url, String param,String token,String sessionId,Integer timeOut,String mark,ContentTypeEnum typeEnum,String cookie) throws IOException {
         String result = "";
         URL postUrl = new URL(url);
         // 打开连接
@@ -1149,7 +1166,7 @@ System.out.println(res);
         connection.setDoOutput(true);
         connection.setDoInput(true);
         // Set the post method. Default is GET
-        connection.setRequestMethod(request.toUpperCase());
+        connection.setRequestMethod(requestMethod.toUpperCase());
         // Post 请求不能使用缓存
         connection.setUseCaches(false);
         // URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数
@@ -1170,6 +1187,9 @@ System.out.println(res);
         }else {
             connection.setRequestProperty("Authorization",token);
         }
+        if (cookie != null){
+            connection.setRequestProperty("Cookie",cookie);
+        }
 
         if (sessionId != null){
             connection.setRequestProperty("SessionId"," "+sessionId);
@@ -1184,12 +1204,14 @@ System.out.println(res);
         // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
         // 要注意的是connection.getOutputStream会隐含的进行connect。
         connection.connect();
-        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
-        // 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
-        // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
-        out.writeBytes(param);
-        out.flush();
-        out.close(); // flush and close
+        if (!requestMethod.equals("GET") && !requestMethod.equals("get")){
+            DataOutputStream out = new DataOutputStream(connection.getOutputStream());
+            // 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
+            // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
+            out.writeBytes(param);
+            out.flush();
+            out.close(); // flush and close
+        }
         BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
         String line;
         while ((line = reader.readLine()) != null) {
@@ -1214,11 +1236,174 @@ System.out.println(res);
         String token = "HpumrF3BKBo3mOFIhkyf5MtIIOc=";
         String respone = null;
         try {
-            respone = this.sendHttp("post", url, device.toString(), token, null, 5, "api-key", ContentTypeEnum.CONTENT_TYPE_JSON);
+            respone = this.sendHttp("post", url, device.toString(), token, null, 5, "api-key", ContentTypeEnum.CONTENT_TYPE_JSON,null);
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
         return respone;
+    }
+    // 修改灯杆类型
+    public void setPoleType(Integer poleId,Integer type){
+        if (poleId != 0 || poleId != null){
+            LampPoleDTO lampPoleDTO = lampPoleService.getLampPoleDTOById(poleId);
+            String[] devArr = new String[]{};
+            if(lampPoleDTO.getDevType() != null){
+                devArr = lampPoleDTO.getDevType().split(",");
+            }
+            //是否包含某个元素
+            boolean ifContain = Arrays.asList(devArr).contains(type);
+            if (ifContain == false){
+                //字符串数组转换list,再添加元素
+                List<String> list = new ArrayList<>(Arrays.asList(devArr));
+                list.add(type.toString());
+                //list数组按规定拼接成字符串
+                String newDevType = list.stream().collect(Collectors.joining(","));
+                lampPoleDTO.setId(poleId);
+                lampPoleDTO.setDevType(newDevType);
+                lampPoleService.updateById(lampPoleDTO);
+            }
+        }
+    }
+    //操作日志
+    public void addOpertaionLog(HttpServletRequest request,String operation, String remark,Integer type,Integer operaType,Integer devtype,String deviceName,String area,String section,String sn ,Integer sectionId ,Integer areaId ,Integer id,String sql_log){
+        String ip = "";
+        if (request.getParameter("ip") != null){
+           ip = request.getParameter("ip");
+       }else {
+            ip = request.getServerName();
+        }
+
+        try {
+            String location = this.getLocationByIp(ip);
+            Date day = new Date();
+            SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String updateTime = sdf.format(day);
+            String username = request.getParameter("username");
+            Integer userId = this.getUser(request).getId();
 
+            Integer os = request.getParameter("os") == null ? 0 : Integer.parseInt(request.getParameter("os"));
+
+            OperationLogDTO operationLogDTO = new OperationLogDTO();
+            operationLogDTO.setTime(updateTime);
+            operationLogDTO.setAcount(username);
+            operationLogDTO.setOperation(operation);
+            operationLogDTO.setRemark(remark);
+            operationLogDTO.setOs(os);
+            operationLogDTO.setType(type);
+            operationLogDTO.setOperaType(operaType);
+            operationLogDTO.setUserId(userId);
+            operationLogDTO.setDeviceName(deviceName);
+            operationLogDTO.setArea(area);
+            operationLogDTO.setSection(section);
+            operationLogDTO.setSn(sn);
+            operationLogDTO.setAreaId(areaId);
+            operationLogDTO.setSectionId(sectionId);
+            operationLogDTO.setDevId(id);
+            operationLogDTO.setSqlLog(sql_log);
+            operationLogDTO.setIpAddr(ip);
+            operationLogDTO.setLocation(location);
+            operationLogService.add(operationLogDTO);
+
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+    public String getLocationByIp(String ip) throws IOException {
+        //把域名都转换成ip地址
+        ip = InetAddress.getByName(ip).getHostAddress();
+
+        IpInfoDTO infoDTO = ipInfoService.getDataByIp(ip);
+        String location = "";
+        if (infoDTO == null){
+            IpInfoDTO newInfoDTO = new IpInfoDTO();
+            if (ip.equals("127.0.0.1")){
+                //本地添加
+                location = "服务器本地";
+                newInfoDTO.setLocation(location);
+                newInfoDTO.setIpAddr(ip);
+                ipInfoService.add(newInfoDTO);
+
+            }else {
+                String url = "https://opendata.baidu.com/api.php?query="+ip+"&co=&resource_id=6006&oe=utf8";
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("query",ip);
+                jsonObject.put("co",null);
+                jsonObject.put("resource_id",600);
+                jsonObject.put("oe","utf8");
+                String respone = this.sendHttp("get", url, jsonObject.toString(), 4, ContentTypeEnum.CONTENT_TYPE_JSON,null);
+                if (respone != null){
+                    JSONObject responeJson = JSON.parseObject(respone);
+                    String status = responeJson.getString("status");
+                    if (status.equals("0")){
+                        //成功
+                        //数组
+                        JSONArray jsonArray = responeJson.getJSONArray("data");
+                        JSONObject item = (JSONObject)(jsonArray.get(0));
+                        location = item.getString("location");
+                        newInfoDTO.setLocation(location);
+                        newInfoDTO.setIpAddr(ip);
+                        ipInfoService.add(newInfoDTO);
+                    }
+                }
+            }
+        }else {
+            location = infoDTO.getLocation();
+        }
+        return location;
+    }
+
+    // 翻译故障信息
+    public String changeAlarm(String alarmStr){
+        if (alarmStr == null || alarmStr.length() == 0) return  "Unknown error";
+        HashMap<String, String> hashMap = new HashMap<>();
+        hashMap.put("供电异常","Power supply anomaly");
+        hashMap.put("灯闪","Light flicker");
+        hashMap.put("灯坏","Light bad");
+        hashMap.put("LED驱动故障","LED drive failure");
+        hashMap.put("灯坏或LED驱动故障","Light bad or LED drive failure");
+        hashMap.put("电压过低","Low voltage");
+        hashMap.put("电压过高","Overvoltage");
+        hashMap.put("开灯故障","Turn on the lights");
+        hashMap.put("离线故障","Offline fault");
+        String[] arr = alarmStr.split(",");//内容
+        List<String> stringList = new ArrayList<>();//存放
+
+        for (String item: arr) {
+            String value = hashMap.get(item);
+            if (value == null){
+                stringList.add("Unknown error");
+            }else {
+                stringList.add(value);
+            }
+        }
+        //字符串拼接
+        return String.join(".", stringList);
+    }
+    public String changeAlarmRu(String alarmStr){
+        if (alarmStr == null || alarmStr.length() == 0) return  "ошибка";
+        HashMap<String, String> hashMap = new HashMap<>();
+        hashMap.put("供电异常","Аномальный источник питания");
+        hashMap.put("灯闪","вспышка лампы");
+        hashMap.put("灯坏","лампочка");
+        hashMap.put("LED驱动故障","Ошибка LED-драйвера");
+        hashMap.put("灯坏或LED驱动故障","неисправность лампы или привода светодиода");
+        hashMap.put("电压过低","понижение напряжения");
+        hashMap.put("电压过高","избыточное напряжение");
+        hashMap.put("开灯故障","неисправность зажигания");
+        hashMap.put("离线故障","автономный отказ");
+        String[] arr = alarmStr.split(",");//内容
+        List<String> stringList = new ArrayList<>();//存放
+
+        for (String item: arr) {
+            String value = hashMap.get(item);
+            if (value == null){
+                stringList.add("ошибка");
+            }else {
+                stringList.add(value);
+            }
+        }
+        //字符串拼接
+        return String.join(".", stringList);
     }
 }

+ 15 - 0
src/main/java/com/welampiot/vo/AcDevInfoVO.java

@@ -34,8 +34,23 @@ public class AcDevInfoVO implements Serializable {
     private List<Integer> sectionList;
 
     private List<AcDevInfoDTO> list;
+    private List<AcDevInfoVO> staList;
 
     private Integer total;
 
     private static final long serialVersionUID = 1L;
+    private String macInfo; //厂家信息
+    private Long rxRate; //上行速率,单位是Kbyte
+    private Long txRate; //下行速率,单位是Kbyte
+    private Long rxPackets;
+    private Long txPackets;
+    private String lastTime; //最后响应时间,单位是毫秒
+    private String apMac; //AP的MAC地址
+    private Integer staNum;
+    private String mac;
+    private String vlan;
+    private String radio;
+    private String signal;
+    private String ssid;
+    private String name;
 }

+ 2 - 0
src/main/java/com/welampiot/vo/AllAlarmInfoLogVO.java

@@ -25,4 +25,6 @@ public class AllAlarmInfoLogVO {
     private String alarmType;
     private String path;
     private List<AllAlarmInfoLogDTO> list;
+    private Integer handling;
+    private Integer unAssigned;
 }

+ 1 - 1
src/main/java/com/welampiot/vo/LampPoleVO.java

@@ -11,7 +11,7 @@ import java.util.Map;
 public class LampPoleVO implements Serializable {
     private List sectionList; // 路段筛选
     private Integer total;
-    private Integer devType;
+    private String devType;
     private Integer devId;
     private List<Map> lightDevList;
     private List<Map> benchDevList;

+ 14 - 0
src/main/java/com/welampiot/vo/RepairDispatchVO.java

@@ -0,0 +1,14 @@
+package com.welampiot.vo;
+
+import com.welampiot.dto.RepairDispatchDTO;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class RepairDispatchVO implements Serializable {
+    private Integer version;
+    private String keyword;
+    private Integer alarmId;
+}

+ 13 - 0
src/main/resources/mapper/AcDevInfoMapper.xml

@@ -142,4 +142,17 @@
         </if>
     </select>
 
+    <select id="getOneById" parameterType="Integer" resultType="AcDevInfoDTO">
+        select id,acAddress,type,networkIP,access_token as accessToken,refresh_token as refreshToken,updatetime as updateTime
+        from ac_dev_info where id = #{id}
+    </select>
+
+    <update id="updateByAcDevData" parameterType="AcDevInfoDTO">
+        update
+            ac_dev_info
+        set
+            access_token = #{accessToken},refresh_token = #{refreshToken},updatetime = #{updateTime}
+        where
+            id = #{id}
+    </update>
 </mapper>

+ 5 - 1
src/main/resources/mapper/AllAlarmInfoLogMapper.xml

@@ -824,7 +824,11 @@
     <delete id="deleteAlarmData">
         delete
         from all_alarm_info_log
-        where id = #{id};
+        where id in
+        <foreach collection="id" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+
     </delete>
 
     <select id="getAlarmOperationList" resultType="AllAlarmInfoLogDTO">

+ 22 - 0
src/main/resources/mapper/GlobalLocationMapper.xml

@@ -364,4 +364,26 @@
             </if>
         </trim>
     </select>
+    
+    <select id="getAreaList" parameterType="GlobalLocationDTO" resultType="GlobalLocationDTO">
+        select id
+        <choose>
+            <when test="version == 0">
+                ,chinese_name AS `name`
+            </when>
+            <when test="version == 1">
+                ,english_name AS `name`
+            </when>
+            <otherwise>
+                ,ru_name AS `name`
+            </otherwise>
+        </choose>
+        from global_location
+        <if test="pidList != null and !pidList.isEmpty()">
+            WHERE id IN
+            <foreach collection="pidList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 12 - 0
src/main/resources/mapper/GroupMapper.xml

@@ -203,4 +203,16 @@
             g.id = #{id}
     </update>
 
+    <select id="getListByIds" resultType="GroupDTO">
+        select id,lampid,number from `group`
+        <trim prefix="where" suffixOverrides="and|or">
+            <if test="ids !=null">
+                id in
+                <foreach collection="ids" open="(" close=")" item="id" separator=",">
+                    #{id}
+                </foreach>
+            </if>
+        </trim>
+
+    </select>
 </mapper>

+ 28 - 0
src/main/resources/mapper/IpInfoMapper.xml

@@ -0,0 +1,28 @@
+<?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.welampiot.dao.IpInfoDao">
+    <select id="getDataByIp" resultType="IpInfoDTO">
+        select * from ip_info
+        <trim prefix="where" suffixOverrides="and|or">
+            <if test="ipAddr != null">
+                ip_addr = #{ipAddr}
+            </if>
+        </trim>
+        limit 1
+    </select>
+    <update id="updateByIp">
+        update ip_info set
+        <if test="ipAddr != null">
+            ip_addr = #{ipAddr},
+        </if>
+        <if test="lacation != null">
+            location = #{location}
+        </if>
+        where ip_addr = #{ipAddr}
+    </update>
+    <insert id="add" parameterType="IpInfoDTO" useGeneratedKeys="true" keyProperty="id">
+        insert into ip_info(ip_addr, location) VALUES (#{ipAddr},#{location})
+    </insert>
+</mapper>

+ 54 - 7
src/main/resources/mapper/LampMapper.xml

@@ -273,8 +273,8 @@
         <if test="number != null">
             and L.number = #{number}
         </if>
-        <if test="sn != null">
-            and L.address = #{sn}
+        <if test="address != null">
+            and L.address = #{address}
         </if>
         <if test="id != null">
             and L.id != #{id}
@@ -295,8 +295,8 @@
         <if test="number != null">
             and L.number = #{number}
         </if>
-        <if test="sn != null">
-            and L.address = #{sn}
+        <if test="address != null">
+            and L.address = #{address}
         </if>
         <if test="id != null">
             and L.id != #{id}
@@ -1255,12 +1255,12 @@
                 id = #{id} or
             </if>
             <if test="address != null and address != ''">
-                address = #{sn} or
+                address = #{address} or
             </if>
             <if test="networkId != null and networkId != 0">
                 networkid = #{networkId} or
             </if>
-            <if test="macAddress != null and macAddress = ''">
+            <if test="macAddress != null and macAddress != ''">
                 macAddress = #{macAddress} or
             </if>
 
@@ -1268,7 +1268,7 @@
         limit 0,1
     </select>
     <select id="getListByDto" resultType="LampInfoDTO">
-        select id,address,mode,control_type as controlType from lampinfo
+        select id,address,mode,control_type as controlType,dev_addr as devAddr from lampinfo
         <trim prefix="where" suffixOverrides="and|or">
             <if test="id != null">
                 id = #{id} or
@@ -1280,4 +1280,51 @@
         </trim>
         limit 0,2
     </select>
+    <insert id="addByDto" parameterType="com.welampiot.dto.LampInfoDTO" useGeneratedKeys="true" keyProperty="id"
+    >
+        insert into lampinfo(networkid,name,number,address,areaid,sectionid,longitude,latitude,createtime,ratedpower,control_type
+        <if test="macAddress != null">,macAddress</if>
+        <if test="mode != null">,mode</if>
+        <if test="lampPoleId != null and lampPoleId != 0">,lamp_pole_id</if>
+        <if test="installDate != null">,install_date</if>
+        <if test="expirationDate != null">,expiration_date</if>
+        <if test="devAddr != null and devAddr != 0">,dev_addr</if>
+        <if test="freqId != null">,freqId</if>
+        <if test="loopNumber != null">,zegbee_section_id</if>
+        <if test="bindStatus != null">,bindStatus</if>
+        )
+        values
+        (#{networkId},#{name},#{number},#{address},#{areaId},#{sectionId},#{longitude},#{latitude},#{createTime},#{ratedPower},#{controlType}
+        <if test="macAddress != null">,#{macAddress}</if>
+        <if test="mode != null">,#{mode}</if>
+        <if test="lampPoleId != null and lampPoleId != 0">,#{lampPoleId}</if>
+        <if test="installDate != null">,#{installDate}</if>
+        <if test="expirationDate != null">,#{expirationDate}</if>
+        <if test="devAddr != null and devAddr != 0">,#{devAddr}</if>
+        <if test="freqId != null">,#{freqId}</if>
+        <if test="loopNumber != null">,#{zegbeeSectionId}</if>
+        <if test="bindStatus != null">,#{bindStatus}</if>
+        )
+    </insert>
+    <update id="updateById" parameterType="com.welampiot.dto.LampInfoDTO"
+    >
+        update lampinfo
+        set
+        networkid=#{networkId},
+        name=#{name},
+        number=#{number},
+        address=#{address},
+        areaid=#{areaId},
+        control_type=#{controlType},
+        sectionid=#{sectionId},
+        longitude=#{longitude},
+        latitude=#{latitude}
+        <if test="mode != null">,mode=#{mode}</if>
+        <if test="lampPoleId != null and lampPoleId != 0">,lamp_pole_id=#{lampPoleId}</if>
+        <if test="installDate != null">,install_date=#{installDate}</if>
+        <if test="expirationDate != null">,expiration_date=#{expirationDate}</if>
+        <if test="ratedpower != null and ratedpower != 0">,ratedpower=#{ratedPower}</if>
+
+        where id = #{id}
+    </update>
 </mapper>

+ 20 - 1
src/main/resources/mapper/LampPoleMapper.xml

@@ -163,7 +163,7 @@
 <!--        </if>-->
         )
     </insert>
-    <insert id="update" parameterType="com.welampiot.dto.LampPoleDTO"
+    <insert id="update" parameterType="LampPoleVO"
     >
         update lamp_pole
         set
@@ -1329,4 +1329,23 @@
         </if>
         group by LP.id
     </select>
+
+    <insert id="updateById" parameterType="LampPoleDTO"
+    >
+        update lamp_pole
+        set
+        <if test="sn != null">sn = #{sn},</if>
+        <if test="name != null">name = #{name},</if>
+        <if test="number != null">number = #{number},</if>
+        <if test="height != null">height = #{height},</if>
+        <if test="areaId != null">areaid = #{areaId},</if>
+        <if test="devType != null">devtype = #{devType},</if>
+        <if test="sectionId != null">sectionid = #{sectionId},</if>
+        <if test="longitude != null">longitude = #{longitude},</if>
+        <if test="latitude != null">latitude = #{latitude},</if>
+        <if test="installDate != null">install_date = #{installDate},</if>
+        <if test="expirationDate != null">expiration_date = #{expirationDate},</if>
+        id=#{id}
+        where id = #{id}
+    </insert>
 </mapper>

+ 21 - 5
src/main/resources/mapper/NetworkMapper.xml

@@ -2,10 +2,13 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.welampiot.dao.NetworkDao">
     <insert id="add" parameterType="com.welampiot.dto.NetworkDTO" useGeneratedKeys="true" keyProperty="id">
-        insert into network(network_name,devicesn,protocoltype,areaid,sectionid,createtime,net_type,gatewaytype,devicetype,userId)
+        insert into network(network_name,devicesn,protocoltype,areaid,sectionid,createtime,net_type,gatewaytype,userId
+        <if test="deviceType != null">,devicetype</if>
         <if test="deviceId != null">,deviceid</if>
+        )
         values
-        (#{networkName},#{deviceSn},#{protocolType},#{areaId},#{sectionId},#{createTime},#{netType},#{gatewayType},#{deviceType},#{userId}
+        (#{networkName},#{deviceSn},#{protocolType},#{areaId},#{sectionId},#{createTime},#{netType},#{gatewayType},#{userId}
+        <if test="deviceType != null">,#{deviceType}</if>
         <if test="deviceId != null">,#{deviceId}</if>
         )
 
@@ -339,9 +342,22 @@
         update
             network n
         set
-            n.expiration_time = #{expirationTime}
+            <trim suffixOverrides=",">
+                <if test="expirationTime != null and expirationTime != ''">
+                    n.expiration_time = #{expirationTime},
+                </if>
+                <if test="lampCount != null and lampCount != 0">
+                    n.lampcount = #{lampCount},
+                </if>
+            </trim>
         where
-            n.simid = #{simId}
+            <choose>
+                <when test="simId != null">
+                    n.simid = #{simId}
+                </when>
+                <otherwise>id=#{id}</otherwise>
+            </choose>
+
     </update>
 
     <delete id="deleteNetworkData">
@@ -351,7 +367,7 @@
     </delete>
 
     <select id="getSimpleData" resultType="NetworkDTO">
-        select id,devicesn as deviceSn,protocoltype as protocolType,uid as uId from network
+        select id,devicesn as deviceSn,protocoltype as protocolType,uid as uId,lampcount as lampCount from network
         <trim prefix="where" suffixOverrides="and|or">
             <if test="id != null">
                 id = #{id} or

+ 0 - 1
src/main/resources/mapper/OperationLogMapper.xml

@@ -228,5 +228,4 @@
             </when>
         </choose>
     </select>
-
 </mapper>

+ 22 - 0
src/main/resources/mapper/RepairDispatchMapper.xml

@@ -12,4 +12,26 @@
         limit 1
     </select>
 
+    <select id="getRepairDispatchMultiJoinByVO" resultType="RepairDispatchDTO" parameterType="RepairDispatchVO">
+        select RP.id as repairUserId,
+        <choose>
+            <when test="version == 1">
+                G.english_name as area,
+            </when>
+            <when test="version == 2">
+                G.ru_name as area,
+            </when>
+            <otherwise>
+                G.chinese_name as area,
+            </otherwise>
+        </choose>
+         S.name as section,L.id as lampId,RP.name as userName,AI.stralarmtype as alarmType,AI.updatetime as alarmTime
+        from repair_dispatch RD
+        LEFT JOIN repair_personnel as RP ON RP.id = RD.repair_userid
+        left join all_alarm_info_log as AI on AI.id = RD.alarmid
+        left join lampinfo as L on L.id = RD.lampid
+        left join section as S on S.id = L.sectionid
+        left join global_location as G on G.id = S.pid
+        where RD.alarmid = #{alarmId}
+    </select>
 </mapper>

+ 19 - 6
src/main/resources/mapper/RepairInfoMapper.xml

@@ -5,7 +5,7 @@
     <select id="getRepairInfoByDTO" resultType="RepairInfoDTO">
         select r.id,r.alarm_type alarmType,r.alarm_time alarmTime,r.area,r.section,r.repair_time repairTime,l.number
         from repair_info r left join lampinfo l on r.lampid = l.id
-        where r.repair_userid = #{repairUserid}
+        where r.repair_userid = #{repairUserId}
         <if test="page >= 0 and count > 0">
             limit #{page},#{count}
         </if>
@@ -18,11 +18,24 @@
     </delete>
 
     <select id="getRepairInfoDTOByAlarmId" resultType="RepairInfoDTO">
-        select r.id,r.repair_time as repairTime,r.user_name as username,r.repair_userid as repairUserid
-        from repair_info r
-        where r.alarmid = #{alarmId}
-        order by r.repair_time desc
-        limit 1
+        select RP.id,RP.name,RP.section,RP.email,RP.phone,RP.number,RP.company
+        from repair_info RI
+        left join repair_personnel RP
+        on RP.id = RI.repair_userid
+        where RI.id = #{alarmId}
+
     </select>
+
+    <insert id="addData" parameterType="RepairDispatchDTO" useGeneratedKeys="true" keyProperty="id">
+        insert into repair_info(repair_userid,area,section,lampid,user_name,alarm_type,alarm_time)
+        values (#{repairUserId},#{area},#{section},#{lampId},#{userName},#{alarmType},#{alarmTime})
+    </insert>
     
+    <select id="getRepairInfoById" parameterType="Integer" resultType="RepairInfoDTO">
+        select L.number,RI.area,RI.section,RI.alarm_type as alarmType,RI.user_name as repairUser,RI.repair_time as repairTime,RD.updatetime as dispatchTime
+        from repair_info RI
+        left join lampinfo L on L.id = RI.lampid
+        left join repair_dispatch RD on RD.alarmid = RI.id
+        where RI.alarmid = #{alarmid}
+    </select>
 </mapper>

+ 8 - 2
src/main/resources/mapper/SectionMapper.xml

@@ -1,8 +1,14 @@
 <?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.welampiot.dao.SectionDao">
-    <select id="getAllList" resultType="com.welampiot.dto.SectionDTO">
-        select id,name from section
+    <select id="getAllList" resultType="com.welampiot.dto.SectionDTO" parameterType="SectionDTO">
+        select id,name,pid from section
+        <if test="sectionList != null and !sectionList.isEmpty()">
+            WHERE id IN
+            <foreach collection="sectionList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
     </select>
     <select id="getListByPid" parameterType="java.lang.Integer" resultType="com.welampiot.dto.SectionDTO">
         select id,name from section

+ 17 - 11
src/test/java/com/welampiot/service/UserServiceTest.java

@@ -1,7 +1,11 @@
 package com.welampiot.service;
 
-import com.welampiot.dto.NetworkDTO;
-import com.welampiot.utils.ToolUtils;
+import com.welampiot.configuration.LastSqlInterceptor;
+import com.welampiot.dto.AcDevInfoDTO;
+import com.welampiot.dto.GroupDTO;
+import com.welampiot.dto.LampInfoDTO;
+import com.welampiot.dto.OperationLogDTO;
+import com.welampiot.utils.*;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -10,8 +14,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 
 import javax.annotation.Resource;
 import javax.sql.DataSource;
-import java.io.IOException;
-import java.sql.SQLException;
+import java.util.*;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest
@@ -25,15 +28,18 @@ public class UserServiceTest {
     @Autowired
     private VideoGbInfoService videoGbInfoService;
     @Resource
-    private NetworkService plcAddressService;
+    private LastSqlInterceptor lastSqlInterceptor;
+    @Autowired
+    private AcDevInfoService acDevInfoService;
+
 
     @Test
-    public void testConnection() throws SQLException, IOException {
-        NetworkDTO networkDTO = new NetworkDTO();
-        networkDTO.setDeviceSn("fefed436");
-        //plcAddressDTO.setLampAddress("C20102010400");
-        networkDTO = plcAddressService.getSimpleData(networkDTO);
-        System.out.println("===d===:"+networkDTO);
+    public void testConnection() throws Exception {
+        String str = "供电异常,供电异常1";
+        String s = toolUtils.changeAlarm(str);
+        System.out.println("====dd:"+s);
+
+        //schemaParamsterInterceptor.intercept()
 //        long l = System.currentTimeMillis() - (24L * 3600 * 30*1000);
 //        Date date = new Date(l);
 //        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");