物联设备电表SN验证及推送

This commit is contained in:
曹磊 2026-04-16 15:57:35 +08:00
parent 4523d38c0e
commit 9304d2fc74
14 changed files with 155 additions and 28 deletions

View File

@ -21,6 +21,7 @@ public class IotElectricityMeterMQDto{
private String readTime;
/**描述*/
private String remark;
private String sim;
/**区域编码*/
private String nuId;
/**区域名称*/

View File

@ -309,6 +309,11 @@ public class DeviceManagerController extends JeecgController<DeviceManager, IDev
return service.pullElectricity(deviceIntegration);
}
@RequestMapping(value = "/deleteElectricity", method = RequestMethod.POST)
public Result<String> deleteElectricity(@RequestBody DeviceIntegration deviceIntegration) {
return service.deleteElectricity(deviceIntegration);
}
/**
* 设备集成-水表分页列表查询
*

View File

@ -450,7 +450,9 @@
a.factory,
(
case when b.id is null then '待集成'
else (case ifnull(b.relay_state,'') when '0' then '拉闸' when '1' then '合闸' else '-' end)
else
(case when b.sim is null then '待集成'
else (case ifnull(b.relay_state,'') when '0' then '拉闸' when '1' then '合闸' else '-' end) end)
end
) as device_status,
a.device_status as maintainStatus

View File

@ -39,6 +39,7 @@ public interface IDeviceManagerService extends IService<DeviceManager> {
IPage<DeviceIntegration> findNetworkPage(Page<DeviceIntegration> page, DeviceIntegration deviceIntegration);
IPage<DeviceIntegration> findElectricityPage(Page<DeviceIntegration> page, DeviceIntegration deviceIntegration);
Result<String> pullElectricity(DeviceIntegration deviceIntegration);
Result<String> deleteElectricity(DeviceIntegration deviceIntegration);
IPage<DeviceIntegration> findWaterPage(Page<DeviceIntegration> page, DeviceIntegration deviceIntegration);
Result<String> pullWater(DeviceIntegration deviceIntegration);
IPage<DeviceIntegration> findHumidPage(Page<DeviceIntegration> page, DeviceIntegration deviceIntegration);

View File

@ -283,12 +283,29 @@ public class DeviceManagerServiceImpl extends ServiceImpl<DeviceManagerMapper, D
if(!res.isSuccess()){
return res;
}
res = syncBizService.syncDevice(deviceIntegration.getOrgCode(),deviceIntegration.getSn());
//获取设备sim
electricityMeterService.eleGetConfig(dsElectricityMeter);
// res = syncBizService.syncDevice(deviceIntegration.getOrgCode(),deviceIntegration.getSn());
// if(!res.isSuccess()){
// return res;
// }
// deviceIntegration.setDeviceStatus("正常");
// baseMapper.editPreviewStatusBySn(deviceIntegration);
return Result.OK("拉取电表成功!");
}
/**
* 拉取电表
* @param deviceIntegration
*/
@Override
public Result<String> deleteElectricity(DeviceIntegration deviceIntegration){
DsElectricityMeter dsElectricityMeter = new DsElectricityMeter();
dsElectricityMeter.setSn(deviceIntegration.getSn());
Result<String> res = electricityMeterService.delete(dsElectricityMeter);
if(!res.isSuccess()){
return res;
}
deviceIntegration.setDeviceStatus("正常");
baseMapper.editPreviewStatusBySn(deviceIntegration);
return Result.OK("拉取电表成功!");
}

View File

