Selaa lähdekoodia

新增 性诱测报III设备对接

zhaiyifei 1 vuosi sitten
vanhempi
commit
e711acea88
21 muutettua tiedostoa jossa 2660 lisäystä ja 4 poistoa
  1. 1 1
      src/main/java/com/yunfeiyun/agmp/iotm/device/pest/service/IIotPestrecogService.java
  2. 1 1
      src/main/java/com/yunfeiyun/agmp/iotm/device/pest/service/impl/IotPestrecogServiceImpl.java
  3. 304 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/controller/IotXycbController.java
  4. 72 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbInfoResVo.java
  5. 20 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbLureListReqVo.java
  6. 24 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbLureListRspVo.java
  7. 28 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbModifyLureReqVo.java
  8. 14 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbPolylineResVo.java
  9. 25 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbReqVo.java
  10. 1 1
      src/main/java/com/yunfeiyun/agmp/iotm/device/xy/domain/IotXyinfoDto.java
  11. 1 1
      src/main/java/com/yunfeiyun/agmp/iotm/device/xy/domain/IotXyinfoPestTotalDto.java
  12. 85 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotYfXycbDataListRspVo.java
  13. 45 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/IIotXycbIIIService.java
  14. 47 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/IIotXycbService.java
  15. 53 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/IIotXyinfoService.java
  16. 713 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/impl/IotXycbIIIServiceImpl.java
  17. 855 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/impl/IotXycbServiceImpl.java
  18. 77 0
      src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/impl/IotXyinfoServiceImpl.java
  19. 54 0
      src/main/java/com/yunfeiyun/agmp/iotm/web/mapper/IotXyinfoMapper.java
  20. 135 0
      src/main/resources/mapper/IotSporeMapper.xml
  21. 105 0
      src/main/resources/mapper/IotXyinfoMapper.xml

+ 1 - 1
src/main/java/com/yunfeiyun/agmp/iotm/device/pest/service/IIotPestrecogService.java

@@ -5,7 +5,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.yunfeiyun.agmp.common.core.page.PageDomain;
 import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
 import com.yunfeiyun.agmp.iotm.device.pest.domain.*;
-import com.yunfeiyun.agmp.iotm.device.xy.domain.IotXyinfoPestTotalDto;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXyinfoPestTotalDto;
 
 import java.util.List;
 import java.util.Map;

+ 1 - 1
src/main/java/com/yunfeiyun/agmp/iotm/device/pest/service/impl/IotPestrecogServiceImpl.java

@@ -15,7 +15,7 @@ import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
 import com.yunfeiyun.agmp.iotm.device.pest.domain.*;
 import com.yunfeiyun.agmp.iotm.device.pest.service.IIotPestService;
 import com.yunfeiyun.agmp.iotm.device.pest.service.IIotPestrecogService;
-import com.yunfeiyun.agmp.iotm.device.xy.domain.IotXyinfoPestTotalDto;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXyinfoPestTotalDto;
 import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;

+ 304 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/controller/IotXycbController.java

@@ -0,0 +1,304 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.controller;
+
+import com.yunfeiyun.agmp.common.core.domain.AjaxResult;
+import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
+import com.yunfeiyun.agmp.iot.common.service.MongoService;
+import com.yunfeiyun.agmp.iotm.common.controller.BaseController;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXycbPolylineResVo;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXycbReqVo;
+import com.yunfeiyun.agmp.iotm.device.xycb.service.IIotXycbService;
+import com.yunfeiyun.agmp.iotm.web.domain.reqvo.IotDeviceListReqVo;
+import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotDeviceListResVo;
+import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
+import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceService;
+import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceconfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 性诱测报Controller
+ *
+ * @author 杨晓辉
+ * @date 2024-01-04
+ */
+@Slf4j
+@RestController
+@RequestMapping("/iot/device/xycb")
+public class IotXycbController extends BaseController
+{
+    @Resource
+    private IIotDeviceconfigService iIotDeviceconfigService;
+    @Resource
+    private IIotCmdtaskService iIotCmdtaskService;
+    @Resource
+    private MongoService mongoService;
+
+    @Autowired
+    private IIotDeviceService iIotDeviceService;
+
+//    private DeviceConfigurationTranslator deviceConfigurationTranslator = new XyIIIConfigurationTranslator();
+    @Autowired
+    private IIotXycbService iIotXycbService;
+
+    /**
+     * 性诱测报列表
+     * /list  所有性诱测报设备
+     * /pt/list 普通性诱测报设备
+     * /III/list 性诱测报III设备
+     * @param reqVo
+     * @return
+     */
+    @GetMapping({"/list", "/pt/list", "/III/list"})
+    public TableDataInfo list(HttpServletRequest request, IotDeviceListReqVo reqVo) {
+        startPage();
+        String reqUri = request.getRequestURI();
+        String[] devTypeList = new String[]{
+                IotDeviceDictConst.TYPE_YF_XYCB_III
+        };
+
+        if(reqUri.endsWith("/pt/list")){
+            devTypeList = new String[]{IotDeviceDictConst.TYPE_YF_XYCB_III};
+        } else if (reqUri.endsWith("/III/list")) {
+            devTypeList = new String[]{IotDeviceDictConst.TYPE_YF_XYCB_III};
+        }
+        reqVo.setDevtypeBidList(Arrays.asList(devTypeList));
+        List<IotDeviceListResVo> list = iIotDeviceService.selectIotDeviceListByType(reqVo);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 性诱测报数据列表
+     */
+    @PreAuthorize("@ss.hasPermi('iot:xycb:data:list')")
+    @GetMapping("/data/list")
+    public TableDataInfo list(IotXycbReqVo iotXycbReqVo)
+    {
+        return getDataTable(iIotXycbService.getXycbDataList(iotXycbReqVo));
+    }
+
+
+    /**
+     * 获取性诱测报折线图数据
+     * @param
+     * @return
+     */
+    @GetMapping("/polyline")
+    public AjaxResult polyline(IotXycbReqVo iotXycbReqVo){
+        List<IotXycbPolylineResVo> iotXycbPolylineResVoList = iIotXycbService.getXycbPolyline(iotXycbReqVo);
+        return AjaxResult.success(iotXycbPolylineResVoList);
+    }
+//
+//    /**
+//     * 获取性诱测报信息接口
+//     * @param reqVo
+//     * @return
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:xycb:info')")
+//    @GetMapping("/info")
+//    public AjaxResult getInfo(String devBid){
+//        IotXycbInfoResVo iotXycbInfoResVo = iIotXycbService.getXycbInfo(devBid);
+//        return AjaxResult.success(iotXycbInfoResVo);
+//    }
+//
+//    /**
+//     *
+//     * @param reqVo
+//     * @return
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:xycb:lure')")
+//    @PostMapping("/lure")
+//    public AjaxResult modifyLure(@RequestBody IotXycbModifyLureReqVo iotXycbModifyLureReqVo){
+//        return AjaxResult.success(iIotXycbService.modifyLure(iotXycbModifyLureReqVo));
+//    }
+//
+//    /**
+//     * 查询诱芯列表
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:xycb:lure:list')")
+//    @GetMapping("/lure/list")
+//    public TableDataInfo list(IotXycbLureListReqVo iotXycbLureListReqVo)
+//    {
+//        return getDataTable(iIotXycbService.getLureList(iotXycbLureListReqVo));
+//    }
+//
+//    /**
+//     * 查询图片列表
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:xycb:image:list')")
+//    @GetMapping("/image/list")
+//    public TableDataInfo imageList(IotXycbReqVo iotXycbReqVo)
+//    {
+//        return getDataTable(iIotXycbService.getImageList(iotXycbReqVo));
+//    }
+//
+//    /**
+//     *
+//     * @param reqVo
+//     * @return
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:xycb:image:delete')")
+//    @DeleteMapping("/image/delete/{xycbimgBid}")
+//    public AjaxResult imageDelete(@PathVariable String xycbimgBid){
+//        iIotXycbService.imageDelete(xycbimgBid);
+//        return AjaxResult.success();
+//    }
+//
+//    /**
+//     * 下发测报灯配置指令
+//     *
+//     * @return
+//     * @throws Exception
+//     */
+//    @PostMapping("/config/edit")
+//    public AjaxResult sendConfigCmd(@RequestBody IotXYIIIConfigEditReqVo iotXYIIIConfigEditReqVo) {
+//        log.info("【{}】【性诱III】【下发指令配置】客户id {}", LogCore.getSeq(), getCustomerId());
+//        if (StringUtils.isEmpty(iotXYIIIConfigEditReqVo.getXyDataBid())) {
+//            return AjaxResult.error(IotErrorCode.FAILURE.getCode(), "设备id不可为空");
+//        }
+//        IotDevice iotDevice = iIotDeviceService.findOneByBizId(iotXYIIIConfigEditReqVo.getXyDataBid());
+//        if (iotDevice == null) {
+//            return AjaxResult.error(IotErrorCode.FAILURE.getCode(), "设备不存在");
+//        }
+//        IotDeviceconfig iotDeviceconfig = iIotDeviceconfigService.selectIotDeviceConfigByDevBid(iotXYIIIConfigEditReqVo.getXyDataBid());
+//        if (null == iotDeviceconfig) {
+//            // 如果测报灯配置为空,则新增测报灯配置
+//            iotDeviceconfig = new IotDeviceconfig();
+//            iotDeviceconfig.setDevcfgBid(iotDeviceconfig.getUUId());
+//            iotDeviceconfig.setCId(getCustomerId());
+//            iotDeviceconfig.setDevBid(iotXYIIIConfigEditReqVo.getXyDataBid());
+//            iotDeviceconfig.setDevcfgContext(JSONUtils.toJSONString(iotXYIIIConfigEditReqVo.getIotXyConfig()));
+//            iotDeviceconfig.setDevcfgDelstatus("0");
+//            iIotDeviceconfigService.insertIotDeviceconfig(iotDeviceconfig);
+//        } else {
+//            // 如果测报灯配置不为空,则更新测报灯配置
+//            iotDeviceconfig.setDevcfgContext(JSONUtils.toJSONString(iotXYIIIConfigEditReqVo.getIotXyConfig()));
+//            iIotDeviceconfigService.updateIotDeviceconfig(iotDeviceconfig);
+//        }
+//        CmdGroupModel cmdGroupModel = iIotDeviceconfigService.createConfigCmd(iotDeviceconfig);
+//        log.info("【{}】【性诱III】【构建 cmdGroupModel】{}", LogCore.getSeq(), JSONUtils.toJSONString(cmdGroupModel));
+//        cmdGroupModel.setRequestId(IdUtils.fastUUID());
+//
+//        // 适配增加详细日志使用
+//        //cmdGroupModel.setOrignRequestParam(iotCbdConfigEditReqVo);
+//        cmdGroupModel.setDevCode(iotDevice.getDevCode());
+//        cmdGroupModel.setCtBiztitle(IotDeviceTypeLv1Enum.XYCB.getName() + ":" + iotDevice.getDevCode());
+//        cmdGroupModel.setCtBiztype("3");
+//        cmdGroupModel.setCtDevtype(iotDevice.getDevtypeBid());
+//        cmdGroupModel.setCtParam(deviceConfigurationTranslator.configTranslate(iotXYIIIConfigEditReqVo));
+//
+//
+//        iIotCmdtaskService.handInternalCmd(cmdGroupModel);
+//        return new AjaxResult(ErrorCode.SUCCESS.getCode(), "下发成功,等待设备响应结果", null);
+//    }
+
+
+
+//
+//    /**
+//     * 导出害虫信息列表
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:export')")
+//    @Log(title = "害虫信息", businessType = BusinessType.EXPORT)
+//    @PostMapping("/export")
+//    public void export(HttpServletResponse response, IotPest iotPest)
+//    {
+//        List<IotPest> list = iotPestService.selectIotPestList(iotPest);
+//        ExcelUtil<IotPest> util = new ExcelUtil<IotPest>(IotPest.class);
+//        util.exportExcel(response, list, "害虫信息数据");
+//    }
+//
+//    /**
+//     * 获取害虫信息详细信息
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:query')")
+//    @GetMapping(value = "/info")
+//    public AjaxResult getInfo(@RequestParam("pestBid") String pestBid)
+//    {
+//        return success(iotPestService.selectIotPestByPestBid(pestBid));
+//    }
+//
+//    /**
+//     * 获取害虫信息详细信息
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:plug:query')")
+//    @GetMapping(value = "/plug/info")
+//    public AjaxResult getPlugInfo(@RequestParam("pestBid") String pestBid)
+//    {
+//        Criteria criteria = new Criteria();
+//        criteria.and("pestBusid").is(pestBid);
+//        Query query = new Query(criteria);
+//        query.with(Sort.by(Sort.Direction.DESC, "pestrecogCreatedDate"));
+//        IotPestrecog iotPestrecog = mongoTemplate.findOne(query, IotPestrecog.class, "IotPestrecog");
+//        IotPest iotPest = iotPestService.selectIotPestByPestBid(pestBid);
+//        if (iotPestrecog != null) {
+//            Criteria criteria2 = new Criteria();
+//            criteria2.and("pestrecogBid").is(iotPestrecog.getPestrecogBid());
+//            IotCbdpest iotCbdpest = mongoTemplate.findOne(new Query(criteria2), IotCbdpest.class, "IotCbdpest");
+//            if (iotCbdpest != null) {
+//                Criteria criteria3 = new Criteria();
+//                criteria3.and("cbdrecogBid").is(iotCbdpest.getCbdrecogBid());
+//                IotCbdrecog iotCbdrecog = mongoTemplate.findOne(new Query(criteria3), IotCbdrecog.class, "IotCbdrecog");
+//                if (iotCbdrecog != null) {
+//                    Criteria criteria4 = new Criteria();
+//                    criteria4.and("cbdimgBid").is(iotCbdrecog.getCbdimgBid());
+//                    IotCbdimg iotCbdimg = mongoTemplate.findOne(new Query(criteria4), IotCbdimg.class, "IotCbdimg");
+//                    iotPest.setPestImgUrl(iotCbdimg.getCbdimgAddr());
+//                }
+//            }
+//        }
+//
+//        try {
+//            JSONArray preventiveMeasuresInfo = iotAidispestService.getPreventiveMeasuresInfo(iotPest.getPestName());
+//            if (preventiveMeasuresInfo.size() > 0) {
+//                iotPest.setPestInfo(preventiveMeasuresInfo.getJSONObject(0).toJSONString());
+//            }
+//        } catch (Exception e) {
+//            logger.error("获得防治措施异常", e);
+//        }
+//        return success(iotPest);
+//    }
+//
+//    /**
+//     * 新增害虫信息
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:add')")
+//    @Log(title = "害虫信息", businessType = BusinessType.INSERT)
+//    @PostMapping("/add")
+//    public AjaxResult add(@RequestBody IotPest iotPest)
+//    {
+//        return toAjax(iotPestService.insertIotPest(iotPest));
+//    }
+//
+//    /**
+//     * 修改害虫信息
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:edit')")
+//    @Log(title = "害虫信息", businessType = BusinessType.UPDATE)
+//    @PutMapping("/edit")
+//    public AjaxResult edit(@RequestBody IotPest iotPest)
+//    {
+//        return toAjax(iotPestService.updateIotPest(iotPest));
+//    }
+//
+//    /**
+//     * 删除害虫信息
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:remove')")
+//    @Log(title = "害虫信息", businessType = BusinessType.DELETE)
+//	@DeleteMapping("/delete")
+//    public AjaxResult remove(@RequestParam("ids") Long[] ids)
+//    {
+//        return toAjax(iotPestService.deleteIotPestByIds(ids));
+//    }
+}

+ 72 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbInfoResVo.java

@@ -0,0 +1,72 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.domain;
+
+import com.yunfeiyun.agmp.common.annotation.Excel;
+import lombok.Data;
+
+import java.util.Objects;
+
+@Data
+public class IotXycbInfoResVo {
+    /**
+     * 今日天气
+     */
+    private String wea;
+
+    /**
+     * 温度
+     */
+    private String ah;
+
+    /**
+     * 湿度
+     */
+    private String at;
+
+    /**
+     * 风向
+     */
+    private String win;
+
+    /**
+     * 风力等级
+     */
+    private String win_speed;
+
+    /**
+     * 下雨状态
+     */
+    private String rainStatusName;
+
+    /**
+     * 击虫总数
+     */
+    private String pestTotal;
+
+    public String getDevStatus() {
+        String devStatusName = "离线";
+        if(Objects.equals(devStatus, "1")){
+            devStatusName = "在线";
+        } else if (Objects.equals(devStatus, "2")) {
+            devStatusName = "故障";
+        } else if (Objects.equals(devStatus, "3")) {
+            devStatusName = "待激活";
+        }
+        return devStatusName;
+    }
+
+    /**
+     * 设备状态
+     */
+    private String devStatus;
+
+    /** 诱芯名称 也是害虫表中的害虫名称 */
+    @Excel(name = "诱芯名称")
+    private String xyinfoLurename;
+
+    /** 诱芯到期时间 */
+    @Excel(name = "诱芯到期时间")
+    private String xyinfoLureexpireddate;
+
+
+
+}

+ 20 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbLureListReqVo.java

@@ -0,0 +1,20 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.domain;
+
+import com.yunfeiyun.agmp.common.annotation.Excel;
+import lombok.Data;
+
+/**
+ *
+ * 
+ * @author 杨晓辉
+ * @date 2024-06-03
+ */
+@Data
+public class IotXycbLureListReqVo
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 害虫诱芯名称 */
+    @Excel(name = "害虫诱芯名称")
+    private String pestName;
+}

