liukangdong
2024-09-24 a1647a5152e3d368ec2fb738ca7cc858e220d06c
Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit
已添加14个文件
已修改16个文件
790 ■■■■■ 文件已修改
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/resources/application-dev.yml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkInterfaceTestCloudController.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformJobCloudController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/BaseListPageResponse.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/FireChannelListRequest.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/FireDeviceExpressionRequest.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/FireDeviceListRequest.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/FireDeviceStatuslListRequest.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/NhEventPageListRequest.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/SensorStatusListRequest.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/WxConfigInfoRequest.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AuthItemListDetailResponse.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FireChannelListResponse.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FireDeviceListResponse.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FireDeviceStatusListResponse.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/NhEventPageListResponse.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/SensorStatusListResponse.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/WxConfigInfoResponse.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/openapi/response/PlatformWarnEventListResponse.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/SignInDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -1010,7 +1010,7 @@
        //取消会议 å‘送取消通知
        this.sendNotice(bookings, 3);
        //发送微信订阅通知
        sendWxMessage.bookingsCancel(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId()));
//        sendWxMessage.bookingsCancel(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId()));
    }
@@ -1036,7 +1036,7 @@
        if (!bookings.getCreator().equals(businessOverDTO.getUserId()) && userRelList <= 0) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "非你的预约记录,无法进行该操作");
        }
        if (System.currentTimeMillis() < bookings.getStartTime().getTime()) {
        if (System.currentTimeMillis() < bookings.getStartTimeReal().getTime()) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "会议未开始,无法进行结束,如需该操作请使用取消功能");
        }
        if (System.currentTimeMillis() > bookings.getEndTime().getTime()) {
@@ -1133,22 +1133,22 @@
                    .eq(Bookings::getRoomId,bookings.getRoomId())
                    .ne(Bookings::getId,bookings.getId())
            )>Constants.ZERO){
                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在未开启会议,无法进行开始会议");
                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在未开启会议,无法开始会议");
            };
            if(bookingsMapper.selectCount(new QueryWrapper<Bookings>()
                    .lambda() 
                    .apply(" (  END_TIME > now() and START_TIME < now() ) or  ( END_TIME > now() and  START_TIME_REAL < now() )  ")
                    .apply(" ( (  END_TIME > now() and START_TIME < now() ) or  ( END_TIME > now() and  START_TIME_REAL < now() ) ) ")
                    .isNotNull(Bookings::getStartTimeReal)
                    .isNull(Bookings::getDoneDate)
                    .eq(Bookings::getStatus,Constants.ZERO)
                    .eq(Bookings::getRoomId,bookings.getRoomId())
            )>Constants.ZERO){
                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前开启时间与其他会议存在冲突,无法进行开始会议");
                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前开启时间与其他会议存在冲突,无法开始会议");
            };
        }else{
            if(bookings.getStartTime().getTime() > System.currentTimeMillis()){
                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未到会议申请开始时间,无法进行开始");
                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未到会议申请开始时间,无法开始");
            }
        }
        bookings.setStartTimeReal(new Date());
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java
@@ -370,7 +370,7 @@
        Integer re = recordisExist(rooms.getId());
        if (Constants.equalsInteger(re, Constants.ONE)) {
            //存下预约记录不允许更新开放时间和粒度分钟
           // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "会议室存在预约中的记录,不允许修改");
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "会议室存在预约中的记录,不允许修改");
            rooms.setStartTime(null);
            rooms.setEndTime(null);
            rooms.setIntervalTime(null);
server/meeting/meeting_service/src/main/resources/application-dev.yml
@@ -1,9 +1,12 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: doumee
    password: rtjgfEr@&0c0m
