weclouds 2 лет назад
Родитель
Сommit
c1ae339579
28 измененных файлов с 738 добавлено и 105 удалено
  1. 26 2
      src/main/java/com/welampiot/common/InterfaceResultEnum.java
  2. 415 76
      src/main/java/com/welampiot/controller/LampController.java
  3. 1 0
      src/main/java/com/welampiot/dao/GlobalLocationDao.java
  4. 1 0
      src/main/java/com/welampiot/dao/LampDao.java
  5. 1 0
      src/main/java/com/welampiot/dao/NetworkDao.java
  6. 14 0
      src/main/java/com/welampiot/dao/PlcAddressDao.java
  7. 1 0
      src/main/java/com/welampiot/dao/SectionDao.java
  8. 4 0
      src/main/java/com/welampiot/dto/LampInfoDTO.java
  9. 1 0
      src/main/java/com/welampiot/dto/NetworkDTO.java
  10. 11 0
      src/main/java/com/welampiot/dto/PlcAddressDTO.java
  11. 1 0
      src/main/java/com/welampiot/service/GlobalLocationService.java
  12. 1 0
      src/main/java/com/welampiot/service/LampService.java
  13. 1 0
      src/main/java/com/welampiot/service/NetworkService.java
  14. 14 0
      src/main/java/com/welampiot/service/PlcAddressService.java
  15. 1 0
      src/main/java/com/welampiot/service/SectionService.java
  16. 4 0
      src/main/java/com/welampiot/service/impl/GlobalLocationServiceImpl.java
  17. 4 0
      src/main/java/com/welampiot/service/impl/LampServiceImpl.java
  18. 5 0
      src/main/java/com/welampiot/service/impl/NetworkServiceImpl.java
  19. 45 0
      src/main/java/com/welampiot/service/impl/PlcAddressServiceImpl.java
  20. 3 0
      src/main/java/com/welampiot/service/impl/SectionServiceImpl.java
  21. 2 0
      src/main/java/com/welampiot/vo/ZhongLightPlcVO.java
  22. 1 1
      src/main/resources/mapper/AllAlarmInfoLogMapper.xml
  23. 9 1
      src/main/resources/mapper/GlobalLocationMapper.xml
  24. 32 5
      src/main/resources/mapper/LampMapper.xml
  25. 28 14
      src/main/resources/mapper/NetworkMapper.xml
  26. 86 0
      src/main/resources/mapper/PlcAddressMapper.xml
  27. 8 0
      src/main/resources/mapper/SectionMapper.xml
  28. 18 6
      src/test/java/com/welampiot/service/UserServiceTest.java

+ 26 - 2
src/main/java/com/welampiot/common/InterfaceResultEnum.java