+ 24 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbLureListRspVo.java

@@ -0,0 +1,24 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.domain;
+
+import com.yunfeiyun.agmp.common.annotation.Excel;
+import lombok.Data;
+
+/**
+ * 性诱测报详细信息对象 IotXyinfo
+ * 
+ * @author 杨晓辉
+ * @date 2024-06-03
+ */
+@Data
+public class IotXycbLureListRspVo
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 害虫诱芯名称 */
+    @Excel(name = "害虫诱芯名称")
+    private String pestName;
+
+    /** 害虫业务标识 */
+    @Excel(name = "害虫业务标识")
+    private String pestBusid;
+}

+ 28 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbModifyLureReqVo.java

@@ -0,0 +1,28 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.domain;
+
+import com.yunfeiyun.agmp.common.annotation.Excel;
+import lombok.Data;
+
+/**
+ * 性诱测报详细信息对象 IotXyinfo
+ * 
+ * @author 杨晓辉
+ * @date 2024-06-03
+ */
+@Data
+public class IotXycbModifyLureReqVo
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 设备业务标识 */
+    @Excel(name = "设备业务标识")
+    private String devBid;
+
+    /** 诱芯到期时间 */
+    @Excel(name = "诱芯到期时间")
+    private String xyinfoLureexpireddate;
+
+    /** 害虫业务标识 */
+    @Excel(name = "害虫业务标识")
+    private String pestBusid;
+}

+ 14 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbPolylineResVo.java

@@ -0,0 +1,14 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.domain;
+
+import lombok.Data;
+
+/**
+ * 性诱测报折线图数据
+ */
+@Data
+public class IotXycbPolylineResVo {
+    private String ah;
+    private String at;
+    private String ct;
+    private String createDate;
+}

+ 25 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXycbReqVo.java

@@ -0,0 +1,25 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.domain;
+
+import lombok.Data;
+
+/**
+ * 性诱测吧设备数据请求实体
+ *
+ * @author 杨晓辉
+ * @date 2024-01-04
+ */
+@Data
+public class IotXycbReqVo
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 设备业务标识 */
+    private String devBid;
+
+    /** 开始时间 */
+    private String startDate;
+
+    /** 结束时间 */
+    private String endDate;
+
+}

+ 1 - 1
src/main/java/com/yunfeiyun/agmp/iotm/device/xy/domain/IotXyinfoDto.java

@@ -1,4 +1,4 @@
-package com.yunfeiyun.agmp.iotm.device.xy.domain;
+package com.yunfeiyun.agmp.iotm.device.xycb.domain;
 
 import com.yunfeiyun.agmp.common.annotation.Excel;
 import com.yunfeiyun.agmp.iot.common.domain.IotBaseEntity;

+ 1 - 1
src/main/java/com/yunfeiyun/agmp/iotm/device/xy/domain/IotXyinfoPestTotalDto.java

@@ -1,4 +1,4 @@
-package com.yunfeiyun.agmp.iotm.device.xy.domain;
+package com.yunfeiyun.agmp.iotm.device.xycb.domain;
 
 import com.yunfeiyun.agmp.common.annotation.Excel;
 import com.yunfeiyun.agmp.iot.common.domain.IotBaseEntity;

+ 85 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotYfXycbDataListRspVo.java

@@ -0,0 +1,85 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.domain;
+
+
+import com.yunfeiyun.agmp.common.annotation.Excel;
+import lombok.Data;
+
+/**
+ * mongo
+ * 性诱测报灯2.0
+ */
+@Data
+public class IotYfXycbDataListRspVo {
+
+    @Excel( name = "序号")
+    public String id;
+
+    /**
+     * 设备唯一标识
+     */
+    public String devBid;
+
+    @Excel( name = "设备号")
+    public String devCode;
+
+    /**
+     * 设备开关 0:关机 1:开机
+     */
+    @Excel( name = "设备开关", readConverterExp = "0=关机,1=开机")
+    public String ds;
+
+    /**
+     * 工作状态 0:待机 1:工作
+     */
+    @Excel( name = "工作状态", readConverterExp = "0=待机,1=工作")
+    public String ws;
+
+    /**
+     * 温度
+     */
+    @Excel( name = "温度")
+    public String at;
+
+    /**
+     * 湿度
+     */
+    @Excel( name = "湿度")
+    public String ah;
+
+    /**
+     * 电池状态 0:正常 1:欠压 2:过压
+     */
+    @Excel( name = "电池状态", readConverterExp = "0=正常,1=欠压,2=过压")
+    public String bs;
+
+    /**
+     * 充电状态 0:非充电 1:充电
+     */
+    @Excel( name = "充电状态", readConverterExp = "0=非充电,1=充电")
+    public String cs;
+
+    /**
+     * 充电电压 单位:V 字符串类型
+     */
+    @Excel( name = "充电电压")
+    public String cv;
+
+    /**
+     * 电池电压 单位:V 字符串类型
+     */
+    @Excel( name = "电池电压")
+    public String bv;
+
+    /**
+     * 诱虫次数 字符串类型
+     */
+    @Excel( name = "诱虫次数")
+    public String ct;
+
+    /**
+     * 上报时间 字符串类型
+     */
+    @Excel( name = "上报时间")
+    public String createdDate;
+
+}

+ 45 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/IIotXycbIIIService.java

@@ -0,0 +1,45 @@
+//package com.yunfeiyun.agmp.iotm.device.xycb.service;
+//
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.yunfeiyun.agmp.iot.common.domain.resvo.IotDeviceResVo;
+//import com.yunfeiyun.agmp.iotm.device.xycb.domain.*;
+//
+//import java.util.List;
+//
+//public interface IIotXycbIIIService {
+//    /**
+//     * 获取性诱设备数据列表
+//     * @param iotXycbReqVo
+//     */
+//    public IPage<IotYfXycbDataListRspVo> getXycbDataList(IotXycbReqVo iotXycbReqVo);
+//
+//    /**
+//     * 获取性诱测报折线图数据
+//     * @param iotXycbReqVo
+//     */
+//    public List<IotXycbPolylineResVo> getXycbPolyline(IotXycbReqVo iotXycbReqVo);
+//
+//    /**
+//     * 获取性诱测报信息
+//     * @param
+//     */
+//    public IotXycbInfoResVo getXycbInfo(String devBid);
+//
+//    /**
+//     * 修改诱芯信息
+//     * @param
+//     */
+//    public int modifyLure(IotXycbModifyLureReqVo iotXycbModifyLureReqVo);
+//
+//    /**
+//     * 获取诱芯列表
+//     * @return
+//     */
+//    public List<IotXycbLureListRspVo> getLureList(IotXycbLureListReqVo iotXycbLureListReqVo);
+//
+//    public List<IotYfXycbDataListRspVo> exportDataList(IotXycbReqVo iotXycbReqVo, IotDeviceResVo device);
+//
+//    public IPage getImageList(IotXycbReqVo iotXycbReqVo);
+//
+//    public void imageDelete(String xycbimgBid);
+//}

+ 47 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/IIotXycbService.java

@@ -0,0 +1,47 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXycbPolylineResVo;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXycbReqVo;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotYfXycbDataListRspVo;
+
+import java.util.List;
+
+public interface IIotXycbService {
+    /**
+     * 获取性诱设备数据列表
+     * @param iotXycbReqVo
+     */
+    public IPage<IotYfXycbDataListRspVo> getXycbDataList(IotXycbReqVo iotXycbReqVo);
+
+    /**
+     * 获取性诱测报折线图数据
+     * @param iotXycbReqVo
+     */
+    public List<IotXycbPolylineResVo> getXycbPolyline(IotXycbReqVo iotXycbReqVo);
+//
+//    /**
+//     * 获取性诱测报信息
+//     * @param
+//     */
+//    public IotXycbInfoResVo getXycbInfo(String devBid);
+//
+//    /**
+//     * 修改诱芯信息
+//     * @param
+//     */
+//    public int modifyLure(IotXycbModifyLureReqVo iotXycbModifyLureReqVo);
+//
+//    /**
+//     * 获取诱芯列表
+//     * @return
+//     */
+//    public List<IotXycbLureListRspVo> getLureList(IotXycbLureListReqVo iotXycbLureListReqVo);
+//
+//    public List<IotYfXycbDataListRspVo> exportDataList(IotXycbReqVo iotXycbReqVo, IotDeviceResVo device);
+//    public List<IotYfXycbDataListRspVo> exportXYIIIDataList(IotXycbReqVo iotXycbReqVo, IotDeviceResVo device);
+//
+//    public IPage getImageList(IotXycbReqVo iotXycbReqVo);
+//
+//    public void imageDelete(String xycbimgBid);
+}

+ 53 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/IIotXyinfoService.java

@@ -0,0 +1,53 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.service;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotXyinfo;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXyinfoDto;
+
+import java.util.List;
+
+/**
+ * 性诱测报详细信息Service接口
+ * 
+ * @author 杨晓辉
+ * @date 2024-06-03
+ */
+public interface IIotXyinfoService 
+{
+    /**
+     * 查询性诱测报详细信息列表
+     * 
+     * @param iotXyinfo 性诱测报详细信息
+     * @return 性诱测报详细信息集合
+     */
+    public List<IotXyinfo> selectIotXyinfoList(IotXyinfo iotXyinfo);
+
+    /**
+     * 查询性诱测报详细信息列表
+     *
+     * @param iotXyinfo 性诱测报详细信息
+     * @return 性诱测报详细信息集合
+     */
+    public List<IotXyinfoDto> selectIotXyinfoListByDevBidList(List<String> devBidList);
+
+    /**
+     * 查询性诱测报详细信息
+     *
+     * @param
+     * @return 性诱测报详细信息
+     */
+    public IotXyinfoDto selectIotXyinfoByDevBid(String devBid);
+
+    /**
+     * 更新性诱信息
+     * @param iotXyinfo
+     * @return
+     */
+    public int updateIotXyinfo(IotXyinfo iotXyinfo);
+
+    /**
+     * 创建性诱信息
+     * @param iotXyinfo
+     * @return
+     */
+    public int insertIotXyinfo(IotXyinfo iotXyinfo);
+}

+ 713 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/impl/IotXycbIIIServiceImpl.java