#    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
#    username: doumee
#    password: rtjgfEr@&0c0m
    url: jdbc:mysql://10.50.250.178:3306/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Atwl@2024
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkInterfaceTestCloudController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
package com.doumee.cloud.admin;
import com.doumee.api.BaseController;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.model.param.request.*;
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventPlatformCarsRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventPlatformRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DESUtil;
import com.doumee.dao.business.model.Device;
import com.doumee.service.business.impl.hksync.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Api(tags = "海康数据同步接口")
@RestController
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/hktest")
public class HkInterfaceTestCloudController extends BaseController {
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @ApiOperation("【海康】测试LED显示屏")
    @PostMapping("/testLed")
    @LoginNoRequired
    public ApiResponse<BaseResponse> testLed(@RequestBody TransparentChannelBodyRequest request, HttpServletResponse response) {
        TransparentChannelHeadRequest head = new TransparentChannelHeadRequest();
        head.setAbility("cld");//固定值
        head.setTreatyType("haixuan_led_net");//固定值
        head.setDeviceIndexCode("6a5498e9df924befbb9530e467e5e809");
        return ApiResponse.success(HKService.transparentchannel(head,request));
    }
    @ApiOperation("【海康】测试广播播报")
    @PostMapping("/testBroadcast")
    @LoginNoRequired
    public ApiResponse<BaseResponse> testBroadcast(@RequestBody CustomBroadcastRequest request, HttpServletResponse response) {
        return ApiResponse.success(  HKService.customBroadcast(request));
    }
    @ApiOperation("【海康】测试获取微信公众号")
    @GetMapping("/testWxToken")
    @LoginNoRequired
    public ApiResponse<BaseResponse> testWxToken(@RequestParam String configId,@RequestParam String tageId, HttpServletResponse response) {
        return ApiResponse.success(  HKService.wxAccessToken(configId,tageId));
    }
    @ApiOperation("【海康】测试分页获取告警事件")
    @GetMapping("/nhEventPageList")
    @LoginNoRequired
    public ApiResponse<BaseResponse> nhEventPageList(@RequestBody NhEventPageListRequest param, HttpServletResponse response) {
        return ApiResponse.success(  HKService.nhEventPageList(param));
    }
    @ApiOperation("【海康】分页查询消防传感器部件状态")
    @GetMapping("/sensorStatusSearch")
    @LoginNoRequired
    public ApiResponse<BaseResponse> sensorStatusSearch(@RequestBody SensorStatusListRequest param, HttpServletResponse response) {
        return ApiResponse.success(  HKService.sensorStatusSearch(param));
    }
    @ApiOperation("【海康】查询消防传感器列表")
    @GetMapping("/fireChannelSearch")
    @LoginNoRequired
    public ApiResponse<BaseResponse> fireChannelSearch(@RequestBody FireChannelListRequest param, HttpServletResponse response) {
        return ApiResponse.success(  HKService.fireChannelSearch(param));
    }
    @ApiOperation("【海康】海康询消防设备列表")
    @GetMapping("/fireDeviceSearch")
    @LoginNoRequired
    public ApiResponse<BaseResponse> fireDeviceSearch(@RequestBody FireDeviceListRequest param, HttpServletResponse response) {
        return ApiResponse.success(  HKService.fireDeviceSearch(param));
    }
    @ApiOperation("【海康】分页查询消防设备部件状态")
    @GetMapping("/fireDeviceStatusSearch")
    @LoginNoRequired
    public ApiResponse<BaseResponse> fireDeviceStatusSearch(@RequestBody FireDeviceStatuslListRequest param, HttpServletResponse response) {
        return ApiResponse.success(  HKService.fireDeviceStatusSearch(param));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformJobCloudController.java
@@ -10,6 +10,7 @@
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.PlatformJob;
import com.doumee.dao.web.reqeust.JobDetailDTO;
import com.doumee.dao.web.reqeust.SignInDTO;
import com.doumee.service.business.PlatformJobService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -89,4 +90,12 @@
    public ApiResponse<PlatformJob>  jobDetail (@RequestBody JobDetailDTO jobDetailDTO, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success(platformJobService.getDetail(jobDetailDTO));
    }
    @ApiOperation("任务签到")
    @PostMapping("/signIn")
    public ApiResponse  signIn (@RequestBody SignInDTO signInDTO, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        signInDTO.setLoginUserInfo(getLoginUser(token));
        platformJobService.signIn(signInDTO);
        return ApiResponse.success("操作成功");
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -117,11 +117,18 @@
        String[] iccmUpdateAppointment= new String[]{"/api/iccm/v2/appointment/update","iccm访客登记修改"};//iccm访客登记修改
        String[] iccmCancelAppointment= new String[]{"/api/iccm/v1/appointment/cancel","iccm访客登记修改"};//iccm访客登记修改
        String[] iccmAppointmentMDJ= new String[]{"/api/iccm/v1/appointment/free/registration","iccm访客预约免登记"};//iccm访客预约免登记
        String[] privilegIccmeGroup= new String[]{"/api/iccm/v1/privilege/groups","查询访客权限组"};//查询访客权限组
        String[] iccmAppointmentRecords= new String[]{"/api/iccm/v2/appointment/records","iccm查询已预约登记"};//iccm查询已预约登记
        String[] wxAccessToken= new String[]{"/api/wx/v1/oa/get/accessToken","iccm查询已预约登记"};//1.9.1根据微信公众号信息获取AccessToken
        String[] wxAccessToken= new String[]{"/api/wx/v1/oa/get/accessToken","根据微信公众号信息获取AccessToken"};//1.9.1根据微信公众号信息获取AccessToken
        String[] getWxConfig= new String[]{"/api/wx/v1/oa/get/config","根据配置微信公众号编号查询微信公众号信息"};//根据配置微信公众号编号查询微信公众号信息
        String[] goMenuUrl= new String[]{"/xauthplus-plugin/thirdLogin?type=third&componentId=Infovision iPark Platform&componentMenuId=${menuId}&token=${token}","工作台菜单跳转地址"};
        String[] nhEventPageList= new String[]{"/api/ecm/warning/event/v1/pageList","分页获取告警事件"};//分页获取告警事件
        String[] nhRegionDataRanking= new String[]{"/api/ecm/v1/energy/regionDataRanking","根据时间维度获取区域用量排名"};//1.8.5根据时间维度获取区域用量排名
        String[] nhEnergyDistribution= new String[]{"/api/ecm/v1/energy/energyDistribution","根据时间维度获取能耗分布"};// æ ¹æ®æ—¶é—´ç»´åº¦èŽ·å–èƒ½è€—åˆ†å¸ƒ
        String[] fireDeviceSearch= new String[]{"/api/resource/v1/fireDevice/search","询消防设备列表"};// 1.12.1.1询消防设备列表
        String[] fireChannelSearch= new String[]{"/api/resource/v1/fireChannel/search","查询消防传感器列表"};// æŸ¥è¯¢æ¶ˆé˜²ä¼ æ„Ÿå™¨åˆ—表
        String[] sensorStatusSearch= new String[]{"/api/fpnms/v2/sensor/status/search","分页查询消防传感器部件状态"};// åˆ†é¡µæŸ¥è¯¢æ¶ˆé˜²ä¼ æ„Ÿå™¨éƒ¨ä»¶çŠ¶æ€
        String[] fireDeviceStatusSearch= new String[]{"/api/fpnms/v2/device/status/search","查询消防设备部件状态"};// æŸ¥è¯¢æ¶ˆé˜²è®¾å¤‡éƒ¨ä»¶çŠ¶æ€
    }
    /**
@@ -139,8 +146,7 @@
        // æž„造方法
        TASK_TYPE(int key, String name ) {
            this.name = name;
            this.key = key;
            this.name = name;this.key = key;
        }
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -369,6 +369,15 @@
        return  startDoPostStringArtemis(HKConstants.InterfacePath.visitCancel,body);
    }
    public static String startDoGetStringArtemis(String[] pathStr,Map<String,String> body ){
        Map<String, String> path = getPath(pathStr[0]);
        Map<String, String> header = new HashMap<>();
        header.put("tagId", UUID.randomUUID().toString().replace("-", ""));
        String result = ArtemisHttpUtil.doGetArtemis(path, body, null,  "application/json", header);// post请求application/json类型参数
        saveInterfaceLog(JSONObject.toJSONString(body),result,path,pathStr[1]);
        return result;
    }
    public static String startDoPostStringArtemis(String[] pathStr,String body ){
        Map<String, String> path = getPath(pathStr[0]);
        Map<String, String> header = new HashMap<>();
@@ -563,6 +572,56 @@
        return startDoPostStringArtemis(wxAccessToken,"");
    }
    /**
     *    æ ¹æ®é…ç½®å¾®ä¿¡å…¬ä¼—号编号查询微信公众号信息
     * @param body
     * @return
     */
    public static String getWxConfig(Map<String,String>  body) {
        return startDoGetStringArtemis(HKConstants.InterfacePath.getWxConfig,body);
    }
    /**
     *    æ ¹æ®é…ç½®å¾®ä¿¡å…¬ä¼—号编号查询微信公众号信息
     * @param body
     * @return
     */
    public static String nhEventPageList(Map<String,String> body) {
        return startDoGetStringArtemis(HKConstants.InterfacePath.nhEventPageList,body);
    }
    /**
     *    æŸ¥è¯¢æ¶ˆé˜²è®¾å¤‡éƒ¨ä»¶çŠ¶æ€
     * @param body
     * @return
     */
    public static String fireDeviceStatusSearch(Map<String,String> body) {
        return startDoGetStringArtemis(HKConstants.InterfacePath.fireDeviceStatusSearch,body);
    }
    /**
     *    åˆ†é¡µæŸ¥è¯¢æ¶ˆé˜²ä¼ æ„Ÿå™¨éƒ¨ä»¶çŠ¶æ€
     * @param body
     * @return
     */
    public static String sensorStatusSearch(Map<String,String> body) {
        return startDoGetStringArtemis(HKConstants.InterfacePath.sensorStatusSearch,body);
    }
    /**
     *    è¯¢æ¶ˆé˜²è®¾å¤‡åˆ—表
     * @param body
     * @return
     */
    public static String fireChannelSearch(Map<String,String> body) {
        return startDoGetStringArtemis(HKConstants.InterfacePath.fireChannelSearch,body);
    }
    /**
     *    è¯¢æ¶ˆé˜²è®¾å¤‡åˆ—表
     * @param body
     * @return
     */
    public static String fireDeviceSearch(Map<String,String> body) {
        return startDoGetStringArtemis(HKConstants.InterfacePath.fireDeviceSearch,body);
    }
    /**
     *    èŽ·å–å…¨é‡ç”¨æˆ·åˆ—è¡¨
     * @param body
     * @return
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/BaseListPageResponse.java
@@ -1,5 +1,6 @@
package com.doumee.core.haikang.model.param;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.util.List;
@@ -11,5 +12,7 @@
  private int pageSize;//    number    False    æ¯é¡µè®°å½•总数
  private int pageNo    ;// number    False    å½“前页码
  private int totalPage;//    number    False    æ€»é¡µæ•°
  @JSONField(name="list",alternateNames = {"rows","records"})
  private List<T> list    ;// object[]    False    æƒé™ç»„对象列表
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/FireChannelListRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
import java.util.List;
@Data
public class FireChannelListRequest {
 private String name;//    String    false    åç§°ï¼Œæ¨¡ç³Šæœç´¢ï¼Œæœ€å¤§é•¿åº¦32,若包含中文,最大长度指不超过按照指定编码的字节长度,即getBytes("utf-8").length
private List<String> regionIndexCodes;//    Array    false    åŒºåŸŸç¼–号,可以为空;String[],支持根据区域批量查询;区域编号个数<=1000个;单个长度<=64Byte;,可从[查询区域列表v2]@[智慧园区管理平台V1.4.301-API列表-资源目录-区域信息接口#查询区域列表v2]接口获取返回参数indexCode
private Boolean isSubRegion;//    Boolean    false    true时,搜索regionIndexCodes及其子孙区域的资源;false时,只搜索 regionIndexCodes的资源
private int pageNo;//    Number    true    å½“前页码
private int pageSize;//    Number    true    åˆ†é¡µå¤§å°
private String orderBy;//    String    false    æŽ’序字段,注意:排序字段必须是查询条件,否则返回参数错误
private String orderType;//    String    false    é™åºå‡åº,降序:desc å‡åºï¼šasc
private List<FireDeviceExpressionRequest> expressions;//    Array    false    æŸ¥è¯¢è¡¨è¾¾å¼
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/FireDeviceExpressionRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
import java.util.List;
@Data
public class FireDeviceExpressionRequest {
private String key;//    String    false    èµ„源属性名,keyä¼ updateTime,operatorä¼ between可以查询特定时间段更新的数据,考虑到校时和夏令时,建议值查询过去一天的数据变更
private Integer operator;//    Number    false    æ“ä½œè¿ç®—符, 0 ï¼š=, 1 ï¼š>=, 2 ï¼š<=, 3 ï¼šin, 4 ï¼šnot in, 5 ï¼šbetween, 6 ï¼šlike, 7 ï¼špre like, 8 ï¼šsuffix like
private List<String> values    ;//Array    false    èµ„源属性值,=、>=、<=、like、values数组长度只能是1; in、not in,values数组长度大于1,最大不超时20; in_array用于查询key值有多个value的情况,例如行车监控添加的设备类型为encodeDevice、encodeDeviceMss两个类型,使用encodeDevice或者encodeDeviceMss都可以查询到; between只能用于整形、日期 ï¼› like只能用于字符串。
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/FireDeviceListRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
import java.util.List;
@Data
public class FireDeviceListRequest {
 private String name;//    String    false    åç§°ï¼Œæ¨¡ç³Šæœç´¢ï¼Œæœ€å¤§é•¿åº¦32,若包含中文,最大长度指不超过按照指定编码的字节长度,即getBytes("utf-8").length
private List<String> regionIndexCodes;//    Array    false    åŒºåŸŸç¼–号,可以为空;String[],支持根据区域批量查询;区域编号个数<=1000个;单个长度<=64Byte;,可从[查询区域列表v2]@[智慧园区管理平台V1.4.301-API列表-资源目录-区域信息接口#查询区域列表v2]接口获取返回参数indexCode
private Boolean isSubRegion;//    Boolean    false    true时,搜索regionIndexCodes及其子孙区域的资源;false时,只搜索 regionIndexCodes的资源
private int pageNo;//    Number    true    å½“前页码
private int pageSize;//    Number    true    åˆ†é¡µå¤§å°
private String orderBy;//    String    false    æŽ’序字段,注意:排序字段必须是查询条件,否则返回参数错误
private String orderType;//    String    false    é™åºå‡åº,降序:desc å‡åºï¼šasc
private List<FireDeviceExpressionRequest> expressions;//    Array    false    æŸ¥è¯¢è¡¨è¾¾å¼
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/FireDeviceStatuslListRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
import java.util.List;
@Data
public class FireDeviceStatuslListRequest {
private Integer includeSubNode    ;//Number    true    æ˜¯å¦åŒ…含下级 (1-包含, 0-不包含)
private String regionIndexCode    ;//String    true    æ‰€å±žåŒºåŸŸindexCode,根据[查询区域列表v2]@[智慧园区管理平台V1.4.301-API列表-资源目录-区域信息接口#查询区域列表v2]接口获取返回报文中的indexCode字段
private String deviceName    ;//String    false    è®¾å¤‡åç§°
private Integer deviceType    ;//Number    false    æ¶ˆé˜²è®¾å¤‡ç±»åž‹ï¼Œè¯¦è§[附录A.55 æ¶ˆé˜²è®¾å¤‡ç±»åž‹]@[智慧园区管理平台V1.4.301-附录-附录A æ•°æ®å­—å…¸#附录A.55 æ¶ˆé˜²è®¾å¤‡ç±»åž‹]
private Integer online    ;//Number    false    åœ¨çº¿çŠ¶æ€ 0-离线 1-在线 ç©º-所有状态
private Integer unitStatus    ;//Number    false    éƒ¨ä»¶çŠ¶æ€ï¼Œ0:未注册 1:正常 2: ä¿®å¤ä¸­ 3:异常状态(修复中状态目前没用到,未注册时设备没有在离线状态) ç©º-所有状态
private String deviceIndexCode    ;//String    false    è®¾å¤‡ç¼–号,根据[查询消防设备列表]@[智慧园区管理平台V1.4.301-API列表-报警检测-消防应用服务-消防功能接口#查询消防设备列表]接口获取返回报文中的devSerialNum字段
private Integer pageNo    ;//Number    true    ç›®æ ‡é¡µç ï¼Œé»˜è®¤ä»Ž1开始,表示第一页
private Integer pageSize;//    Number    true    æ¯é¡µè®°å½•数,每页最大数量1000,默认20
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/NhEventPageListRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
@Data
public class NhEventPageListRequest {
    private String   warningName    ;//Query    String    false    é¢„告警名称
    private String   nodeName    ;//Query    String    false    ç›‘测对象
    private String   warningLevel    ;//Query    Number    true    é¢„告警等级,0:全部,1:一般,2:严重,3:故障
    private String   ruleTypeId    ;//Query    String    false    é¢„告警类型ID,为空时表示所有
    private String   startDate    ;//Query    String    false    å‘生时间开始时间
    private String   endDate;//    Query    String    false    å‘生时间结束时间
    private String   handleStatus;//    Query    String    false    å¤„理状态:0:全部,1:未处理,2:已处理
    private int   pageNo;//    Query    Number    false    é¡µç 
    private int   pageSize;//    Query    Number    false    é¡µå¤§å°
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/SensorStatusListRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
@Data
public class SensorStatusListRequest {
    private Integer includeSubNode;//    Number    true    æ˜¯å¦åŒ…含下级 (1-包含、0-不包含)
    private String regionIndexCode    ;//String    true    æ‰€å±žåŒºåŸŸindexCode,根据[查询区域列表v2]@[智慧园区管理平台V1.4.301-API列表-资源目录-区域信息接口#查询区域列表v2]接口获取返回报文中的indexCode字段
    private String cn    ;//String    false    ä¼ æ„Ÿå™¨åç§°
    private Integer channelType;//    Number    false    ä¼ æ„Ÿå™¨ç±»åž‹ï¼Œè¯¦è§[附录A.57 æ¶ˆé˜²ä¼ æ„Ÿå™¨å¤§ç±»åž‹]@[智慧园区管理平台V1.4.301-附录-附录A æ•°æ®å­—å…¸#附录A.57 æ¶ˆé˜²ä¼ æ„Ÿå™¨å¤§ç±»åž‹]
    private Integer unitStatus;//    Number    false    éƒ¨ä»¶çŠ¶æ€ï¼Œ0:未注册 1:正常 2: ä¿®å¤ä¸­ 3:异常状态(修复中状态目前没用到,未注册时设备没有在离线状态) ç©º-所有状态
    private String channelIndexCode    ;//String    false    ä¼ æ„Ÿå™¨ç¼–号
    private int   pageNo;//    Query    Number    false    é¡µç 
    private int   pageSize;//    Query    Number    false    é¡µå¤§å°
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/WxConfigInfoRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
@Data
public class WxConfigInfoRequest {
    private String      tagId;//        Query    String    false    æ ‡ç­¾
    private String     oaId;//        Query    String    false    å¾®ä¿¡å…¬ä¼—号配置编号
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AuthItemListDetailResponse.java
@@ -6,18 +6,18 @@
@Data
public class AuthItemListDetailResponse {
   private String  personId    ;//string    False    äººå‘˜ID
  private String resourceIndexCode;//    string    False    èµ„源的唯一标识
  private Integer channelNo;//    number    False    é€šé“号
  private String channelIndexCode    ;//string    False    èµ„源通道唯一标识(在权限下载和配置接口入参时对应查询接口会返回,不作为查询接口的查询条件)
  private TimeRangeRequest templateConfigInfos;//    Object[]    False    è®¡åˆ’模板信息
  private Integer personStatus;//    number    False    äººå‘˜çŠ¶æ€,0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
  private Integer cardStatus    ;//number    False    å¡ç‰‡çŠ¶æ€,0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
  private Integer faceStatus    ;//number    False    äººè„¸çŠ¶æ€,0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
  private String cardJson    ;//string    False    è®°å½•已下载到设备的卡号(Map格式(卡号:状态),其中状态(0改变表示下载后卡片的信息又变化了,1已下载))
 private String configTime    ;//string    False    é…ç½®æ—¶é—´,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
 private String startTime;//    string    False    äººå‘˜æƒé™æœ‰æ•ˆæœŸï¼ˆä»¥äººä¸ºä¸­å¿ƒè®¾å¤‡æ—¶ä½¿ç”¨ï¼‰,开始时间,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
 private String endTime    ;//string    False    äººå‘˜æƒé™æœ‰æ•ˆæœŸï¼ˆä»¥äººä¸ºä¸­å¿ƒè®¾å¤‡æ—¶ä½¿ç”¨ï¼‰,开始日期,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
 private String personExtendJson;//    body    string    å¦
      private String  personId    ;//string    False    äººå‘˜ID
      private String resourceIndexCode;//    string    False    èµ„源的唯一标识
      private Integer channelNo;//    number    False    é€šé“号
      private String channelIndexCode    ;//string    False    èµ„源通道唯一标识(在权限下载和配置接口入参时对应查询接口会返回,不作为查询接口的查询条件)
      private TimeRangeRequest templateConfigInfos;//    Object[]    False    è®¡åˆ’模板信息
      private Integer personStatus;//    number    False    äººå‘˜çŠ¶æ€,0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
      private Integer cardStatus    ;//number    False    å¡ç‰‡çŠ¶æ€,0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
      private Integer faceStatus    ;//number    False    äººè„¸çŠ¶æ€,0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
      private String cardJson    ;//string    False    è®°å½•已下载到设备的卡号(Map格式(卡号:状态),其中状态(0改变表示下载后卡片的信息又变化了,1已下载))
      private String configTime    ;//string    False    é…ç½®æ—¶é—´,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
      private String startTime;//    string    False    äººå‘˜æƒé™æœ‰æ•ˆæœŸï¼ˆä»¥äººä¸ºä¸­å¿ƒè®¾å¤‡æ—¶ä½¿ç”¨ï¼‰,开始时间,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
      private String endTime    ;//string    False    äººå‘˜æƒé™æœ‰æ•ˆæœŸï¼ˆä»¥äººä¸ºä¸­å¿ƒè®¾å¤‡æ—¶ä½¿ç”¨ï¼‰,开始日期,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
      private String personExtendJson;//    body    string    å¦
           
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FireChannelListResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class FireChannelListResponse {
     private String regionPath;//    String    false    æ‰€å±žåŒºåŸŸè·¯å¾„,格式:@根节点@子区域1@
     private String regionIndexCode;//    String    false    æ‰€å±žåŒºåŸŸç¼–号
     private String regionPathName;//    String    false    æ‰€å±žåŒºåŸŸè·¯å¾„名称
     private String fireproChannelSubType    ;//Number    false    ä¼ æ„Ÿå™¨å°ç±»åž‹ï¼Œè¯¦è§[附录A.56]
     private String indexCode;//    String    false    èµ„源唯一标志
     private String description;//    String    false    æè¿°
     private String updateTime;//    String    false    æ›´æ–°æ—¶é—´ï¼ŒISO8601标准
     private String fireproChannelMaxValue    ;//String    false    æœ€å¤§é˜ˆå€¼
     private String createTime;//    String    false    åˆ›å»ºæ—¶é—´ï¼ŒISO8601标准
     private String name;//    String    false    èµ„源名称
     private String fireproChannelAddressCode;//    String    false    ä¼ æ„Ÿå™¨åœ°å€ç 
     private String fireproChannelType    ;//Number    false    ä¼ æ„Ÿå™¨å¤§ç±»åž‹ï¼Œè¯¦è§[附录A.64]
     private String parentIndexCode;//    String    false    æ‰€å±žè®¾å¤‡ç¼–码
     private String resourceType;//    String    false    èµ„源类型,fireSensor:消防传感器,详见[附录A.64]
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FireDeviceListResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class FireDeviceListResponse {
     private String regionPath;//    String    false    æ‰€å±žåŒºåŸŸè·¯å¾„,格式:@根节点@子区域1@
private String deviceType;//    String    false    è®¾å¤‡ç±»åž‹
private String regionIndexCode;//    String    false    æ‰€å±žåŒºåŸŸç¼–号
private String fireproDeviceCommunication    ;//String    false    æ‰€å±žè¿è¥å•†åŠé€šä¿¡ç±»åž‹
private String regionPathName;//    String    false    æ‰€å±žåŒºåŸŸè·¯å¾„名称
private String ip;//    String    false    è®¾å¤‡æ‰€åœ¨IP
private String indexCode;//    String    false    èµ„源唯一标志
private String description;//    String    false    æè¿°
private String createTime;//    String    false    åˆ›å»ºæ—¶é—´ï¼ŒISO8601标准
private String updateTime;//    String    false    æ›´æ–°æ—¶é—´ï¼ŒISO8601标准
private String deviceCode;//    String    false    ä¸»åŠ¨è®¾å¤‡ç¼–å·
private String manufacturer    ;//String    false    åނ商
private String port;//    String    false    è®¾å¤‡ç«¯å£
private String name;//    String    false    èµ„源名称
private String resourceType    ;//String    false    èµ„源类型,fireDevice:消防设备
private String devSerialNum    ;//String    false    è®¾å¤‡åºåˆ—号
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FireDeviceStatusListResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class FireDeviceStatusListResponse {
      private String id    ;//String    false    é¢„告警事件唯一标识
      private String warningName    ;//String    false    é¢„告警名称
      private String nodeType    ;//Number    false    èŠ‚ç‚¹ç±»åž‹
      private String nodeId    ;//String    false    èŠ‚ç‚¹ID
      private String nodeName;//    String    false    èŠ‚ç‚¹åç§°
      private String nodePath;//    String    false    èŠ‚ç‚¹è·¯å¾„
      private String ruleType    ;//String    false    é¢„告警类型
      private String warningLevel    ;//Number    false    é¢„告警等级,1:一般,2:严重,3:故障
      private String warningValue    ;//String    false    æ•°æ®é¡¹å½“前值
      private String warningEventTip;//    String    false    å¼‚常原因
      private String createTime;//    String    false    å‘生时间
      private String benchmark;//    String    false    åŸºå‡†æ•°æ®
      private String handleStatus;//    Number    false    å¤„理状态:1:未处理,2:已处理
      private String note;//    String    false    å¤„理意见
      private String handleTime;//    String    false    å¤„理时间
      private String normal;//    Boolean    false    é¢„告警是否正常
      private String deviceId;//    String    false    è®¾å¤‡id
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/NhEventPageListResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class NhEventPageListResponse {
      private String id    ;//String    false    é¢„告警事件唯一标识
      private String warningName    ;//String    false    é¢„告警名称
      private String nodeType    ;//Number    false    èŠ‚ç‚¹ç±»åž‹
      private String nodeId    ;//String    false    èŠ‚ç‚¹ID
      private String nodeName;//    String    false    èŠ‚ç‚¹åç§°
      private String nodePath;//    String    false    èŠ‚ç‚¹è·¯å¾„
      private String ruleType    ;//String    false    é¢„告警类型
      private String warningLevel    ;//Number    false    é¢„告警等级,1:一般,2:严重,3:故障
      private String warningValue    ;//String    false    æ•°æ®é¡¹å½“前值
      private String warningEventTip;//    String    false    å¼‚常原因
      private String createTime;//    String    false    å‘生时间
      private String benchmark;//    String    false    åŸºå‡†æ•°æ®
      private String handleStatus;//    Number    false    å¤„理状态:1:未处理,2:已处理
      private String note;//    String    false    å¤„理意见
      private String handleTime;//    String    false    å¤„理时间
      private String normal;//    Boolean    false    é¢„告警是否正常
      private String deviceId;//    String    false    è®¾å¤‡id
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/SensorStatusListResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class SensorStatusListResponse {
      private String cn;//    String    false    ä¼ æ„Ÿå™¨åç§°
      private String indexCode    ;//String    false    ä¼ æ„Ÿå™¨ç¼–码
      private String regionIndexCode;//    String    false    æ‰€å±žåŒºåŸŸ
      private String regionName    ;//String    false    åŒºåŸŸè·¯å¾„名称,“\”分隔
      private String channelIndexCode;//    String    false    ä¼ æ„Ÿå™¨ç¼–号
      private Integer channelType;//    Number    false    ä¼ æ„Ÿå™¨å¤§ç±»åž‹ï¼Œè¯¦è§[附录A.57 æ¶ˆé˜²ä¼ æ„Ÿå™¨å¤§ç±»åž‹]@[智慧园区管理平台V1.4.301-附录-附录A æ•°æ®å­—å…¸#附录A.57 æ¶ˆé˜²ä¼ æ„Ÿå™¨å¤§ç±»åž‹]
      private String channelSubType    ;//String    false    ä¼ æ„Ÿå™¨å°ç±»åž‹ï¼Œè¯¦è§[附录A.56 æ¶ˆé˜²ä¼ æ„Ÿå™¨å°ç±»åž‹]@[智慧园区管理平台V1.4.301-附录-附录A æ•°æ®å­—å…¸#附录A.56 æ¶ˆé˜²ä¼ æ„Ÿå™¨å°ç±»åž‹]
      private Integer unitStatus ;//Number    false    éƒ¨ä»¶çŠ¶æ€ï¼Œ0:未注册 1:正常 2: ä¿®å¤ä¸­ 3:异常状态(修复中状态目前没用到,未注册时设备没有在离线状态) ç©º-所有状态
      private String collectTime ;//    String    false    æ›´æ–°æ—¶é—´ï¼ŒIOS8601格式
      private String parentName    ;//    String    false    çˆ¶èµ„源名称
      private String faultType    ;//    String    false    æ•…障类型,","号分隔,详见[附录A.89 æ¶ˆé˜²æ•…障类型@[智慧园区管理平台V1.4.301-附录-附录A æ•°æ®å­—å…¸#附录A.89 æ¶ˆé˜²æ•…障类型]
      private String faultName    ;//    String    false    æ•…障类型名称,”,“号分隔
      private String faultNum    ;//    String    false    æ•…障次数
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/WxConfigInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
import java.util.List;
@Data
public class WxConfigInfoResponse {
      private String id;//    String    false    å¾®ä¿¡å…¬ä¼—号配置id
      private String appKey;//    String    false    å¾®ä¿¡å…¬ä¼—号app_key
      private String appSecret    ;//String    false    å¾®ä¿¡å…¬ä¼—号app_secret
      private String oaName;//    String    false    å¾®ä¿¡å…¬ä¼—号名称
      private String modelDataId    ;//String    false    pdms数据主键
      private String domainId    ;//String    false    æ‰€å±žç½‘络id
      private String netProtocol;//    String    false    ç½‘络协议
      private String port;//    String    false    ç«¯å£å·
      private String tagId;//    String    false    ç»„建标识
      private String templateUrl;//    String    false    æ¨¡æ¿æ¶ˆæ¯åœ°å€é…ç½®
      private String proxySwitch;//    String    false    æ˜¯å¦å¼€å¯ä»£ç†  1 å¼€  0 å…³
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -1,5 +1,6 @@
package com.doumee.core.haikang.service;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.doumee.core.haikang.model.HKConstants;
@@ -15,6 +16,9 @@
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import oshi.hardware.Sensors;
import sun.management.Sensor;
import java.io.InputStream;
import java.lang.reflect.Field;
@@ -897,6 +901,116 @@
        return  null;
    }
    /**
     *根据配置微信公众号编号查询微信公众号信息
     * @return
     */
    public  static  BaseResponse<BaseListPageResponse<WxConfigInfoResponse>>   getWxConfig(WxConfigInfoRequest param){
        log.info("【海康根据配置微信公众号编号查询微信公众号信息】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.getWxConfig(toMap(param));
            TypeReference typeReference =
                    new TypeReference<BaseResponse<BaseListPageResponse<WxConfigInfoResponse>>>(){};
            BaseResponse<BaseListPageResponse<WxConfigInfoResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康根据配置微信公众号编号查询微信公众号信息");
            return  result;
        }catch (Exception e){
            log.error("【海康根据配置微信公众号编号查询微信公众号信息】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    /**
     *分页查询消防设备部件状态
     * @return
     */
    public  static  BaseResponse<BaseListPageResponse<FireDeviceStatusListResponse>>   fireDeviceStatusSearch(FireDeviceStatuslListRequest param){
        log.info("【海康查询消防设备部件状态】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.fireDeviceStatusSearch(toMap(param));
            TypeReference typeReference =
                    new TypeReference<BaseResponse<BaseListPageResponse<FireDeviceStatusListResponse>>>(){};
            BaseResponse<BaseListPageResponse<FireDeviceStatusListResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康分页查询消防传感器部件状态");
            return  result;
        }catch (Exception e){
            log.error("【海康查询消防设备部件状态】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    /**
     *分页查询消防传感器部件状态
     * @return
     */
    public  static  BaseResponse<BaseListPageResponse<SensorStatusListResponse>>   sensorStatusSearch(SensorStatusListRequest param){
        log.info("【海康分页查询消防传感器部件状态】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.sensorStatusSearch(toMap(param));
            TypeReference typeReference =
                    new TypeReference<BaseResponse<BaseListPageResponse<SensorStatusListResponse>>>(){};
            BaseResponse<BaseListPageResponse<SensorStatusListResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康分页查询消防传感器部件状态");
            return  result;
        }catch (Exception e){
            log.error("【海康分页查询消防传感器部件状态】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    /**
     *查询消防传感器列表
     * @return
     */
    public  static  BaseResponse<BaseListPageResponse<FireChannelListResponse>>   fireChannelSearch(FireChannelListRequest param){
        log.info("【海康查询消防传感器列表】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.fireChannelSearch(toMap(param));
            TypeReference typeReference =
                    new TypeReference<BaseResponse<BaseListPageResponse<FireChannelListResponse>>>(){};
            BaseResponse<BaseListPageResponse<FireChannelListResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康查询消防传感器列表");
            return  result;
        }catch (Exception e){
            log.error("【海康查询消防传感器列表】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    /**
     *询消防设备列表
     * @return
     */
    public  static  BaseResponse<BaseListPageResponse<FireDeviceListResponse>>   fireDeviceSearch(FireDeviceListRequest param){
        log.info("【海康询消防设备列表】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.fireDeviceSearch(toMap(param));
            TypeReference typeReference =
                    new TypeReference<BaseResponse<BaseListPageResponse<FireDeviceListResponse>>>(){};
            BaseResponse<BaseListPageResponse<FireDeviceListResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康询消防设备列表");
            return  result;
        }catch (Exception e){
            log.error("【海康询消防设备列表】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    /**
     *分页获取告警事件
     * @return
     */
    public  static  BaseResponse<BaseListPageResponse<NhEventPageListResponse>>   nhEventPageList(NhEventPageListRequest param){
        log.info("【海康分页获取告警事件】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.nhEventPageList(toMap(param));
            TypeReference typeReference =
                    new TypeReference<BaseResponse<BaseListPageResponse<NhEventPageListResponse>>>(){};
            BaseResponse<BaseListPageResponse<NhEventPageListResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康分页获取告警事件");
            return  result;
        }catch (Exception e){
            log.error("【海康分页获取告警事件】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    /**
     *查询访客来访记录(已登记)(分页)
     * @return
     */
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java
@@ -102,7 +102,6 @@
    @ApiModelProperty(value = "最后事件推送时间")
    @ExcelColumn(name="最后事件推送时间")
    private Date lastEventTime;
    @ApiModelProperty(value = "监控点名称,多个用英文逗号隔开")
@@ -158,10 +157,10 @@
    private String groupName;
    @ApiModelProperty(value = "关联LED编码集合,英文逗号隔开", example = "1")
    @TableField(exist = false)
    private String ledIds;
    private List<Integer> ledIds;
    @ApiModelProperty(value = "关联广播编码集合,英文逗号隔开", example = "1")
    @TableField(exist = false)
    private String broadcastIds;
    private List<Integer> broadcastIds;
    @ApiModelProperty(value = "关联LED名称集合,英文逗号隔开", example = "1")
    @TableField(exist = false)
    private String ledNames;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java
@@ -95,8 +95,8 @@
    @ExcelColumn(name="签到时间")
    private Date signDate;
    @ApiModelProperty(value = "签到方式 0app签到 1扫码签到", example = "1")
    @ExcelColumn(name="签到方式 0app签到 1扫码签到")
    @ApiModelProperty(value = "签到方式 0app签到 1扫码签到 2后台签到", example = "1")
    @ExcelColumn(name="签到方式 0app签到 1扫码签到 2后台签到")
    private Integer singType;
    @ApiModelProperty(value = "通知WMS作业绑定月台时间")
    @ExcelColumn(name="通知WMS作业绑定月台时间")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/openapi/response/PlatformWarnEventListResponse.java
@@ -21,4 +21,8 @@
    private Date createDate;
    @ApiModelProperty(value = "事件内容说明")
    private String content;
    @ApiModelProperty(value = "月台名称")
    private String platformName;
    @ApiModelProperty(value = "月台编码")
    private String platfromHkId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/SignInDTO.java
@@ -21,7 +21,7 @@
    @ApiModelProperty(value = "任务主键")
    private Integer jobId;
    @ApiModelProperty(value = "签到类型: 0=app签到 1=扫码签到")
    @ApiModelProperty(value = "签到类型: 0=app签到 1=扫码签到 2=后台签到")
    private Integer signType;
    @ApiModelProperty(value = "签到二维码值")
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
@@ -169,7 +169,7 @@
        ;
        PageData<PlatformBooks> pageData = PageData.from(platformBooksMapper.selectPage(page, queryWrapper));
        for (PlatformBooks platformBooks:pageData.getRecords()) {
            if(Constants.equalsInteger(platformBooks.getStatus(),Constants.ONE)){
            if(Constants.equalsInteger(platformBooks.getStatus(),Constants.ONE)||Constants.equalsInteger(platformBooks.getStatus(),Constants.ZERO)){
                String auditName = approveService.getApproveUserName(platformBooks.getId(),Constants.approveObjectType.reason);
                platformBooks.setAuditName(auditName);
            }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -239,8 +239,8 @@
                .eq(pageWrap.getModel().getPlatformGroupId() != null, PlatformJob::getPlatformGroupId, pageWrap.getModel().getPlatformGroupId())
                .apply(pageWrap.getModel().getQueryStatus() != null, " find_in_set(t.`STATUS`,'"+pageWrap.getModel().getQueryStatus()+"')")
                .ge(pageWrap.getModel().getBeginWorkDateStart() != null, PlatformJob::getStartDate, Utils.Date.getStart(pageWrap.getModel().getBeginWorkDateStart()))
                .le(pageWrap.getModel().getBeginWorkDateEnd() != null, PlatformJob::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getBeginWorkDateEnd()))
                .ge(pageWrap.getModel().getBeginWorkDateStart() != null, PlatformJob::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getBeginWorkDateStart()))
                .le(pageWrap.getModel().getBeginWorkDateEnd() != null, PlatformJob::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getBeginWorkDateEnd()))
                .eq(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ONE,pageWrap.getModel().getJobType()), PlatformJob::getType, Constants.platformJobType.sgscxh)
                .ne(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ZERO,pageWrap.getModel().getJobType()), PlatformJob::getType, Constants.platformJobType.sgscxh)
        ;
@@ -373,7 +373,8 @@
            }else{
                platformJob.setWaitTime("等待叫号");
            }
        }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){
        }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())
        || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){
            //查询最后开始任务的月台记录  æ—¥å¿—表  å› ä¸ºå­˜åœ¨å¼‚常挂起 è½¬ç§» ç­‰é—®é¢˜
            PlatformLog platformLog = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda()
                    .eq(PlatformLog::getJobId,platformJob.getId())
@@ -416,7 +417,7 @@
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                .eq(PlatformJob::getDrivierPhone,loginUserInfo.getMobile())
                .like(PlatformJob::getArriveDate,DateUtil.getCurrDate())
//                .like(PlatformJob::getArriveDate,DateUtil.getCurrDate())
                .orderByDesc(PlatformJob::getId)
        );
        for (PlatformJob platformJob:platformJobList) {
@@ -462,8 +463,9 @@
        PlatformJob oldPlatformJob = new PlatformJob();
        BeanUtils.copyProperties(platformJob,oldPlatformJob);
        platformJob.setConfirmTaskDate(new Date());
        platformJob.setArriveDate(confirmTaskDTO.getArriveDate());
        platformJob.setCarCodeBack(confirmTaskDTO.getCarCodeBack());
        platformJob.setStatus(Constants.PlatformJobStatus.WART_SIGN_IN.getKey());
        platformJob.setEditDate(new Date());
        platformJobMapper.updateById(platformJob);
@@ -488,19 +490,31 @@
        if(Objects.isNull(platformJob)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看");
        }
        PlatformJob oldPlatformJob = new PlatformJob();
        BeanUtils.copyProperties(platformJob,oldPlatformJob);
        if(Constants.equalsInteger(signInDTO.getSignType(),Constants.ZERO)){
            if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看");
            }
            this.distanceSignIn(signInDTO,platformJob);
        }else if(Constants.equalsInteger(signInDTO.getSignType(),Constants.ONE)){
            if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看");
            }
            this.sceneSignIn(signInDTO);
        }else if(Constants.equalsInteger(signInDTO.getSignType(),Constants.TWO)){
            if(!(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CONFIRM.getKey())||
                    Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey()))
            ){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看");
            }
        }else{
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"签到类型错误");
        }
        platformJob.setSignDate(new Date());
        platformJob.setSingType(Constants.ZERO);
        platformJob.setSingType(signInDTO.getSignType());
        platformJob.setStatus(Constants.PlatformJobStatus.WAIT_CALL.getKey());
        platformJobMapper.updateById(platformJob);
        //存储操作日志
@@ -508,12 +522,12 @@
                Constants.PlatformJobLogType.SIGN.getInfo());
    }
    public void distanceSignIn(SignInDTO signInDTO , PlatformJob platformJob){
        if(Objects.isNull(signInDTO.getLat())
                || Objects.isNull(signInDTO.getLnt())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"经纬度信息异常");
        }
        //获取签到点的经纬度
        Double lat = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LAT).getCode());
        Double lnt = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LNT).getCode());
@@ -529,6 +543,7 @@
    }
    public void sceneSignIn(SignInDTO signInDTO){
        if( StringUtils.isNotBlank(signInDTO.getQrCodeKey())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
@@ -716,6 +731,7 @@
        || Constants.equalsInteger(platformJob.getType(),Constants.FOUR)){
            //TODO ä¸‹å‘入园权限
        }
        //存储操作日志
        savePlatformLog(Constants.PlatformJobLogType.IN_WAIT.getKey(),oldPlatformJob,platformJob,
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import cn.emay.sdk.util.StringUtil;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
@@ -7,25 +8,27 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.DeviceMapper;
import com.doumee.dao.business.PlatformDeviceMapper;
import com.doumee.dao.business.PlatformMapper;
import com.doumee.dao.business.join.PlatformJoinMapper;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Platform;
import com.doumee.dao.business.model.PlatformGroup;
import com.doumee.dao.business.model.*;
import com.doumee.dao.openapi.response.PlatformNumByStatusResponse;
import com.doumee.service.business.PlatformDeviceService;
import com.doumee.service.business.PlatformService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -40,10 +43,62 @@
    private PlatformMapper platformMapper;
    @Autowired
    private PlatformJoinMapper platformJoinMapper;
    @Autowired
    private PlatformDeviceMapper platformDeviceMapper;
    @Autowired
    private DeviceMapper deviceMapper;
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public Integer create(Platform platform) {
        platform.setCreateDate(new Date());
        platform.setIsdeleted(Constants.ZERO);
        platform.setCreator(platform.getLoginUserInfo().getId());
        platformMapper.insert(platform);
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platform.getLedIds())){
            List<PlatformDevice> platformDeviceList = new ArrayList<>();
            for (Integer ledId:platform.getLedIds()) {
                Device device = deviceMapper.selectById(ledId);
                if(Objects.isNull(device)){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到led设备信息【"+ledId+"】");
                }
                PlatformDevice platformDevice = new PlatformDevice();
                platformDevice.setIsdeleted(Constants.ZERO);
                platformDevice.setPlatformId(platform.getId());
                platformDevice.setCreateDate(new Date());
                platformDevice.setCreator(platform.getLoginUserInfo().getId());
                platformDevice.setType(Constants.ZERO);
                platformDevice.setDeviceId(ledId.toString());
                platformDevice.setHkId(device.getHkId());
                platformDevice.setName(device.getName());
                platformDeviceList.add(platformDevice);
            }
            platformDeviceMapper.insert(platformDeviceList);
        }
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platform.getBroadcastIds())){
            List<PlatformDevice> platformDeviceList = new ArrayList<>();
            for (Integer broadcastId:platform.getBroadcastIds()) {
                Device device = deviceMapper.selectById(broadcastId);
                if(Objects.isNull(device)){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到广播设备信息【"+broadcastId+"】");
                }
                PlatformDevice platformDevice = new PlatformDevice();
                platformDevice.setIsdeleted(Constants.ZERO);
                platformDevice.setPlatformId(platform.getId());
                platformDevice.setCreateDate(new Date());
                platformDevice.setCreator(platform.getLoginUserInfo().getId());
                platformDevice.setType(Constants.TWO);
                platformDevice.setDeviceId(broadcastId.toString());
                platformDevice.setHkId(device.getHkId());
                platformDevice.setName(device.getName());
                platformDeviceList.add(platformDevice);
            }
            platformDeviceMapper.insert(platformDeviceList);
        }
        return platform.getId();
    }
