Просмотр исходного кода

[电表][修复]:优化电表批量更新,冗余电表最新读数

release_toaliyun_real
hupeng 6 лет назад
Родитель
Сommit
6e1b91d009
7 измененных файлов: 70 добавлений и 45 удалений
  1. +3
    -2
      mallinkService/src/main/java/com/iformall/domain/po/KwMeter.java
  2. +3
    -1
      mallinkService/src/main/java/com/iformall/mapper/KwMeterMapper.java
  3. +5
    -6
      mallinkService/src/main/java/com/iformall/service/kw/KwMeterService.java
  4. +21
    -15
      mallinkService/src/main/java/com/iformall/service/kw/impl/KwBoxServiceImpl.java
  5. +7
    -3
      mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterServiceImpl.java
  6. +3
    -8
      mallinkService/src/main/resources/mapper/KwMerchantMeterMapper.xml
  7. +28
    -10
      mallinkService/src/main/resources/mapper/KwMeterMapper.xml

+ 3
- 2
mallinkService/src/main/java/com/iformall/domain/po/KwMeter.java Просмотреть файл

@@ -29,7 +29,6 @@ public class KwMeter extends BaseEntity {
@io.swagger.annotations.ApiModelProperty(value = "tenantId", name = "tenantId")
private String tenantId;


@Excel(name = "电表编号 *", width = 20, orderNum = "1")
@io.swagger.annotations.ApiModelProperty(value = "电表编号", name = "address")
private String address;
@@ -63,6 +62,9 @@ public class KwMeter extends BaseEntity {
@io.swagger.annotations.ApiModelProperty(value = "创始时间", name = "lastOnlineTime")
private Date lastOnlineTime;

@io.swagger.annotations.ApiModelProperty(value = "最后一次读数", name = "totalPower")
private Integer totalPower;

@io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createTime")
private Date createTime;

@@ -78,7 +80,6 @@ public class KwMeter extends BaseEntity {
@io.swagger.annotations.ApiModelProperty(value = "状态0绑定1未绑定", name = "bindStatus")
private Integer bindStatus;


@Excel(name = "采集设备号", width = 20, orderNum = "7")
@Transient
private String boxImei;


+ 3
- 1
mallinkService/src/main/java/com/iformall/mapper/KwMeterMapper.java Просмотреть файл

@@ -9,7 +9,9 @@ import java.util.List;
public interface KwMeterMapper extends CommonMapper<KwMeter, Long> {

List<KwMeter> findList(KwMeter param);
int updateBatch(KwMeter param);

int onlineBatch(@Param("list")List<KwMeter> list);
int offlineBatch(KwMeter param);

int bind(@Param("boxId")Long boxId,@Param("id")Long id);
int bindBatch(@Param("boxId")Long boxId, @Param("ids")List<Long> ids);


+ 5
- 6
mallinkService/src/main/java/com/iformall/service/kw/KwMeterService.java Просмотреть файл

@@ -38,12 +38,6 @@ public interface KwMeterService {
*/
void saveOrUpdate(KwMeter record);

/**
* 保存或更新实体
*
* @param record
*/
int updateBatch(KwMeter record);
/**
* 根据Id删除实体
*
@@ -69,4 +63,9 @@ public interface KwMeterService {
int unbind(Long meterId);

int unbindBatch(Long boxId);

int onlineBatch(List<KwMeter> record);

int offlineBatch(KwMeter record);

}

+ 21
- 15
mallinkService/src/main/java/com/iformall/service/kw/impl/KwBoxServiceImpl.java Просмотреть файл

@@ -124,16 +124,30 @@ public class KwBoxServiceImpl implements KwBoxService {
});


List<Long> onlines = kwMeterDataList.stream().filter(md->md.getTotalPower()!=null).map(KwMeterData::getMeterId).collect(Collectors.toList());
if (onlines.size() > 0) {
List<KwMeter> onlineMeters = kwMeterDataList.stream().filter(md->md.getTotalPower()!=null)
.map( md->{
KwMeter kwMeter = new KwMeter();
kwMeter.setId(md.getMeterId());
kwMeter.setTotalPower(md.getTotalPower());
return kwMeter;
}).collect(Collectors.toList());
if (onlineMeters.size() > 0) {
kwMeterService.onlineBatch(onlineMeters);
}

List<Long> offlineIds = kwMeterDataList.stream().filter(md->md.getTotalPower()==null).map(KwMeterData::getMeterId).collect(Collectors.toList());
if (offlineIds.size() > 0) {
KwMeter kwMeter = new KwMeter();
kwMeter.setIds(onlines);
kwMeter.setOnlineStatus(EnumMeterOnlineStatus.ONLINE.getCode());
kwMeter.setLastOnlineTime(new Date());
kwMeterService.updateBatch(kwMeter);
kwMeter.setIds(offlineIds);
kwMeterService.offlineBatch(kwMeter);
}

List<Long> onlineIds = kwMeterDataList.stream().filter(md->md.getTotalPower()!=null)
.map(KwMeterData::getMeterId).collect(Collectors.toList());
if (onlineIds.size() > 0) {
KwMeterData param = new KwMeterData();
param.setIds(onlines);
param.setIds(onlineIds);
List<KwMeterData> lastRecordList = kwMeterDataService.findLastRecordList(param);
kwMeterDataList.stream().forEach(md->{
Optional<KwMeterData> data = lastRecordList.stream().filter(lr->lr.getMeterId().equals(md.getMeterId())).findAny();
@@ -146,14 +160,6 @@ public class KwBoxServiceImpl implements KwBoxService {
});
}

List<Long> offlines = kwMeterDataList.stream().filter(md->md.getTotalPower()==null).map(KwMeterData::getMeterId).collect(Collectors.toList());
if (offlines.size() > 0) {
KwMeter kwMeter = new KwMeter();
kwMeter.setIds(offlines);
kwMeter.setOnlineStatus(EnumMeterOnlineStatus.OFFLINE.getCode());
kwMeterService.updateBatch(kwMeter);
}

kwMeterDataService.save(kwMeterDataList);
}
}


+ 7
- 3
mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterServiceImpl.java Просмотреть файл

@@ -50,8 +50,13 @@ public class KwMeterServiceImpl implements KwMeterService {
}

@Override
public int updateBatch(KwMeter record) {
return kwMeterMapper.updateBatch(record);
public int onlineBatch(List<KwMeter> record) {
return kwMeterMapper.onlineBatch(record);
}

@Override
public int offlineBatch(KwMeter record) {
return kwMeterMapper.offlineBatch(record);
}

@Override
@@ -83,7 +88,6 @@ public class KwMeterServiceImpl implements KwMeterService {
return kwMeterMapper.bindBatch(boxId, meterIds);
}


@Override
public int unbind(Long meterId) {
if (meterId == null)


+ 3
- 8
mallinkService/src/main/resources/mapper/KwMerchantMeterMapper.xml Просмотреть файл

@@ -65,6 +65,7 @@
<result column="protocol" jdbcType="INTEGER" property="protocol"/>
<result column="bandrate" jdbcType="INTEGER" property="bandrate"/>
<result column="last_online_time" jdbcType="TIMESTAMP" property="lastOnlineTime"/>
<result column="total_power" jdbcType="INTEGER" property="totalPower"/>
<result column="online_status" jdbcType="INTEGER" property="onlineStatus"/>
<result column="config" jdbcType="VARCHAR" property="config"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
@@ -79,15 +80,9 @@

</resultMap>

<resultMap id="MeterSimpleResultMap" type="com.iformall.domain.po.KwMeter">
<id column="id" jdbcType="BIGINT" property="id"/>
<association column="{meterId=id}" property="latestRecord"
select="com.iformall.mapper.KwMeterDataMapper.findLastRecordList">
</association >
</resultMap>

<select id="findSimpleMeterList" parameterType="java.util.Map" resultMap="MeterSimpleResultMap">
select m.id from kw_merchant_meter mm
<select id="findSimpleMeterList" parameterType="java.util.Map" resultType="com.iformall.domain.po.KwMeter">
select m.`id`, m.`last_total_power` from kw_merchant_meter mm
left join kw_meter m on mm.`meter_id` = m.id
where mm.`status` = 0
<if test=" null != merchantId ">


+ 28
- 10
mallinkService/src/main/resources/mapper/KwMeterMapper.xml Просмотреть файл

@@ -11,6 +11,7 @@
<result column="protocol" jdbcType="INTEGER" property="protocol"/>
<result column="bandrate" jdbcType="INTEGER" property="bandrate"/>
<result column="last_online_time" jdbcType="TIMESTAMP" property="lastOnlineTime"/>
<result column="total_power" jdbcType="INTEGER" property="totalPower"/>
<result column="online_status" jdbcType="INTEGER" property="onlineStatus"/>
<result column="config" jdbcType="VARCHAR" property="config"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
@@ -21,7 +22,7 @@
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`address`,`brand`,`model`,`place`,`protocol`,`bandrate`,`last_online_time`,`online_status`,`config`,`create_time`,`update_time`,`box_id`,`status`,`bind_status`
`id`,`tenant_id`,`address`,`brand`,`model`,`place`,`protocol`,`bandrate`,`last_online_time`,`last_total_power`,`online_status`,`config`,`create_time`,`update_time`,`box_id`,`status`,`bind_status`
</sql>
<sql id="dynamicWhereConditions">
@@ -90,19 +91,36 @@
<include refid="dynamicWhereConditions"/>
</select>

<update id="updateBatch" parameterType="com.iformall.domain.po.KwMeter" >
update kw_meter set
<if test=" 1 == onlineStatus ">
last_online_time = #{lastOnlineTime},
</if>
online_status = #{onlineStatus}
<update id="onlineBatch" parameterType="java.util.List" >
update kw_meter
set
<trim prefix="set" suffixOverrides=",">
<trim prefix="last_total_power=case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.lastTotalPower!=null">
when id = #{i.id}
then #{i.lastTotalPower}
</if>
</foreach>
</trim>
online_status = 1,
last_online_time = now()
</trim>
where id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</update>

<update id="offlineBatch" parameterType="com.iformall.domain.po.KwMeter" >
update kw_meter
set
online_status = 0
where id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
<if test=" 0 == onlineStatus ">
and `online_status` = 1
</if>
and `online_status` = 1
</update>

<update id="unbindBatch" parameterType="java.lang.Long">


Загрузка…
Отмена
Сохранить