@ -54,6 +54,7 @@ public class DsElectricityMeter implements Serializable {
@ApiModelProperty(value = "描述")
private String remark;
private String syncType;//是否同步 N未同步 Y已同步
private String sim;//SIM
/*=============================以下字段都可删除==================================*/
@TableField(exist = false)

View File

@ -12,9 +12,11 @@ public interface DsElectricityMeterMapper extends BaseMapper<DsElectricityMeter>
IPage<DsElectricityMeter> findPage(Page<DsElectricityMeter> page, @Param("params") DsElectricityMeter dsElectricityMeter);
List<DsElectricityMeter> findAllList();
DsElectricityMeter getElectricityMeter(DsElectricityMeter dsElectricityMeter);
DsElectricityMeter getElectricityMeterPreview(DsElectricityMeter dsElectricityMeter);
int updateValue(DsElectricityMeter dsElectricityMeter);
int updateRelayState(DsElectricityMeter dsElectricityMeter);
int insertElectricty(DsElectricityMeter DsElectricityMeter);
int updateElectrictySim(DsElectricityMeter DsElectricityMeter);
int updateElectricty(DsElectricityMeter DsElectricityMeter);
void updateDepartById(DsElectricityMeter DsElectricityMeter);
void updateSync(DsElectricityMeter DsElectricityMeter);

View File

@ -18,7 +18,8 @@
a.old_server_url ,
a.sync_type,
a.iz_allocate,
a.dimension
a.dimension,
a.sim
from nu_iot_ds_electricity_meter a
where a.del_flag = '0'
<if test="params.sn != null and params.sn != ''">
@ -60,7 +61,8 @@
a.old_server_url ,
a.sync_type,
a.iz_allocate,
a.dimension
a.dimension,
a.sim
from nu_iot_ds_electricity_meter a
where a.del_flag = '0'
</select>
@ -83,6 +85,7 @@
old_depart_name as oldDepartName,
iz_allocate,
dimension,
sim,
del_flag
from nu_iot_ds_electricity_meter
<where>
@ -95,6 +98,29 @@
</where>
</select>
<select id="getElectricityMeterPreview" parameterType="com.nu.modules.dingshuo.electricity.entity.DsElectricityMeter" resultType="com.nu.modules.dingshuo.electricity.entity.DsElectricityMeter">
select
a.id,
a.sn,
a.ele_value as eleValue,
a.relay_state as relayState,
a.read_time as readTime,
a.remark,
b.org_code as orgCode,
a.dimension,
a.sim,
a.del_flag
from nu_iot_ds_electricity_meter a inner join nu_iot_device_preview b on a.sn = b.sn
<where>
<if test="sn != null and sn != ''">
AND a.sn = #{sn}
</if>
<if test="id != null and id != ''">
AND a.id = #{id}
</if>
</where>
</select>
<insert id="insertElectricty" parameterType="com.nu.modules.dingshuo.electricity.entity.DsElectricityMeter">
insert into nu_iot_ds_electricity_meter(
sn,
@ -112,6 +138,12 @@
)
</insert>
<update id="updateElectrictySim" parameterType="com.nu.modules.dingshuo.electricity.entity.DsElectricityMeter">
update nu_iot_ds_electricity_meter
set sim = #{sim}
where sn = #{sn}
</update>
<update id="updateElectricty" parameterType="com.nu.modules.dingshuo.electricity.entity.DsElectricityMeter">
update nu_iot_ds_electricity_meter
set
@ -187,7 +219,8 @@
a.old_depart_name as oldDepartName,
c.area_flag as areaFlag,
a.iz_allocate,
a.dimension
a.dimension,
a.sim
from nu_iot_ds_electricity_meter a
left join nu_base_info c on a.nu_id = c.nu_id
where a.del_flag = '0'
@ -269,7 +302,8 @@
a.old_depart_name as oldDepartName,
c.area_flag as areaFlag,
a.iz_allocate,
a.dimension
a.dimension,
a.sim
from nu_iot_ds_electricity_meter a
left join nu_base_info c on a.nu_id = c.nu_id
where a.del_flag = '0'

View File

@ -12,7 +12,7 @@ import java.util.Map;
public interface IDsElectricityMeterService extends IService<DsElectricityMeter> {
IPage<DsElectricityMeter> findPage(Page<DsElectricityMeter> page, DsElectricityMeter dsElectricityMeter);
Result<String> add(DsElectricityMeter dsElectricityMeter);
Result<?> delete(DsElectricityMeter dsElectricityMeter);
Result<String> delete(DsElectricityMeter dsElectricityMeter);
List<DsElectricityMeter> findAllList();
void updateValue(DsElectricityMeter dsElectricityMeter);
@ -22,6 +22,7 @@ public interface IDsElectricityMeterService extends IService<DsElectricityMeter>
void eleCutOff(DsElectricityMeter dsElectricityMeter);
void eleConnected(DsElectricityMeter dsElectricityMeter);
void eleRead(DsElectricityMeter dsElectricityMeter);
void eleGetConfig(DsElectricityMeter dsElectricityMeter);
void processReceivedMessage(String payload);

View File

@ -10,6 +10,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nu.dto.IotElectricityMeterMQDto;
import com.nu.dto.IotWaterMeterMQDto;
import com.nu.modules.device.manager.entity.DeviceIntegration;
import com.nu.modules.device.manager.mapper.DeviceManagerMapper;
import com.nu.modules.dingshuo.electricity.entity.DsElectricityMeter;
import com.nu.modules.dingshuo.electricity.mapper.DsElectricityMeterMapper;
import com.nu.modules.dingshuo.electricity.service.IDsElectricityMeterService;
@ -19,6 +21,7 @@ import com.nu.modules.syncLog.entity.SyncBizLog;
import com.nu.modules.syncLog.entity.SyncLog;
import com.nu.modules.syncLog.service.ISyncBizLogService;
import com.nu.modules.syncLog.service.ISyncLogService;
import com.nu.modules.syncbiz.service.ISyncBizService;
import com.nu.modules.tq.common.entity.TqApiLog;
import com.nu.modules.tq.common.service.ITqApiLogService;
import com.nu.modules.tq.electricity.entity.ElectricityMeter;
@ -65,6 +68,12 @@ public class DsElectricityMeterServiceImpl extends ServiceImpl<DsElectricityMete
@Autowired
private ITqApiLogService logService;
@Autowired
private ISyncBizService syncBizService;
@Autowired
private DeviceManagerMapper deviceManagerMapper;
@Override
public IPage<DsElectricityMeter> findPage(Page<DsElectricityMeter> page, DsElectricityMeter dsElectricityMeter){
return baseMapper.findPage(page,dsElectricityMeter);
@ -74,14 +83,14 @@ public class DsElectricityMeterServiceImpl extends ServiceImpl<DsElectricityMete
public Result<String> add(DsElectricityMeter dsElectricityMeter){
DsElectricityMeter entity = baseMapper.getElectricityMeter(dsElectricityMeter);
if(entity!=null){
if(entity.getDelFlag().equals("0")){
return Result.error("添加失败,设备已存在!");
}else{
DsElectricityMeter dem = new DsElectricityMeter();
dem.setId(entity.getId());
dem.setDelFlag("0");
baseMapper.updateById(dem);
}
// if(entity.getDelFlag().equals("0")){
// return Result.error("添加失败,设备已存在!");
// }else{
// DsElectricityMeter dem = new DsElectricityMeter();
// dem.setId(entity.getId());
// dem.setDelFlag("0");
// baseMapper.updateById(dem);
// }
}else{
baseMapper.insertElectricty(dsElectricityMeter);
}
@ -96,18 +105,19 @@ public class DsElectricityMeterServiceImpl extends ServiceImpl<DsElectricityMete
}
@Override
public Result<?> delete(DsElectricityMeter dsElectricityMeter){
public Result<String> delete(DsElectricityMeter dsElectricityMeter){
DsElectricityMeter entity = baseMapper.getElectricityMeter(dsElectricityMeter);
if(entity!=null){
String izAllocate = entity.getIzAllocate();
if(izAllocate.equals("Y")){
return Result.OK("设备已分配,无法删除!");
}
}
// if(entity!=null){
// String izAllocate = entity.getIzAllocate();
// if(izAllocate.equals("Y")){
// return Result.OK("设备已分配,无法删除!");
// }
// }
DsElectricityMeter dem = new DsElectricityMeter();
dem.setId(entity.getId());
dem.setDelFlag("1");
baseMapper.updateById(dem);
// dem.setDelFlag("1");
// baseMapper.updateById(dem);
baseMapper.deleteById(dem);
String deviceId = dsElectricityMeter.getSn();
try {
mqttMessageHandler.unsubscribeUplinkMessage(deviceId);
@ -220,6 +230,17 @@ public class DsElectricityMeterServiceImpl extends ServiceImpl<DsElectricityMete
}
}
@Override
public void eleGetConfig(DsElectricityMeter dsElectricityMeter){
String deviceId = dsElectricityMeter.getSn();
MqttMessageHandler.DownlinkMessage message = mqttPublisherParams.getConfigParams(deviceId);
try {
mqttMessageHandler.publishDownlinkMessage(deviceId,message);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* mqtt收到消息并处理
*/
@ -324,6 +345,22 @@ public class DsElectricityMeterServiceImpl extends ServiceImpl<DsElectricityMete
}
}
break;
case "905":
// 参数获取
String mtype905 = payload.getStr("mtype");//mtype200 TCP信息209 SIM卡号
String dcode905 = payload.getStr("dcode");
log.info("参数获取, mtype: {}, dcode: {}", mtype905,dcode905);
DsElectricityMeter entity905 = new DsElectricityMeter();
entity905.setSn(sn);
DsElectricityMeter dme905 = baseMapper.getElectricityMeterPreview(entity905);
dme905.setSim(dcode905);
baseMapper.updateElectrictySim(dme905);
syncBizService.syncDevice(dme905.getOrgCode(),sn);
DeviceIntegration deviceIntegration = new DeviceIntegration();
deviceIntegration.setDeviceStatus("正常");
deviceIntegration.setSn(sn);
deviceManagerMapper.editPreviewStatusBySn(deviceIntegration);
break;
case "601":
// 定时主动上报表计数据
String EgT601 = payload.getStr("EgT");//总有功电能
@ -343,6 +380,13 @@ public class DsElectricityMeterServiceImpl extends ServiceImpl<DsElectricityMete
entity601.setReadTime(DateUtil.now());
baseMapper.updateElectricty(entity601);
break;
case "602":
// 上送登录信息
String csq602 = payload.getStr("CSQ");//总有功电能
String sim602 = payload.getStr("SIM");//表状态
String sw602 = payload.getStr("SW");//表状态
log.info("上送登录信息, CSQ: {}, SIM: {}, SW: {}", csq602, sim602,sw602);
break;
case "701":
// 定时主动上报事件数据
break;

View File

@ -42,7 +42,7 @@ public class MqttMessageHandler implements CommandLineRunner {
String payload = objectMapper.writeValueAsString(message);
MqttMessage mqttMessage = new MqttMessage(payload.getBytes());
mqttMessage.setQos(0);
mqttMessage.setQos(1);
mqttMessage.setRetained(false);
log.info("发布 - 主题: {}, 消息: {}", topic, payload);
mqttClient.publish(topic, mqttMessage);

View File

@ -13,6 +13,22 @@ import java.util.Map;
@Slf4j
public class MqttPublisherParams {
/**
* 获取表配置参数
* @return
*/
public MqttMessageHandler.DownlinkMessage getConfigParams(String deviceId){
MqttMessageHandler.DownlinkMessage message = new MqttMessageHandler.DownlinkMessage();
MqttMessageHandler.DownlinkMessage.Header header = new MqttMessageHandler.DownlinkMessage.Header();
header.setName("805"); //805:读取表配置参数
header.setID(deviceId);
message.setHeader(header);
Map<String, Object> payload = new HashMap<>();
payload.put("mtype", "209"); //"209" 获取SIM卡号
message.setPayload(payload);
return message;
}
/**
* 获取抄表参数
* @return

View File

@ -25,6 +25,7 @@ public class ElectricityMeter implements Serializable {
private String relayState;
/**描述*/
private String remark;
private String sim;
/**区域编码*/
private String nuId;
/**区域名称*/

View File

@ -450,9 +450,11 @@
sn,
ele_value as eleValue,
relay_state as relayState,
remark
remark,
sim
from nu_iot_ds_electricity_meter
where sn = #{sn}
and sim is not null
order by id asc
</select>