@@ -67,7 +122,60 @@
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void updateById(Platform platform) {
        platform.setEditor(platform.getLoginUserInfo().getId());
        platform.setEditDate(new Date());
        //删除LED/广播数据
        platformDeviceMapper.delete(new QueryWrapper<PlatformDevice>().lambda()
                .eq(PlatformDevice::getPlatformId,platform.getId())
                .in(PlatformDevice::getType,Constants.ZERO,Constants.TWO)
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platform.getLedIds())){
            List<PlatformDevice> platformDeviceList = new ArrayList<>();
            String ledNames = "";
            for (Integer ledId:platform.getLedIds()) {
                Device device = deviceMapper.selectById(ledId);
                if(Objects.isNull(device)){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到led设备信息【"+ledId+"】");
                }
                PlatformDevice platformDevice = new PlatformDevice();
                platformDevice.setIsdeleted(Constants.ZERO);
                platformDevice.setPlatformId(platform.getId());
                platformDevice.setCreateDate(new Date());
                platformDevice.setCreator(platform.getLoginUserInfo().getId());
                platformDevice.setType(Constants.ZERO);
                platformDevice.setDeviceId(ledId.toString());
                platformDevice.setHkId(device.getHkId());
                platformDevice.setName(device.getName());
                platformDeviceList.add(platformDevice);
            }
            platformDeviceMapper.insert(platformDeviceList);
            platform.setLedNames(ledNames);
        }
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platform.getBroadcastIds())){
            List<PlatformDevice> platformDeviceList = new ArrayList<>();
            String ledNames = "";
            for (Integer broadcastId:platform.getBroadcastIds()) {
                Device device = deviceMapper.selectById(broadcastId);
                if(Objects.isNull(device)){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到广播设备信息【"+broadcastId+"】");
                }
                PlatformDevice platformDevice = new PlatformDevice();
                platformDevice.setIsdeleted(Constants.ZERO);
                platformDevice.setPlatformId(platform.getId());
                platformDevice.setCreateDate(new Date());
                platformDevice.setCreator(platform.getLoginUserInfo().getId());
                platformDevice.setType(Constants.TWO);
                platformDevice.setDeviceId(broadcastId.toString());
                platformDevice.setHkId(device.getHkId());
                platformDevice.setName(device.getName());
                platformDeviceList.add(platformDevice);
            }
            platformDeviceMapper.insert(platformDeviceList);
        }
        platformMapper.updateById(platform);
    }