@@ -0,0 +1,713 @@
+//package com.yunfeiyun.agmp.iotm.device.xycb.service.impl;
+//
+//import com.alibaba.fastjson2.JSONObject;
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+//import com.yunfeiyun.agmp.common.core.page.PageDomain;
+//import com.yunfeiyun.agmp.common.core.page.TableSupport;
+//import com.yunfeiyun.agmp.common.utils.DateUtils;
+//import com.yunfeiyun.agmp.common.utils.SecurityUtils;
+//import com.yunfeiyun.agmp.common.utils.StringUtils;
+//import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
+//import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
+//import com.yunfeiyun.agmp.iot.common.domain.*;
+//import com.yunfeiyun.agmp.iot.common.domain.resvo.IotDeviceResVo;
+//import com.yunfeiyun.agmp.iot.common.domain.resvo.IotXycbimgListResVo;
+//import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
+//import com.yunfeiyun.agmp.iot.common.service.IotWeatherService;
+//import com.yunfeiyun.agmp.iot.common.service.MongoService;
+//import com.yunfeiyun.agmp.iotm.device.domain.dtovo.IotXyinfoDto;
+//import com.yunfeiyun.agmp.iotm.device.domain.dtovo.IotXyinfoPestTotalDto;
+//import com.yunfeiyun.agmp.iotm.device.domain.reqvo.IotXycbLureListReqVo;
+//import com.yunfeiyun.agmp.iotm.device.domain.reqvo.IotXycbModifyLureReqVo;
+//import com.yunfeiyun.agmp.iotm.device.domain.reqvo.IotXycbReqVo;
+//import com.yunfeiyun.agmp.iotm.device.domain.resvo.*;
+//import com.yunfeiyun.agmp.iotm.device.service.*;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.data.domain.Sort;
+//import org.springframework.data.mongodb.core.aggregation.*;
+//import org.springframework.data.mongodb.core.query.Criteria;
+//import org.springframework.data.mongodb.core.query.Query;
+//import org.springframework.stereotype.Service;
+//
+//import java.util.*;
+//
+//import static com.yunfeiyun.agmp.common.utils.PageUtils.startPage;
+//
+//@Slf4j
+//@Service
+//public class IotXycbIIIServiceImpl implements IIotXycbIIIService {
+//
+//    @Autowired
+//    private IIotDeviceService iIotDeviceService;
+//
+//    @Autowired
+//    private MongoService mongoService;
+//
+//    @Autowired
+//    private IotWeatherService iotWeatherService;
+//
+//    @Autowired
+//    private IIotXyinfoService iIotXyinfoService;
+//
+//    @Autowired
+//    private IIotPestrecogService iIotPestrecogService;
+//
+//    @Autowired
+//    private IIotPestService iotPestService;
+//
+//
+//    /**
+//     * 性诱测报2.0
+//     * @param reqVo
+//     * @return
+//     */
+//    private IPage<IotYfXycbDataListRspVo> getYfXycb2DataList(IotXycbReqVo reqVo){
+//        String devBid = reqVo.getDevBid();
+//
+//        Map<String, Object> cases = new HashMap<>();
+//        cases.put("devBid", devBid);
+//
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isEmpty(reqVo.getEndDate())) {
+//            cases.put("gte_xycb2dataCreatedDate", reqVo.getStartDate());
+//        }
+//        if (StringUtils.isEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("lte_xycb2dataCreatedDate", reqVo.getEndDate());
+//        }
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("time_xycb2dataCreatedDate", reqVo.getStartDate() + "," + reqVo.getEndDate());
+//        }
+//        cases.remove("startDate");
+//        cases.remove("endDate");
+//
+//        PageDomain pageDomain = TableSupport.buildPageRequest();
+//        if(Objects.equals(pageDomain.getOrderByColumn(), "xycbdataCreatedDate")){
+//            pageDomain.setOrderByColumn("xycb2dataCreatedDate");
+//        }
+//
+//        IPage listPage = mongoService.findListPage(IotYfXycb2data.class, cases, pageDomain);
+//        List<IotYfXycb2data> iotYfXycb2dataList = listPage.getRecords();
+//        List<IotYfXycbDataListRspVo> iotYfXycbDataListRspVoList = new ArrayList<>();
+//        for(IotYfXycb2data iotYfXycb2data: iotYfXycb2dataList){
+//            JSONObject jsonObject = iotYfXycb2data.getXycb2dataContent();
+//            String cs = "0";
+//            if(!Objects.equals(jsonObject.getInteger("b_c"), 0)){
+//                cs = "1";
+//            }
+//            IotYfXycbDataListRspVo xycbDataListRspVo = new IotYfXycbDataListRspVo();
+//            xycbDataListRspVo.setDevBid(devBid);
+//            xycbDataListRspVo.setDs("1");
+//            xycbDataListRspVo.setWs("1");
+//            xycbDataListRspVo.setAt(jsonObject.getString("at"));
+//            xycbDataListRspVo.setAh(jsonObject.getString("ah"));
+//            xycbDataListRspVo.setBs("0");
+//            xycbDataListRspVo.setCs(cs);
+//            xycbDataListRspVo.setCv("0");
+//            xycbDataListRspVo.setBv(jsonObject.getString("b_v"));
+//            xycbDataListRspVo.setCt((String) jsonObject.getOrDefault("ct", "0"));
+//            xycbDataListRspVo.setCreatedDate(iotYfXycb2data.getXycb2dataCreatedDate());
+//
+//            iotYfXycbDataListRspVoList.add(xycbDataListRspVo);
+//        }
+//        listPage.setRecords(iotYfXycbDataListRspVoList);
+//
+//        return listPage;
+//    }
+//
+//    /**
+//     * 性诱测报2.0
+//     * @param reqVo
+//     * @return
+//     */
+//    private IPage<IotYfXycbDataListRspVo> getZjsfXycbDataList(IotXycbReqVo reqVo){
+//        String devBid = reqVo.getDevBid();
+//
+//        Map<String, Object> cases = new HashMap<>();
+//        cases.put("devBid", devBid);
+//
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isEmpty(reqVo.getEndDate())) {
+//            cases.put("gte_xycbdataCreatedDate", reqVo.getStartDate());
+//        }
+//        if (StringUtils.isEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("lte_xycbdataCreatedDate", reqVo.getEndDate());
+//        }
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("time_xycbdataCreatedDate", reqVo.getStartDate() + "," + reqVo.getEndDate());
+//        }
+//        cases.remove("startDate");
+//        cases.remove("endDate");
+//
+//        PageDomain pageDomain = TableSupport.buildPageRequest();
+//        if(Objects.equals(pageDomain.getOrderByColumn(), "xycbdataCreatedDate")){
+//            pageDomain.setOrderByColumn("xycbdataCreatedDate");
+//        }
+//
+//        IPage listPage = mongoService.findListPage(IotZjsfXycbdata.class, cases, pageDomain);
+//        List<IotZjsfXycbdata> iotZjsfXycbdataList = listPage.getRecords();
+//
+//        List<IotYfXycbDataListRspVo> iotYfXycbDataListRspVoList = new ArrayList<>();
+//        for(IotZjsfXycbdata iotZjsfXycbdata: iotZjsfXycbdataList){
+//            JSONObject jsonObject = iotZjsfXycbdata.getXycbdataContent();
+//            String cs = "0";
+//            if(Objects.equals(jsonObject.getInteger("cs"), 2)){
+//                cs = "1";
+//            }
+//            IotZjsfXycbDataListRspVo xycbDataListRspVo = new IotZjsfXycbDataListRspVo();
+//            xycbDataListRspVo.setDevBid(devBid);
+//            xycbDataListRspVo.setDs("1");
+//            xycbDataListRspVo.setWs("1");
+//            xycbDataListRspVo.setAt(jsonObject.getString("at"));
+//            xycbDataListRspVo.setAh(jsonObject.getString("ah"));
+//            xycbDataListRspVo.setBs("0");
+//            xycbDataListRspVo.setCs(cs);
+//            xycbDataListRspVo.setCv("0");
+//            xycbDataListRspVo.setBv(jsonObject.getString("b_v"));
+//            xycbDataListRspVo.setLp(jsonObject.getString("lp"));
+//            xycbDataListRspVo.setLt(jsonObject.getString("lt"));
+//            xycbDataListRspVo.setSs(jsonObject.getString("ss"));
+//            xycbDataListRspVo.setWin(jsonObject.getString("win"));
+//            xycbDataListRspVo.setWin_speed(jsonObject.getString("win_speed"));
+//            xycbDataListRspVo.setCt((String) jsonObject.getOrDefault("ct", "0"));
+//
+//
+//            xycbDataListRspVo.setCreatedDate(iotZjsfXycbdata.getXycbdataCreatedDate());
+//
+//            iotYfXycbDataListRspVoList.add(xycbDataListRspVo);
+//        }
+//        listPage.setRecords(iotYfXycbDataListRspVoList);
+//
+//        return listPage;
+//    }
+//
+//    private IPage<IotYfXycbDataListRspVo> getZjsfXycbIIIDataList(IotXycbReqVo reqVo){
+//        String devBid = reqVo.getDevBid();
+//
+//        Map<String, Object> cases = new HashMap<>();
+//        cases.put("devBid", devBid);
+//
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isEmpty(reqVo.getEndDate())) {
+//            cases.put("gte_xycbdataCreatedDate", reqVo.getStartDate());
+//        }
+//        if (StringUtils.isEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("lte_xycbdataCreatedDate", reqVo.getEndDate());
+//        }
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("time_xycbdataCreatedDate", reqVo.getStartDate() + "," + reqVo.getEndDate());
+//        }
+//        cases.remove("startDate");
+//        cases.remove("endDate");
+//
+//        PageDomain pageDomain = TableSupport.buildPageRequest();
+//        if(Objects.equals(pageDomain.getOrderByColumn(), "xycbdataCreatedDate")){
+//            pageDomain.setOrderByColumn("xycbdataCreatedDate");
+//        }
+//
+//        IPage listPage = mongoService.findListPage(IotZjsfXycbdata.class, cases, pageDomain);
+//        List<IotZjsfXycbdata> iotZjsfXycbdataList = listPage.getRecords();
+//
+//        List<IotYfXycbDataListRspVo> iotYfXycbDataListRspVoList = new ArrayList<>();
+//        for(IotZjsfXycbdata iotZjsfXycbdata: iotZjsfXycbdataList){
+//            JSONObject jsonObject = iotZjsfXycbdata.getXycbdataContent();
+//            String cs = "0";
+//            if(Objects.equals(jsonObject.getInteger("cs"), 2)){
+//                cs = "1";
+//            }
+//            IotZjsfXycbDataListRspVo xycbDataListRspVo = new IotZjsfXycbDataListRspVo();
+//            xycbDataListRspVo.setDevBid(devBid);
+//            xycbDataListRspVo.setDs("1");
+//            xycbDataListRspVo.setWs("1");
+//            xycbDataListRspVo.setAt(jsonObject.getString("at"));
+//            xycbDataListRspVo.setAh(jsonObject.getString("ah"));
+//            xycbDataListRspVo.setBs("0");
+//            xycbDataListRspVo.setCs(cs);
+//            xycbDataListRspVo.setCv("0");
+//            xycbDataListRspVo.setBv(jsonObject.getString("b_v"));
+//            xycbDataListRspVo.setLp(jsonObject.getString("lp"));
+//            xycbDataListRspVo.setLt(jsonObject.getString("lt"));
+//            xycbDataListRspVo.setSs(jsonObject.getString("ss"));
+//            xycbDataListRspVo.setWin(jsonObject.getString("win"));
+//            xycbDataListRspVo.setWin_speed(jsonObject.getString("win_speed"));
+//            xycbDataListRspVo.setCt((String) jsonObject.getOrDefault("ct", "0"));
+//
+//
+//            xycbDataListRspVo.setCreatedDate(iotZjsfXycbdata.getXycbdataCreatedDate());
+//
+//            iotYfXycbDataListRspVoList.add(xycbDataListRspVo);
+//        }
+//        listPage.setRecords(iotYfXycbDataListRspVoList);
+//
+//        return listPage;
+//    }
+//
+//    /**
+//     * 性诱测报2.0   工作数据导出
+//     * @param reqVo
+//     * @return
+//     */
+//    public List<IotYfXycbDataListRspVo> exportDataList(IotXycbReqVo reqVo ,IotDeviceResVo device){
+//        String devBid = reqVo.getDevBid();
+//
+//        Map<String, Object> cases = new HashMap<>();
+//        cases.put("devBid", devBid);
+//
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isEmpty(reqVo.getEndDate())) {
+//            cases.put("gte_xycb2dataCreatedDate", reqVo.getStartDate());
+//        }
+//        if (StringUtils.isEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("lte_xycb2dataCreatedDate", reqVo.getEndDate());
+//        }
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("time_xycb2dataCreatedDate", reqVo.getStartDate() + "," + reqVo.getEndDate());
+//        }
+//        cases.remove("startDate");
+//        cases.remove("endDate");
+//
+//        List<IotYfXycb2data> iotYfXycb2dataList = mongoService.findAll(IotYfXycb2data.class, cases, "xycb2dataCreatedDate desc");
+//        List<IotYfXycbDataListRspVo> iotYfXycbDataListRspVoList = new ArrayList<>();
+//        int i=0;
+//        for(IotYfXycb2data iotYfXycb2data: iotYfXycb2dataList){
+//            i++;
+//            JSONObject jsonObject = iotYfXycb2data.getXycb2dataContent();
+//            String cs = "0";
+//            if(!Objects.equals(jsonObject.getInteger("b_c"), 0)){
+//                cs = "1";
+//            }
+//            IotYfXycbDataListRspVo xycbDataListRspVo = new IotYfXycbDataListRspVo();
+//            xycbDataListRspVo.setDevBid(devBid);
+//            xycbDataListRspVo.setDs("1");
+//            xycbDataListRspVo.setWs("1");
+//            xycbDataListRspVo.setAt(jsonObject.getString("at"));
+//            xycbDataListRspVo.setAh(jsonObject.getString("ah"));
+//            xycbDataListRspVo.setBs("0");
+//            xycbDataListRspVo.setCs(cs);
+//            xycbDataListRspVo.setCv("0");
+//            xycbDataListRspVo.setBv(jsonObject.getString("b_v"));
+//            xycbDataListRspVo.setCt((String) jsonObject.getOrDefault("ct", "0"));
+//            xycbDataListRspVo.setCreatedDate(iotYfXycb2data.getXycb2dataCreatedDate());
+//
+//            xycbDataListRspVo.setId(""+i);
+//            xycbDataListRspVo.setDevCode(device.getDevCode());
+//
+//            iotYfXycbDataListRspVoList.add(xycbDataListRspVo);
+//        }
+//
+//        return iotYfXycbDataListRspVoList;
+//    }
+//
+//    /**
+//     * @param iotXycbReqVo
+//     * @return
+//     */
+//    @Override
+//    public IPage getImageList(IotXycbReqVo reqVo) {
+//        String devBid = reqVo.getDevBid();
+//        if (StringUtils.isEmpty(devBid)) {
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备标识不能为空");
+//        }
+//        IotDevice iotDevice = iIotDeviceService.findOneByBizId(devBid);
+//        if(iotDevice == null){
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备不存在");
+//        }
+//
+//        Map<String, Object> cases = new HashMap<>();
+//        cases.put("devBid", devBid);
+//        cases.put("xycbimgDelstatus", "0");
+//
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isEmpty(reqVo.getEndDate())) {
+//            cases.put("gte_xycbimgCreatedDate", reqVo.getStartDate());
+//        }
+//        if (StringUtils.isEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("lte_xycbimgCreatedDate", reqVo.getEndDate());
+//        }
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("time_xycbimgCreatedDate", reqVo.getStartDate() + "," + reqVo.getEndDate());
+//        }
+//        cases.remove("startDate");
+//        cases.remove("endDate");
+//
+//        PageDomain pageDomain = TableSupport.buildPageRequest();
+//        pageDomain.setOrderByColumn("xycbimgCreatedDate");
+//        pageDomain.setIsAsc("desc");
+//
+//        IPage listPage = mongoService.findListPage(IotXycbimg.class, cases, pageDomain);
+//        List records = listPage.getRecords();
+//        List<IotXycbimgListResVo> iotXycbimgListResVoList = new ArrayList<>();
+//        for (Object obj : records) {
+//            IotXycbimg iotXycbimg = (IotXycbimg) obj;
+//            IotXycbimgListResVo iotXycbimgListResVo = new IotXycbimgListResVo();
+//            iotXycbimgListResVo.setDevBid(iotXycbimg.getDevBid());
+//            iotXycbimgListResVo.setXycbimgBid(iotXycbimg.getXycbimgBid());
+//            iotXycbimgListResVo.setXycbimgAddr(iotXycbimg.getXycbimgAddr());
+//            iotXycbimgListResVo.setXycbimgCreatedDate(iotXycbimg.getXycbimgCreatedDate());
+//
+//            iotXycbimgListResVoList.add(iotXycbimgListResVo);
+//        }
+//        listPage.setRecords(iotXycbimgListResVoList);
+//
+//        return listPage;
+//    }
+//
+//    /**
+//     * @param xycbimgBid
+//     * @return
+//     */
+//    @Override
+//    public void imageDelete(String xycbimgBid) {
+//        Map<String, String> selectMap = new HashMap<>();
+//        selectMap.put("xycbimgBid", xycbimgBid);
+//        IotXycbimg iotXycbimg = (IotXycbimg) mongoService.findOne(IotXycbimg.class, selectMap, null, null);
+//        if(iotXycbimg == null){
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "图片不存在");
+//        }
+//
+//        Criteria criteria = Criteria.where("xycbimgBid").is(xycbimgBid);
+//        Query query = new Query(criteria);
+//
+//        Map<String, Object> updateField = new HashMap<>();
+//        updateField.put("xycbimgDelstatus", "1");
+//        updateField.put("xycbimgModifieddate", DateUtils.dateTimeNow());
+//
+//        mongoService.update(IotXycbimg.class, query, updateField);
+//    }
+//
+//    /**
+//     * 获取性诱设备数据列表
+//     *
+//     * @param iotXycbReqVo
+//     */
+//    @Override
+//    public IPage<IotYfXycbDataListRspVo> getXycbDataList(IotXycbReqVo iotXycbReqVo) {
+//        String devBid = iotXycbReqVo.getDevBid();
+//        IPage<IotYfXycbDataListRspVo> iPage = new Page<>();
+//
+//        IotDevice iotDevice = iIotDeviceService.findOneByBizId(devBid);
+//        if(iotDevice == null){
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备不存在");
+//        }
+//        String devtypeBid = iotDevice.getDevtypeBid();
+//        if (IotDeviceDictConst.TYPE_YF_XYCB_2.equals(devtypeBid)) {
+//            iPage = getYfXycb2DataList(iotXycbReqVo);
+//        }else if (IotDeviceDictConst.TYPE_ZJSF_XYCB.equals(devtypeBid)) {
+//            iPage = getZjsfXycbDataList(iotXycbReqVo);
+//        }
+//        return iPage;
+//    }
+//
+//    /**
+//     * 性诱测报2.0
+//     * @param
+//     */
+//    public List<IotXycbPolylineResVo> getXycb2Polyline(IotXycbReqVo reqVo){
+//        String devBid = reqVo.getDevBid();
+//        String startDate = reqVo.getStartDate();
+//        String endDate = reqVo.getEndDate();
+//
+//        String unit = "day";
+//        Criteria criteria = new Criteria().and("devBid").is(devBid);
+//        if (StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)) {
+//            criteria = criteria.andOperator(
+//                    Criteria.where("xycb2dataCreatedDate").gte(startDate),
+//                    Criteria.where("xycb2dataCreatedDate").lte(endDate)
+//            );
+//            long diffTime = DateUtils.parseDate(endDate).getTime() - DateUtils.parseDate(startDate).getTime();
+//            if (diffTime <= 48 * 60 * 60 * 1000) {
+//                unit = "minute";
+//            } else if (diffTime <= 30L * 24 * 60 * 60 * 1000) {
+//                unit = "hour";
+//            }
+//        } else if (StringUtils.isNotEmpty(startDate)) {
+//            criteria = criteria.and("xycb2dataCreatedDate").gte(startDate);
+//        } else if (StringUtils.isNotEmpty(endDate)) {
+//            criteria = criteria.and("xycb2dataCreatedDate").lte(endDate);
+//        }
+//        MatchOperation matchOperation = Aggregation.match(criteria);
+//
+//        ProjectionOperation projectionOperation = Aggregation.project()
+//                .and("xycb2dataContent.ah").as("ah")
+//                .and("xycb2dataContent.at").as("at")
+//                .and("xycb2dataContent.ct").as("ct")
+//                .and("xycb2dataCreatedDate").as("createDate");
+//
+//        ProjectionOperation projectionOperation2 = Aggregation.project()
+//                .andExpression("{$convert: {input: '$ct', to: 'int', onError: 0, onNull: 0}}").as("ct")
+//                .andExpression("{$convert: {input: '$at', to: 'double', onError: -99, onNull: -99}}").as("at")
+//                .andExpression("{$convert: {input: '$ah', to: 'double', onError: -99, onNull: -99}}").as("ah")
+//                .andExpression("{$dateTrunc: {date: {$toDate: '$createDate'}, unit:'" + unit + "'}}").as("createDate");
+//
+//        GroupOperation groupOperation = Aggregation.group("createDate")
+//                .avg("ah").as("ah")
+//                .avg("at").as("at")
+//                .sum("ct").as("ct");
+//
+//        ProjectionOperation projectionOperation3 = Aggregation.project("ct")
+//                .andExpression("{$trunc: {'$ah', 1}}").as("ah")
+//                .andExpression("{$trunc: {'$at', 1}}").as("at")
+//                .andExpression("{$dateToString: {format: '%Y-%m-%d %H:%M:%S', date: '$_id'}}").as("createDate");
+//
+//        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "createDate");
+//
+//        Aggregation aggregation = Aggregation.newAggregation(
+//                matchOperation,
+//                projectionOperation,
+//                projectionOperation2,
+//                groupOperation,
+//                projectionOperation3,
+//                sortOperation
+//        );
+//
+//        List<IotXycbPolylineResVo> iotXycbPolylineResVos = mongoService.aggregate(
+//                IotYfXycb2data.class, aggregation, IotXycbPolylineResVo.class
+//        );
+//        return iotXycbPolylineResVos;
+//    }
+//
+//    /**
+//     * 性诱测报2.0
+//     * @param
+//     */
+//    public List<IotXycbPolylineResVo> getZjsfXycbPolyline(IotXycbReqVo reqVo){
+//        String devBid = reqVo.getDevBid();
+//        String startDate = reqVo.getStartDate();
+//        String endDate = reqVo.getEndDate();
+//
+//        String unit = "day";
+//        Criteria criteria = new Criteria().and("devBid").is(devBid);
+//        if (StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)) {
+//            criteria = criteria.andOperator(
+//                    Criteria.where("xycbdataCreatedDate").gte(startDate),
+//                    Criteria.where("xycbdataCreatedDate").lte(endDate)
+//            );
+//            long diffTime = DateUtils.parseDate(endDate).getTime() - DateUtils.parseDate(startDate).getTime();
+//            if (diffTime <= 48 * 60 * 60 * 1000) {
+//                unit = "minute";
+//            } else if (diffTime <= 30L * 24 * 60 * 60 * 1000) {
+//                unit = "hour";
+//            }
+//        } else if (StringUtils.isNotEmpty(startDate)) {
+//            criteria = criteria.and("xycbdataCreatedDate").gte(startDate);
+//        } else if (StringUtils.isNotEmpty(endDate)) {
+//            criteria = criteria.and("xycbdataCreatedDate").lte(endDate);
+//        }
+//        MatchOperation matchOperation = Aggregation.match(criteria);
+//
+//        ProjectionOperation projectionOperation = Aggregation.project()
+//                .and("xycbdataContent.ah").as("ah")
+//                .and("xycbdataContent.at").as("at")
+//                .and("xycbdataContent.ct").as("ct")
+//                .and("xycbdataCreatedDate").as("createDate");
+//
+//        ProjectionOperation projectionOperation2 = Aggregation.project()
+//                .andExpression("{$convert: {input: '$ct', to: 'int', onError: 0, onNull: 0}}").as("ct")
+//                .andExpression("{$convert: {input: '$at', to: 'double', onError: -99, onNull: -99}}").as("at")
+//                .andExpression("{$convert: {input: '$ah', to: 'double', onError: -99, onNull: -99}}").as("ah")
+//                .andExpression("{$dateTrunc: {date: {$toDate: '$createDate'}, unit:'" + unit + "'}}").as("createDate");
+//
+//        GroupOperation groupOperation = Aggregation.group("createDate")
+//                .avg("ah").as("ah")
+//                .avg("at").as("at")
+//                .sum("ct").as("ct");
+//
+//        ProjectionOperation projectionOperation3 = Aggregation.project("ct")
+//                .andExpression("{$trunc: {'$ah', 1}}").as("ah")
+//                .andExpression("{$trunc: {'$at', 1}}").as("at")
+//                .andExpression("{$dateToString: {format: '%Y-%m-%d %H:%M:%S', date: '$_id'}}").as("createDate");
+//
+//        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "createDate");
+//
+//        Aggregation aggregation = Aggregation.newAggregation(
+//                matchOperation,
+//                projectionOperation,
+//                projectionOperation2,
+//                groupOperation,
+//                projectionOperation3,
+//                sortOperation
+//        );
+//
+//        List<IotXycbPolylineResVo> iotXycbPolylineResVos = mongoService.aggregate(
+//                IotZjsfXycbdata.class, aggregation, IotXycbPolylineResVo.class
+//        );
+//        return iotXycbPolylineResVos;
+//    }
+//
+//    /**
+//     * 获取性诱测报折线图数据
+//     *
+//     * @param iotXycbReqVo
+//     */
+//    @Override
+//    public List<IotXycbPolylineResVo> getXycbPolyline(IotXycbReqVo iotXycbReqVo) {
+//        String devBid = iotXycbReqVo.getDevBid();
+//        if (StringUtils.isEmpty(devBid)) {
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备标识不能为空");
+//        }
+//        IotDevice iotDevice = iIotDeviceService.findOneByBizId(devBid);
+//        if(iotDevice == null){
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备不存在");
+//        }
+//
+//        List<IotXycbPolylineResVo> iotXycbPolylineResVoList = new ArrayList<>();
+//        if (IotDeviceDictConst.TYPE_YF_XYCB_2.equals(iotDevice.getDevtypeBid())) {
+//            iotXycbPolylineResVoList = getXycb2Polyline(iotXycbReqVo);
+//        }else if (IotDeviceDictConst.TYPE_ZJSF_XYCB.equals(iotDevice.getDevtypeBid())) {
+//            iotXycbPolylineResVoList = getZjsfXycbPolyline(iotXycbReqVo);
+//        }
+//        return iotXycbPolylineResVoList;
+//    }
+//
+//    private IotXycbInfoResVo getXycb2Info(String devBid, IotXycbInfoResVo iotXycbInfoResVo){
+//        HashMap<String, String> params = new HashMap<>();
+//        params.put("devBid", devBid);
+//
+//        IotYfXycb2data iotYfXycb2data = (IotYfXycb2data) mongoService.findOne(IotYfXycb2data.class, params, "xycb2dataCreatedDate", "desc");
+//        if(iotYfXycb2data != null){
+//            JSONObject xyData = iotYfXycb2data.getXycb2dataContent();
+//            iotXycbInfoResVo.setAt(xyData.getString("at"));
+//            iotXycbInfoResVo.setAh(xyData.getString("ah"));
+//        }
+//
+//        List<String> devBidList = new ArrayList<>();
+//        devBidList.add(devBid);
+//
+//        Map<String, IotXyinfoPestTotalDto>  iotXyinfoPestTotalDtoMap = iIotPestrecogService.getIotXyinfoPestTotalMap(devBidList);
+//        if(iotXyinfoPestTotalDtoMap.containsKey(devBid)){
+//            iotXycbInfoResVo.setPestTotal(String.valueOf(iotXyinfoPestTotalDtoMap.get(devBid).getPestTotal()));
+//        }
+//        return iotXycbInfoResVo;
+//    }
+//
+//    private IotXycbInfoResVo getZjsfXycbInfo(String devBid, IotXycbInfoResVo iotXycbInfoResVo){
+//        HashMap<String, String> params = new HashMap<>();
+//        params.put("devBid", devBid);
+//
+//        IotZjsfXycbdata iotZjsfXycbdata = (IotZjsfXycbdata) mongoService.findOne(
+//                IotZjsfXycbdata.class, params, "xycbdataCreatedDate", "desc");
+//        if(iotZjsfXycbdata != null){
+//            JSONObject xyData = iotZjsfXycbdata.getXycbdataContent();
+//            iotXycbInfoResVo.setAt(xyData.getString("at"));
+//            iotXycbInfoResVo.setAh(xyData.getString("ah"));
+//        }
+//
+//        List<String> devBidList = new ArrayList<>();
+//        devBidList.add(devBid);
+//
+//        Map<String, IotXyinfoPestTotalDto>  iotXyinfoPestTotalDtoMap = iIotPestrecogService.getIotXyinfoPestTotalMap(devBidList);
+//        iotXycbInfoResVo.setPestTotal("0");
+//        if(iotXyinfoPestTotalDtoMap.containsKey(devBid)){
+//            Integer pestTotal = iotXyinfoPestTotalDtoMap.get(devBid).getPestTotal();
+//            if(pestTotal == null){
+//                pestTotal = 0;
+//            }
+//            iotXycbInfoResVo.setPestTotal(String.valueOf(pestTotal));
+//        }
+//        return iotXycbInfoResVo;
+//    }
+//
+//    /**
+//     * 获取性诱测报信息
+//     *
+//     * @param devBid
+//     */
+//    @Override
+//    public IotXycbInfoResVo getXycbInfo(String devBid) {
+//        if (StringUtils.isEmpty(devBid)) {
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备标识不能为空");
+//        }
+//        IotDevice iotDevice = iIotDeviceService.findOneByBizId(devBid);
+//        if(iotDevice == null){
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备不存在");
+//        }
+//
+//        IotXycbInfoResVo iotXycbInfoResVo = new IotXycbInfoResVo();
+//        iotXycbInfoResVo.setDevStatus(iotDevice.getDevStatus());
+//
+//        IotXyinfoDto iotXyinfoDto = iIotXyinfoService.selectIotXyinfoByDevBid(devBid);
+//        if(iotXyinfoDto != null){
+//            iotXycbInfoResVo.setXyinfoLurename(iotXyinfoDto.getXyinfoLurename());
+//            iotXycbInfoResVo.setXyinfoLureexpireddate(iotXyinfoDto.getXyinfoLureexpireddate());
+//        }
+//
+//        String province = StringUtils.isEmpty(iotDevice.getDevProvincealign()) ? iotDevice.getDevProvince(): iotDevice.getDevProvincealign();
+//        String city = StringUtils.isEmpty(iotDevice.getDevCityalign()) ? iotDevice.getDevCity(): iotDevice.getDevCityalign();
+//        String district = StringUtils.isEmpty(iotDevice.getDevDistrictalign()) ? iotDevice.getDevDistrict(): iotDevice.getDevDistrictalign();
+//        if(StringUtils.isNotEmpty(province) && StringUtils.isNotEmpty(city)){
+//            JSONObject weatherInfo = iotWeatherService.getWeatherByAddress(province, city, district);
+//            iotXycbInfoResVo.setWea(weatherInfo.getString("wea"));
+//            iotXycbInfoResVo.setWin(weatherInfo.getString("win"));
+//            iotXycbInfoResVo.setWin_speed(weatherInfo.getString("win_speed"));
+//            String rainStatusName = !Objects.equals(weatherInfo.getString("rain_pcpn"), "0") ? "是" : "否";
+//            iotXycbInfoResVo.setRainStatusName(rainStatusName);
+//        }
+//
+//        if (IotDeviceDictConst.TYPE_YF_XYCB_2.equals(iotDevice.getDevtypeBid())) {
+//            iotXycbInfoResVo = getXycb2Info(devBid, iotXycbInfoResVo);
+//        }else if (IotDeviceDictConst.TYPE_ZJSF_XYCB.equals(iotDevice.getDevtypeBid())){
+//            iotXycbInfoResVo = getZjsfXycbInfo(devBid, iotXycbInfoResVo);
+//        }
+//        return iotXycbInfoResVo;
+//    }
+//
+//    /**
+//     * 修改诱芯信息
+//     *
+//     * @param iotXycbModifyLureReqVo
+//     */
+//    @Override
+//    public int modifyLure(IotXycbModifyLureReqVo iotXycbModifyLureReqVo) {
+//        String devBid = iotXycbModifyLureReqVo.getDevBid();
+//        String pestBusid = iotXycbModifyLureReqVo.getPestBusid();
+//        IotPest iotPest = iotPestService.selectIotPestByPestBid(pestBusid);
+//        if(iotPest == null){
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "诱芯不存在");
+//        }
+//        IotXyinfoDto iotXyinfoDto = iIotXyinfoService.selectIotXyinfoByDevBid(devBid);
+//
+//        IotXyinfo iotXyinfo = new IotXyinfo();
+//        iotXyinfo.setDevBid(iotXycbModifyLureReqVo.getDevBid());
+//        iotXyinfo.setPestBusid(iotPest.getPestBid());
+//        iotXyinfo.setXyinfoLurename(iotPest.getPestName());
+//        iotXyinfo.setXyinfoLureexpireddate(iotXycbModifyLureReqVo.getXyinfoLureexpireddate());
+//        iotXyinfo.setXyinfoModifier(SecurityUtils.getUserId());
+//        iotXyinfo.setXyinfoModifieddate(DateUtils.dateTimeNow());
+//
+//        int status = 0;
+//        if(iotXyinfoDto == null){
+//            iotXyinfo.setXyinfoBid(iotXyinfo.getUUId());
+//            iotXyinfo.setXyinfoCreator(SecurityUtils.getUserId());
+//            iotXyinfo.setXyinfoCreatedDate(DateUtils.dateTimeNow());
+//            iotXyinfo.setXyinfoDelstatus("0");
+//
+//            status = iIotXyinfoService.insertIotXyinfo(iotXyinfo);
+//        }else{
+//            status = iIotXyinfoService.updateIotXyinfo(iotXyinfo);
+//        }
+//
+//        return status;
+//    }
+//
+//    /**
+//     * 获取诱芯列表
+//     *
+//     * @param iotXycbLureListReqVo
+//     * @return
+//     */
+//    @Override
+//    public List<IotXycbLureListRspVo> getLureList(IotXycbLureListReqVo iotXycbLureListReqVo) {
+//        IotPest selectIotPest = new IotPest();
+//        selectIotPest.setPestName(iotXycbLureListReqVo.getPestName());
+//
+//        startPage();
+//        List<IotPest> iotPestList = iotPestService.selectIotPestList(selectIotPest);
+//        List<IotXycbLureListRspVo> iotXycbLureListRspVoList = new ArrayList<>();
+//        for(IotPest iotPest: iotPestList){
+//            IotXycbLureListRspVo iotXycbLureListRspVo = new IotXycbLureListRspVo();
+//            iotXycbLureListRspVo.setPestName(iotPest.getPestName());
+//            iotXycbLureListRspVo.setPestBusid(iotPest.getPestBid());
+//
+//            iotXycbLureListRspVoList.add(iotXycbLureListRspVo);
+//        }
+//        return iotXycbLureListRspVoList;
+//    }
+//
+//
+//}

