Browse Source

告警模块提交

hym 3 years ago
parent
commit
408def2ecf
39 changed files with 2229 additions and 167 deletions
  1. 1 2
      zoniot-common/zoniot-core-common/src/main/java/com/zcxk/core/common/enums/RespCodeEnum.java
  2. 4 0
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/alarm/AlarmRuleDto.java
  3. 4 0
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/alarm/AlarmTypeDto.java
  4. 6 0
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/alarm/AlarmTypePageDto.java
  5. 4 0
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/alarm/ConfigDataDto.java
  6. 4 0
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/alarm/RuleMeasuringDto.java
  7. 5 3
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/measurementSettlement/MeasurementRecordPageDto.java
  8. 26 3
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/measurementSettlement/MeasurementSettlementDto.java
  9. 2 2
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/measurementSettlement/WaterConsumptionUpdateDto.java
  10. 87 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/AlarmTypeMapper.java
  11. 87 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/DeviceAlarmRuleMapper.java
  12. 96 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/MeasurementInstanceMapper.java
  13. 4 1
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/MeasurementRecordMapper.java
  14. 1 1
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/MeasurementSettlementMapper.java
  15. 75 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/entity/AlarmType.java
  16. 107 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/entity/DeviceAlarmRule.java
  17. 67 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/entity/MeasurementInstance.java
  18. 22 7
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/entity/MeasurementRecord.java
  19. 16 28
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/entity/MeasurementSettlement.java
  20. 221 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/MeasurementInstanceMapper.xml
  21. 7 2
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/MeasurementRecordMapper.xml
  22. 27 46
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/MeasurementSettlementMapper.xml
  23. 192 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/resources/mapper/AlarmTypeMapper.xml
  24. 266 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/resources/mapper/DeviceAlarmRuleMapper.xml
  25. 234 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/resources/mapper/MeasurementRecordMapper.xml
  26. 192 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/resources/mapper/RmcpAlarmTypeMapper.xml
  27. 90 0
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/controller/AlarmRuleController.java
  28. 90 0
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/controller/AlarmTypeController.java
  29. 2 2
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/controller/MeasurementSettlementController.java
  30. 23 0
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/AlarmRuleService.java
  31. 21 0
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/AlarmTypeService.java
  32. 2 1
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/MeasurementSettlementService.java
  33. 46 0
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/impl/AlarmRuleServiceImpl.java
  34. 61 0
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/impl/AlarmTypeServiceImpl.java
  35. 79 31
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/impl/MeasurementSettlementServiceImpl.java
  36. 4 12
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/util/XxlJobUtil.java
  37. 42 25
      zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/jobs/MeasurementSettlementRecordHander.java
  38. 11 0
      zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/jobs/MeterReadRecordDTO.java
  39. 1 1
      zoniot-rmcp/zoniot-xxljob-client/src/main/resources/application-dev.properties

+ 1 - 2
zoniot-common/zoniot-core-common/src/main/java/com/zcxk/core/common/enums/RespCodeEnum.java

@@ -28,8 +28,7 @@ public enum RespCodeEnum implements RespCode {
     GLOBAL_PARAMETER_NOT_EMPTY(404, "缺少参数【%s】"),
 
     GLOBAL_GET_DISTRIBUTED_LOCK_ERROR(505, "获取redis锁失败"),
-
-    ;
+    ALAM_TYPE_DELETION_ERROR(201001,"所选告警类型有规则不为0的,不能删除");
     private int status;
 
     private String message;

+ 4 - 0
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/alarm/AlarmRuleDto.java

@@ -0,0 +1,4 @@
+package com.zcxk.rmcp.api.dto.alarm;
+
+public class AlarmRuleDto {
+}

+ 4 - 0
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/alarm/AlarmTypeDto.java

@@ -0,0 +1,4 @@
+package com.zcxk.rmcp.api.dto.alarm;
+
+public class AlarmTypeDto {
+}

+ 6 - 0
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/alarm/AlarmTypePageDto.java

@@ -0,0 +1,6 @@
+package com.zcxk.rmcp.api.dto.alarm;
+
+import com.zcxk.rmcp.api.dto.BasePageDto;
+
+public class AlarmTypePageDto extends BasePageDto {
+}

+ 4 - 0
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/alarm/ConfigDataDto.java

@@ -0,0 +1,4 @@
+package com.zcxk.rmcp.api.dto.alarm;
+
+public class ConfigDataDto {
+}

+ 4 - 0
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/alarm/RuleMeasuringDto.java

@@ -0,0 +1,4 @@
+package com.zcxk.rmcp.api.dto.alarm;
+
+public class RuleMeasuringDto {
+}

+ 5 - 3
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/measurementSettlement/MeasurementRecordPageDto.java

@@ -10,11 +10,13 @@ import lombok.Data;
 public class MeasurementRecordPageDto extends BasePageDto {
 
     @ApiModelProperty(value = "起度")
-    private double startingDegree;
+    private Double startingDegree;
 
     @ApiModelProperty(value = "止度")
-    private double stop;
+    private Double stop;
 
     @ApiModelProperty(value = "审核状态")
-    private int status;
+    private Integer status;
+    @ApiModelProperty(value = "记录id")
+    private Integer planId;
 }

+ 26 - 3
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/measurementSettlement/MeasurementSettlementDto.java

@@ -27,20 +27,38 @@ public class MeasurementSettlementDto {
     @ApiModelProperty(value = "结算时间")
     @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
     private Date settlementTime;
+    /**
+     * 公司id
+     */
+    @ApiModelProperty(value = "公司名称",hidden = true)
+    private String companyOrgName;
+    /**
+     * 部门id
+     */
+    @ApiModelProperty(value = "部门名称",hidden = true)
+    private String deptOrgName;
+    /**
+     * 小区id
+     */
+    @ApiModelProperty(value = "小区名称",hidden = true)
+    private String communityName;
     /**
      * 公司id
      */
     @ApiModelProperty(value = "公司id")
+    @JsonIgnore
     private Integer companyOrgId;
     /**
      * 部门id
      */
     @ApiModelProperty(value = "部门id")
+    @JsonIgnore
     private Integer deptOrgId;
     /**
      * 小区id
      */
     @ApiModelProperty(value = "小区id")
+    @JsonIgnore
     private Integer communityId;
     /**
      * 结算表总数
@@ -63,10 +81,15 @@ public class MeasurementSettlementDto {
     @ApiModelProperty(value = "结算周期")
     private Integer billingCycle;
     /**
-     * 计划状态 0 未生成计划,1已生成计划
+     * 截止日期
+     */
+    @ApiModelProperty(value = "截止日期",hidden = true)
+    private Date clearingEndDate;
+    /**
+     * 开始日期
      */
-    @ApiModelProperty(value = "计划状态 0 未生成计划,1已生成计划",hidden = true)
-    private Integer planStatus;
+    @ApiModelProperty(value = "开始日期",hidden = true)
+    private Date clearingStartDate;
     /**
      * 创建时间
      */

+ 2 - 2
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/measurementSettlement/WaterConsumptionUpdateDto.java

@@ -7,8 +7,8 @@ import lombok.Data;
 @Data
 @ApiModel(value="修改用水量")
 public class WaterConsumptionUpdateDto {
-    @ApiModelProperty(value="记录id")
-    private Integer recordId;
+    @ApiModelProperty(value="详细记录id")
+    private Long id;
     @ApiModelProperty(value="用水量")
     private double waterConsumption;
 }

+ 87 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/AlarmTypeMapper.java

@@ -0,0 +1,87 @@
+package com.zcxk.rmcp.core.dao;
+
+import com.zcxk.rmcp.api.dto.alarm.AlarmTypeDto;
+import com.zcxk.rmcp.api.dto.alarm.AlarmTypePageDto;
+import com.zcxk.rmcp.core.entity.AlarmType;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 设备告警类型(AlarmType)表数据库访问层
+ *
+ * @author hym
+ * @since 2021-07-30 10:57:47
+ */
+@Mapper
+public interface AlarmTypeMapper {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    AlarmType selectById(Integer id);
+
+
+    /**
+     * 查询全部
+     *
+     * @return 对象列表
+     */
+    List<AlarmType> selectAll();
+
+    /**
+     * 通过实体作为筛选条件查询
+     *
+     * @param alarmType 实例对象
+     * @return 对象列表
+     */
+    List<AlarmTypeDto> selectList(AlarmTypePageDto alarmType);
+
+    /**
+     * 新增数据
+     *
+     * @param alarmType 实例对象
+     * @return 影响行数
+     */
+    int insert(AlarmType alarmType);
+
+    /**
+     * 批量新增
+     *
+     * @param alarmTypes 实例对象的集合
+     * @return 影响行数
+     */
+    int batchInsert(@Param("alarmTypes") List<AlarmType> alarmTypes);
+
+    /**
+     * 修改数据
+     *
+     * @param alarmType 实例对象
+     * @return 影响行数
+     */
+    int update(AlarmType alarmType);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Integer id);
+
+    /**
+     * 查询总数据数
+     *
+     * @return 数据总数
+     */
+    int count();
+
+    IPage<AlarmType> selectPage(IPage<AlarmType> page, AlarmType alarmType);
+
+}

+ 87 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/DeviceAlarmRuleMapper.java

@@ -0,0 +1,87 @@
+package com.zcxk.rmcp.core.dao;
+
+import com.zcxk.rmcp.core.entity.DeviceAlarmRule;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 设备告警规则(DeviceAlarmRule)表数据库访问层
+ *
+ * @author hym
+ * @since 2021-07-30 10:17:05
+ */
+@Mapper
+public interface DeviceAlarmRuleMapper {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    DeviceAlarmRule selectById(Integer id);
+
+
+    /**
+     * 查询全部
+     *
+     * @return 对象列表
+     */
+    List<DeviceAlarmRule> selectAll();
+
+    /**
+     * 通过实体作为筛选条件查询
+     *
+     * @param deviceAlarmRule 实例对象
+     * @return 对象列表
+     */
+    List<DeviceAlarmRule> selectList(DeviceAlarmRule deviceAlarmRule);
+
+    /**
+     * 新增数据
+     *
+     * @param deviceAlarmRule 实例对象
+     * @return 影响行数
+     */
+    int insert(DeviceAlarmRule deviceAlarmRule);
+
+    /**
+     * 批量新增
+     *
+     * @param deviceAlarmRules 实例对象的集合
+     * @return 影响行数
+     */
+    int batchInsert(@Param("deviceAlarmRules") List<DeviceAlarmRule> deviceAlarmRules);
+
+    /**
+     * 修改数据
+     *
+     * @param deviceAlarmRule 实例对象
+     * @return 影响行数
+     */
+    int update(DeviceAlarmRule deviceAlarmRule);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Integer id);
+
+    /**
+     * 查询总数据数
+     *
+     * @return 数据总数
+     */
+    int count();
+
+    IPage<DeviceAlarmRule> selectPage(IPage<DeviceAlarmRule> page, DeviceAlarmRule deviceAlarmRule);
+
+}

+ 96 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/MeasurementInstanceMapper.java

@@ -0,0 +1,96 @@
+package com.zcxk.rmcp.core.dao;
+
+import com.zcxk.core.common.pojo.UserCondition;
+import com.zcxk.rmcp.api.dto.measurementSettlement.MeasurementSettlementDto;
+import com.zcxk.rmcp.core.entity.MeasurementInstance;
+import org.apache.ibatis.annotations.Param;
+
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * (MeasurementInstance)表数据库访问层
+ *
+ * @author hym
+ * @since 2021-07-28 16:27:27
+ */
+@Mapper
+public interface MeasurementInstanceMapper {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    MeasurementInstance selectById(Integer id);
+
+
+    /**
+     * 查询全部
+     *
+     * @return 对象列表
+     */
+    List<MeasurementInstance> selectAll();
+
+    /**
+     * 通过实体作为筛选条件查询
+     *
+     * @param measurementSettlementDto 实例对象
+     * @param userCondition
+     * @return 对象列表
+     */
+    List<MeasurementSettlementDto> selectList(@Param("measurement")MeasurementSettlementDto measurementSettlementDto,
+                                              @Param("userCondition")UserCondition userCondition);
+
+    /**
+     * 新增数据
+     *
+     * @param measurementInstance 实例对象
+     * @return 影响行数
+     */
+    int insert(MeasurementInstance measurementInstance);
+
+    /**
+     * 批量新增
+     *
+     * @param measurementInstances 实例对象的集合
+     * @return 影响行数
+     */
+    int batchInsert(@Param("measurementInstances") List<MeasurementInstance> measurementInstances);
+
+    /**
+     * 修改数据
+     *
+     * @param measurementInstance 实例对象
+     * @return 影响行数
+     */
+    int update(MeasurementInstance measurementInstance);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Integer id);
+
+    /**
+     * 查询总数据数
+     *
+     * @return 数据总数
+     */
+    int count();
+
+
+    MeasurementInstance findClearingRecord(@Param("id") Integer id,
+                                           @Param("lastClearingDay")  Integer lastClearingDay);
+
+
+
+    void modifyTheNumberOfAudits(@Param("size") int size,@Param("id") Integer id);
+
+    void modifyAllTheNumberOfAudits(Integer id);
+}