@@ -53,7 +53,7 @@ public enum InterfaceResultEnum {
     LACK_LOOP_NUMBER_ERROR("0242","请填写回路编号","",""),
     LOOP_NUMBER_UNIQUE_ERROR("0243","回路编号重复","",""),
     LACK_LOOP_DEV_TYPE_ERROR("0244","设备类型不能为空","",""),
-    LACK_LOOP_CONTROL_TYPE_ERROR("0245","控制器类型不能为空","",""),
+    LACK_LOOP_CONTROL_TYPE_ERROR("0245","请选择控制器类型","Please select the controller type","Выберите тип контроллера"),
     LACK_LOOP_RATE_ID_ERROR("0246","请选择费率","",""),
     LACK_WATER_IMMERSION_NUMBER_ERROR("0247","水浸设备编号不能为空","",""),
     WATER_IMMERSION_NUMBER_UNIQUE_ERROR("0248","水浸设备编号重复","",""),
@@ -79,7 +79,7 @@ public enum InterfaceResultEnum {
     LACK_SIM_NUMBER_ERROR("0268","井盖sim卡号不能为空","",""),
     LACK_TILT_ADDRESS_ERROR("0269","倾斜监测设备地址不能为空","",""),
     TILT_ADDRESS_UNIQUE_ERROR("0270","倾斜监测设备地址重复","",""),
-    LACK_PROTOCOL_TYPE_ERROR("0271","请选择协议类型","",""),
+    LACK_PROTOCOL_TYPE_ERROR("0271","请选择协议类型","Please select protocol type","Выберите тип протокола"),
     COMMAND_FAIL("0272","指令失败","Command failure","Команда не работает"),
     LACK_SMOKE_SENSATION_MODEL_ERROR("0273","烟感型号不能为空","The smoke sensor model cannot be empty","Модель дыма не может быть пустой"),
     LACK_SMOKE_SENSATION_NUMBER_ERROR("0274","烟感编号不能为空","The smoke sensor number cannot be empty","Номер сигареты не может быть пустым"),
@@ -202,6 +202,30 @@ public enum InterfaceResultEnum {
     DEVICE_OFFLINE_ERROR("0390","设备已离线","Device is offline","Оборудование отключено"),
     DEVICE_TIMEOUT_ERROR("0391","控制超时","Control timeout","Контроль за превышением времени"),
     DEVICE_CONNECTED_ERROR("0392","设备连接异常","Abnormal device connection","Необычное подключение оборудования"),
+    LIGHT_NUMBER_ERROR("0393","路灯编号不能为空","Street number can not be empty","номер уличного фонаря не может быть пустым"),
+    LIGHT_NUMBER_ZERO_ERROR("0394","编号不能为0","The number can not be 0","нумерация не может быть 0"),
+    LIGHT_NUMBER_LENGTH_ERROR("0395","编号长度不能超过6位","The number must not exceed 6 bits","длина номера не может превышать 6 битов"),
+    LIGHT_NUMBER_NAME_ERROR("0396","编号为数字或字母","Numbering numbers or letters","нумеровать цифрами или буквами"),
+    LACK_ADDRESS_ERROR("0397","无线模块地址不能为空","The address of the wireless module can not be empty","адрес беспроводного модуля не может быть пустым"),
+    LACK_LIGHT_SERIAL_Number_ERROR("0398","缺少灯序号","Missing lamp serial number","Отсутствие номера лампы"),
+    LIGHT_SERIAL_Number_RANGE_ERROR("0399","灯序号要大于9","The lamp number should be greater than 9","Номер лампы должен быть больше 9"),
+
+    //灯 0400-0499
+    LACK_FREQUENCY_ERROR("0400","请选择频段信息","Please select frequency band information","Выберите частотную информацию"),
+    LACK_ZIGBEE_LOOP_NUMBER_ERROR("0401","设备回路编号不能为0","The device circuit number cannot be 0","Номер контура устройства не может быть 0"),
+    NUMBER_EXIST_ERROR("0402","编号已经存在","Number already exists","Номер уже существует."),
+    ADDRESS_LIGHT_EXIST_ERROR("0403","无线模块地址已经存在","The wireless module address already exists","адрес беспроводного модуля уже существует"),
+    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","Адрес устройства уже существует."),
+
+
+    //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","Сначала добавьте шлюз"),
+
     ;
     private String code;
     private String msgCn;

+ 415 - 76
src/main/java/com/welampiot/controller/LampController.java

@@ -18,6 +18,8 @@ import org.apache.commons.codec.DecoderException;
 import org.apache.commons.codec.binary.Hex;
 import org.apache.commons.lang3.ArrayUtils;
 import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.DigestUtils;
@@ -73,6 +75,8 @@ public class LampController {
     private ZhongLightPlc zhongLightPlc;
     @Autowired
     private AESUtils aesUtils;
+    @Autowired
+    private PlcAddressService plcAddressService;
 
     /**
      * 灯控列表
@@ -152,24 +156,254 @@ public class LampController {
     public BaseResult save(HttpServletRequest request){
         Integer version = request.getParameter("version") == null ? 0 : Integer.parseInt(request.getParameter("version"));
         Integer lampId = request.getParameter("lampId") == null || request.getParameter("lampId").length() == 0? 0 : Integer.parseInt(request.getParameter("lampId"));
-        Integer areaId = request.getParameter("areaId") == null ? 0 : Integer.parseInt(request.getParameter("areaId"));
-        Integer sectionId = request.getParameter("sectionId") == null ? 0 : Integer.parseInt(request.getParameter("sectionId"));
+        String area = request.getParameter("areaId");// == null ? 0 : Integer.parseInt(request.getParameter("areaId"));
+        if (area == null || area.equals("0")) return toolUtils.response(InterfaceResultEnum.LACK_AREA_ERROR,version);
+        Integer areaId = Integer.parseInt(area);
+        String section = request.getParameter("sectionId"); // == null ? 0 : Integer.parseInt(request.getParameter("sectionId"));
+        if (section == null || section.equals("0")) return toolUtils.response(InterfaceResultEnum.LACK_SECTION_ERROR,version);
+        Integer sectionId = Integer.parseInt(section);
+
+        String protocol = request.getParameter("protocolType");// == null ? 0 : Integer.parseInt(request.getParameter("protocolType"));
+        if (protocol == null) return toolUtils.response(InterfaceResultEnum.LACK_PROTOCOL_TYPE_ERROR,version);
+        Integer protocolType = Integer.parseInt(protocol);
 
-        Integer protocolType = request.getParameter("protocolType") == null ? 0 : Integer.parseInt(request.getParameter("protocolType"));
-        Integer controlType = request.getParameter("controlType") == null ? 0 : Integer.parseInt(request.getParameter("controlType"));
+        String control = request.getParameter("controlType");// == null ? 0 : Integer.parseInt(request.getParameter("controlType"));
+        if (control == null) return toolUtils.response(InterfaceResultEnum.LACK_LOOP_CONTROL_TYPE_ERROR,version);
+        Integer controlType = Integer.parseInt(control);
 
         Integer power = request.getParameter("power") == null ? 0 : Integer.parseInt(request.getParameter("power"));
-        String installDate = request.getParameter("install_date") == null ? "" : request.getParameter("install_date");
-        String expirationDate = request.getParameter("expiration_date") == null ? "" : request.getParameter("expiration_date");
+        String installDate = request.getParameter("installDate") == null ? "" : request.getParameter("installDate");
+        String expirationDate = request.getParameter("expirationDate") == null ? "" : request.getParameter("expirationDate");
 
         String number = request.getParameter("number");
+        if (number == null || number.length() == 0) return toolUtils.response(InterfaceResultEnum.LIGHT_NUMBER_ERROR,version);
+        if (number.length() == 1 && number.equals("0")) return toolUtils.response(InterfaceResultEnum.LIGHT_NUMBER_ZERO_ERROR,version);
+        if (number.length() > 6) return toolUtils.response(InterfaceResultEnum.LIGHT_NUMBER_LENGTH_ERROR,version);
+        String regex = "^[A-Za-z0-9_]+$";
+        if (number.matches(regex) == false) return toolUtils.response(InterfaceResultEnum.LIGHT_NUMBER_NAME_ERROR,version);
+        if (number.length() < 6){
+            //初全长度为6
+            number = "000000"+number;
+            number = number.substring(number.length() - 6,number.length());
+        }
         String longitude = request.getParameter("longitude") == null || request.getParameter("longitude").length() == 0 ? "0" : request.getParameter("longitude");
         String latitude = request.getParameter("latitude") == null || request.getParameter("latitude").length() == 0 ? "0" : request.getParameter("latitude");
 
         String name = request.getParameter("name");
         String sn = request.getParameter("sn");
+        if (sn == null || sn.length() == 0) return toolUtils.response(InterfaceResultEnum.LACK_ADDRESS_ERROR,version);
+        sn = sn.trim();//去除两边的空格
+
+        String devAddr = request.getParameter("devAddr");
+        Integer bindStatus = 1;
+        if (protocolType == 11 && (controlType == 4 || controlType == 8) ){
+            if ( devAddr == null || devAddr.length() == 0)  return toolUtils.response(InterfaceResultEnum.LACK_LIGHT_SERIAL_Number_ERROR,version);
+            if (Integer.parseInt(devAddr) < 10) return toolUtils.response(InterfaceResultEnum.LIGHT_SERIAL_Number_RANGE_ERROR,version);
+            bindStatus = 0;
+        }
+        String freqId = request.getParameter("freqId");
+        if (protocolType == 6 && freqId == null) return toolUtils.response(InterfaceResultEnum.LACK_FREQUENCY_ERROR,version);
+
+        String loopNumber = request.getParameter("loopNumber");
+        if (protocolType == 5){
+            //zigbee灯具所属的回路
+            if (loopNumber == null || loopNumber.equals("0")) return toolUtils.response(InterfaceResultEnum.LACK_ZIGBEE_LOOP_NUMBER_ERROR,version);
+        }
+
+        String macAddress = request.getParameter("macAddress");
+
+        if (controlType == 26 || controlType == 27){
+            if (macAddress != null && sn != null){
+                bindStatus = 0;
+                //微自然plc
+                this.savePlcAddress(macAddress,sn);
+            }
+        }
 
         if (lampId == 0){  // 添加
+            //同一个路段下不能有相同的编号
+            LampInfoDTO lampInfo = new LampInfoDTO();
+            lampInfo.setSectionId(sectionId);
+            lampInfo.setNumber(number);
+
+            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);
+            //同一个plc下不允许有相同的序号/相同灯的地址
+            if (protocolType == 11 && controlType != 26 && controlType != 27){
+                lampInfo.setMacAddress(macAddress);
+                //灯地址
+                Integer macAddressTotal = lampService.checkData(lampInfo);
+                if (macAddressTotal > 0) return toolUtils.response(InterfaceResultEnum.PLC_ADDRESS_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);
+            }
+            if (protocolType == 13 || controlType == 26 || controlType ==27){
+                lampInfo.setMacAddress(macAddress);
+                //lampInfo.setAddress(sn);
+                Integer devAddrTotal = lampService.checkData(lampInfo);
+                if (devAddrTotal > 0) return toolUtils.response(InterfaceResultEnum.PLC_ADDRESS_EXIST_ERROR,version);
+            }
+            if (protocolType == 5){
+                //zigbee设备先判断有没有添加网关
+                NetworkDTO networkData = new NetworkDTO();
+                networkData.setDeviceSn(sn);
+                Integer networkTotal = networkService.checkNetworkData(networkData);
+                if (networkTotal == 0) return toolUtils.response(InterfaceResultEnum.LACK_PLC_ADDRESS__ERROR,version);
+            }
+            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= 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();
+                if (version == 0){
+                    String code = "0403";
+                    if (version == 0){
+                        BaseResult<Object> objectBaseResult = new BaseResult<>(code, chinaMsg, new Object());
+                        return objectBaseResult;
+                    } else if (version == 1) {
+                        BaseResult<Object> objectBaseResult = new BaseResult<>(code, engMsg, new Object());
+                        return objectBaseResult;
+                    }else {
+                        BaseResult<Object> objectBaseResult = new BaseResult<>(code, ruMsg, new Object());
+                        return objectBaseResult;
+                    }
+                }
+            }
+            lampInfo.setBindStatus(bindStatus);
+            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;
+                    //plc下有单灯控制器和双灯控制器
+                    lampInfo.setBindStatus(0);
+                }else {
+                    netAddress = sn.length() == 13 ? String.valueOf(Integer.parseInt(sn,10)) : sn;
+                }
+                NetworkDTO networkData = new NetworkDTO();
+                networkData.setDeviceSn(sn);
+                NetworkDTO simpleData = networkService.getSimpleData(networkData);
+                //zigbee设备
+                if (protocolType == 5 && controlType == 13){
+                    //先添加控制器,再添加灯具
+                    lampInfo.setMacAddress(macAddress);
+                    //灯地址
+                    Integer macAddressTotal = lampService.checkData(lampInfo);
+                    if (macAddressTotal > 0) return toolUtils.response(InterfaceResultEnum.PLC_ADDRESS_EXIST_ERROR,version);
+                   Object lightObject = this.createCtrollLight(macAddress,simpleData.getUId(),Integer.parseInt(loopNumber),longitude,latitude,name);
+                   if (lightObject == null){
+                       return toolUtils.response(InterfaceResultEnum.CREATE_LIGHT_ERROR,version);
+                   }else {
+                       Integer times = ((ZhongLightPlcVO)lightObject).getTimes();
+                       Integer errorCode = ((ZhongLightPlcVO)lightObject).getErrorCode();
+                       if (errorCode > 0){
+                           if (times == 3) return toolUtils.response(InterfaceResultEnum.CREATE_CONTROL_ERROR,version);
+                           if (times == 4) return toolUtils.response(InterfaceResultEnum.CREATE_CONTROL_LIGHT_ERROR,version);
+                       }else {
+                           //成功
+                         lampInfo.setLampCtrId(((ZhongLightPlcVO)lightObject).getLampCtrlId());
+                         lampInfo.setUid(((ZhongLightPlcVO)lightObject).getUid());
+                       }
+                   }
+                }
+
+                if (protocolType != 11 && protocolType != 13 && protocolType != 5 && simpleData != null){
+                    lampInfo.setAddress(null);
+                    lampInfo.setNetworkId(simpleData.getId());
+                    LampInfoDTO lamp = lampService.getDataByVO(lampInfo);
+                    if (lamp != null){
+                        networkService.deleteNetworkData(simpleData.getId());
+                    }
+                    lampInfo.setAddress(sn);
+                }
+                if (protocolType != 11 && simpleData != null){
+                   return toolUtils.response(InterfaceResultEnum.DEVICE_ADDRESS_EXITS_ERROR,version);
+                }
+            }
+
+//            if ($protocoltype == 0 || $protocoltype == 3 || $protocoltype == 4 || $protocoltype == 5 || $protocoltype == 6
+//                    || $protocoltype == 7 || $protocoltype == 8 || $protocoltype == 9 || $protocoltype == 10 || $protocoltype == 11 || $protocoltype == 13) {
+//                $data['net_type'] = 1;
+//
+//                if ( $protocoltype != 11 && $protocoltype != 13 && $protocoltype != 5 && !empty($net_info)) {
+//                    $lamp_info = $this->Lampinfo_model->get_one(array('networkid'=>$net_info['id']),'id');
+//                    if (!empty($lamp_info)) {
+//                        $this->Network_model->delete(array('id'=>$net_info['id']));
+//                    }
+//                }
+//
+//                // if ( $protocoltype != 11 && $this->Network_model->getDataCount(array('devicesn'=>$number))) {
+//                //     exit(json_result('0309',$this->response['0309'],array()));
+//                // }
+//                // plc只创建一个网络就可以了
+//                $plcNetCount = 0; //0:没有创建 ,1: 创建过了
+//                if ($this->Network_model->getDataCount(array('devicesn'=>$number))) {
+//                    if ($protocoltype == 11 && ($data['control_type'] != 26 && $data['control_type'] != 27)){
+//                        $plcNetCount = 1;
+//                    }
+//                }
+//
+//
+//                $networkData['gatewaytype'] = 'direct';
+//                $networkData['protocoltype'] = empty($protocoltype) ? 0 : $protocoltype;
+//                $networkData['areaid'] = $data['areaid'];
+//                $networkData['sectionid'] = $data['sectionid'];
+//                $networkData['devicesn'] = $number;
+//                if ($protocoltype == 10) $networkData['devicetype'] = 4;
+//                if ($protocoltype == 8 && ($data['control_type'] == 29 || $data['control_type'] == 33)) $networkData['devicetype'] = 4;
+//                if ($protocoltype == 3 && $data['control_type'] == 9) $networkData['devicetype'] = 4;
+//                if ($protocoltype == 8 && $data['control_type'] == 19) $networkData['devicetype'] = 4;
+//                if ($control_type == 16 || $control_type == 20) {
+//                    $networkData['devicetype'] = 5;
+//                }
+//                $networkData['network_name'] = $number;
+//                $networkData['net_type'] = 1;
+//                $networkData['createtime'] = date('Y-m-d H:i:s',time());
+//                $networkData['userId'] = $userId;
+//
+//                //$data['networkid'] = $this->Network_model->add($networkData);
+//                if ($protocoltype == 6) $this->add_device($data['address'],$freqId);
+//                if($protocoltype ==7 ) {
+//                    $onenet=$this->add_device_onenet($data['address']);
+//                    $file = fopen('./file/onenet_group_cmdURL.txt', 'a+');
+//                    fwrite($file, date('Y-m-d H:i:s').'----'.json_encode($onenet).' ');
+//                    fclose($file);
+//                    if (isset($onenet["data"])) {
+//                        $onenetId=$onenet['data']['device_id'];
+//                        if($onenetId){
+//                            $data['deviceid']=$onenetId;
+//                            $networkData['deviceid']=$onenetId;
+//                        }
+//                    }
+//                }
+//            }
+            //添加网关
+            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);
@@ -185,6 +419,9 @@ public class LampController {
             lampInfoDTO.setInstallDate(installDate);
             lampInfoDTO.setExpirationDate(expirationDate);
             lampInfoDTO.setRatedPower(power);
+            lampInfoDTO.setDevAddr(devAddr);
+            lampInfoDTO.setFreqId(Integer.parseInt(freqId));
+            lampInfoDTO.setZegbeeSectionId(loopNumber);
             return lampService.add(lampInfoDTO);
         }else { // 编辑
 //            LampInfoDTO oldLamp = lampService.getDetailsById(lampId,version);
@@ -218,7 +455,22 @@ public class LampController {
             return lampService.update(lampInfoDTO);
         }
     }
-
+    //微自然的plc
+    private void savePlcAddress(String netAddress,String lampAddress){
+        PlcAddressDTO plcAddressDTO = new PlcAddressDTO();
+        plcAddressDTO.setLampAddress(lampAddress);
+        plcAddressDTO.setNetAddress(netAddress);
+        Integer total = plcAddressService.checkDataByVO(plcAddressDTO);
+        if (total == 0){
+            PlcAddressDTO result = plcAddressService.getMaxPvid(plcAddressDTO);
+            if (result == null){
+                plcAddressDTO.setPvid(1);
+            }else {
+                plcAddressDTO.setPvid(result.getPvid() + 1);
+            }
+            plcAddressService.insertDataByVO(plcAddressDTO);
+        }
+    }
     /**
      * 删除灯控
      * @param request
@@ -635,77 +887,164 @@ public class LampController {
         }
 
         return null;
-//        $this->getToken(); //获取token
-//        if (!empty($this->token)) {
-//            $this->plcLogin(); //获取ProjectId,OrganizationId,SessionId,DivisionId
-//
-//            if (!empty($this->sessionId)){
-//                $this->header = array(
-//                        'Content-Type: application/json',
-//                        "Authorization: Bearer " . "{$this->token}",
-//                        "SessionId: " . "{$this->sessionId}"
-//                );
-//
-//                //1:网关, 4: 控制器 和 灯具
-//                $plcUrl = $this->zhongUrl .  'commons/v1_0/send';
-//
-//                $this->curl = curl_init();
-//                //gatewayAddr 一定要小写
-//                if ($adjustment == 0){
-//                    //开/关灯
-//                    $cmds = [array('code'=>1,'headSerial'=>1,'ep'=>1,'gatewayAddr'=>'0x'.strtolower($gatewayAddr),'addr'=>'0x'.$controlAddr,'uid'=>$lamp_ctrl_id,
-//                            'control'=>array('devtype'=>23,'on'=>intval($bright))
-//                    )];
-//                }else{
-//                    $cmds = [array('code'=>1,'headSerial'=>1,'ep'=>1,'gatewayAddr'=>'0x'.strtolower($gatewayAddr),'addr'=>'0x'.$controlAddr,'uid'=>$lamp_ctrl_id,
-//                            'control'=>array('devtype'=>23,'bri'=>intval($bright),'port'=>1)
-//                    )];
-//                }
-//                $data = array('platform' => 1, 'cmds' => $cmds);
-//
-//
-//                $timeStamp = date('YmdHis');
-//                $data = json_encode($data);
-//
-//                //加密
-//                $res = $this->encrypt($data);
-//                $seq = '001';
-//                $sig = $this->OperatorID . $res . $timeStamp . $seq;
-//                //hmac-md5加密后,小写要转换成大写
-//                $sig = strtoupper($this->hmac($sig, $this->sigSecret));
-//                $body = array('OperatorID' => $this->OperatorID, 'Data' => $res, 'TimeStamp' => $timeStamp, 'Seq' => $seq, 'Sig' => $sig);
-//                $body = json_encode($body);
-//
-//                $result = $this->curlSendCmd($body, $plcUrl,10);
-//                $result = json_decode($result);
-//                if (empty($result)){
-//                    // exit(json_result('0918', $this->response['0918']));
-//                    return '命令下发超时';
-//
-//                }else{
-//                    if($result->Ret == 0){
-//                        //解密
-//                        $res = $this->decrypt($result->Data);
-//                        $res = json_decode($res);
-//                        if ($res[0]->result == 780) {
-//                            //离线
-//                            return '设备离线';
-//                        } elseif ($res[0]->result == 201) {
-//                            return '控制超时';
-//                        }elseif ($res[0]->result == 203){
-//                            //设备连接异常 / 设备离线
-//                            return '设备连接异常';
-//                        }elseif ($res[0]->result == 0){
-//                            return '成功';
-//                        }
-//
-//                    }
-//                }
-//
-//            }
-//        }
     }
+    /* 0. 最先要有了网关
+     * 1. 先添加控制器
+     * 2. 再添加灯具
+     */
+    //添加设备 - 控制器
+    private Object createCtrollLight(String macAddress,String uId,Integer zibeeSectionId,String longitude, String latitude,String name){
+        Object tokenObject = this.getToken();
+        if (tokenObject == null ){
+            //失败
+            return null;
+        }else {
+            Integer errorCode = ((ZhongLightPlcVO) tokenObject).getErrorCode();
+            if (errorCode > 0) return tokenObject; //也是失败的
+        }
+        //登录
+        Object loginObject = this.zhongPlcLogin((ZhongLightPlcVO) tokenObject);
+        if (loginObject == null ){
+            //失败
+            return null;
+        }else {
+            Integer errorCode = ((ZhongLightPlcVO) loginObject).getErrorCode();
+            if (errorCode > 0) return loginObject; //也是失败的
+        }
+        //创建控制器
+        String url = zhongLightPlc.getZhongUrl() + "commons/v1_0/create";
+        //type: 23(v3控制器)
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("type",23);
+        jsonObject.put("gateway_id",uId);
+        jsonObject.put("section_id",zibeeSectionId);
+        jsonObject.put("division_id",((ZhongLightPlcVO) loginObject).getDivisionId());
+        jsonObject.put("organization_id",((ZhongLightPlcVO) loginObject).getOrganizationId());
+        jsonObject.put("project_id",((ZhongLightPlcVO) loginObject).getProjectId());
+        jsonObject.put("lamp_post_type",20);
+        jsonObject.put("lamp_post_number",macAddress);
+
+        JSONObject controlObject =  new JSONObject();
+        controlObject.put("platform",1);
+        controlObject.put("type",3);
+        controlObject.put("addr","0x"+macAddress);
+        controlObject.put("property",jsonObject);
+
+        String dataObjectString = controlObject.toString();
+        //aes128位,模式:cbc,填充模式: pkcs5padding
+        //hmac-md5加密后,小写要转换成大写
+        String bodyStr = this.encryptAndMd5(dataObjectString);
+        //发送请求
+        String token = ((ZhongLightPlcVO) loginObject).getToken();
+        String sessionId = ((ZhongLightPlcVO) loginObject).getSessionId();
+        String respone = null;
+        try {
+            respone = toolUtils.sendHttp("post", url, bodyStr, token, sessionId, 5);
+            System.out.println("===dd:"+respone);
+
+            JSONObject parseObject = JSON.parseObject(respone);
+            Integer ret = parseObject.getInteger("Ret");
+            //{"Ret": 0, "Msg": "Successfully", "Data": "/FZGtGawB4O9lTtef3Up4w8rUWVjXvpWXk7P36M792A=", "Sig": "57D14850E6FED20D242D0C958DAE8403"}
+            ZhongLightPlcVO zhongLightPlcVO = new ZhongLightPlcVO();
+            zhongLightPlcVO.setTimes(3);
+
+            if (ret == 0){
+                //成功
+                String data = parseObject.getString("Data");
+                //解密
+                String decryptJson = aesUtils.decrypt(zhongLightPlc.getEncryptKey(), zhongLightPlc.getIv(), data);
+                //解释json
+                JSONObject resultbject = JSON.parseObject(decryptJson);
+                Integer resultCode = resultbject.getInteger("result");
+                zhongLightPlcVO.setErrorCode(resultCode);//是否调光成功
+
+                if (resultCode == 0){
+                    //成功
+                    zhongLightPlcVO.setSuccCode(0);
+                    String lampCtrId = resultbject.getString("uid");
+                    //zhongLightPlcVO.setLampCtrlId(lampCtrId);
+                    ((ZhongLightPlcVO) loginObject).setLampCtrlId(lampCtrId);
+                    //创建灯具
+                    Object lightObject = this.createLight(macAddress, lampCtrId, loginObject, longitude, latitude, name);
+                    if (lightObject != null){
+                        ((ZhongLightPlcVO)lightObject).setLampCtrlId(lampCtrId);
+                        return lightObject;
+                    }
+                }else {
+                    //创建失败
+                    return zhongLightPlcVO;
+                }
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return null;
+    }
+    private Object createLight(String macAddress,String lampCtrId,Object loginObject, String longitude,String latitude,String name){
+        String url = zhongLightPlc.getZhongUrl() + "commons/v1_0/create";
+        //zigbee设备网关会设置变比和轮询时间,所以与网关设置一样就可以了,poll_interval与formula
+        //port_id:是针对双灯控制器的
+        //type: 5是zigbee的控制器
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("type",5);
+        jsonObject.put("encryption",1);
+        jsonObject.put("poll_interval",15);
+        jsonObject.put("formula",1);
+        jsonObject.put("division_id",((ZhongLightPlcVO) loginObject).getDivisionId());
+        jsonObject.put("organization_id",((ZhongLightPlcVO) loginObject).getOrganizationId());
+        jsonObject.put("project_id",((ZhongLightPlcVO) loginObject).getProjectId());
+        jsonObject.put("longitude",longitude);
+        jsonObject.put("latitude",latitude);
+        jsonObject.put("port_id",1);
+        jsonObject.put("lamp_ctrl_id",((ZhongLightPlcVO) loginObject).getLampCtrlId());
+        jsonObject.put("name",name);
+
+        JSONObject dataObject = new JSONObject();
+        dataObject.put("platform",1);
+        dataObject.put("type",4);
+        dataObject.put("addr","0x"+macAddress);
+        dataObject.put("property",jsonObject);
+        String dataObjectString = dataObject.toString();
+        String bodyStr = this.encryptAndMd5(dataObjectString);
+
+        //发送请求
+        String token = ((ZhongLightPlcVO) loginObject).getToken();
+        String sessionId = ((ZhongLightPlcVO) loginObject).getSessionId();
+        String respone = null;
+        try {
+            respone = toolUtils.sendHttp("post", url, bodyStr, token, sessionId, 5);
+            System.out.println("===light:"+respone);
+
+            JSONObject parseObject = JSON.parseObject(respone);
+            Integer ret = parseObject.getInteger("Ret");
+            //{"Ret": 0, "Msg": "Successfully", "Data": "/FZGtGawB4O9lTtef3Up4w8rUWVjXvpWXk7P36M792A=", "Sig": "57D14850E6FED20D242D0C958DAE8403"}
+            ZhongLightPlcVO zhongLightPlcVO = new ZhongLightPlcVO();
+            zhongLightPlcVO.setTimes(4);
 
+            if (ret == 0){
+                //成功
+                String data = parseObject.getString("Data");
+                //解密
+                String decryptJson = aesUtils.decrypt(zhongLightPlc.getEncryptKey(), zhongLightPlc.getIv(), data);
+                //解释json
+                JSONObject resultbject = JSON.parseObject(decryptJson);
+                Integer resultCode = resultbject.getInteger("result");
+                zhongLightPlcVO.setErrorCode(resultCode);//是否调光成功
+
+                if (resultCode == 0){
+                    //成功
+                    zhongLightPlcVO.setSuccCode(0);
+                    String uid = resultbject.getString("uid");
+                    zhongLightPlcVO.setUid(uid);
+                }
+                return zhongLightPlcVO;
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return null;
+    }
+//
     private String encryptAndMd5(String data){
         String key = zhongLightPlc.getEncryptKey();
         String iv = zhongLightPlc.getIv();

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

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

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

@@ -62,4 +62,5 @@ public interface LampDao {
     List<LampInfoDTO> getLampSectionAlarmCountTop(LampVO vo);
     LampInfoDTO getLampOfLampPoleById(@Param("lampPoleId") Integer lampPoleId, @Param("lampId") Integer lampId);
     List<LampInfoDTO> findLampDeviceBySn(@Param("address") String address, @Param("version") Integer version);
+    LampInfoDTO getDataByVO(LampInfoDTO vo);
 }

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

@@ -22,4 +22,5 @@ public interface NetworkDao {
     void deleteNetworkData(@Param("id") Integer id);
     Integer checkSimIdCount(@Param("simId") String simId);
     void updateSimDate(NetworkDTO dto);
+    NetworkDTO getSimpleData(NetworkDTO dto);
 }

+ 14 - 0
src/main/java/com/welampiot/dao/PlcAddressDao.java

@@ -0,0 +1,14 @@
+package com.welampiot.dao;
+
+import com.welampiot.dto.PlcAddressDTO;
+
+import java.util.List;
+
+public interface PlcAddressDao {
+    List<PlcAddressDTO> getListByVO(PlcAddressDTO vo);
+    boolean updateDataByVO(PlcAddressDTO vo);
+    Integer checkDataByVO(PlcAddressDTO vo);
+    Integer insertDataByVO(PlcAddressDTO vo);
+    PlcAddressDTO getSimpleById(PlcAddressDTO vo);
+    PlcAddressDTO getMaxPvid(PlcAddressDTO vo);
+}

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

@@ -22,4 +22,5 @@ public interface SectionDao {
     void deleteSectionDataById(@Param("id") Integer id);
     List<SectionDTO> getAllSectionList();
     List<SectionDTO> getAllSectionListByPid(@Param("id") Integer id);
+    SectionDTO getDataByVO(SectionDTO dto);
 }

+ 4 - 0
src/main/java/com/welampiot/dto/LampInfoDTO.java

@@ -100,6 +100,10 @@ public class LampInfoDTO {
     private String endDate;
     private Integer total;
     private String lampCtrId;
+    private Integer freqId;
+    private String zegbeeSectionId;
+    private Integer netType;
+    private String uid;
     private List<Object> updateTimeList;
     private List<Object> dateList; // 日期列表
     private List<Object> energyList; // 用电量列表

+ 1 - 0
src/main/java/com/welampiot/dto/NetworkDTO.java

@@ -37,4 +37,5 @@ public class NetworkDTO {
     private String iccId;
     private String date;
     private String simId;
+    private String uId;
 }

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

@@ -0,0 +1,11 @@
+package com.welampiot.dto;
+
+import lombok.Data;
+
+@Data
+public class PlcAddressDTO {
+    private Integer id;
+    private String netAddress;
+    private String lampAddress;
+    private Integer pvid;
+}

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

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

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

@@ -62,4 +62,5 @@ public interface LampService {
     LampInfoDTO getLampOfLampPoleById(Integer lampPoleId, Integer lampId);
     LampDetailVO getLampCountByDTO(LampInfoDTO dto);
     List<LampInfoDTO> findLampDeviceBySn(String address, Integer version);
+    LampInfoDTO getDataByVO(LampInfoDTO vo);
 }

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

@@ -21,4 +21,5 @@ public interface NetworkService {
     void deleteNetworkData(Integer id);
     Integer checkSimIdCount(String simId);
     void updateSimDate(NetworkDTO dto);
+    NetworkDTO getSimpleData(NetworkDTO dto);
 }

+ 14 - 0
src/main/java/com/welampiot/service/PlcAddressService.java

@@ -0,0 +1,14 @@
+package com.welampiot.service;
+
+import com.welampiot.dto.PlcAddressDTO;
+
+import java.util.List;
+
+public interface PlcAddressService {
+    List<PlcAddressDTO> getListByVO(PlcAddressDTO vo);
+    boolean updateDataByVO(PlcAddressDTO vo);
+    Integer checkDataByVO(PlcAddressDTO vo);
+    Integer insertDataByVO(PlcAddressDTO vo);
+    PlcAddressDTO getSimpleById(PlcAddressDTO vo);
+    PlcAddressDTO getMaxPvid(PlcAddressDTO vo);
+}

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

@@ -23,4 +23,5 @@ public interface SectionService {
     void deleteSectionDataById(Integer id);
     List<SectionDTO> getAllSectionList();
     List<SectionDTO> getAllSectionListByPid(@Param("id") Integer id);
+    SectionDTO getDataByVO(SectionDTO dto);
 }

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

@@ -239,4 +239,8 @@ public class GlobalLocationServiceImpl implements GlobalLocationService {
     public List<GlobalLocationDTO> getCountryOfSectionList(Integer level, Integer version) {
         return globalLocationDao.getCountryOfSectionList(level,version);
     }
+    @Override
+    public GlobalLocationDTO getDataByDto(GlobalLocationDTO dto){
+        return globalLocationDao.getDataByDto(dto);
+    }
 }

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

@@ -766,4 +766,8 @@ public class LampServiceImpl implements LampService {
     public List<LampInfoDTO> areaInfoLampList(LampListResponseVO lampListResponseVO) {
         return lampDao.areaInfoLampList(lampListResponseVO);
     }
+    @Override
+    public LampInfoDTO getDataByVO(LampInfoDTO vo){
+        return lampDao.getDataByVO(vo);
+    }
 }

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

@@ -163,4 +163,9 @@ public class NetworkServiceImpl implements NetworkService {
     public void updateSimDate(NetworkDTO dto) {
         networkDao.updateSimDate(dto);
     }
+
+    @Override
+    public NetworkDTO getSimpleData(NetworkDTO dto) {
+        return networkDao.getSimpleData(dto);
+    }
 }

+ 45 - 0
src/main/java/com/welampiot/service/impl/PlcAddressServiceImpl.java

@@ -0,0 +1,45 @@
+package com.welampiot.service.impl;
+
+import com.welampiot.dao.PlcAddressDao;
+import com.welampiot.dto.PlcAddressDTO;
+import com.welampiot.service.PlcAddressService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class PlcAddressServiceImpl implements PlcAddressService {
+    @Autowired
+    private PlcAddressDao plcAddressDao;
+
+    @Override
+    public List<PlcAddressDTO> getListByVO(PlcAddressDTO vo) {
+        return plcAddressDao.getListByVO(vo);
+    }
+
+    @Override
+    public boolean updateDataByVO(PlcAddressDTO vo) {
+        return plcAddressDao.updateDataByVO(vo);
+    }
+
+    @Override
+    public Integer checkDataByVO(PlcAddressDTO vo) {
+        return plcAddressDao.checkDataByVO(vo);
+    }
+
+    @Override
+    public Integer insertDataByVO(PlcAddressDTO vo) {
+        return plcAddressDao.insertDataByVO(vo);
+    }
+
+    @Override
+    public PlcAddressDTO getSimpleById(PlcAddressDTO vo) {
+        return plcAddressDao.getSimpleById(vo);
+    }
+
+    @Override
+    public PlcAddressDTO getMaxPvid(PlcAddressDTO vo) {
+        return plcAddressDao.getMaxPvid(vo);
+    }
+}

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

@@ -79,4 +79,7 @@ public class SectionServiceImpl implements SectionService {
     public List<SectionDTO> getListByVO(SectionVO sectionVO) {
         return sectionDao.getListByVO(sectionVO);
     }
+    public SectionDTO getDataByVO(SectionDTO dto){
+        return sectionDao.getDataByVO(dto);
+    }
 }

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

@@ -13,4 +13,6 @@ public class ZhongLightPlcVO implements Serializable {
     private Integer succCode;
     private Integer errorCode;
     private Integer times; //次数
+    private String lampCtrlId;
+    private String uid;
 }

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

@@ -45,7 +45,7 @@
             a.updatetime as updateTime,a.status,a.alarmtype as alarmType,s.timezone
         from all_alarm_info_log a
         left join lampinfo l on a.lampid = l.id
-        left join section s on l.section_id = s.id
+        left join section s on l.sectionid = s.id
         left join global_location gl on s.pid = gl.id
         where 1=1
             <if test="keyword != null and keyword != ''">

+ 9 - 1
src/main/resources/mapper/GlobalLocationMapper.xml

@@ -355,5 +355,13 @@
         </if>
         group by gl1.id
     </select>
-    
+
+    <select id="getDataByDto" resultType="GlobalLocationDTO">
+        select id,chinese_name as chineseName,english_name as englishName,ru_name as ruName from global_location
+        <trim prefix="where" suffixOverrides="and|or">
+            <if test="id != null">
+                id = #{id}
+            </if>
+        </trim>
+    </select>
 </mapper>

+ 32 - 5
src/main/resources/mapper/LampMapper.xml

@@ -203,7 +203,7 @@
         </choose>
         L.networkid as networkId,N.protocoltype as protocolType,L.areaid as areaId,
         L.sectionid as sectionId,L.groupid as groupId,L.longitude,L.latitude,S.name as section,L.dev_addr as devAddr,
-        L.macAddress,L.section_id as loopNumber,G.name as `group`,N.network_name as network,N.rssi,
+        L.macAddress,L.zegbee_section_id as loopNumber,G.name as `group`,N.network_name as network,N.rssi,
         L.lamp_pole_id as lampPoleId,LP.name as lampPoleName,L.control_type as controlType,
         L.lighteness,N.status as netStatus,LI.colour_value as colourValue,LI.used_energy_total as usedEnergyTotal,LI.updatetime,LI.work_time_total as workTimeTotal,
         LI.gridPF,LI.used_energy_tonight as usedEnergyTonight,L.faultstatus as faultStatus,N.snr,N.rssi,AI.id as alarmId,
@@ -241,7 +241,7 @@
         </choose>
         L.networkid as networkId,N.protocoltype as protocolType,L.areaid as areaId,
         L.sectionid as sectionId,L.groupid as groupId,L.longitude,L.latitude,S.name as section,L.dev_addr as devAddr,
-        L.macAddress,L.section_id as loopNumber,G.name as `group`,N.network_name as network,N.rssi,
+        L.macAddress,L.zegbee_section_id as loopNumber,G.name as `group`,N.network_name as network,N.rssi,
         L.lamp_pole_id as lampPoleId,LP.name as lampPoleName,L.control_type as controlType,
         L.lighteness,N.status as netStatus,LI.colour_value as colourValue,LI.used_energy_total as usedEnergyTotal,LI.updatetime,LI.work_time_total as workTimeTotal,
         LI.gridPF,LI.used_energy_tonight as usedEnergyTonight,L.faultstatus as faultStatus,N.snr,N.rssi,AI.id as alarmId,
@@ -286,7 +286,7 @@
         <if test="sectionId != null">
             and L.sectionid = #{sectionId}
         </if>
-        <if test="networkId != null">
+        <if test="networkId != null and networkId !=0">
             and L.networkid != #{networkId}
         </if>
         <if test="name != null">
@@ -301,6 +301,13 @@
         <if test="id != null">
             and L.id != #{id}
         </if>
+        <if test="macAddress != null">
+            and L.macAddress = #{macAddress}
+        </if>
+        <if test="devAddr != null">
+            and L.dev_addr = #{devAddr}
+        </if>
+
         limit 1
     </select>
     <insert id="add" parameterType="com.welampiot.dto.LampInfoDTO" useGeneratedKeys="true" keyProperty="id"
@@ -310,6 +317,9 @@
         <if test="lampPoleId != null">,lamp_pole_id</if>
         <if test="installDate != null">,install_date</if>
         <if test="expirationDate != null">,expiration_date</if>
+        <if test="devAddr != null">,dev_addr</if>
+        <if test="freqId != null">,freqId</if>
+        <if test="loopNumber != null">,zegbee_section_id</if>
         )
         values
         (#{networkId},#{name},#{number},#{sn},#{areaId},#{sectionId},#{longitude},#{latitude},#{createTime},#{ratedPower},#{controlType}
@@ -317,6 +327,9 @@
         <if test="lampPoleId != null">,#{lampPoleId}</if>
         <if test="installDate != null">,#{installDate}</if>
         <if test="expirationDate != null">,#{expirationDate}</if>
+        <if test="devAddr != null">,#{devAddr}</if>
+        <if test="freqId != null">,#{freqId}</if>
+        <if test="loopNumber != null">,#{zegbeeSectionId}</if>
         )
     </insert>
     <update id="update" parameterType="com.welampiot.dto.LampInfoDTO"
@@ -688,7 +701,7 @@
         from lampinfo l
         left join lamp_pole lp on l.lamp_pole_id = lp.id
         left join wifi w on lp.id = w.lamp_pole_id
-        left join section s on l.section_id = s.id
+        left join section s on l.sectionid = s.id
         left join global_location gl on gl.id = l.areaid
         left join network n on l.networkid = n.id
         left join lamp_info_log_new l1 on l1.lampid = l.id
@@ -1235,5 +1248,19 @@
         left join global_location g3 on g2.pid = g3.id
         where l.address = #{address}
     </select>
-
+    <select id="getDataByVO" resultType="LampInfoDTO">
+        select id,address,sectionid as sectionId,number,networkid as networkId from lampinfo
+        <trim prefix="where" suffixOverrides="and|or">
+            <if test="id != null">
+                id = #{id} or
+            </if>
+            <if test="sn != null and sn != ''">
+                address = #{sn} or
+            </if>
+            <if test="networkId != null and networkId != 0">
+                networkid = #{networkId} or
+            </if>
+        </trim>
+        limit 0,1
+    </select>
 </mapper>

+ 28 - 14
src/main/resources/mapper/NetworkMapper.xml

@@ -302,19 +302,21 @@
     <select id="checkNetworkData" resultType="Integer">
         select count(*)
         from network n
-        where 1=1
-        <if test="sectionId != null and sectionId != 0">
-            and n.sectionid = #{sectionId}
-        </if>
-        <if test="networkName != null and networkName != ''">
-            and n.network_name = #{networkName}
-        </if>
-        <if test="deviceSn != null and deviceSn != ''">
-            and n.devicesn = #{deviceSn}
-        </if>
-        <if test="id != null and id != 0">
-            and n.id != #{id}
-        </if>
+        <trim prefix="where" prefixOverrides="and|or">
+            <if test="sectionId != null and sectionId != 0">
+                and n.sectionid = #{sectionId}
+            </if>
+            <if test="networkName != null and networkName != ''">
+                and n.network_name = #{networkName}
+            </if>
+            <if test="deviceSn != null and deviceSn != ''">
+                and n.devicesn = #{deviceSn}
+            </if>
+            <if test="id != null and id != 0">
+                and n.id != #{id}
+            </if>
+        </trim>
+
     </select>
 
     <select id="findLampInfoCountByNetworkId" resultType="Integer">
@@ -343,5 +345,17 @@
         from network
         where id = #{id};
     </delete>
-    
+
+    <select id="getSimpleData" resultType="NetworkDTO">
+        select id,devicesn as deviceSn,protocoltype as protocolType,uid as uId from network
+        <trim prefix="where" suffixOverrides="and|or">
+            <if test="id != null">
+                id = #{id} or
+            </if>
+            <if test="deviceSn != null">
+                devicesn = #{deviceSn}
+            </if>
+        </trim>
+        limit 1;
+    </select>
 </mapper>

+ 86 - 0
src/main/resources/mapper/PlcAddressMapper.xml

@@ -0,0 +1,86 @@
+<?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.PlcAddressDao">
+<!--    getListByVO(PlcAddressDTO vo)-->
+    <select id="getListByVO" resultType="com.welampiot.dto.PlcAddressDTO">
+        select * from plc_address
+        <trim prefix="where" suffixOverrides="and|or">
+            <if test="id != null and id != ''">
+                id = #{id} or
+            </if>
+            <if test="netAddress != null and netAddress !=''">
+                netAddress = #{netAddress} or
+            </if>
+            <if test="lampAddress != null and lampAddress != ''">
+                lampAddress = #{lampAddress}
+            </if>
+        </trim>
+        <if test="page >= 0 and count > 0">
+            limit #{page},#{count}
+        </if>
+    </select>
+<!--    updateDataByVO(PlcAddressDTO vo)-->
+    <update id="updateDataByVO" parameterType="com.welampiot.dto.PlcAddressDTO">
+        update plc_address set
+        <if test="netAddress != null and netAddress !=''">
+            ,netAddress = #{netAddress}
+        </if>
+        <if test="lampAddress != null and lampAddress != ''">
+            ,lampAddress = #{lampAddress}
+        </if>
+        <if test="pvid != null and pvid != ''">
+            ,pvid = #{pvid}
+        </if>
+        <trim prefix="where" suffixOverrides="and|or">
+            <if test="id != null and id != ''">
+                id = #{id} or
+            </if>
+            <if test="netAddress != null and netAddress !=''">
+                netAddress = #{netAddress} or
+            </if>
+            <if test="lampAddress != null and lampAddress != ''">
+                lampAddress = #{lampAddress}
+            </if>
+        </trim>
+    </update>
+<!--    Integer checkDataByVO(PlcAddressDTO vo);-->
+    <select id="checkDataByVO" resultType="Integer" parameterType="com.welampiot.dto.PlcAddressDTO">
+        select count(*) from plc_address
+        <trim prefix="where" suffixOverrides="and|or">
+            <if test="id != null and id != ''">
+                id = #{id} or
+            </if>
+            <if test="netAddress != null and netAddress !=''">
+                netAddress = #{netAddress} and
+            </if>
+            <if test="lampAddress != null and lampAddress != ''">
+                lampAddress = #{lampAddress} or
+            </if>
+            <if  test="pvid != null and pvid != ''">
+                pvid = #{pvid}
+            </if>
+        </trim>
+    </select>
+<!--    Integer insertDataByVO(PlcAddressDTO vo);-->
+    <insert id="insertDataByVO" parameterType="com.welampiot.dto.PlcAddressDTO">
+        insert into plc_address(
+        <if test="netAddress != null and netAddress !=''">netAddress</if>
+        <if test="lampAddress != null and lampAddress != ''">,lampAddress</if>
+        <if test="pvid != null and pvid != ''">,pvid</if>
+        )
+        values (
+        <if test="netAddress != null and netAddress !=''">#{netAddress}</if>
+        <if test="lampAddress != null and lampAddress != ''">,#{lampAddress}</if>
+        <if test="pvid != null and pvid != ''">,#{pvid}</if>
+        )
+    </insert>
+<!--    PlcAddressDTO getSimpleById(PlcAddressDTO vo);-->
+    <select id="getSimpleById" resultType="com.welampiot.dto.PlcAddressDTO">
+        select * from plc_address where id = #{id}
+    </select>
+    <select id="getMaxPvid" resultType="com.welampiot.dto.PlcAddressDTO">
+        select max(pvid) as pvid from plc_address where netAddress = #{netAddress}
+    </select>
+</mapper>

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

@@ -121,4 +121,12 @@
         left join global_location g on p.pid = g.id
         where g.id = #{id}
     </select>
+    <select id="getDataByVO" resultType="SectionDTO">
+        select id,name,pid from section
+        <trim prefix="where" suffixOverrides="and|or">
+            <if test="id != null">
+                id = #{id}
+            </if>
+        </trim>
+    </select>
 </mapper>

+ 18 - 6
src/test/java/com/welampiot/service/UserServiceTest.java

@@ -2,7 +2,11 @@ package com.welampiot.service;
 
 import com.welampiot.configuration.BroadcastConfig;
 import com.welampiot.configuration.ScreenConfig;
+import com.welampiot.dto.LampInfoDTO;
+import com.welampiot.dto.NetworkDTO;
+import com.welampiot.dto.PlcAddressDTO;
 import com.welampiot.service.UserService;
+import com.welampiot.service.impl.LampServiceImpl;
 import com.welampiot.utils.*;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -10,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import javax.annotation.Resource;
 import javax.sql.DataSource;
 import java.io.IOException;
 import java.sql.Connection;
@@ -29,17 +34,24 @@ public class UserServiceTest {
     private SystemConfigService systemConfigService;
     @Autowired
     private VideoGbInfoService videoGbInfoService;
+    @Resource
+    private NetworkService plcAddressService;
 
     @Test
     public void testConnection() throws SQLException, IOException {
-        long l = System.currentTimeMillis() - (24L * 3600 * 30*1000);
-        Date date = new Date(l);
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String createTime = simpleDateFormat.format(date);
-        System.out.println(createTime);
+        NetworkDTO networkDTO = new NetworkDTO();
+        networkDTO.setDeviceSn("fefed436");
+        //plcAddressDTO.setLampAddress("C20102010400");
+        networkDTO = plcAddressService.getSimpleData(networkDTO);
+        System.out.println("===d===:"+networkDTO);
+//        long l = System.currentTimeMillis() - (24L * 3600 * 30*1000);
+//        Date date = new Date(l);
+//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//        String createTime = simpleDateFormat.format(date);
+//        System.out.println(createTime);
 
 //        String taiLongToken = BroadcastUtil.sendBroadcastShiBang(BroadcastConfig.shiBangHost+"/php/setterminal.php",);
-        System.out.println(VideoUtil.getGbAddressByDevId("1235653435",videoGbInfoService));
+//        System.out.println(VideoUtil.getGbAddressByDevId("1235653435",videoGbInfoService));
 //        String cmd = "0110DF0901025F";
 //
 //        String crc = toolUtils.getCRC(cmd);