+ 855 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/impl/IotXycbServiceImpl.java

@@ -0,0 +1,855 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yunfeiyun.agmp.common.core.page.PageDomain;
+import com.yunfeiyun.agmp.common.core.page.TableSupport;
+import com.yunfeiyun.agmp.common.utils.DateUtils;
+import com.yunfeiyun.agmp.common.utils.StringUtils;
+import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.domain.IotYfXycbIIIdata;
+import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
+import com.yunfeiyun.agmp.iot.common.service.IotWeatherService;
+import com.yunfeiyun.agmp.iot.common.service.MongoService;
+import com.yunfeiyun.agmp.iotm.device.pest.service.IIotPestService;
+import com.yunfeiyun.agmp.iotm.device.pest.service.IIotPestrecogService;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXycbPolylineResVo;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXycbReqVo;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotYfXycbDataListRspVo;
+import com.yunfeiyun.agmp.iotm.device.xycb.service.IIotXycbService;
+import com.yunfeiyun.agmp.iotm.device.xycb.service.IIotXyinfoService;
+import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.aggregation.*;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Slf4j
+@Service
+public class IotXycbServiceImpl implements IIotXycbService {
+
+    @Autowired
+    private IIotDeviceService iIotDeviceService;
+
+    @Autowired
+    private MongoService mongoService;
+
+    @Autowired
+    private IotWeatherService iotWeatherService;
+
+    @Autowired
+    private IIotXyinfoService iIotXyinfoService;
+
+    @Autowired
+    private IIotPestrecogService iIotPestrecogService;
+
+    @Autowired
+    private IIotPestService iotPestService;
+
+    private IPage<IotYfXycbDataListRspVo> getYfXycbIIIDataList(IotXycbReqVo reqVo){
+        String devBid = reqVo.getDevBid();
+
+        Map<String, Object> cases = new HashMap<>();
+        cases.put("devBid", devBid);
+
+        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isEmpty(reqVo.getEndDate())) {
+            cases.put("gte_xycbdataCreatedDate", reqVo.getStartDate());
+        }
+        if (StringUtils.isEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+            cases.put("lte_xycbdataCreatedDate", reqVo.getEndDate());
+        }
+        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+            cases.put("time_xycbdataCreatedDate", reqVo.getStartDate() + "," + reqVo.getEndDate());
+        }
+        cases.remove("startDate");
+        cases.remove("endDate");
+
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        if(Objects.equals(pageDomain.getOrderByColumn(), "xycbdataCreatedDate")){
+            pageDomain.setOrderByColumn("xycbdataCreatedDate");
+        }
+
+        IPage listPage = mongoService.findListPage(IotYfXycbIIIdata.class, cases, pageDomain);
+        List<IotYfXycbIIIdata> iotYfXycb2dataList = listPage.getRecords();
+        List<IotYfXycbDataListRspVo> iotYfXycbDataListRspVoList = new ArrayList<>();
+        for(IotYfXycbIIIdata iotYfXycb2data: iotYfXycb2dataList){
+            JSONObject jsonObject = iotYfXycb2data.getXycbdataContent();
+            String cs = "0";
+            if(!Objects.equals(jsonObject.getInteger("b_c"), 0)){
+                cs = "1";
+            }
+            IotYfXycbDataListRspVo xycbDataListRspVo = new IotYfXycbDataListRspVo();
+            xycbDataListRspVo.setDevBid(devBid);
+            xycbDataListRspVo.setDs("1");
+            xycbDataListRspVo.setWs("1");
+            xycbDataListRspVo.setAt(jsonObject.getString("at"));
+            xycbDataListRspVo.setAh(jsonObject.getString("ah"));
+            xycbDataListRspVo.setBs("0");
+            xycbDataListRspVo.setCs(cs);
+            xycbDataListRspVo.setCv(jsonObject.getString("cv"));
+            xycbDataListRspVo.setBv(jsonObject.getString("bv"));
+            xycbDataListRspVo.setCt((String) jsonObject.getOrDefault("infr_ct", "0"));
+            xycbDataListRspVo.setCreatedDate(iotYfXycb2data.getXycbdataCreatedDate());
+
+            iotYfXycbDataListRspVoList.add(xycbDataListRspVo);
+        }
+        listPage.setRecords(iotYfXycbDataListRspVoList);
+
+        return listPage;
+    }
+
+    public List<IotXycbPolylineResVo> getXycbIIIolyline(IotXycbReqVo reqVo){
+        String devBid = reqVo.getDevBid();
+        String startDate = reqVo.getStartDate();
+        String endDate = reqVo.getEndDate();
+
+        String unit = "day";
+        Criteria criteria = new Criteria().and("devBid").is(devBid);
+        if (StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)) {
+            criteria = criteria.andOperator(
+                    Criteria.where("xycbdataCreatedDate").gte(startDate),
+                    Criteria.where("xycbdataCreatedDate").lte(endDate)
+            );
+            long diffTime = DateUtils.parseDate(endDate).getTime() - DateUtils.parseDate(startDate).getTime();
+            if (diffTime <= 48 * 60 * 60 * 1000) {
+                unit = "minute";
+            } else if (diffTime <= 30L * 24 * 60 * 60 * 1000) {
+                unit = "hour";
+            }
+        } else if (StringUtils.isNotEmpty(startDate)) {
+            criteria = criteria.and("xycbdataCreatedDate").gte(startDate);
+        } else if (StringUtils.isNotEmpty(endDate)) {
+            criteria = criteria.and("xycbIdataCreatedDate").lte(endDate);
+        }
+        MatchOperation matchOperation = Aggregation.match(criteria);
+
+        ProjectionOperation projectionOperation = Aggregation.project()
+                .and("xycbdataContent.ah").as("ah")
+                .and("xycbdataContent.at").as("at")
+                .and("xycbdataContent.ct").as("ct")
+                .and("xycbdataCreatedDate").as("createDate");
+
+        ProjectionOperation projectionOperation2 = Aggregation.project()
+                .andExpression("{$convert: {input: '$ct', to: 'int', onError: 0, onNull: 0}}").as("ct")
+                .andExpression("{$convert: {input: '$at', to: 'double', onError: -99, onNull: -99}}").as("at")
+                .andExpression("{$convert: {input: '$ah', to: 'double', onError: -99, onNull: -99}}").as("ah")
+                .andExpression("{$dateTrunc: {date: {$toDate: '$createDate'}, unit:'" + unit + "'}}").as("createDate");
+
+        GroupOperation groupOperation = Aggregation.group("createDate")
+                .avg("ah").as("ah")
+                .avg("at").as("at")
+                .sum("ct").as("ct");
+
+        ProjectionOperation projectionOperation3 = Aggregation.project("ct")
+                .andExpression("{$trunc: {'$ah', 1}}").as("ah")
+                .andExpression("{$trunc: {'$at', 1}}").as("at")
+                .andExpression("{$dateToString: {format: '%Y-%m-%d %H:%M:%S', date: '$_id'}}").as("createDate");
+
+        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "createDate");
+
+        Aggregation aggregation = Aggregation.newAggregation(
+                matchOperation,
+                projectionOperation,
+                projectionOperation2,
+                groupOperation,
+                projectionOperation3,
+                sortOperation
+        );
+
+        List<IotXycbPolylineResVo> iotXycbPolylineResVos = mongoService.aggregate(
+                IotYfXycbIIIdata.class, aggregation, IotXycbPolylineResVo.class
+        );
+        return iotXycbPolylineResVos;
+    }
+
+    /**
+     * 获取性诱设备数据列表
+     *
+     * @param iotXycbReqVo
+     */
+    @Override
+    public IPage<IotYfXycbDataListRspVo> getXycbDataList(IotXycbReqVo iotXycbReqVo) {
+        String devBid = iotXycbReqVo.getDevBid();
+        IPage<IotYfXycbDataListRspVo> iPage = new Page<>();
+
+        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devBid);
+        if(iotDevice == null){
+            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备不存在");
+        }
+        String devtypeBid = iotDevice.getDevtypeBid();
+//        if (IotDeviceDictConst.TYPE_YF_XYCB_2.equals(devtypeBid)) {
+//            iPage = getYfXycb2DataList(iotXycbReqVo);
+//        }else if (IotDeviceDictConst.TYPE_ZJSF_XYCB.equals(devtypeBid)) {
+//            iPage = getZjsfXycbDataList(iotXycbReqVo);
+//        }else if (IotDeviceDictConst.TYPE_YF_XYCB_III.equals(devtypeBid)) {
+//            iPage = getYfXycbIIIDataList(iotXycbReqVo);
+//        }
+        if (IotDeviceDictConst.TYPE_YF_XYCB_III.equals(devtypeBid)) {
+            iPage = getYfXycbIIIDataList(iotXycbReqVo);
+        }
+        return iPage;
+    }
+
+    /**
+     * 获取性诱测报折线图数据
+     *
+     * @param iotXycbReqVo
+     */
+    @Override
+    public List<IotXycbPolylineResVo> getXycbPolyline(IotXycbReqVo iotXycbReqVo) {
+        String devBid = iotXycbReqVo.getDevBid();
+        if (StringUtils.isEmpty(devBid)) {
+            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备标识不能为空");
+        }
+        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devBid);
+        if(iotDevice == null){
+            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备不存在");
+        }
+
+        List<IotXycbPolylineResVo> iotXycbPolylineResVoList = new ArrayList<>();
+//        if (IotDeviceDictConst.TYPE_YF_XYCB_2.equals(iotDevice.getDevtypeBid())) {
+//            iotXycbPolylineResVoList = getXycb2Polyline(iotXycbReqVo);
+//        }else if (IotDeviceDictConst.TYPE_ZJSF_XYCB.equals(iotDevice.getDevtypeBid())) {
+//            iotXycbPolylineResVoList = getZjsfXycbPolyline(iotXycbReqVo);
+//        }else if (IotDeviceDictConst.TYPE_YF_XYCB_III.equals(iotDevice.getDevtypeBid())) {
+//            iotXycbPolylineResVoList = getXycbIIIolyline(iotXycbReqVo);
+//        }
+        if (IotDeviceDictConst.TYPE_YF_XYCB_III.equals(iotDevice.getDevtypeBid())) {
+            iotXycbPolylineResVoList = getXycbIIIolyline(iotXycbReqVo);
+        }
+        return iotXycbPolylineResVoList;
+    }
+
+
+//    /**
+//     * 性诱测报2.0
+//     * @param reqVo
+//     * @return
+//     */
+//    private IPage<IotYfXycbDataListRspVo> getYfXycb2DataList(IotXycbReqVo reqVo){
+//        String devBid = reqVo.getDevBid();
+//
+//        Map<String, Object> cases = new HashMap<>();
+//        cases.put("devBid", devBid);
+//
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isEmpty(reqVo.getEndDate())) {
+//            cases.put("gte_xycb2dataCreatedDate", reqVo.getStartDate());
+//        }
+//        if (StringUtils.isEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("lte_xycb2dataCreatedDate", reqVo.getEndDate());
+//        }
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("time_xycb2dataCreatedDate", reqVo.getStartDate() + "," + reqVo.getEndDate());
+//        }
+//        cases.remove("startDate");
+//        cases.remove("endDate");
+//
+//        PageDomain pageDomain = TableSupport.buildPageRequest();
+//        if(Objects.equals(pageDomain.getOrderByColumn(), "xycbdataCreatedDate")){
+//            pageDomain.setOrderByColumn("xycb2dataCreatedDate");
+//        }
+//
+//        IPage listPage = mongoService.findListPage(IotYfXycb2data.class, cases, pageDomain);
+//        List<IotYfXycb2data> iotYfXycb2dataList = listPage.getRecords();
+//        List<IotYfXycbDataListRspVo> iotYfXycbDataListRspVoList = new ArrayList<>();
+//        for(IotYfXycb2data iotYfXycb2data: iotYfXycb2dataList){
+//            JSONObject jsonObject = iotYfXycb2data.getXycb2dataContent();
+//            String cs = "0";
+//            if(!Objects.equals(jsonObject.getInteger("b_c"), 0)){
+//                cs = "1";
+//            }
+//            IotYfXycbDataListRspVo xycbDataListRspVo = new IotYfXycbDataListRspVo();
+//            xycbDataListRspVo.setDevBid(devBid);
+//            xycbDataListRspVo.setDs("1");
+//            xycbDataListRspVo.setWs("1");
+//            xycbDataListRspVo.setAt(jsonObject.getString("at"));
+//            xycbDataListRspVo.setAh(jsonObject.getString("ah"));
+//            xycbDataListRspVo.setBs("0");
+//            xycbDataListRspVo.setCs(cs);
+//            xycbDataListRspVo.setCv("0");
+//            xycbDataListRspVo.setBv(jsonObject.getString("b_v"));
+//            xycbDataListRspVo.setCt((String) jsonObject.getOrDefault("ct", "0"));
+//            xycbDataListRspVo.setCreatedDate(iotYfXycb2data.getXycb2dataCreatedDate());
+//
+//            iotYfXycbDataListRspVoList.add(xycbDataListRspVo);
+//        }
+//        listPage.setRecords(iotYfXycbDataListRspVoList);
+//
+//        return listPage;
+//    }
+//
+
+//
+//    /**
+//     * 性诱测报2.0
+//     * @param reqVo
+//     * @return
+//     */
+//    private IPage<IotYfXycbDataListRspVo> getZjsfXycbDataList(IotXycbReqVo reqVo){
+//        String devBid = reqVo.getDevBid();
+//
+//        Map<String, Object> cases = new HashMap<>();
+//        cases.put("devBid", devBid);
+//
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isEmpty(reqVo.getEndDate())) {
+//            cases.put("gte_xycbdataCreatedDate", reqVo.getStartDate());
+//        }
+//        if (StringUtils.isEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("lte_xycbdataCreatedDate", reqVo.getEndDate());
+//        }
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("time_xycbdataCreatedDate", reqVo.getStartDate() + "," + reqVo.getEndDate());
+//        }
+//        cases.remove("startDate");
+//        cases.remove("endDate");
+//
+//        PageDomain pageDomain = TableSupport.buildPageRequest();
+//        if(Objects.equals(pageDomain.getOrderByColumn(), "xycbdataCreatedDate")){
+//            pageDomain.setOrderByColumn("xycbdataCreatedDate");
+//        }
+//
+//        IPage listPage = mongoService.findListPage(IotZjsfXycbdata.class, cases, pageDomain);
+//        List<IotZjsfXycbdata> iotZjsfXycbdataList = listPage.getRecords();
+//
+//        List<IotYfXycbDataListRspVo> iotYfXycbDataListRspVoList = new ArrayList<>();
+//        for(IotZjsfXycbdata iotZjsfXycbdata: iotZjsfXycbdataList){
+//            JSONObject jsonObject = iotZjsfXycbdata.getXycbdataContent();
+//            String cs = "0";
+//            if(Objects.equals(jsonObject.getInteger("cs"), 2)){
+//                cs = "1";
+//            }
+//            IotZjsfXycbDataListRspVo xycbDataListRspVo = new IotZjsfXycbDataListRspVo();
+//            xycbDataListRspVo.setDevBid(devBid);
+//            xycbDataListRspVo.setDs("1");
+//            xycbDataListRspVo.setWs("1");
+//            xycbDataListRspVo.setAt(jsonObject.getString("at"));
+//            xycbDataListRspVo.setAh(jsonObject.getString("ah"));
+//            xycbDataListRspVo.setBs("0");
+//            xycbDataListRspVo.setCs(cs);
+//            xycbDataListRspVo.setCv("0");
+//            xycbDataListRspVo.setBv(jsonObject.getString("b_v"));
+//            xycbDataListRspVo.setLp(jsonObject.getString("lp"));
+//            xycbDataListRspVo.setLt(jsonObject.getString("lt"));
+//            xycbDataListRspVo.setSs(jsonObject.getString("ss"));
+//            xycbDataListRspVo.setWin(jsonObject.getString("win"));
+//            xycbDataListRspVo.setWin_speed(jsonObject.getString("win_speed"));
+//            xycbDataListRspVo.setCt((String) jsonObject.getOrDefault("ct", "0"));
+//
+//
+//            xycbDataListRspVo.setCreatedDate(iotZjsfXycbdata.getXycbdataCreatedDate());
+//
+//            iotYfXycbDataListRspVoList.add(xycbDataListRspVo);
+//        }
+//        listPage.setRecords(iotYfXycbDataListRspVoList);
+//
+//        return listPage;
+//    }
+//
+//
+//    /**
+//     * 性诱测报2.0   工作数据导出
+//     * @param reqVo
+//     * @return
+//     */
+//    public List<IotYfXycbDataListRspVo> exportDataList(IotXycbReqVo reqVo ,IotDeviceResVo device){
+//        String devBid = reqVo.getDevBid();
+//
+//        Map<String, Object> cases = new HashMap<>();
+//        cases.put("devBid", devBid);
+//
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isEmpty(reqVo.getEndDate())) {
+//            cases.put("gte_xycb2dataCreatedDate", reqVo.getStartDate());
+//        }
+//        if (StringUtils.isEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("lte_xycb2dataCreatedDate", reqVo.getEndDate());
+//        }
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("time_xycb2dataCreatedDate", reqVo.getStartDate() + "," + reqVo.getEndDate());
+//        }
+//        cases.remove("startDate");
+//        cases.remove("endDate");
+//
+//        List<IotYfXycb2data> iotYfXycb2dataList = mongoService.findAll(IotYfXycb2data.class, cases, "xycb2dataCreatedDate desc");
+//        List<IotYfXycbDataListRspVo> iotYfXycbDataListRspVoList = new ArrayList<>();
+//        int i=0;
+//        for(IotYfXycb2data iotYfXycb2data: iotYfXycb2dataList){
+//            i++;
+//            JSONObject jsonObject = iotYfXycb2data.getXycb2dataContent();
+//            String cs = "0";
+//            if(!Objects.equals(jsonObject.getInteger("b_c"), 0)){
+//                cs = "1";
+//            }
+//            IotYfXycbDataListRspVo xycbDataListRspVo = new IotYfXycbDataListRspVo();
+//            xycbDataListRspVo.setDevBid(devBid);
+//            xycbDataListRspVo.setDs("1");
+//            xycbDataListRspVo.setWs("1");
+//            xycbDataListRspVo.setAt(jsonObject.getString("at"));
+//            xycbDataListRspVo.setAh(jsonObject.getString("ah"));
+//            xycbDataListRspVo.setBs("0");
+//            xycbDataListRspVo.setCs(cs);
+//            xycbDataListRspVo.setCv("0");
+//            xycbDataListRspVo.setBv(jsonObject.getString("b_v"));
+//            xycbDataListRspVo.setCt((String) jsonObject.getOrDefault("ct", "0"));
+//            xycbDataListRspVo.setCreatedDate(iotYfXycb2data.getXycb2dataCreatedDate());
+//
+//            xycbDataListRspVo.setId(""+i);
+//            xycbDataListRspVo.setDevCode(device.getDevCode());
+//
+//            iotYfXycbDataListRspVoList.add(xycbDataListRspVo);
+//        }
+//
+//        return iotYfXycbDataListRspVoList;
+//    }
+//
+//    @Override
+//    public List<IotYfXycbDataListRspVo> exportXYIIIDataList(IotXycbReqVo reqVo ,IotDeviceResVo device){
+//        String devBid = reqVo.getDevBid();
+//
+//        Map<String, Object> cases = new HashMap<>();
+//        cases.put("devBid", devBid);
+//
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isEmpty(reqVo.getEndDate())) {
+//            cases.put("gte_xycbdataCreatedDate", reqVo.getStartDate());
+//        }
+//        if (StringUtils.isEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("lte_xycbdataCreatedDate", reqVo.getEndDate());
+//        }
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("time_xycbdataCreatedDate", reqVo.getStartDate() + "," + reqVo.getEndDate());
+//        }
+//        cases.remove("startDate");
+//        cases.remove("endDate");
+//
+//        List<IotYfXycbIIIdata> iotYfXycb2dataList = mongoService.findAll(IotYfXycbIIIdata.class, cases, "xycbdataCreatedDate desc");
+//        List<IotYfXycbDataListRspVo> iotYfXycbDataListRspVoList = new ArrayList<>();
+//        int i=0;
+//        for(IotYfXycbIIIdata iotYfXycb2data: iotYfXycb2dataList){
+//            i++;
+//            JSONObject jsonObject = iotYfXycb2data.getXycbdataContent();
+//            String cs = "0";
+//            if(!Objects.equals(jsonObject.getInteger("b_c"), 0)){
+//                cs = "1";
+//            }
+//            IotYfXycbDataListRspVo xycbDataListRspVo = new IotYfXycbDataListRspVo();
+//            xycbDataListRspVo.setDevBid(devBid);
+//            xycbDataListRspVo.setDs("1");
+//            xycbDataListRspVo.setWs("1");
+//            xycbDataListRspVo.setAt(jsonObject.getString("at"));
+//            xycbDataListRspVo.setAh(jsonObject.getString("ah"));
+//            xycbDataListRspVo.setBs("0");
+//            xycbDataListRspVo.setCs(cs);
+//            xycbDataListRspVo.setCv("0");
+//            xycbDataListRspVo.setBv(jsonObject.getString("b_v"));
+//            xycbDataListRspVo.setCt((String) jsonObject.getOrDefault("infr_ct", "0"));
+//            xycbDataListRspVo.setCreatedDate(iotYfXycb2data.getXycbdataCreatedDate());
+//
+//            xycbDataListRspVo.setId(""+i);
+//            xycbDataListRspVo.setDevCode(device.getDevCode());
+//
+//            iotYfXycbDataListRspVoList.add(xycbDataListRspVo);
+//        }
+//
+//        return iotYfXycbDataListRspVoList;
+//    }
+//    /**
+//     * @param
+//     * @return
+//     */
+//    @Override
+//    public IPage getImageList(IotXycbReqVo reqVo) {
+//        String devBid = reqVo.getDevBid();
+//        if (StringUtils.isEmpty(devBid)) {
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备标识不能为空");
+//        }
+//        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devBid);
+//        if(iotDevice == null){
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备不存在");
+//        }
+//
+//        Map<String, Object> cases = new HashMap<>();
+//        cases.put("devBid", devBid);
+//        cases.put("xycbimgDelstatus", "0");
+//
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isEmpty(reqVo.getEndDate())) {
+//            cases.put("gte_xycbimgCreatedDate", reqVo.getStartDate());
+//        }
+//        if (StringUtils.isEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("lte_xycbimgCreatedDate", reqVo.getEndDate());
+//        }
+//        if (StringUtils.isNotEmpty(reqVo.getStartDate()) && StringUtils.isNotEmpty(reqVo.getEndDate())) {
+//            cases.put("time_xycbimgCreatedDate", reqVo.getStartDate() + "," + reqVo.getEndDate());
+//        }
+//        cases.remove("startDate");
+//        cases.remove("endDate");
+//
+//        PageDomain pageDomain = TableSupport.buildPageRequest();
+//        pageDomain.setOrderByColumn("xycbimgCreatedDate");
+//        pageDomain.setIsAsc("desc");
+//
+//        IPage listPage = mongoService.findListPage(IotXycbimg.class, cases, pageDomain);
+//        List records = listPage.getRecords();
+//        List<IotXycbimgListResVo> iotXycbimgListResVoList = new ArrayList<>();
+//        for (Object obj : records) {
+//            IotXycbimg iotXycbimg = (IotXycbimg) obj;
+//            IotXycbimgListResVo iotXycbimgListResVo = new IotXycbimgListResVo();
+//            iotXycbimgListResVo.setDevBid(iotXycbimg.getDevBid());
+//            iotXycbimgListResVo.setXycbimgBid(iotXycbimg.getXycbimgBid());
+//            iotXycbimgListResVo.setXycbimgAddr(iotXycbimg.getXycbimgAddr());
+//            iotXycbimgListResVo.setXycbimgCreatedDate(iotXycbimg.getXycbimgCreatedDate());
+//
+//            iotXycbimgListResVoList.add(iotXycbimgListResVo);
+//        }
+//        listPage.setRecords(iotXycbimgListResVoList);
+//
+//        return listPage;
+//    }
+//
+//    /**
+//     * @param xycbimgBid
+//     * @return
+//     */
+//    @Override
+//    public void imageDelete(String xycbimgBid) {
+//        Map<String, String> selectMap = new HashMap<>();
+//        selectMap.put("xycbimgBid", xycbimgBid);
+//        IotXycbimg iotXycbimg = (IotXycbimg) mongoService.findOne(IotXycbimg.class, selectMap, null, null);
+//        if(iotXycbimg == null){
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "图片不存在");
+//        }
+//
+//        Criteria criteria = Criteria.where("xycbimgBid").is(xycbimgBid);
+//        Query query = new Query(criteria);
+//
+//        Map<String, Object> updateField = new HashMap<>();
+//        updateField.put("xycbimgDelstatus", "1");
+//        updateField.put("xycbimgModifieddate", DateUtils.dateTimeNow());
+//
+//        mongoService.update(IotXycbimg.class, query, updateField);
+//    }
+//
+//
+//
+//    /**
+//     * 性诱测报2.0
+//     * @param
+//     */
+//    public List<IotXycbPolylineResVo> getXycb2Polyline(IotXycbReqVo reqVo){
+//        String devBid = reqVo.getDevBid();
+//        String startDate = reqVo.getStartDate();
+//        String endDate = reqVo.getEndDate();
+//
+//        String unit = "day";
+//        Criteria criteria = new Criteria().and("devBid").is(devBid);
+//        if (StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)) {
+//            criteria = criteria.andOperator(
+//                    Criteria.where("xycb2dataCreatedDate").gte(startDate),
+//                    Criteria.where("xycb2dataCreatedDate").lte(endDate)
+//            );
+//            long diffTime = DateUtils.parseDate(endDate).getTime() - DateUtils.parseDate(startDate).getTime();
+//            if (diffTime <= 48 * 60 * 60 * 1000) {
+//                unit = "minute";
+//            } else if (diffTime <= 30L * 24 * 60 * 60 * 1000) {
+//                unit = "hour";
+//            }
+//        } else if (StringUtils.isNotEmpty(startDate)) {
+//            criteria = criteria.and("xycb2dataCreatedDate").gte(startDate);
+//        } else if (StringUtils.isNotEmpty(endDate)) {
+//            criteria = criteria.and("xycb2dataCreatedDate").lte(endDate);
+//        }
+//        MatchOperation matchOperation = Aggregation.match(criteria);
+//
+//        ProjectionOperation projectionOperation = Aggregation.project()
+//                .and("xycb2dataContent.ah").as("ah")
+//                .and("xycb2dataContent.at").as("at")
+//                .and("xycb2dataContent.ct").as("ct")
+//                .and("xycb2dataCreatedDate").as("createDate");
+//
+//        ProjectionOperation projectionOperation2 = Aggregation.project()
+//                .andExpression("{$convert: {input: '$ct', to: 'int', onError: 0, onNull: 0}}").as("ct")
+//                .andExpression("{$convert: {input: '$at', to: 'double', onError: -99, onNull: -99}}").as("at")
+//                .andExpression("{$convert: {input: '$ah', to: 'double', onError: -99, onNull: -99}}").as("ah")
+//                .andExpression("{$dateTrunc: {date: {$toDate: '$createDate'}, unit:'" + unit + "'}}").as("createDate");
+//
+//        GroupOperation groupOperation = Aggregation.group("createDate")
+//                .avg("ah").as("ah")
+//                .avg("at").as("at")
+//                .sum("ct").as("ct");
+//
+//        ProjectionOperation projectionOperation3 = Aggregation.project("ct")
+//                .andExpression("{$trunc: {'$ah', 1}}").as("ah")
+//                .andExpression("{$trunc: {'$at', 1}}").as("at")
+//                .andExpression("{$dateToString: {format: '%Y-%m-%d %H:%M:%S', date: '$_id'}}").as("createDate");
+//
+//        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "createDate");
+//
+//        Aggregation aggregation = Aggregation.newAggregation(
+//                matchOperation,
+//                projectionOperation,
+//                projectionOperation2,
+//                groupOperation,
+//                projectionOperation3,
+//                sortOperation
+//        );
+//
+//        List<IotXycbPolylineResVo> iotXycbPolylineResVos = mongoService.aggregate(
+//                IotYfXycb2data.class, aggregation, IotXycbPolylineResVo.class
+//        );
+//        return iotXycbPolylineResVos;
+//    }
+//
+
+//
+//    /**
+//     * 性诱测报2.0
+//     * @param
+//     */
+//    public List<IotXycbPolylineResVo> getZjsfXycbPolyline(IotXycbReqVo reqVo){
+//        String devBid = reqVo.getDevBid();
+//        String startDate = reqVo.getStartDate();
+//        String endDate = reqVo.getEndDate();
+//
+//        String unit = "day";
+//        Criteria criteria = new Criteria().and("devBid").is(devBid);
+//        if (StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)) {
+//            criteria = criteria.andOperator(
+//                    Criteria.where("xycbdataCreatedDate").gte(startDate),
+//                    Criteria.where("xycbdataCreatedDate").lte(endDate)
+//            );
+//            long diffTime = DateUtils.parseDate(endDate).getTime() - DateUtils.parseDate(startDate).getTime();
+//            if (diffTime <= 48 * 60 * 60 * 1000) {
+//                unit = "minute";
+//            } else if (diffTime <= 30L * 24 * 60 * 60 * 1000) {
+//                unit = "hour";
+//            }
+//        } else if (StringUtils.isNotEmpty(startDate)) {
+//            criteria = criteria.and("xycbdataCreatedDate").gte(startDate);
+//        } else if (StringUtils.isNotEmpty(endDate)) {
+//            criteria = criteria.and("xycbdataCreatedDate").lte(endDate);
+//        }
+//        MatchOperation matchOperation = Aggregation.match(criteria);
+//
+//        ProjectionOperation projectionOperation = Aggregation.project()
+//                .and("xycbdataContent.ah").as("ah")
+//                .and("xycbdataContent.at").as("at")
+//                .and("xycbdataContent.ct").as("ct")
+//                .and("xycbdataCreatedDate").as("createDate");
+//
+//        ProjectionOperation projectionOperation2 = Aggregation.project()
+//                .andExpression("{$convert: {input: '$ct', to: 'int', onError: 0, onNull: 0}}").as("ct")
+//                .andExpression("{$convert: {input: '$at', to: 'double', onError: -99, onNull: -99}}").as("at")
+//                .andExpression("{$convert: {input: '$ah', to: 'double', onError: -99, onNull: -99}}").as("ah")
+//                .andExpression("{$dateTrunc: {date: {$toDate: '$createDate'}, unit:'" + unit + "'}}").as("createDate");
+//
+//        GroupOperation groupOperation = Aggregation.group("createDate")
+//                .avg("ah").as("ah")
+//                .avg("at").as("at")
+//                .sum("ct").as("ct");
+//
+//        ProjectionOperation projectionOperation3 = Aggregation.project("ct")
+//                .andExpression("{$trunc: {'$ah', 1}}").as("ah")
+//                .andExpression("{$trunc: {'$at', 1}}").as("at")
+//                .andExpression("{$dateToString: {format: '%Y-%m-%d %H:%M:%S', date: '$_id'}}").as("createDate");
+//
+//        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "createDate");
+//
+//        Aggregation aggregation = Aggregation.newAggregation(
+//                matchOperation,
+//                projectionOperation,
+//                projectionOperation2,
+//                groupOperation,
+//                projectionOperation3,
+//                sortOperation
+//        );
+//
+//        List<IotXycbPolylineResVo> iotXycbPolylineResVos = mongoService.aggregate(
+//                IotZjsfXycbdata.class, aggregation, IotXycbPolylineResVo.class
+//        );
+//        return iotXycbPolylineResVos;
+//    }
+//
+
+//
+//    private IotXycbInfoResVo getXycb2Info(String devBid, IotXycbInfoResVo iotXycbInfoResVo){
+//        HashMap<String, String> params = new HashMap<>();
+//        params.put("devBid", devBid);
+//
+//        IotYfXycb2data iotYfXycb2data = (IotYfXycb2data) mongoService.findOne(IotYfXycb2data.class, params, "xycb2dataCreatedDate", "desc");
+//        if(iotYfXycb2data != null){
+//            JSONObject xyData = iotYfXycb2data.getXycb2dataContent();
+//            iotXycbInfoResVo.setAt(xyData.getString("at"));
+//            iotXycbInfoResVo.setAh(xyData.getString("ah"));
+//        }
+//
+//        List<String> devBidList = new ArrayList<>();
+//        devBidList.add(devBid);
+//
+//        Map<String, IotXyinfoPestTotalDto>  iotXyinfoPestTotalDtoMap = iIotPestrecogService.getIotXyinfoPestTotalMap(devBidList);
+//        if(iotXyinfoPestTotalDtoMap.containsKey(devBid)){
+//            iotXycbInfoResVo.setPestTotal(String.valueOf(iotXyinfoPestTotalDtoMap.get(devBid).getPestTotal()));
+//        }
+//        return iotXycbInfoResVo;
+//    }
+//    private IotXycbInfoResVo getXycbIIIInfo(String devBid, IotXycbInfoResVo iotXycbInfoResVo){
+//        HashMap<String, String> params = new HashMap<>();
+//        params.put("devBid", devBid);
+//
+//        IotYfXycbIIIdata iotYfXycb2data = (IotYfXycbIIIdata) mongoService.findOne(IotYfXycbIIIdata.class, params, "xycbdataCreatedDate", "desc");
+//        if(iotYfXycb2data != null){
+//            JSONObject xyData = iotYfXycb2data.getXycbdataContent();
+//            iotXycbInfoResVo.setAt(xyData.getString("at"));
+//            iotXycbInfoResVo.setAh(xyData.getString("ah"));
+//        }
+//
+//        List<String> devBidList = new ArrayList<>();
+//        devBidList.add(devBid);
+//
+//        Map<String, IotXyinfoPestTotalDto>  iotXyinfoPestTotalDtoMap = iIotPestrecogService.getIotXyIIIinfoPestTotalMap(devBidList);
+//        if(iotXyinfoPestTotalDtoMap.containsKey(devBid)){
+//            iotXycbInfoResVo.setPestTotal(String.valueOf(iotXyinfoPestTotalDtoMap.get(devBid).getPestTotal()));
+//        }
+//        return iotXycbInfoResVo;
+//    }
+//    private IotXycbInfoResVo getZjsfXycbInfo(String devBid, IotXycbInfoResVo iotXycbInfoResVo){
+//        HashMap<String, String> params = new HashMap<>();
+//        params.put("devBid", devBid);
+//
+//        IotZjsfXycbdata iotZjsfXycbdata = (IotZjsfXycbdata) mongoService.findOne(
+//                IotZjsfXycbdata.class, params, "xycbdataCreatedDate", "desc");
+//        if(iotZjsfXycbdata != null){
+//            JSONObject xyData = iotZjsfXycbdata.getXycbdataContent();
+//            iotXycbInfoResVo.setAt(xyData.getString("at"));
+//            iotXycbInfoResVo.setAh(xyData.getString("ah"));
+//        }
+//
+//        List<String> devBidList = new ArrayList<>();
+//        devBidList.add(devBid);
+//
+//        Map<String, IotXyinfoPestTotalDto>  iotXyinfoPestTotalDtoMap = iIotPestrecogService.getIotXyinfoPestTotalMap(devBidList);
+//        iotXycbInfoResVo.setPestTotal("0");
+//        if(iotXyinfoPestTotalDtoMap.containsKey(devBid)){
+//            Integer pestTotal = iotXyinfoPestTotalDtoMap.get(devBid).getPestTotal();
+//            if(pestTotal == null){
+//                pestTotal = 0;
+//            }
+//            iotXycbInfoResVo.setPestTotal(String.valueOf(pestTotal));
+//        }
+//        return iotXycbInfoResVo;
+//    }
+//
+//    /**
+//     * 获取性诱测报信息
+//     *
+//     * @param devBid
+//     */
+//    @Override
+//    public IotXycbInfoResVo getXycbInfo(String devBid) {
+//        if (StringUtils.isEmpty(devBid)) {
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备标识不能为空");
+//        }
+//        IotDevice iotDevice = iIotDeviceService.findOneByBizId(devBid);
+//        if(iotDevice == null){
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备不存在");
+//        }
+//
+//        IotXycbInfoResVo iotXycbInfoResVo = new IotXycbInfoResVo();
+//        iotXycbInfoResVo.setDevStatus(iotDevice.getDevStatus());
+//
+//        IotXyinfoDto iotXyinfoDto = iIotXyinfoService.selectIotXyinfoByDevBid(devBid);
+//        if(iotXyinfoDto != null){
+//            iotXycbInfoResVo.setXyinfoLurename(iotXyinfoDto.getXyinfoLurename());
+//            iotXycbInfoResVo.setXyinfoLureexpireddate(iotXyinfoDto.getXyinfoLureexpireddate());
+//        }
+//
+//        String province = StringUtils.isEmpty(iotDevice.getDevProvincealign()) ? iotDevice.getDevProvince(): iotDevice.getDevProvincealign();
+//        String city = StringUtils.isEmpty(iotDevice.getDevCityalign()) ? iotDevice.getDevCity(): iotDevice.getDevCityalign();
+//        String district = StringUtils.isEmpty(iotDevice.getDevDistrictalign()) ? iotDevice.getDevDistrict(): iotDevice.getDevDistrictalign();
+//        if(StringUtils.isNotEmpty(province) && StringUtils.isNotEmpty(city)){
+//            JSONObject weatherInfo = iotWeatherService.getWeatherByAddress(province, city, district);
+//            iotXycbInfoResVo.setWea(weatherInfo.getString("wea"));
+//            iotXycbInfoResVo.setWin(weatherInfo.getString("win"));
+//            iotXycbInfoResVo.setWin_speed(weatherInfo.getString("win_speed"));
+//            String rainStatusName = !Objects.equals(weatherInfo.getString("rain_pcpn"), "0") ? "是" : "否";
+//            iotXycbInfoResVo.setRainStatusName(rainStatusName);
+//        }
+//
+//        if (IotDeviceDictConst.TYPE_YF_XYCB_2.equals(iotDevice.getDevtypeBid())) {
+//            iotXycbInfoResVo = getXycb2Info(devBid, iotXycbInfoResVo);
+//        }else if (IotDeviceDictConst.TYPE_ZJSF_XYCB.equals(iotDevice.getDevtypeBid())){
+//            iotXycbInfoResVo = getZjsfXycbInfo(devBid, iotXycbInfoResVo);
+//        }else if (IotDeviceDictConst.TYPE_YF_XYCB_III.equals(iotDevice.getDevtypeBid())){
+//            iotXycbInfoResVo = getXycbIIIInfo(devBid, iotXycbInfoResVo);
+//        }
+//        return iotXycbInfoResVo;
+//    }
+//
+//    /**
+//     * 修改诱芯信息
+//     *
+//     * @param iotXycbModifyLureReqVo
+//     */
+//    @Override
+//    public int modifyLure(IotXycbModifyLureReqVo iotXycbModifyLureReqVo) {
+//        String devBid = iotXycbModifyLureReqVo.getDevBid();
+//        String pestBusid = iotXycbModifyLureReqVo.getPestBusid();
+//        IotPest iotPest = iotPestService.selectIotPestByPestBid(pestBusid);
+//        if(iotPest == null){
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "诱芯不存在");
+//        }
+//        IotXyinfoDto iotXyinfoDto = iIotXyinfoService.selectIotXyinfoByDevBid(devBid);
+//
+//        IotXyinfo iotXyinfo = new IotXyinfo();
+//        iotXyinfo.setDevBid(iotXycbModifyLureReqVo.getDevBid());
+//        iotXyinfo.setPestBusid(iotPest.getPestBid());
+//        iotXyinfo.setXyinfoLurename(iotPest.getPestName());
+//        iotXyinfo.setXyinfoLureexpireddate(iotXycbModifyLureReqVo.getXyinfoLureexpireddate());
+//        iotXyinfo.setXyinfoModifier(SecurityUtils.getUserId());
+//        iotXyinfo.setXyinfoModifieddate(DateUtils.dateTimeNow());
+//
+//        int status = 0;
+//        if(iotXyinfoDto == null){
+//            iotXyinfo.setXyinfoBid(iotXyinfo.getUUId());
+//            iotXyinfo.setXyinfoCreator(SecurityUtils.getUserId());
+//            iotXyinfo.setXyinfoCreatedDate(DateUtils.dateTimeNow());
+//            iotXyinfo.setXyinfoDelstatus("0");
+//
+//            status = iIotXyinfoService.insertIotXyinfo(iotXyinfo);
+//        }else{
+//            status = iIotXyinfoService.updateIotXyinfo(iotXyinfo);
+//        }
+//
+//        return status;
+//    }
+//
+//    /**
+//     * 获取诱芯列表
+//     *
+//     * @param iotXycbLureListReqVo
+//     * @return
+//     */
+//    @Override
+//    public List<IotXycbLureListRspVo> getLureList(IotXycbLureListReqVo iotXycbLureListReqVo) {
+//        IotPest selectIotPest = new IotPest();
+//        selectIotPest.setPestName(iotXycbLureListReqVo.getPestName());
+//
+//        startPage();
+//        List<IotPest> iotPestList = iotPestService.selectIotPestList(selectIotPest);
+//        List<IotXycbLureListRspVo> iotXycbLureListRspVoList = new ArrayList<>();
+//        for(IotPest iotPest: iotPestList){
+//            IotXycbLureListRspVo iotXycbLureListRspVo = new IotXycbLureListRspVo();
+//            iotXycbLureListRspVo.setPestName(iotPest.getPestName());
+//            iotXycbLureListRspVo.setPestBusid(iotPest.getPestBid());
+//
+//            iotXycbLureListRspVoList.add(iotXycbLureListRspVo);
+//        }
+//        return iotXycbLureListRspVoList;
+//    }
+
+
+}