+ 4 - 1
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/MeasurementRecordMapper.java

@@ -83,9 +83,12 @@ public interface MeasurementRecordMapper {
     int count();
 
 
-    void auditWater(List<Integer> ids);
+    void auditWater(List<Long> ids);
 
     void auditAllWater(Integer planId);
 
     void modifyTheAmountOfWater(WaterConsumptionUpdateDto waterConsumptionUpdateDto);
+
+    MeasurementRecord findClearingRecordItem(@Param("deviceId") Long deviceId,
+                                             @Param("planId") Integer planId);
 }

+ 1 - 1
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/MeasurementSettlementMapper.java

@@ -90,5 +90,5 @@ public interface MeasurementSettlementMapper {
 
     void deleteAll(@Param("userCondition")UserCondition userCondition);
 
-    void setBillingPeriod(MeasurementSettlementDto measurementSettlementDto);
+    
 }

+ 75 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/entity/AlarmType.java

@@ -0,0 +1,75 @@
+package com.zcxk.rmcp.core.entity;
+
+import java.util.Date;
+import java.io.Serializable;
+
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 设备告警类型(AlarmType)实体类
+ *
+ * @author hym
+ * @since 2021-07-30 10:57:47
+ */
+@Data
+@ApiModel
+public class AlarmType implements Serializable {
+    private static final long serialVersionUID = 358911974200006071L;
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "id")
+    private Integer id;
+    /**
+     * 产品类型
+     */
+    @ApiModelProperty(value = "产品类型")
+    private Integer productCategroyId;
+    /**
+     * 设备类型
+     */
+    @ApiModelProperty(value = "设备类型")
+    private Integer deviceTypeId;
+    /**
+     * 名称
+     */
+    @ApiModelProperty(value = "名称")
+    private String name;
+    /**
+     * status
+     */
+    @ApiModelProperty(value = "status")
+    private Integer status;
+    /**
+     * createDate
+     */
+    @ApiModelProperty(value = "createDate")
+    private Date createDate;
+    /**
+     * createBy
+     */
+    @ApiModelProperty(value = "createBy")
+    private String createBy;
+    /**
+     * updateDate
+     */
+    @ApiModelProperty(value = "updateDate")
+    private Date updateDate;
+    /**
+     * updateBy
+     */
+    @ApiModelProperty(value = "updateBy")
+    private String updateBy;
+    /**
+     * 描述
+     */
+    @ApiModelProperty(value = "描述")
+    private String typeDesc;
+    /**
+     * 租户id
+     */
+    @ApiModelProperty(value = "租户id")
+    private String tenantId;
+}

+ 107 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/entity/DeviceAlarmRule.java

@@ -0,0 +1,107 @@
+package com.zcxk.rmcp.core.entity;
+
+import java.util.Date;
+import java.io.Serializable;
+
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 设备告警规则(DeviceAlarmRule)实体类
+ *
+ * @author hym
+ * @since 2021-07-30 10:17:06
+ */
+@Data
+@ApiModel
+public class DeviceAlarmRule implements Serializable {
+    private static final long serialVersionUID = -82583763480326338L;
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "id")
+    private Integer id;
+    /**
+     * channelId
+     */
+    @ApiModelProperty(value = "channelId")
+    private Integer productCategroyId;
+    /**
+     * siteId
+     */
+    @ApiModelProperty(value = "siteId")
+    private Integer tenantId;
+    @ApiModelProperty(value = "")
+    private Integer deviceType;
+    /**
+     * ruleName
+     */
+    @ApiModelProperty(value = "ruleName")
+    private String ruleName;
+    /**
+     * measuingId
+     */
+    @ApiModelProperty(value = "measuingId")
+    private String measuringCode;
+    /**
+     * expression
+     */
+    @ApiModelProperty(value = "expression")
+    private String expression;
+    /**
+     * alarmTypeId
+     */
+    @ApiModelProperty(value = "alarmTypeId")
+    private Integer alarmTypeId;
+    /**
+     * status
+     */
+    @ApiModelProperty(value = "status")
+    private Integer status;
+    /**
+     * createDate
+     */
+    @ApiModelProperty(value = "createDate")
+    private Date createDate;
+    /**
+     * createBy
+     */
+    @ApiModelProperty(value = "createBy")
+    private String createBy;
+    /**
+     * updateDate
+     */
+    @ApiModelProperty(value = "updateDate")
+    private Date updateDate;
+    /**
+     * updateBy
+     */
+    @ApiModelProperty(value = "updateBy")
+    private String updateBy;
+    /**
+     * ruleDesc
+     */
+    @ApiModelProperty(value = "ruleDesc")
+    private String ruleDesc;
+    /**
+     * value1
+     */
+    @ApiModelProperty(value = "value1")
+    private String value1;
+    /**
+     * value2
+     */
+    @ApiModelProperty(value = "value2")
+    private String value2;
+    /**
+     * measuingDataType
+     */
+    @ApiModelProperty(value = "measuingDataType")
+    private Integer measuringDataType;
+    /**
+     * specification
+     */
+    @ApiModelProperty(value = "specification")
+    private String specification;
+}

+ 67 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/entity/MeasurementInstance.java

@@ -0,0 +1,67 @@
+package com.zcxk.rmcp.core.entity;
+
+import java.util.Date;
+import java.io.Serializable;
+
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * (MeasurementInstance)实体类
+ *
+ * @author hym
+ * @since 2021-07-28 16:28:53
+ */
+@Data
+@ApiModel
+public class MeasurementInstance implements Serializable {
+    private static final long serialVersionUID = -46257933996329427L;
+    @ApiModelProperty(value = "")
+    private Integer id;
+    /**
+     * 结算计划表id
+     */
+    @ApiModelProperty(value = "结算计划表id")
+    private Integer planid;
+    /**
+     * 总表数目
+     */
+    @ApiModelProperty(value = "总表数目")
+    private Integer totalWaterMeters;
+    /**
+     * 已审核表数目
+     */
+    @ApiModelProperty(value = "已审核表数目")
+    private Integer numberOfWaterMetersReviewed;
+    @ApiModelProperty(value = "")
+    private Date createDate;
+    @ApiModelProperty(value = "")
+    private Date updateDate;
+    @ApiModelProperty(value = "")
+    private String createBy;
+    @ApiModelProperty(value = "")
+    private String updateBy;
+    @ApiModelProperty(value = "")
+    private Integer status;
+    /**
+     * 账期
+     */
+    @ApiModelProperty(value = "账期")
+    private Date billingPeriod;
+    /**
+     * 结算时间
+     */
+    @ApiModelProperty(value = "结算时间")
+    private Integer clearingDay;
+    /**
+     * 截止日期
+     */
+    @ApiModelProperty(value = "截止日期")
+    private Date clearingEndDate;
+    /**
+     * 开始日期
+     */
+    @ApiModelProperty(value = "开始日期")
+    private Date clearingStartDate;
+}

+ 22 - 7
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/entity/MeasurementRecord.java

@@ -1,22 +1,22 @@
 package com.zcxk.rmcp.core.entity;
 
+import java.util.Date;
+import java.io.Serializable;
+
+import lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
 
 /**
  * (MeasurementRecord)实体类
  *
  * @author hym
- * @since 2021-07-22 14:27:45
+ * @since 2021-07-28 16:57:40
  */
 @Data
 @ApiModel
 public class MeasurementRecord implements Serializable {
-    private static final long serialVersionUID = 393713997278429274L;
+    private static final long serialVersionUID = -21816616059552313L;
     @ApiModelProperty(value = "")
     private Long id;
     /**
@@ -84,4 +84,19 @@ public class MeasurementRecord implements Serializable {
      */
     @ApiModelProperty(value = "删除标识")
     private Integer status;
-}
+    /**
+     * 设备id
+     */
+    @ApiModelProperty(value = "设备id")
+    private Long deviceId;
+    /**
+     * 上期读数
+     */
+    @ApiModelProperty(value = "上期读数")
+    private Date lastPeriodDate;
+    /**
+     * 本期读数
+     */
+    @ApiModelProperty(value = "本期读数")
+    private Date currentPeriodDate;
+}

+ 16 - 28
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/entity/MeasurementSettlement.java

@@ -1,22 +1,22 @@
 package com.zcxk.rmcp.core.entity;
 