@@ -160,7 +268,35 @@
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(platformMapper.selectJoinPage(page,Platform.class, queryWrapper));
        PageData<Platform> platformPageData = PageData.from(platformMapper.selectJoinPage(page,Platform.class, queryWrapper));
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformPageData.getRecords())){
            for (Platform platform:platformPageData.getRecords()) {
                List<PlatformDevice> ledDevice =  platformDeviceMapper.selectList(new QueryWrapper<PlatformDevice>().lambda()
                        .eq(PlatformDevice::getPlatformId,platform.getId())
                        .eq(PlatformDevice::getType,Constants.ZERO)
                );
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ledDevice)){
                    platform.setLedNames(String.join(",", ledDevice.stream().map(m->m.getName()).collect(Collectors.toList())));
                    platform.setLedIds(
                            ledDevice.stream().map(m->Integer.valueOf(m.getDeviceId())).collect(Collectors.toList())
                    );
                }
                List<PlatformDevice> broadcastDevice =  platformDeviceMapper.selectList(new QueryWrapper<PlatformDevice>().lambda()
                        .eq(PlatformDevice::getPlatformId,platform.getId())
                        .eq(PlatformDevice::getType,Constants.TWO)
                );
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(broadcastDevice)){
                    platform.setBroadcastNames(String.join(",", broadcastDevice.stream().map(m->m.getName()).collect(Collectors.toList())));
                    platform.setBroadcastIds(
                            broadcastDevice.stream().map(m->Integer.valueOf(m.getDeviceId())).collect(Collectors.toList())
                    );
                }
            }
        }
        return platformPageData;
    }
    @Override