+ 77 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/impl/IotXyinfoServiceImpl.java

@@ -0,0 +1,77 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.service.impl;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotXyinfo;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXyinfoDto;
+import com.yunfeiyun.agmp.iotm.device.xycb.service.IIotXyinfoService;
+import com.yunfeiyun.agmp.iotm.web.mapper.IotXyinfoMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 性诱测报详细信息Service业务层处理
+ * 
+ * @author 杨晓辉
+ * @date 2024-06-03
+ */
+@Service
+public class IotXyinfoServiceImpl implements IIotXyinfoService
+{
+    @Autowired
+    private IotXyinfoMapper iotXyinfoMapper;
+
+    /**
+     * 查询性诱测报详细信息列表
+     *
+     * @param iotXyinfo 性诱测报详细信息
+     * @return 性诱测报详细信息集合
+     */
+    @Override
+    public List<IotXyinfo> selectIotXyinfoList(IotXyinfo iotXyinfo) {
+        return iotXyinfoMapper.selectIotXyinfoList(iotXyinfo);
+    }
+
+    /**
+     * 查询性诱测报详细信息列表
+     *
+     * @param devBidList@return 性诱测报详细信息集合
+     */
+    @Override
+    public List<IotXyinfoDto> selectIotXyinfoListByDevBidList(List<String> devBidList) {
+        return iotXyinfoMapper.selectIotXyinfoListByDevBidList(devBidList);
+    }
+
+    /**
+     * 查询性诱测报详细信息
+     *
+     * @param devBid@return 性诱测报详细信息集合
+     */
+    @Override
+    public IotXyinfoDto selectIotXyinfoByDevBid(String devBid) {
+        return iotXyinfoMapper.selectIotXyinfoByDevBid(devBid);
+    }
+
+    /**
+     * 更新性诱信息
+     *
+     * @param iotXyinfo
+     * @return
+     */
+    @Override
+    public int updateIotXyinfo(IotXyinfo iotXyinfo) {
+        return iotXyinfoMapper.updateIotXyinfo(iotXyinfo);
+    }
+
+    /**
+     * 创建性诱信息
+     *
+     * @param iotXyinfo
+     * @return
+     */
+    @Override
+    public int insertIotXyinfo(IotXyinfo iotXyinfo) {
+        return iotXyinfoMapper.insertIotXyinfo(iotXyinfo);
+    }
+
+}