+import java.util.Date;
+import java.io.Serializable;
+
+import lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
 
 /**
  * (MeasurementSettlement)实体类
  *
  * @author hym
- * @since 2021-07-22 14:14:51
+ * @since 2021-07-29 15:49:08
  */
 @Data
 @ApiModel
 public class MeasurementSettlement implements Serializable {
-    private static final long serialVersionUID = 124297258110426220L;
+    private static final long serialVersionUID = 358803126975257048L;
     /**
      * 主键id
      */
@@ -47,31 +47,11 @@ public class MeasurementSettlement implements Serializable {
      */
     @ApiModelProperty(value = "小区id")
     private Integer communityId;
-    /**
-     * 结算表总数
-     */
-    @ApiModelProperty(value = "结算表总数")
-    private Integer totalWaterMeters;
-    /**
-     * 已审核水表数
-     */
-    @ApiModelProperty(value = "已审核水表数")
-    private Integer numberOfWaterMetersReviewed;
-    /**
-     * 账期
-     */
-    @ApiModelProperty(value = "账期")
-    private Date billingPeriod;
     /**
      * 结算周期
      */
     @ApiModelProperty(value = "结算周期")
     private Integer billingCycle;
-    /**
-     * 计划状态 0 未生成计划,1已生成计划
-     */
-    @ApiModelProperty(value = "计划状态 0 未生成计划,1已生成计划")
-    private Integer planStatus;
     /**
      * 创建时间
      */
@@ -102,6 +82,14 @@ public class MeasurementSettlement implements Serializable {
      */
     @ApiModelProperty(value = "定时任务id")
     private Long taskId;
-    @ApiModelProperty(value = "定时任务id")
+    /**
+     * 租户id
+     */
+    @ApiModelProperty(value = "租户id")
     private String tenantId;
-}
+    /**
+     * 水表数目
+     */
+    @ApiModelProperty(value = "水表数目")
+    private Integer totalWaterMeters;
+}

+ 221 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/MeasurementInstanceMapper.xml

@@ -0,0 +1,221 @@
+<?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.zcxk.rmcp.core.dao.MeasurementInstanceMapper">
+    <!-- 结果集 -->
+    <resultMap type="com.zcxk.rmcp.core.entity.MeasurementInstance" id="MeasurementInstanceMap">
+        <result property="id" column="id" jdbcType="INTEGER"/>
+        <result property="planid" column="planId" jdbcType="INTEGER"/>
+        <result property="totalWaterMeters" column="total_water_meters" jdbcType="INTEGER"/>
+        <result property="numberOfWaterMetersReviewed" column="number_of_water_meters_reviewed" jdbcType="INTEGER"/>
+        <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
+        <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
+        <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+        <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+        <result property="status" column="status" jdbcType="INTEGER"/>
+        <result property="billingPeriod" column="billing_period" jdbcType="VARCHAR"/>
+        <result property="clearingDay" column="clearing_day" jdbcType="INTEGER"/>
+        <result property="clearingEndDate" column="clearing_end_date" jdbcType="TIMESTAMP"/>
+        <result property="clearingStartDate" column="clearing_start_date" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <!-- 基本字段 -->
+    <sql id="Base_Column_List">
+        id, plan_id, total_water_meters, number_of_water_meters_reviewed, create_date, update_date, create_by, update_by, status, billing_period, clearing_day, clearing_end_date, clearing_start_date    </sql>
+
+    <!-- 查询单个 -->
+    <select id="selectById" resultMap="MeasurementInstanceMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_measurement_instance
+        where id = #{id}
+    </select>
+
+
+    <!-- 查询全部 -->
+    <select id="selectAll" resultMap="MeasurementInstanceMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_measurement_instance
+    </select>
+
+    <!--通过实体作为筛选条件查询-->
+    <select id="selectList" resultType="com.zcxk.rmcp.api.dto.measurementSettlement.MeasurementSettlementDto">
+        select
+        mi.id,mi.total_water_meters,mi.number_of_water_meters_reviewed,mi.billing_period
+        ,ms.plan_name,mi.clearing_end_date,mi.clearing_start_date,
+               company.ORG_NAME companyOrgName,depart.ORG_NAME deptOrgName,
+        commuity.name communityName
+        from rmcp_measurement_instance mi  join rmcp_measurement_settlement ms on
+            mi.plan_id=ms.id
+        join rmcp_org company on ms.company_org_id=company.ID
+        left join rmcp_org depart on ms.dept_org_id=depart.ID
+        left join  rmcp_community commuity on ms.community_id=commuity.id
+        <where>
+            mi.status=1
+            <if test="measurement.companyOrgId != null">
+                and ms.company_org_id = #{measurement.companyOrgId}
+            </if>
+            <if test="measurement.deptOrgId != null">
+                and ms.dept_org_id = #{measurement.deptOrgId}
+            </if>
+            <if test="measurement.planName != null and measurement.planName != ''">
+                and ms.plan_name  like concat('%',#{measurement.planName} ,'%')
+            </if>
+            <if test="measurement.id != null">
+                and id = #{measurement.id}
+            </if>
+
+            <if test="measurement.totalWaterMeters != null">
+                and total_water_meters = #{measurement.totalWaterMeters}
+            </if>
+            <if test="measurement.numberOfWaterMetersReviewed != null">
+                and number_of_water_meters_reviewed = #{measurement.numberOfWaterMetersReviewed}
+            </if>
+            <if test="measurement.createDate != null">
+                and create_date = #{measurement.createDate}
+            </if>
+            <if test="measurement.updateDate != null">
+                and update_date = #{measurement.updateDate}
+            </if>
+            <if test="measurement.createBy != null and measurement.createBy != ''">
+                and create_by = #{measurement.createBy}
+            </if>
+            <if test="measurement.updateBy != null and measurement.updateBy != ''">
+                and update_by = #{measurement.updateBy}
+            </if>
+            <if test="measurement.status != null">
+                and status = #{measurement.status}
+            </if>
+            <if test="measurement.billingPeriod != null and measurement.billingPeriod != ''">
+                and billing_period = #{measurement.billingPeriod}
+            </if>
+
+            <include refid="permissionCondition"/>
+        </where>
+        order by mi.create_date desc
+    </select>
+
+    <!-- 新增所有列 -->
+    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
+        insert into rmcp_measurement_instance(id, plan_id, total_water_meters, number_of_water_meters_reviewed,
+                                              create_date, update_date, create_by, update_by, status, billing_period,
+                                              clearing_day, clearing_end_date, clearing_start_date)
+        values (#{id}, #{planid}, #{totalWaterMeters}, #{numberOfWaterMetersReviewed}, #{createDate}, #{updateDate},
+                #{createBy}, #{updateBy}, #{status}, #{billingPeriod}, #{clearingDay}, #{clearingEndDate},
+                #{clearingStartDate})
+    </insert>
+
+    <!-- 批量新增 -->
+    <insert id="batchInsert">
+        insert into rmcp_measurement_instance(id, plan_Id, total_water_meters, number_of_water_meters_reviewed,
+        create_date, update_date, create_by, update_by, status, billing_period, clearing_day, clearing_end_date,
+        clearing_start_date)
+        values
+        <foreach collection="measurementInstances" item="item" index="index" separator=",">
+            (
+            #{item.id}, #{item.planid}, #{item.totalWaterMeters}, #{item.numberOfWaterMetersReviewed},
+            #{item.createDate}, #{item.updateDate}, #{item.createBy}, #{item.updateBy}, #{item.status},
+            #{item.billingPeriod}, #{item.clearingDay}, #{item.clearingEndDate}, #{item.clearingStartDate} )
+        </foreach>
+    </insert>
+
+    <!-- 通过主键修改数据 -->
+    <update id="update">
+        update rmcp_measurement_instance
+        <set>
+            <if test="planid != null">
+                plan_Id = #{planid},
+            </if>
+            <if test="totalWaterMeters != null">
+                total_water_meters = #{totalWaterMeters},
+            </if>
+            <if test="numberOfWaterMetersReviewed != null">
+                number_of_water_meters_reviewed = #{numberOfWaterMetersReviewed},
+            </if>
+            <if test="createDate != null">
+                create_date = #{createDate},
+            </if>
+            <if test="updateDate != null">
+                update_date = #{updateDate},
+            </if>
+            <if test="createBy != null and createBy != ''">
+                create_by = #{createBy},
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                update_by = #{updateBy},
+            </if>
+            <if test="status != null">
+                status = #{status},
+            </if>
+            <if test="billingPeriod != null ">
+                billing_period = #{billingPeriod},
+            </if>
+            <if test="clearingDay != null">
+                clearing_day = #{clearingDay},
+            </if>
+            <if test="clearingEndDate != null">
+                clearing_end_date = #{clearingEndDate},
+            </if>
+            <if test="clearingStartDate != null">
+                clearing_start_date = #{clearingStartDate},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+    <update id="modifyTheNumberOfAudits">
+        update rmcp_measurement_instance set number_of_water_meters_reviewed=
+                                                 number_of_water_meters_reviewed+#{size}
+                                where id=#{id}
+    </update>
+    <update id="modifyAllTheNumberOfAudits">
+        update rmcp_measurement_instance set number_of_water_meters_reviewed=total_water_meters
+        where id=#{id}
+    </update>
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete
+        from rmcp_measurement_instance
+        where id = #{id}
+    </delete>
+
+    <!-- 总数 -->
+    <select id="count" resultType="int">
+        select count(*)
+        from rmcp_measurement_instance
+    </select>
+
+    <select id="findClearingRecord" resultType="com.zcxk.rmcp.core.entity.MeasurementInstance">
+        select id from rmcp_measurement_instance where id=#{id} and clearing_day=#{lastClearingDay}
+    </select>
+    <sql id="permissionCondition">
+        <if test="userCondition.tenantId != null">and ms.tenant_id = #{userCondition.tenantId}</if>
+        <if test="userCondition.userType!=null and userCondition.userType!=-999 and userCondition.userType!=-9999 and  userCondition.programItems != null and userCondition.programItems.size() > 0">
+            <if test="userCondition.permissionType == 5 or userCondition.permissionType == 2">
+                and ( ms.dept_org_id in
+                <foreach collection="userCondition.programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                or
+                ms.company_org_id in
+                <foreach collection="userCondition.programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                )
+            </if>
+            <if test="userCondition.permissionType == 4 or userCondition.permissionType == 3">
+                and ms.dept_org_id in
+                <foreach collection="userCondition.programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
+            <if test="userCondition.permissionType == 1">
+                and ms.company_org_id in
+                <foreach collection="userCondition.programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                and (ms.dept_org_id is null or ms.dept_org_id =0)
+            </if>
+        </if>
+    </sql>
+</mapper>

+ 7 - 2
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/MeasurementRecordMapper.xml

@@ -71,13 +71,15 @@
     <!-- 批量新增 -->
     <insert id="batchInsert">
         insert into rmcp_measurement_record(id, meter_no, file_meter_no, approval_status, last_reading, current_reading,
-        location, plan_id, water_consumption, create_date, update_date, create_by, update_by, status)
+        location, plan_id, water_consumption, create_date, update_date, create_by, update_by, status,device_id,
+                                            last_period_date,current_period_date)
         values
         <foreach collection="measurementRecords" item="item" index="index" separator=",">
             (
             #{item.id}, #{item.meterNo}, #{item.fileMeterNo}, #{item.approvalStatus}, #{item.lastReading},
             #{item.currentReading}, #{item.location}, #{item.planId}, #{item.waterConsumption}, #{item.createDate},
-            #{item.updateDate}, #{item.createBy}, #{item.updateBy}, #{item.status} )
+            #{item.updateDate}, #{item.createBy}, #{item.updateBy}, #{item.status}, #{item.deviceId}
+            , #{item.lastPeriodDate}  , #{item.currentPeriodDate}  )
         </foreach>
     </insert>
 
@@ -156,5 +158,8 @@
         select count(*)
         from rmcp_measurement_record
     </select>
+    <select id="findClearingRecordItem" resultType="com.zcxk.rmcp.core.entity.MeasurementRecord">
+        select * from rmcp_measurement_record where device_id=#{deviceId} and planId=#{planId}
+    </select>
 
 </mapper>

+ 27 - 46
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/MeasurementSettlementMapper.xml

@@ -9,22 +9,19 @@
         <result property="companyOrgId" column="company_org_id" jdbcType="INTEGER"/>
         <result property="deptOrgId" column="dept_org_id" jdbcType="INTEGER"/>
         <result property="communityId" column="community_id" jdbcType="INTEGER"/>
-        <result property="totalWaterMeters" column="total_water_meters" jdbcType="INTEGER"/>
-        <result property="numberOfWaterMetersReviewed" column="number_of_water_meters_reviewed" jdbcType="INTEGER"/>
-        <result property="billingPeriod" column="billing_period" jdbcType="TIMESTAMP"/>
         <result property="billingCycle" column="billing_cycle" jdbcType="INTEGER"/>
-        <result property="planStatus" column="plan_status" jdbcType="INTEGER"/>
         <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
         <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
         <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
         <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
         <result property="status" column="status" jdbcType="INTEGER"/>
         <result property="taskId" column="task_id" jdbcType="INTEGER"/>
+        <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
     </resultMap>
 
     <!-- 基本字段 -->
     <sql id="Base_Column_List">
-        id, plan_name, settlement_time, company_org_id, dept_org_id, community_id, total_water_meters, number_of_water_meters_reviewed, billing_period, billing_cycle, plan_status, create_date, update_date, create_by, update_by, status, task_id    </sql>
+        id, plan_name, settlement_time, company_org_id, dept_org_id, community_id, billing_cycle, create_date, update_date, create_by, update_by, status, task_id, tenant_id    </sql>
 
     <!-- 查询单个 -->
     <select id="selectById" resultMap="MeasurementSettlementMap">
@@ -45,10 +42,15 @@
     <!--通过实体作为筛选条件查询-->
     <select id="selectList" resultType="com.zcxk.rmcp.api.dto.measurementSettlement.MeasurementSettlementDto">
         select
-        <include refid="Base_Column_List"/>
+        ms.id,ms.settlement_time,ms.plan_name,ms.billing_cycle,
+               company.ORG_NAME companyOrgName,depart.ORG_NAME deptOrgName,
+               commuity.name communityName
         from rmcp_measurement_settlement ms
+        join rmcp_org company on ms.company_org_id=company.ID
+        left join rmcp_org depart on ms.dept_org_id=depart.ID
+        left join  rmcp_community commuity on ms.community_id=commuity.id
         <where>
-            status=1
+            ms.status=1
             <if test="measurement.id != null">
                 and id = #{measurement.id}
             </if>
@@ -70,18 +72,9 @@
             <if test="measurement.totalWaterMeters != null">
                 and total_water_meters = #{measurement.totalWaterMeters}
             </if>
-            <if test="measurement.numberOfWaterMetersReviewed != null">
-                and number_of_water_meters_reviewed = #{measurement.numberOfWaterMetersReviewed}
-            </if>
-            <if test="measurement.billingPeriod != null">
-                and billing_period = #{measurement.billingPeriod}
-            </if>
             <if test="measurement.billingCycle != null">
                 and billing_cycle = #{measurement.billingCycle}
             </if>
-            <if test="measurement.planStatus != null">
-                and plan_status = #{measurement.planStatus}
-            </if>
             <if test="measurement.createDate != null">
                 and create_date = #{measurement.createDate}
             </if>
@@ -95,38 +88,35 @@
                 and update_by = #{measurement.updateBy}
             </if>
             <if test="measurement.status != null and measurement.status != ''">
-                and status = #{measurement.status}
+                and ms.status = #{measurement.status}
             </if>
             <if test="measurement.taskId != null">
                 and task_id = #{measurement.taskId}
             </if>
             <include refid="permissionCondition"/>
         </where>
+        order by ms.create_date desc
     </select>
 
     <!-- 新增所有列 -->
     <insert id="insert" keyProperty="id" useGeneratedKeys="true">
         insert into rmcp_measurement_settlement(id, plan_name, settlement_time, company_org_id, dept_org_id,
-                                                community_id, total_water_meters, number_of_water_meters_reviewed,
-                                                billing_period, billing_cycle, plan_status, create_date, update_date,
-                                                create_by, update_by, status, task_id,tenant_id)
-        values (#{id}, #{planName}, #{settlementTime}, #{companyOrgId}, #{deptOrgId}, #{communityId},
-                #{totalWaterMeters}, #{numberOfWaterMetersReviewed}, #{billingPeriod}, #{billingCycle}, #{planStatus},
-                #{createDate}, #{updateDate}, #{createBy}, #{updateBy}, #{status}, #{taskId},#{tenantId})
+                                                community_id, billing_cycle, create_date, update_date, create_by,
+                                                update_by, status, task_id, tenant_id,total_water_meters)
+        values (#{id}, #{planName}, #{settlementTime}, #{companyOrgId}, #{deptOrgId}, #{communityId}, #{billingCycle},
+                #{createDate}, #{updateDate}, #{createBy}, #{updateBy}, #{status}, #{taskId}, #{tenantId},#{totalWaterMeters})
     </insert>
 
     <!-- 批量新增 -->
     <insert id="batchInsert">
         insert into rmcp_measurement_settlement(id, plan_name, settlement_time, company_org_id, dept_org_id,
-        community_id, total_water_meters, number_of_water_meters_reviewed, billing_period, billing_cycle, plan_status,
-        create_date, update_date, create_by, update_by, status, task_id)
+        community_id, billing_cycle, create_date, update_date, create_by, update_by, status, task_id, tenant_id)
         values
         <foreach collection="measurementSettlements" item="item" index="index" separator=",">
             (
             #{item.id}, #{item.planName}, #{item.settlementTime}, #{item.companyOrgId}, #{item.deptOrgId},
-            #{item.communityId}, #{item.totalWaterMeters}, #{item.numberOfWaterMetersReviewed}, #{item.billingPeriod},
-            #{item.billingCycle}, #{item.planStatus}, #{item.createDate}, #{item.updateDate}, #{item.createBy},
-            #{item.updateBy}, #{item.status}, #{item.taskId} )
+            #{item.communityId}, #{item.billingCycle}, #{item.createDate}, #{item.updateDate}, #{item.createBy},
+            #{item.updateBy}, #{item.status}, #{item.taskId}, #{item.tenantId} )
         </foreach>
     </insert>
 
@@ -149,21 +139,9 @@
             <if test="communityId != null">
                 community_id = #{communityId},
             </if>
-            <if test="totalWaterMeters != null">
-                total_water_meters = #{totalWaterMeters},
-            </if>
-            <if test="numberOfWaterMetersReviewed != null">
-                number_of_water_meters_reviewed = #{numberOfWaterMetersReviewed},
-            </if>
-            <if test="billingPeriod != null">
-                billing_period = #{billingPeriod},
-            </if>
             <if test="billingCycle != null">
                 billing_cycle = #{billingCycle},
             </if>
-            <if test="planStatus != null">
-                plan_status = #{planStatus},
-            </if>
             <if test="createDate != null">
                 create_date = #{createDate},
             </if>
@@ -182,13 +160,16 @@
             <if test="taskId != null">
                 task_id = #{taskId},
             </if>
+            <if test="tenantId != null and tenantId != ''">
+                tenant_id = #{tenantId},
+            </if>
+            <if test="totalWaterMeters != null">
+                total_water_meters = #{totalWaterMeters},
+            </if>
         </set>
         where id = #{id}
     </update>
-    <update id="setBillingPeriod">
-        update rmcp_measurement_settlement set billing_period=#{billingPeriod}
-        where id=#{id}
-    </update>
+
 
     <!--通过主键删除-->
     <delete id="deleteById">
@@ -204,7 +185,7 @@
         </foreach>
     </update>
     <update id="deleteAll">
-        update rmcp_measurement_settlement ms set status=1
+        update rmcp_measurement_settlement ms set status=0
         <where>
             <include refid="permissionCondition"/>
         </where>
@@ -308,4 +289,4 @@
             </if>
         </if>
     </sql>
-</mapper>
+</mapper>

+ 192 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/resources/mapper/AlarmTypeMapper.xml

@@ -0,0 +1,192 @@
+<?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.zcxk.rmcp.core.dao.AlarmTypeMapper">
+    <!-- 结果集 -->
+    <resultMap type="com.zcxk.rmcp.core.entity.AlarmType" id="AlarmTypeMap">
+        <result property="id" column="id" jdbcType="INTEGER"/>
+        <result property="productCategroyId" column="product_categroy_id" jdbcType="INTEGER"/>
+        <result property="deviceTypeId" column="device_type_id" jdbcType="INTEGER"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="status" column="status" jdbcType="INTEGER"/>
+        <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
+        <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+        <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
+        <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+        <result property="typeDesc" column="type_desc" jdbcType="VARCHAR"/>
+        <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <!-- 基本字段 -->
+    <sql id="Base_Column_List">
+        id, product_categroy_id, device_type_id, name, status, create_date, create_by, update_date, update_by, type_desc, tenant_id    </sql>
+
+    <!-- 查询单个 -->
+    <select id="selectById" resultMap="AlarmTypeMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_alarm_type
+        where id = #{id}
+    </select>
+
+
+    <!-- 查询全部 -->
+    <select id="selectAll" resultMap="AlarmTypeMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_alarm_type
+    </select>
+
+    <!--通过实体作为筛选条件查询-->
+    <select id="selectList" resultMap="AlarmTypeMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_alarm_type
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="productCategroyId != null">
+                and product_categroy_id = #{productCategroyId}
+            </if>
+            <if test="deviceTypeId != null">
+                and device_type_id = #{deviceTypeId}
+            </if>
+            <if test="name != null and name != ''">
+                and name = #{name}
+            </if>
+            <if test="status != null">
+                and status = #{status}
+            </if>
+            <if test="createDate != null">
+                and create_date = #{createDate}
+            </if>
+            <if test="createBy != null and createBy != ''">
+                and create_by = #{createBy}
+            </if>
+            <if test="updateDate != null">
+                and update_date = #{updateDate}
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                and update_by = #{updateBy}
+            </if>
+            <if test="typeDesc != null and typeDesc != ''">
+                and type_desc = #{typeDesc}
+            </if>
+            <if test="tenantId != null and tenantId != ''">
+                and tenant_id = #{tenantId}
+            </if>
+        </where>
+    </select>
+
+    <!-- 新增所有列 -->
+    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
+        insert into rmcp_alarm_type(id, product_categroy_id, device_type_id, name, status, create_date, create_by,
+                                    update_date, update_by, type_desc, tenant_id)
+        values (#{id}, #{productCategroyId}, #{deviceTypeId}, #{name}, #{status}, #{createDate}, #{createBy},
+                #{updateDate}, #{updateBy}, #{typeDesc}, #{tenantId})
+    </insert>
+
+    <!-- 批量新增 -->
+    <insert id="batchInsert">
+        insert into rmcp_alarm_type(id, product_categroy_id, device_type_id, name, status, create_date, create_by,
+        update_date, update_by, type_desc, tenant_id)
+        values
+        <foreach collection="alarmTypes" item="item" index="index" separator=",">
+            (
+            #{item.id}, #{item.productCategroyId}, #{item.deviceTypeId}, #{item.name}, #{item.status},
+            #{item.createDate}, #{item.createBy}, #{item.updateDate}, #{item.updateBy}, #{item.typeDesc},
+            #{item.tenantId} )
+        </foreach>
+    </insert>
+
+    <!-- 通过主键修改数据 -->
+    <update id="update">
+        update rmcp_alarm_type
+        <set>
+            <if test="productCategroyId != null">
+                product_categroy_id = #{productCategroyId},
+            </if>
+            <if test="deviceTypeId != null">
+                device_type_id = #{deviceTypeId},
+            </if>
+            <if test="name != null and name != ''">
+                name = #{name},
+            </if>
+            <if test="status != null">
+                status = #{status},
+            </if>
+            <if test="createDate != null">
+                create_date = #{createDate},
+            </if>
+            <if test="createBy != null and createBy != ''">
+                create_by = #{createBy},
+            </if>
+            <if test="updateDate != null">
+                update_date = #{updateDate},
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                update_by = #{updateBy},
+            </if>
+            <if test="typeDesc != null and typeDesc != ''">
+                type_desc = #{typeDesc},
+            </if>
+            <if test="tenantId != null and tenantId != ''">
+                tenant_id = #{tenantId},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete
+        from rmcp_alarm_type
+        where id = #{id}
+    </delete>
+
+    <!-- 总数 -->
+    <select id="count" resultType="int">
+        select count(*)
+        from rmcp_alarm_type
+    </select>
+    <select id="selectPage" resultMap="AlarmTypeMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_alarm_type
+        <where>
+            <if test="alarmType.id != null">
+                and id = #{alarmType.id}
+            </if>
+            <if test="alarmType.productCategroyId != null">
+                and product_categroy_id = #{alarmType.productCategroyId}
+            </if>
+            <if test="alarmType.deviceTypeId != null">
+                and device_type_id = #{alarmType.deviceTypeId}
+            </if>
+            <if test="alarmType.name != null and alarmType.name != ''">
+                and name = #{alarmType.name}
+            </if>
+            <if test="alarmType.status != null">
+                and status = #{alarmType.status}
+            </if>
+            <if test="alarmType.createDate != null">
+                and create_date = #{alarmType.createDate}
+            </if>
+            <if test="alarmType.createBy != null and alarmType.createBy != ''">
+                and create_by = #{alarmType.createBy}
+            </if>
+            <if test="alarmType.updateDate != null">
+                and update_date = #{alarmType.updateDate}
+            </if>
+            <if test="alarmType.updateBy != null and alarmType.updateBy != ''">
+                and update_by = #{alarmType.updateBy}
+            </if>
+            <if test="alarmType.typeDesc != null and alarmType.typeDesc != ''">
+                and type_desc = #{alarmType.typeDesc}
+            </if>
+            <if test="alarmType.tenantId != null and alarmType.tenantId != ''">
+                and tenant_id = #{alarmType.tenantId}
+            </if>
+        </where>
+    </select>
+</mapper>

+ 266 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/resources/mapper/DeviceAlarmRuleMapper.xml

@@ -0,0 +1,266 @@
+<?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.zcxk.rmcp.core.dao.DeviceAlarmRuleMapper">
+    <!-- 结果集 -->
+    <resultMap type="com.zcxk.rmcp.core.entity.DeviceAlarmRule" id="DeviceAlarmRuleMap">
+        <result property="id" column="id" jdbcType="INTEGER"/>
+        <result property="productCategroyId" column="product_categroy_id" jdbcType="INTEGER"/>
+        <result property="tenantId" column="tenant_id" jdbcType="INTEGER"/>
+        <result property="deviceType" column="device_type" jdbcType="INTEGER"/>
+        <result property="ruleName" column="rule_name" jdbcType="VARCHAR"/>
+        <result property="measuringCode" column="measuring_code" jdbcType="VARCHAR"/>
+        <result property="expression" column="expression" jdbcType="VARCHAR"/>
+        <result property="alarmTypeId" column="alarm_type_id" jdbcType="INTEGER"/>
+        <result property="status" column="status" jdbcType="INTEGER"/>
+        <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
+        <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+        <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
+        <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+        <result property="ruleDesc" column="rule_desc" jdbcType="VARCHAR"/>
+        <result property="value1" column="value1" jdbcType="VARCHAR"/>
+        <result property="value2" column="value2" jdbcType="VARCHAR"/>
+        <result property="measuringDataType" column="measuring_data_type" jdbcType="INTEGER"/>
+        <result property="specification" column="specification" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <!-- 基本字段 -->
+    <sql id="Base_Column_List">
+        id, product_categroy_id, tenant_id, device_type, rule_name, measuring_code, expression, alarm_type_id, status, create_date, create_by, update_date, update_by, rule_desc, value1, value2, measuring_data_type, specification    </sql>
+
+    <!-- 查询单个 -->
+    <select id="selectById" resultMap="DeviceAlarmRuleMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_device_alarm_rule
+        where id = #{id}
+    </select>
+
+
+    <!-- 查询全部 -->
+    <select id="selectAll" resultMap="DeviceAlarmRuleMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_device_alarm_rule
+    </select>
+
+    <!--通过实体作为筛选条件查询-->
+    <select id="selectList" resultMap="DeviceAlarmRuleMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_device_alarm_rule
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="productCategroyId != null">
+                and product_categroy_id = #{productCategroyId}
+            </if>
+            <if test="tenantId != null">
+                and tenant_id = #{tenantId}
+            </if>
+            <if test="deviceType != null">
+                and device_type = #{deviceType}
+            </if>
+            <if test="ruleName != null and ruleName != ''">
+                and rule_name = #{ruleName}
+            </if>
+            <if test="measuringCode != null and measuringCode != ''">
+                and measuring_code = #{measuringCode}
+            </if>
+            <if test="expression != null and expression != ''">
+                and expression = #{expression}
+            </if>
+            <if test="alarmTypeId != null">
+                and alarm_type_id = #{alarmTypeId}
+            </if>
+            <if test="status != null">
+                and status = #{status}
+            </if>
+            <if test="createDate != null">
+                and create_date = #{createDate}
+            </if>
+            <if test="createBy != null and createBy != ''">
+                and create_by = #{createBy}
+            </if>
+            <if test="updateDate != null">
+                and update_date = #{updateDate}
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                and update_by = #{updateBy}
+            </if>
+            <if test="ruleDesc != null and ruleDesc != ''">
+                and rule_desc = #{ruleDesc}
+            </if>
+            <if test="value1 != null and value1 != ''">
+                and value1 = #{value1}
+            </if>
+            <if test="value2 != null and value2 != ''">
+                and value2 = #{value2}
+            </if>
+            <if test="measuringDataType != null">
+                and measuring_data_type = #{measuringDataType}
+            </if>
+            <if test="specification != null and specification != ''">
+                and specification = #{specification}
+            </if>
+        </where>
+    </select>
+
+    <!-- 新增所有列 -->
+    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
+        insert into rmcp_device_alarm_rule(id, product_categroy_id, tenant_id, device_type, rule_name, measuring_code,
+                                           expression, alarm_type_id, status, create_date, create_by, update_date,
+                                           update_by, rule_desc, value1, value2, measuring_data_type, specification)
+        values (#{id}, #{productCategroyId}, #{tenantId}, #{deviceType}, #{ruleName}, #{measuringCode}, #{expression},
+                #{alarmTypeId}, #{status}, #{createDate}, #{createBy}, #{updateDate}, #{updateBy}, #{ruleDesc},
+                #{value1}, #{value2}, #{measuringDataType}, #{specification})
+    </insert>
+
+    <!-- 批量新增 -->
+    <insert id="batchInsert">
+        insert into rmcp_device_alarm_rule(id, product_categroy_id, tenant_id, device_type, rule_name, measuring_code,
+        expression, alarm_type_id, status, create_date, create_by, update_date, update_by, rule_desc, value1, value2,
+        measuring_data_type, specification)
+        values
+        <foreach collection="deviceAlarmRules" item="item" index="index" separator=",">
+            (
+            #{item.id}, #{item.productCategroyId}, #{item.tenantId}, #{item.deviceType}, #{item.ruleName},
+            #{item.measuringCode}, #{item.expression}, #{item.alarmTypeId}, #{item.status}, #{item.createDate},
+            #{item.createBy}, #{item.updateDate}, #{item.updateBy}, #{item.ruleDesc}, #{item.value1}, #{item.value2},
+            #{item.measuringDataType}, #{item.specification} )
+        </foreach>
+    </insert>
+
+    <!-- 通过主键修改数据 -->
+    <update id="update">
+        update rmcp_device_alarm_rule
+        <set>
+            <if test="productCategroyId != null">
+                product_categroy_id = #{productCategroyId},
+            </if>
+            <if test="tenantId != null">
+                tenant_id = #{tenantId},
+            </if>
+            <if test="deviceType != null">
+                device_type = #{deviceType},
+            </if>
+            <if test="ruleName != null and ruleName != ''">
+                rule_name = #{ruleName},
+            </if>
+            <if test="measuringCode != null and measuringCode != ''">
+                measuring_code = #{measuringCode},
+            </if>
+            <if test="expression != null and expression != ''">
+                expression = #{expression},
+            </if>
+            <if test="alarmTypeId != null">
+                alarm_type_id = #{alarmTypeId},
+            </if>
+            <if test="status != null">
+                status = #{status},
+            </if>
+            <if test="createDate != null">
+                create_date = #{createDate},
+            </if>
+            <if test="createBy != null and createBy != ''">
+                create_by = #{createBy},
+            </if>
+            <if test="updateDate != null">
+                update_date = #{updateDate},
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                update_by = #{updateBy},
+            </if>
+            <if test="ruleDesc != null and ruleDesc != ''">
+                rule_desc = #{ruleDesc},
+            </if>
+            <if test="value1 != null and value1 != ''">
+                value1 = #{value1},
+            </if>
+            <if test="value2 != null and value2 != ''">
+                value2 = #{value2},
+            </if>
+            <if test="measuringDataType != null">
+                measuring_data_type = #{measuringDataType},
+            </if>
+            <if test="specification != null and specification != ''">
+                specification = #{specification},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete
+        from rmcp_device_alarm_rule
+        where id = #{id}
+    </delete>
+
+    <!-- 总数 -->
+    <select id="count" resultType="int">
+        select count(*)
+        from rmcp_device_alarm_rule
+    </select>
+    <select id="selectPage" resultMap="DeviceAlarmRuleMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_device_alarm_rule
+        <where>
+            <if test="deviceAlarmRule.id != null">
+                and id = #{deviceAlarmRule.id}
+            </if>
+            <if test="deviceAlarmRule.productCategroyId != null">
+                and product_categroy_id = #{deviceAlarmRule.productCategroyId}
+            </if>
+            <if test="deviceAlarmRule.tenantId != null">
+                and tenant_id = #{deviceAlarmRule.tenantId}
+            </if>
+            <if test="deviceAlarmRule.deviceType != null">
+                and device_type = #{deviceAlarmRule.deviceType}
+            </if>
+            <if test="deviceAlarmRule.ruleName != null and deviceAlarmRule.ruleName != ''">
+                and rule_name = #{deviceAlarmRule.ruleName}
+            </if>
+            <if test="deviceAlarmRule.measuringCode != null and deviceAlarmRule.measuringCode != ''">
+                and measuring_code = #{deviceAlarmRule.measuringCode}
+            </if>
+            <if test="deviceAlarmRule.expression != null and deviceAlarmRule.expression != ''">
+                and expression = #{deviceAlarmRule.expression}
+            </if>
+            <if test="deviceAlarmRule.alarmTypeId != null">
+                and alarm_type_id = #{deviceAlarmRule.alarmTypeId}
+            </if>
+            <if test="deviceAlarmRule.status != null">
+                and status = #{deviceAlarmRule.status}
+            </if>
+            <if test="deviceAlarmRule.createDate != null">
+                and create_date = #{deviceAlarmRule.createDate}
+            </if>
+            <if test="deviceAlarmRule.createBy != null and deviceAlarmRule.createBy != ''">
+                and create_by = #{deviceAlarmRule.createBy}
+            </if>
+            <if test="deviceAlarmRule.updateDate != null">
+                and update_date = #{deviceAlarmRule.updateDate}
+            </if>
+            <if test="deviceAlarmRule.updateBy != null and deviceAlarmRule.updateBy != ''">
+                and update_by = #{deviceAlarmRule.updateBy}
+            </if>
+            <if test="deviceAlarmRule.ruleDesc != null and deviceAlarmRule.ruleDesc != ''">
+                and rule_desc = #{deviceAlarmRule.ruleDesc}
+            </if>
+            <if test="deviceAlarmRule.value1 != null and deviceAlarmRule.value1 != ''">
+                and value1 = #{deviceAlarmRule.value1}
+            </if>
+            <if test="deviceAlarmRule.value2 != null and deviceAlarmRule.value2 != ''">
+                and value2 = #{deviceAlarmRule.value2}
+            </if>
+            <if test="deviceAlarmRule.measuringDataType != null">
+                and measuring_data_type = #{deviceAlarmRule.measuringDataType}
+            </if>
+            <if test="deviceAlarmRule.specification != null and deviceAlarmRule.specification != ''">
+                and specification = #{deviceAlarmRule.specification}
+            </if>
+        </where>
+    </select>
+</mapper>

+ 234 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/resources/mapper/MeasurementRecordMapper.xml

@@ -0,0 +1,234 @@
+<?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.zcxk.rmcp.core.dao.MeasurementRecordMapper">
+    <!-- 结果集 -->
+    <resultMap type="com.zcxk.rmcp.core.entity.MeasurementRecord" id="MeasurementRecordMap">
+        <result property="id" column="id" jdbcType="INTEGER"/>
+        <result property="meterNo" column="meter_no" jdbcType="VARCHAR"/>
+        <result property="fileMeterNo" column="file_meter_no" jdbcType="VARCHAR"/>
+        <result property="approvalStatus" column="approval_status" jdbcType="VARCHAR"/>
+        <result property="lastReading" column="last_reading" jdbcType="VARCHAR"/>
+        <result property="currentReading" column="current_reading" jdbcType="VARCHAR"/>
+        <result property="location" column="location" jdbcType="VARCHAR"/>
+        <result property="planId" column="plan_id" jdbcType="INTEGER"/>
+        <result property="waterConsumption" column="water_consumption" jdbcType="NUMERIC"/>
+        <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
+        <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
+        <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+        <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+        <result property="status" column="status" jdbcType="INTEGER"/>
+        <result property="deviceId" column="device_id" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <!-- 基本字段 -->
+    <sql id="Base_Column_List">
+        id, meter_no, file_meter_no, approval_status, last_reading, current_reading, location, plan_id, water_consumption, create_date, update_date, create_by, update_by, status, device_id    </sql>
+
+    <!-- 查询单个 -->
+    <select id="selectById" resultMap="MeasurementRecordMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_measurement_record
+        where id = #{id}
+    </select>
+
+
+    <!-- 查询全部 -->
+    <select id="selectAll" resultMap="MeasurementRecordMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_measurement_record
+    </select>
+
+    <!--通过实体作为筛选条件查询-->
+    <select id="selectList" resultMap="MeasurementRecordMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_measurement_record
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="meterNo != null and meterNo != ''">
+                and meter_no = #{meterNo}
+            </if>
+            <if test="fileMeterNo != null and fileMeterNo != ''">
+                and file_meter_no = #{fileMeterNo}
+            </if>
+            <if test="approvalStatus != null and approvalStatus != ''">
+                and approval_status = #{approvalStatus}
+            </if>
+            <if test="lastReading != null and lastReading != ''">
+                and last_reading = #{lastReading}
+            </if>
+            <if test="currentReading != null and currentReading != ''">
+                and current_reading = #{currentReading}
+            </if>
+            <if test="location != null and location != ''">
+                and location = #{location}
+            </if>
+            <if test="planId != null">
+                and plan_id = #{planId}
+            </if>
+            <if test="waterConsumption != null">
+                and water_consumption = #{waterConsumption}
+            </if>
+            <if test="createDate != null">
+                and create_date = #{createDate}
+            </if>
+            <if test="updateDate != null">
+                and update_date = #{updateDate}
+            </if>
+            <if test="createBy != null and createBy != ''">
+                and create_by = #{createBy}
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                and update_by = #{updateBy}
+            </if>
+            <if test="status != null">
+                and status = #{status}
+            </if>
+            <if test="deviceId != null">
+                and device_id = #{deviceId}
+            </if>
+        </where>
+    </select>
+
+    <!-- 新增所有列 -->
+    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
+        insert into rmcp_measurement_record(id, meter_no, file_meter_no, approval_status, last_reading, current_reading,
+                                            location, plan_id, water_consumption, create_date, update_date, create_by,
+                                            update_by, status, device_id)
+        values (#{id}, #{meterNo}, #{fileMeterNo}, #{approvalStatus}, #{lastReading}, #{currentReading}, #{location},
+                #{planId}, #{waterConsumption}, #{createDate}, #{updateDate}, #{createBy}, #{updateBy}, #{status},
+                #{deviceId})
+    </insert>
+
+    <!-- 批量新增 -->
+    <insert id="batchInsert">
+        insert into rmcp_measurement_record(id, meter_no, file_meter_no, approval_status, last_reading, current_reading,
+        location, plan_id, water_consumption, create_date, update_date, create_by, update_by, status, device_id)
+        values
+        <foreach collection="measurementRecords" item="item" index="index" separator=",">
+            (
+            #{item.id}, #{item.meterNo}, #{item.fileMeterNo}, #{item.approvalStatus}, #{item.lastReading},
+            #{item.currentReading}, #{item.location}, #{item.planId}, #{item.waterConsumption}, #{item.createDate},
+            #{item.updateDate}, #{item.createBy}, #{item.updateBy}, #{item.status}, #{item.deviceId} )
+        </foreach>
+    </insert>
+
+    <!-- 通过主键修改数据 -->
+    <update id="update">
+        update rmcp_measurement_record
+        <set>
+            <if test="meterNo != null and meterNo != ''">
+                meter_no = #{meterNo},
+            </if>
+            <if test="fileMeterNo != null and fileMeterNo != ''">
+                file_meter_no = #{fileMeterNo},
+            </if>
+            <if test="approvalStatus != null and approvalStatus != ''">
+                approval_status = #{approvalStatus},
+            </if>
+            <if test="lastReading != null and lastReading != ''">
+                last_reading = #{lastReading},
+            </if>
+            <if test="currentReading != null and currentReading != ''">
+                current_reading = #{currentReading},
+            </if>
+            <if test="location != null and location != ''">
+                location = #{location},
+            </if>
+            <if test="planId != null">
+                plan_id = #{planId},
+            </if>
+            <if test="waterConsumption != null">
+                water_consumption = #{waterConsumption},
+            </if>
+            <if test="createDate != null">
+                create_date = #{createDate},
+            </if>
+            <if test="updateDate != null">
+                update_date = #{updateDate},
+            </if>
+            <if test="createBy != null and createBy != ''">
+                create_by = #{createBy},
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                update_by = #{updateBy},
+            </if>
+            <if test="status != null">
+                status = #{status},
+            </if>
+            <if test="deviceId != null">
+                device_id = #{deviceId},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete
+        from rmcp_measurement_record
+        where id = #{id}
+    </delete>
+
+    <!-- 总数 -->
+    <select id="count" resultType="int">
+        select count(*)
+        from rmcp_measurement_record
+    </select>
+    <select id="selectPage" resultMap="MeasurementRecordMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_measurement_record
+        <where>
+            <if test="measurementRecord.id != null">
+                and id = #{measurementRecord.id}
+            </if>
+            <if test="measurementRecord.meterNo != null and measurementRecord.meterNo != ''">
+                and meter_no = #{measurementRecord.meterNo}
+            </if>
+            <if test="measurementRecord.fileMeterNo != null and measurementRecord.fileMeterNo != ''">
+                and file_meter_no = #{measurementRecord.fileMeterNo}
+            </if>
+            <if test="measurementRecord.approvalStatus != null and measurementRecord.approvalStatus != ''">
+                and approval_status = #{measurementRecord.approvalStatus}
+            </if>
+            <if test="measurementRecord.lastReading != null and measurementRecord.lastReading != ''">
+                and last_reading = #{measurementRecord.lastReading}
+            </if>
+            <if test="measurementRecord.currentReading != null and measurementRecord.currentReading != ''">
+                and current_reading = #{measurementRecord.currentReading}
+            </if>
+            <if test="measurementRecord.location != null and measurementRecord.location != ''">
+                and location = #{measurementRecord.location}
+            </if>
+            <if test="measurementRecord.planId != null">
+                and plan_id = #{measurementRecord.planId}
+            </if>
+            <if test="measurementRecord.waterConsumption != null">
+                and water_consumption = #{measurementRecord.waterConsumption}
+            </if>
+            <if test="measurementRecord.createDate != null">
+                and create_date = #{measurementRecord.createDate}
+            </if>
+            <if test="measurementRecord.updateDate != null">
+                and update_date = #{measurementRecord.updateDate}
+            </if>
+            <if test="measurementRecord.createBy != null and measurementRecord.createBy != ''">
+                and create_by = #{measurementRecord.createBy}
+            </if>
+            <if test="measurementRecord.updateBy != null and measurementRecord.updateBy != ''">
+                and update_by = #{measurementRecord.updateBy}
+            </if>
+            <if test="measurementRecord.status != null">
+                and status = #{measurementRecord.status}
+            </if>
+            <if test="measurementRecord.deviceId != null">
+                and device_id = #{measurementRecord.deviceId}
+            </if>
+        </where>
+    </select>
+</mapper>

+ 192 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/resources/mapper/RmcpAlarmTypeMapper.xml

@@ -0,0 +1,192 @@
+<?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.zcxk.rmcp.core.dao.RmcpAlarmTypeMapper">
+    <!-- 结果集 -->
+    <resultMap type="com.zcxk.rmcp.core.entity.RmcpAlarmType" id="RmcpAlarmTypeMap">
+        <result property="id" column="id" jdbcType="INTEGER"/>
+        <result property="productCategroyId" column="product_categroy_id" jdbcType="INTEGER"/>
+        <result property="deviceTypeId" column="device_type_id" jdbcType="INTEGER"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="status" column="status" jdbcType="INTEGER"/>
+        <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
+        <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+        <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
+        <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+        <result property="typeDesc" column="type_desc" jdbcType="VARCHAR"/>
+        <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <!-- 基本字段 -->
+    <sql id="Base_Column_List">
+        id, product_categroy_id, device_type_id, name, status, create_date, create_by, update_date, update_by, type_desc, tenant_id    </sql>
+
+    <!-- 查询单个 -->
+    <select id="selectById" resultMap="RmcpAlarmTypeMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_alarm_type
+        where id = #{id}
+    </select>
+
+
+    <!-- 查询全部 -->
+    <select id="selectAll" resultMap="RmcpAlarmTypeMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_alarm_type
+    </select>
+
+    <!--通过实体作为筛选条件查询-->
+    <select id="selectList" resultMap="RmcpAlarmTypeMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_alarm_type
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="productCategroyId != null">
+                and product_categroy_id = #{productCategroyId}
+            </if>
+            <if test="deviceTypeId != null">
+                and device_type_id = #{deviceTypeId}
+            </if>
+            <if test="name != null and name != ''">
+                and name = #{name}
+            </if>
+            <if test="status != null">
+                and status = #{status}
+            </if>
+            <if test="createDate != null">
+                and create_date = #{createDate}
+            </if>
+            <if test="createBy != null and createBy != ''">
+                and create_by = #{createBy}
+            </if>
+            <if test="updateDate != null">
+                and update_date = #{updateDate}
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                and update_by = #{updateBy}
+            </if>
+            <if test="typeDesc != null and typeDesc != ''">
+                and type_desc = #{typeDesc}
+            </if>
+            <if test="tenantId != null and tenantId != ''">
+                and tenant_id = #{tenantId}
+            </if>
+        </where>
+    </select>
+
+    <!-- 新增所有列 -->
+    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
+        insert into rmcp_alarm_type(id, product_categroy_id, device_type_id, name, status, create_date, create_by,
+                                    update_date, update_by, type_desc, tenant_id)
+        values (#{id}, #{productCategroyId}, #{deviceTypeId}, #{name}, #{status}, #{createDate}, #{createBy},
+                #{updateDate}, #{updateBy}, #{typeDesc}, #{tenantId})
+    </insert>
+
+    <!-- 批量新增 -->
+    <insert id="batchInsert">
+        insert into rmcp_alarm_type(id, product_categroy_id, device_type_id, name, status, create_date, create_by,
+        update_date, update_by, type_desc, tenant_id)
+        values
+        <foreach collection="rmcpAlarmTypes" item="item" index="index" separator=",">
+            (
+            #{item.id}, #{item.productCategroyId}, #{item.deviceTypeId}, #{item.name}, #{item.status},
+            #{item.createDate}, #{item.createBy}, #{item.updateDate}, #{item.updateBy}, #{item.typeDesc},
+            #{item.tenantId} )
+        </foreach>
+    </insert>
+
+    <!-- 通过主键修改数据 -->
+    <update id="update">
+        update rmcp_alarm_type
+        <set>
+            <if test="productCategroyId != null">
+                product_categroy_id = #{productCategroyId},
+            </if>
+            <if test="deviceTypeId != null">
+                device_type_id = #{deviceTypeId},
+            </if>
+            <if test="name != null and name != ''">
+                name = #{name},
+            </if>
+            <if test="status != null">
+                status = #{status},
+            </if>
+            <if test="createDate != null">
+                create_date = #{createDate},
+            </if>
+            <if test="createBy != null and createBy != ''">
+                create_by = #{createBy},
+            </if>
+            <if test="updateDate != null">
+                update_date = #{updateDate},
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                update_by = #{updateBy},
+            </if>
+            <if test="typeDesc != null and typeDesc != ''">
+                type_desc = #{typeDesc},
+            </if>
+            <if test="tenantId != null and tenantId != ''">
+                tenant_id = #{tenantId},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete
+        from rmcp_alarm_type
+        where id = #{id}
+    </delete>
+
+    <!-- 总数 -->
+    <select id="count" resultType="int">
+        select count(*)
+        from rmcp_alarm_type
+    </select>
+    <select id="selectPage" resultMap="RmcpAlarmTypeMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rmcp_alarm_type
+        <where>
+            <if test="rmcpAlarmType.id != null">
+                and id = #{rmcpAlarmType.id}
+            </if>
+            <if test="rmcpAlarmType.productCategroyId != null">
+                and product_categroy_id = #{rmcpAlarmType.productCategroyId}
+            </if>
+            <if test="rmcpAlarmType.deviceTypeId != null">
+                and device_type_id = #{rmcpAlarmType.deviceTypeId}
+            </if>
+            <if test="rmcpAlarmType.name != null and rmcpAlarmType.name != ''">
+                and name = #{rmcpAlarmType.name}
+            </if>
+            <if test="rmcpAlarmType.status != null">
+                and status = #{rmcpAlarmType.status}
+            </if>
+            <if test="rmcpAlarmType.createDate != null">
+                and create_date = #{rmcpAlarmType.createDate}
+            </if>
+            <if test="rmcpAlarmType.createBy != null and rmcpAlarmType.createBy != ''">
+                and create_by = #{rmcpAlarmType.createBy}
+            </if>
+            <if test="rmcpAlarmType.updateDate != null">
+                and update_date = #{rmcpAlarmType.updateDate}
+            </if>
+            <if test="rmcpAlarmType.updateBy != null and rmcpAlarmType.updateBy != ''">
+                and update_by = #{rmcpAlarmType.updateBy}
+            </if>
+            <if test="rmcpAlarmType.typeDesc != null and rmcpAlarmType.typeDesc != ''">
+                and type_desc = #{rmcpAlarmType.typeDesc}
+            </if>
+            <if test="rmcpAlarmType.tenantId != null and rmcpAlarmType.tenantId != ''">
+                and tenant_id = #{rmcpAlarmType.tenantId}
+            </if>
+        </where>
+    </select>
+</mapper>

+ 90 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/controller/AlarmRuleController.java

@@ -0,0 +1,90 @@
+package com.zcxk.rmcp.web.controller;
+
+
+import com.zcxk.core.common.pojo.AjaxMessage;
+import com.zcxk.rmcp.api.dto.alarm.AlarmRuleDto;
+import com.zcxk.rmcp.api.dto.alarm.ConfigDataDto;
+import com.zcxk.rmcp.api.dto.alarm.RuleMeasuringDto;
+import com.zcxk.rmcp.web.service.AlarmRuleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Controller
+@ResponseBody
+@RequestMapping("alarmRule")
+@Api(tags  = "规则管理")
+public class AlarmRuleController {
+
+    @Autowired
+    private AlarmRuleService deviceAlarmRuleService;
+
+    @GetMapping("/getList")
+    @ApiOperation(value = "查询异常规则列表")
+    public AjaxMessage<List<AlarmRuleDto>> getList(
+            @ApiParam(value = "异常类型id", required = true) @RequestParam Integer alarmTypeId
+    ) {
+        List<AlarmRuleDto> list = deviceAlarmRuleService.getList(alarmTypeId);
+        return AjaxMessage.success(list);
+    }
+
+    @PostMapping("add")
+    @ApiOperation(value = "添加规则")
+    public AjaxMessage add(
+            @ApiParam(value = "规则", required = true) @RequestBody AlarmRuleDto deviceAlarmRule
+    ) {
+        deviceAlarmRuleService.add(deviceAlarmRule);
+        return AjaxMessage.success();
+    }
+
+    @PutMapping("edit")
+    @ApiOperation(value = "编辑规则")
+    public AjaxMessage edit(
+            @ApiParam(value = "规则", required = true) @RequestBody AlarmRuleDto deviceAlarmRule
+    ) {
+        deviceAlarmRuleService.edit(deviceAlarmRule);
+        return AjaxMessage.success();
+    }
+
+    @DeleteMapping("delete")
+    //@PreAuthorize("hasAuthority('sys:exception:del')")
+    @ApiOperation(value = "删除规则")
+    public AjaxMessage delete(
+            @ApiParam(value = "规则id", required = true) @RequestBody List<Integer>ids
+    ) {
+        deviceAlarmRuleService.delete(ids);
+        return AjaxMessage.success();
+    }
+
+    @DeleteMapping("deleteAll")
+    @ApiOperation(value = "删除规则")
+    public AjaxMessage deleteAll(
+    ) {
+        deviceAlarmRuleService.deleteAll();
+        return AjaxMessage.success();
+    }
+
+    @GetMapping("/getRuleMeasuringList")
+    @ApiOperation(value = "查询规则的测点列表")
+    public AjaxMessage<List<RuleMeasuringDto>> getRuleMeasuringList(
+            @ApiParam(value = "异常类型id", required = true) @RequestParam(required = true) Integer alarmTypeId
+    ) {
+        List<RuleMeasuringDto> list = deviceAlarmRuleService.getRuleMeasuringList(alarmTypeId);
+        return AjaxMessage.success(list);
+    }
+
+    @GetMapping("/getMeasuringOptionList")
+    @ApiOperation(value = "查询测点的选择项目")
+    public AjaxMessage<List<ConfigDataDto>> getMeasuringOptionList(
+            @ApiParam(value = "异常类型id", required = true) @RequestParam(required = true) Integer alarmTypeId,
+            @ApiParam(value = "测点id", required = true) @RequestParam(required = true) Integer measuringId
+    ) {
+        List<ConfigDataDto> list = deviceAlarmRuleService.getMeasuringOptionList(alarmTypeId, measuringId);
+        return AjaxMessage.success(list);
+    }
+}

+ 90 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/controller/AlarmTypeController.java

@@ -0,0 +1,90 @@
+package com.zcxk.rmcp.web.controller;
+
+
+import com.zcxk.core.common.enums.RespCodeEnum;
+import com.zcxk.core.common.pojo.AjaxMessage;
+import com.zcxk.core.mysql.pageing.Pagination;
+import com.zcxk.rmcp.api.dto.alarm.AlarmTypeDto;
+import com.zcxk.rmcp.api.dto.alarm.AlarmTypePageDto;
+import com.zcxk.rmcp.web.service.AlarmTypeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Controller
+@ResponseBody
+@RequestMapping("alarmType")
+@Api(tags = "异常类型管理")
+public class AlarmTypeController {
+
+    @Autowired
+    private AlarmTypeService alarmTypeService;
+
+    @GetMapping("/getAlarmTypePage")
+    @ApiOperation(value = "查询异常类型分页")
+    public AjaxMessage<Pagination<AlarmTypeDto>> getAlarmTypePage(
+            @RequestBody AlarmTypePageDto alarmTypePageDto) {
+        Pagination<AlarmTypeDto> pageInfo = alarmTypeService.getAlarmTypePage(alarmTypePageDto);
+        return AjaxMessage.success(pageInfo);
+    }
+
+
+
+    @PostMapping("add")
+    @ApiOperation(value = "添加异常类型")
+    public AjaxMessage add(
+            @ApiParam(value = "异常类型", required = true) @RequestBody AlarmTypeDto alarmType
+    ) {
+        alarmTypeService.add(alarmType);
+        return AjaxMessage.success();
+    }
+
+    @PutMapping("edit")
+    @ApiOperation(value = "编辑异常类型")
+    public AjaxMessage edit(
+            @ApiParam(value = "异常类型", required = true) @RequestBody AlarmTypeDto alarmType
+    ) {
+        alarmTypeService.edit(alarmType);
+        return AjaxMessage.success();
+    }
+
+    @DeleteMapping("delete")
+    @ApiOperation(value = "删除")
+    public AjaxMessage delete(
+            @ApiParam(value = "异常类型id", required = true) @RequestBody List<Integer>ids
+    ) {
+        int result=alarmTypeService.delete(ids);
+        if(result==1){
+            return AjaxMessage.fail(RespCodeEnum.ALAM_TYPE_DELETION_ERROR);
+
+        }
+        return AjaxMessage.success();
+    }
+    @DeleteMapping("deleteAll")
+    @ApiOperation(value = "删除全部")
+    public AjaxMessage deleteAll()
+
+     {
+        int result=alarmTypeService.deleteAll();
+        if(result==1){
+            return AjaxMessage.fail(RespCodeEnum.ALAM_TYPE_DELETION_ERROR);
+        }
+         return AjaxMessage.success();
+    }
+
+    @PostMapping("updateStatus")
+    @ApiOperation(value = "启用/禁用异常类型")
+    public AjaxMessage updateStatus(
+            @ApiParam(value = "异常类型id", required = true) @RequestParam(required = true) Integer id
+    ) {
+        alarmTypeService.updateStatus(id);
+        return AjaxMessage.success();
+    }
+
+
+}

+ 2 - 2
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/controller/MeasurementSettlementController.java

@@ -58,14 +58,14 @@ public class MeasurementSettlementController {
         return AjaxMessage.success();
     }
     @RequestMapping(value = "/page/detail", method = RequestMethod.POST)
-    @ApiOperation(value = "查询计划详细记录")
+    @ApiOperation(value = "查询结算记录详细记录")
     public AjaxMessage<Pagination<MeasurementRecordDto>> pageMeasurementRecord(@RequestBody @Valid MeasurementRecordPageDto pageDto) {
         return AjaxMessage.success(measurementSettlementService.pageMeasurementRecord(pageDto));
     }
 
     @RequestMapping(value = "/audit", method = RequestMethod.POST)
     @ApiOperation(value = "审核水量")
-    public AjaxMessage<Void> auditWater(@RequestBody List<Integer> ids) {
+    public AjaxMessage<Void> auditWater(@RequestBody List<MeasurementRecordDto> ids) {
         measurementSettlementService.auditWater(ids);
         return AjaxMessage.success();
     }

+ 23 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/AlarmRuleService.java

@@ -0,0 +1,23 @@
+package com.zcxk.rmcp.web.service;
+
+import com.zcxk.rmcp.api.dto.alarm.AlarmRuleDto;
+import com.zcxk.rmcp.api.dto.alarm.ConfigDataDto;
+import com.zcxk.rmcp.api.dto.alarm.RuleMeasuringDto;
+
+import java.util.List;
+
+public interface AlarmRuleService {
+    List<AlarmRuleDto> getList(Integer alarmTypeId);
+
+    void add(AlarmRuleDto deviceAlarmRule);
+
+    void edit(AlarmRuleDto deviceAlarmRule);
+
+    void delete(List<Integer> ids);
+
+    void deleteAll();
+
+    List<RuleMeasuringDto> getRuleMeasuringList(Integer alarmTypeId);
+
+    List<ConfigDataDto> getMeasuringOptionList(Integer alarmTypeId, Integer measuringId);
+}

+ 21 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/AlarmTypeService.java

@@ -0,0 +1,21 @@
+package com.zcxk.rmcp.web.service;
+
+import com.zcxk.core.mysql.pageing.Pagination;
+import com.zcxk.rmcp.api.dto.alarm.AlarmTypeDto;
+import com.zcxk.rmcp.api.dto.alarm.AlarmTypePageDto;
+
+import java.util.List;
+
+public interface AlarmTypeService {
+    Pagination<AlarmTypeDto> getAlarmTypePage(AlarmTypePageDto alarmTypePageDto);
+
+    void add(AlarmTypeDto alarmType);
+
+    void edit(AlarmTypeDto alarmType);
+
+    int delete(List<Integer> ids);
+
+    int deleteAll();
+
+    void updateStatus(Integer id);
+}

+ 2 - 1
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/MeasurementSettlementService.java

@@ -70,8 +70,9 @@ public interface MeasurementSettlementService {
      * @author hym
      * @updateTime 2021/7/22 16:05
      * @throws
+     * @param ids
      */
-    void auditWater(List<Integer> ids);
+    void auditWater(List<MeasurementRecordDto> ids);
     /**
      *
      * @description 审核所有用数量

+ 46 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/impl/AlarmRuleServiceImpl.java

@@ -0,0 +1,46 @@
+package com.zcxk.rmcp.web.service.impl;
+
+import com.zcxk.rmcp.api.dto.alarm.AlarmRuleDto;
+import com.zcxk.rmcp.api.dto.alarm.ConfigDataDto;
+import com.zcxk.rmcp.api.dto.alarm.RuleMeasuringDto;
+import com.zcxk.rmcp.web.service.AlarmRuleService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+@Service
+public class AlarmRuleServiceImpl implements AlarmRuleService {
+    @Override
+    public List<AlarmRuleDto> getList(Integer alarmTypeId) {
+        return null;
+    }
+
+    @Override
+    public void add(AlarmRuleDto deviceAlarmRule) {
+
+    }
+
+    @Override
+    public void edit(AlarmRuleDto deviceAlarmRule) {
+
+    }
+
+    @Override
+    public void delete(List<Integer> ids) {
+
+    }
+
+    @Override
+    public void deleteAll() {
+
+    }
+
+    @Override
+    public List<RuleMeasuringDto> getRuleMeasuringList(Integer alarmTypeId) {
+        return null;
+    }
+
+    @Override
+    public List<ConfigDataDto> getMeasuringOptionList(Integer alarmTypeId, Integer measuringId) {
+        return null;
+    }
+}

+ 61 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/impl/AlarmTypeServiceImpl.java

@@ -0,0 +1,61 @@
+package com.zcxk.rmcp.web.service.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.page.PageMethod;
+import com.zcxk.core.common.util.BeanCopyUtils;
+import com.zcxk.core.mysql.pageing.Pagination;
+import com.zcxk.rmcp.api.dto.alarm.AlarmTypeDto;
+import com.zcxk.rmcp.api.dto.alarm.AlarmTypePageDto;
+import com.zcxk.rmcp.core.dao.AlarmTypeMapper;
+import com.zcxk.rmcp.core.entity.AlarmType;
+import com.zcxk.rmcp.core.entity.MeasurementSettlement;
+import com.zcxk.rmcp.web.service.AlarmTypeService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.List;
+@Service
+public class AlarmTypeServiceImpl implements AlarmTypeService {
+    @Resource
+    AlarmTypeMapper alarmTypeMapper;
+    @Override
+    public Pagination<AlarmTypeDto> getAlarmTypePage(AlarmTypePageDto alarmTypePageDto) {
+        PageMethod.startPage(alarmTypePageDto.getPageNum(),alarmTypePageDto.getPageSize());
+        List<AlarmTypeDto> alarmTypes = alarmTypeMapper.selectList(alarmTypePageDto);
+        if (CollectionUtils.isEmpty(alarmTypes)){
+            return new Pagination<>();
+        }
+        return new Pagination<>(alarmTypes);
+    }
+
+    @Override
+    public void add(AlarmTypeDto alarmTypeDto) {
+        AlarmType alarmType=new AlarmType();
+        BeanCopyUtils.copyProperties(alarmTypeDto, alarmType, AlarmType.class);
+        alarmTypeMapper.insert(alarmType);
+    }
+
+    @Override
+    public void edit(AlarmTypeDto alarmTypeDto) {
+        AlarmType alarmType=new AlarmType();
+        BeanCopyUtils.copyProperties(alarmTypeDto, alarmType, AlarmType.class);
+        alarmTypeMapper.update(alarmType);
+    }
+
+    @Override
+    public int delete(List<Integer> ids) {
+        //alarmTypeMapper.selectTypesWithRules(ids);
+        return 0;
+    }
+
+    @Override
+    public int deleteAll() {
+        return 0;
+    }
+
+    @Override
+    public void updateStatus(Integer id) {
+
+    }
+}

+ 79 - 31
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/impl/MeasurementSettlementServiceImpl.java

@@ -7,10 +7,16 @@ import com.zcxk.core.oauth2.pojo.LoginUser;
 import com.zcxk.core.common.util.BeanCopyUtils;
 import com.zcxk.core.oauth2.util.UserUtil;
 import com.zcxk.core.mysql.pageing.Pagination;
+import com.zcxk.core.utils.DateUtil;
 import com.zcxk.rmcp.api.dto.measurementSettlement.*;
 import com.zcxk.rmcp.api.vo.XxlJobInfo;
+import com.zcxk.rmcp.core.dao.DeviceMapper;
+import com.zcxk.rmcp.core.dao.MeasurementInstanceMapper;
 import com.zcxk.rmcp.core.dao.MeasurementRecordMapper;
 import com.zcxk.rmcp.core.dao.MeasurementSettlementMapper;
+import com.zcxk.rmcp.core.entity.Device;
+import com.zcxk.rmcp.core.entity.MeasurementInstance;
+import com.zcxk.rmcp.core.entity.MeasurementRecord;
 import com.zcxk.rmcp.core.entity.MeasurementSettlement;
 import com.zcxk.rmcp.web.service.MeasurementSettlementService;
 import com.zcxk.rmcp.web.util.XxlJobUtil;
@@ -19,15 +25,22 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Random;
+
 @Service
 public class MeasurementSettlementServiceImpl implements MeasurementSettlementService {
     @Resource
     private MeasurementRecordMapper measurementRecordMapper;
     @Resource
     private MeasurementSettlementMapper measurementSettlementMapper;
+    @Resource
+    private MeasurementInstanceMapper measurementInstanceMapper;
+    @Resource
+    private DeviceMapper deviceMapper;
     @Autowired
     private XxlJobUtil xxlJobUtil;
     @Override
@@ -35,13 +48,14 @@ public class MeasurementSettlementServiceImpl implements MeasurementSettlementSe
         MeasurementSettlement measurementSettlement=new MeasurementSettlement();
         BeanCopyUtils.copyProperties(pageDto, measurementSettlement, MeasurementSettlement.class);
         PageHelper.startPage(pageDto.getPageNum(), pageDto.getPageSize());
-        measurementSettlement.setPlanStatus(0);
+    
         List<MeasurementSettlementDto> measurementRecords = measurementSettlementMapper.
                 selectList(measurementSettlement,UserUtil.getCurrentUser().getUserCondition());
 
         return setReturn(measurementRecords);
 
     }
+
     private Pagination setReturn(List list){
         if (CollectionUtils.isEmpty(list)){
             return new Pagination<>();
@@ -51,11 +65,12 @@ public class MeasurementSettlementServiceImpl implements MeasurementSettlementSe
     @Override
     public Pagination<MeasurementSettlementDto> pageMeasurementSettlementRecord(MeasurementSettlementPageDto pageDto) {
 
-        MeasurementSettlement measurementSettlement=new MeasurementSettlement();
-        BeanCopyUtils.copyProperties(pageDto, measurementSettlement, MeasurementSettlement.class);
+        MeasurementSettlementDto measurementSettlementDto=new MeasurementSettlementDto();
+        BeanCopyUtils.copyProperties(pageDto, measurementSettlementDto, MeasurementSettlementDto.class);
         PageHelper.startPage(pageDto.getPageNum(), pageDto.getPageSize());
-        measurementSettlement.setPlanStatus(1);
-        List<MeasurementSettlementDto> measurementRecords = measurementSettlementMapper.selectRecordList(measurementSettlement);
+     
+        List<MeasurementSettlementDto> measurementRecords = measurementInstanceMapper.
+                selectList(measurementSettlementDto,UserUtil.getCurrentUser().getUserCondition());
         return setReturn(measurementRecords);
     }
 
@@ -69,26 +84,20 @@ public class MeasurementSettlementServiceImpl implements MeasurementSettlementSe
         measurementSettlement.setStatus(1);
         String tenantId=currentUser.getTenantId();
         measurementSettlement.setTenantId(tenantId);
-        measurementSettlement.setPlanStatus(0);
-
-
-        XxlJobInfo xxlJobInfo=new XxlJobInfo();
-        measurementSettlementDto.setTenantId(tenantId);
-        xxlJobInfo.setExecutorParam(JSON.toJSONString(measurementSettlementDto));
-        xxlJobInfo.setJobDesc("执行结算:"+measurementSettlementDto.getPlanName());
-        xxlJobInfo.setExecutorRouteStrategy("FIRST");
-        xxlJobInfo.setGlueType("BEAN");
-        xxlJobInfo.setJobCron("* * * * * ?");
-        xxlJobInfo.setExecutorHandler("demoJobHandler");
-        xxlJobInfo.setExecutorBlockStrategy("SERIAL_EXECUTION");
-        xxlJobInfo.setExecutorTimeout(0);
-        xxlJobInfo.setExecutorFailRetryCount(0);
-        xxlJobInfo.setAuthor("admin");
-        String add = xxlJobUtil.add(xxlJobInfo);
+        List<Device> devices = deviceMapper.findMeasurementDevice(measurementSettlementDto);
+        measurementSettlement.setTotalWaterMeters(devices.size());
+        measurementSettlementMapper.insert(measurementSettlement);
+        String add = xxlJobUtil.add(setInfo(measurementSettlementDto));
         JSONObject jsonObject = JSON.parseObject(add);
         String taskId = jsonObject.getString("content");
         measurementSettlement.setTaskId(Long.parseLong(taskId));
-        measurementSettlementMapper.insert(measurementSettlement);
+        Integer id=measurementSettlement.getId();
+        measurementSettlement=new MeasurementSettlement();
+        measurementSettlement.setId(id);
+        measurementSettlement.setTaskId(Long.valueOf(taskId));
+        measurementSettlementMapper.update(measurementSettlement);
+
+
     }
 
     @Override
@@ -96,13 +105,41 @@ public class MeasurementSettlementServiceImpl implements MeasurementSettlementSe
         MeasurementSettlement measurementSettlement=new MeasurementSettlement();
         BeanCopyUtils.copyProperties(measurementSettlementDto, measurementSettlement, MeasurementSettlement.class);
         LoginUser currentUser = UserUtil.getCurrentUser();
+        measurementSettlementDto.setTenantId(currentUser.getTenantId());
         measurementSettlement.setUpdateBy(currentUser.getUsername());
         measurementSettlement.setUpdateDate(new Date());
         measurementSettlementMapper.update(measurementSettlement);
-
-        xxlJobUtil.update(measurementSettlement.getTaskId().intValue(),"0 * * * * ?",measurementSettlement.getPlanName());
+        XxlJobInfo xxlJobInfo = setInfo(measurementSettlementDto);
+        xxlJobInfo.setId(measurementSettlementDto.getTaskId().intValue());
+        xxlJobUtil.update(xxlJobInfo);
+    }
+    private XxlJobInfo setInfo(MeasurementSettlementDto measurementSettlementDto){
+        XxlJobInfo xxlJobInfo=new XxlJobInfo();
+        xxlJobInfo.setExecutorParam(JSON.toJSONString(measurementSettlementDto));
+        xxlJobInfo.setJobDesc("执行结算:"+measurementSettlementDto.getPlanName());
+        xxlJobInfo.setExecutorRouteStrategy("FIRST");
+        xxlJobInfo.setGlueType("BEAN");
+        xxlJobInfo.setJobCron(date2Cron(measurementSettlementDto.getSettlementTime()
+                ,measurementSettlementDto.getBillingCycle()));
+        xxlJobInfo.setExecutorHandler("measurementHandler");
+        xxlJobInfo.setExecutorBlockStrategy("SERIAL_EXECUTION");
+        xxlJobInfo.setExecutorTimeout(0);
+        xxlJobInfo.setExecutorFailRetryCount(0);
+        xxlJobInfo.setAuthor("admin");
+        return  xxlJobInfo;
+    }
+    private String date2Cron(Date date,Integer period){
+        LocalDate startDate = DateUtil.parseLocalDate(date);
+        startDate=startDate.plusDays(1);
+        Random r = new Random();
+        String cron="";
+        cron+=r.nextInt(59)+" ";
+        cron+=r.nextInt(59)+" ";
+        cron+=0+" ";
+        cron+=startDate.getDayOfMonth()+" ";
+        cron+=startDate.getMonth()+"/"+period+" ?";
+        return cron;
     }
-
     @Override
     public void deletePlan(List<MeasurementSettlementDto> ids) {
         List<Integer>planIds=new ArrayList<>();
@@ -137,24 +174,35 @@ public class MeasurementSettlementServiceImpl implements MeasurementSettlementSe
     }
 
     @Override
-    public void auditWater(List<Integer> ids) {
-
-        measurementRecordMapper.auditWater(ids);
+    public void auditWater(List<MeasurementRecordDto> recordDtos) {
+        List<Long>rids=new ArrayList<>();
+        recordDtos.forEach(recordDto->{
+            rids.add(recordDto.getId());
+        });
+        measurementRecordMapper.auditWater(rids);
+        measurementInstanceMapper.modifyTheNumberOfAudits(rids.size(),
+                recordDtos.get(0).getPlanId());
     }
 
     @Override
     public void auditAllWater(Integer planId) {
-
         measurementRecordMapper.auditAllWater(planId);
+        measurementInstanceMapper.modifyAllTheNumberOfAudits(planId);
     }
 
     @Override
     public void modifyTheAmountOfWater(WaterConsumptionUpdateDto waterConsumptionUpdateDto) {
-        measurementRecordMapper.modifyTheAmountOfWater(waterConsumptionUpdateDto);
+        MeasurementRecord measurementRecord=new MeasurementRecord();
+        BeanCopyUtils.copyProperties(waterConsumptionUpdateDto, measurementRecord, MeasurementRecord.class);
+        measurementRecord.setUpdateBy(UserUtil.getCurrentUser().getUsername());
+        measurementRecord.setUpdateDate(new Date());
+        measurementRecordMapper.update(measurementRecord);
     }
 
     @Override
     public void setBillingPeriod(MeasurementSettlementDto measurementSettlementDto) {
-        measurementSettlementMapper.setBillingPeriod(measurementSettlementDto);
+        MeasurementInstance measurementInstance=new MeasurementInstance();
+        BeanCopyUtils.copyProperties(measurementSettlementDto, measurementInstance, MeasurementInstance.class);
+        measurementInstanceMapper.update(measurementInstance);
     }
 }

+ 4 - 12
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/util/XxlJobUtil.java

@@ -47,20 +47,12 @@ public class XxlJobUtil {
         String groupId = jsonObject.getString("content");*/
         jobInfo.setJobGroup(groupId);
         String json2 = JSON.toJSONString(jobInfo);
-        return doPost(adminAddresses + ADD_URL, json2);
+        return doPost(adminAddresses + ADD_START_URL, json2);
     }
 
-    public String update(int id, String cron,String name){
-        XxlJobInfo jobInfo=new XxlJobInfo();
-        jobInfo.setId(id);
-        jobInfo.setJobCron(cron);
-        jobInfo.setJobDesc("执行结算:"+name);
-        jobInfo.setAuthor("admin");
-        jobInfo.setJobGroup(groupId);
-        jobInfo.setExecutorBlockStrategy("SERIAL_EXECUTION");
-        jobInfo.setExecutorRouteStrategy("FIRST");
-
-        String json = JSON.toJSONString(jobInfo);
+    public String update( XxlJobInfo jobInfo){
+       jobInfo.setJobGroup(groupId);
+       String json = JSON.toJSONString(jobInfo);
 
         return doPost(adminAddresses + UPDATE_URL, json);
     }

+ 42 - 25
zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/jobs/MeasurementSettlementRecordHander.java

@@ -35,16 +35,47 @@ public class MeasurementSettlementRecordHander {
     @Resource
     MeasurementInstanceMapper measurementInstanceMapper;
     @Resource
+    MeasurementSettlementMapper measurementSettlementMapper;
+    @Resource
     DeviceMapper deviceMapper;
     @XxlJob("measurementHandler")
-    public ReturnT<String> execute(String info) throws Exception {
+    public ReturnT<String> execute(String info) {
         log.info("开始执行分发任务");
-        MeasurementSettlementDto measurementSettlement=JSON.parseObject(info,MeasurementSettlementDto.class);
-        List<Device> devices = deviceMapper.findMeasurementDevice(measurementSettlement);
-        int page=0;
+        try {
+            MeasurementSettlementDto measurementSettlement=JSON.parseObject(info,MeasurementSettlementDto.class);
+            List<Device> devices = deviceMapper.findMeasurementDevice(measurementSettlement);
+            MeasurementInstance measurementInstance = addMeasurementInstance(measurementSettlement, devices.size());
+            MeasurementSettlement updateTotal=new MeasurementSettlement();
+            updateTotal.setId(measurementSettlement.getId());
+            updateTotal.setTotalWaterMeters(devices.size());
+            measurementSettlementMapper.update(updateTotal);
+            List<MeasurementRecord> items = new ArrayList<>();
+            Date date=new Date();
+            for(Device device : devices) {
+                MeasurementRecord item = createClearingRecordItem(device,measurementSettlement,date,
+                        measurementInstance.getId());
+                items.add(item);
+                if(items.size() % 1000 == 0) {// 每一千次做一次批量插入
+                    measurementRecordMapper.batchInsert(items);
+                    items.clear();
+                }
+            }
+            if(items.size() > 0) {
+                measurementRecordMapper.batchInsert(items);
+                items.clear();
+            }
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+
+        return ReturnT.SUCCESS;
+    }
+    private MeasurementInstance addMeasurementInstance(MeasurementSettlementDto measurementSettlement,int total){
         MeasurementInstance measurementInstance=new MeasurementInstance();
         measurementInstance.setPlanid(measurementSettlement.getId());
-        measurementInstance.setTotalWaterMeters(devices.size());
+        measurementInstance.setTotalWaterMeters(total);
         measurementInstance.setCreateBy("admin");
         measurementInstance.setCreateDate(new Date());
         Date date=new Date();
@@ -54,28 +85,11 @@ public class MeasurementSettlementRecordHander {
         measurementInstance.setClearingDay(Integer.parseInt(DateUtil.formatDate(date, "yyyyMMdd")));
         measurementInstance.setClearingStartDate(clearingStartDate);
         measurementInstance.setClearingEndDate(clearingEndDate);
+        measurementInstance.setNumberOfWaterMetersReviewed(0);
+        measurementInstance.setStatus(1);
         measurementInstanceMapper.insert(measurementInstance);
-        List<MeasurementRecord> items = new ArrayList<>();
-
-
-        for(Device device : devices) {
-            MeasurementRecord item = createClearingRecordItem(device,measurementSettlement,date,
-                    measurementInstance.getId());
-            items.add(item);
-            if(items.size() % 1000 == 0) {// 每一千次做一次批量插入
-                measurementRecordMapper.batchInsert(items);
-                items.clear();
-            }
-        }
-        if(items.size() > 0) {
-            measurementRecordMapper.batchInsert(items);
-            items.clear();
-        }
-
-
-        return ReturnT.SUCCESS;
+        return measurementInstance;
     }
-
     protected Date getClearingEndDate(Date clearingDate ) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(clearingDate);
@@ -99,6 +113,9 @@ public class MeasurementSettlementRecordHander {
         item.setFileMeterNo(device.getFileNo());
         item.setApprovalStatus("0");
         item.setLocation(device.getAddress());
+        item.setStatus(1);
+        item.setCreateDate(new Date());
+        item.setCreateBy("admin");
         // 1,获取上次结算记录
         MeasurementRecord lastClearingRecordItem = getDeviceLastClearingRecordItem(device,measurementSettlement,clearingDate);
         // 2,获取结算周期内的数据

+ 11 - 0
zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/jobs/MeterReadRecordDTO.java

@@ -0,0 +1,11 @@
+package com.zcxk.xxljob.jobs;
+
+import lombok.Data;
+
+import java.util.Date;
+@Data
+public class MeterReadRecordDTO {
+    private  Date readDateTime;
+    private  Double readData;
+
+}

+ 1 - 1
zoniot-rmcp/zoniot-xxljob-client/src/main/resources/application-dev.properties

@@ -7,7 +7,7 @@ files.path=E:/test
 #xxl-job µ÷¶ÈÖÐÐŤ³ÌµÄµØÖ·
 xxl.job.admin.addresses=http://192.168.0.121:8080/xxl-job-admin/
 xxl.job.executor.appname=zoniot-xxljob-client
-xxl.job.executor.ip=
+xxl.job.executor.ip=192.168.0.121
 xxl.job.executor.port=9999
 xxl.job.executor.logpath=/opt/sit/meter-reading-job/xxl-job/jobhandler
 xxl.job.accessToken=