From 0fbf18ab21b66fa5b79d42bed26a381ada83bd2d Mon Sep 17 00:00:00 2001 From: zy <82248909@qq.com> Date: Sat, 15 Nov 2025 19:25:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ScEquZhibiaoController.java | 27 + .../controller/SurvCityCodeController.java | 137 +++++ .../SurvDeviceDeployController.java | 97 +--- .../controller/SurvDictCityController.java | 148 ++++++ .../SurvDictDeviceCateController.java | 213 ++++++++ .../SurvDictDeviceDetailController.java | 187 +++++++ .../appmana/mapper/SurvCityCodeMapper.java | 14 + .../appmana/mapper/SurvConfigMapper.java | 4 + .../appmana/mapper/SurvDictCityMapper.java | 14 + .../mapper/SurvDictDeviceCateMapper.java | 18 + .../mapper/SurvDictDeviceDetailMapper.java | 14 + .../appmana/mapper/SurvDictEleMapper.java | 14 + .../appmana/mapper/xml/SUrvDictCityMapper.xml | 5 + .../appmana/mapper/xml/SurvCityCodeMapper.xml | 5 + .../appmana/mapper/xml/SurvConfigMapper.xml | 7 + .../mapper/xml/SurvDeviceDeployMapper.xml | 8 +- .../mapper/xml/SurvDictDeviceCateMapper.xml | 29 ++ .../mapper/xml/SurvDictDeviceDetailMapper.xml | 5 + .../appmana/mapper/xml/SurvEleMapper.xml | 5 + .../vo/common/CustomResponseErrorHandler.java | 22 + .../appmana/o/vo/common/HttpResponseVo.java | 14 + .../appmana/service/ISurvConfigService.java | 6 + .../service/ISurvDeviceDeployService.java | 6 + .../appmana/service/SurvCityCodeService.java | 14 + .../appmana/service/SurvDictCityService.java | 14 + .../service/SurvDictDeviceCateService.java | 17 + .../service/SurvDictDeviceDetailService.java | 14 + .../appmana/service/SurvDictEleService.java | 14 + .../service/impl/ScEquZhibiaoServiceImpl.java | 7 + .../service/impl/SurvCityCodeServiceImpl.java | 18 + .../service/impl/SurvConfigServiceImpl.java | 12 + .../impl/SurvDeviceDeployServiceImpl.java | 355 ++++++++++++- .../service/impl/SurvDictCityServiceImpl.java | 18 + .../impl/SurvDictDeviceCateServiceImpl.java | 44 ++ .../SurvDictDictDeviceDetailServiceImpl.java | 18 + .../service/impl/SurvDictEleServiceImpl.java | 27 + .../appmana/utils/HttpRequestUtils.java | 482 ++++++++++++++++++ .../modules/appmana/utils/SdrkUtils.java | 175 +++++++ .../jeecg/modules/appmana/utils/XphUtils.java | 301 +++++++++++ .../mapper/xml/SurvDeviceDeployMapper.xml | 8 +- .../jeecg/common/constant/IotConstants.java | 252 +++++++++ .../jeecg/common/constant/ToolConstant.java | 59 +++ .../constant/enums/DeviceDeployEnum.java | 115 +++++ .../constant/enums/IotManufacturerEnum.java | 56 ++ .../org/jeecg/common/entity/ScEquZhibiao.java | 22 +- .../org/jeecg/common/entity/SurvCityCode.java | 128 +++++ .../jeecg/common/entity/SurvDeviceDeploy.java | 28 + .../org/jeecg/common/entity/SurvDictCity.java | 111 ++++ .../common/entity/SurvDictDeviceCate.java | 147 ++++++ .../common/entity/SurvDictDeviceDetail.java | 213 ++++++++ .../org/jeecg/common/entity/SurvDictEle.java | 142 ++++++ .../org/jeecg/common/iot/renke/DataItem.java | 31 ++ .../jeecg/common/iot/renke/RegisterItem.java | 78 +++ .../common/iot/renke/RelayStatusItems.java | 30 ++ .../common/iot/renke/RenKeResultPack.java | 10 + .../iot/renke/RenkeDataRealTimeDetail.java | 95 ++++ .../iot/renke/RenkeDataRealTimePack.java | 10 + .../common/iot/renke/enums/RkItemEnum.java | 89 ++++ .../common/iot/xph/XphDeviceEleDetailVo.java | 29 ++ .../jeecg/common/iot/xph/XphDeviceEleVo.java | 10 + .../jeecg/common/iot/xph/XphDeviceInfoVo.java | 75 +++ .../iot/xph/XphDeviceNewestDataDetailVo.java | 14 + .../iot/xph/XphDeviceNewestDataEleVo.java | 19 + .../iot/xph/XphDeviceNewestDataRelVo.java | 15 + .../common/iot/xph/XphDeviceNewestDataVo.java | 17 + .../common/iot/xph/XphDeviceQueryDataVo.java | 22 + .../iot/xph/XphdeviceQueryDetailVo.java | 22 + .../jeecg/common/util/CommonToolUtils.java | 308 +++++++++++ .../java/org/jeecg/common/util/TreeUtil.java | 23 + .../vo/iot/common/VODeviceCategoryTree.java | 14 + .../common/vo/iot/common/VOIotAccess.java | 9 + .../vo/statistic/CommonStatisticResultVo.java | 29 ++ .../vo/statistic/CommonStatisticVo.java | 16 + .../common/vo/statistic/YearMonthVo.java | 11 + 74 files changed, 4699 insertions(+), 87 deletions(-) create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvCityCodeController.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictCityController.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictDeviceCateController.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictDeviceDetailController.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvCityCodeMapper.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictCityMapper.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictDeviceCateMapper.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictDeviceDetailMapper.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictEleMapper.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SUrvDictCityMapper.xml create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvCityCodeMapper.xml create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDictDeviceCateMapper.xml create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDictDeviceDetailMapper.xml create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvEleMapper.xml create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/o/vo/common/CustomResponseErrorHandler.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/o/vo/common/HttpResponseVo.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvCityCodeService.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictCityService.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictDeviceCateService.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictDeviceDetailService.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictEleService.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvCityCodeServiceImpl.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictCityServiceImpl.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictDeviceCateServiceImpl.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictDictDeviceDetailServiceImpl.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictEleServiceImpl.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/HttpRequestUtils.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/SdrkUtils.java create mode 100644 zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/XphUtils.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/IotConstants.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/ToolConstant.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/DeviceDeployEnum.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/IotManufacturerEnum.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvCityCode.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvDictCity.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvDictDeviceCate.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvDictDeviceDetail.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/entity/SurvDictEle.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/renke/DataItem.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/renke/RegisterItem.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/renke/RelayStatusItems.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/renke/RenKeResultPack.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/renke/RenkeDataRealTimeDetail.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/renke/RenkeDataRealTimePack.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/renke/enums/RkItemEnum.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/xph/XphDeviceEleDetailVo.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/xph/XphDeviceEleVo.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/xph/XphDeviceInfoVo.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/xph/XphDeviceNewestDataDetailVo.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/xph/XphDeviceNewestDataEleVo.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/xph/XphDeviceNewestDataRelVo.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/xph/XphDeviceNewestDataVo.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/xph/XphDeviceQueryDataVo.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/iot/xph/XphdeviceQueryDetailVo.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/CommonToolUtils.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/util/TreeUtil.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/iot/common/VODeviceCategoryTree.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/iot/common/VOIotAccess.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/statistic/CommonStatisticResultVo.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/statistic/CommonStatisticVo.java create mode 100644 zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/statistic/YearMonthVo.java diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/ScEquZhibiaoController.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/ScEquZhibiaoController.java index 0540844..2edcf2d 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/ScEquZhibiaoController.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/ScEquZhibiaoController.java @@ -5,11 +5,16 @@ import java.util.Date; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.constant.enums.PollutionEnum; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.entity.ScEquZhibiao; +import org.jeecg.common.vo.PolutionVo; import org.jeecg.modules.appmana.service.IScEquZhibiaoService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -203,4 +208,26 @@ public class ScEquZhibiaoController extends JeecgController { + @Autowired + private SurvCityCodeService fCityCodeService; + + + //@AutoLog(value = "城市编码-分页列表查询") + @ApiOperation(value = "01. 分页查询", notes = "") + @ApiOperationSupport(order = 1) + @GetMapping(value = "/list") + public Result> queryPageList(SurvCityCode survCityCode, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(survCityCode, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = fCityCodeService.page(page, queryWrapper); + return Result.OK(pageList); + } + + + @AutoLog(value = "城市编码-添加") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "02. 添加", notes = "") + @RequiresPermissions("farm:f_city_code:add") + @PostMapping(value = "/add") + public Result add(@RequestBody SurvCityCode survCityCode, HttpServletRequest request) { + String username = JwtUtil.getUserNameByToken(request); + fCityCodeService.save(survCityCode); + return Result.OK("添加成功!"); + } + + @AutoLog(value = "城市编码-编辑") + @ApiOperationSupport(order = 3) + @ApiOperation(value = "03. 编辑", notes = "") + @RequiresPermissions("farm:f_city_code:edit") + @PostMapping(value = "/edit") + public Result edit(@RequestBody SurvCityCode survCityCode, HttpServletRequest request) { + //创建、更新时间不能编辑 + String username = JwtUtil.getUserNameByToken(request); + fCityCodeService.updateById(survCityCode); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "城市编码-通过id删除") + @ApiOperation(value = "04.通过id删除", notes = "") + @RequiresPermissions("farm:f_city_code:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + fCityCodeService.removeById(id); + return Result.OK("删除成功!"); + } + + + @AutoLog(value = "城市编码-批量删除") + @ApiOperationSupport(order = 4) + @ApiOperation(value = "04. 批量删除", notes = "") + @RequiresPermissions("farm:f_city_code:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.fCityCodeService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + + //@AutoLog(value = "城市编码-通过id查询") + @ApiOperationSupport(order = 5) + @ApiOperation(value = "05. 通过id查询", notes = "") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SurvCityCode survCityCode = fCityCodeService.getById(id); + if (survCityCode == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(survCityCode); + } + + + @ApiOperationSupport(order = 6) + @ApiOperation(value = "06. 导出excel", notes = "") + @RequiresPermissions("farm:f_city_code:exportXls") + @GetMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SurvCityCode survCityCode) { + return super.exportXls(request, survCityCode, SurvCityCode.class, "城市编码"); + } + + + @ApiOperationSupport(order = 7) + @ApiOperation(value = "07. 导入excel", notes = "") + @RequiresPermissions("farm:f_city_code:importExcel") + @PostMapping(value = "/importExcel") + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SurvCityCode.class); + } + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDeviceDeployController.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDeviceDeployController.java index 13434aa..ed319c7 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDeviceDeployController.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDeviceDeployController.java @@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.google.gson.JsonObject; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.Result; @@ -95,34 +96,9 @@ public class SurvDeviceDeployController extends JeecgController add(@RequestBody SurvDeviceDeploy survDeviceDeploy, HttpServletRequest request) { - //处理设备链接保存 - if(StringUtils.isNotBlank(survDeviceDeploy.getXyId())&&survDeviceDeploy.getProtocolDetail()!=null){ - String username = JwtUtil.getUserNameByToken(request); - ScCont contEnt = new ScCont(); - contEnt.setEquId(survDeviceDeploy.getDeployCode()); - contEnt.setXyId(survDeviceDeploy.getXyId()); - contEnt.setCreateId(username); - contEnt.setCreateTime(new Date()); - scContService.save(contEnt); - - - List saveList = new ArrayList<>(); - for (String key : survDeviceDeploy.getProtocolDetail().keySet()) { - ScContExe contExe = new ScContExe(); - contExe.setCreateId(username); - contExe.setCreateTime(contEnt.getCreateTime()); - contExe.setCode(key); - contExe.setValue(survDeviceDeploy.getProtocolDetail().getString(key)); - contExe.setContId(contEnt.getId()); - saveList.add(contExe); - } - if(saveList.size()>0) { - scContExeService.saveBatch(saveList); - } - } - - survDeviceDeploy.setCreateTime(new Date()); - survDeviceDeployService.save(survDeviceDeploy); + String username = JwtUtil.getUserNameByToken(request); + survDeviceDeploy.setCreatedBy(username); + survDeviceDeployService.saveDeploy(survDeviceDeploy); return Result.OK("添加成功!"); } @@ -137,56 +113,10 @@ public class SurvDeviceDeployController extends JeecgController edit(@RequestBody SurvDeviceDeploy survDeviceDeploy, HttpServletRequest request) { - //处理设备连接修改 - if(StringUtils.isNotBlank(survDeviceDeploy.getXyId())&&survDeviceDeploy.getProtocolDetail()!=null){ - //step 1:删除现有的协议 - List contList = scContService.list(Wrappers.lambdaQuery().eq(ScCont::getEquId,survDeviceDeploy.getDeployCode())); - if(contList.size()>0){ - scContService.removeById(contList.get(0).getId()); - scContExeService.remove(Wrappers.lambdaQuery().eq(ScContExe::getContId,contList.get(0).getId())); - } - //step 2:重新建立连接 + String username = JwtUtil.getUserNameByToken(request); + survDeviceDeploy.setCreatedBy(username); - String username = JwtUtil.getUserNameByToken(request); - ScCont contEnt = new ScCont(); - contEnt.setEquId(survDeviceDeploy.getDeployCode()); - contEnt.setXyId(survDeviceDeploy.getXyId()); - contEnt.setCreateId(username); - contEnt.setCreateTime(new Date()); - scContService.save(contEnt); - - - List saveList = new ArrayList<>(); - for (String key : survDeviceDeploy.getProtocolDetail().keySet()) { - ScContExe contExe = new ScContExe(); - contExe.setCreateId(username); - contExe.setCreateTime(contEnt.getCreateTime()); - contExe.setCode(key); - contExe.setValue(survDeviceDeploy.getProtocolDetail().getString(key)); - contExe.setContId(contEnt.getId()); - saveList.add(contExe); - } - if(saveList.size()>0) { - scContExeService.saveBatch(saveList); - } - } - - - survDeviceDeploy.setCreateTime(null); - survDeviceDeploy.setUpdatedTime(null); - String username = JwtUtil.getUserNameByToken(request); - survDeviceDeploy.setUpdatedBy(username); - - - //假如有水设备操作 -// if(PollutionConstants.WATER_ORIENT.equals(survDeviceDeploy.getDeployType())&&StringUtils.isNotBlank(survDeviceDeploy.getValveStatus1())){ -// String deployCodeNum = survDeviceDeploy.getDeployCode().substring(CommonConstant.XZP_WATER.length());//xzp-water-01获取到01 -// StringBuilder sbuilder = new StringBuilder("AA"); -// sbuilder.append(deployCodeNum).append("080101").append(survDeviceDeploy.getValveStatus1()).append("0055"); -// survDeviceDeploy.setSendInfo(sbuilder.toString()); -// log.warn("操作水设备"+survDeviceDeploy.getDeployCode()+",指令:"+sbuilder.toString()); -// } - survDeviceDeployService.updateById(survDeviceDeploy); + survDeviceDeployService.updateDeploy(survDeviceDeploy); return Result.OK("编辑成功!"); } @@ -344,4 +274,17 @@ public class SurvDeviceDeployController extends JeecgController initDevice(@RequestParam(name = "ids", required = true) String ids) { + boolean b = survDeviceDeployService.initDevice(Arrays.asList(ids.split(","))); + if(b){ + return Result.OK("初始化成功!"); + }else{ + return Result.error("初始化失败,请联系管理员!"); + } + } } diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictCityController.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictCityController.java new file mode 100644 index 0000000..111e638 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictCityController.java @@ -0,0 +1,148 @@ +package org.jeecg.modules.appmana.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.entity.SurvDictCity; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.util.JwtUtil; +import org.jeecg.common.util.TreeUtil; +import org.jeecg.modules.appmana.service.SurvDictCityService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + + +/** + * @Description: 城市列表 + * @Author: jeecg-boot + * @Date: 2023-09-01 + * @Version: V1.0 + */ +@Api(tags = "99. 城市列表") +@RestController +@RequestMapping("/appmana/fDictCity") +@Slf4j +public class SurvDictCityController extends JeecgController { + @Autowired + private SurvDictCityService fDictCityService; + + + //@AutoLog(value = "城市列表-分页列表查询") + @ApiOperation(value = "01. 分页查询", notes = "") + @ApiOperationSupport(order = 1) + @GetMapping(value = "/list") + public Result> getTree(SurvDictCity survDictCity, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(survDictCity, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = fDictCityService.page(page, queryWrapper); + return Result.OK(pageList); + } + + private static JSONArray tree = null; + + @ApiOperation(value = "01. 城市树", notes = "") + @ApiOperationSupport(order = 1) + @GetMapping(value = "/tree") + public Result getTree() { + if (tree == null) { + List list = fDictCityService.list(); + JSONArray array = JSONArray.parseArray(JSON.toJSONString(list)); + tree = TreeUtil.getTree(array, "0", "id", "parentId"); + } + return Result.OK(tree); + } + + + @AutoLog(value = "城市列表-添加") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "02. 添加", notes = "") + @RequiresPermissions("/farmdict/:f_dict_city:add") + @PostMapping(value = "/add") + public Result add(@RequestBody SurvDictCity survDictCity, HttpServletRequest request) { + String username = JwtUtil.getUserNameByToken(request); + survDictCity.setCreateBy(username); + survDictCity.setCreateTime(new Date()); + fDictCityService.save(survDictCity); + return Result.OK("添加成功!"); + } + + + @AutoLog(value = "城市列表-编辑") + @ApiOperationSupport(order = 3) + @ApiOperation(value = "03. 编辑", notes = "") + @RequiresPermissions("/farmdict/:f_dict_city:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody SurvDictCity survDictCity, HttpServletRequest request) { + //创建、更新时间不能编辑 + survDictCity.setCreateTime(null); + survDictCity.setUpdateTime(null); + String username = JwtUtil.getUserNameByToken(request); + survDictCity.setUpdateBy(username); + fDictCityService.updateById(survDictCity); + return Result.OK("编辑成功!"); + } + + + @AutoLog(value = "城市列表-批量删除") + @ApiOperationSupport(order = 4) + @ApiOperation(value = "04. 批量删除", notes = "") + @RequiresPermissions("/farmdict/:f_dict_city:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.fDictCityService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + + //@AutoLog(value = "城市列表-通过id查询") + @ApiOperationSupport(order = 5) + @ApiOperation(value = "05. 通过id查询", notes = "") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SurvDictCity survDictCity = fDictCityService.getById(id); + if (survDictCity == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(survDictCity); + } + + + @ApiOperationSupport(order = 6) + @ApiOperation(value = "06. 导出excel", notes = "") + @RequiresPermissions("/farmdict/:f_dict_city:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SurvDictCity survDictCity) { + return super.exportXls(request, survDictCity, SurvDictCity.class, "城市列表"); + } + + + @ApiOperationSupport(order = 7) + @ApiOperation(value = "07. 导入excel", notes = "") + @RequiresPermissions("/farmdict/:f_dict_city:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SurvDictCity.class); + } + + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictDeviceCateController.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictDeviceCateController.java new file mode 100644 index 0000000..46b3675 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictDeviceCateController.java @@ -0,0 +1,213 @@ +package org.jeecg.modules.appmana.controller; + +import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.entity.SurvDictDeviceCate; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.util.JwtUtil; + +import org.jeecg.common.util.TreeUtil; +import org.jeecg.common.vo.iot.common.VODeviceCategoryTree; +import org.jeecg.modules.appmana.service.SurvDictDeviceCateService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.*; + + +/** + * @Description: 设备种类字典 + * @Author: jeecg-boot + * @Date: 2023-10-26 + * @Version: V1.0 + */ +@Api(tags = "99. 设备种类字典 id") +@RestController +@RequestMapping("/appmana/fDictDeviceCate") +@Slf4j +public class SurvDictDeviceCateController extends JeecgController { + @Autowired + private SurvDictDeviceCateService fDictDeviceCateService; + + + //@AutoLog(value = "设备种类字典-分页列表查询") + @ApiOperation(value = "01. 分页查询", notes = "") + @ApiOperationSupport(order = 1) + @GetMapping(value = "/list") + public Result> queryPageList(SurvDictDeviceCate survDictDeviceCate, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(survDictDeviceCate, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = fDictDeviceCateService.page(page, queryWrapper); + if(!pageList.getRecords().isEmpty()){ + List cates = new ArrayList<>(); + pageList.getRecords().forEach(item->cates.add(item.getParentId())); + Map map = new HashMap<>(); + List cates1 = fDictDeviceCateService.listByIds(cates); + if(!cates1.isEmpty()){ + for (SurvDictDeviceCate cate : cates1) { + map.put(cate.getId(),cate); + } + } + for (SurvDictDeviceCate record : pageList.getRecords()) { + SurvDictDeviceCate cate = map.get(record.getId()); + record.setParentName(cate!=null?cate.getCateName():"其他"); + } + } + return Result.OK(pageList); + } + + + @ApiOperation(value = "01. 获取树", notes = "") + @ApiOperationSupport(order = 1) + @GetMapping(value = "/tree1") + public Result> queryPageList() { + List list = fDictDeviceCateService.list(); + return Result.OK(getTree(list, "0")); + } + + @AutoLog(value = "设备种类字典-添加") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "02. 添加", notes = "") + @RequiresPermissions("farm:f_dict_device_cate:add") + @PostMapping(value = "/add") + public Result add(@RequestBody SurvDictDeviceCate survDictDeviceCate, HttpServletRequest request) { + String username = JwtUtil.getUserNameByToken(request); + survDictDeviceCate.setCreateBy(username); + survDictDeviceCate.setCreateTime(new Date()); + fDictDeviceCateService.save(survDictDeviceCate); + return Result.OK("添加成功!"); + } + + @AutoLog(value = "设备种类字典-编辑") + @ApiOperationSupport(order = 3) + @ApiOperation(value = "03. 编辑", notes = "") + @RequiresPermissions("farm:f_dict_device_cate:edit") + @PostMapping(value = "/edit") + public Result edit(@RequestBody SurvDictDeviceCate survDictDeviceCate, HttpServletRequest request) { + //创建、更新时间不能编辑 + survDictDeviceCate.setCreateTime(null); + survDictDeviceCate.setUpdateTime(null); + String username = JwtUtil.getUserNameByToken(request); + survDictDeviceCate.setUpdateBy(username); + Assert.isTrue(!survDictDeviceCate.getParentId().equals(survDictDeviceCate.getId()), "不能选择本身为上级"); + fDictDeviceCateService.updateById(survDictDeviceCate); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "设备种类字典-通过id删除") + @ApiOperation(value = "04.通过id删除", notes = "") + @RequiresPermissions("farm:f_dict_device_cate:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + fDictDeviceCateService.removeById(id); + return Result.OK("删除成功!"); + } + + + @AutoLog(value = "设备种类字典-批量删除") + @ApiOperationSupport(order = 4) + @ApiOperation(value = "04. 批量删除", notes = "") + @RequiresPermissions("farm:f_dict_device_cate:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.fDictDeviceCateService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + + //@AutoLog(value = "设备种类字典-通过id查询") + @ApiOperationSupport(order = 5) + @ApiOperation(value = "05. 通过id查询", notes = "") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SurvDictDeviceCate survDictDeviceCate = fDictDeviceCateService.getById(id); + if (survDictDeviceCate == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(survDictDeviceCate); + } + + +// @ApiOperationSupport(order = 6) +// @ApiOperation(value="06. 导出excel", notes="") +// @RequiresPermissions("farm:f_dict_device_cate:exportXls") +// @GetMapping(value = "/exportXls") +// public ModelAndView exportXls(HttpServletRequest request, FDictDeviceCate fDictDeviceCate) { +// return super.exportXls(request, fDictDeviceCate, FDictDeviceCate.class, "设备种类字典"); +// } +// +// +// @ApiOperationSupport(order = 7) +// @ApiOperation(value="07. 导入excel", notes="") +// @RequiresPermissions("farm:f_dict_device_cate:importExcel") +// @PostMapping(value = "/importExcel") +// public Result importExcel(HttpServletRequest request, HttpServletResponse response) { +// return super.importExcel(request, response, FDictDeviceCate.class); +// } + + + @ApiOperation(value = "06. 列表查询", notes = "") + @ApiOperationSupport(order = 1) + @GetMapping(value = "/catelist") + public Result> queryList(SurvDictDeviceCate survDictDeviceCate, + HttpServletRequest req) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(survDictDeviceCate); + wrapper.last("ORDER BY CONVERT ( CATE_NAME USING gbk ) ASC"); + List list = fDictDeviceCateService.list(wrapper); + return Result.OK(list); + } + + @ApiOperation(value = "07. 树结构查询", notes = "") + @ApiOperationSupport(order = 1) + @GetMapping(value = "/tree") + public Result queryTreeList(SurvDictDeviceCate survDictDeviceCate, + HttpServletRequest req) { + + List list = fDictDeviceCateService.listAll(survDictDeviceCate); + JSONArray array = JSONArray.parseArray(JSON.toJSONString(list, SerializerFeature.WriteDateUseDateFormat)); + JSONArray tree = TreeUtil.getTree(array, "0", "id", "parentId"); + return Result.OK(tree); + } + + + public List getTree(List src, String pid) { + List res = new ArrayList<>(); + for (SurvDictDeviceCate f : src) { + if (f.getParentId().equals(pid)) { + VODeviceCategoryTree vo = new VODeviceCategoryTree(); + BeanUtils.copyProperties(f, vo); + res.add(vo); + List tree = getTree(src, f.getParentId()); + vo.setChildren(tree); + } + } + return res; + } + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictDeviceDetailController.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictDeviceDetailController.java new file mode 100644 index 0000000..97834bc --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/SurvDictDeviceDetailController.java @@ -0,0 +1,187 @@ +package org.jeecg.modules.appmana.controller; + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.entity.SurvDictDeviceCate; +import org.jeecg.common.entity.SurvDictDeviceDetail; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.util.JwtUtil; +import org.jeecg.modules.appmana.service.SurvDictDeviceCateService; +import org.jeecg.modules.appmana.service.SurvDictDeviceDetailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.*; + + +/** + * @Description: 设备明细字典 + * @Author: jeecg-boot + * @Date: 2023-10-26 + * @Version: V1.0 + */ +@Api(tags = "99. 设备明细字典 id") +@RestController +@RequestMapping("/appmana/fDictDeviceDetail") +@Slf4j +public class SurvDictDeviceDetailController extends JeecgController { + @Autowired + private SurvDictDeviceDetailService fDictDeviceDetailService; + @Autowired + private SurvDictDeviceCateService dictDeviceCateService; + + + //@AutoLog(value = "设备明细字典-分页列表查询") + @ApiOperation(value = "01. 分页查询", notes = "") + @ApiOperationSupport(order = 1) + @GetMapping(value = "/list") + public Result> queryPageList(SurvDictDeviceDetail survDictDeviceDetail, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + if (StringUtils.isNotBlank(survDictDeviceDetail.getDeviceName())) { + survDictDeviceDetail.setDeviceName("*" + survDictDeviceDetail.getDeviceName() + "*"); + } + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(survDictDeviceDetail, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = fDictDeviceDetailService.page(page, queryWrapper); + if(!pageList.getRecords().isEmpty()){ + List cates = new ArrayList<>(); + pageList.getRecords().forEach(item->cates.add(item.getCateId())); + Map map = new HashMap<>(); + List cates1 = dictDeviceCateService.listByIds(cates); + if(!cates1.isEmpty()){ + for (SurvDictDeviceCate survDictDeviceCate : cates1) { + map.put(survDictDeviceCate.getId(), survDictDeviceCate); + } + } + for (SurvDictDeviceDetail record : pageList.getRecords()) { + SurvDictDeviceCate cate = map.get(record.getCateId()); + record.setCateName(cate!=null?cate.getCateName():"其他"); + } + } + + return Result.OK(pageList); + } + + + @AutoLog(value = "设备明细字典-添加") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "02. 添加", notes = "") + @RequiresPermissions("farm:f_dict_device_detail:add") + @PostMapping(value = "/add") + public Result add(@RequestBody SurvDictDeviceDetail survDictDeviceDetail, HttpServletRequest request) { + SurvDictDeviceCate cate = dictDeviceCateService.getById(survDictDeviceDetail.getCateId()); + Assert.notNull(cate, "无效的设备类型"); + if (StringUtils.isNotBlank(cate.getParentId())) { + survDictDeviceDetail.setCateBigId(cate.getParentId()); + } + String username = JwtUtil.getUserNameByToken(request); + survDictDeviceDetail.setCreateBy(username); + survDictDeviceDetail.setCreateTime(new Date()); + fDictDeviceDetailService.save(survDictDeviceDetail); + return Result.OK("添加成功!"); + } + + @AutoLog(value = "设备明细字典-编辑") + @ApiOperationSupport(order = 3) + @ApiOperation(value = "03. 编辑", notes = "") + @RequiresPermissions("farm:f_dict_device_detail:edit") + @PostMapping(value = "/edit") + public Result edit(@RequestBody SurvDictDeviceDetail survDictDeviceDetail, HttpServletRequest request) { + SurvDictDeviceCate cate = dictDeviceCateService.getById(survDictDeviceDetail.getCateId()); + Assert.notNull(cate, "无效的设备类型"); + if (StringUtils.isNotBlank(cate.getParentId())) { + survDictDeviceDetail.setCateBigId(cate.getParentId()); + } + //创建、更新时间不能编辑 + survDictDeviceDetail.setCreateTime(null); + survDictDeviceDetail.setUpdateTime(null); + String username = JwtUtil.getUserNameByToken(request); + survDictDeviceDetail.setUpdateBy(username); + fDictDeviceDetailService.updateById(survDictDeviceDetail); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "设备明细字典-通过id删除") + @ApiOperation(value = "04.通过id删除", notes = "") + @RequiresPermissions("farm:f_dict_device_detail:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + fDictDeviceDetailService.removeById(id); + return Result.OK("删除成功!"); + } + + + @AutoLog(value = "设备明细字典-批量删除") + @ApiOperationSupport(order = 4) + @ApiOperation(value = "04. 批量删除", notes = "") + @RequiresPermissions("farm:f_dict_device_detail:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.fDictDeviceDetailService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + + //@AutoLog(value = "设备明细字典-通过id查询") + @ApiOperationSupport(order = 5) + @ApiOperation(value = "05. 通过id查询", notes = "") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SurvDictDeviceDetail survDictDeviceDetail = fDictDeviceDetailService.getById(id); + if (survDictDeviceDetail == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(survDictDeviceDetail); + } + + + @ApiOperationSupport(order = 6) + @ApiOperation(value = "06. 导出excel", notes = "") + @RequiresPermissions("farm:f_dict_device_detail:exportXls") + @GetMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SurvDictDeviceDetail survDictDeviceDetail) { + return super.exportXls(request, survDictDeviceDetail, SurvDictDeviceDetail.class, "设备明细字典"); + } + + + @ApiOperationSupport(order = 7) + @ApiOperation(value = "07. 导入excel", notes = "") + @RequiresPermissions("farm:f_dict_device_detail:importExcel") + @PostMapping(value = "/importExcel") + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SurvDictDeviceDetail.class); + } + + + @ApiOperation(value = "08. 列表查询", notes = "") + @ApiOperationSupport(order = 8) + @GetMapping(value = "/getDeviceData") + public Result> getDeviceData(SurvDictDeviceDetail survDictDeviceDetail, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(survDictDeviceDetail, req.getParameterMap()); + List deviceList = fDictDeviceDetailService.list(queryWrapper); + return Result.OK(deviceList); + } +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvCityCodeMapper.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvCityCodeMapper.java new file mode 100644 index 0000000..7ed1d0c --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvCityCodeMapper.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.appmana.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.common.entity.SurvCityCode; + +/** + * @Description: 城市编码 + * @Author: jeecg-boot + * @Date: 2025-02-06 + * @Version: V1.0 + */ +public interface SurvCityCodeMapper extends BaseMapper { + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvConfigMapper.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvConfigMapper.java index eda40f5..b90a67d 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvConfigMapper.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvConfigMapper.java @@ -1,5 +1,6 @@ package org.jeecg.modules.appmana.mapper; +import org.apache.ibatis.annotations.Param; import org.jeecg.common.entity.SurvConfig; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -12,4 +13,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface SurvConfigMapper extends BaseMapper { String getValueByKey(String key); + + + SurvConfig getOneByTypeWithTenant(@Param("tenantId") String tenantId, @Param("type") String type); } diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictCityMapper.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictCityMapper.java new file mode 100644 index 0000000..19c4ea4 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictCityMapper.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.appmana.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.common.entity.SurvDictCity; + +/** + * @Description: 城市列表 + * @Author: jeecg-boot + * @Date: 2023-09-01 + * @Version: V1.0 + */ +public interface SurvDictCityMapper extends BaseMapper { + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictDeviceCateMapper.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictDeviceCateMapper.java new file mode 100644 index 0000000..1010343 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictDeviceCateMapper.java @@ -0,0 +1,18 @@ +package org.jeecg.modules.appmana.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.common.entity.SurvDictDeviceCate; + +import java.util.List; + +/** + * @Description: 设备种类字典 + * @Author: jeecg-boot + * @Date: 2023-10-26 + * @Version: V1.0 + */ +public interface SurvDictDeviceCateMapper extends BaseMapper { + @InterceptorIgnore(tenantLine = "true") + List listAll(SurvDictDeviceCate survDictDeviceCate); +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictDeviceDetailMapper.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictDeviceDetailMapper.java new file mode 100644 index 0000000..68a7d79 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictDeviceDetailMapper.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.appmana.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.common.entity.SurvDictDeviceDetail; + +/** + * @Description: 设备明细字典 + * @Author: jeecg-boot + * @Date: 2023-10-26 + * @Version: V1.0 + */ +public interface SurvDictDeviceDetailMapper extends BaseMapper { + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictEleMapper.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictEleMapper.java new file mode 100644 index 0000000..56f5911 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/SurvDictEleMapper.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.appmana.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.common.entity.SurvDictEle; + +/** + * @Description: f_iot_dict_ele + * @Author: jeecg-boot + * @Date: 2025-02-26 + * @Version: V1.0 + */ +public interface SurvDictEleMapper extends BaseMapper { + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SUrvDictCityMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SUrvDictCityMapper.xml new file mode 100644 index 0000000..fa500b4 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SUrvDictCityMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvCityCodeMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvCityCodeMapper.xml new file mode 100644 index 0000000..b6b7e86 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvCityCodeMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvConfigMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvConfigMapper.xml index 77defa3..31621d0 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvConfigMapper.xml +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvConfigMapper.xml @@ -5,4 +5,11 @@ + + \ No newline at end of file diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDeviceDeployMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDeviceDeployMapper.xml index a4ea8ca..9343a54 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDeviceDeployMapper.xml +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDeviceDeployMapper.xml @@ -32,6 +32,12 @@ + + + + + + @@ -42,7 +48,7 @@ - ID,DEPLOY_CODE,STATION_CODE,RUN_STATUS,POWER_STATUS,LASTSYNC_TIME,DEVICE_CODE,DEPLOY_DES,DEPLOY_PIC,DEVICE_URL,SORT_NO,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME,DEPLOY_TYPE,DEVICE_LATITUDE,DEVICE_LONGITUDE,GROUP_ID,IZ_BAOJING,IP_ADDR,PORT,SEND_INFO,MAP_ICON,DEVICE_IOT_URL,DEVICE_REVERSE_IOT_URL + ID,DEPLOY_CODE,STATION_CODE,RUN_STATUS,POWER_STATUS,LASTSYNC_TIME,DEVICE_CODE,DEPLOY_DES,DEPLOY_PIC,DEVICE_URL,SORT_NO,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME,DEPLOY_TYPE,DEVICE_LATITUDE,DEVICE_LONGITUDE,GROUP_ID,IZ_BAOJING,IP_ADDR,PORT,SEND_INFO,MAP_ICON,DEVICE_IOT_URL,DEVICE_REVERSE_IOT_URL,DEVICE_LONGLAT,PROTOCOL_CODE,PROTOCOL_TYPE,DEPLOY_CATE,DEPLOY_SECONDARY_TYPE,CATE_ID diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDictDeviceCateMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDictDeviceCateMapper.xml new file mode 100644 index 0000000..23dc900 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDictDeviceCateMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDictDeviceDetailMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDictDeviceDetailMapper.xml new file mode 100644 index 0000000..acff564 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvDictDeviceDetailMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvEleMapper.xml b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvEleMapper.xml new file mode 100644 index 0000000..a9ce9f4 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/mapper/xml/SurvEleMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/o/vo/common/CustomResponseErrorHandler.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/o/vo/common/CustomResponseErrorHandler.java new file mode 100644 index 0000000..1c06259 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/o/vo/common/CustomResponseErrorHandler.java @@ -0,0 +1,22 @@ +package org.jeecg.modules.appmana.o.vo.common; + +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.web.client.ResponseErrorHandler; + +import java.io.IOException; + +public class CustomResponseErrorHandler implements ResponseErrorHandler { + + @Override + public boolean hasError(ClientHttpResponse response) throws IOException { + // 返回false表示不将所有状态码都视为错误 + int statusCode = response.getStatusCode().value(); + //只在500级别的异常时才抛出 + return statusCode >= 500; + } + + @Override + public void handleError(ClientHttpResponse response) { + // 可以在这里处理500错误,但不抛出异常 + } +} \ No newline at end of file diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/o/vo/common/HttpResponseVo.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/o/vo/common/HttpResponseVo.java new file mode 100644 index 0000000..6b1f3c2 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/o/vo/common/HttpResponseVo.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.appmana.o.vo.common; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import org.springframework.http.HttpHeaders; + +@Data +public class HttpResponseVo { + private boolean isOk; + private JSONObject data; + private JSONArray arrData; + private HttpHeaders responseHeaders; +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvConfigService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvConfigService.java index 9e91888..9f902f6 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvConfigService.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvConfigService.java @@ -1,7 +1,9 @@ package org.jeecg.modules.appmana.service; +import org.jeecg.common.constant.IotConstants; import org.jeecg.common.entity.SurvConfig; import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.cache.annotation.Cacheable; /** * @Description: 业务参数配置表 @@ -12,4 +14,8 @@ import com.baomidou.mybatisplus.extension.service.IService; public interface ISurvConfigService extends IService { String getValueByKey(String key); + + + + SurvConfig getOneByTypeWithTenant(String tenantId, String type); } diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvDeviceDeployService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvDeviceDeployService.java index a213adf..78b0e14 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvDeviceDeployService.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/ISurvDeviceDeployService.java @@ -24,4 +24,10 @@ public interface ISurvDeviceDeployService extends IService { SurvDeviceDeploy getOneByCode(String deployCode); List getDeviceListByStation(String stationCode, List deployType); + + boolean initDevice(List ids); + + void saveDeploy(SurvDeviceDeploy survDeviceDeploy); + + void updateDeploy(SurvDeviceDeploy survDeviceDeploy); } diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvCityCodeService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvCityCodeService.java new file mode 100644 index 0000000..272ea47 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvCityCodeService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.appmana.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.common.entity.SurvCityCode; + +/** + * @Description: 城市编码 + * @Author: jeecg-boot + * @Date: 2025-02-06 + * @Version: V1.0 + */ +public interface SurvCityCodeService extends IService { + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictCityService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictCityService.java new file mode 100644 index 0000000..9c6d871 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictCityService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.appmana.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.common.entity.SurvDictCity; + +/** + * @Description: 城市列表 + * @Author: jeecg-boot + * @Date: 2023-09-01 + * @Version: V1.0 + */ +public interface SurvDictCityService extends IService { + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictDeviceCateService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictDeviceCateService.java new file mode 100644 index 0000000..468dda7 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictDeviceCateService.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.appmana.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.common.entity.SurvDictDeviceCate; + +import java.util.List; + +/** + * @Description: 设备种类字典 + * @Author: jeecg-boot + * @Date: 2023-10-26 + * @Version: V1.0 + */ +public interface SurvDictDeviceCateService extends IService { + + List listAll(SurvDictDeviceCate survDictDeviceCate); +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictDeviceDetailService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictDeviceDetailService.java new file mode 100644 index 0000000..ce49f36 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictDeviceDetailService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.appmana.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.common.entity.SurvDictDeviceDetail; + +/** + * @Description: 设备明细字典 + * @Author: jeecg-boot + * @Date: 2023-10-26 + * @Version: V1.0 + */ +public interface SurvDictDeviceDetailService extends IService { + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictEleService.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictEleService.java new file mode 100644 index 0000000..63cbeca --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/SurvDictEleService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.appmana.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.common.entity.SurvDictEle; + +/** + * @Description: f_iot_dict_ele + * @Author: jeecg-boot + * @Date: 2025-02-26 + * @Version: V1.0 + */ +public interface SurvDictEleService extends IService { + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/ScEquZhibiaoServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/ScEquZhibiaoServiceImpl.java index 21a9c7a..f93f061 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/ScEquZhibiaoServiceImpl.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/ScEquZhibiaoServiceImpl.java @@ -1,6 +1,7 @@ package org.jeecg.modules.appmana.service.impl; import org.jeecg.common.entity.ScEquZhibiao; +import org.jeecg.common.entity.SurvDeviceDeploy; import org.jeecg.modules.appmana.mapper.ScEquZhibiaoMapper; import org.jeecg.modules.appmana.service.IScEquZhibiaoService; import org.springframework.stereotype.Service; @@ -27,4 +28,10 @@ public class ScEquZhibiaoServiceImpl extends ServiceImpl implements SurvCityCodeService { + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvConfigServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvConfigServiceImpl.java index c21b78d..7ef3d0a 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvConfigServiceImpl.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvConfigServiceImpl.java @@ -1,8 +1,11 @@ package org.jeecg.modules.appmana.service.impl; +import org.apache.commons.lang3.StringUtils; +import org.jeecg.common.constant.IotConstants; import org.jeecg.common.entity.SurvConfig; import org.jeecg.modules.appmana.mapper.SurvConfigMapper; import org.jeecg.modules.appmana.service.ISurvConfigService; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -20,4 +23,13 @@ public class SurvConfigServiceImpl extends ServiceImpl implements ISurvDeviceDeployService { + @Autowired + private ScEquZhibiaoServiceImpl fScEquZhibiaoService; + @Autowired + private XphUtils xphUtils; + @Autowired + private SurvDictEleServiceImpl eleService; + @Autowired + private IScContService scContService; + @Autowired + private SurvDictDeviceCateServiceImpl dictDeviceCateService; + @Autowired + private SurvDictDictDeviceDetailServiceImpl detailService; + + @Autowired + private IScContExeService scContExeService; + @Override public IPage pages(IPage page, SurvDeviceDeploy survDeviceDeploy) { return baseMapper.pages(page,survDeviceDeploy); @@ -39,4 +77,317 @@ public class SurvDeviceDeployServiceImpl extends ServiceImpl getDeviceListByStation(String stationCode, List deployType) { return baseMapper.getDeviceListByStations(stationCode,deployType); } + + @Override + public boolean initDevice(List ids) { + boolean b =false; + if(ids!=null && !ids.isEmpty()){ + List deploys = listByIds(ids); + if(!deploys.isEmpty()){ + for (SurvDeviceDeploy deploy : deploys) { + //删除旧的指标 + fScEquZhibiaoService.clearDevice(deploy); + //重新初始化 + b= initDeploy(deploy); + } + } + } + return b; + } + + @Override + public void saveDeploy(SurvDeviceDeploy survDeviceDeploy) { + SurvDictDeviceCate dictDeviceCate = dictDeviceCateService.getById(survDeviceDeploy.getCateId()); + Assert.notNull(dictDeviceCate, "无效的设备类型"); + Assert.notEmpty(dictDeviceCate.getParentId(), "只能选择子项类型"); + SurvDictDeviceDetail dictDeviceDetail = detailService.getById(survDeviceDeploy.getDeviceCode()); + Assert.notNull(dictDeviceDetail, "无效的设备厂家"); + //处理设备链接保存 + if(StringUtils.isNotBlank(survDeviceDeploy.getXyId())&&survDeviceDeploy.getProtocolDetail()!=null){ + + ScCont contEnt = new ScCont(); + contEnt.setEquId(survDeviceDeploy.getDeployCode()); + contEnt.setXyId(survDeviceDeploy.getXyId()); + contEnt.setCreateId(survDeviceDeploy.getCreatedBy()); + contEnt.setCreateTime(new Date()); + scContService.save(contEnt); + + + List saveList = new ArrayList<>(); + for (String key : survDeviceDeploy.getProtocolDetail().keySet()) { + ScContExe contExe = new ScContExe(); + contExe.setCreateId(survDeviceDeploy.getCreatedBy()); + contExe.setCreateTime(contEnt.getCreateTime()); + contExe.setCode(key); + contExe.setValue(survDeviceDeploy.getProtocolDetail().getString(key)); + contExe.setContId(contEnt.getId()); + saveList.add(contExe); + } + if(saveList.size()>0) { + scContExeService.saveBatch(saveList); + } + } + + survDeviceDeploy.setCreateTime(new Date()); + + if (StringUtils.isNotBlank(survDeviceDeploy.getDeviceLonglat())) { + String[] ss = survDeviceDeploy.getDeviceLonglat().split(","); + survDeviceDeploy.setDeviceLongitude(ss[0]); + survDeviceDeploy.setDeviceLatitude(ss[1]); + } + + if(StringUtils.isBlank(survDeviceDeploy.getDeployPic())){ + survDeviceDeploy.setDeployPic(dictDeviceDetail.getDefaultDeployPic()); + } + if(StringUtils.isBlank(survDeviceDeploy.getMapIcon())){ + survDeviceDeploy.setMapIcon(dictDeviceDetail.getDefaultMapIcon()); + } + + survDeviceDeploy.setDeployType(dictDeviceCate.getDeployType()); + survDeviceDeploy.setDeploySecondaryType(dictDeviceCate.getDeploySecondaryType()); + survDeviceDeploy.setDeployCate(dictDeviceCate.getDeployCate()); + survDeviceDeploy.setProtocolCode(dictDeviceDetail.getDeviceProtocol()); + survDeviceDeploy.setProtocolType(dictDeviceDetail.getProtocolType()); + + save(survDeviceDeploy); + + } + + @Override + public void updateDeploy(SurvDeviceDeploy survDeviceDeploy) { + SurvDictDeviceCate dictDeviceCate = dictDeviceCateService.getById(survDeviceDeploy.getCateId()); + Assert.notNull(dictDeviceCate, "无效的设备类型"); + Assert.notEmpty(dictDeviceCate.getParentId(), "只能选择子项类型"); + SurvDictDeviceDetail dictDeviceDetail = detailService.getById(survDeviceDeploy.getDeviceCode()); + Assert.notNull(dictDeviceDetail, "无效的设备厂家"); + //处理设备连接修改 + if(StringUtils.isNotBlank(survDeviceDeploy.getXyId())&&survDeviceDeploy.getProtocolDetail()!=null){ + //step 1:删除现有的协议 + List contList = scContService.list(Wrappers.lambdaQuery().eq(ScCont::getEquId,survDeviceDeploy.getDeployCode())); + if(contList.size()>0){ + scContService.removeById(contList.get(0).getId()); + scContExeService.remove(Wrappers.lambdaQuery().eq(ScContExe::getContId,contList.get(0).getId())); + } + //step 2:重新建立连接 + + + ScCont contEnt = new ScCont(); + contEnt.setEquId(survDeviceDeploy.getDeployCode()); + contEnt.setXyId(survDeviceDeploy.getXyId()); + contEnt.setCreateId(survDeviceDeploy.getCreatedBy()); + contEnt.setCreateTime(new Date()); + scContService.save(contEnt); + + + List saveList = new ArrayList<>(); + for (String key : survDeviceDeploy.getProtocolDetail().keySet()) { + ScContExe contExe = new ScContExe(); + contExe.setCreateId(survDeviceDeploy.getCreatedBy()); + contExe.setCreateTime(contEnt.getCreateTime()); + contExe.setCode(key); + contExe.setValue(survDeviceDeploy.getProtocolDetail().getString(key)); + contExe.setContId(contEnt.getId()); + saveList.add(contExe); + } + if(saveList.size()>0) { + scContExeService.saveBatch(saveList); + } + } + + + survDeviceDeploy.setCreateTime(null); + survDeviceDeploy.setUpdatedTime(null); + + + //假如有水设备操作 +// if(PollutionConstants.WATER_ORIENT.equals(survDeviceDeploy.getDeployType())&&StringUtils.isNotBlank(survDeviceDeploy.getValveStatus1())){ +// String deployCodeNum = survDeviceDeploy.getDeployCode().substring(CommonConstant.XZP_WATER.length());//xzp-water-01获取到01 +// StringBuilder sbuilder = new StringBuilder("AA"); +// sbuilder.append(deployCodeNum).append("080101").append(survDeviceDeploy.getValveStatus1()).append("0055"); +// survDeviceDeploy.setSendInfo(sbuilder.toString()); +// log.warn("操作水设备"+survDeviceDeploy.getDeployCode()+",指令:"+sbuilder.toString()); +// } + + if (StringUtils.isNotBlank(survDeviceDeploy.getDeviceLonglat())) { + String[] ss = survDeviceDeploy.getDeviceLonglat().split(","); + survDeviceDeploy.setDeviceLongitude(ss[0]); + survDeviceDeploy.setDeviceLatitude(ss[1]); + } + + if(StringUtils.isBlank(survDeviceDeploy.getDeployPic())){ + survDeviceDeploy.setDeployPic(dictDeviceDetail.getDefaultDeployPic()); + } + if(StringUtils.isBlank(survDeviceDeploy.getMapIcon())){ + survDeviceDeploy.setMapIcon(dictDeviceDetail.getDefaultMapIcon()); + } + + survDeviceDeploy.setDeployType(dictDeviceCate.getDeployType()); + survDeviceDeploy.setDeploySecondaryType(dictDeviceCate.getDeploySecondaryType()); + survDeviceDeploy.setDeployCate(dictDeviceCate.getDeployCate()); + survDeviceDeploy.setProtocolCode(dictDeviceDetail.getDeviceProtocol()); + survDeviceDeploy.setProtocolType(dictDeviceDetail.getProtocolType()); + + updateById(survDeviceDeploy); + } + + private boolean initDeploy(SurvDeviceDeploy deploy) { + boolean result = false; + if(deploy!=null){ + switch (deploy.getProtocolCode()){ + case IotConstants.xph_v1: + case IotConstants.xph_v2: + result = initXph(deploy); + break; + case IotConstants.renke_standard: + result = initRenke(deploy); + break; + } + } + return result; + } + + /** + * 新普惠初始化逻辑 + * @param deploy + * @return + */ + public boolean initXph(SurvDeviceDeploy deploy){ + if(DeviceDeployEnum.SURV_AIR.getType().equals(deploy.getDeployType()) || DeviceDeployEnum.SURV_SOIL.getType().equals(deploy.getDeployType())){//处理空气 土壤设备 + //拉取最新的设备数据,遍历处理监测项 + XphDeviceQueryDataVo xphDeviceQueryDataVo = xphUtils.getV1DeviceNewestData(deploy); + if(xphDeviceQueryDataVo!=null){ + if(xphDeviceQueryDataVo.getEntity()!=null && !xphDeviceQueryDataVo.getEntity().isEmpty()){ + List saveList = new ArrayList<>(); + int sorts = 1; + for (XphdeviceQueryDetailVo xphdeviceQueryDetailVo : xphDeviceQueryDataVo.getEntity()) { + SurvDictEle fIotDictEle = eleService.getDictByIndex(xphdeviceQueryDetailVo.getPid(),IotManufacturerEnum.XPH.getCode()); + if(fIotDictEle!=null){ + if(deploy.getDeployType()!=null && deploy.getDeployType().equals(fIotDictEle.getEleType())) { + if (fIotDictEle.getColumnName() != null) { + String numberStr = getStringNum(xphdeviceQueryDetailVo.getEName()); + ScEquZhibiao fScEquZhibiao = new ScEquZhibiao(); + String entityName = fIotDictEle.getColumnName(); + if (!xphdeviceQueryDetailVo.getEName().contains(".") && StringUtils.isNotBlank(numberStr)) {//不包含点,如如pm2.5 包含有数字,则去对应 + int numbers = Integer.parseInt(numberStr); + if (numbers > 1 && numbers <= 4) {//不超过4,因为字段只预留了4个 + entityName = entityName + numbers; + } + } + + fScEquZhibiao.setCreateId("自动"); + fScEquZhibiao.setEquId(deploy.getId()); + fScEquZhibiao.setCode(xphdeviceQueryDetailVo.getEKey()); + fScEquZhibiao.setName(xphdeviceQueryDetailVo.getEName()); + fScEquZhibiao.setEntityField(entityName); + fScEquZhibiao.setValLow(null); + fScEquZhibiao.setValHeight(null); + fScEquZhibiao.setNuit(xphdeviceQueryDetailVo.getEUnit()); + fScEquZhibiao.setChemicalName(null); + fScEquZhibiao.setZhibiaoType("1");//1=显示,0隐藏 + fScEquZhibiao.setSortNo(sorts); + fScEquZhibiao.setEleKey(xphdeviceQueryDetailVo.getPid()); + saveList.add(fScEquZhibiao); + sorts++; + } + } + }else{ + log.error("新普惠自动设备配置未能匹配监测项:{}-{}",xphdeviceQueryDetailVo.getPid(),xphdeviceQueryDetailVo.getEName()); + } + + } + log.warn("新普惠自动初始化设备:{}=====>{}条:",deploy.getDeployDes(),saveList.size()); + if(!saveList.isEmpty()){ + boolean b = fScEquZhibiaoService.saveBatch(saveList); + log.warn("保存入库--------{}",b); + return b; + } + } + } + + } + return false; + } + + /** + * 仁科设备初始化 + */ + private boolean initRenke(SurvDeviceDeploy deploy) { + List saveList = new ArrayList<>(); + int sorts = 1; + if(DeviceDeployEnum.SURV_AIR.getType().equals(deploy.getDeployType()) || DeviceDeployEnum.SURV_SOIL.getType().equals(deploy.getDeployType())){ + RenkeDataRealTimePack renkeDataRealTimePack = SdrkUtils.getDeviceData(deploy); + if(renkeDataRealTimePack!=null){ + if(renkeDataRealTimePack.getData()!=null){ + for (RenkeDataRealTimeDetail datum : renkeDataRealTimePack.getData()) { + if(datum.getDataItem()!=null){ + if(!datum.getDataItem().isEmpty()){ + for (DataItem dataItem : datum.getDataItem()) { + if(dataItem.getRegisterItem()!=null && !dataItem.getRegisterItem().isEmpty()){ + for (RegisterItem registerItem : dataItem.getRegisterItem()) { + SurvDictEle fIotDictEle = eleService.getDictByIndex(registerItem.getRegisterName(), IotManufacturerEnum.RenKe.getCode()); + if(fIotDictEle!=null){ + if(deploy.getDeployType()!=null && deploy.getDeployType().equals(fIotDictEle.getEleType())) { + if (fIotDictEle.getColumnName() != null) { + String numberStr = getStringNum(registerItem.getRegisterName()); + ScEquZhibiao fScEquZhibiao = new ScEquZhibiao(); + String entityName = fIotDictEle.getColumnName(); + if (!registerItem.getRegisterName().contains(".") && StringUtils.isNotBlank(numberStr)) {//不包含点,如如pm2.5 包含有数字,则去对应 + int numbers = Integer.parseInt(numberStr); + if (numbers > 1 && numbers <= 4) {//不超过4,因为字段只预留了4个 + entityName = entityName + numbers; + } + } + + fScEquZhibiao.setCreateId("自动"); + fScEquZhibiao.setEquId(deploy.getId()); + fScEquZhibiao.setCode(registerItem.getRegisterName());//因仁科设备没有字典值字段,所以用中文 + fScEquZhibiao.setName(registerItem.getRegisterName()); + fScEquZhibiao.setEntityField(entityName); + fScEquZhibiao.setValLow(null); + fScEquZhibiao.setValHeight(null); + fScEquZhibiao.setNuit(registerItem.getUnit()); + fScEquZhibiao.setChemicalName(null); + fScEquZhibiao.setZhibiaoType("1");//1=显示,0隐藏 + fScEquZhibiao.setSortNo(sorts); + fScEquZhibiao.setEleKey(fIotDictEle.getTransKey()); + saveList.add(fScEquZhibiao); + sorts++; + } + } + }else{ + log.error("仁科自动设备配置未能匹配监测项:{}",registerItem.getRegisterName()); + } + } + } + } + } + } + } + } + } + } + log.warn("仁科自动初始化设备:{}=====>{}条:",deploy.getDeployDes(),saveList.size()); + if(!saveList.isEmpty()){ + boolean b = fScEquZhibiaoService.saveBatch(saveList); + log.warn("仁科保存入库--------{}",b); + return b; + } + return false; + } + + + /** + * 提取数字 + */ + private String getStringNum(String input){ + String pattern = "\\d+(\\.\\d+)?"; + + Pattern p = Pattern.compile(pattern); + Matcher m = p.matcher(input); + String matchStr = ""; + while (m.find()) { + matchStr = m.group(); + } + return matchStr; + } } diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictCityServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictCityServiceImpl.java new file mode 100644 index 0000000..3e5114f --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictCityServiceImpl.java @@ -0,0 +1,18 @@ +package org.jeecg.modules.appmana.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.common.entity.SurvDictCity; +import org.jeecg.modules.appmana.mapper.SurvDictCityMapper; +import org.jeecg.modules.appmana.service.SurvDictCityService; +import org.springframework.stereotype.Service; + +/** + * @Description: 城市列表 + * @Author: jeecg-boot + * @Date: 2023-09-01 + * @Version: V1.0 + */ +@Service +public class SurvDictCityServiceImpl extends ServiceImpl implements SurvDictCityService { + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictDeviceCateServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictDeviceCateServiceImpl.java new file mode 100644 index 0000000..a8bb4d0 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictDeviceCateServiceImpl.java @@ -0,0 +1,44 @@ +package org.jeecg.modules.appmana.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.common.entity.SurvDictDeviceCate; +import org.jeecg.modules.appmana.mapper.SurvDictDeviceCateMapper; +import org.jeecg.modules.appmana.service.SurvDictDeviceCateService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: 设备种类字典 + * @Author: jeecg-boot + * @Date: 2023-10-26 + * @Version: V1.0 + */ +@Service +public class SurvDictDeviceCateServiceImpl extends ServiceImpl implements SurvDictDeviceCateService { + + @Override + public List listAll(SurvDictDeviceCate survDictDeviceCate) { + List list = baseMapper.listAll(survDictDeviceCate); + + if(!list.isEmpty()){ + List cates = new ArrayList<>(); + list.forEach(item->cates.add(item.getParentId())); + Map map = new HashMap<>(); + List cates1 = listByIds(cates); + if(!cates1.isEmpty()){ + for (SurvDictDeviceCate cate : cates1) { + map.put(cate.getId(),cate); + } + } + for (SurvDictDeviceCate record : list) { + SurvDictDeviceCate cate = map.get(record.getId()); + record.setParentName(cate!=null?cate.getCateName():"其他"); + } + } + return list; + } +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictDictDeviceDetailServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictDictDeviceDetailServiceImpl.java new file mode 100644 index 0000000..eb4eb5a --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictDictDeviceDetailServiceImpl.java @@ -0,0 +1,18 @@ +package org.jeecg.modules.appmana.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.common.entity.SurvDictDeviceDetail; +import org.jeecg.modules.appmana.mapper.SurvDictDeviceDetailMapper; +import org.jeecg.modules.appmana.service.SurvDictDeviceDetailService; +import org.springframework.stereotype.Service; + +/** + * @Description: 设备明细字典 + * @Author: jeecg-boot + * @Date: 2023-10-26 + * @Version: V1.0 + */ +@Service +public class SurvDictDictDeviceDetailServiceImpl extends ServiceImpl implements SurvDictDeviceDetailService { + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictEleServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictEleServiceImpl.java new file mode 100644 index 0000000..cda5c7f --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvDictEleServiceImpl.java @@ -0,0 +1,27 @@ +package org.jeecg.modules.appmana.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.common.constant.IotConstants; +import org.jeecg.common.entity.SurvDictEle; +import org.jeecg.modules.appmana.mapper.SurvDictEleMapper; +import org.jeecg.modules.appmana.service.SurvDictEleService; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +/** + * @Description: f_iot_dict_ele + * @Author: jeecg-boot + * @Date: 2025-02-26 + * @Version: V1.0 + */ +@Service +public class SurvDictEleServiceImpl extends ServiceImpl implements SurvDictEleService { + @Cacheable(value = IotConstants.iot_ele_cache, key = "#maCode+':'+#eNum", unless = "#result == null ") + public SurvDictEle getDictByIndex(String eNum, String maCode) { + SurvDictEle survDictEle = lambdaQuery() + .eq(SurvDictEle::getTransKey, eNum) + .eq(SurvDictEle::getMaCode, maCode) + .last("limit 1").one(); + return survDictEle; + } +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/HttpRequestUtils.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/HttpRequestUtils.java new file mode 100644 index 0000000..6e7c35c --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/HttpRequestUtils.java @@ -0,0 +1,482 @@ +package org.jeecg.modules.appmana.utils; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.http.impl.client.HttpClients; +import org.jeecg.modules.appmana.o.vo.common.CustomResponseErrorHandler; +import org.jeecg.modules.appmana.o.vo.common.HttpResponseVo; +import org.springframework.http.*; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.*; + +@Slf4j +public class HttpRequestUtils { + + + public static String fetchPage(String url) throws Exception { + // 创建 URL 对象 + URL targetUrl = new URL(url); + HttpURLConnection connection = (HttpURLConnection) targetUrl.openConnection(); + + // 设置请求方法 + connection.setRequestMethod("GET"); + + // 获取响应代码 + int responseCode = connection.getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_OK) { // 200 + // 读取响应内容 + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuilder response = new StringBuilder(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + // 返回页面内容 + return response.toString(); + } else { + throw new RuntimeException("Failed to fetch page. Response code: " + responseCode); + } + } + + /** + * 常规的post请求,可自由传入Header 和 参数,headerMap 和 requestMap都可为空 + * + * @param url + * @param requestMap + * @param headerMap + * @return + */ + public static HttpResponseVo postRequest(String url, Map requestMap, Map headerMap) { + HttpResponseVo httpResponseVo = new HttpResponseVo(); + try { + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(HttpClients.createDefault()); + RestTemplate restTemplate = new RestTemplate(factory); + restTemplate.setErrorHandler(new CustomResponseErrorHandler()); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.add("Accept", MediaType.APPLICATION_JSON.toString()); + if (headerMap != null) { + for (String s : headerMap.keySet()) { + headers.add(s, headerMap.get(s)); + } + } + + Map param = new HashMap<>(); + if (requestMap != null) { + for (String s : requestMap.keySet()) { + param.put(s, requestMap.get(s)); + } + } + HttpEntity> httpEntity = new HttpEntity<>(param, headers); + ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, JSONObject.class); + HttpStatus statusCode = responseEntity.getStatusCode(); //状态码 + HttpHeaders headers1 = responseEntity.getHeaders();//获取到头信息 + if (statusCode == HttpStatus.OK) { + httpResponseVo.setOk(true); + httpResponseVo.setData(responseEntity.getBody()); + httpResponseVo.setResponseHeaders(headers1); + return httpResponseVo; + } + } catch (Exception e) { + e.printStackTrace(); + } + httpResponseVo.setOk(false); + return httpResponseVo; + } + + + /** + * 常规的post请求,可自由传入Header 和 参数,headerMap 和 requestMap都可为空 + * + * @param url + * @param requestMap + * @param headerMap + * @return + */ + public static HttpResponseVo postArrRequest(String url, Map requestMap, Map headerMap) { + HttpResponseVo httpResponseVo = new HttpResponseVo(); + try { + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(HttpClients.createDefault()); + RestTemplate restTemplate = new RestTemplate(factory); + restTemplate.setErrorHandler(new CustomResponseErrorHandler()); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.add("Accept", MediaType.APPLICATION_JSON.toString()); + if (headerMap != null) { + for (String s : headerMap.keySet()) { + headers.add(s, headerMap.get(s)); + } + } + + Map param = new HashMap<>(); + if (requestMap != null) { + for (String s : requestMap.keySet()) { + param.put(s, requestMap.get(s)); + } + } + HttpEntity> httpEntity = new HttpEntity<>(param, headers); + ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, JSONArray.class); + HttpStatus statusCode = responseEntity.getStatusCode(); //状态码 + HttpHeaders headers1 = responseEntity.getHeaders();//获取到头信息 + if (statusCode == HttpStatus.OK) { + httpResponseVo.setOk(true); + httpResponseVo.setArrData(responseEntity.getBody()); + httpResponseVo.setResponseHeaders(headers1); + return httpResponseVo; + } + } catch (Exception e) { + e.printStackTrace(); + } + httpResponseVo.setOk(false); + return httpResponseVo; + } + + /** + * 返回结果为body的String格式,未使用封装 + * + * @param url + * @param requestMap + * @param headerMap + * @return + */ + public static String postStringRequest(String url, Map requestMap, Map headerMap) { + try { + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(HttpClients.createDefault()); + RestTemplate restTemplate = new RestTemplate(factory); + restTemplate.setErrorHandler(new CustomResponseErrorHandler()); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.add("Accept", MediaType.APPLICATION_JSON.toString()); + if (headerMap != null) { + for (String s : headerMap.keySet()) { + headers.add(s, headerMap.get(s)); + } + } + + Map param = new HashMap<>(); + if (requestMap != null) { + for (String s : requestMap.keySet()) { + param.put(s, requestMap.get(s)); + } + } + HttpEntity> httpEntity = new HttpEntity<>(param, headers); + ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); + HttpStatus statusCode = responseEntity.getStatusCode(); //状态码 + HttpHeaders headers1 = responseEntity.getHeaders();//获取到头信息 + if (statusCode == HttpStatus.OK) { + return responseEntity.getBody(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + + /** + * 返回结果为body的泛型,未使用封装 + * + * @param url + * @param requestMap + * @param headerMap + * @return + */ + public static List postListRequest(String url, Map requestMap, Map headerMap) { + try { + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(HttpClients.createDefault()); + RestTemplate restTemplate = new RestTemplate(factory); + restTemplate.setErrorHandler(new CustomResponseErrorHandler()); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.add("Accept", MediaType.APPLICATION_JSON.toString()); + if (headerMap != null) { + for (String s : headerMap.keySet()) { + headers.add(s, headerMap.get(s)); + } + } + + Map param = new HashMap<>(); + if (requestMap != null) { + for (String s : requestMap.keySet()) { + param.put(s, requestMap.get(s)); + } + } + HttpEntity> httpEntity = new HttpEntity<>(param, headers); + ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, List.class); + HttpStatus statusCode = responseEntity.getStatusCode(); //状态码 + HttpHeaders headers1 = responseEntity.getHeaders();//获取到头信息 + if (statusCode == HttpStatus.OK) { + return responseEntity.getBody(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return new ArrayList<>(); + } + + /** + * get风格的Post请求,参数拼接在url后面,如www.baidu.com?a=b&c=d + * + * @param url + * @param requestMap + * @return + */ + public static HttpResponseVo postWithGetStyleRequest(String url, JSONObject requestMap) { + HttpResponseVo httpResponseVo = new HttpResponseVo(); + try { + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(HttpClients.createDefault()); + RestTemplate restTemplate = new RestTemplate(factory); + restTemplate.setErrorHandler(new CustomResponseErrorHandler()); + + HttpHeaders headers = new HttpHeaders(); +// MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); +// headers.setContentType(MediaType.MULTIPART_FORM_DATA); + headers.add("Accept", MediaType.APPLICATION_JSON.toString()); + + HttpEntity httpEntity = new HttpEntity(requestMap, headers); + url = url + "?"; + for (Map.Entry entry : requestMap.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + url = url + key + "=" + value + "&"; + } + ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, JSONObject.class); + HttpStatus statusCode = responseEntity.getStatusCode(); //状态码 + HttpHeaders headers1 = responseEntity.getHeaders();//获取到头信息 + if (statusCode == HttpStatus.OK) { + httpResponseVo.setOk(true); + httpResponseVo.setData(responseEntity.getBody()); + httpResponseVo.setResponseHeaders(headers1); + return httpResponseVo; + } + } catch (Exception e) { + e.printStackTrace(); + } + httpResponseVo.setOk(false); + return httpResponseVo; + } + + /** + * 自定义的post请求,可接收MultiValueMap 类型 + * + * @param url + * @param requestMap + * @return + */ + public static HttpResponseVo CustomPostRequest(String url, MultiValueMap requestMap) { + HttpResponseVo httpResponseVo = new HttpResponseVo(); + try { + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(HttpClients.createDefault()); + RestTemplate restTemplate = new RestTemplate(factory); + restTemplate.setErrorHandler(new CustomResponseErrorHandler()); + + HttpHeaders headers = new HttpHeaders(); + MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded"); + headers.setContentType(type); + headers.add("Accept", MediaType.APPLICATION_JSON.toString()); + HttpEntity> httpEntity = new HttpEntity>(requestMap, headers); + ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, JSONObject.class); + HttpStatus statusCode = responseEntity.getStatusCode(); //状态码 + HttpHeaders headers1 = responseEntity.getHeaders();//获取到头信息 + if (statusCode == HttpStatus.OK) { + httpResponseVo.setOk(true); + httpResponseVo.setData(responseEntity.getBody()); + httpResponseVo.setResponseHeaders(headers1); + return httpResponseVo; + } + } catch (Exception e) { + e.printStackTrace(); + } + httpResponseVo.setOk(false); + return httpResponseVo; + } + + /** + * 普通的Get请求,参数传入Map + * + * @param url + * @param paramMap + * @return + */ + public static HttpResponseVo getRequest(String url, Map paramMap) { + HttpResponseVo httpResponseVo = new HttpResponseVo(); + try { + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(HttpClients.createDefault()); + RestTemplate restTemplate = new RestTemplate(factory); + + restTemplate.setErrorHandler(new CustomResponseErrorHandler()); + ResponseEntity responseEntity = restTemplate.getForEntity(url, JSONObject.class, paramMap); + HttpStatus statusCode = responseEntity.getStatusCode(); //状态码 + HttpHeaders headers1 = responseEntity.getHeaders();//获取到头信息 + if (statusCode == HttpStatus.OK) { + httpResponseVo.setOk(true); + httpResponseVo.setData(responseEntity.getBody()); + httpResponseVo.setResponseHeaders(headers1); + return httpResponseVo; + } + } catch (Exception e) { + e.printStackTrace(); + } + httpResponseVo.setOk(false); + return httpResponseVo; + } + + /** + * 特殊的Gzip的Get请求,应对某些接口需要的Gzip情况,否则会报错 + * 参数需要直接拼接好放入url中, 否则会出现接口不识别参数的情况 + * + * @param url + * @return + */ + public static HttpResponseVo getGzipRequest(String url, Map headerMap) { + HttpResponseVo httpResponseVo = new HttpResponseVo(); + try { + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(HttpClients.createDefault()); + RestTemplate restTemplate = new RestTemplate(factory); + restTemplate.setErrorHandler(new CustomResponseErrorHandler()); + + if (headerMap != null) { + restTemplate.setInterceptors(Collections.singletonList((request, body, execution) -> { + HttpHeaders headers = request.getHeaders(); + for (String s : headerMap.keySet()) { + headers.set(s, headerMap.get(s)); + } + return execution.execute(request, body); + })); + } + ResponseEntity responseEntity = restTemplate.getForEntity(url, JSONObject.class); + HttpStatus statusCode = responseEntity.getStatusCode(); //状态码 + HttpHeaders headers1 = responseEntity.getHeaders();//获取到头信息 + if (statusCode == HttpStatus.OK) { + httpResponseVo.setOk(true); + httpResponseVo.setData(responseEntity.getBody()); + httpResponseVo.setResponseHeaders(headers1); + return httpResponseVo; + } + } catch (Exception e) { + e.printStackTrace(); + } + httpResponseVo.setOk(false); + return httpResponseVo; + } + + + /** + * Get 请求,可自由传入Header,headerMap、requestMap 可为空不穿 + * + * @param url + * @param requestMap + * @param headerMap + * @return + */ + public static HttpResponseVo getExchange(String url, Map requestMap, Map headerMap) { + RestTemplate restTemplate = new RestTemplate(); + restTemplate.setErrorHandler(new CustomResponseErrorHandler()); + HttpHeaders headers = new HttpHeaders(); + HttpResponseVo httpResponseVo = new HttpResponseVo(); +// headers.add("Accept", MediaType.APPLICATION_JSON.toString()); + if (headerMap != null) { + for (String s : headerMap.keySet()) { + headers.add(s, headerMap.get(s)); + } + } + if (requestMap == null) { + requestMap = new HashMap<>(); + } + HttpEntity httpEntity = new HttpEntity<>(headers); + ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, JSONObject.class, requestMap); + HttpStatus statusCode = responseEntity.getStatusCode(); //状态码 + HttpHeaders headers1 = responseEntity.getHeaders();//获取到头信息 + if (statusCode == HttpStatus.OK) { + httpResponseVo.setOk(true); + httpResponseVo.setData(responseEntity.getBody()); + httpResponseVo.setResponseHeaders(headers1); + return httpResponseVo; + } else { + httpResponseVo.setOk(false); + return httpResponseVo; + } + } + + + /** + * Get 请求,可自由传入Header,headerMap、requestMap 可为空不穿 + * + * @param url + * @param requestMap + * @param headerMap + * @return + */ + public static HttpResponseVo getArrExchange(String url, Map requestMap, Map headerMap) { + RestTemplate restTemplate = new RestTemplate(); + restTemplate.setErrorHandler(new CustomResponseErrorHandler()); + HttpHeaders headers = new HttpHeaders(); + HttpResponseVo httpResponseVo = new HttpResponseVo(); +// headers.add("Accept", MediaType.APPLICATION_JSON.toString()); + if (headerMap != null) { + for (String s : headerMap.keySet()) { + headers.add(s, headerMap.get(s)); + } + } + if (requestMap == null) { + requestMap = new HashMap<>(); + } + HttpEntity httpEntity = new HttpEntity<>(headers); + ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, JSONArray.class, requestMap); + HttpStatus statusCode = responseEntity.getStatusCode(); //状态码 + HttpHeaders headers1 = responseEntity.getHeaders();//获取到头信息 + if (statusCode == HttpStatus.OK) { + httpResponseVo.setOk(true); + httpResponseVo.setArrData(responseEntity.getBody()); + httpResponseVo.setResponseHeaders(headers1); + return httpResponseVo; + } else { + httpResponseVo.setOk(false); + return httpResponseVo; + } + } + + /** + * Get 请求,可自由传入Header,headerMap、requestMap 可为空不穿 + * + * @param url + * @param requestMap + * @param headerMap + * @return + */ + public static byte[] getExchangeImg(String url, Map requestMap, Map headerMap) { + RestTemplate restTemplate = new RestTemplate(); + restTemplate.setErrorHandler(new CustomResponseErrorHandler()); + HttpHeaders headers = new HttpHeaders(); + HttpResponseVo httpResponseVo = new HttpResponseVo(); +// headers.add("Accept", MediaType.APPLICATION_JSON.toString()); + if (headerMap != null) { + for (String s : headerMap.keySet()) { + headers.add(s, headerMap.get(s)); + } + } + if (requestMap == null) { + requestMap = new HashMap<>(); + } + HttpEntity httpEntity = new HttpEntity<>(headers); + ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, byte[].class, requestMap); + HttpStatus statusCode = responseEntity.getStatusCode(); //状态码 + HttpHeaders headers1 = responseEntity.getHeaders();//获取到头信息 + return responseEntity.getBody(); + } +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/SdrkUtils.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/SdrkUtils.java new file mode 100644 index 0000000..56db022 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/SdrkUtils.java @@ -0,0 +1,175 @@ +package org.jeecg.modules.appmana.utils; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.jeecg.common.constant.IotConstants; +import org.jeecg.common.entity.SurvConfig; +import org.jeecg.common.entity.SurvDeviceDeploy; +import org.jeecg.common.iot.renke.RenkeDataRealTimePack; +import org.jeecg.common.util.CommonToolUtils; +import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.common.vo.iot.common.VOIotAccess; +import org.jeecg.modules.appmana.o.vo.common.HttpResponseVo; +import org.jeecg.modules.appmana.service.IScEquZhibiaoService; +import org.jeecg.modules.appmana.service.ISurvConfigService; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; + +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; + +/** + * 山东仁科工具类 + */ +@Slf4j +public class SdrkUtils { + //redis token目录 + private static String token_key = "tool_token:token:"; + //redis token过期目录 + private static String token_expire = "tool_token:expire:"; + static RedisTemplate redisTemplate = SpringContextUtils.getBean(StringRedisTemplate.class); + static ISurvConfigService configService = SpringContextUtils.getBean(ISurvConfigService.class); + static IScEquZhibiaoService scEquZhibiaoService = SpringContextUtils.getBean(IScEquZhibiaoService.class); + + private static String domain = "http://www.0531yun.com"; + + + + /** + *获取 token + * @param clientId 应用appKey, + * @param appSecret 应用appSecret, + * @return + */ + public static String getToken(String clientId, String appSecret){ + String getTokenPath = domain+"/api/getToken?loginName={loginName}&password={password}"; + //检查缓存中是否有token + String token = getAppToken(IotConstants.APPLICATION_RenKe,clientId); + if(StringUtils.isNotBlank(token)){ + return token; + } + //缓存中没有token的逻辑 + log.error("{}:缓存失效重新获取仁科Token",clientId); + Map headerMap = new HashMap<>(); + Map requestMap = new HashMap<>(); + requestMap.put("loginName",clientId); + requestMap.put("password",appSecret); + HttpResponseVo httpClient = HttpRequestUtils.getExchange(getTokenPath,requestMap,headerMap); + if(httpClient.isOk()){ + JSONObject resposeJson = httpClient.getData(); + JSONObject results = resposeJson.getJSONObject("data"); + if(results!=null){ + String renkeToken = results.getString("token"); + if(StringUtils.isNotBlank(renkeToken)){//正常获取到token,返回并刷新缓存 + String newToken = renkeToken; + Long expTime = results.getLong("expiration"); + DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String newExpireTime =sdf.format(LocalDateTime.now().plusSeconds(expTime)); + setAppToken(IotConstants.APPLICATION_RenKe,clientId,newToken,newExpireTime); + return renkeToken; + }else{ + throw new RuntimeException("仁科token获取失败:"+resposeJson.get("msg")); + } + }else{ + throw new RuntimeException("仁科token-fatal1"); + } + }else{ + throw new RuntimeException("仁科token-fatal2"); + } + } + + /** + * + * @param type token的类型,比如想要保存百度的token,即为baidu + * @param appkey 应用appKey, + * @return + */ + public static String getAppToken(String type, String appkey){ + String appType = ":"+type+":"; + String curRedisKey = token_key + appkey + appType ; + String curRedisExpireKey =token_expire + appkey +appType; + //检查缓存中是否有token + if (Boolean.TRUE.equals(redisTemplate.hasKey(curRedisKey))) { + String token = CommonToolUtils.getString(redisTemplate.opsForValue().get(curRedisKey),""); + String expires = CommonToolUtils.getString(redisTemplate.opsForValue().get(curRedisExpireKey),""); + if(StringUtils.isNotBlank(token)&&StringUtils.isNotBlank(expires)){ + LocalDateTime nowTime = LocalDateTime.now(); + LocalDateTime expireTime = LocalDateTime.parse(expires, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + Long curStamp = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();//国内时区的时间戳 + boolean b = nowTime.compareTo(expireTime)<0; + if(b){//未过期 + log.warn("{}:找到仁科有效的缓存,直接返回Token",type); + return token; + } + } + } + return null; + } + + /** + * + * @param type token的类型,比如想要保存百度的token,即为baidu + * @param appkey 应用appKey, + * @param token 应用Token + * @param expireTime token过期时间,需要毫秒时间戳 + * @return + */ + public static boolean setAppToken(String type, String appkey, String token, String expireTime){ + if(StringUtils.isBlank(type) || StringUtils.isBlank(appkey) || StringUtils.isBlank(token) || StringUtils.isBlank(expireTime)){ + return false; + } + String appType = ":"+type+":"; + String curRedisKey = token_key + appkey + appType; + String curRedisExpireKey =token_expire + appkey + appType; + redisTemplate.opsForValue().set(curRedisKey, token); + redisTemplate.opsForValue().set(curRedisExpireKey, expireTime); + return true; + } + + public static VOIotAccess getAccess(SurvDeviceDeploy deploy){ + VOIotAccess voIotAccess = null; + //优先使用设备配置的密钥 + SurvConfig survConfig = null; +// if(StringUtils.isNotBlank(deploy.getSurvConfigId())){ +// survConfig = configService.getConfigById(deploy.getSurvConfigId()); +// }else{ + survConfig = configService.getOneByTypeWithTenant(deploy.getTenantId(), IotConstants.renke_access); +// } + if(survConfig!=null){ + voIotAccess = new VOIotAccess(); + voIotAccess.setAppSecret(survConfig.getConfigValue()); + voIotAccess.setAppId(survConfig.getConfigKey()); + }else{ + return null; + } + return voIotAccess; + } + + + public static RenkeDataRealTimePack getDeviceData(SurvDeviceDeploy deploy){ + VOIotAccess voIotAccess = getAccess(deploy); + if(voIotAccess==null){ + log.warn("=========设备:{},仁科密钥未配置========",deploy.getId()); + return null; + } + String token = getToken(voIotAccess.getAppId(),voIotAccess.getAppSecret()); + String url = domain + "/api/data/getRealTimeDataByDeviceAddr?deviceAddrs={deviceAddrs}"; + Map headerMap = new HashMap<>(); + headerMap.put("authorization",token); + Map requestMap = new HashMap<>(); + requestMap.put("deviceAddrs",deploy.getDeployCode()); + HttpResponseVo result = HttpRequestUtils.getExchange(url,requestMap,headerMap); + log.warn("===============实时数据返回:{}===========",result); + if(result !=null) { + RenkeDataRealTimePack renkeDataRealTimePack = JSONUtil.toBean(JSONUtil.toJsonStr(result.getData()), RenkeDataRealTimePack.class); + return renkeDataRealTimePack; + } + return null; + } + +} diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/XphUtils.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/XphUtils.java new file mode 100644 index 0000000..9f91625 --- /dev/null +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/utils/XphUtils.java @@ -0,0 +1,301 @@ +package org.jeecg.modules.appmana.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.jeecg.common.constant.IotConstants; +import org.jeecg.common.entity.SurvConfig; +import org.jeecg.common.entity.SurvDeviceDeploy; +import org.jeecg.common.iot.xph.*; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.common.vo.iot.common.VOIotAccess; +import org.jeecg.modules.appmana.o.vo.common.HttpResponseVo; +import org.jeecg.modules.appmana.service.impl.SurvConfigServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +@Component +public class XphUtils { + + //redis token目录 + private String token_key = "tool_token:token:"; + //redis token过期目录 + private String token_expire = "tool_token:expire:"; + @Autowired + private RedisTemplate redisTemplate; + @Autowired + private SurvConfigServiceImpl configService; + + private static Map tokenMap; + private String domain = "https://iot.whxph.com:44300/XPHapiv2"; + private String v1domain = "http://47.105.215.208:8005/"; + /** + * 获取 新普惠token + * + * @param appkey 应用appKey, + * @param appSecret 应用appSecret, + * @return + */ + public String getXphToken(String appkey, String appSecret) { + String url = domain + "/login"; + //检查缓存中是否有token + String token = getAppToken(IotConstants.APPLICATION_XinPH, appkey); + if (StringUtils.isNotBlank(token)) { + return token; + } + //缓存中没有token的逻辑 + log.error("{}:缓存失效重新获取Token", appkey); + Map job = new HashMap<>(); + job.put("username", appkey); + job.put("password", appSecret); + JSONObject resposeJson = HttpRequestUtils.postRequest(url, job, null).getData(); + String xphToken = resposeJson.getString("token"); + if (StringUtils.isNotBlank(xphToken)) {//正常获取到token,返回并刷新缓存 + String newToken = resposeJson.getString("token"); + Long expTime = resposeJson.getLong("expiration"); + DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String newExpireTime = sdf.format(LocalDateTime.now().plusSeconds(expTime)); + setAppToken(IotConstants.APPLICATION_XinPH, appkey, newToken, newExpireTime); + return xphToken; + } else { + throw new RuntimeException("token获取失败:" + resposeJson.getString("msg")); + } + + } + + /** + * @param type token的类型,比如想要保存百度的token,即为baidu + * @param appkey 应用appKey, + * @param token 应用Token + * @param expireTime token过期时间,需要毫秒时间戳 + * @return + */ + public boolean setAppToken(String type, String appkey, String token, String expireTime) { + if (StringUtils.isBlank(type) || StringUtils.isBlank(appkey) || StringUtils.isBlank(token) || StringUtils.isBlank(expireTime)) { + return false; + } + String appType = type + ":"; + String curRedisKey = token_key + appkey + appType; + String curRedisExpireKey = token_expire + appkey + appType; + redisTemplate.opsForValue().set(curRedisKey, token); + redisTemplate.opsForValue().set(curRedisExpireKey, expireTime); + return true; + } + + /** + * @param type token的类型,比如想要保存百度的token,即为baidu + * @param appkey 应用appKey, + * @return + */ + public String getAppToken(String type, String appkey) { + String appType = type + ":"; + String curRedisKey = token_key + appkey + appType; + String curRedisExpireKey = token_expire + appkey + appType; + //检查缓存中是否有token + if (Boolean.TRUE.equals(redisTemplate.hasKey(curRedisKey))) { + String token = oConvertUtils.getString(redisTemplate.opsForValue().get(curRedisKey), ""); + String expires = oConvertUtils.getString(redisTemplate.opsForValue().get(curRedisExpireKey), ""); + if (StringUtils.isNotBlank(token) && StringUtils.isNotBlank(expires)) { + LocalDateTime nowTime = LocalDateTime.now(); + LocalDateTime expireTime = LocalDateTime.parse(expires, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + Long curStamp = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();//国内时区的时间戳 + boolean b = nowTime.compareTo(expireTime) < 0; + if (b) {//未过期 + log.warn("{}:找到有效的缓存,直接返回Token", type); + return token; + } + } + } + return null; + } + + public VOIotAccess getAccess(SurvDeviceDeploy deploy) { + if (tokenMap == null) { + tokenMap = new HashMap<>(); + } + VOIotAccess voIotAccess = tokenMap.get(deploy.getTenantId()); + if (voIotAccess == null) { + SurvConfig survConfig = configService.getOneByTypeWithTenant(deploy.getTenantId(), IotConstants.xph_access); + if (survConfig != null) { + voIotAccess = new VOIotAccess(); + voIotAccess.setAppSecret(survConfig.getConfigValue()); + voIotAccess.setAppId(survConfig.getConfigKey()); + tokenMap.put(deploy.getTenantId(), voIotAccess); + } + } + if (tokenMap == null) { + log.error("------------------新普惠设备密钥未正确配置--------------------"); + return null; + } + return voIotAccess; + } + + /** + * 新普惠发送设备指令 + */ + public boolean sendCmd(SurvDeviceDeploy deploy, String relayNum, String relayState) { + try { + VOIotAccess voIotAccess = getAccess(deploy); + String token = getXphToken(voIotAccess.getAppId(), voIotAccess.getAppSecret()); + HashMap headers = new HashMap<>(); + headers.put("token", token); + String deviceApiUrl = domain + "/relay"; + Map paramMap = new HashMap<>(); + paramMap.put("deviceId", deploy.getDeployCode()); + paramMap.put("relayNum", relayNum); + paramMap.put("relayState", relayState); + String result = HttpRequestUtils.postStringRequest(deviceApiUrl, paramMap, headers); + log.warn("新普惠控制回执:{}", JSONObject.toJSONString(result)); + if (StringUtils.isNotBlank(result)) { + + if ("true".equals(result)) { + return true; + } else { + return false; + } + } + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return false; + } + + + /** + * 获取设备信息 + */ + public XphDeviceInfoVo getDeviceInfo(SurvDeviceDeploy deploy) { + try { + VOIotAccess voIotAccess = getAccess(deploy); + String token = getXphToken(voIotAccess.getAppId(), voIotAccess.getAppSecret()); + HashMap headers = new HashMap<>(); + headers.put("token", token); + String deviceApiUrl = domain + "/device/{deviceId}"; + Map paramMap = new HashMap<>(); + paramMap.put("deviceId", deploy.getDeployCode()); + HttpResponseVo httpResponseVo = HttpRequestUtils.getExchange(deviceApiUrl, paramMap, headers); + log.warn("========同步回执=================:" + JSON.toJSONString(httpResponseVo.getData())); + if (httpResponseVo.isOk()) { + XphDeviceInfoVo xphDeviceInfoVo = JSONObject.toJavaObject(httpResponseVo.getData(), XphDeviceInfoVo.class); + return xphDeviceInfoVo; + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return null; + } + + + /** + * 获取设备最新一条数据 + */ + public XphDeviceNewestDataVo getDeviceNewestData(SurvDeviceDeploy deploy) { + try { + VOIotAccess voIotAccess = getAccess(deploy); + String token = getXphToken(voIotAccess.getAppId(), voIotAccess.getAppSecret()); + HashMap headers = new HashMap<>(); + headers.put("token", token); + String deviceApiUrl = domain + "/screen/datas?deviceId={deviceId}"; + Map paramMap = new HashMap<>(); + paramMap.put("deviceId", deploy.getDeployCode()); + HttpResponseVo httpResponseVo = HttpRequestUtils.getExchange(deviceApiUrl, paramMap, headers); + log.warn(deviceApiUrl + "========新普惠设备最新数据回执=================" + JSON.toJSONString(httpResponseVo.getData())); + if (httpResponseVo.isOk()) { + XphDeviceNewestDataVo xphDeviceInfoVo = JSONObject.toJavaObject(httpResponseVo.getData(), XphDeviceNewestDataVo.class); + return xphDeviceInfoVo; + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return null; + } + + + /** + * 获取设备元素列表 + */ + public XphDeviceEleVo getDeviceEleList() { + XphDeviceEleVo xphDeviceEleVo =new XphDeviceEleVo(); + try { + HashMap headers = new HashMap<>(); + String deviceApiUrl = domain + "/element"; + Map paramMap = new HashMap<>(); + HttpResponseVo httpResponseVo = HttpRequestUtils.getArrExchange(deviceApiUrl, paramMap, headers); + log.warn(deviceApiUrl + "========新普惠设备最新数据回执=================" + JSON.toJSONString(httpResponseVo.getArrData())); + if (httpResponseVo.isOk()) { + List eles = new ArrayList<>(); + if(httpResponseVo.getArrData()!=null){ + for (Object arrDatum : httpResponseVo.getArrData()) { + XphDeviceEleDetailVo eleDetailVo = JSONObject.parseObject(JSONObject.toJSONString(arrDatum),XphDeviceEleDetailVo.class); + eles.add(eleDetailVo); + } + } + xphDeviceEleVo.setList(eles); + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return xphDeviceEleVo; + } + + /** + * 获取设备继电器状态 + */ + public List getDeviceRelayStatus(SurvDeviceDeploy deploy) { + try { + VOIotAccess voIotAccess = getAccess(deploy); + String token = getXphToken(voIotAccess.getAppId(), voIotAccess.getAppSecret()); + HashMap headers = new HashMap<>(); + headers.put("token", token); + String deviceApiUrl = domain + "/relatedcontrol/valve"; + Map paramMap = new HashMap<>(); + paramMap.put("deviceId", deploy.getDeployCode()); + List list = HttpRequestUtils.postListRequest(deviceApiUrl, paramMap, headers); + log.warn(deviceApiUrl + "========新普惠设备实时继电器状态回执=================" + JSON.toJSONString(list)); + if (list != null) { + return list; + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return null; + } + + public XphDeviceQueryDataVo getV1DeviceNewestData(SurvDeviceDeploy deploy) { + try { +// VOIotAccess voIotAccess = getAccess(deploy); +// String token = getXphToken(voIotAccess.getAppId(), voIotAccess.getAppSecret()); + HashMap headers = new HashMap<>(); +// headers.put("token", token); + String deviceApiUrl = v1domain + "/intfa/queryData/dz/{deviceId}"; + Map paramMap = new HashMap<>(); + paramMap.put("deviceId", deploy.getDeployCode()); + HttpResponseVo httpResponseVo = HttpRequestUtils.getExchange(deviceApiUrl, paramMap, headers); + log.warn(deviceApiUrl + "========新普惠V1设备最新数据回执=================" + JSON.toJSONString(httpResponseVo.getData())); + if (httpResponseVo.isOk()) { + XphDeviceQueryDataVo xphDeviceQueryDataVo = JSONObject.toJavaObject(httpResponseVo.getData(), XphDeviceQueryDataVo.class); + return xphDeviceQueryDataVo; + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return null; + } +} diff --git a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvDeviceDeployMapper.xml b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvDeviceDeployMapper.xml index b159ccf..3f36277 100644 --- a/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvDeviceDeployMapper.xml +++ b/zh-module-applet/zh-applet-api/src/main/java/org/jeecg/system/applet/mapper/xml/SurvDeviceDeployMapper.xml @@ -31,6 +31,12 @@ + + + + + + @@ -51,7 +57,7 @@ - ID,DEPLOY_CODE,STATION_CODE,RUN_STATUS,POWER_STATUS,LASTSYNC_TIME,DEVICE_CODE,DEPLOY_DES,DEPLOY_PIC,DEVICE_URL,SORT_NO,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME,DEPLOY_TYPE,DEVICE_LATITUDE,DEVICE_LONGITUDE,GROUP_ID,IZ_BAOJING,IP_ADDR,PORT,SEND_INFO,MAP_ICON,DEVICE_IOT_URL,DEVICE_REVERSE_IOT_URL + ID,DEPLOY_CODE,STATION_CODE,RUN_STATUS,POWER_STATUS,LASTSYNC_TIME,DEVICE_CODE,DEPLOY_DES,DEPLOY_PIC,DEVICE_URL,SORT_NO,TENANT_ID,RE_VISION,CREATED_BY,CREATE_TIME,UPDATED_BY,IS_DEL,UPDATED_TIME,DEPLOY_TYPE,DEVICE_LATITUDE,DEVICE_LONGITUDE,GROUP_ID,IZ_BAOJING,IP_ADDR,PORT,SEND_INFO,MAP_ICON,DEVICE_IOT_URL,DEVICE_REVERSE_IOT_URL,DEVICE_LONGLAT,PROTOCOL_CODE,PROTOCOL_TYPE,DEPLOY_CATE,DEPLOY_SECONDARY_TYPE,CATE_ID