+ 54 - 0
src/main/java/com/yunfeiyun/agmp/iotm/web/mapper/IotXyinfoMapper.java

@@ -0,0 +1,54 @@
+package com.yunfeiyun.agmp.iotm.web.mapper;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotXyinfo;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXyinfoDto;
+
+import java.util.List;
+
+/**
+ * 性诱测报详细信息Mapper接口
+ * 
+ * @author 杨晓辉
+ * @date 2024-06-03
+ */
+public interface IotXyinfoMapper 
+{
+
+    /**
+     * 查询性诱测报详细信息列表
+     * 
+     * @param iotXyinfo 性诱测报详细信息
+     * @return 性诱测报详细信息集合
+     */
+    public List<IotXyinfo> selectIotXyinfoList(IotXyinfo iotXyinfo);
+
+    /**
+     * 查询性诱测报详细信息列表
+     *
+     * @param iotXyinfo 性诱测报详细信息
+     * @return 性诱测报详细信息集合
+     */
+    public List<IotXyinfoDto> selectIotXyinfoListByDevBidList(List<String> devBidList);
+
+    /**
+     * 查询性诱测报详细信息
+     *
+     * @param
+     * @return 性诱测报详细信息
+     */
+    public IotXyinfoDto selectIotXyinfoByDevBid(String devBid);
+
+    /**
+     * 更新性诱信息
+     * @param iotXyinfo
+     * @return
+     */
+    public int updateIotXyinfo(IotXyinfo iotXyinfo);
+
+    /**
+     * 创建性诱信息
+     * @param iotXyinfo
+     * @return
+     */
+    public int insertIotXyinfo(IotXyinfo iotXyinfo);
+}

+ 135 - 0
src/main/resources/mapper/IotSporeMapper.xml

@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yunfeiyun.agmp.iotm.web.mapper.IotSporeMapper">
+
+    <resultMap type="IotSpore" id="IotSporeResult">
+        <result property="id"    column="id"    />
+        <result property="sporeBid"    column="sporeBid"    />
+        <result property="cId"    column="cId"    />
+        <result property="sporeName"    column="sporeName"    />
+        <result property="sporeId"    column="sporeId"    />
+        <result property="sporeRemark"    column="sporeRemark"    />
+        <result property="sporeCreator"    column="sporeCreator"    />
+        <result property="sporeModifier"    column="sporeModifier"    />
+        <result property="sporeModifieddate"    column="sporeModifieddate"    />
+        <result property="sporeCreatedDate"    column="sporeCreatedDate"    />
+        <result property="sporeDelstatus"    column="sporeDelstatus"    />
+        <result property="sporeType"    column="sporeType"    />
+    </resultMap>
+
+    <sql id="selectIotSporeVo">
+        select id, sporeBid, cId, sporeName, sporeId, sporeRemark
+        , sporeCreator, sporeModifier, sporeModifieddate, sporeCreatedDate, sporeDelstatus
+        , sporeType
+        from IotSpore
+    </sql>
+
+    <select id="selectIotSporeList" parameterType="IotSpore" resultMap="IotSporeResult">
+        <include refid="selectIotSporeVo"/>
+        <where>
+            sporeDelstatus = 0
+            <if test="sporeBid != null  and sporeBid != ''"> and sporeBid = #{sporeBid}</if>
+            <if test="cId != null  and cId != ''"> and cId = #{cId}</if>
+            <if test="sporeType != null  and sporeType != ''"> and sporeType = #{sporeType}</if>
+            <if test="sporeName != null  and sporeName != ''"> and sporeName like concat('%', #{sporeName}, '%')</if>
+            <if test="sporeId != null  and sporeId != ''"> and sporeId = #{sporeId}</if>
+            <if test="sporeRemark != null  and sporeRemark != ''"> and sporeRemark like concat('%', #{sporeRemark}, '%')</if>
+        </where>
+    </select>
+
+    <select id="selectIotSporeByPestBid" parameterType="String" resultMap="IotSporeResult">
+        <include refid="selectIotSporeVo"/>
+        where sporeBid = #{sporeBid}
+    </select>
+
+    <select id="selectIotSporeByPestId" parameterType="String" resultMap="IotSporeResult">
+        <include refid="selectIotSporeVo"/>
+        where sporeId = #{sporeId}
+    </select>
+
+    <insert id="insertIotSpore" parameterType="IotSpore" useGeneratedKeys="true" keyProperty="id">
+        insert into IotSpore
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="sporeBid != null and sporeBid != ''">sporeBid,</if>
+            <if test="cId != null">cId,</if>
+            <if test="sporeName != null">sporeName,</if>
+            <if test="sporeId != null">sporeId,</if>
+            <if test="sporeRemark != null">sporeRemark,</if>
+            <if test="sporeCreator != null">sporeCreator,</if>
+            <if test="sporeModifier != null">sporeModifier,</if>
+            <if test="sporeModifieddate != null">sporeModifieddate,</if>
+            <if test="sporeCreatedDate != null">sporeCreatedDate,</if>
+            <if test="sporeDelstatus != null">sporeDelstatus,</if>
+            <if test="sporeInsertType != null">sporeInsertType,</if>
+            <if test="sporeType != null">sporeType,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="sporeBid != null and sporeBid != ''">#{sporeBid},</if>
+            <if test="cId != null">#{cId},</if>
+            <if test="sporeName != null">#{sporeName},</if>
+            <if test="sporeId != null">#{sporeId},</if>
+            <if test="sporeRemark != null">#{sporeRemark},</if>
+            <if test="sporeCreator != null">#{sporeCreator},</if>
+            <if test="sporeModifier != null">#{sporeModifier},</if>
+            <if test="sporeModifieddate != null">#{sporeModifieddate},</if>
+            <if test="sporeCreatedDate != null">#{sporeCreatedDate},</if>
+            <if test="sporeDelstatus != null">#{sporeDelstatus},</if>
+            <if test="sporeInsertType != null">#{sporeInsertType},</if>
+            <if test="sporeType != null">#{sporeType},</if>
+         </trim>
+    </insert>
+
+    <update id="updateIotSpore" parameterType="IotSpore">
+        update IotSpore
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="sporeBid != null and sporeBid != ''">sporeBid = #{sporeBid},</if>
+            <if test="cId != null">cId = #{cId},</if>
+            <if test="sporeName != null">sporeName = #{sporeName},</if>
+            <if test="sporeId != null">sporeId = #{sporeId},</if>
+            <if test="sporeRemark != null">sporeRemark = #{sporeRemark},</if>
+            <if test="sporeCreator != null">sporeCreator = #{sporeCreator},</if>
+            <if test="sporeModifier != null">sporeModifier = #{sporeModifier},</if>
+            <if test="sporeModifieddate != null">sporeModifieddate = #{sporeModifieddate},</if>
+            <if test="sporeCreatedDate != null">sporeCreatedDate = #{sporeCreatedDate},</if>
+            <if test="sporeDelstatus != null">sporeDelstatus = #{sporeDelstatus},</if>
+            <if test="sporeType != null">sporeType = #{sporeType},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+
+    <delete id="deleteIotSporeById" parameterType="Long">
+        delete from IotSpore where id = #{id}
+    </delete>
+
+    <delete id="deleteIotSporeByIds" parameterType="String">
+        delete from IotSpore where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <!--联查病虫害库-->
+    <sql id="selectIotSporeVo1">
+        select id, sporeBid, cId, sporeName, sporeId, sporeRemark
+        , sporeCreator, sporeModifier, sporeModifieddate, sporeCreatedDate, sporeDelstatus,sporeType
+        ,FmsCalarm.calamRemark, FmsCalarm.calarmCloudresurl,FmsCalarm.calamCounterMeasures
+        from IotSpore
+        left join FmsCalarm on FmsCalarm.calarmId = IotSpore.sporeId
+    </sql>
+
+    <select id="selectIotSporeList1" parameterType="IotSpore" resultType="IotSporeResVo">
+        <include refid="selectIotSporeVo1"/>
+        <where>
+            sporeDelstatus = 0
+            <if test="sporeBid != null  and sporeBid != ''"> and sporeBid = #{sporeBid}</if>
+            <if test="cId != null  and cId != ''"> and cId = #{cId}</if>
+            <if test="sporeType != null  and sporeType != ''"> and sporeType = #{sporeType}</if>
+            <if test="sporeName != null  and sporeName != ''"> and sporeName like concat('%', #{sporeName}, '%')</if>
+            <if test="sporeId != null  and sporeId != ''"> and sporeId = #{sporeId}</if>
+            <if test="sporeRemark != null  and sporeRemark != ''"> and sporeRemark like concat('%', #{sporeRemark}, '%')</if>
+        </where>
+    </select>
+</mapper>

+ 105 - 0
src/main/resources/mapper/IotXyinfoMapper.xml

@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yunfeiyun.agmp.iotm.web.mapper.IotXyinfoMapper">
+    
+    <resultMap type="IotXyinfo" id="IotXyinfoResult">
+        <result property="id"    column="id"    />
+        <result property="xyinfoBid"    column="xyinfoBid"    />
+        <result property="cId"    column="cId"    />
+        <result property="devBid"    column="devBid"    />
+        <result property="xyinfoLurename"    column="xyinfoLurename"    />
+        <result property="xyinfoLureexpireddate"    column="xyinfoLureexpireddate"    />
+        <result property="pestBusid"    column="pestBusid"    />
+        <result property="xyinfoCreator"    column="xyinfoCreator"    />
+        <result property="xyinfoModifier"    column="xyinfoModifier"    />
+        <result property="xyinfoModifieddate"    column="xyinfoModifieddate"    />
+        <result property="xyinfoCreatedDate"    column="xyinfoCreatedDate"    />
+        <result property="xyinfoDelstatus"    column="xyinfoDelstatus"    />
+    </resultMap>
+
+    <sql id="selectIotXyinfoVo">
+        select id, xyinfoBid, cId, devBid, xyinfoLurename, xyinfoLureexpireddate, pestBusid, xyinfoCreator, xyinfoModifier, xyinfoModifieddate, xyinfoCreatedDate, xyinfoDelstatus from IotXyinfo
+    </sql>
+
+    <select id="selectIotXyinfoList" parameterType="IotXyinfo" resultMap="IotXyinfoResult">
+        <include refid="selectIotXyinfoVo"/>
+        <where>  
+            <if test="xyinfoBid != null  and xyinfoBid != ''"> and xyinfoBid = #{xyinfoBid}</if>
+            <if test="cId != null  and cId != ''"> and cId = #{cId}</if>
+            <if test="devBid != null  and devBid != ''"> and devBid = #{devBid}</if>
+            <if test="xyinfoLurename != null  and xyinfoLurename != ''"> and xyinfoLurename like concat('%', #{xyinfoLurename}, '%')</if>
+            <if test="xyinfoLureexpireddate != null  and xyinfoLureexpireddate != ''"> and xyinfoLureexpireddate = #{xyinfoLureexpireddate}</if>
+            <if test="pestBusid != null  and pestBusid != ''"> and pestBusid = #{pestBusid}</if>
+            <if test="xyinfoCreator != null  and xyinfoCreator != ''"> and xyinfoCreator = #{xyinfoCreator}</if>
+            <if test="xyinfoModifier != null  and xyinfoModifier != ''"> and xyinfoModifier = #{xyinfoModifier}</if>
+            <if test="xyinfoModifieddate != null  and xyinfoModifieddate != ''"> and xyinfoModifieddate = #{xyinfoModifieddate}</if>
+            <if test="xyinfoCreatedDate != null  and xyinfoCreatedDate != ''"> and xyinfoCreatedDate = #{xyinfoCreatedDate}</if>
+            <if test="xyinfoDelstatus != null  and xyinfoDelstatus != ''"> and xyinfoDelstatus = #{xyinfoDelstatus}</if>
+        </where>
+    </select>
+
+    <select id="selectIotXyinfoListByDevBidList" parameterType="java.util.List"
+            resultType="com.yunfeiyun.agmp.iotm.device.domain.dtovo.IotXyinfoDto">
+        <include refid="selectIotXyinfoVo"/>
+        where xyinfoDelstatus = '0' and devBid in
+        <foreach item="devBid" collection="list" open="(" separator="," close=")">
+            #{devBid}
+        </foreach>
+    </select>
+
+    <select id="selectIotXyinfoByDevBid" parameterType="String"
+            resultType="com.yunfeiyun.agmp.iotm.device.domain.dtovo.IotXyinfoDto">
+        <include refid="selectIotXyinfoVo"/>
+        where xyinfoDelstatus = '0' and devBid = #{devBid}
+    </select>
+
+    <update id="updateIotXyinfo" parameterType="IotXyinfo">
+        update IotXyinfo
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="xyinfoBid != null">xyinfoBid = #{xyinfoBid},</if>
+            <if test="cId != null">cId = #{cId},</if>
+            <if test="devBid != null">devBid = #{devBid},</if>
+            <if test="xyinfoLurename != null">xyinfoLurename = #{xyinfoLurename},</if>
+            <if test="xyinfoLureexpireddate != null">xyinfoLureexpireddate = #{xyinfoLureexpireddate},</if>
+            <if test="pestBusid != null">pestBusid = #{pestBusid},</if>
+            <if test="xyinfoCreator != null">xyinfoCreator = #{xyinfoCreator},</if>
+            <if test="xyinfoModifier != null">xyinfoModifier = #{xyinfoModifier},</if>
+            <if test="xyinfoModifieddate != null">xyinfoModifieddate = #{xyinfoModifieddate},</if>
+            <if test="xyinfoCreatedDate != null">xyinfoCreatedDate = #{xyinfoCreatedDate},</if>
+            <if test="xyinfoDelstatus != null">xyinfoDelstatus = #{xyinfoDelstatus},</if>
+        </trim>
+        where devBid = #{devBid}
+    </update>
+
+    <insert id="insertIotXyinfo" parameterType="IotXyinfo" useGeneratedKeys="true" keyProperty="id">
+        insert into IotXyinfo
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="xyinfoBid != null">xyinfoBid,</if>
+            <if test="cId != null">cId,</if>
+            <if test="devBid != null">devBid,</if>
+            <if test="xyinfoLurename != null">xyinfoLurename,</if>
+            <if test="xyinfoLureexpireddate != null">xyinfoLureexpireddate,</if>
+            <if test="pestBusid != null">pestBusid,</if>
+            <if test="xyinfoCreator != null">xyinfoCreator,</if>
+            <if test="xyinfoModifier != null">xyinfoModifier,</if>
+            <if test="xyinfoModifieddate != null">xyinfoModifieddate,</if>
+            <if test="xyinfoCreatedDate != null">xyinfoCreatedDate,</if>
+            <if test="xyinfoDelstatus != null">xyinfoDelstatus,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="xyinfoBid != null">#{xyinfoBid},</if>
+            <if test="cId != null">#{cId},</if>
+            <if test="devBid != null">#{devBid},</if>
+            <if test="xyinfoLurename != null">#{xyinfoLurename},</if>
+            <if test="xyinfoLureexpireddate != null">#{xyinfoLureexpireddate},</if>
+            <if test="pestBusid != null">#{pestBusid},</if>
+            <if test="xyinfoCreator != null">#{xyinfoCreator},</if>
+            <if test="xyinfoModifier != null">#{xyinfoModifier},</if>
+            <if test="xyinfoModifieddate != null">#{xyinfoModifieddate},</if>
+            <if test="xyinfoCreatedDate != null">#{xyinfoCreatedDate},</if>
+            <if test="xyinfoDelstatus != null">#{xyinfoDelstatus},</if>
+        </trim>
+    </insert>
+</mapper>