Commit 9023e830 authored by 张森's avatar 张森

Merge remote-tracking branch 'origin/develop_dl' into develop_dl_bugfix

# Conflicts: # amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/service/impl/AnalysisReportLogServiceImpl.java # amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/service/impl/ConfirmAlarmServiceImpl.java # amos-boot-module/amos-boot-module-biz/amos-boot-module-patrol-biz/src/main/java/com/yeejoin/amos/patrol/business/service/impl/CheckServiceImpl.java # amos-boot-system-equip/src/main/resources/application-dev.properties
parents 9dce97e6 366e1dfe
...@@ -22,15 +22,21 @@ public class AlarmKafkaConsumer { ...@@ -22,15 +22,21 @@ public class AlarmKafkaConsumer {
PointSystemServiceImpl pointSystemServiceImpl; PointSystemServiceImpl pointSystemServiceImpl;
//消费者来处理消息 //消费者来处理消息
@KafkaListener(id="user1" , topics ={"${kafka.equipment.alarm}"}) @KafkaListener(id="alarmInfo" , topics ={"${kafka.equipment.alarm}"})
public void message1( String record, Acknowledgment ack){ public void message1( String record, Acknowledgment ack){
// 处理业务 // 处理业务
String date=record; String date=record;
System.out.println("消息进来了" +record);
//异步触发预警 //异步触发预警
pointSystemServiceImpl.sendWarningAsync(date); pointSystemServiceImpl.sendWarningAsync(date);
//手动提交 //手动提交
ack.acknowledge(); ack.acknowledge();
}
@KafkaListener(id="user2" , topics ={"${kafka.equipment.test}"})
public void message2( String record, Acknowledgment ack){
String date=record;
System.out.println("消息进来了 8888888888888888888888");
} }
......
...@@ -99,12 +99,18 @@ public class PointSystemServiceImpl extends ServiceImpl<PointSystemMapper, Point ...@@ -99,12 +99,18 @@ public class PointSystemServiceImpl extends ServiceImpl<PointSystemMapper, Point
//通过测点地址获取,和对应值 获取kks //通过测点地址获取,和对应值 获取kks
QueryWrapper<PointSystem> pointSystemWrapper = new QueryWrapper<>(); QueryWrapper<PointSystem> pointSystemWrapper = new QueryWrapper<>();
pointSystemWrapper.lambda().eq(PointSystem::getAddress, address); pointSystemWrapper.lambda().eq(PointSystem::getAddress, address);
pointSystemWrapper.lambda().eq(PointSystem::getValue, value); if(!value.equals("false") && !value.equals("true")){
pointSystemWrapper.lambda().eq(PointSystem::getValue, value);
}
pointSystemWrapper.lambda().eq(PointSystem::getGatewayId, gatewayId); pointSystemWrapper.lambda().eq(PointSystem::getGatewayId, gatewayId);
PointSystem pointSystem = pointSystemMapper.selectOne(pointSystemWrapper); List<PointSystem> pointSystems = pointSystemMapper.selectList(pointSystemWrapper);
if (pointSystem == null) { if (pointSystems == null || pointSystems.size() < 1 ) {
throw new RuntimeException("获取kks码失败!"); throw new RuntimeException("获取kks码失败!");
} }
PointSystem pointSystem = pointSystems.get(0);
if (pointSystem.getType().equals("遥信")){
return;
}
//调用获取设备相关信息 //调用获取设备相关信息
Map<String, String> maps = new HashMap<>(); Map<String, String> maps = new HashMap<>();
maps.put("type", "equipinfo"); maps.put("type", "equipinfo");
......
...@@ -53,7 +53,8 @@ spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.Str ...@@ -53,7 +53,8 @@ spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.Str
kafka.equipment.alarm=EQUIPMENT_ALARM88 kafka.equipment.alarm=EQUIPMENT_ALARM
kafka.equipment.test=test88888
#电站对接第三方查询设备kks码 #电站对接第三方查询设备kks码
power.station.url=http://139.9.169.123:5024/prod-api/fdgl/process/DataInterface power.station.url=http://139.9.169.123:5024/prod-api/fdgl/process/DataInterface
......
...@@ -393,6 +393,14 @@ public class WaterResourceDto extends BaseDto { ...@@ -393,6 +393,14 @@ public class WaterResourceDto extends BaseDto {
@ApiModelProperty("水池液位显示装置id") @ApiModelProperty("水池液位显示装置id")
private String levelDeviceId; private String levelDeviceId;
@ExcelIgnore
@ApiModelProperty("消防泵装置id")
private String pumpDeviceId;
@ExcelIgnore
@ApiModelProperty("消防泵装置名称")
private String pumpDeviceName;
@ApiModelProperty("水池液位显示装置名称") @ApiModelProperty("水池液位显示装置名称")
@ExcelProperty(value = "水池液位显示装置", index = 45) @ExcelProperty(value = "水池液位显示装置", index = 45)
@ExplicitConstraint(indexNum = 45, sourceClass = CommonExplicitConstraint.class, method = "getListByEquipmentCode") @ExplicitConstraint(indexNum = 45, sourceClass = CommonExplicitConstraint.class, method = "getListByEquipmentCode")
......
package com.yeejoin.amos.boot.module.common.api.dto; package com.yeejoin.amos.boot.module.common.api.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto; import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
...@@ -76,4 +77,16 @@ public class WaterResourcePoolDto extends BaseDto { ...@@ -76,4 +77,16 @@ public class WaterResourcePoolDto extends BaseDto {
@ApiModelProperty(value = "出口流量(L/s)") @ApiModelProperty(value = "出口流量(L/s)")
private Float outputFlowRate; private Float outputFlowRate;
/**
* 消防泵装置ids
*/
@TableField("pump_device_id")
private String pumpDeviceId;
/**
* 消防泵装置名称s
*/
@TableField("pump_device_name")
private String pumpDeviceName;
} }
package com.yeejoin.amos.boot.module.common.api.entity; package com.yeejoin.amos.boot.module.common.api.entity;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity; import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
...@@ -113,6 +115,18 @@ public class WaterResourcePool extends BaseEntity { ...@@ -113,6 +115,18 @@ public class WaterResourcePool extends BaseEntity {
private String levelDeviceName; private String levelDeviceName;
/** /**
* 消防泵装置ids
*/
@TableField("pump_device_id")
private String pumpDeviceId;
/**
* 消防泵装置名称s
*/
@TableField("pump_device_name")
private String pumpDeviceName;
/**
* 出口流量(L/s) * 出口流量(L/s)
*/ */
@TableField("output_flow_rate") @TableField("output_flow_rate")
......
...@@ -173,6 +173,10 @@ public class EquipmentSpecific extends BaseEntity { ...@@ -173,6 +173,10 @@ public class EquipmentSpecific extends BaseEntity {
@TableField("warranty_info") @TableField("warranty_info")
private String warrantyInfo; private String warrantyInfo;
@ApiModelProperty(value = "指标类型编码")
@TableField("type_code")
private String typeCode;
@ApiModelProperty(value = "质保周期") @ApiModelProperty(value = "质保周期")
@TableField("warranty_period") @TableField("warranty_period")
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
......
...@@ -33,12 +33,12 @@ public class UnitTransformUtil { ...@@ -33,12 +33,12 @@ public class UnitTransformUtil {
if (nowVal.compareTo(new BigDecimal(minValue)) < 0) { if (nowVal.compareTo(new BigDecimal(minValue)) < 0) {
map.put("status", "0"); map.put("status", "0");
map.put("abs", nowVal.divide(new BigDecimal(maxValue),2,BigDecimal.ROUND_HALF_UP).movePointRight(2)); map.put("abs", nowVal.divide(new BigDecimal(maxValue),2,BigDecimal.ROUND_HALF_UP).movePointRight(2));
} else if (nowVal.compareTo(new BigDecimal(maxValue)) > 0) { // 当前值大于最大值
map.put("status", "2");
map.put("abs", 100);
} else if (nowVal.compareTo(new BigDecimal(maxValue)) == 0) { } else if (nowVal.compareTo(new BigDecimal(maxValue)) == 0) {
map.put("status", "1"); map.put("status", "1");
map.put("abs", 100); map.put("abs", 100);
} else if (nowVal.compareTo(new BigDecimal(0)) == 0) {
map.put("status", "1");
map.put("abs", "--");
} else { } else {
map.put("status", "1"); map.put("status", "1");
map.put("abs", nowVal.divide(new BigDecimal(maxValue),2,BigDecimal.ROUND_HALF_UP).movePointRight(2)); map.put("abs", nowVal.divide(new BigDecimal(maxValue),2,BigDecimal.ROUND_HALF_UP).movePointRight(2));
...@@ -149,6 +149,7 @@ public class UnitTransformUtil { ...@@ -149,6 +149,7 @@ public class UnitTransformUtil {
map.put("abs", "--"); map.put("abs", "--");
} }
} }
map.put("unit", "M");
return map; return map;
} }
} }
...@@ -12,6 +12,8 @@ public interface FireResourceSupervisionMapper extends BaseMapper<OrgUsr> { ...@@ -12,6 +12,8 @@ public interface FireResourceSupervisionMapper extends BaseMapper<OrgUsr> {
List<Map<String, Object>> selectPersonnelStats(@Param("bizOrgCode") String bizOrgCode); List<Map<String, Object>> selectPersonnelStats(@Param("bizOrgCode") String bizOrgCode);
List<Map<String, Object>> selectQualificationStats(@Param("bizOrgCode") String bizOrgCode, @Param("peopleType") Integer peopleType);
Map<String, Object> getPersonStatus(@Param("bizOrgCode") String bizOrgCode, @Param("peopleType") Integer peopleType); Map<String, Object> getPersonStatus(@Param("bizOrgCode") String bizOrgCode, @Param("peopleType") Integer peopleType);
Long selectTodayAttendance(@Param("bizOrgCode") String bizOrgCode); Long selectTodayAttendance(@Param("bizOrgCode") String bizOrgCode);
......
package com.yeejoin.amos.boot.module.jcs.api.service; package com.yeejoin.amos.boot.module.jcs.api.service;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
...@@ -13,5 +14,7 @@ public interface IFireResourceSupervisionService { ...@@ -13,5 +14,7 @@ public interface IFireResourceSupervisionService {
*/ */
Map<String, Map<String, Number>> getPersonnelStats(String bizOrgCode); Map<String, Map<String, Number>> getPersonnelStats(String bizOrgCode);
List<Map<String, Object>> selectQualificationStats(String bizOrgCode, Integer peopleType);
Map<String, Map<String, String>> getPersonInfo(String bizOrgCode); Map<String, Map<String, String>> getPersonInfo(String bizOrgCode);
} }
...@@ -19,6 +19,30 @@ ...@@ -19,6 +19,30 @@
HAVING peopleType in (0, 1); HAVING peopleType in (0, 1);
</select> </select>
<select id="selectQualificationStats" resultType="java.util.HashMap">
SELECT
LEFT(u.biz_org_code, 18) AS bizOrgCode,
COUNT(DISTINCT u.sequence_nbr) AS total,
SUM(IF(ISNULL(cfp.post_qualification), 0, 1)) AS certifiedCount,
SUM(CASE WHEN cfp.post_qualification_code LIKE '%1421%' THEN 1 ELSE 0 END) AS level5,
SUM(CASE WHEN cfp.post_qualification_code LIKE '%1422%' THEN 1 ELSE 0 END) AS level4
FROM
cb_org_usr u
INNER JOIN cb_dynamic_form_instance dfi ON dfi.instance_id = u.sequence_nbr AND dfi.field_code = 'peopleType'
LEFT JOIN cb_firefighters_post cfp ON cfp.org_usr_id = u.sequence_nbr AND cfp.is_delete = false
<where>
u.is_delete = false
<if test="peopleType != null and peopleType != ''">
AND dfi.field_value = #{peopleType}
</if>
<if test="bizOrgCode != null and bizOrgCode != ''">
AND u.biz_org_code LIKE CONCAT(#{bizOrgCode}, '%')
</if>
</where>
GROUP BY
LEFT(u.biz_org_code, 18)
</select>
<select id="getPersonStatus" resultType="Map"> <select id="getPersonStatus" resultType="Map">
SELECT SELECT
IF(dfi.field_value = 1601, 1, IF(dfi.field_value = 1602, 0, -1)) AS peopleType, IF(dfi.field_value = 1601, 1, IF(dfi.field_value = 1602, 0, -1)) AS peopleType,
......
...@@ -135,7 +135,7 @@ public class EquipmentIotMqttReceiveConfig { ...@@ -135,7 +135,7 @@ public class EquipmentIotMqttReceiveConfig {
list.add("+/+/perspective"); // 添加交换站事件监听 list.add("+/+/perspective"); // 添加交换站事件监听
list.add(riskMsgCenterEquipTopic); list.add(riskMsgCenterEquipTopic);
list.add(riskMsgCenterPatrolTopic); list.add(riskMsgCenterPatrolTopic);
list.add("+/+/shaoshan"); // 添加换流站韶山监听事件 list.add("+/+/eventAlarm"); // 添加换流站韶山监听事件 --- shaoshan 修改为 eventAlarm:事件告警 - 统一
String[] arr = list.toArray(new String[list.size()]); String[] arr = list.toArray(new String[list.size()]);
adapter = new MqttPahoMessageDrivenChannelAdapter(clientId + "_inbound", mqttPahoClientFactory(), arr); adapter = new MqttPahoMessageDrivenChannelAdapter(clientId + "_inbound", mqttPahoClientFactory(), arr);
adapter.setCompletionTimeout(completionTimeout); adapter.setCompletionTimeout(completionTimeout);
...@@ -161,7 +161,7 @@ public class EquipmentIotMqttReceiveConfig { ...@@ -161,7 +161,7 @@ public class EquipmentIotMqttReceiveConfig {
mqttEventReceiveService.handlerMqttIncrementMessage(topic, msg); mqttEventReceiveService.handlerMqttIncrementMessage(topic, msg);
}else if (dataType.equals("transmit") && StringUtil.isNotEmpty(msg)){ // 遥信遥测信号 }else if (dataType.equals("transmit") && StringUtil.isNotEmpty(msg)){ // 遥信遥测信号
mqttReceiveService.handlerMqttRomaMessage(topic,msg); mqttReceiveService.handlerMqttRomaMessage(topic,msg);
}else if (dataType.equals("shaoshan") && StringUtil.isNotEmpty(msg)){ // 告警信号 }else if (dataType.equals("eventAlarm") && StringUtil.isNotEmpty(msg)){ // 告警信号
mqttReceiveService.handlerMqttStationMessage(topic,msg); mqttReceiveService.handlerMqttStationMessage(topic,msg);
} }
} }
......
package com.yeejoin.equipmanage.controller; package com.yeejoin.equipmanage.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.equipmanage.common.entity.Alarm; import com.yeejoin.equipmanage.common.entity.Alarm;
import com.yeejoin.equipmanage.common.utils.NameUtils; import com.yeejoin.equipmanage.common.utils.NameUtils;
import com.yeejoin.equipmanage.config.PersonIdentify;
import com.yeejoin.equipmanage.service.IAlarmService; import com.yeejoin.equipmanage.service.IAlarmService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import liquibase.pro.packaged.O;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.util.ReflectionUtils; import org.springframework.util.ReflectionUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.enumeration.UserType; import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation; import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.Map;
/** /**
* *
...@@ -33,6 +45,9 @@ public class AlarmController { ...@@ -33,6 +45,9 @@ public class AlarmController {
@Autowired @Autowired
IAlarmService iAlarmService; IAlarmService iAlarmService;
@Autowired
RedisUtils redisUtils;
/** /**
* 新增 * 新增
* *
...@@ -60,7 +75,7 @@ public class AlarmController { ...@@ -60,7 +75,7 @@ public class AlarmController {
/** /**
* 修改 * 修改
* *
* @return * @return
*/ */
@RequestMapping(value = "/updateById", method = RequestMethod.PUT) @RequestMapping(value = "/updateById", method = RequestMethod.PUT)
...@@ -129,4 +144,45 @@ public class AlarmController { ...@@ -129,4 +144,45 @@ public class AlarmController {
page = iAlarmService.page(pageBean, alarmQueryWrapper); page = iAlarmService.page(pageBean, alarmQueryWrapper);
return page; return page;
} }
/**
* 设备平台告警数量统计,按系统
*
* @return
*/
@PersonIdentify
@RequestMapping(value = "/totalAlarmNum", method = RequestMethod.GET)
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "设备平台告警数量统计,按系统", notes = "设备平台告警数量统计,按系统")
public ResponseModel<Object> totalAlarmNum(String bizOrgCode, String systemId) {
if(StringUtils.isEmpty(bizOrgCode)) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
bizOrgCode = reginParams.getPersonIdentity().getBizOrgCode();
}
return ResponseHelper.buildResponse(iAlarmService.totalNum(bizOrgCode, systemId));
}
/**
* 设备告警信息导出
*
* @return
*/
@RequestMapping(value = "/downList", method = RequestMethod.GET)
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "告警信息导出", notes = "告警信息导出")
public void downList(HttpServletResponse response, @RequestParam(required = false) List<String> types,
@RequestParam(required = false) List<String> emergencyLevels,
@RequestParam(required = false) String name,
@RequestParam(required = false) Integer cleanStatus,
@RequestParam(required = false) Integer handleStatus,
@RequestParam(required = false) String bizOrgCode,
@RequestParam(required = false) String systemCode,
@RequestParam(required = false) String createDate,
@RequestParam(required = false) String startDate,
@RequestParam(required = false) String endDate ) {
iAlarmService.downList(response,bizOrgCode, systemCode, types, emergencyLevels, name, cleanStatus, handleStatus, createDate, startDate, endDate);
}
} }
...@@ -707,7 +707,9 @@ public class EmergencyController extends AbstractBaseController { ...@@ -707,7 +707,9 @@ public class EmergencyController extends AbstractBaseController {
@RequestParam(required = false) Integer handleStatus, @RequestParam(required = false) Integer handleStatus,
@RequestParam(required = false) String bizOrgCode, @RequestParam(required = false) String bizOrgCode,
@RequestParam(required = false) String systemCode, @RequestParam(required = false) String systemCode,
@RequestParam(required = false) String createDate @RequestParam(required = false) String createDate,
@RequestParam(required = false) String startDate,
@RequestParam(required = false) String endDate
) { ) {
Page<Map<String, Object>> page = new Page<>(pageNumber, pageSize); Page<Map<String, Object>> page = new Page<>(pageNumber, pageSize);
if (StringUtils.isEmpty(bizOrgCode)) { if (StringUtils.isEmpty(bizOrgCode)) {
...@@ -720,7 +722,7 @@ public class EmergencyController extends AbstractBaseController { ...@@ -720,7 +722,7 @@ public class EmergencyController extends AbstractBaseController {
} }
} }
} }
return CommonResponseUtil.success(iEmergencyService.alarmList(page, bizOrgCode, systemCode, types, emergencyLevels, name, cleanStatus, handleStatus, createDate)); return CommonResponseUtil.success(iEmergencyService.alarmList(page, bizOrgCode, systemCode, types, emergencyLevels, name, cleanStatus, handleStatus, createDate, startDate, endDate));
} }
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false) @TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
......
...@@ -58,10 +58,10 @@ public class FileManageController extends BaseController { ...@@ -58,10 +58,10 @@ public class FileManageController extends BaseController {
} }
@PersonIdentify @PersonIdentify
@RequestMapping(value = "/getFileManageByName", method = RequestMethod.GET) @RequestMapping(value = "/getFileManageByName", method = RequestMethod.POST)
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "列表行点击查看按钮", produces = "application/json;charset=UTF-8", notes = "列表行点击查看按钮") @ApiOperation(httpMethod = "POST", value = "列表行点击查看按钮", produces = "application/json;charset=UTF-8", notes = "列表行点击查看按钮")
public ResponseModel<Page<Map<String, Object>>> getFileManageByName(FileManageDto dto) { public ResponseModel<Page<Map<String, Object>>> getFileManageByName(@RequestBody FileManageDto dto) {
ReginParams reginParams = getSelectedOrgInfo(); ReginParams reginParams = getSelectedOrgInfo();
dto.setBizOrgCode(reginParams.getPersonIdentity().getBizOrgCode()); dto.setBizOrgCode(reginParams.getPersonIdentity().getBizOrgCode());
return CommonResponseUtil.success(fileManageService.getFileManageByName(dto)); return CommonResponseUtil.success(fileManageService.getFileManageByName(dto));
......
package com.yeejoin.equipmanage.controller; package com.yeejoin.equipmanage.controller;
import com.yeejoin.equipmanage.common.entity.SignalClassify;
import com.yeejoin.equipmanage.common.vo.EquipCategoryVo; import com.yeejoin.equipmanage.common.vo.EquipCategoryVo;
import com.yeejoin.equipmanage.service.IStatisticsService; import com.yeejoin.equipmanage.service.IStatisticsService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -10,6 +11,8 @@ import org.springframework.http.MediaType; ...@@ -10,6 +11,8 @@ import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType; import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation; import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.List; import java.util.List;
...@@ -95,4 +98,11 @@ public class StatisticsController { ...@@ -95,4 +98,11 @@ public class StatisticsController {
public List<EquipCategoryVo> equipCategoryVoList(@PathVariable String systemCode) { public List<EquipCategoryVo> equipCategoryVoList(@PathVariable String systemCode) {
return iStatisticsService.equipCategoryVoList(systemCode); return iStatisticsService.equipCategoryVoList(systemCode);
} }
@RequestMapping(value = "/test", method = RequestMethod.GET)
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "根据id查询", notes = "根据id查询")
public ResponseModel<String> getStr() {
return ResponseHelper.buildResponse(iStatisticsService.getStr());
}
} }
...@@ -3,14 +3,17 @@ package com.yeejoin.equipmanage.controller; ...@@ -3,14 +3,17 @@ package com.yeejoin.equipmanage.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams; import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.equipmanage.common.entity.EquipmentSpecificIndex; import com.yeejoin.equipmanage.common.entity.EquipmentSpecificIndex;
import com.yeejoin.equipmanage.common.entity.FormInstanceEquip;
import com.yeejoin.equipmanage.common.enums.IndexStatusEnum; import com.yeejoin.equipmanage.common.enums.IndexStatusEnum;
import com.yeejoin.equipmanage.common.utils.*; import com.yeejoin.equipmanage.common.utils.*;
import com.yeejoin.equipmanage.config.PersonIdentify; import com.yeejoin.equipmanage.config.PersonIdentify;
import com.yeejoin.equipmanage.fegin.IotFeign; import com.yeejoin.equipmanage.fegin.IotFeign;
import com.yeejoin.equipmanage.mapper.FireFightingSystemMapper; import com.yeejoin.equipmanage.mapper.FireFightingSystemMapper;
import com.yeejoin.equipmanage.mapper.FormInstanceEquipMapper;
import com.yeejoin.equipmanage.service.*; import com.yeejoin.equipmanage.service.*;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -66,6 +69,9 @@ public class SupervisionConfigureController extends AbstractBaseController { ...@@ -66,6 +69,9 @@ public class SupervisionConfigureController extends AbstractBaseController {
@Value("${equipment.pressurepump.start}") @Value("${equipment.pressurepump.start}")
private String pressurePumpStart; private String pressurePumpStart;
@Autowired
private FormInstanceEquipMapper formInstanceEquipMapper;
@PersonIdentify @PersonIdentify
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
...@@ -106,17 +112,59 @@ public class SupervisionConfigureController extends AbstractBaseController { ...@@ -106,17 +112,59 @@ public class SupervisionConfigureController extends AbstractBaseController {
} else { } else {
m.put("levelAbs", transResult.get("abs")); m.put("levelAbs", transResult.get("abs"));
} }
if (m.containsKey("pumpDeviceId") && !ObjectUtils.isEmpty(m.get("pumpDeviceId"))) {
// 计算可使用时间:储水量(L) / 出口流量(L/s), 单位为小时 List<String> pumpDeviceIds = Arrays.asList(m.get("pumpDeviceId").toString().split(","));
float outputFlowRate = Float.parseFloat(m.getOrDefault("outputFlowRate", "0").toString()); LambdaQueryWrapper<FormInstanceEquip> wrapper = new LambdaQueryWrapper<>();
if (levelAbsLiter.compareTo(new BigDecimal(0)) != 0 && outputFlowRate != 0) { wrapper.in(FormInstanceEquip::getInstanceId, pumpDeviceIds);
double availableSeconds = levelAbsLiter.divide(new BigDecimal(outputFlowRate), 0, RoundingMode.HALF_UP).doubleValue(); wrapper.eq(FormInstanceEquip::getFieldName, "outputFlowRate");
double availableHours = availableSeconds / 3600.0; List<FormInstanceEquip> formInstanceEquips = formInstanceEquipMapper.selectList(wrapper);
m.put("availableTime", String.format("%.1fh", availableHours)); // 启动一台时 Map<Long, String> collect = formInstanceEquips.stream().collect(Collectors.toMap(FormInstanceEquip::getInstanceId, FormInstanceEquip::getFieldValue));
m.put("availableTimeOnStartTwo", String.format("%.1fh", availableHours / 2)); // 启动两台时 List<String> dataInfo = new ArrayList<>();
} else { int i = 1;
m.put("availableTime", "--"); double addFlowRate = 0.0;
m.put("availableTimeOnStartTwo", "--"); List<Map<String, Object>> info = new ArrayList<>();
for (String pumpDeviceId : pumpDeviceIds) {
HashMap<String, Object> map = new HashMap<>();
map.put("pumpDeviceId", pumpDeviceId);
if (collect.containsKey(Long.valueOf(pumpDeviceId)) && StringUtil.isNotEmpty(collect.get(Long.valueOf(pumpDeviceId)))) {
map.put("outputFlowRate", collect.get(Long.valueOf(pumpDeviceId)));
} else {
map.put("outputFlowRate", 0);
}
info.add(map);
}
// 按流量排序
Collections.sort(info, new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
Float bl1 = Float.valueOf(o1.get("outputFlowRate").toString());
Float bl2 = Float.valueOf(o2.get("outputFlowRate").toString());
return bl2.compareTo(bl1);
}
});
for (Map<String, Object> map : info) {
String message = "启动%s台消防泵可使用时间≈%s";
String availableTimeFirst = "0.0";
// 计算可使用时间:储水量(L) / 出口流量(L/s), 单位为小时
float outputFlowRate = Float.parseFloat(map.getOrDefault("outputFlowRate", "0").toString());
addFlowRate = outputFlowRate + addFlowRate;
if (levelAbsLiter.compareTo(new BigDecimal(0)) != 0 && addFlowRate != 0) {
double availableSeconds = levelAbsLiter.divide(BigDecimal.valueOf(addFlowRate), 0, RoundingMode.HALF_UP).doubleValue();
double availableHours = availableSeconds / 3600.0;
message = String.format(message, i, String.format("%.1fh", availableHours)); // 启动一台时
availableTimeFirst = String.format("%.1fh", availableHours);
} else {
message = String.format(message, i, "--");
availableTimeFirst = "--";
}
dataInfo.add(message);
if (i == 1) {
m.put("availableTime", availableTimeFirst);
}
i++;
}
m.put("availableTimeInfo", dataInfo);
} }
} }
} }
...@@ -149,7 +197,9 @@ public class SupervisionConfigureController extends AbstractBaseController { ...@@ -149,7 +197,9 @@ public class SupervisionConfigureController extends AbstractBaseController {
m.put("levelStatus", "--"); m.put("levelStatus", "--");
} }
m.put("levelAbs", transResult.get("abs")); m.put("levelAbs", transResult.get("abs"));
if (transResult.containsKey("unit")) {
m.put("unit", transResult.get("unit"));
}
// 计算可使用时间:储水量(L) / 出口流量(L/s), 单位为小时 // 计算可使用时间:储水量(L) / 出口流量(L/s), 单位为小时
BigDecimal levelAbsLiter = new BigDecimal(0); // 储水量(升) BigDecimal levelAbsLiter = new BigDecimal(0); // 储水量(升)
BigDecimal volume = new BigDecimal(0); BigDecimal volume = new BigDecimal(0);
......
package com.yeejoin.equipmanage.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class AlarmExportDto {
@ExcelProperty(value = "设备名称", index = 0)
private String equipmentSpecificName;
@ExcelProperty(value = "类型", index = 1)
private String type;
@ExcelProperty(value = "等级", index = 2)
private String emergencyLevelDescribe;
@ExcelProperty(value = "消除状态", index = 3)
private String cleanStatus;
@ExcelProperty(value = "时间", index = 4)
private String createDate;
@ExcelProperty(value = "所在位置", index = 5)
private String location;
@ExcelProperty(value = "告警确认", index = 6)
private String handleStatus;
}
package com.yeejoin.equipmanage.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @author keyong
* @title: ReportAlarmDto
* <pre>
* @description: TODO
* </pre>
* @date 2024/5/11 9:56
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ReportAlarmDto {
private String equipmentSpecificId;
private String specificName;
private String location;
private String equipmentSpecificIndexName;
private String alamContent;
private BigDecimal alarmNum;
private String createDate;
private String updateDate;
private String type;
}
...@@ -2,6 +2,10 @@ package com.yeejoin.equipmanage.mapper; ...@@ -2,6 +2,10 @@ package com.yeejoin.equipmanage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.equipmanage.common.entity.Alarm; import com.yeejoin.equipmanage.common.entity.Alarm;
import liquibase.pro.packaged.S;
import java.util.List;
import java.util.Map;
/** /**
* Mapper 接口 * Mapper 接口
...@@ -11,4 +15,5 @@ import com.yeejoin.equipmanage.common.entity.Alarm; ...@@ -11,4 +15,5 @@ import com.yeejoin.equipmanage.common.entity.Alarm;
*/ */
public interface AlarmMapper extends BaseMapper<Alarm> { public interface AlarmMapper extends BaseMapper<Alarm> {
List<Map<String,String>> totalNum(String bizOrgCode, String systemId);
} }
...@@ -107,7 +107,9 @@ public interface EmergencyMapper extends BaseMapper{ ...@@ -107,7 +107,9 @@ public interface EmergencyMapper extends BaseMapper{
* @param name 设备名称 * @param name 设备名称
* @return * @return
*/ */
Page<Map<String, Object>> alarmList(@Param("page") Page<Map<String, Object>> page, @Param("bizOrgCode") String bizOrgCode, @Param("systemCode") String systemCode, @Param("types") List<String> types, @Param("emergencyLevels") List<String> emergencyLevels, @Param("name") String name, @Param("cleanStatus") Integer cleanStatus, @Param("handleStatus") Integer handleStatus , @Param("createDate") String createDate); Page<Map<String, Object>> alarmList(@Param("page") Page<Map<String, Object>> page, @Param("bizOrgCode") String bizOrgCode, @Param("systemCode") String systemCode, @Param("types") List<String> types, @Param("emergencyLevels") List<String> emergencyLevels, @Param("name") String name, @Param("cleanStatus") Integer cleanStatus, @Param("handleStatus") Integer handleStatus , @Param("createDate") String createDate , @Param("startDate") String startDate , @Param("endDate") String endDate);
List<Map<String, Object>> alarmListNoPage( @Param("bizOrgCode") String bizOrgCode, @Param("systemCode") String systemCode, @Param("types") List<String> types, @Param("emergencyLevels") List<String> emergencyLevels, @Param("name") String name, @Param("cleanStatus") Integer cleanStatus, @Param("handleStatus") Integer handleStatus , @Param("createDate") String createDate , @Param("startDate") String startDate , @Param("endDate") String endDate);
IPage<EquipTypeImgAmountVO> getEmergencyEquipList(@Param("page") IPage page, @Param("equipTypeAmountPage") EquipTypeAmountPageDTO equipTypeAmountPage, @Param("list") List<String> list); IPage<EquipTypeImgAmountVO> getEmergencyEquipList(@Param("page") IPage page, @Param("equipTypeAmountPage") EquipTypeAmountPageDTO equipTypeAmountPage, @Param("list") List<String> list);
......
...@@ -11,6 +11,7 @@ import com.yeejoin.equipmanage.common.entity.dto.EquipSpecificAlarmDTO; ...@@ -11,6 +11,7 @@ import com.yeejoin.equipmanage.common.entity.dto.EquipSpecificAlarmDTO;
import com.yeejoin.equipmanage.common.entity.vo.EquipmentIotAlarmVO; import com.yeejoin.equipmanage.common.entity.vo.EquipmentIotAlarmVO;
import com.yeejoin.equipmanage.common.utils.CommonPageInfoParam; import com.yeejoin.equipmanage.common.utils.CommonPageInfoParam;
import com.yeejoin.equipmanage.common.vo.EquipAlarmLineVo; import com.yeejoin.equipmanage.common.vo.EquipAlarmLineVo;
import com.yeejoin.equipmanage.dto.ReportAlarmDto;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -235,5 +236,5 @@ public interface EquipmentSpecificAlarmMapper extends BaseMapper<EquipmentSpecif ...@@ -235,5 +236,5 @@ public interface EquipmentSpecificAlarmMapper extends BaseMapper<EquipmentSpecif
void clearAlarmData(@Param("equipmentSpecificId") Long equipmentSpecificId); void clearAlarmData(@Param("equipmentSpecificId") Long equipmentSpecificId);
List<Map<String, Object>> getAlarmDetailByDate(@Param("bizOrgCode") String bizOrgCode, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("sysId") Long sysId); List<ReportAlarmDto> getAlarmDetailByDate(@Param("bizOrgCode") String bizOrgCode, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("sysId") Long sysId);
} }
package com.yeejoin.equipmanage.service; package com.yeejoin.equipmanage.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yeejoin.equipmanage.common.entity.Alarm; import com.yeejoin.equipmanage.common.entity.Alarm;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/** /**
* 服务类 * 服务类
* *
...@@ -11,4 +16,7 @@ import com.yeejoin.equipmanage.common.entity.Alarm; ...@@ -11,4 +16,7 @@ import com.yeejoin.equipmanage.common.entity.Alarm;
*/ */
public interface IAlarmService extends IService<Alarm> { public interface IAlarmService extends IService<Alarm> {
List<Map<String,String>> totalNum(String bizOrgCode, String systemId);
void downList(HttpServletResponse response, String bizOrgCode, String systemCode, List<String> types, List<String> emergencyLevels, String name, Integer cleanStatus, Integer handleStatus, String createDate, String startDate, String endDate);
} }
...@@ -69,7 +69,7 @@ public interface IEmergencyService { ...@@ -69,7 +69,7 @@ public interface IEmergencyService {
List<Map<String, Object>> getPressurePumpDiagnosticAnalysis(String bizOrgCode); List<Map<String, Object>> getPressurePumpDiagnosticAnalysis(String bizOrgCode);
Page<Map<String, Object>> alarmList(Page<Map<String, Object>> page,String bizOrgCode, String systemCode, List<String> types, List<String> emergencyLevels, String name, Integer cleanStatus, Integer handleStatus,String createDate); Page<Map<String, Object>> alarmList(Page<Map<String, Object>> page,String bizOrgCode, String systemCode, List<String> types, List<String> emergencyLevels, String name, Integer cleanStatus, Integer handleStatus,String createDate,String startDate,String endDate);
Map<String, List<PressurePumpCountVo>> getPressurePumpDay(); Map<String, List<PressurePumpCountVo>> getPressurePumpDay();
......
...@@ -22,5 +22,6 @@ public interface IStatisticsService { ...@@ -22,5 +22,6 @@ public interface IStatisticsService {
*/ */
List<EquipCategoryVo> equipCategoryVoList(String systemCode); List<EquipCategoryVo> equipCategoryVoList(String systemCode);
String getStr();
} }
package com.yeejoin.equipmanage.service.impl; package com.yeejoin.equipmanage.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yeejoin.amos.boot.biz.common.excel.ExcelUtil;
import com.yeejoin.equipmanage.common.entity.Alarm; import com.yeejoin.equipmanage.common.entity.Alarm;
import com.yeejoin.equipmanage.common.vo.EquipmentAlarmDownloadVO;
import com.yeejoin.equipmanage.dto.AlarmExportDto;
import com.yeejoin.equipmanage.mapper.AlarmMapper; import com.yeejoin.equipmanage.mapper.AlarmMapper;
import com.yeejoin.equipmanage.mapper.EmergencyMapper;
import com.yeejoin.equipmanage.service.IAlarmService; import com.yeejoin.equipmanage.service.IAlarmService;
import liquibase.pro.packaged.L;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/** /**
* 服务实现类 * 服务实现类
* *
...@@ -15,4 +29,30 @@ import org.springframework.stereotype.Service; ...@@ -15,4 +29,30 @@ import org.springframework.stereotype.Service;
@Service @Service
public class AlarmServiceImpl extends ServiceImpl<AlarmMapper, Alarm> implements IAlarmService { public class AlarmServiceImpl extends ServiceImpl<AlarmMapper, Alarm> implements IAlarmService {
@Autowired
AlarmMapper alarmMapper;
@Autowired
EmergencyMapper emergencyMapper;
@Override
public void downList(HttpServletResponse response, String bizOrgCode, String systemCode, List<String> types, List<String> emergencyLevels, String name, Integer cleanStatus, Integer handleStatus, String createDate, String startDate, String endDate) {
List<Map<String, Object>> list = emergencyMapper.alarmListNoPage(bizOrgCode, systemCode, types, emergencyLevels, name, cleanStatus, handleStatus, createDate, startDate, endDate);
List<AlarmExportDto> alarmExportDtoList = new ArrayList<>();
if(list.size() > 0) {
for (Map m :list
) {
String s = JSONObject.toJSONString(m);
AlarmExportDto dto = JSONObject.parseObject(s, AlarmExportDto.class);
alarmExportDtoList.add(dto);
}
ExcelUtil.createTemplate(response, "设备告警信息", "设备告警信息", alarmExportDtoList, AlarmExportDto.class, null, false);
}
}
@Override
public List<Map<String,String>> totalNum(String bizOrgCode, String systemId) {
return alarmMapper.totalNum(bizOrgCode, systemId);
}
} }
...@@ -113,8 +113,8 @@ public class AnalysisReportLogServiceImpl extends ServiceImpl<AnalysisReportLogM ...@@ -113,8 +113,8 @@ public class AnalysisReportLogServiceImpl extends ServiceImpl<AnalysisReportLogM
String indicator = String.valueOf(collect.get(0).get("index")); String indicator = String.valueOf(collect.get(0).get("index"));
// 权限处理 // 权限处理
PermissionInterceptorContext.setDataAuthRule(authKey); PermissionInterceptorContext.setDataAuthRule(authKey);
analysisReportMonthMapper.insertSystemMonthData(new ArrayList<>(Arrays.asList(indicator.split(","))), beginDateStr, endDateStr, Long.valueOf(f.get("id").toString())); analysisReportMonthMapper.insertSystemMonthData(new ArrayList<>(), beginDateStr, endDateStr, Long.valueOf(f.get("id").toString()));
analysisReportSummaryMapper.insertSystemMonthSummaryData(new ArrayList<>(Arrays.asList(indicator.split(","))), beginDateStr, endDateStr, Long.valueOf(f.get("id").toString())); analysisReportSummaryMapper.insertSystemMonthSummaryData(new ArrayList<>(), beginDateStr, endDateStr, Long.valueOf(f.get("id").toString()));
} }
}); });
} }
...@@ -148,8 +148,8 @@ public class AnalysisReportLogServiceImpl extends ServiceImpl<AnalysisReportLogM ...@@ -148,8 +148,8 @@ public class AnalysisReportLogServiceImpl extends ServiceImpl<AnalysisReportLogM
String indicator = String.valueOf(collect.get(0).get("index")); String indicator = String.valueOf(collect.get(0).get("index"));
// 权限处理 // 权限处理
PermissionInterceptorContext.setDataAuthRule(authKey); PermissionInterceptorContext.setDataAuthRule(authKey);
analysisReportMonthMapper.insertSystemMonthData(new ArrayList<>(Arrays.asList(indicator.split(","))), beginDateStr, endDateStr, Long.valueOf(f.get("id").toString())); analysisReportMonthMapper.insertSystemMonthData(new ArrayList<>(), beginDateStr, endDateStr, Long.valueOf(f.get("id").toString()));
analysisReportSummaryMapper.insertSystemMonthSummaryData(new ArrayList<>(Arrays.asList(indicator.split(","))), beginDateStr, endDateStr, Long.valueOf(f.get("id").toString())); analysisReportSummaryMapper.insertSystemMonthSummaryData(new ArrayList<>(), beginDateStr, endDateStr, Long.valueOf(f.get("id").toString()));
} }
}); });
} }
......
...@@ -40,6 +40,7 @@ import org.typroject.tyboot.core.restful.exception.instance.BadRequest; ...@@ -40,6 +40,7 @@ import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
@Service @Service
public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, EquipmentSpecificAlarm> implements IConfirmAlarmService { public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, EquipmentSpecificAlarm> implements IConfirmAlarmService {
...@@ -52,14 +53,16 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -52,14 +53,16 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
private RemoteSecurityService remoteSecurityService; private RemoteSecurityService remoteSecurityService;
static ConfirmAlarmMapper confirmAlarmMapper; static ConfirmAlarmMapper confirmAlarmMapper;
@Autowired @Autowired
public void setConfirmAlarmMapper(ConfirmAlarmMapper confirmAlarmMapper){ public void setConfirmAlarmMapper(ConfirmAlarmMapper confirmAlarmMapper) {
ConfirmAlarmServiceImpl.confirmAlarmMapper = confirmAlarmMapper; ConfirmAlarmServiceImpl.confirmAlarmMapper = confirmAlarmMapper;
} }
private static JcsFeign jcsFeign; private static JcsFeign jcsFeign;
@Autowired @Autowired
public void setJcsFeign(JcsFeign jcsFeign){ public void setJcsFeign(JcsFeign jcsFeign) {
ConfirmAlarmServiceImpl.jcsFeign = jcsFeign; ConfirmAlarmServiceImpl.jcsFeign = jcsFeign;
} }
...@@ -90,7 +93,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -90,7 +93,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
@Autowired @Autowired
@Lazy @Lazy
public void setIEquipmentSpecificIndexSerivce(IEquipmentSpecificSerivce equipmentSpecificSerivce){ public void setIEquipmentSpecificIndexSerivce(IEquipmentSpecificSerivce equipmentSpecificSerivce) {
ConfirmAlarmServiceImpl.equipmentSpecificSerivce = equipmentSpecificSerivce; ConfirmAlarmServiceImpl.equipmentSpecificSerivce = equipmentSpecificSerivce;
} }
...@@ -109,9 +112,13 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -109,9 +112,13 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
@Autowired @Autowired
private SystemctlFeign systemctlFeign; private SystemctlFeign systemctlFeign;
@Autowired
private IEquipmentSpecificAlarmService equipmentSpecificAlarmService;
private static RuleConfirmAlarmService ruleConfirmAlamService; private static RuleConfirmAlarmService ruleConfirmAlamService;
@Autowired @Autowired
public void setRuleConfirmAlamService(RuleConfirmAlarmService ruleConfirmAlamService){ public void setRuleConfirmAlamService(RuleConfirmAlarmService ruleConfirmAlamService) {
ConfirmAlarmServiceImpl.ruleConfirmAlamService = ruleConfirmAlamService; ConfirmAlarmServiceImpl.ruleConfirmAlamService = ruleConfirmAlamService;
} }
...@@ -123,7 +130,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -123,7 +130,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
@Autowired @Autowired
private EquipmentSpecificAlarmMapper equipmentSpecificAlarmMapper; private EquipmentSpecificAlarmMapper equipmentSpecificAlarmMapper;
@Autowired @Autowired
private EquipmentSpecificAlarmLogMapper equipmentSpecificAlarmLogMapper; private EquipmentSpecificAlarmLogMapper equipmentSpecificAlarmLogMapper;
...@@ -131,8 +138,9 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -131,8 +138,9 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
private ISignalClassifyService signalClassifyService; private ISignalClassifyService signalClassifyService;
private static IFormInstanceService instanceService; private static IFormInstanceService instanceService;
@Autowired @Autowired
public void setInstanceService(IFormInstanceService instanceService){ public void setInstanceService(IFormInstanceService instanceService) {
ConfirmAlarmServiceImpl.instanceService = instanceService; ConfirmAlarmServiceImpl.instanceService = instanceService;
} }
...@@ -179,14 +187,14 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -179,14 +187,14 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
} }
@Override @Override
public Map<String ,Integer> videoList(List<String> list) { public Map<String, Integer> videoList(List<String> list) {
Map<String ,Integer> map=new HashMap<>(); Map<String, Integer> map = new HashMap<>();
for (String s : list) { for (String s : list) {
List<AlamVideoVO> video = videoMapper.getVideoBySpeId(Long.valueOf(s)); List<AlamVideoVO> video = videoMapper.getVideoBySpeId(Long.valueOf(s));
if(video!=null&&video.size()>0){ if (video != null && video.size() > 0) {
map.put(s,video.size()); map.put(s, video.size());
}else{ } else {
map.put(s,0); map.put(s, 0);
} }
} }
return map; return map;
...@@ -202,7 +210,6 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -202,7 +210,6 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
EquipmentSpecificAlarmLog alarmLog = equipmentSpecificAlarmLogService.getById(ent.getId()); EquipmentSpecificAlarmLog alarmLog = equipmentSpecificAlarmLogService.getById(ent.getId());
List<EquipmentSpecificAlarmLog> list = null; List<EquipmentSpecificAlarmLog> list = null;
String handleConfirm = ent.getHandleConfirm(); String handleConfirm = ent.getHandleConfirm();
int isBatch = 0;
if (!ObjectUtils.isEmpty(alarmLog)) { if (!ObjectUtils.isEmpty(alarmLog)) {
Long equipmentSpecificAlarmId = alarmLog.getEquipmentSpecificAlarmId(); Long equipmentSpecificAlarmId = alarmLog.getEquipmentSpecificAlarmId();
...@@ -210,65 +217,6 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -210,65 +217,6 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
ent.setEquipmentSpecificId(alarmLog.getEquipmentSpecificId()); ent.setEquipmentSpecificId(alarmLog.getEquipmentSpecificId());
ent.setEquipmentSpecificIndexKey(alarmLog.getEquipmentSpecificIndexKey()); ent.setEquipmentSpecificIndexKey(alarmLog.getEquipmentSpecificIndexKey());
ent.setEquipmentSpecificIndexName(alarmLog.getEquipmentSpecificIndexName()); ent.setEquipmentSpecificIndexName(alarmLog.getEquipmentSpecificIndexName());
Equipment equipment = equipmentSpecificMapper.getEquipmentBySpecificId(alarmLog.getEquipmentSpecificId());
if (!StringUtil.isNotEmpty(equipment.getCleanType())) {
// 若此装备未定义消除策略,默认设置为复位信号自动消除
equipment.setCleanType(AlarmCleanTypeEnum.ZDXC.getCode());
equipmentMapper.updateById(equipment);
}
if (StringUtil.isNotEmpty(equipment.getCleanType()) && AlarmCleanTypeEnum.QRXC.getCode().equals(equipment.getCleanType())) {
EquipmentSpecificAlarm alarm = equipmentSpecificAlarmMapper.selectById(alarmLog.getEquipmentSpecificAlarmId());
alarm.setStatus(AlarmStatusEnum.HF.getCode());
equipmentSpecificAlarmMapper.updateById(alarm);
//恢复后修改 wl_equip_qrcode_record中对应记录
LambdaQueryWrapper<EquipQrcodeRecord> wra = new LambdaQueryWrapper<>();
wra.eq(EquipQrcodeRecord::getEquipid, alarm.getEquipmentSpecificId());
wra.eq(EquipQrcodeRecord::getEquipIndex,alarm.getEquipmentSpecificIndexKey());
wra.isNull(EquipQrcodeRecord::getCleanTime);
EquipQrcodeRecord equipQrcodeRecord = equipQrcodeRecordMapper.selectOne(wra);
if (!ObjectUtils.isEmpty(equipQrcodeRecord)){
equipQrcodeRecord.setCleanTime(new Date());
equipQrcodeRecord.setCleanReason("设备确认消除");
equipQrcodeRecordMapper.updateById(equipQrcodeRecord);
}
//查询二维码事件记录表中该设备的历史数据
LambdaQueryWrapper<EquipQrcodeRecord> query = new LambdaQueryWrapper<>();
query.eq(EquipQrcodeRecord::getEquipid, alarm.getEquipmentSpecificId());
query.isNull(EquipQrcodeRecord::getCleanTime);
query.orderByDesc(EquipQrcodeRecord::getStatus);
List<EquipQrcodeRecord> equipQrcodeRecords = equipQrcodeRecordMapper.selectList(query);
if (equipQrcodeRecords.size() > 0) { //如果记录表中还存在未消除的巡检故障 则先修改为黄码
equipmentSpecificSerivce.updateEquipSpecificStatus(equipQrcodeRecords.get(0).getStatus(), String.valueOf(alarm.getEquipmentSpecificId()));
} else {
equipmentSpecificSerivce.updateEquipSpecificStatus(EquipQrcodeColorEnum.GREEN.getCode(), String.valueOf(alarm.getEquipmentSpecificId()));
}
// 警情处理确认后消除更新value 为false,否则灯还在闪
LambdaUpdateWrapper<EquipmentSpecificIndex> updateWrapper =new LambdaUpdateWrapper<EquipmentSpecificIndex>().
set(EquipmentSpecificIndex::getValue,"false").
set(EquipmentSpecificIndex::getUpdateDate, new Date()).
eq(EquipmentSpecificIndex::getEquipmentSpecificId,alarm.getEquipmentSpecificId()).
eq(EquipmentSpecificIndex::getEquipmentIndexKey,alarm.getEquipmentSpecificIndexKey());
iEquipmentSpecificIndexSerivce.update(updateWrapper);
//指标图标显示根据 EquipmentSpecific 表中的 RealtimeIotIndexValue 判断 同步修改
LambdaUpdateWrapper<EquipmentSpecific> wrapper =new LambdaUpdateWrapper<EquipmentSpecific>().
set(EquipmentSpecific::getRealtimeIotIndexValue,"false").
set(EquipmentSpecific::getRealtimeIotIndexUpdateDate,new Date()).
eq(EquipmentSpecific::getId,alarm.getEquipmentSpecificId());
equipmentSpecificSerivce.update(wrapper);
MqttReceiveServiceImpl.upAlarmLogStatus(alarmLog.getIotCode(), alarmLog.getEquipmentSpecificIndexKey(), null, equipmentSpecificAlarmLogService, true, "");
}
// 如果是批量确警,先查询,再确警,用于批量消息推送
isBatch = ent.getIsBatch();
if (isBatch == 1) {
list = equipmentSpecificAlarmLogService.getIsConfirmByAlarmId(alarmLog.getEquipmentSpecificId(), alarmLog.getEquipmentSpecificIndexKey(), "0");
}
} }
if (ent.getType() != null) { if (ent.getType() != null) {
ent.setType(ConfirmAlamEnum.getEnumByName(ent.getType()) == null ? " " : ConfirmAlamEnum.getEnumByName(ent.getType())); ent.setType(ConfirmAlamEnum.getEnumByName(ent.getType()) == null ? " " : ConfirmAlamEnum.getEnumByName(ent.getType()));
...@@ -276,7 +224,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -276,7 +224,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
ent.setUpdateDate(new Date()); ent.setUpdateDate(new Date());
ent.setConfirmDate(new Date()); ent.setConfirmDate(new Date());
int i = 0 ; // int i = 0;
ent.setConfirmTypeName(ConfirmAlamEnum.getTypeByCode(ent.getConfirmType())); ent.setConfirmTypeName(ConfirmAlamEnum.getTypeByCode(ent.getConfirmType()));
Date date = new Date(); Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
...@@ -287,91 +235,93 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -287,91 +235,93 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
} else { } else {
ent.setResolveResult(dateString + " " + userModel.getRealName() + " 进行警情确认处理。"); ent.setResolveResult(dateString + " " + userModel.getRealName() + " 进行警情确认处理。");
} }
if (ent.getIsBatch() == 0){
if (StringUtils.isNotEmpty(handleConfirm) && HandleBatchConfirmEnum.SINGLE.getCode().equalsIgnoreCase(handleConfirm)) { if (StringUtils.isEmpty(handleConfirm) || StringUtils.isNotEmpty(handleConfirm) && HandleBatchConfirmEnum.SINGLE.getCode().equalsIgnoreCase(handleConfirm)) {
QueryWrapper<EquipmentSpecificAlarmLog> wrapper = new QueryWrapper<>(); QueryWrapper<EquipmentSpecificAlarm> alarmWrapper = new QueryWrapper<>();
wrapper.eq("equipment_specific_id", ent.getEquipmentSpecificId()).isNull("confirm_date"); alarmWrapper.eq("equipment_specific_id", ent.getEquipmentSpecificId()).eq("status", 1);
List<EquipmentSpecificAlarmLog> logs = equipmentSpecificAlarmLogMapper.selectList(wrapper); List<EquipmentSpecificAlarm> alarms = equipmentSpecificAlarmMapper.selectList(alarmWrapper);
if (0 < logs.size()) { if (CollectionUtils.isNotEmpty(alarms)) {
for (EquipmentSpecificAlarmLog x : logs) { List<EquipmentSpecificAlarm> alarms1 = alarms.stream().map(x -> x.setStatus(AlarmStatusEnum.HF.getCode())).collect(Collectors.toList());
x.setConfirmType(ent.getConfirmType()); equipmentSpecificAlarmService.updateBatchById(alarms1);
x.setConfirmTypeName(ent.getConfirmTypeName());
x.setConfirmDate(new Date());
x.setConfirmUser(ent.getConfirmUser());
x.setConfirmUserName(ent.getConfirmUserName());
x.setType(ent.getType());
x.setResolveResult(ent.getResolveResult());
x.setAlarmReason(ent.getAlarmReason());
}
equipmentSpecificAlarmLogService.updateBatchById(logs);
}
} else if (StringUtils.isNotEmpty(handleConfirm) && HandleBatchConfirmEnum.ALL.getCode().equalsIgnoreCase(handleConfirm)) {
QueryWrapper<EquipmentSpecificAlarmLog> logQueryWrapper = new QueryWrapper<>();
logQueryWrapper.isNull("confirm_date");
List<EquipmentSpecificAlarmLog> logList = equipmentSpecificAlarmLogMapper.selectList(logQueryWrapper);
if (0 < logList.size()) {
for (EquipmentSpecificAlarmLog x : logList) {
x.setConfirmType(ent.getConfirmType());
x.setConfirmTypeName(ent.getConfirmTypeName());
x.setConfirmDate(new Date());
x.setConfirmUser(ent.getConfirmUser());
x.setConfirmUserName(ent.getConfirmUserName());
x.setType(ent.getType());
x.setResolveResult(ent.getResolveResult());
x.setAlarmReason(ent.getAlarmReason());
}
equipmentSpecificAlarmLogService.updateBatchById(logList);
}
} else {
i = equipmentSpecificAlarmLogMapper.updateById(ent);
} }
} else { // 警情处理确认后消除更新value 为false,否则灯还在闪
if (StringUtils.isNotEmpty(handleConfirm) && HandleBatchConfirmEnum.SINGLE.getCode().equalsIgnoreCase(handleConfirm)) { LambdaUpdateWrapper<EquipmentSpecificIndex> updateWrapper = new LambdaUpdateWrapper<EquipmentSpecificIndex>().
QueryWrapper<EquipmentSpecificAlarmLog> wrapper = new QueryWrapper<>(); set(EquipmentSpecificIndex::getValue, "false").
wrapper.eq("equipment_specific_id", ent.getEquipmentSpecificId()).isNull("confirm_date"); set(EquipmentSpecificIndex::getUpdateDate, new Date()).
List<EquipmentSpecificAlarmLog> logs = equipmentSpecificAlarmLogMapper.selectList(wrapper); eq(EquipmentSpecificIndex::getEquipmentSpecificId, ent.getEquipmentSpecificId()).
if (0 < logs.size()) { eq(EquipmentSpecificIndex::getEquipmentIndexKey, ent.getEquipmentSpecificIndexKey());
for (EquipmentSpecificAlarmLog x : logs) { iEquipmentSpecificIndexSerivce.update(updateWrapper);
x.setConfirmType(ent.getConfirmType()); //指标图标显示根据 EquipmentSpecific 表中的 RealtimeIotIndexValue 判断 同步修改
x.setConfirmTypeName(ent.getConfirmTypeName()); LambdaUpdateWrapper<EquipmentSpecific> speWrapper = new LambdaUpdateWrapper<EquipmentSpecific>().
x.setConfirmDate(new Date()); set(EquipmentSpecific::getRealtimeIotIndexValue, "false").
x.setConfirmUser(ent.getConfirmUser()); set(EquipmentSpecific::getRealtimeIotIndexUpdateDate, new Date()).
x.setConfirmUserName(ent.getConfirmUserName()); eq(EquipmentSpecific::getId, ent.getEquipmentSpecificId());
x.setType(ent.getType()); equipmentSpecificSerivce.update(speWrapper);
x.setResolveResult(ent.getResolveResult());
x.setAlarmReason(ent.getAlarmReason()); QueryWrapper<EquipmentSpecificAlarmLog> logWrapper = new QueryWrapper<>();
} logWrapper.eq("equipment_specific_id", ent.getEquipmentSpecificId()).isNull("confirm_date");
equipmentSpecificAlarmLogService.updateBatchById(logs); list = equipmentSpecificAlarmLogMapper.selectList(logWrapper);
if (0 < list.size()) {
for (EquipmentSpecificAlarmLog x : list) {
x.setConfirmType(ent.getConfirmType());
x.setConfirmTypeName(ent.getConfirmTypeName());
x.setConfirmDate(new Date());
x.setConfirmUser(ent.getConfirmUser());
x.setConfirmUserName(ent.getConfirmUserName());
x.setType(ent.getType());
x.setResolveResult(ent.getResolveResult());
x.setDefectBatchId(ent.getDefectBatchId());
x.setAlarmReason(ent.getAlarmReason());
x.setCleanTime(date);
} }
} else if (StringUtils.isNotEmpty(handleConfirm) && HandleBatchConfirmEnum.ALL.getCode().equalsIgnoreCase(handleConfirm)) { equipmentSpecificAlarmLogService.updateBatchById(list);
QueryWrapper<EquipmentSpecificAlarmLog> logQueryWrapper = new QueryWrapper<>(); }
logQueryWrapper.isNull("confirm_date"); } else if (StringUtils.isNotEmpty(handleConfirm) && HandleBatchConfirmEnum.ALL.getCode().equalsIgnoreCase(handleConfirm)) {
List<EquipmentSpecificAlarmLog> logList = equipmentSpecificAlarmLogMapper.selectList(logQueryWrapper); QueryWrapper<EquipmentSpecificAlarm> alarmWrapper = new QueryWrapper<>();
if (0 < logList.size()) { alarmWrapper.eq("equipment_specific_id", ent.getEquipmentSpecificId()).eq("status", 1);
for (EquipmentSpecificAlarmLog x : logList) { List<EquipmentSpecificAlarm> alarms = equipmentSpecificAlarmMapper.selectList(alarmWrapper);
x.setConfirmType(ent.getConfirmType()); if (CollectionUtils.isNotEmpty(alarms)) {
x.setConfirmTypeName(ent.getConfirmTypeName()); List<EquipmentSpecificAlarm> alarms1 = alarms.stream().map(x -> x.setStatus(AlarmStatusEnum.HF.getCode())).collect(Collectors.toList());
x.setConfirmDate(new Date()); equipmentSpecificAlarmService.updateBatchById(alarms1);
x.setConfirmUser(ent.getConfirmUser()); }
x.setConfirmUserName(ent.getConfirmUserName()); // 警情处理确认后消除更新value 为false,否则灯还在闪
x.setType(ent.getType()); LambdaUpdateWrapper<EquipmentSpecificIndex> updateWrapper = new LambdaUpdateWrapper<EquipmentSpecificIndex>().
x.setResolveResult(ent.getResolveResult()); set(EquipmentSpecificIndex::getValue, "false").
x.setAlarmReason(ent.getAlarmReason()); set(EquipmentSpecificIndex::getUpdateDate, new Date()).
} eq(EquipmentSpecificIndex::getEquipmentSpecificId, ent.getEquipmentSpecificId()).
equipmentSpecificAlarmLogService.updateBatchById(logList); eq(EquipmentSpecificIndex::getEquipmentIndexKey, ent.getEquipmentSpecificIndexKey());
iEquipmentSpecificIndexSerivce.update(updateWrapper);
//指标图标显示根据 EquipmentSpecific 表中的 RealtimeIotIndexValue 判断 同步修改
LambdaUpdateWrapper<EquipmentSpecific> speWrapper = new LambdaUpdateWrapper<EquipmentSpecific>().
set(EquipmentSpecific::getRealtimeIotIndexValue, "false").
set(EquipmentSpecific::getRealtimeIotIndexUpdateDate, new Date()).
eq(EquipmentSpecific::getId, ent.getEquipmentSpecificId());
equipmentSpecificSerivce.update(speWrapper);
QueryWrapper<EquipmentSpecificAlarmLog> logQueryWrapper = new QueryWrapper<>();
logQueryWrapper.isNull("confirm_date");
list = equipmentSpecificAlarmLogMapper.selectList(logQueryWrapper);
if (0 < list.size()) {
for (EquipmentSpecificAlarmLog x : list) {
x.setConfirmType(ent.getConfirmType());
x.setConfirmTypeName(ent.getConfirmTypeName());
x.setConfirmDate(new Date());
x.setConfirmUser(ent.getConfirmUser());
x.setConfirmUserName(ent.getConfirmUserName());
x.setDefectBatchId(ent.getDefectBatchId());
x.setType(ent.getType());
x.setResolveResult(ent.getResolveResult());
x.setAlarmReason(ent.getAlarmReason());
x.setCleanTime(date);
} }
} else { equipmentSpecificAlarmLogService.updateBatchById(list);
LambdaUpdateWrapper<EquipmentSpecificAlarmLog> updateWrapper = new LambdaUpdateWrapper<EquipmentSpecificAlarmLog>().
eq(EquipmentSpecificAlarmLog::getEquipmentSpecificId, ent.getEquipmentSpecificId()).
eq(EquipmentSpecificAlarmLog::getEquipmentSpecificIndexKey, ent.getEquipmentSpecificIndexKey())
.isNull(EquipmentSpecificAlarmLog::getConfirmDate);
i = equipmentSpecificAlarmLogMapper.update(ent, updateWrapper);
} }
} }
//int i = confirmAlarmMapper.confirmAlam(ent); //int i = confirmAlarmMapper.confirmAlam(ent);
if (i > 0) { // if (i > 0) {
if (jcsSwitch && AlarmTypeEnum.HZGJ.getCode().equals(ent.getConfirmType())) { if (jcsSwitch && AlarmTypeEnum.HZGJ.getCode().equals(ent.getConfirmType())) {
// 确警消息发送 // 确警消息发送
if (StringUtils.isNotBlank(userId)) { if (StringUtils.isNotBlank(userId)) {
...@@ -402,7 +352,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -402,7 +352,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
// syncConfirmAlarmMsgToSystemctl(ent); // syncConfirmAlarmMsgToSystemctl(ent);
} }
// syncDataService.syncCreatedSendAlarmReport(ent); // syncDataService.syncCreatedSendAlarmReport(ent);
} // }
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override @Override
public void afterCommit() { public void afterCommit() {
...@@ -435,7 +385,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -435,7 +385,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
DateUtils.date2LongStr(equipmentSpecificAlarmLog.getCreateDate())); DateUtils.date2LongStr(equipmentSpecificAlarmLog.getCreateDate()));
model.setBody(body); model.setBody(body);
model.setMsgType("iotMonitor"); model.setMsgType("iotMonitor");
if (isSendApp){ if (isSendApp) {
model.setIsSendApp(true); model.setIsSendApp(true);
model.setTerminal("APP/WEB"); model.setTerminal("APP/WEB");
} else { } else {
...@@ -544,73 +494,73 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -544,73 +494,73 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
//查询当前建筑是否是 最顶级建筑 //查询当前建筑是否是 最顶级建筑
public static List<FormInstance> selectBuildingById(List<FormInstance> formInstances){ public static List<FormInstance> selectBuildingById(List<FormInstance> formInstances) {
if (formInstances.get(0).getGroupType().equals("building")){ if (formInstances.get(0).getGroupType().equals("building")) {
return formInstances; return formInstances;
} }
String parentId = null; String parentId = null;
for (FormInstance formInstance : formInstances) { for (FormInstance formInstance : formInstances) {
if (formInstance.getFieldName().equals("parentId")){ if (formInstance.getFieldName().equals("parentId")) {
parentId =formInstance.getFieldValue(); parentId = formInstance.getFieldValue();
} }
} }
LambdaQueryWrapper<FormInstance> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<FormInstance> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(FormInstance::getInstanceId,parentId); wrapper.eq(FormInstance::getInstanceId, parentId);
formInstances = instanceService.getBaseMapper().selectList(wrapper); formInstances = instanceService.getBaseMapper().selectList(wrapper);
return selectBuildingById(formInstances); return selectBuildingById(formInstances);
} }
public static void sendIotSystemAlarm(EquipmentSpecificAlarmLog ent, String userId, String appKey, String product, String token){ public static void sendIotSystemAlarm(EquipmentSpecificAlarmLog ent, String userId, String appKey, String product, String token) {
// Token serverToken = remoteSecurityService.getServerToken(); // Token serverToken = remoteSecurityService.getServerToken();
IotSystemAlarmRo confirmAlamVo = new IotSystemAlarmRo(); IotSystemAlarmRo confirmAlamVo = new IotSystemAlarmRo();
confirmAlamVo.setId(ent.getId()); confirmAlamVo.setId(ent.getId());
ent = confirmAlarmMapper.getDetailsById(String.valueOf(ent.getId()), null); ent = confirmAlarmMapper.getDetailsById(String.valueOf(ent.getId()), null);
EquipmentSpecific equipmentSpecific = equipmentSpecificSerivce.getById(ent.getEquipmentSpecificId()); EquipmentSpecific equipmentSpecific = equipmentSpecificSerivce.getById(ent.getEquipmentSpecificId());
List<FormInstance> formInstances = new ArrayList<>(); List<FormInstance> formInstances = new ArrayList<>();
//现在需要返回设备的所在建筑及经纬度 查询当前设备所在建筑 //现在需要返回设备的所在建筑及经纬度 查询当前设备所在建筑
if(!ValidationUtil.isEmpty(equipmentSpecific.getWarehouseStructureId())){ if (!ValidationUtil.isEmpty(equipmentSpecific.getWarehouseStructureId())) {
LambdaQueryWrapper<FormInstance> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<FormInstance> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(FormInstance::getInstanceId,equipmentSpecific.getWarehouseStructureId()); wrapper.eq(FormInstance::getInstanceId, equipmentSpecific.getWarehouseStructureId());
formInstances = instanceService.getBaseMapper().selectList(wrapper); formInstances = instanceService.getBaseMapper().selectList(wrapper);
} }
//判断所在建筑是否是顶级建筑 房间及楼层是没有经纬度的 向上查询 //判断所在建筑是否是顶级建筑 房间及楼层是没有经纬度的 向上查询
if (!ValidationUtil.isEmpty(formInstances)){ if (!ValidationUtil.isEmpty(formInstances)) {
formInstances = selectBuildingById(formInstances); formInstances = selectBuildingById(formInstances);
} }
String address = null ; String address = null;
String latitude= null ; String latitude = null;
String longitude= null ; String longitude = null;
if (!ValidationUtil.isEmpty(formInstances)){ if (!ValidationUtil.isEmpty(formInstances)) {
for (FormInstance formInstance : formInstances) { for (FormInstance formInstance : formInstances) {
if (formInstance.getFieldName().equals("address")){ if (formInstance.getFieldName().equals("address")) {
address =formInstance.getFieldValue(); address = formInstance.getFieldValue();
if (address.contains("@")){ if (address.contains("@")) {
String[] split = address.split("@"); String[] split = address.split("@");
address = split[0]; address = split[0];
} }
} }
if (formInstance.getFieldName().equals("latitude")){ if (formInstance.getFieldName().equals("latitude")) {
latitude =formInstance.getFieldValue(); latitude = formInstance.getFieldValue();
} }
if (formInstance.getFieldName().equals("longitude")){ if (formInstance.getFieldName().equals("longitude")) {
longitude =formInstance.getFieldValue(); longitude = formInstance.getFieldValue();
} }
} }
} }
if (!ValidationUtil.isEmpty(equipmentSpecific.getAgencyId())){ if (!ValidationUtil.isEmpty(equipmentSpecific.getAgencyId())) {
// 机场单位 // 机场单位
JSONObject unitMap = jcsFeign.getUnitById(appKey, product, token, equipmentSpecific.getAgencyId()).getResult(); JSONObject unitMap = jcsFeign.getUnitById(appKey, product, token, equipmentSpecific.getAgencyId()).getResult();
JSONObject jsonObject = unitMap.getJSONObject("map"); JSONObject jsonObject = unitMap.getJSONObject("map");
confirmAlamVo.setUnitInvolvedId(equipmentSpecific.getAgencyId()); confirmAlamVo.setUnitInvolvedId(equipmentSpecific.getAgencyId());
confirmAlamVo.setUnitInvolvedName(unitMap.getString("bizOrgName")); confirmAlamVo.setUnitInvolvedName(unitMap.getString("bizOrgName"));
confirmAlamVo.setAddress(address == null ? jsonObject.getString("companyLocation"):address); confirmAlamVo.setAddress(address == null ? jsonObject.getString("companyLocation") : address);
confirmAlamVo.setLongitude(longitude== null?jsonObject.getDouble("longitude"): Double.valueOf(longitude)); confirmAlamVo.setLongitude(longitude == null ? jsonObject.getDouble("longitude") : Double.valueOf(longitude));
confirmAlamVo.setLatitude(latitude == null?jsonObject.getDouble("latitude"):Double.valueOf(latitude)); confirmAlamVo.setLatitude(latitude == null ? jsonObject.getDouble("latitude") : Double.valueOf(latitude));
} }
try { try {
// 机场人员 // 机场人员
...@@ -624,10 +574,10 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -624,10 +574,10 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
Map<String, Double> equipLocationInfo = equipmentSpecificSerivce.getEquipLocationInfo(ent.getEquipmentSpecificId()); Map<String, Double> equipLocationInfo = equipmentSpecificSerivce.getEquipLocationInfo(ent.getEquipmentSpecificId());
if (!ObjectUtils.isEmpty(equipLocationInfo)) { if (!ObjectUtils.isEmpty(equipLocationInfo)) {
if (equipLocationInfo.containsKey("longitude")){ if (equipLocationInfo.containsKey("longitude")) {
confirmAlamVo.setFloorLongitude(equipLocationInfo.get("longitude")); confirmAlamVo.setFloorLongitude(equipLocationInfo.get("longitude"));
} }
if (equipLocationInfo.containsKey("latitude")){ if (equipLocationInfo.containsKey("latitude")) {
confirmAlamVo.setFloorLatitude(equipLocationInfo.get("latitude")); confirmAlamVo.setFloorLatitude(equipLocationInfo.get("latitude"));
} }
} }
...@@ -638,7 +588,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -638,7 +588,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
} }
} }
private Double getVal(String value){ private Double getVal(String value) {
return ValidationUtil.isEmpty(value) ? null : Double.parseDouble(value); return ValidationUtil.isEmpty(value) ? null : Double.parseDouble(value);
} }
} }
...@@ -643,8 +643,8 @@ public class EmergencyServiceImpl implements IEmergencyService { ...@@ -643,8 +643,8 @@ public class EmergencyServiceImpl implements IEmergencyService {
@Override @Override
public Page<Map<String, Object>> alarmList(Page<Map<String, Object>> page, String bizOrgCode, String systemCode, List<String> types, List<String> emergencyLevels, String name, Integer cleanStatus, Integer handleStatus,String createDate) { public Page<Map<String, Object>> alarmList(Page<Map<String, Object>> page, String bizOrgCode, String systemCode, List<String> types, List<String> emergencyLevels, String name, Integer cleanStatus, Integer handleStatus,String createDate,String startDate,String endDate) {
return emergencyMapper.alarmList(page, bizOrgCode, systemCode, types, emergencyLevels, name, cleanStatus, handleStatus, createDate); return emergencyMapper.alarmList(page, bizOrgCode, systemCode, types, emergencyLevels, name, cleanStatus, handleStatus, createDate, startDate, endDate);
} }
//稳压泵定时向缓存中存昨日启动次数任务 //稳压泵定时向缓存中存昨日启动次数任务
......
...@@ -390,15 +390,14 @@ public class EquipmentDetailServiceImpl extends ServiceImpl<EquipmentDetailMappe ...@@ -390,15 +390,14 @@ public class EquipmentDetailServiceImpl extends ServiceImpl<EquipmentDetailMappe
} }
} }
// 剩余服役天数 = 报废日期 - 当前日期 // 剩余服役天数 = 报废日期 - 当前日期
String scrapDate = scrapInfo.getOrDefault("scrapDate", "").toString(); Date scrapDate = equipmentDetail.getScrapDate();
if (Objects.nonNull(scrapDate)) { if (Objects.nonNull(scrapDate)) {
Date nowDate = DateUtils.getDateNow(); Date nowDate = DateUtils.getDateNow();
try { try {
Date date = dateFormat.parse(scrapDate); int i = DateUtils.dateBetween(scrapDate, nowDate);
int i = DateUtils.dateBetween(date, nowDate); equipmentDetail.setRemainingDays(Integer.parseInt(String.valueOf(i).replace("-", "")));
equipmentDetail.setRemainingDays(i);
} catch (ParseException e) { } catch (ParseException e) {
log.error("时间格式异常:", e); log.error("时间计算异常:", e);
} }
} }
} }
...@@ -421,7 +420,7 @@ public class EquipmentDetailServiceImpl extends ServiceImpl<EquipmentDetailMappe ...@@ -421,7 +420,7 @@ public class EquipmentDetailServiceImpl extends ServiceImpl<EquipmentDetailMappe
String qrCodeImage = QRCodeUtil.genQrCodeBase64PngWithWord(equipmentSpecific.getQrCode(), 200, 200, equipmentSpecific.getQrCode(),200, type); String qrCodeImage = QRCodeUtil.genQrCodeBase64PngWithWord(equipmentSpecific.getQrCode(), 200, 200, equipmentSpecific.getQrCode(),200, type);
equipmentDetail.setQrCodeImage(qrCodeImage); equipmentDetail.setQrCodeImage(qrCodeImage);
// 消防系统 // 消防系统
if (Objects.nonNull(equipmentSpecific.getSystemId())) { if (StringUtil.isNotEmpty(equipmentSpecific.getSystemId())) {
List<FireFightingSystemEntity> sys = fireFightingSystemMapper.getFightingSysByIds(equipmentSpecific.getSystemId().split(",")); List<FireFightingSystemEntity> sys = fireFightingSystemMapper.getFightingSysByIds(equipmentSpecific.getSystemId().split(","));
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (FireFightingSystemEntity entity : sys) { for (FireFightingSystemEntity entity : sys) {
......
...@@ -38,8 +38,6 @@ import com.yeejoin.equipmanage.mapper.*; ...@@ -38,8 +38,6 @@ import com.yeejoin.equipmanage.mapper.*;
import com.yeejoin.equipmanage.remote.RemoteSecurityService; import com.yeejoin.equipmanage.remote.RemoteSecurityService;
import com.yeejoin.equipmanage.service.*; import com.yeejoin.equipmanage.service.*;
import com.yeejoin.equipmanage.utils.RelationRedisUtil; import com.yeejoin.equipmanage.utils.RelationRedisUtil;
import liquibase.pro.packaged.J;
import liquibase.pro.packaged.S;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
...@@ -1732,6 +1730,7 @@ public class EquipmentSpecificSerivceImpl extends ServiceImpl<EquipmentSpecificM ...@@ -1732,6 +1730,7 @@ public class EquipmentSpecificSerivceImpl extends ServiceImpl<EquipmentSpecificM
es.setRealtimeIotIndexId(index.getEquipmentIndexId()); es.setRealtimeIotIndexId(index.getEquipmentIndexId());
es.setRealtimeIotIndexUpdateDate(index.getUpdateDate()); es.setRealtimeIotIndexUpdateDate(index.getUpdateDate());
es.setValueLabel(index.getValueLabel()); es.setValueLabel(index.getValueLabel());
es.setTypeCode(index.getTypeCode());
equipmentSpecificMapper.updateById(es); equipmentSpecificMapper.updateById(es);
} }
} }
......
...@@ -31,6 +31,7 @@ import com.yeejoin.equipmanage.common.enums.*; ...@@ -31,6 +31,7 @@ import com.yeejoin.equipmanage.common.enums.*;
import com.yeejoin.equipmanage.common.utils.*; import com.yeejoin.equipmanage.common.utils.*;
import com.yeejoin.equipmanage.common.vo.*; import com.yeejoin.equipmanage.common.vo.*;
import com.yeejoin.equipmanage.controller.EquipmentDetailController; import com.yeejoin.equipmanage.controller.EquipmentDetailController;
import com.yeejoin.equipmanage.dto.ReportAlarmDto;
import com.yeejoin.equipmanage.fegin.JcsFeign; import com.yeejoin.equipmanage.fegin.JcsFeign;
import com.yeejoin.equipmanage.mapper.*; import com.yeejoin.equipmanage.mapper.*;
import com.yeejoin.equipmanage.remote.RemoteSecurityService; import com.yeejoin.equipmanage.remote.RemoteSecurityService;
...@@ -65,6 +66,7 @@ import java.nio.charset.StandardCharsets; ...@@ -65,6 +66,7 @@ import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
import static java.lang.String.valueOf; import static java.lang.String.valueOf;
...@@ -1636,7 +1638,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1636,7 +1638,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
// 系统循环数据填充 // 系统循环数据填充
ArrayList<Map<String, Object>> systemList = new ArrayList<>(); ArrayList<Map<String, Object>> systemList = new ArrayList<>();
List<Map<String, Object>> attachAlarmList = new ArrayList<>(); List<ReportAlarmDto> attachAlarmList = new ArrayList<>();
if (!CollectionUtils.isEmpty(system)) { if (!CollectionUtils.isEmpty(system)) {
// 换流站信息 // 换流站信息
if (!ObjectUtils.isEmpty(system.get(0).get("stationName"))) { if (!ObjectUtils.isEmpty(system.get(0).get("stationName"))) {
...@@ -1656,7 +1658,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1656,7 +1658,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
String startTime = StringUtil.isNotEmpty(startDate) ? org.apache.commons.lang3.StringUtils.trimToNull(startDate).substring(0, 10) + " 00:00:00" : null; String startTime = StringUtil.isNotEmpty(startDate) ? org.apache.commons.lang3.StringUtils.trimToNull(startDate).substring(0, 10) + " 00:00:00" : null;
String endTime = StringUtil.isNotEmpty(endDate) ? org.apache.commons.lang3.StringUtils.trimToNull(endDate).substring(0, 10) + " 23:59:59" : null; String endTime = StringUtil.isNotEmpty(endDate) ? org.apache.commons.lang3.StringUtils.trimToNull(endDate).substring(0, 10) + " 23:59:59" : null;
// 附件告警数据 // 附件告警数据
List<Map<String, Object>> sysAlarmList = equipmentSpecificAlarmMapper.getAlarmDetailByDate(bizOrgCode, startTime, endTime, Long.valueOf(String.valueOf(sys.get("id")))); List<ReportAlarmDto> sysAlarmList = equipmentSpecificAlarmMapper.getAlarmDetailByDate(bizOrgCode, startTime, endTime, Long.valueOf(String.valueOf(sys.get("id"))));
attachAlarmList.addAll(sysAlarmList); attachAlarmList.addAll(sysAlarmList);
// 系统名称 // 系统名称
...@@ -1691,24 +1693,24 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1691,24 +1693,24 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
alarmMap.put("alarmEquipPercent", ObjectUtils.isEmpty(alarm.get("alarmEquipPercent")) ? "" : String.valueOf(alarm.get("alarmEquipPercent"))); alarmMap.put("alarmEquipPercent", ObjectUtils.isEmpty(alarm.get("alarmEquipPercent")) ? "" : String.valueOf(alarm.get("alarmEquipPercent")));
// 信息总数 // 信息总数
alarmMap.put("total_info_num", ObjectUtils.isEmpty(alarm.get("total_info_num")) ? "" : String.valueOf(alarm.get("total_info_num"))); alarmMap.put("total_info_num", ObjectUtils.isEmpty(alarm.get("total_info_num")) ? "" : String.valueOf(alarm.get("total_info_num")));
if (Integer.parseInt(alarmMap.get("total_info_num").toString()) == 0) { // if (Integer.parseInt(alarmMap.get("total_info_num").toString()) == 0) {
continue; // continue;
} // }
maps.add(alarmMap); maps.add(alarmMap);
} }
} else { } else {
HashMap<String, Object> alarmMap = new HashMap<>(); HashMap<String, Object> alarmMap = new HashMap<>();
alarmMap.put("equipment_name", ""); alarmMap.put("equipment_name", "");
alarmMap.put("num", ""); alarmMap.put("num", "");
alarmMap.put("normalEquipNum", ""); alarmMap.put("normalEquipNum", "");
alarmMap.put("normalEquipPercent", ""); alarmMap.put("normalEquipPercent", "");
alarmMap.put("fault_equip_num", ""); alarmMap.put("fault_equip_num", "");
alarmMap.put("alarm_info_num", ""); alarmMap.put("alarm_info_num", "");
alarmMap.put("faultEquipPercent", ""); alarmMap.put("faultEquipPercent", "");
alarmMap.put("alarm_equip_num", ""); alarmMap.put("alarm_equip_num", "");
alarmMap.put("alarmEquipPercent", ""); alarmMap.put("alarmEquipPercent", "");
alarmMap.put("total_info_num", ""); alarmMap.put("total_info_num", "");
maps.add(alarmMap); maps.add(alarmMap);
} }
systemData.put("list", maps); systemData.put("list", maps);
...@@ -1716,7 +1718,6 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1716,7 +1718,6 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
Map<String, Object> summarize = fireFightingSystemMapper.selectMonthSummarize(startDate.substring(0, 7), String.valueOf(sys.get("id"))); Map<String, Object> summarize = fireFightingSystemMapper.selectMonthSummarize(startDate.substring(0, 7), String.valueOf(sys.get("id")));
if (!ObjectUtils.isEmpty(summarize)) { if (!ObjectUtils.isEmpty(summarize)) {
systemData.put("summarize", ObjectUtils.isEmpty(summarize.get("summary_info")) ? "" : String.valueOf(summarize.get("summary_info"))); systemData.put("summarize", ObjectUtils.isEmpty(summarize.get("summary_info")) ? "" : String.valueOf(summarize.get("summary_info")));
} else { } else {
systemData.put("summarize", ""); systemData.put("summarize", "");
} }
...@@ -1725,10 +1726,15 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1725,10 +1726,15 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
String[] split = indicator.split(","); String[] split = indicator.split(",");
List<String> indicatorList = Arrays.asList(split); List<String> indicatorList = Arrays.asList(split);
List<Map<String, Object>> pieChartList = fireFightingSystemMapper.selectMonthPieChart(String.valueOf(sys.get("code")), startDate, endDate); List<Map<String, Object>> pieChartList = fireFightingSystemMapper.selectMonthPieChart(String.valueOf(sys.get("code")), startDate, endDate);
List<Map<String, Object>> pieChartListTwo = fireFightingSystemMapper.selectMonthPieChartTwo(String.valueOf(sys.get("code")), startDate, endDate, indicatorList); List<Map<String, Object>> pieChartListTwo = fireFightingSystemMapper.selectMonthPieChartTwo(String.valueOf(sys.get("code")), startDate, endDate, new ArrayList<>());
// List<Map<String, Object>> selectMonthPolyline = fireFightingSystemMapper.selectMonthPolyline(String.valueOf(sys.get("code")), startDate, endDate, new ArrayList<>());
List<Map<String, Object>> selectMonthPolyline = fireFightingSystemMapper.selectMonthPolyline(String.valueOf(sys.get("code")), startDate, endDate, indicatorList); List<Map<String, Object>> selectMonthPolyline = fireFightingSystemMapper.selectMonthPolyline(String.valueOf(sys.get("code")), startDate, endDate, indicatorList);
log.info("===========rrrrrrrrrr,{}",JSONObject.toJSONString(pieChartList));
log.info("===========ssssssssss,{}",JSONObject.toJSONString(pieChartListTwo));
log.info("===========aaaaaaaaaa,{}",JSONObject.toJSONString(selectMonthPolyline));
String pieChart = ChartsUtils.pieChart(pieChartList, "故障设备类型占比"); String pieChart = ChartsUtils.pieChart(pieChartList, "故障设备类型占比");
systemData.put("bing1", pieChart); systemData.put("bing1", pieChart);
...@@ -1757,7 +1763,21 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1757,7 +1763,21 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
map.put("datalist", systemList); map.put("datalist", systemList);
} }
} }
map.put("attachAlarmList", attachAlarmList); if (!CollectionUtils.isEmpty(attachAlarmList)) {
Map<String, List<ReportAlarmDto>> listMap = attachAlarmList.stream().collect(Collectors.groupingBy(ReportAlarmDto::getEquipmentSpecificId));
List<ReportAlarmDto> dtos = new ArrayList<>();
for (List<ReportAlarmDto> list : listMap.values()) {
dtos.addAll(list);
}
attachAlarmList = dtos;
}
List<ReportAlarmDto> newAttachAlarmList = new ArrayList<>();
for (ReportAlarmDto dto : attachAlarmList) {
if(!newAttachAlarmList.contains(dto)){
newAttachAlarmList.add(dto);
}
}
map.put("attachAlarmList", newAttachAlarmList);
}else { }else {
return null; return null;
} }
...@@ -1851,7 +1871,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1851,7 +1871,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
map.put("time", startDate + "至" + endDate); map.put("time", startDate + "至" + endDate);
// 系统循环数据填充 // 系统循环数据填充
ArrayList<Map<String, Object>> dataList = new ArrayList<>(); ArrayList<Map<String, Object>> dataList = new ArrayList<>();
List<Map<String, Object>> attachAlarmList = new ArrayList<>(); List<ReportAlarmDto> attachAlarmList = new ArrayList<>();
for (Map<String, Object> system : systemList) { for (Map<String, Object> system : systemList) {
HashMap<String, Object> systemData = new HashMap<>(); HashMap<String, Object> systemData = new HashMap<>();
List<Map> collect = indicatorConfiguration.stream(). List<Map> collect = indicatorConfiguration.stream().
...@@ -1861,7 +1881,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1861,7 +1881,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
String startTime = StringUtil.isNotEmpty(startDate) ? org.apache.commons.lang3.StringUtils.trimToNull(startDate).substring(0, 10) + " 00:00:00" : null; String startTime = StringUtil.isNotEmpty(startDate) ? org.apache.commons.lang3.StringUtils.trimToNull(startDate).substring(0, 10) + " 00:00:00" : null;
String endTime = StringUtil.isNotEmpty(endDate) ? org.apache.commons.lang3.StringUtils.trimToNull(endDate).substring(0, 10) + " 23:59:59" : null; String endTime = StringUtil.isNotEmpty(endDate) ? org.apache.commons.lang3.StringUtils.trimToNull(endDate).substring(0, 10) + " 23:59:59" : null;
// 附件告警数据 // 附件告警数据
List<Map<String, Object>> sysAlarmList = equipmentSpecificAlarmMapper.getAlarmDetailByDate(bizOrgCode, startTime, endTime, Long.valueOf(String.valueOf(system.get("id")))); List<ReportAlarmDto> sysAlarmList = equipmentSpecificAlarmMapper.getAlarmDetailByDate(bizOrgCode, startTime, endTime, Long.valueOf(String.valueOf(system.get("id"))));
attachAlarmList.addAll(sysAlarmList); attachAlarmList.addAll(sysAlarmList);
// 系统名称 // 系统名称
...@@ -1900,19 +1920,19 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1900,19 +1920,19 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
// listItem.put("alarmEquipNum", ObjectUtils.isEmpty(weekItem.get("alarmEquipNum")) ? "" : String.valueOf(weekItem.get("alarmEquipNum"))); // listItem.put("alarmEquipNum", ObjectUtils.isEmpty(weekItem.get("alarmEquipNum")) ? "" : String.valueOf(weekItem.get("alarmEquipNum")));
// 7日告警条数 // 7日告警条数
if (!ObjectUtils.isEmpty(weekItem.get("type_code")) && !ObjectUtils.isEmpty(weekItem.get("code"))) { if (!ObjectUtils.isEmpty(weekItem.get("type_code")) && !ObjectUtils.isEmpty(weekItem.get("code"))) {
Integer integer = fireFightingSystemMapper.selectAlarms(valueOf(system.get("id")), valueOf(weekItem.get("type_code")), valueOf(weekItem.get("code")), startDate, endDate, indicatorList); Integer integer = fireFightingSystemMapper.selectAlarms(valueOf(system.get("id")), valueOf(weekItem.get("type_code")), valueOf(weekItem.get("code")), startDate, endDate, new ArrayList<>());
listItem.put("trueNum", String.valueOf(integer)); listItem.put("trueNum", String.valueOf(integer));
} else { } else {
listItem.put("trueNum", String.valueOf(0)); listItem.put("trueNum", String.valueOf(0));
} }
if (Integer.parseInt(listItem.get("trueNum").toString()) == 0) { // if (Integer.parseInt(listItem.get("trueNum").toString()) == 0) {
continue; // continue;
} // }
list.add(listItem); list.add(listItem);
} }
} else { } else {
HashMap<String, Object> listItem = new HashMap<>(); HashMap<String, Object> listItem = new HashMap<>();
listItem.put("name", ""); listItem.put("name", "");
listItem.put("num", ""); listItem.put("num", "");
listItem.put("normalNum", ""); listItem.put("normalNum", "");
listItem.put("type_name", ""); listItem.put("type_name", "");
...@@ -1925,7 +1945,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1925,7 +1945,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
} }
// 总结 // 总结
Map<String, Object> summarize = fireFightingSystemMapper.selectWeekSummarize(valueOf(system.get("id")), startDate, endDate, indicatorList); Map<String, Object> summarize = fireFightingSystemMapper.selectWeekSummarize(valueOf(system.get("id")), startDate, endDate, new ArrayList<>());
// if (!ObjectUtils.isEmpty(summarize.get("contant"))) { // if (!ObjectUtils.isEmpty(summarize.get("contant"))) {
// systemData.put("summarize", String.valueOf(summarize.get("contant"))); // systemData.put("summarize", String.valueOf(summarize.get("contant")));
// } else { // } else {
...@@ -1969,7 +1989,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1969,7 +1989,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
String pieChart2 = ChartsUtils.pieChart(weekEchart, "故障设备类型占比"); String pieChart2 = ChartsUtils.pieChart(weekEchart, "故障设备类型占比");
systemData.put("pictureCenter", pieChart2); systemData.put("pictureCenter", pieChart2);
List<Map<String, Object>> linesEchart = fireFightingSystemMapper.selectWeekLinesEchart(valueOf(system.get("code")), startDate, endDate, indicatorList); List<Map<String, Object>> linesEchart = fireFightingSystemMapper.selectWeekLinesEchart(valueOf(system.get("code")), startDate, endDate, new ArrayList<>());
String lines = ChartsUtils.manyLineChart(linesEchart, "报警趋势", "日期", "报警数量", "week"); String lines = ChartsUtils.manyLineChart(linesEchart, "报警趋势", "日期", "报警数量", "week");
systemData.put("lines", lines); systemData.put("lines", lines);
...@@ -1978,7 +1998,21 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1978,7 +1998,21 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
map.put("data", dataList); map.put("data", dataList);
} }
} }
map.put("attachAlarmList", attachAlarmList); if (!CollectionUtils.isEmpty(attachAlarmList)) {
Map<String, List<ReportAlarmDto>> listMap = attachAlarmList.stream().collect(Collectors.groupingBy(ReportAlarmDto::getEquipmentSpecificId));
List<ReportAlarmDto> dtos = new ArrayList<>();
for (List<ReportAlarmDto> list : listMap.values()) {
dtos.addAll(list);
}
attachAlarmList = dtos;
}
List<ReportAlarmDto> newAttachAlarmList = new ArrayList<>();
for (ReportAlarmDto dto : attachAlarmList) {
if(!newAttachAlarmList.contains(dto)){
newAttachAlarmList.add(dto);
}
}
map.put("attachAlarmList", newAttachAlarmList);
}else { }else {
return null; return null;
} }
...@@ -1988,6 +2022,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1988,6 +2022,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
@Override @Override
public String iotWeekReport(String bizOrgCode, String startDate, String endDate) { public String iotWeekReport(String bizOrgCode, String startDate, String endDate) {
Map<String, Object> dataMap = getWeekData(bizOrgCode, startDate, endDate); Map<String, Object> dataMap = getWeekData(bizOrgCode, startDate, endDate);
log.info("===========ddddddd,{}",JSONObject.toJSONString(dataMap));
if (dataMap == null) { if (dataMap == null) {
return null; return null;
} }
...@@ -2058,7 +2093,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -2058,7 +2093,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
// 系统循环数据填充 // 系统循环数据填充
ArrayList<Map<String, Object>> dataList = new ArrayList<>(); ArrayList<Map<String, Object>> dataList = new ArrayList<>();
List<Map<String, Object>> attachAlarmList = new ArrayList<>(); List<ReportAlarmDto> attachAlarmList = new ArrayList<>();
for (Map<String, Object> system : systemList) { for (Map<String, Object> system : systemList) {
HashMap<String, Object> systemData = new HashMap<>(); HashMap<String, Object> systemData = new HashMap<>();
List<Map> collect = indicatorConfiguration.stream(). List<Map> collect = indicatorConfiguration.stream().
...@@ -2068,7 +2103,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -2068,7 +2103,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
String startTime = StringUtil.isNotEmpty(startDate) ? org.apache.commons.lang3.StringUtils.trimToNull(startDate).substring(0, 10) + " 00:00:00" : null; String startTime = StringUtil.isNotEmpty(startDate) ? org.apache.commons.lang3.StringUtils.trimToNull(startDate).substring(0, 10) + " 00:00:00" : null;
String endTime = StringUtil.isNotEmpty(endDate) ? org.apache.commons.lang3.StringUtils.trimToNull(endDate).substring(0, 10) + " 23:59:59" : null; String endTime = StringUtil.isNotEmpty(endDate) ? org.apache.commons.lang3.StringUtils.trimToNull(endDate).substring(0, 10) + " 23:59:59" : null;
// 附件告警数据 // 附件告警数据
List<Map<String, Object>> sysAlarmList = equipmentSpecificAlarmMapper.getAlarmDetailByDate(bizOrgCode, startTime, endTime, Long.valueOf(String.valueOf(system.get("id")))); List<ReportAlarmDto> sysAlarmList = equipmentSpecificAlarmMapper.getAlarmDetailByDate(bizOrgCode, startTime, endTime, Long.valueOf(String.valueOf(system.get("id"))));
attachAlarmList.addAll(sysAlarmList); attachAlarmList.addAll(sysAlarmList);
// 系统名称 // 系统名称
...@@ -2102,15 +2137,18 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -2102,15 +2137,18 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
// 日告警设备数 // 日告警设备数
listItem.put("alarmEquipNum", ObjectUtils.isEmpty(weekItem.get("alarmEquipNum")) ? "" : String.valueOf(weekItem.get("alarmEquipNum"))); listItem.put("alarmEquipNum", ObjectUtils.isEmpty(weekItem.get("alarmEquipNum")) ? "" : String.valueOf(weekItem.get("alarmEquipNum")));
// 日告警条数 // 日告警条数
log.info("==========sbco={}", weekItem.get("type_code").toString());
log.info("==========sbCC={}", weekItem.get("code").toString());
if (!ObjectUtils.isEmpty(weekItem.get("type_code")) && !ObjectUtils.isEmpty(weekItem.get("code"))) { if (!ObjectUtils.isEmpty(weekItem.get("type_code")) && !ObjectUtils.isEmpty(weekItem.get("code"))) {
Integer integer = fireFightingSystemMapper.selectAlarms(valueOf(system.get("id")), valueOf(weekItem.get("type_code")), valueOf(weekItem.get("code")), startDate, endDate, indicatorList); Integer integer = fireFightingSystemMapper.selectAlarms(valueOf(system.get("id")), valueOf(weekItem.get("type_code")), valueOf(weekItem.get("code")), startDate, endDate, new ArrayList<>());
listItem.put("trueNum", String.valueOf(integer)); listItem.put("trueNum", String.valueOf(integer));
} else { } else {
listItem.put("trueNum", String.valueOf(0)); listItem.put("trueNum", String.valueOf(0));
} }
if (Integer.parseInt(listItem.get("trueNum").toString()) == 0) { // if (Integer.parseInt(listItem.get("trueNum").toString()) == 0) {
continue; // continue;
} // }
if (!ObjectUtils.isEmpty(weekItem.get("type_code")) && String.valueOf(weekItem.get("type_code")).endsWith("Fault")){ if (!ObjectUtils.isEmpty(weekItem.get("type_code")) && String.valueOf(weekItem.get("type_code")).endsWith("Fault")){
if (!ObjectUtils.isEmpty(binMap) && !ObjectUtils.isEmpty(listItem.get("name")) && binMap.containsKey(String.valueOf(listItem.get("name")))){ if (!ObjectUtils.isEmpty(binMap) && !ObjectUtils.isEmpty(listItem.get("name")) && binMap.containsKey(String.valueOf(listItem.get("name")))){
int newValue = Integer.parseInt(String.valueOf(listItem.get("alarmEquipNum"))); int newValue = Integer.parseInt(String.valueOf(listItem.get("alarmEquipNum")));
...@@ -2133,7 +2171,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -2133,7 +2171,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
} else { } else {
HashMap<String, Object> listItem = new HashMap<>(); HashMap<String, Object> listItem = new HashMap<>();
listItem.put("name", ""); listItem.put("name", "");
listItem.put("num", ""); listItem.put("num", "");
listItem.put("normalNum", ""); listItem.put("normalNum", "");
listItem.put("type_name", ""); listItem.put("type_name", "");
...@@ -2146,7 +2184,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -2146,7 +2184,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
} }
// 总结 // 总结
Map<String, Object> summarize = fireFightingSystemMapper.selectDaySummarize(valueOf(system.get("id")), startDate, endDate, indicatorList); Map<String, Object> summarize = fireFightingSystemMapper.selectDaySummarize(valueOf(system.get("id")), startDate, endDate, new ArrayList<>());
// if (!ObjectUtils.isEmpty(summarize.get("contant"))) { // if (!ObjectUtils.isEmpty(summarize.get("contant"))) {
// systemData.put("summarize", String.valueOf(summarize.get("contant"))); // systemData.put("summarize", String.valueOf(summarize.get("contant")));
// } else { // } else {
...@@ -2158,6 +2196,8 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -2158,6 +2196,8 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
// echarts 图表 // echarts 图表
List<Map<String, Object>> mapList = fireFightingSystemMapper.selectDayEquipEchart(valueOf(system.get("code")), startDate, endDate); List<Map<String, Object>> mapList = fireFightingSystemMapper.selectDayEquipEchart(valueOf(system.get("code")), startDate, endDate);
log.info("77777777777777,{}" ,JSONObject.toJSONString(alarmMapList));
String pieChart1 = ChartsUtils.pieChart(alarmMapList, "故障设备类型占比"); String pieChart1 = ChartsUtils.pieChart(alarmMapList, "故障设备类型占比");
// List<Map<String, Object>> dayEcharts = fireFightingSystemMapper.selectDayEchart(valueOf(system.get("id")), startDate, indicatorList); // List<Map<String, Object>> dayEcharts = fireFightingSystemMapper.selectDayEchart(valueOf(system.get("id")), startDate, indicatorList);
...@@ -2186,7 +2226,21 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -2186,7 +2226,21 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
map.put("data", dataList); map.put("data", dataList);
} }
} }
map.put("attachAlarmList", attachAlarmList); if (!CollectionUtils.isEmpty(attachAlarmList)) {
Map<String, List<ReportAlarmDto>> listMap = attachAlarmList.stream().collect(Collectors.groupingBy(ReportAlarmDto::getEquipmentSpecificId));
List<ReportAlarmDto> dtos = new ArrayList<>();
for (List<ReportAlarmDto> list : listMap.values()) {
dtos.addAll(list);
}
attachAlarmList = dtos;
}
List<ReportAlarmDto> newAttachAlarmList = new ArrayList<>();
for (ReportAlarmDto dto : attachAlarmList) {
if(!newAttachAlarmList.contains(dto)){
newAttachAlarmList.add(dto);
}
}
map.put("attachAlarmList", newAttachAlarmList);
}else { }else {
return null ; return null ;
} }
...@@ -2196,7 +2250,8 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -2196,7 +2250,8 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
@Override @Override
public String iotDayReport(String bizOrgCode, String startDate, String endDate) { public String iotDayReport(String bizOrgCode, String startDate, String endDate) {
Map<String, Object> dataMap = getDayData(bizOrgCode, startDate, endDate); Map<String, Object> dataMap = getDayData(bizOrgCode, startDate, endDate);
if (dataMap == null) { log.info("===========ddddddd,{}",JSONObject.toJSONString(dataMap));
if (dataMap == null){
return null; return null;
} }
WordTemplateUtils instance = WordTemplateUtils.getInstance(); WordTemplateUtils instance = WordTemplateUtils.getInstance();
......
...@@ -52,7 +52,7 @@ public class FormInstanceEquipServiceImpl extends ServiceImpl<FormInstanceEquipM ...@@ -52,7 +52,7 @@ public class FormInstanceEquipServiceImpl extends ServiceImpl<FormInstanceEquipM
@Autowired @Autowired
private Sequence sequence; private Sequence sequence;
final static String[] list = {"92031900", "92011000", "92010700", "92032000"}; final static String[] list = {"92031900", "92011000", "92010700", "92032000", "92010600"};
private final String CODE = "code"; private final String CODE = "code";
......
...@@ -226,7 +226,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -226,7 +226,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
public static List<EquipmentSpecificAlarmLog> upAlarmLogStatus(String iotCode, String equipmentSpecificIndexKey, public static List<EquipmentSpecificAlarmLog> upAlarmLogStatus(String iotCode, String equipmentSpecificIndexKey,
String traceId, IEquipmentSpecificAlarmLogService equipmentSpecificAlarmLogService, String traceId, IEquipmentSpecificAlarmLogService equipmentSpecificAlarmLogService,
boolean flag, String batchConfirm) { boolean flag, boolean batchConfirm, String confirmType) {
// LambdaQueryWrapper<EquipmentSpecificAlarmLog> queryWrapper = new LambdaQueryWrapper<>(); // LambdaQueryWrapper<EquipmentSpecificAlarmLog> queryWrapper = new LambdaQueryWrapper<>();
// if (batchConfirm.equalsIgnoreCase(HandleBatchConfirmEnum.SINGLE.getCode())) { // if (batchConfirm.equalsIgnoreCase(HandleBatchConfirmEnum.SINGLE.getCode())) {
...@@ -472,6 +472,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -472,6 +472,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
Map<Object, Object> equipmentIndexKeyMap = redisUtils.hmget(RedisKey.EQUIP_INDEX_ADDRESS_KEY); Map<Object, Object> equipmentIndexKeyMap = redisUtils.hmget(RedisKey.EQUIP_INDEX_ADDRESS_KEY);
if (equipmentIndexKeyMap.get(indexAddress) != null) { if (equipmentIndexKeyMap.get(indexAddress) != null) {
EquipmentSpecificIndex equipmentSpeIndex = equipmentSpecificIndexService.getEquipmentSpeIndexByAddress(indexAddress, null, null); EquipmentSpecificIndex equipmentSpeIndex = equipmentSpecificIndexService.getEquipmentSpeIndexByAddress(indexAddress, null, null);
EquipmentIndex equipmentIndex = equipmentIndexService.getById(equipmentSpeIndex.getEquipmentIndexId());
equipmentSpeIndex.setValue(value); equipmentSpeIndex.setValue(value);
equipmentSpeIndex.setValueLabel(valueTranslate(value, equipmentSpeIndex.getValueEnum())); equipmentSpeIndex.setValueLabel(valueTranslate(value, equipmentSpeIndex.getValueEnum()));
...@@ -481,6 +482,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -481,6 +482,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
equipmentSpeIndex.setDataType(dataType); equipmentSpeIndex.setDataType(dataType);
equipmentSpeIndex.setTimeStamp(timeStamp); equipmentSpeIndex.setTimeStamp(timeStamp);
equipmentSpeIndex.setUUID(UUIDUtils.getUUID()); equipmentSpeIndex.setUUID(UUIDUtils.getUUID());
equipmentSpeIndex.setUnit(Objects.nonNull(equipmentIndex.getUnit()) ? equipmentIndex.getUnit() : equipmentIndex.getUnitName());
IotDataVO iotDataVO = new IotDataVO(); IotDataVO iotDataVO = new IotDataVO();
iotDataVO.setKey(equipmentSpeIndex.getNameKey()); iotDataVO.setKey(equipmentSpeIndex.getNameKey());
...@@ -525,8 +527,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -525,8 +527,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
indexStateList.add(createIndexStateVo(equipmentSpeIndex)); indexStateList.add(createIndexStateVo(equipmentSpeIndex));
// 添加指标报告
saveEquipmentAlarmReportDay(equipmentSpeIndex);
// 火眼数据构造告警指标逻辑 // 火眼数据构造告警指标逻辑
equipmentSpeIndex = handleTemperatureAlarm(equipmentSpeIndex, iotDatalist); equipmentSpeIndex = handleTemperatureAlarm(equipmentSpeIndex, iotDatalist);
...@@ -553,6 +554,9 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -553,6 +554,9 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
handlingAlarms(equipmentSpeIndex, alarmFlag); handlingAlarms(equipmentSpeIndex, alarmFlag);
} }
// 添加指标报告
saveEquipmentAlarmReportDay(equipmentSpeIndex, alarmFlag);
// 指标告警处理 // 指标告警处理
if (equipmentSpeIndex.getIsAlarm() != null && 1 == equipmentSpeIndex.getIsAlarm()) { if (equipmentSpeIndex.getIsAlarm() != null && 1 == equipmentSpeIndex.getIsAlarm()) {
equipmentSpecificAlarms.addAll(createIndexAlarmRecord(equipmentSpeIndex, messageBodyMap)); equipmentSpecificAlarms.addAll(createIndexAlarmRecord(equipmentSpeIndex, messageBodyMap));
...@@ -626,7 +630,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -626,7 +630,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
bool = Boolean.FALSE; bool = Boolean.FALSE;
} else { } else {
alarmLogs.addAll(upAlarmLogStatus(action.getIotCode(), action.getEquipmentSpecificIndexKey(), action.getTraceId(), alarmLogs.addAll(upAlarmLogStatus(action.getIotCode(), action.getEquipmentSpecificIndexKey(), action.getTraceId(),
equipmentSpecificAlarmLogService, false, "")); equipmentSpecificAlarmLogService, false, false, ""));
mqttSendGateway.sendToMqtt(TopicEnum.EQYQR.getTopic(), JSONArray.toJSON(action).toString()); mqttSendGateway.sendToMqtt(TopicEnum.EQYQR.getTopic(), JSONArray.toJSON(action).toString());
bool = Boolean.TRUE; bool = Boolean.TRUE;
} }
...@@ -792,8 +796,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -792,8 +796,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
indexStateList.add(createIndexStateVo(equipmentSpeIndex)); indexStateList.add(createIndexStateVo(equipmentSpeIndex));
// 添加指标报告
saveEquipmentAlarmReportDay(equipmentSpeIndex);
// 火眼数据构造告警指标逻辑 // 火眼数据构造告警指标逻辑
equipmentSpeIndex = handleTemperatureAlarm(equipmentSpeIndex, iotDatalist); equipmentSpeIndex = handleTemperatureAlarm(equipmentSpeIndex, iotDatalist);
...@@ -820,6 +823,9 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -820,6 +823,9 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
handlingAlarms(equipmentSpeIndex, alarmFlag); handlingAlarms(equipmentSpeIndex, alarmFlag);
} }
// 添加指标报告
saveEquipmentAlarmReportDay(equipmentSpeIndex, alarmFlag);
// 指标告警处理 // 指标告警处理
if (equipmentSpeIndex.getIsAlarm() != null && 1 == equipmentSpeIndex.getIsAlarm()) { if (equipmentSpeIndex.getIsAlarm() != null && 1 == equipmentSpeIndex.getIsAlarm()) {
equipmentSpecificAlarms.addAll(createIndexAlarmRecord(equipmentSpeIndex, messageBodyMap)); equipmentSpecificAlarms.addAll(createIndexAlarmRecord(equipmentSpeIndex, messageBodyMap));
...@@ -892,7 +898,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -892,7 +898,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
bool = Boolean.FALSE; bool = Boolean.FALSE;
} else { } else {
alarmLogs.addAll(upAlarmLogStatus(action.getIotCode(), action.getEquipmentSpecificIndexKey(), action.getTraceId(), alarmLogs.addAll(upAlarmLogStatus(action.getIotCode(), action.getEquipmentSpecificIndexKey(), action.getTraceId(),
equipmentSpecificAlarmLogService, false, "")); equipmentSpecificAlarmLogService, false, false, ""));
mqttSendGateway.sendToMqtt(TopicEnum.EQYQR.getTopic(), JSONArray.toJSON(action).toString()); mqttSendGateway.sendToMqtt(TopicEnum.EQYQR.getTopic(), JSONArray.toJSON(action).toString());
bool = Boolean.TRUE; bool = Boolean.TRUE;
} }
...@@ -1033,6 +1039,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -1033,6 +1039,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
String value = iotDataVO.getValue().toString(); String value = iotDataVO.getValue().toString();
String traceId = iotDataVO.getTraceId(); String traceId = iotDataVO.getTraceId();
equipmentSpeIndex.setValue(value); equipmentSpeIndex.setValue(value);
equipmentSpeIndex.setUnit(equipmentSpecificIndex.getIndexUnitName());
equipmentSpeIndex.setTraceId(traceId); equipmentSpeIndex.setTraceId(traceId);
equipmentSpeIndex.setValueLabel(valueTranslate(value, equipmentSpecificIndex.getValueEnum())); equipmentSpeIndex.setValueLabel(valueTranslate(value, equipmentSpecificIndex.getValueEnum()));
equipmentSpeIndex.setUpdateDate(new Date()); equipmentSpeIndex.setUpdateDate(new Date());
...@@ -1075,8 +1082,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -1075,8 +1082,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
// 推送数据到组态大屏 // 推送数据到组态大屏
pushDataToIntegrationPage(equipmentSpecificIndexList); pushDataToIntegrationPage(equipmentSpecificIndexList);
// 添加指标报告
saveEquipmentAlarmReportDay(equipmentSpeIndex);
// 火眼数据构造告警指标逻辑 // 火眼数据构造告警指标逻辑
equipmentSpecificIndex = handleTemperatureAlarm(equipmentSpeIndex, iotDatalist); equipmentSpecificIndex = handleTemperatureAlarm(equipmentSpeIndex, iotDatalist);
...@@ -1102,6 +1108,9 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -1102,6 +1108,9 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
handlingAlarms(equipmentSpecificIndex, alarmFlag); handlingAlarms(equipmentSpecificIndex, alarmFlag);
} }
// 添加指标报告
saveEquipmentAlarmReportDay(equipmentSpeIndex, alarmFlag);
// 指标告警处理 // 指标告警处理
if (equipmentSpecificIndex.getIsAlarm() != null && 1 == equipmentSpecificIndex.getIsAlarm() && !equipmentSpecificIndex.getEquipmentIndexKey().equals(pressurePumpStart)) { if (equipmentSpecificIndex.getIsAlarm() != null && 1 == equipmentSpecificIndex.getIsAlarm() && !equipmentSpecificIndex.getEquipmentIndexKey().equals(pressurePumpStart)) {
equipmentSpecificAlarms.addAll(createIndexAlarmRecord(equipmentSpecificIndex, messageBodyMap)); equipmentSpecificAlarms.addAll(createIndexAlarmRecord(equipmentSpecificIndex, messageBodyMap));
...@@ -1208,7 +1217,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -1208,7 +1217,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
bool = Boolean.FALSE; bool = Boolean.FALSE;
} else { } else {
alarmLogs.addAll(upAlarmLogStatus(action.getIotCode(), action.getEquipmentSpecificIndexKey(), action.getTraceId(), alarmLogs.addAll(upAlarmLogStatus(action.getIotCode(), action.getEquipmentSpecificIndexKey(), action.getTraceId(),
equipmentSpecificAlarmLogService, false, "")); equipmentSpecificAlarmLogService, false, false, ""));
mqttSendGateway.sendToMqtt(TopicEnum.EQYQR.getTopic(), JSONArray.toJSON(action).toString()); mqttSendGateway.sendToMqtt(TopicEnum.EQYQR.getTopic(), JSONArray.toJSON(action).toString());
bool = Boolean.TRUE; bool = Boolean.TRUE;
} }
...@@ -1601,7 +1610,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -1601,7 +1610,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
} }
} }
private EquipmentAlarmReportDay addEquipAlarmReportRecord(EquipmentSpecificIndex equipmentSpecificIndex) { private EquipmentAlarmReportDay addEquipAlarmReportRecord(EquipmentSpecificIndex equipmentSpecificIndex, boolean flag) {
EquipmentAlarmReportDay equipmentAlarmReportDay = new EquipmentAlarmReportDay(); EquipmentAlarmReportDay equipmentAlarmReportDay = new EquipmentAlarmReportDay();
equipmentAlarmReportDay.setOrgCode(equipmentSpecificIndex.getOrgCode()); equipmentAlarmReportDay.setOrgCode(equipmentSpecificIndex.getOrgCode());
equipmentAlarmReportDay.setReportDate(new Date()); equipmentAlarmReportDay.setReportDate(new Date());
...@@ -1613,8 +1622,14 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -1613,8 +1622,14 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
equipmentAlarmReportDay.setEquipmentDetailId(equipmentSpecificIndex.getEquipmentDetailId()); equipmentAlarmReportDay.setEquipmentDetailId(equipmentSpecificIndex.getEquipmentDetailId());
equipmentAlarmReportDay.setEquipmentId(equipmentSpecificIndex.getEquipmentId()); equipmentAlarmReportDay.setEquipmentId(equipmentSpecificIndex.getEquipmentId());
equipmentAlarmReportDay.setEquipmentCode(equipmentSpecificIndex.getEquipmentCode()); equipmentAlarmReportDay.setEquipmentCode(equipmentSpecificIndex.getEquipmentCode());
equipmentAlarmReportDay if(flag) {
.setIndexTrueNum(TrueOrFalseEnum.real.value.equals(equipmentSpecificIndex.getValue()) ? 1L : 0L); equipmentAlarmReportDay
.setIndexTrueNum(1L);
} else {
equipmentAlarmReportDay
.setIndexTrueNum(TrueOrFalseEnum.real.value.equals(equipmentSpecificIndex.getValue()) ? 1L : 0L);
}
equipmentAlarmReportDay.setAlarmType(equipmentSpecificIndex.getTypeCode()); equipmentAlarmReportDay.setAlarmType(equipmentSpecificIndex.getTypeCode());
equipmentAlarmReportDay.setAlarmTypeName(equipmentSpecificIndex.getTypeName()); equipmentAlarmReportDay.setAlarmTypeName(equipmentSpecificIndex.getTypeName());
equipmentAlarmReportDay.setIndexId(equipmentSpecificIndex.getEquipmentIndexId()); equipmentAlarmReportDay.setIndexId(equipmentSpecificIndex.getEquipmentIndexId());
...@@ -2012,6 +2027,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -2012,6 +2027,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
action.setEquipmentSpecificName(equipmentSpcIndex.getEquipmentSpecificName()); action.setEquipmentSpecificName(equipmentSpcIndex.getEquipmentSpecificName());
action.setEquipmentCode(equipmentSpcIndex.getEquipmentCode()); action.setEquipmentCode(equipmentSpcIndex.getEquipmentCode());
// 冗余字段,alarm_log表更新时使用 // 冗余字段,alarm_log表更新时使用
action.setLocation(equipmentSpcIndex.getLocation());
action.setEquipmentSpecificCode(equipmentSpcIndex.getEquipmentSpecificCode()); action.setEquipmentSpecificCode(equipmentSpcIndex.getEquipmentSpecificCode());
action.setBuildId(equipmentSpcIndex.getBuildId()); action.setBuildId(equipmentSpcIndex.getBuildId());
action.setBizOrgName(equipmentSpcIndex.getBizOrgName()); action.setBizOrgName(equipmentSpcIndex.getBizOrgName());
...@@ -2235,9 +2251,9 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -2235,9 +2251,9 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
* *
* @param equipmentSpecificIndex * @param equipmentSpecificIndex
*/ */
private void saveEquipmentAlarmReportDay(EquipmentSpecificIndex equipmentSpecificIndex) { private void saveEquipmentAlarmReportDay(EquipmentSpecificIndex equipmentSpecificIndex, boolean flag) {
SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.DATE_PATTERN); SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.DATE_PATTERN);
EquipmentAlarmReportDay equipmentAlarmReportDay = addEquipAlarmReportRecord(equipmentSpecificIndex); EquipmentAlarmReportDay equipmentAlarmReportDay = addEquipAlarmReportRecord(equipmentSpecificIndex, flag);
LambdaQueryWrapper<EquipmentAlarmReportDay> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<EquipmentAlarmReportDay> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(EquipmentAlarmReportDay::getReportDate, sdf.format(equipmentAlarmReportDay.getReportDate())) wrapper.eq(EquipmentAlarmReportDay::getReportDate, sdf.format(equipmentAlarmReportDay.getReportDate()))
.eq(EquipmentAlarmReportDay::getIndexId, equipmentAlarmReportDay.getIndexId()) .eq(EquipmentAlarmReportDay::getIndexId, equipmentAlarmReportDay.getIndexId())
......
package com.yeejoin.equipmanage.service.impl; package com.yeejoin.equipmanage.service.impl;
import com.yeejoin.equipmanage.utils.ClassToJsonUtil;
import org.springframework.core.io.Resource;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel; import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
...@@ -16,6 +18,7 @@ import com.yeejoin.equipmanage.mapper.StockDetailMapper; ...@@ -16,6 +18,7 @@ import com.yeejoin.equipmanage.mapper.StockDetailMapper;
import com.yeejoin.equipmanage.remote.RemoteSecurityService; import com.yeejoin.equipmanage.remote.RemoteSecurityService;
import com.yeejoin.equipmanage.service.*; import com.yeejoin.equipmanage.service.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
...@@ -221,6 +224,16 @@ public class StatisticsServiceImpl implements IStatisticsService { ...@@ -221,6 +224,16 @@ public class StatisticsServiceImpl implements IStatisticsService {
return equipmentSpecificMapper.selectEquipCategoryNumber(fightingSystemEntity.getId()); return equipmentSpecificMapper.selectEquipCategoryNumber(fightingSystemEntity.getId());
} }
@Value("classpath:/json/commonMessage.json")
private Resource commonMessage;
@Override
public String getStr() {
String s = "{\"code\":2000,\"id\":1,\"body\":{\"warns\":[{\"systemid\":\"2\",\"pointId\":\"73811\",\"level\":\"3\",\"time\":\"2024-04-08 09:17:56.226\",\"type\":\"遥信变位\",\"deviceId\":\"\",\"content\":\"火灾报警主机_主控楼二层1#蓄电池室可燃气体火警屏蔽状态 消失\"}]}}";
String s1 = "{\"data_class\":\"realdata\",\"data_type\":\"alarm\",\"op_type\":\"subscribe_emergency\",\"condition\":{\"station_psr_id\":\"50edcb6c1b8a811030493c80a2014950ed9d4f59e8\",\"station_name\":\"中州换流站\",\"alarm_type\":\"yx_bw\"},\"data\":[{\"psrId\":\"D017020000000000000000999\",\"astId\":\"D017020000000000000000999\",\"equipType\":\"ASTType_0000111\",\"eventType\":\"OtherSignal\",\"alarmSource\":\"OWS\",\"alarmLevel\":\"3\",\"description\":\"2024-03-11 09:06:17::585 S2WCL12A E3.C01软水器再生结束信号 出现\",\"dateTime\":\"2024-03-11 09:06:17.585\"}]}";
String s2 = "{\"code\":2000,\"id\":1,\"body\":{\"time_stamp\":\"2024-04-07 16:42:52.616\",\"datatype\":\"analog\",\"name\":\"直流接地极电流IDEE\",\"value\":12.969970703125,\"key\":\"0000YC00010100409C\",\"quality\":0,”code”:1001}}";
return ClassToJsonUtil.class2json(s1, commonMessage, "k1");
}
private Double getExtinguishingCountByWarehouseId(String categoryCode, Long warehouseId) { private Double getExtinguishingCountByWarehouseId(String categoryCode, Long warehouseId) {
......
...@@ -620,8 +620,10 @@ public class VideoServiceImpl extends ServiceImpl<VideoMapper, Video> implements ...@@ -620,8 +620,10 @@ public class VideoServiceImpl extends ServiceImpl<VideoMapper, Video> implements
String url = ""; String url = "";
if ("hls".equals(vedioFormat)) { if ("hls".equals(vedioFormat)) {
url = getVideoUrl(code); url = getVideoUrl(code);
} else { } else if("rtps".equals(vedioFormat)) {
url = getFlvUrlByVideoId(code); return "";
} else {
url = getFlvUrlByVideoId(code);
} }
return ObjectUtils.isEmpty(url) ? defaultUrl : url; return ObjectUtils.isEmpty(url) ? defaultUrl : url;
} }
......
package com.yeejoin.equipmanage.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonObject;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.io.Resource;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author keyong
* @title: ClassToJsonUtil
* <pre>
* @description: TODO
* </pre>
* @date 2024/4/11 11:28
*/
public class ClassToJsonUtil {
private static Map<String, Object> map = new HashMap<>();
public static String class2json(Object obj, Resource commonMessage, String topic) {
String json;
try {
json = IOUtils.toString(commonMessage.getInputStream(), String.valueOf(StandardCharsets.UTF_8));
} catch (IOException e) {
throw new RuntimeException("获取kafka信息模板失败!");
}
List<Map> listModel = JSONObject.parseArray(json, Map.class);
if (0 < listModel.size()) {
List<Map> mapList = listModel.stream().filter(x -> String.valueOf(x.get("kafkaTopic")).equalsIgnoreCase(topic)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(mapList)) {
Map<String, Object> map1 = mapList.get(0);
JSONObject object = JSON.parseObject(String.valueOf(obj));
analysisJson(object, "");
JSONObject res = analyseJson(JSON.toJSONString(map1), map);
res.put("kafkaTopic", map1.get("kafkaTopic"));
res.put("mqTopic", map1.get("mqTopic"));
return JSON.toJSONString(res);
}
}
return null;
}
private static JSONObject analysisJson(Object objJson, String flag) {
if (objJson instanceof JSONArray) {//如果obj为json数组
JSONArray objArray = (JSONArray) objJson;
for (int i = 0; i < objArray.size(); i++) {
analysisJson(objArray.get(i), flag);
}
} else if (objJson instanceof JSONObject) {//如果为json对象
JSONObject jsonObject = (JSONObject) objJson;
Iterator it = jsonObject.keySet().iterator();
while (it.hasNext()) {
String key = it.next().toString();
Object object = jsonObject.get(key);
//如果得到的是数组
if (object instanceof JSONArray) {
JSONArray objArray = (JSONArray) object;
String path = "";
if (StringUtils.isNotBlank(flag)) {
path = flag + "." + key;
} else {
path = key;
}
analysisJson(objArray, path);
} else if (object instanceof JSONObject) {//如果key中是一个json对象
String path = "";
if (StringUtils.isNotBlank(flag)) {
path = flag + "." + key;
} else {
path = key;
}
analysisJson((JSONObject) object, path);
} else {//如果key中是其他
String path = "";
if (StringUtils.isNotBlank(flag)) {
path = flag + "." + key;
} else {
path = key;
}
// System.out.println(path+":"+object.toString()+" ");
map.put(path, String.valueOf(object));
}
}
} else {//如果key中是其他
// System.out.println(flag+":"+objJson.toString()+" ");
map.put(flag, String.valueOf(objJson));
}
return JSONObject.parseObject(JSON.toJSONString(map));
}
public static JSONObject analyseJson(String jsonData, Map<String, Object> keyMap) {
SortedMap<String, Object> map = new TreeMap<>();
JSONObject jsonObject = JSON.parseObject(jsonData);
for (String key : jsonObject.keySet()) {
String resKey = keyMap.get(key) == null ? key : String.valueOf(keyMap.get(key));
Object value = jsonObject.get(key);
if (value instanceof JSONArray) {
JSONArray jsonArray = new JSONArray(new LinkedList<>());
JSONArray array = jsonObject.getJSONArray(key);
for (int i = 0; i < array.size(); i++) {
Object object = array.get(i);
if (object instanceof String) {
map.put(resKey, array);
} else {
JSONObject sortJson = analyseJson(String.valueOf(object), keyMap);
jsonArray.add(sortJson);
map.put(resKey, jsonArray);
}
}
} else if (value instanceof JSONObject) {
JSONObject sortJson = analyseJson(String.valueOf(value), keyMap);
map.put(resKey, sortJson);
} else {
map.put(resKey, ObjectUtils.isNotEmpty(keyMap.get(value)) ? keyMap.get(value) : "");
}
}
return new JSONObject(map);
}
}
...@@ -38,6 +38,20 @@ public class FireResourceSupervisionController extends BaseController { ...@@ -38,6 +38,20 @@ public class FireResourceSupervisionController extends BaseController {
return ResponseHelper.buildResponse(personnelStats); return ResponseHelper.buildResponse(personnelStats);
} }
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "驻站消防员、运维人员统计信息查询", notes = "驻站消防员、运维人员统计信息查询")
@RequestMapping(value = "/person/stats", method = RequestMethod.GET)
public ResponseModel<Object> personStats(
@RequestParam(value = "bizOrgCode", required = false) String bizOrgCode,
@RequestParam(value = "peopleType", required = false) Integer peopleType
) {
if (StringUtils.isBlank(bizOrgCode)) {
ReginParams reginParams = getSelectedOrgInfo();
bizOrgCode = !ValidationUtil.isEmpty(reginParams.getPersonIdentity()) && StringUtils.isNotEmpty(reginParams.getPersonIdentity().getBizOrgCode()) ? reginParams.getPersonIdentity().getBizOrgCode() : null;
}
return ResponseHelper.buildResponse(iFireResourceSupervisionService.selectQualificationStats(bizOrgCode, peopleType));
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false) @TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "GET", value = "设备平台驻站消防员、运维人员统计信息查询", notes = "驻站消防员、运维人员统计信息查询") @ApiOperation(httpMethod = "GET", value = "设备平台驻站消防员、运维人员统计信息查询", notes = "驻站消防员、运维人员统计信息查询")
@RequestMapping(value = "/person/info", method = RequestMethod.GET) @RequestMapping(value = "/person/info", method = RequestMethod.GET)
......
...@@ -15,6 +15,7 @@ import java.util.HashMap; ...@@ -15,6 +15,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
...@@ -65,6 +66,11 @@ public class FireResourceSupervisionServiceImpl implements IFireResourceSupervis ...@@ -65,6 +66,11 @@ public class FireResourceSupervisionServiceImpl implements IFireResourceSupervis
} }
@Override @Override
public List<Map<String, Object>> selectQualificationStats(String bizOrgCode, Integer peopleType) {
return fireResourceSupervisionMapper.selectQualificationStats(bizOrgCode, peopleType);
}
@Override
public Map<String, Map<String, String>> getPersonInfo(String bizOrgCode) { public Map<String, Map<String, String>> getPersonInfo(String bizOrgCode) {
List<Map<String, Object>> maps = fireResourceSupervisionMapper.selectPersonnelStats(bizOrgCode); List<Map<String, Object>> maps = fireResourceSupervisionMapper.selectPersonnelStats(bizOrgCode);
// Long attendanceCount = fireResourceSupervisionMapper.selectTodayAttendance(bizOrgCode); // Long attendanceCount = fireResourceSupervisionMapper.selectTodayAttendance(bizOrgCode);
......
...@@ -319,6 +319,9 @@ public interface PlanTaskMapper extends BaseMapper { ...@@ -319,6 +319,9 @@ public interface PlanTaskMapper extends BaseMapper {
Map<String, Object> getDefectEquipInfo(@Param(value="id") String id); Map<String, Object> getDefectEquipInfo(@Param(value="id") String id);
List<Map<String, String>> getDefectEquipInfoByIds(@Param(value="ids") List<String> ids);
List<Map<String, Object>> getCheckMissedEquipInfo(@Param(value="taskDetailId") String taskDetailId); List<Map<String, Object>> getCheckMissedEquipInfo(@Param(value="taskDetailId") String taskDetailId);
List<Map<String, Object>> getCheckQualifiedEquipInfo(@Param(value="taskDetailId") String taskDetailId); List<Map<String, Object>> getCheckQualifiedEquipInfo(@Param(value="taskDetailId") String taskDetailId);
......
...@@ -30,4 +30,7 @@ public interface IdxFeign { ...@@ -30,4 +30,7 @@ public interface IdxFeign {
@PostMapping(value = "/defect/check/list") @PostMapping(value = "/defect/check/list")
FeignClientResult queryDefectByCodes(@RequestBody List<String> codes, @RequestParam (value="checkId") String checkId); FeignClientResult queryDefectByCodes(@RequestBody List<String> codes, @RequestParam (value="checkId") String checkId);
@PostMapping(value = "/defect/check/listNew")
FeignClientResult queryDefectByIdList(@RequestBody List<String> checkIdList);
} }
...@@ -120,6 +120,8 @@ public class CheckServiceImpl implements ICheckService { ...@@ -120,6 +120,8 @@ public class CheckServiceImpl implements ICheckService {
@Value("${auth-key-auth-enabled:}") @Value("${auth-key-auth-enabled:}")
private String authKey; private String authKey;
public static final Logger log = LoggerFactory.getLogger(CheckServiceImpl.class);
@Value("${auth-key-auth-enabled:}") @Value("${auth-key-auth-enabled:}")
private String authKeyEnabled; private String authKeyEnabled;
...@@ -195,26 +197,27 @@ public class CheckServiceImpl implements ICheckService { ...@@ -195,26 +197,27 @@ public class CheckServiceImpl implements ICheckService {
if (total == 0) { if (total == 0) {
return new PageImpl<>(content, param, total); return new PageImpl<>(content, param, total);
} }
// content = checkMapper.getPeopleCheckPage(param);
content = checkMapper.getPeopleCheckPageNew(param); content = checkMapper.getPeopleCheckPageNew(param);
List<String> collect = content.stream().map(CheckInfoVo::getId).collect(Collectors.toList());
FeignClientResult responseModel = new FeignClientResult();
List<Map<String, String>> result = new ArrayList();
try {
responseModel = idxFeign.queryDefectByIdList(collect);
result = (List) responseModel.getResult();
} catch (Exception e) {
e.printStackTrace();
}
Map<String, Map<String, String>> checkIdMap = new HashMap<>();
if (result != null && 0 < result.size()) {
checkIdMap = result.stream().collect(Collectors.toMap(t -> t.get("checkId"), t -> t, (k1, k2) -> k2));
}
for (CheckInfoVo infoVo : content) { for (CheckInfoVo infoVo : content) {
FeignClientResult responseModel = new FeignClientResult(); if (!ObjectUtils.isEmpty(checkIdMap) && checkIdMap.containsKey(infoVo.getId()) && !ObjectUtils.isEmpty(checkIdMap.get(infoVo.getId()))) {
List result = new ArrayList(); Map<String, String> map = checkIdMap.get(infoVo.getId());
try { DefectVo vo = JSON.parseObject(JSON.toJSONString(map), DefectVo.class);
responseModel = idxFeign.queryDefectByCodes(new ArrayList<>(), infoVo.getId()); infoVo.setError(vo.getDefectDescribe());
result = (List) responseModel.getResult(); infoVo.setProblemNum(vo.getDefectNum());
} catch (Exception e) { infoVo.setHandleStatus(String.valueOf(vo.getDefectStatus()));
e.printStackTrace();
}
List<DefectVo> res = new ArrayList();
if (result != null && 0 < result.size()) {
for(Object object : result) {
DefectVo vo = JSON.parseObject(JSON.toJSONString(object), DefectVo.class);
res.add(vo);
}
infoVo.setError(ObjectUtils.isEmpty(res.get(0)) ? "" : res.get(0).getDefectDescribe());
infoVo.setProblemNum(ObjectUtils.isEmpty(res.get(0)) ? "" : res.get(0).getDefectNum());
infoVo.setHandleStatus(ObjectUtils.isEmpty(res.get(0)) ? "" : String.valueOf(res.get(0).getDefectStatus()));
} }
} }
return new PageImpl<>(content, param, total); return new PageImpl<>(content, param, total);
......
...@@ -1975,13 +1975,17 @@ public class PlanTaskServiceImpl implements IPlanTaskService { ...@@ -1975,13 +1975,17 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
if (x.getDefectEquipmentIds().contains(",")){ if (x.getDefectEquipmentIds().contains(",")){
String[] ids = x.getDefectEquipmentIds().split(","); String[] ids = x.getDefectEquipmentIds().split(",");
List<String> equipIds = Arrays.asList(ids); List<String> equipIds = Arrays.asList(ids);
if (0 < equipIds.size()) { List<String> collect = equipIds.stream().distinct().collect(Collectors.toList());
List<Map<String, String>> defectEquipInfoByIds = planTaskMapper.getDefectEquipInfoByIds(collect);
Map<String, String> equipLocationMap = defectEquipInfoByIds.stream().collect(Collectors.toMap(t -> t.get("id"), t -> t.get("equipLocation")));
if (CollectionUtils.isNotEmpty(equipIds)) {
for (String s : equipIds) { for (String s : equipIds) {
sb.append(planTaskMapper.getDefectEquipInfo(x.getDefectEquipmentIds()) == null ? "": planTaskMapper.getDefectEquipInfo(x.getDefectEquipmentIds()) .get("equipLocation")).append(","); sb.append(!ObjectUtils.isEmpty(equipLocationMap) ? equipLocationMap.getOrDefault(s, "") : "").append(",");
} }
} }
}else { }else {
sb.append(planTaskMapper.getDefectEquipInfo(x.getDefectEquipmentIds()) == null ? "": planTaskMapper.getDefectEquipInfo(x.getDefectEquipmentIds()) .get("equipLocation")); Map<String, Object> defectEquipInfo = planTaskMapper.getDefectEquipInfo(x.getDefectEquipmentIds());
sb.append(ObjectUtils.isEmpty(defectEquipInfo) ? "": defectEquipInfo.getOrDefault("equipLocation", ""));
} }
} }
defectMap.put("defect_equip_position", sb == null ? "" :sb); defectMap.put("defect_equip_position", sb == null ? "" :sb);
......
...@@ -19,6 +19,7 @@ eureka.instance.prefer-ip-address = true ...@@ -19,6 +19,7 @@ eureka.instance.prefer-ip-address = true
#eureka服务ip配置,可填写固定ip地址 #eureka服务ip配置,可填写固定ip地址
eureka.instance.hostname=172.16.11.201 eureka.instance.hostname=172.16.11.201
#eureka服务配置的校验账号及密码,配置需和eureka服务后台配置文件中一致 #eureka服务配置的校验账号及密码,配置需和eureka服务后台配置文件中一致
#eureka????????????,????eureka???????????
spring.security.user.name=admin spring.security.user.name=admin
spring.security.user.password=ENC(8Avkl0Wjal6xBOWKXQ+X1QCbtDt3n1JZS7dHehmtYFTPYNd+6diNNogVGZCPVHjE) spring.security.user.password=ENC(8Avkl0Wjal6xBOWKXQ+X1QCbtDt3n1JZS7dHehmtYFTPYNd+6diNNogVGZCPVHjE)
eureka.client.serviceUrl.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:10001/eureka/ eureka.client.serviceUrl.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:10001/eureka/
......
...@@ -46,8 +46,8 @@ iot.vehicle.track=AMOS-API-IOT ...@@ -46,8 +46,8 @@ iot.vehicle.track=AMOS-API-IOT
jcs.fegin.name=JCS jcs.fegin.name=JCS
video.fegin.name=VIDEO video.fegin.name=VIDEO
idx.feign.name=AMOS-IDX idx.feign.name=AMOS-IDX
mcb.feign.name=MCB-SERVER mcb.feign.name=MCB-SERVER
#\u9879\u76EE\u521D\u59CB\u5316\u753B\u5E03id #\u9879\u76EE\u521D\u59CB\u5316\u753B\u5E03id
morphic.projectSeq=1390314016458514433 morphic.projectSeq=1390314016458514433
#wl_equipment_category \u8868id \uFF08\u53D6\u706B\u707E\u62A5\u8B66\u7CFB\u7EDFid\uFF09 #wl_equipment_category \u8868id \uFF08\u53D6\u706B\u707E\u62A5\u8B66\u7CFB\u7EDFid\uFF09
...@@ -155,30 +155,34 @@ management.endpoint.health.show-details=always ...@@ -155,30 +155,34 @@ management.endpoint.health.show-details=always
logic=false logic=false
##电力报表定时任务 ##????????
jobs.month.cron = 0 50 0 1 * ? jobs.month.cron = 0 50 0 1 * ?
jobs.day.cron = 0 5 0 * * ? jobs.day.cron = 0 5 0 * * ?
jobs.week.cron = 0 25 0 ? * 1 jobs.week.cron = 0 25 0 ? * 1
jobs.day.cron.old = 0 25 0 * * ? jobs.day.cron.old = 0 25 0 * * ?
# ?????????
update.car.qrCode=0 01 00 * * ?
#预案消防炮设备类型编码 #???????????
equipment.plan.monitor=92030200,92032200 equipment.plan.monitor=92030200,92032200
#消防泵设备类型编码 #?????????
equipment.plan.pump=92010600,92030600,92130400,92140200,92150300 equipment.plan.pump=92010600,92030600,92130400,92140200,92150300
#电力设备报废业务,在设备报废前30日 每日9点执行 系统推送提醒。设备报废后停止消息推送提醒 #???????????????30? ??9??? ????????????????????
equipment.scrap.day=30 equipment.scrap.day=30
equipment.scrap.cron=0 0 9 * * ? equipment.scrap.cron=0 0 9 * * ?
#???????????kks?
power.station.url=http://139.9.169.123:5024/process/DataInterface
#稳压泵定时向缓存中存昨日启动次数任务 #??????????????????
equipment.pressurepump.start.cron=0 0 0 * * ? equipment.pressurepump.start.cron=0 0 0 * * ?
#稳压泵启停指标 #???????
equipment.pressurepump.start=FHS_PressurePump_Start equipment.pressurepump.start=FHS_PressurePump_Start
#稳压泵压力指标 #???????
equipment.pressurepump.pipepressure=FHS_PipePressureDetector_PipePressure equipment.pressurepump.pipepressure=FHS_PipePressureDetector_PipePressure
#液位指标编码 #??????
water.level.indexKey=FHS_FirePoolDevice_WaterLevel,FHS_LevelDetector_WaterLevel,FHS_WirelessliquidDetector_WaterLevel,CAFS_FoamTank_FoamTankLevel,CAFS_WaterTank_WaterTankLevel water.level.indexKey=FHS_FirePoolDevice_WaterLevel,FHS_LevelDetector_WaterLevel,FHS_WirelessliquidDetector_WaterLevel,CAFS_FoamTank_FoamTankLevel,CAFS_WaterTank_WaterTankLevel
...@@ -1101,4 +1101,30 @@ ...@@ -1101,4 +1101,30 @@
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
</sql> </sql>
</changeSet> </changeSet>
<changeSet author="zs" id="20240401-1">
<preConditions onFail="MARK_RAN">
<not>
<columnExists tableName="cb_water_resource_pool" columnName="pump_device_id"/>
</not>
</preConditions>
<comment>modify table cb_water_resource_pool add columns</comment>
<sql>
ALTER TABLE `cb_water_resource_pool`
ADD pump_device_id varchar(1000) DEFAULT NULL COMMENT '消防泵装置ids',
ADD pump_device_name varchar(1500) DEFAULT NULL COMMENT '消防泵装置名称s';
</sql>
</changeSet>
<changeSet author="xxz" id="20240510-1">
<preConditions onFail="MARK_RAN">
<not>
<columnExists tableName="wl_equipment_specific" columnName="type_code"/>
</not>
</preConditions>
<comment>wl_equipment_specific表新增属性字段type_code</comment>
<sql>
ALTER TABLE `wl_equipment_specific` ADD COLUMN `type_code` VARCHAR (50) NULL COMMENT '指标类型编码';
</sql>
</changeSet>
</databaseChangeLog> </databaseChangeLog>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?> <?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" <w:wordDocument
xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData"><o:DocumentProperties> xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"
xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData">
<o:DocumentProperties>
<o:Author>洪 峰</o:Author> <o:Author>洪 峰</o:Author>
<o:LastAuthor>DELL</o:LastAuthor> <o:LastAuthor>木可</o:LastAuthor>
<o:Revision>100</o:Revision> <o:Revision>100</o:Revision>
<o:LastPrinted>2022-07-07T09:38:00Z</o:LastPrinted> <o:LastPrinted>2022-07-07T09:38:00Z</o:LastPrinted>
<o:Created>2022-06-29T12:42:00Z</o:Created> <o:Created>2022-06-29T12:42:00Z</o:Created>
<o:LastSaved>2022-08-23T02:25:26Z</o:LastSaved> <o:LastSaved>2024-03-07T01:26:46Z</o:LastSaved>
<o:TotalTime>0</o:TotalTime> <o:TotalTime>14400</o:TotalTime>
<o:Pages>5</o:Pages> <o:Pages>5</o:Pages>
<o:Words>825</o:Words> <o:Words>825</o:Words>
<o:Characters>874</o:Characters> <o:Characters>874</o:Characters>
...@@ -24,8 +27,8 @@ ...@@ -24,8 +27,8 @@
<o:Version>14</o:Version> <o:Version>14</o:Version>
</o:DocumentProperties> </o:DocumentProperties>
<o:CustomDocumentProperties> <o:CustomDocumentProperties>
<o:KSOProductBuildVer dt:dt="string">2052-11.1.0.12302</o:KSOProductBuildVer> <o:KSOProductBuildVer dt:dt="string">2052-12.1.0.16250</o:KSOProductBuildVer>
<o:ICV dt:dt="string">33CE64D3E76D42C79E53F68B372B9F91</o:ICV> <o:ICV dt:dt="string">858FAB8E8A32478EB84685A252863E33_13</o:ICV>
</o:CustomDocumentProperties> </o:CustomDocumentProperties>
<w:fonts> <w:fonts>
<w:defaultFonts w:ascii="等线" w:fareast="等线" w:h-ansi="等线" w:cs="Times New Roman"/> <w:defaultFonts w:ascii="等线" w:fareast="等线" w:h-ansi="等线" w:cs="Times New Roman"/>
...@@ -34,97 +37,113 @@ ...@@ -34,97 +37,113 @@
<w:charset w:val="00"/> <w:charset w:val="00"/>
<w:family w:val="Auto"/> <w:family w:val="Auto"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" <w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/>
w:csb-1="FFFF0000"/>
</w:font> </w:font>
<w:font w:name="宋体"> <w:font w:name="宋体">
<w:panose-1 w:val="02010600030101010101"/> <w:panose-1 w:val="02010600030101010101"/>
<w:charset w:val="86"/> <w:charset w:val="86"/>
<w:family w:val="Auto"/> <w:family w:val="Auto"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="00000003" w:usb-1="288F0000" w:usb-2="00000006" w:usb-3="00000000" w:csb-0="00040001" <w:sig w:usb-0="00000003" w:usb-1="288F0000" w:usb-2="00000006" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/>
w:csb-1="00000000"/>
</w:font> </w:font>
<w:font w:name="Wingdings"> <w:font w:name="Wingdings">
<w:panose-1 w:val="05000000000000000000"/> <w:panose-1 w:val="05000000000000000000"/>
<w:charset w:val="02"/> <w:charset w:val="02"/>
<w:family w:val="Auto"/> <w:family w:val="Auto"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/>
w:csb-1="00000000"/>
</w:font> </w:font>
<w:font w:name="Arial"> <w:font w:name="Arial">
<w:panose-1 w:val="020B0604020202020204"/> <w:panose-1 w:val="020B0604020202020204"/>
<w:charset w:val="01"/> <w:charset w:val="01"/>
<w:family w:val="SWiss"/> <w:family w:val="SWiss"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" <w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/>
w:csb-1="FFFF0000"/>
</w:font> </w:font>
<w:font w:name="黑体"> <w:font w:name="黑体">
<w:panose-1 w:val="02010609060101010101"/> <w:panose-1 w:val="02010609060101010101"/>
<w:charset w:val="86"/> <w:charset w:val="86"/>
<w:family w:val="Auto"/> <w:family w:val="Auto"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" <w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/>
w:csb-1="00000000"/>
</w:font> </w:font>
<w:font w:name="Courier New"> <w:font w:name="Courier New">
<w:panose-1 w:val="02070309020205020404"/> <w:panose-1 w:val="02070309020205020404"/>
<w:charset w:val="01"/> <w:charset w:val="01"/>
<w:family w:val="Modern"/> <w:family w:val="Modern"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="E0002EFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" <w:sig w:usb-0="E0002EFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/>
w:csb-1="FFFF0000"/>
</w:font> </w:font>
<w:font w:name="Symbol"> <w:font w:name="Symbol">
<w:panose-1 w:val="05050102010706020507"/> <w:panose-1 w:val="05050102010706020507"/>
<w:charset w:val="02"/> <w:charset w:val="02"/>
<w:family w:val="Roman"/> <w:family w:val="Roman"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/>
w:csb-1="00000000"/>
</w:font> </w:font>
<w:font w:name="Calibri"> <w:font w:name="Calibri">
<w:panose-1 w:val="020F0502020204030204"/> <w:panose-1 w:val="020F0502020204030204"/>
<w:charset w:val="00"/> <w:charset w:val="00"/>
<w:family w:val="SWiss"/> <w:family w:val="SWiss"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="E4002EFF" w:usb-1="C000247B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="200001FF" <w:sig w:usb-0="E4002EFF" w:usb-1="C000247B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="200001FF" w:csb-1="00000000"/>
w:csb-1="00000000"/> </w:font>
<w:font w:name="Wingdings">
<w:panose-1 w:val="05000000000000000000"/>
<w:charset w:val="00"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/>
</w:font>
<w:font w:name="Arial">
<w:panose-1 w:val="020B0604020202020204"/>
<w:charset w:val="00"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/>
</w:font>
<w:font w:name="Courier New">
<w:panose-1 w:val="02070309020205020404"/>
<w:charset w:val="00"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="E0002EFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/>
</w:font>
<w:font w:name="Symbol">
<w:panose-1 w:val="05050102010706020507"/>
<w:charset w:val="00"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/>
</w:font> </w:font>
<w:font w:name="等线"> <w:font w:name="等线">
<w:panose-1 w:val="02010600030101010101"/> <w:panose-1 w:val="02010600030101010101"/>
<w:charset w:val="86"/> <w:charset w:val="86"/>
<w:family w:val="Auto"/> <w:family w:val="Auto"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="A00002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="0004000F" <w:sig w:usb-0="A00002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="0004000F" w:csb-1="00000000"/>
w:csb-1="00000000"/>
</w:font> </w:font>
<w:font w:name="STKaitiSC-Regular"> <w:font w:name="STKaitiSC-Regular">
<w:altName w:val="Cambria"/> <w:altName w:val="Cambria"/>
<w:panose-1 w:val="00000000000000000000"/> <w:panose-1 w:val="00000000000000000000"/>
<w:charset w:val="00"/> <w:charset w:val="00"/>
<w:family w:val="Roman"/> <w:family w:val="Auto"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000" <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000" w:csb-1="00000000"/>
w:csb-1="00000000"/>
</w:font> </w:font>
<w:font w:name="Cambria"> <w:font w:name="Cambria">
<w:panose-1 w:val="02040503050406030204"/> <w:panose-1 w:val="02040503050406030204"/>
<w:charset w:val="00"/> <w:charset w:val="00"/>
<w:family w:val="Auto"/> <w:family w:val="Auto"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="E00006FF" w:usb-1="420024FF" w:usb-2="02000000" w:usb-3="00000000" w:csb-0="2000019F" <w:sig w:usb-0="E00006FF" w:usb-1="420024FF" w:usb-2="02000000" w:usb-3="00000000" w:csb-0="2000019F" w:csb-1="00000000"/>
w:csb-1="00000000"/>
</w:font> </w:font>
<w:font w:name="仿宋"> <w:font w:name="仿宋">
<w:panose-1 w:val="02010609060101010101"/> <w:panose-1 w:val="02010609060101010101"/>
<w:charset w:val="86"/> <w:charset w:val="86"/>
<w:family w:val="Modern"/> <w:family w:val="Auto"/>
<w:pitch w:val="Default"/> <w:pitch w:val="Default"/>
<w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" <w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/>
w:csb-1="00000000"/>
</w:font> </w:font>
</w:fonts> </w:fonts>
<w:lists> <w:lists>
...@@ -153,7 +172,6 @@ ...@@ -153,7 +172,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:hint="default"/> <w:rFonts w:hint="default"/>
<w:b w:val="off"/> <w:b w:val="off"/>
<w:b-cs w:val="off"/>
</w:rPr> </w:rPr>
</w:lvl> </w:lvl>
<w:lvl w:ilvl="2"> <w:lvl w:ilvl="2">
...@@ -417,7 +435,6 @@ ...@@ -417,7 +435,6 @@
<w:lsdException w:name="Medium Shading 1 Accent 1"/> <w:lsdException w:name="Medium Shading 1 Accent 1"/>
<w:lsdException w:name="Medium Shading 2 Accent 1"/> <w:lsdException w:name="Medium Shading 2 Accent 1"/>
<w:lsdException w:name="Medium List 1 Accent 1"/> <w:lsdException w:name="Medium List 1 Accent 1"/>
<w:lsdException w:name="List Paragraph"/>
<w:lsdException w:name="Medium List 2 Accent 1"/> <w:lsdException w:name="Medium List 2 Accent 1"/>
<w:lsdException w:name="Medium Grid 1 Accent 1"/> <w:lsdException w:name="Medium Grid 1 Accent 1"/>
<w:lsdException w:name="Medium Grid 2 Accent 1"/> <w:lsdException w:name="Medium Grid 2 Accent 1"/>
...@@ -578,7 +595,6 @@ ...@@ -578,7 +595,6 @@
<w:basedOn w:val="a1"/> <w:basedOn w:val="a1"/>
<w:next w:val="a1"/> <w:next w:val="a1"/>
<w:link w:val="a20"/> <w:link w:val="a20"/>
<w:semiHidden/>
<w:pPr> <w:pPr>
<w:keepNext/> <w:keepNext/>
<w:keepLines/> <w:keepLines/>
...@@ -600,7 +616,6 @@ ...@@ -600,7 +616,6 @@
<w:basedOn w:val="a1"/> <w:basedOn w:val="a1"/>
<w:next w:val="a1"/> <w:next w:val="a1"/>
<w:link w:val="a21"/> <w:link w:val="a21"/>
<w:semiHidden/>
<w:pPr> <w:pPr>
<w:keepNext/> <w:keepNext/>
<w:keepLines/> <w:keepLines/>
...@@ -621,7 +636,6 @@ ...@@ -621,7 +636,6 @@
<w:basedOn w:val="a1"/> <w:basedOn w:val="a1"/>
<w:next w:val="a1"/> <w:next w:val="a1"/>
<w:link w:val="a22"/> <w:link w:val="a22"/>
<w:semiHidden/>
<w:pPr> <w:pPr>
<w:keepNext/> <w:keepNext/>
<w:keepLines/> <w:keepLines/>
...@@ -643,7 +657,6 @@ ...@@ -643,7 +657,6 @@
<w:basedOn w:val="a1"/> <w:basedOn w:val="a1"/>
<w:next w:val="a1"/> <w:next w:val="a1"/>
<w:link w:val="a23"/> <w:link w:val="a23"/>
<w:semiHidden/>
<w:pPr> <w:pPr>
<w:keepNext/> <w:keepNext/>
<w:keepLines/> <w:keepLines/>
...@@ -664,7 +677,6 @@ ...@@ -664,7 +677,6 @@
<w:basedOn w:val="a1"/> <w:basedOn w:val="a1"/>
<w:next w:val="a1"/> <w:next w:val="a1"/>
<w:link w:val="a24"/> <w:link w:val="a24"/>
<w:semiHidden/>
<w:pPr> <w:pPr>
<w:keepNext/> <w:keepNext/>
<w:keepLines/> <w:keepLines/>
...@@ -685,7 +697,6 @@ ...@@ -685,7 +697,6 @@
<w:basedOn w:val="a1"/> <w:basedOn w:val="a1"/>
<w:next w:val="a1"/> <w:next w:val="a1"/>
<w:link w:val="a25"/> <w:link w:val="a25"/>
<w:semiHidden/>
<w:pPr> <w:pPr>
<w:keepNext/> <w:keepNext/>
<w:keepLines/> <w:keepLines/>
...@@ -702,7 +713,6 @@ ...@@ -702,7 +713,6 @@
</w:style> </w:style>
<w:style w:type="character" w:styleId="a16" w:default="on"> <w:style w:type="character" w:styleId="a16" w:default="on">
<w:name w:val="Default Paragraph Font"/> <w:name w:val="Default Paragraph Font"/>
<w:semiHidden/>
</w:style> </w:style>
<w:style w:type="table" w:styleId="a14" w:default="on"> <w:style w:type="table" w:styleId="a14" w:default="on">
<w:name w:val="Normal Table"/> <w:name w:val="Normal Table"/>
...@@ -738,10 +748,6 @@ ...@@ -738,10 +748,6 @@
<w:basedOn w:val="a1"/> <w:basedOn w:val="a1"/>
<w:link w:val="a30"/> <w:link w:val="a30"/>
<w:pPr> <w:pPr>
<w:tabs>
<w:tab w:val="center" w:pos="4153"/>
<w:tab w:val="right" w:pos="8306"/>
</w:tabs>
<w:snapToGrid w:val="off"/> <w:snapToGrid w:val="off"/>
<w:jc w:val="left"/> <w:jc w:val="left"/>
</w:pPr> </w:pPr>
...@@ -758,10 +764,6 @@ ...@@ -758,10 +764,6 @@
<w:pBdr> <w:pBdr>
<w:bottom w:val="single" w:sz="6" wx:bdrwidth="15" w:space="1" w:color="auto"/> <w:bottom w:val="single" w:sz="6" wx:bdrwidth="15" w:space="1" w:color="auto"/>
</w:pBdr> </w:pBdr>
<w:tabs>
<w:tab w:val="center" w:pos="4153"/>
<w:tab w:val="right" w:pos="8306"/>
</w:tabs>
<w:snapToGrid w:val="off"/> <w:snapToGrid w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
</w:pPr> </w:pPr>
...@@ -779,8 +781,7 @@ ...@@ -779,8 +781,7 @@
<w:jc w:val="both"/> <w:jc w:val="both"/>
</w:pPr> </w:pPr>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:fareast="宋体" w:cs="Times New Roman" <w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
w:hint="default"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz-cs w:val="20"/> <w:sz-cs w:val="20"/>
</w:rPr> </w:rPr>
...@@ -793,6 +794,12 @@ ...@@ -793,6 +794,12 @@
<w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/> <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/> <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
</w:tblBorders> </w:tblBorders>
<w:tblCellMar>
<w:top w:w="0" w:type="dxa"/>
<w:left w:w="108" w:type="dxa"/>
<w:bottom w:w="0" w:type="dxa"/>
<w:right w:w="108" w:type="dxa"/>
</w:tblCellMar>
</w:tblPr> </w:tblPr>
</w:style> </w:style>
<w:style w:type="character" w:styleId="a17"> <w:style w:type="character" w:styleId="a17">
...@@ -831,7 +838,6 @@ ...@@ -831,7 +838,6 @@
<w:name w:val="标题 4 字符"/> <w:name w:val="标题 4 字符"/>
<w:basedOn w:val="a16"/> <w:basedOn w:val="a16"/>
<w:link w:val="5"/> <w:link w:val="5"/>
<w:semiHidden/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:fareast="黑体" w:hint="default"/> <w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:fareast="黑体" w:hint="default"/>
<w:b/> <w:b/>
...@@ -843,7 +849,6 @@ ...@@ -843,7 +849,6 @@
<w:name w:val="标题 5 字符"/> <w:name w:val="标题 5 字符"/>
<w:basedOn w:val="a16"/> <w:basedOn w:val="a16"/>
<w:link w:val="6"/> <w:link w:val="6"/>
<w:semiHidden/>
<w:rPr> <w:rPr>
<w:b/> <w:b/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
...@@ -854,7 +859,6 @@ ...@@ -854,7 +859,6 @@
<w:name w:val="标题 6 字符"/> <w:name w:val="标题 6 字符"/>
<w:basedOn w:val="a16"/> <w:basedOn w:val="a16"/>
<w:link w:val="7"/> <w:link w:val="7"/>
<w:semiHidden/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:fareast="黑体" w:hint="default"/> <w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:fareast="黑体" w:hint="default"/>
<w:b/> <w:b/>
...@@ -866,7 +870,6 @@ ...@@ -866,7 +870,6 @@
<w:name w:val="标题 7 字符"/> <w:name w:val="标题 7 字符"/>
<w:basedOn w:val="a16"/> <w:basedOn w:val="a16"/>
<w:link w:val="8"/> <w:link w:val="8"/>
<w:semiHidden/>
<w:rPr> <w:rPr>
<w:b/> <w:b/>
<w:sz w:val="24"/> <w:sz w:val="24"/>
...@@ -877,7 +880,6 @@ ...@@ -877,7 +880,6 @@
<w:name w:val="标题 8 字符"/> <w:name w:val="标题 8 字符"/>
<w:basedOn w:val="a16"/> <w:basedOn w:val="a16"/>
<w:link w:val="9"/> <w:link w:val="9"/>
<w:semiHidden/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:fareast="黑体" w:hint="default"/> <w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:fareast="黑体" w:hint="default"/>
<w:sz w:val="24"/> <w:sz w:val="24"/>
...@@ -888,7 +890,6 @@ ...@@ -888,7 +890,6 @@
<w:name w:val="标题 9 字符"/> <w:name w:val="标题 9 字符"/>
<w:basedOn w:val="a16"/> <w:basedOn w:val="a16"/>
<w:link w:val="10"/> <w:link w:val="10"/>
<w:semiHidden/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:fareast="黑体" w:hint="default"/> <w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:fareast="黑体" w:hint="default"/>
<w:sz-cs w:val="24"/> <w:sz-cs w:val="24"/>
...@@ -919,8 +920,7 @@ ...@@ -919,8 +920,7 @@
<w:jc w:val="center"/> <w:jc w:val="center"/>
</w:pPr> </w:pPr>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:fareast="宋体" w:cs="Times New Roman" <w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
w:hint="default"/>
<w:sz w:val="44"/> <w:sz w:val="44"/>
<w:sz-cs w:val="44"/> <w:sz-cs w:val="44"/>
</w:rPr> </w:rPr>
...@@ -952,7 +952,7 @@ ...@@ -952,7 +952,7 @@
</w:bgPict> </w:bgPict>
<w:docPr> <w:docPr>
<w:view w:val="print"/> <w:view w:val="print"/>
<w:zoom w:percent="110"/> <w:zoom w:percent="86"/>
<w:characterSpacingControl w:val="CompressPunctuation"/> <w:characterSpacingControl w:val="CompressPunctuation"/>
<w:documentProtection w:enforcement="off"/> <w:documentProtection w:enforcement="off"/>
<w:punctuationKerning/> <w:punctuationKerning/>
...@@ -1023,16 +1023,6 @@ ...@@ -1023,16 +1023,6 @@
</w:rPr> </w:rPr>
<w:t> ${station}</w:t> <w:t> ${station}</w:t>
</w:r> </w:r>
<#-- <w:r>-->
<#-- <w:rPr>-->
<#-- <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>-->
<#-- <w:b/>-->
<#-- <w:color w:val="000000"/>-->
<#-- <w:sz w:val="36"/>-->
<#-- <w:sz-cs w:val="36"/>-->
<#-- </w:rPr>-->
<#-- <w:t></w:t>-->
<#-- </w:r>-->
<w:r> <w:r>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
...@@ -1064,59 +1054,6 @@ ...@@ -1064,59 +1054,6 @@
</w:rPr> </w:rPr>
<w:t>${time}</w:t> <w:t>${time}</w:t>
</w:r> </w:r>
<#-- <w:r>-->
<#-- <w:rPr>-->
<#-- <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>-->
<#-- <w:b/>-->
<#-- <w:color w:val="000000"/>-->
<#-- <w:sz w:val="36"/>-->
<#-- <w:sz-cs w:val="36"/>-->
<#-- <w:u w:val="single"/>-->
<#-- </w:rPr>-->
<#-- <w:t>022</w:t>-->
<#-- </w:r>-->
<#-- <w:r>-->
<#-- <w:rPr>-->
<#-- <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>-->
<#-- <w:b/>-->
<#-- <w:color w:val="000000"/>-->
<#-- <w:sz w:val="36"/>-->
<#-- <w:sz-cs w:val="36"/>-->
<#-- </w:rPr>-->
<#-- <w:t></w:t>-->
<#-- </w:r>-->
<#-- <w:r>-->
<#-- <w:rPr>-->
<#-- <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>-->
<#-- <w:b/>-->
<#-- <w:color w:val="000000"/>-->
<#-- <w:sz w:val="36"/>-->
<#-- <w:sz-cs w:val="36"/>-->
<#-- <w:u w:val="single"/>-->
<#-- </w:rPr>-->
<#-- <w:t>5</w:t>-->
<#-- </w:r>-->
<#-- <w:r>-->
<#-- <w:rPr>-->
<#-- <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>-->
<#-- <w:b/>-->
<#-- <w:color w:val="000000"/>-->
<#-- <w:sz w:val="36"/>-->
<#-- <w:sz-cs w:val="36"/>-->
<#-- <w:u w:val="single"/>-->
<#-- </w:rPr>-->
<#-- <w:t>-6</w:t>-->
<#-- </w:r>-->
<#-- <w:r>-->
<#-- <w:rPr>-->
<#-- <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>-->
<#-- <w:b/>-->
<#-- <w:color w:val="000000"/>-->
<#-- <w:sz w:val="36"/>-->
<#-- <w:sz-cs w:val="36"/>-->
<#-- </w:rPr>-->
<#-- <w:t></w:t>-->
<#-- </w:r>-->
</w:p> </w:p>
<w:p> <w:p>
<w:pPr> <w:pPr>
...@@ -1134,12 +1071,13 @@ ...@@ -1134,12 +1071,13 @@
<w:ind w:left="432"/> <w:ind w:left="432"/>
</w:pPr> </w:pPr>
</w:p> </w:p>
<#if datalist?exists> <#if datalist?exists>
<#list datalist as data> <#list datalist as data>
<w:tbl> <w:tbl>
<w:tblPr> <w:tblPr>
<w:tblStyle w:val="a15"/> <w:tblStyle w:val="a15"/>
<w:tblW w:w="5180" w:type="pct"/> <w:tblW w:w="5178" w:type="pct"/>
<w:tblInd w:w="0" w:type="dxa"/> <w:tblInd w:w="0" w:type="dxa"/>
<w:tblBorders> <w:tblBorders>
<w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/> <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
...@@ -1158,17 +1096,22 @@ ...@@ -1158,17 +1096,22 @@
</w:tblCellMar> </w:tblCellMar>
</w:tblPr> </w:tblPr>
<w:tblGrid> <w:tblGrid>
<w:gridCol w:w="1471"/> <w:gridCol w:w="1470"/>
<w:gridCol w:w="1575"/> <w:gridCol w:w="1122"/>
<w:gridCol w:w="1530"/> <w:gridCol w:w="455"/>
<w:gridCol w:w="1515"/> <w:gridCol w:w="1529"/>
<w:gridCol w:w="1251"/> <w:gridCol w:w="1045"/>
<w:gridCol w:w="219"/> <w:gridCol w:w="469"/>
<w:gridCol w:w="1515"/> <w:gridCol w:w="1249"/>
<w:gridCol w:w="1410"/> <w:gridCol w:w="221"/>
<w:gridCol w:w="582"/>
<w:gridCol w:w="932"/>
<w:gridCol w:w="1248"/>
<w:gridCol w:w="163"/>
<w:gridCol w:w="1455"/> <w:gridCol w:w="1455"/>
<w:gridCol w:w="1365"/> <w:gridCol w:w="681"/>
<w:gridCol w:w="1379"/> <w:gridCol w:w="682"/>
<w:gridCol w:w="1378"/>
</w:tblGrid> </w:tblGrid>
<w:tr> <w:tr>
<w:tblPrEx> <w:tblPrEx>
...@@ -1193,7 +1136,7 @@ ...@@ -1193,7 +1136,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="5000" w:type="pct"/> <w:tcW w:w="5000" w:type="pct"/>
<w:gridSpan w:val="11"/> <w:gridSpan w:val="16"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -1203,11 +1146,11 @@ ...@@ -1203,11 +1146,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="32"/> <w:sz w:val="32"/>
<w:sz-cs w:val="32"/> <w:sz-cs w:val="32"/>
...@@ -1218,7 +1161,6 @@ ...@@ -1218,7 +1161,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="32"/> <w:sz w:val="32"/>
<w:sz-cs w:val="32"/> <w:sz-cs w:val="32"/>
...@@ -1261,11 +1203,11 @@ ...@@ -1261,11 +1203,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1276,7 +1218,6 @@ ...@@ -1276,7 +1218,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1288,7 +1229,8 @@ ...@@ -1288,7 +1229,8 @@
</w:tc> </w:tc>
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="536" w:type="pct"/> <w:tcW w:w="537" w:type="pct"/>
<w:gridSpan w:val="2"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -1298,11 +1240,11 @@ ...@@ -1298,11 +1240,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1313,7 +1255,6 @@ ...@@ -1313,7 +1255,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1335,11 +1276,11 @@ ...@@ -1335,11 +1276,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1350,7 +1291,6 @@ ...@@ -1350,7 +1291,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1363,6 +1303,7 @@ ...@@ -1363,6 +1303,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="515" w:type="pct"/> <w:tcW w:w="515" w:type="pct"/>
<w:gridSpan w:val="2"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -1372,11 +1313,11 @@ ...@@ -1372,11 +1313,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1387,7 +1328,6 @@ ...@@ -1387,7 +1328,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1410,11 +1350,11 @@ ...@@ -1410,11 +1350,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1425,7 +1365,6 @@ ...@@ -1425,7 +1365,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1438,6 +1377,7 @@ ...@@ -1438,6 +1377,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="515" w:type="pct"/> <w:tcW w:w="515" w:type="pct"/>
<w:gridSpan w:val="2"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -1447,11 +1387,11 @@ ...@@ -1447,11 +1387,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1462,7 +1402,6 @@ ...@@ -1462,7 +1402,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1475,6 +1414,7 @@ ...@@ -1475,6 +1414,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="480" w:type="pct"/> <w:tcW w:w="480" w:type="pct"/>
<w:gridSpan w:val="2"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -1484,11 +1424,11 @@ ...@@ -1484,11 +1424,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1499,7 +1439,6 @@ ...@@ -1499,7 +1439,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1521,11 +1460,11 @@ ...@@ -1521,11 +1460,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1536,7 +1475,6 @@ ...@@ -1536,7 +1475,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1549,6 +1487,7 @@ ...@@ -1549,6 +1487,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="464" w:type="pct"/> <w:tcW w:w="464" w:type="pct"/>
<w:gridSpan w:val="2"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -1558,11 +1497,11 @@ ...@@ -1558,11 +1497,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1573,7 +1512,6 @@ ...@@ -1573,7 +1512,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1595,11 +1533,11 @@ ...@@ -1595,11 +1533,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1610,7 +1548,6 @@ ...@@ -1610,7 +1548,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -1656,6 +1593,8 @@ ...@@ -1656,6 +1593,8 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="both"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
...@@ -1678,7 +1617,8 @@ ...@@ -1678,7 +1617,8 @@
</w:tc> </w:tc>
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="536" w:type="pct"/> <w:tcW w:w="537" w:type="pct"/>
<w:gridSpan w:val="2"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -1688,6 +1628,8 @@ ...@@ -1688,6 +1628,8 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="both"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
...@@ -1720,6 +1662,8 @@ ...@@ -1720,6 +1662,8 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="both"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
...@@ -1743,6 +1687,7 @@ ...@@ -1743,6 +1687,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="515" w:type="pct"/> <w:tcW w:w="515" w:type="pct"/>
<w:gridSpan w:val="2"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -1752,6 +1697,8 @@ ...@@ -1752,6 +1697,8 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="both"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
...@@ -1785,6 +1732,8 @@ ...@@ -1785,6 +1732,8 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="both"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
...@@ -1808,6 +1757,7 @@ ...@@ -1808,6 +1757,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="515" w:type="pct"/> <w:tcW w:w="515" w:type="pct"/>
<w:gridSpan w:val="2"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -1817,6 +1767,8 @@ ...@@ -1817,6 +1767,8 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="both"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
...@@ -1840,6 +1792,7 @@ ...@@ -1840,6 +1792,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="480" w:type="pct"/> <w:tcW w:w="480" w:type="pct"/>
<w:gridSpan w:val="2"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -1849,6 +1802,8 @@ ...@@ -1849,6 +1802,8 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="both"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
...@@ -1881,6 +1836,8 @@ ...@@ -1881,6 +1836,8 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="both"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
...@@ -1904,6 +1861,7 @@ ...@@ -1904,6 +1861,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="464" w:type="pct"/> <w:tcW w:w="464" w:type="pct"/>
<w:gridSpan w:val="2"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -1913,6 +1871,8 @@ ...@@ -1913,6 +1871,8 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="both"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
...@@ -1945,6 +1905,8 @@ ...@@ -1945,6 +1905,8 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="both"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
...@@ -1991,7 +1953,7 @@ ...@@ -1991,7 +1953,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="5000" w:type="pct"/> <w:tcW w:w="5000" w:type="pct"/>
<w:gridSpan w:val="11"/> <w:gridSpan w:val="16"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -2001,6 +1963,7 @@ ...@@ -2001,6 +1963,7 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
...@@ -2046,7 +2009,7 @@ ...@@ -2046,7 +2009,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="2499" w:type="pct"/> <w:tcW w:w="2499" w:type="pct"/>
<w:gridSpan w:val="5"/> <w:gridSpan w:val="7"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -2056,6 +2019,7 @@ ...@@ -2056,6 +2019,7 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>
...@@ -2066,15 +2030,18 @@ ...@@ -2066,15 +2030,18 @@
</w:rPr> </w:rPr>
</w:pPr> </w:pPr>
<w:r> <w:r>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
<w:kern w:val="0"/>
<w:sz-cs w:val="20"/>
</w:rPr>
<w:pict> <w:pict>
<w:binData w:name="wordml://1.png">${data.bing1}</w:binData> <w:binData w:name="wordml://1.png">${data.bing1}</w:binData>
<v:shape id="图片 1" o:spid="_x0000_s1026" o:spt="75" alt="" type="#_x0000_t75" <v:shape id="_x0000_s1026" o:spt="75" alt="" type="#_x0000_t75" style="height:286.55pt;width:332.05pt;" filled="f" o:preferrelative="t" stroked="f" coordsize="21600,21600">
style="height:286.55pt;width:332.05pt;" filled="f" o:preferrelative="t"
stroked="f" coordsize="21600,21600">
<v:path/> <v:path/>
<v:fill on="f" focussize="0,0"/> <v:fill on="f" focussize="0,0"/>
<v:stroke on="f"/> <v:stroke on="f"/>
<v:imagedata src="wordml://1.png" o:title=""/> <v:imagedata src="wordml://1.png" o:title="wordml://1.png"/>
<o:lock v:ext="edit" aspectratio="t"/> <o:lock v:ext="edit" aspectratio="t"/>
<w10:wrap type="none"/> <w10:wrap type="none"/>
<w10:anchorlock/> <w10:anchorlock/>
...@@ -2086,7 +2053,7 @@ ...@@ -2086,7 +2053,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="2500" w:type="pct"/> <w:tcW w:w="2500" w:type="pct"/>
<w:gridSpan w:val="6"/> <w:gridSpan w:val="9"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -2096,6 +2063,7 @@ ...@@ -2096,6 +2063,7 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>
...@@ -2106,15 +2074,18 @@ ...@@ -2106,15 +2074,18 @@
</w:rPr> </w:rPr>
</w:pPr> </w:pPr>
<w:r> <w:r>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
<w:kern w:val="0"/>
<w:sz-cs w:val="20"/>
</w:rPr>
<w:pict> <w:pict>
<w:binData w:name="wordml://2.png">${data.bing2}</w:binData> <w:binData w:name="wordml://2.png">${data.bing2}</w:binData>
<v:shape id="图片 3" o:spid="_x0000_s1027" o:spt="75" alt="" type="#_x0000_t75" <v:shape id="_x0000_s1027" o:spt="75" alt="" type="#_x0000_t75" style="height:284.7pt;width:333.4pt;" filled="f" o:preferrelative="t" stroked="f" coordsize="21600,21600">
style="height:284.7pt;width:333.4pt;" filled="f" o:preferrelative="t"
stroked="f" coordsize="21600,21600">
<v:path/> <v:path/>
<v:fill on="f" focussize="0,0"/> <v:fill on="f" focussize="0,0"/>
<v:stroke on="f"/> <v:stroke on="f"/>
<v:imagedata src="wordml://2.png" o:title=""/> <v:imagedata src="wordml://2.png" o:title="wordml://2.png"/>
<o:lock v:ext="edit" aspectratio="t"/> <o:lock v:ext="edit" aspectratio="t"/>
<w10:wrap type="none"/> <w10:wrap type="none"/>
<w10:anchorlock/> <w10:anchorlock/>
...@@ -2147,7 +2118,7 @@ ...@@ -2147,7 +2118,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="5000" w:type="pct"/> <w:tcW w:w="5000" w:type="pct"/>
<w:gridSpan w:val="11"/> <w:gridSpan w:val="16"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -2157,11 +2128,11 @@ ...@@ -2157,11 +2128,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2169,15 +2140,18 @@ ...@@ -2169,15 +2140,18 @@
</w:rPr> </w:rPr>
</w:pPr> </w:pPr>
<w:r> <w:r>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
<w:kern w:val="0"/>
<w:sz-cs w:val="20"/>
</w:rPr>
<w:pict> <w:pict>
<w:binData w:name="wordml://3.png">${data.bing3}</w:binData> <w:binData w:name="wordml://3.png">${data.bing3}</w:binData>
<v:shape id="图片 4" o:spid="_x0000_s1028" o:spt="75" alt="" type="#_x0000_t75" <v:shape id="_x0000_s1028" o:spt="75" alt="" type="#_x0000_t75" style="height:349.25pt;width:646.1pt;" filled="f" o:preferrelative="t" stroked="f" coordsize="21600,21600">
style="height:349.25pt;width:646.1pt;" filled="f" o:preferrelative="t"
stroked="f" coordsize="21600,21600">
<v:path/> <v:path/>
<v:fill on="f" focussize="0,0"/> <v:fill on="f" focussize="0,0"/>
<v:stroke on="f"/> <v:stroke on="f"/>
<v:imagedata src="wordml://3.png" o:title=""/> <v:imagedata src="wordml://3.png" o:title="wordml://3.png"/>
<o:lock v:ext="edit" aspectratio="t"/> <o:lock v:ext="edit" aspectratio="t"/>
<w10:wrap type="none"/> <w10:wrap type="none"/>
<w10:anchorlock/> <w10:anchorlock/>
...@@ -2214,9 +2188,10 @@ ...@@ -2214,9 +2188,10 @@
</w:tblPr> </w:tblPr>
<w:tblGrid> <w:tblGrid>
<w:gridCol w:w="2493"/> <w:gridCol w:w="2493"/>
<w:gridCol w:w="3491"/> <w:gridCol w:w="2912"/>
<w:gridCol w:w="3400"/> <w:gridCol w:w="2424"/>
<w:gridCol w:w="3641"/> <w:gridCol w:w="2634"/>
<w:gridCol w:w="2562"/>
<w:gridCol w:w="1098"/> <w:gridCol w:w="1098"/>
</w:tblGrid> </w:tblGrid>
<w:tr> <w:tr>
...@@ -2242,7 +2217,7 @@ ...@@ -2242,7 +2217,7 @@
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="5000" w:type="pct"/> <w:tcW w:w="5000" w:type="pct"/>
<w:gridSpan w:val="5"/> <w:gridSpan w:val="6"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -2252,11 +2227,11 @@ ...@@ -2252,11 +2227,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="32"/> <w:sz w:val="32"/>
<w:sz-cs w:val="32"/> <w:sz-cs w:val="32"/>
...@@ -2266,7 +2241,6 @@ ...@@ -2266,7 +2241,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:color w:val="FFFFFF"/> <w:color w:val="FFFFFF"/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
...@@ -2299,7 +2273,7 @@ ...@@ -2299,7 +2273,7 @@
</w:trPr> </w:trPr>
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="802" w:type="pct"/> <w:tcW w:w="882" w:type="pct"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -2309,11 +2283,11 @@ ...@@ -2309,11 +2283,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2324,7 +2298,6 @@ ...@@ -2324,7 +2298,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2336,7 +2309,7 @@ ...@@ -2336,7 +2309,7 @@
</w:tc> </w:tc>
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="1235" w:type="pct"/> <w:tcW w:w="1030" w:type="pct"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -2346,11 +2319,11 @@ ...@@ -2346,11 +2319,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2360,18 +2333,18 @@ ...@@ -2360,18 +2333,18 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
<w:lang w:val="EN-US" w:fareast="ZH-CN"/>
</w:rPr> </w:rPr>
<w:t>发生地点</w:t> <w:t>告警描述</w:t>
</w:r> </w:r>
</w:p> </w:p>
</w:tc> </w:tc>
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="1284" w:type="pct"/> <w:tcW w:w="858" w:type="pct"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -2380,11 +2353,11 @@ ...@@ -2380,11 +2353,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2395,19 +2368,52 @@ ...@@ -2395,19 +2368,52 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/> <w:kern w:val="0"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:t>发生地点</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="932" w:type="pct"/>
<w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
</w:tcBorders>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p>
<w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/>
<w:kern w:val="0"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
<w:lang w:val="EN-US" w:fareast="ZH-CN"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
<w:lang w:val="EN-US" w:fareast="ZH-CN"/> <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
</w:rPr> </w:rPr>
<w:t>告警时间</w:t> <w:t>发生告警时间</w:t>
</w:r> </w:r>
</w:p> </w:p>
</w:tc> </w:tc>
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="1289" w:type="pct"/> <w:tcW w:w="907" w:type="pct"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -2416,11 +2422,11 @@ ...@@ -2416,11 +2422,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2431,13 +2437,12 @@ ...@@ -2431,13 +2437,12 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
<w:lang w:val="EN-US" w:fareast="ZH-CN"/> <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
</w:rPr> </w:rPr>
<w:t>告警描述</w:t> <w:t>最新告警时间</w:t>
</w:r> </w:r>
</w:p> </w:p>
</w:tc> </w:tc>
...@@ -2452,11 +2457,11 @@ ...@@ -2452,11 +2457,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2467,7 +2472,6 @@ ...@@ -2467,7 +2472,6 @@
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/> <w:b/>
<w:b-cs/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2503,7 +2507,7 @@ ...@@ -2503,7 +2507,7 @@
</w:trPr> </w:trPr>
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="802" w:type="pct"/> <w:tcW w:w="882" w:type="pct"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -2513,8 +2517,11 @@ ...@@ -2513,8 +2517,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2523,7 +2530,8 @@ ...@@ -2523,7 +2530,8 @@
</w:pPr> </w:pPr>
<w:r> <w:r>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2535,7 +2543,7 @@ ...@@ -2535,7 +2543,7 @@
</w:tc> </w:tc>
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="1235" w:type="pct"/> <w:tcW w:w="1030" w:type="pct"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
...@@ -2545,8 +2553,11 @@ ...@@ -2545,8 +2553,11 @@
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2555,7 +2566,43 @@ ...@@ -2555,7 +2566,43 @@
</w:pPr> </w:pPr>
<w:r> <w:r>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/>
<w:kern w:val="0"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
<w:lang w:val="EN-US" w:fareast="ZH-CN"/>
</w:rPr>
<w:t>${(aal.alamContent)!''}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="858" w:type="pct"/>
<w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
</w:tcBorders>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p>
<w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/>
<w:kern w:val="0"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
<w:lang w:val="EN-US" w:fareast="ZH-CN"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2567,21 +2614,20 @@ ...@@ -2567,21 +2614,20 @@
</w:tc> </w:tc>
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="1284" w:type="pct"/> <w:tcW w:w="932" w:type="pct"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
</w:tcBorders> </w:tcBorders>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/> <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:tabs> <w:widowControl w:val="off"/>
<w:tab w:val="right" w:pos="2988"/> <w:jc w:val="center"/>
</w:tabs>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2590,7 +2636,8 @@ ...@@ -2590,7 +2636,8 @@
</w:pPr> </w:pPr>
<w:r> <w:r>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2602,18 +2649,20 @@ ...@@ -2602,18 +2649,20 @@
</w:tc> </w:tc>
<w:tc> <w:tc>
<w:tcPr> <w:tcPr>
<w:tcW w:w="1289" w:type="pct"/> <w:tcW w:w="907" w:type="pct"/>
<w:tcBorders> <w:tcBorders>
<w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
</w:tcBorders> </w:tcBorders>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/> <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2622,13 +2671,14 @@ ...@@ -2622,13 +2671,14 @@
</w:pPr> </w:pPr>
<w:r> <w:r>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
<w:lang w:val="EN-US" w:fareast="ZH-CN"/> <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
</w:rPr> </w:rPr>
<w:t>${(aal.alamContent)!''}</w:t> <w:t>${(aal.updateDate)!''}</w:t>
</w:r> </w:r>
</w:p> </w:p>
</w:tc> </w:tc>
...@@ -2640,13 +2690,14 @@ ...@@ -2640,13 +2690,14 @@
<w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/>
</w:tcBorders> </w:tcBorders>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/> <w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="center"/> <w:jc w:val="center"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="default"/>
<w:b/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2655,7 +2706,8 @@ ...@@ -2655,7 +2706,8 @@
</w:pPr> </w:pPr>
<w:r> <w:r>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="仿宋" w:hint="fareast"/>
<w:b/>
<w:kern w:val="0"/> <w:kern w:val="0"/>
<w:sz w:val="28"/> <w:sz w:val="28"/>
<w:sz-cs w:val="28"/> <w:sz-cs w:val="28"/>
...@@ -2680,21 +2732,15 @@ ...@@ -2680,21 +2732,15 @@
</w:rPr> </w:rPr>
</w:pPr> </w:pPr>
</w:p> </w:p>
<w:p>
<w:pPr>
<w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
<w:kern w:val="0"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
</w:pPr>
</w:p>
<w:sectPr> <w:sectPr>
<w:hdr w:type="odd"> <w:hdr w:type="odd">
<w:p> <w:p>
<w:pPr> <w:pPr>
<w:pStyle w:val="a13"/> <w:pStyle w:val="a13"/>
<w:tabs>
<w:tab w:val="center" w:pos="4153"/>
<w:tab w:val="right" w:pos="8306"/>
</w:tabs>
<w:jc w:val="left"/> <w:jc w:val="left"/>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/> <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:hint="default"/>
...@@ -2704,8 +2750,7 @@ ...@@ -2704,8 +2750,7 @@
</w:pPr> </w:pPr>
<w:r> <w:r>
<w:pict> <w:pict>
<w:binData w:name="wordml://4.png"> <w:binData w:name="wordml://4.png">iVBORw0KGgoAAAANSUhEUgAAAXIAAAB5CAIAAACr9j0pAAAAAXNSR0IArs4c6QAAmwNJREFUeF7t
iVBORw0KGgoAAAANSUhEUgAAAXIAAAB5CAIAAACr9j0pAAAAAXNSR0IArs4c6QAAmwNJREFUeF7t
nQVAG9u2hknQOqXu7u7u7u7u7u7uPXV3d3d3d4NSqtQohVIq0NICed+enQwhBAg97Tn33sfc3J6Q nQVAG9u2hknQOqXu7u7u7u7u7u7uPXV3d3d3d4NSqtQohVIq0NICed+enQwhBAg97Tn33sfc3J6Q
TGb2bFl7yb/+pdHpdFbRR3QPRPdAdA/8vh7Q/r5LRV8pugeieyC6B0QPRIuV6HkQ3QPRPfCbe0Dz TGb2bFl7yb/+pdHpdFbRR3QPRPdAdA/8vh7Q/r5LRV8pugeieyC6B0QPRIuV6HkQ3QPRPfCbe0Dz
X2QELThyYNnxw/f+WkgfBOt0n/397W1tY9jZme2SG08e91y5yN7OrkD6jPnTZcyULHmiePGcYsdx X2QELThyYNnxw/f+WkgfBOt0n/397W1tY9jZme2SG08e91y5yN7OrkD6jPnTZcyULHmiePGcYsdx
...@@ -3404,27 +3449,17 @@ ...@@ -3404,27 +3449,17 @@
SyqnhLCWQh9pko75C22I/kl0D0T3QKQ98N8kViJ9mOgTonsgugf+E3rgP8tl+5/QI9FtiO6B6B74 SyqnhLCWQh9pko75C22I/kl0D0T3QKQ98N8kViJ9mOgTonsgugf+E3rgP8tl+5/QI9FtiO6B6B74
mz3wf4zq+4qrCS2SAAAAAElFTkSuQmCC mz3wf4zq+4qrCS2SAAAAAElFTkSuQmCC
</w:binData> </w:binData>
<v:shape id="图片 1" o:spid="_x0000_s1029" o:spt="75" alt="" type="#_x0000_t75" <v:shape id="_x0000_s1029" o:spt="75" alt="" type="#_x0000_t75" style="height:42.35pt;width:129.6pt;" filled="f" o:preferrelative="t" stroked="f" coordsize="21600,21600">
style="height:42.35pt;width:129.6pt;" filled="f" o:preferrelative="t"
stroked="f" coordsize="21600,21600">
<v:path/> <v:path/>
<v:fill on="f" focussize="0,0"/> <v:fill on="f" focussize="0,0"/>
<v:stroke on="f"/> <v:stroke on="f"/>
<v:imagedata src="wordml://4.png" o:title=""/> <v:imagedata src="wordml://4.png" o:title="wordml://4.png"/>
<o:lock v:ext="edit" aspectratio="t"/> <o:lock v:ext="edit" aspectratio="t"/>
<w10:wrap type="none"/> <w10:wrap type="none"/>
<w10:anchorlock/> <w10:anchorlock/>
</v:shape> </v:shape>
</w:pict> </w:pict>
</w:r> </w:r>
<#-- <w:r>-->
<#-- <w:rPr>-->
<#-- <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="fareast"/>-->
<#-- <w:sz w:val="24"/>-->
<#-- <w:sz-cs w:val="24"/>-->
<#-- </w:rPr>-->
<#-- <w:t></w:t>-->
<#-- </w:r>-->
<w:r> <w:r>
<w:rPr> <w:rPr>
<w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/> <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:hint="default"/>
...@@ -3445,10 +3480,10 @@ ...@@ -3445,10 +3480,10 @@
</w:p> </w:p>
</w:hdr> </w:hdr>
<w:pgSz w:w="16838" w:h="11906" w:orient="landscape"/> <w:pgSz w:w="16838" w:h="11906" w:orient="landscape"/>
<w:pgMar w:top="1800" w:right="1440" w:bottom="1800" w:left="1440" w:header="680" w:footer="850" <w:pgMar w:top="1800" w:right="1440" w:bottom="1800" w:left="1440" w:header="680" w:footer="850" w:gutter="0"/>
w:gutter="0"/>
<w:cols w:space="425"/> <w:cols w:space="425"/>
<w:docGrid w:type="lines" w:line-pitch="312"/> <w:docGrid w:type="lines" w:line-pitch="312"/>
</w:sectPr> </w:sectPr>
</wx:sect> </wx:sect>
</w:body></w:wordDocument> </w:body>
\ No newline at end of file </w:wordDocument>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
[
{
"kafkaTopic": "k1",
"mqTopic": "romaSite/data/transmit",
"data": {
"dataType": "condition.station_psr_id",
"value": "condition.station_psr_id",
"timeStamp": "condition.station_psr_id",
"quality": "condition.station_psr_id",
"scadaId": "condition.station_psr_id",
"key": "condition.station_psr_id",
"disCreate": "condition.station_psr_id",
"name": "condition.station_psr_id"
}
},
{
"kafkaTopic": "k2",
"mqTopic": "romaSite/data/eventAlarm",
"data": {
"timeStamp": "body.warns.time",
"warns": [
{
"eventTextL1": "body.warns.systemid",
"pointId": "body.warns.pointId",
"time": "body.warns.type",
"deviceId": "deviceId",
"eventstatus": "body.warns.content"
}
]
}
}
]
\ No newline at end of file
...@@ -2,4 +2,39 @@ ...@@ -2,4 +2,39 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.equipmanage.mapper.AlarmMapper"> <mapper namespace="com.yeejoin.equipmanage.mapper.AlarmMapper">
<select id="totalNum" resultType="java.util.Map">
SELECT count(*) num, 'qlgj' as code from wl_equipment_specific_alarm_log a
where a.biz_org_code like concat(#{bizOrgCode}, '%')
<if test="systemId != null and systemId !=''">
and FIND_IN_SET(#{systemId},a.system_ids)
</if>
and date_format(a.`create_date`,'%Y-%m-%d') = date_format(now(),'%Y-%m-%d')
UNION ALL
SELECT count(*) num, 'wfggj' as code from wl_equipment_specific_alarm_log a where a.`status` = 1
and a.biz_org_code like concat(#{bizOrgCode}, '%')
<if test="systemId != null and systemId !=''">
and FIND_IN_SET(#{systemId},a.system_ids)
</if>
UNION ALL
SELECT count(*) num, 'hzgj' as code from wl_equipment_specific_alarm_log a where a.`type` = 'FIREALARM'
and a.`status` = 1
and a.biz_org_code like concat(#{bizOrgCode}, '%')
<if test="systemId != null and systemId !=''">
and FIND_IN_SET(#{systemId},a.system_ids)
</if>
UNION ALL
SELECT count(*) num, 'gzgj' as code from wl_equipment_specific_alarm_log a where a.`type` = 'BREAKDOWN'
a.`status` = 1
and a.biz_org_code like concat(#{bizOrgCode}, '%')
<if test="systemId != null and systemId !=''">
and FIND_IN_SET(#{systemId},a.system_ids)
</if>
UNION ALL
SELECT count(*) num, 'pbgj' as code from wl_equipment_specific_alarm_log a where a.`type` = 'SHIELD'
and a.`status` = 1
and a.biz_org_code like concat(#{bizOrgCode}, '%')
<if test="systemId != null and systemId !=''">
and FIND_IN_SET(#{systemId},a.system_ids)
</if>
</select>
</mapper> </mapper>
...@@ -445,6 +445,31 @@ ...@@ -445,6 +445,31 @@
<select id="selectGasExtinguishing" resultType="java.util.Map"> <select id="selectGasExtinguishing" resultType="java.util.Map">
SELECT SELECT
wes.id, wes.id,
(SELECT wei.emergency_level FROM wl_equipment_index wei LEFT JOIN wl_equipment_specific_index wesi ON wei.id = wesi.equipment_index_id WHERE wesi.equipment_specific_id = wes.id AND wesi.equipment_index_key = wes.realtime_iot_index_key) as level,
wes.code as code ,
wes.name,
IFNULL(wes.realtime_iot_index_name, '暂无信号') AS status,
CASE
WHEN (SELECT is_alarm FROM wl_equipment_specific_index wesi WHERE wesi.equipment_specific_id = wes.id AND wesi.equipment_index_key = wes.realtime_iot_index_key ) = 1 AND wes.realtime_iot_index_value = 'true' THEN 1
ELSE 0
END AS alarm
FROM
wl_equipment_specific wes
JOIN f_equipment_fire_equipment fire ON wes.id = fire.fire_equipment_id
WHERE
(
wes.equipment_code LIKE concat( '92044300', '%')
OR wes.equipment_code LIKE concat( '92040100', '%')
)
<if test="code != null and code!='' ">
AND fire.equipment_id = (SELECT id FROM f_equipment WHERE `code` = #{code})
</if>
AND wes.biz_org_code LIKE CONCAT( #{bizOrgCode}, '%')
</select>
<select id="selectPressureFlow" resultType="java.util.Map">
SELECT
wes.id,
'1' as type, '1' as type,
(SELECT wei.emergency_level FROM wl_equipment_index wei LEFT JOIN wl_equipment_specific_index wesi ON wei.id = wesi.equipment_index_id WHERE wesi.equipment_specific_id = wes.id AND wesi.equipment_index_key = wes.realtime_iot_index_key) as level, (SELECT wei.emergency_level FROM wl_equipment_index wei LEFT JOIN wl_equipment_specific_index wesi ON wei.id = wesi.equipment_index_id WHERE wesi.equipment_specific_id = wes.id AND wesi.equipment_index_key = wes.realtime_iot_index_key) as level,
wes.code as code , wes.code as code ,
...@@ -541,7 +566,7 @@ ...@@ -541,7 +566,7 @@
( (
SELECT SELECT
temp.id, temp.id,
temp.NAME, temp.name,
IF IF
( (
temp.nowPressure = '--', temp.nowPressure = '--',
...@@ -562,14 +587,14 @@ ...@@ -562,14 +587,14 @@
'压力高' '压力高'
WHEN ( temp.minPressure - temp.nowPressure ) > 0 THEN WHEN ( temp.minPressure - temp.nowPressure ) > 0 THEN
'压力低' ELSE '正常' '压力低' ELSE '正常'
END AS STATUS, END AS status,
1 AS type, 1 AS type,
temp.updateTime temp.updateTime
FROM FROM
( (
SELECT SELECT
wes.id, wes.id,
wes.NAME, wes.name,
concat_ws( '-', ws.full_name, ed.area ) area, concat_ws( '-', ws.full_name, ed.area ) area,
( SELECT update_date FROM wl_equipment_specific_index wesi WHERE wesi.equipment_specific_id = wes.id AND equipment_index_key = 'FHS_PipePressureDetector_PipePressure' ) AS updateTime, ( SELECT update_date FROM wl_equipment_specific_index wesi WHERE wesi.equipment_specific_id = wes.id AND equipment_index_key = 'FHS_PipePressureDetector_PipePressure' ) AS updateTime,
IFNULL( ( SELECT VALUE FROM wl_equipment_specific_index wesi WHERE wesi.equipment_specific_id = wes.id AND equipment_index_key = 'FHS_PipePressureDetector_PipePressure' ), '--' ) AS nowPressure, IFNULL( ( SELECT VALUE FROM wl_equipment_specific_index wesi WHERE wesi.equipment_specific_id = wes.id AND equipment_index_key = 'FHS_PipePressureDetector_PipePressure' ), '--' ) AS nowPressure,
...@@ -586,7 +611,7 @@ ...@@ -586,7 +611,7 @@
) temp UNION ) temp UNION
SELECT SELECT
temp.id, temp.id,
temp.NAME, temp.name,
IF IF
( (
temp.nowFlow = '--', temp.nowFlow = '--',
...@@ -608,14 +633,14 @@ ...@@ -608,14 +633,14 @@
'流量高' '流量高'
WHEN ( IFNULL( temp.minFlow, 0 ) - temp.nowFlow ) > 0 THEN WHEN ( IFNULL( temp.minFlow, 0 ) - temp.nowFlow ) > 0 THEN
'流量低' ELSE '正常' '流量低' ELSE '正常'
END AS STATUS, END AS status,
2 AS type, 2 AS type,
temp.updateTime temp.updateTime
FROM FROM
( (
SELECT SELECT
wes.id, wes.id,
wes.NAME, wes.name,
concat_ws( '-', ws.full_name, ed.area ) area, concat_ws( '-', ws.full_name, ed.area ) area,
( SELECT update_date FROM wl_equipment_specific_index wesi WHERE wesi.equipment_specific_id = wes.id AND equipment_index_key = 'FHS_FirePoolDevice_InfluentFlow' ) AS updateTime, ( SELECT update_date FROM wl_equipment_specific_index wesi WHERE wesi.equipment_specific_id = wes.id AND equipment_index_key = 'FHS_FirePoolDevice_InfluentFlow' ) AS updateTime,
IFNULL( ( SELECT VALUE FROM wl_equipment_specific_index wesi WHERE wesi.equipment_specific_id = wes.id AND equipment_index_key = 'FHS_FirePoolDevice_InfluentFlow' ), '--' ) AS nowFlow, IFNULL( ( SELECT VALUE FROM wl_equipment_specific_index wesi WHERE wesi.equipment_specific_id = wes.id AND equipment_index_key = 'FHS_FirePoolDevice_InfluentFlow' ), '--' ) AS nowFlow,
...@@ -1420,8 +1445,10 @@ ...@@ -1420,8 +1445,10 @@
IF (wlesal.clean_time IS NOT NULL, '已消除', '未消除' ) cleanStatus, IF (wlesal.clean_time IS NOT NULL, '已消除', '未消除' ) cleanStatus,
wlesal.equipment_index_id AS fireEquipmentIndexId, wlesal.equipment_index_id AS fireEquipmentIndexId,
wlesal.equipment_specific_code AS code, wlesal.equipment_specific_code AS code,
fs.code AS systemCode,
wlesal.equipment_specific_index_key AS fireEquipmentSpecificIndexKey, wlesal.equipment_specific_index_key AS fireEquipmentSpecificIndexKey,
wlesal.equipment_specific_index_name AS fireEquipmentSpecificIndexName, wlesal.equipment_specific_index_name AS fireEquipmentSpecificIndexName,
wlesal.emergency_level_color AS emergencyLevelColor,
CASE wlesal.equipment_specific_index_value CASE wlesal.equipment_specific_index_value
WHEN 'true' THEN '是' WHEN 'true' THEN '是'
WHEN 'false' THEN '否' WHEN 'false' THEN '否'
...@@ -1445,7 +1472,7 @@ ...@@ -1445,7 +1472,7 @@
FROM FROM
wl_equipment_specific_alarm_log wlesal wl_equipment_specific_alarm_log wlesal
LEFT JOIN wl_equipment_specific wes ON wes.id = wlesal.equipment_specific_id LEFT JOIN wl_equipment_specific wes ON wes.id = wlesal.equipment_specific_id
LEFT JOIN f_fire_fighting_system fs ON fs.id = wes.system_id LEFT JOIN f_fire_fighting_system fs ON FIND_IN_SET( fs.id, wlesal.system_ids )
<where> <where>
<if test="bizOrgCode != null and bizOrgCode != ''"> <if test="bizOrgCode != null and bizOrgCode != ''">
and wlesal.biz_org_code like concat(#{bizOrgCode},'%') and wlesal.biz_org_code like concat(#{bizOrgCode},'%')
...@@ -1453,6 +1480,12 @@ ...@@ -1453,6 +1480,12 @@
<if test='createDate != null and createDate == "1"'> <if test='createDate != null and createDate == "1"'>
AND wlesal.create_date LIKE CONCAT( DATE_FORMAT( NOW( ), '%Y-%m-%d' ), '%' ) AND wlesal.create_date LIKE CONCAT( DATE_FORMAT( NOW( ), '%Y-%m-%d' ), '%' )
</if> </if>
<if test="startDate != null and startDate != ''">
AND wlesal.create_date >= DATE_FORMAT( #{startDate}, '%Y-%m-%d %H:%i:%s' )
</if>
<if test="endDate != null and endDate != ''">
AND DATE_FORMAT( #{endDate}, '%Y-%m-%d %H:%i:%s' ) >= wlesal.create_date
</if>
<if test="systemCode != null and systemCode != ''"> <if test="systemCode != null and systemCode != ''">
and fs.code = #{systemCode} and fs.code = #{systemCode}
</if> </if>
...@@ -1486,6 +1519,86 @@ ...@@ -1486,6 +1519,86 @@
wlesal.create_date DESC wlesal.create_date DESC
</select> </select>
<select id="alarmListNoPage" resultType="java.util.Map">
SELECT
wlesal.id,
concat(wlesal.equipment_specific_name, wlesal.equipment_specific_index_name) AS alamContent,
IF (wlesal.confirm_type IS NULL, '未确认', '已确认') handleStatus,
IF (wlesal.clean_time IS NOT NULL, '已消除', '未消除' ) cleanStatus,
wlesal.equipment_index_id AS fireEquipmentIndexId,
wlesal.equipment_specific_code AS code,
wlesal.equipment_specific_index_key AS fireEquipmentSpecificIndexKey,
wlesal.equipment_specific_index_name AS fireEquipmentSpecificIndexName,
CASE wlesal.equipment_specific_index_value
WHEN 'true' THEN '是'
WHEN 'false' THEN '否'
ELSE wlesal.equipment_specific_index_value
END AS fireEquipmentPointValue,
wlesal.type AS typeCode,
(
SELECT
type_name
FROM
wl_signal_classify sc
WHERE
sc.type_code = wlesal.type
LIMIT 1
) AS type,
wlesal.equipment_specific_name AS equipmentSpecificName,
wlesal.location,
date_format(wlesal.create_date, '%Y-%m-%d %H:%i:%s') createDate,
wlesal.emergency_level_describe AS emergencyLevelDescribe,
fs.name AS systemName
FROM
wl_equipment_specific_alarm_log wlesal
LEFT JOIN wl_equipment_specific wes ON wes.id = wlesal.equipment_specific_id
LEFT JOIN f_fire_fighting_system fs ON FIND_IN_SET( fs.id, wlesal.system_ids )
<where>
<if test="bizOrgCode != null and bizOrgCode != ''">
and wlesal.biz_org_code like concat(#{bizOrgCode},'%')
</if>
<if test='createDate != null and createDate == "1"'>
AND wlesal.create_date LIKE CONCAT( DATE_FORMAT( NOW( ), '%Y-%m-%d' ), '%' )
</if>
<if test="startDate != null and startDate != ''">
AND wlesal.create_date >= DATE_FORMAT( ${startDate}, '%Y-%m-%d %H:%i:%s' )
</if>
<if test="endDate != null and endDate != ''">
AND DATE_FORMAT( ${endDate}, '%Y-%m-%d %H:%i:%s' ) >= wlesal.create_date
</if>
<if test="systemCode != null and systemCode != ''">
and fs.code = #{systemCode}
</if>
<if test="name != null and name != ''">
and wlesal.equipment_specific_name like concat('%', #{name},'%')
</if>
<if test="cleanStatus != null and cleanStatus != '' and cleanStatus == 2">
and wlesal.clean_time IS NULL
</if>
<if test="cleanStatus != null and cleanStatus != '' and cleanStatus == 1">
and wlesal.clean_time IS NOT NULL
</if>
<if test="handleStatus != null and handleStatus != '' and handleStatus == 2">
and wlesal.confirm_type IS NULL
</if>
<if test="handleStatus != null and handleStatus != '' and handleStatus == 1">
and wlesal.confirm_type IS NOT NULL
</if>
<if test="types != null">
<foreach collection="types" index="index" item="item" open="and (" separator=" OR " close=")">
wlesal.type = #{item}
</foreach>
</if>
<if test="emergencyLevels != null">
<foreach collection="emergencyLevels" index="index" item="item" open="and (" separator=" OR " close=")">
wlesal.emergency_level = #{item}
</foreach>
</if>
</where>
ORDER BY
wlesal.create_date DESC
</select>
<select id="getEmergencyMaterials" resultType="java.util.Map"> <select id="getEmergencyMaterials" resultType="java.util.Map">
SELECT SELECT
* *
......
...@@ -1602,18 +1602,19 @@ ...@@ -1602,18 +1602,19 @@
DELETE FROM wl_equipment_alarm_report_day WHERE equipment_specific_id = #{equipmentSpecificId}; DELETE FROM wl_equipment_alarm_report_day WHERE equipment_specific_id = #{equipmentSpecificId};
</delete> </delete>
<select id="getAlarmDetailByDate" resultType="Map"> <select id="getAlarmDetailByDate" resultType="com.yeejoin.equipmanage.dto.ReportAlarmDto">
SELECT SELECT
wlesa.equipment_specific_id, wlesa.equipment_specific_id AS equipmentSpecificId,
wlesa.equipment_specific_name AS specificName, wlesa.equipment_specific_name AS specificName,
wlesa.location AS location, wlesa.location AS location,
wlesa.equipment_specific_index_name, wlesa.equipment_specific_index_name AS equipmentSpecificIndexName,
concat(wlesa.equipment_specific_name, wlesa.equipment_specific_index_name) AS alamContent, concat(wlesa.equipment_specific_name, wlesa.equipment_specific_index_name) AS alamContent,
wlesa.frequency AS alarmNum, IFNULL(SUM(wlesa.frequency), 0) AS alarmNum,
DATE_FORMAT(wlesa.create_date, '%Y-%m-%d %H:%i:%s') AS createDate wlesa.type AS type,
DATE_FORMAT(wlesa.update_date, '%Y-%m-%d %H:%i:%s') AS updateDate,
DATE_FORMAT(wlesa.create_date, '%Y-%m-%d %H:%i:%s') AS createDate
FROM FROM
`wl_equipment_specific_alarm` `wlesa` `wl_equipment_specific_alarm` `wlesa`
LEFT JOIN f_fire_fighting_system AS sys ON FIND_IN_SET(sys.id, wlesa.system_ids)
<where> <where>
<if test="bizOrgCode != null and bizOrgCode != ''">AND <if test="bizOrgCode != null and bizOrgCode != ''">AND
wlesa.biz_org_code like concat (#{bizOrgCode},'%') wlesa.biz_org_code like concat (#{bizOrgCode},'%')
...@@ -1624,6 +1625,7 @@ ...@@ -1624,6 +1625,7 @@
AND find_in_set(#{sysId}, wlesa.system_ids) AND find_in_set(#{sysId}, wlesa.system_ids)
</if> </if>
</where> </where>
ORDER BY wlesa.create_date DESC GROUP BY wlesa.equipment_specific_id, wlesa.type
ORDER BY wlesa.update_date DESC
</select> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -576,7 +576,8 @@ ...@@ -576,7 +576,8 @@
wesi.emergency_level as emergencyLevel, wesi.emergency_level as emergencyLevel,
wesi.emergency_level_describe as emergencyLevelDescribe, wesi.emergency_level_describe as emergencyLevelDescribe,
wes.biz_org_name AS bizOrgName, wes.biz_org_name AS bizOrgName,
wes.biz_org_code AS bizOrgCode wes.biz_org_code AS bizOrgCode,
wes.position AS location
FROM wl_equipment_specific_index AS wesi FROM wl_equipment_specific_index AS wesi
LEFT JOIN wl_equipment_specific AS wes ON wes.id = wesi.equipment_specific_id LEFT JOIN wl_equipment_specific AS wes ON wes.id = wesi.equipment_specific_id
LEFT JOIN wl_equipment_detail ed ON ed.id = wes.equipment_detail_id LEFT JOIN wl_equipment_detail ed ON ed.id = wes.equipment_detail_id
......
...@@ -2779,10 +2779,10 @@ ...@@ -2779,10 +2779,10 @@
LEFT JOIN wl_stock_detail sd ON sd.equipment_detail_id = ed.id LEFT JOIN wl_stock_detail sd ON sd.equipment_detail_id = ed.id
WHERE WHERE
ed.production_date IS NOT NULL ed.production_date IS NOT NULL
AND ( (sd.`status` != 3) or (sd.`status` is null) or (sd.`status` = '')) AND e.expiry_date IS NOT NULL
AND e.expiry_date IS NOT NULL AND es.biz_org_code LIKE concat(#{equipmentSpecific.bizOrgCode}, '%')
AND es.biz_org_code LIKE concat(#{bizOrgCode}, '%') AND 0 >= DATEDIFF( DATE_ADD( DATE_FORMAT( ed.production_date, '%Y-%m-%d' ), INTERVAL e.expiry_date YEAR ), CURRENT_DATE )
AND 0 >= DATEDIFF( DATE_ADD( DATE_FORMAT( ed.production_date, '%Y-%m-%d' ), INTERVAL e.expiry_date YEAR ), CURRENT_DATE ) AND ( (sd.`status` != 3) or (sd.`status` is null) or (sd.`status` = ''))
) AS `value` UNION ALL ) AS `value` UNION ALL
SELECT SELECT
'超期未报废' AS `name`, '超期未报废' AS `name`,
...@@ -2796,10 +2796,10 @@ ...@@ -2796,10 +2796,10 @@
LEFT JOIN wl_stock_detail sd ON sd.equipment_detail_id = ed.id LEFT JOIN wl_stock_detail sd ON sd.equipment_detail_id = ed.id
WHERE WHERE
ed.production_date IS NOT NULL ed.production_date IS NOT NULL
AND ( (sd.`status` != 7) or (sd.`status` is null) or (sd.`status` = '')) AND e.expiry_date IS NOT NULL
AND e.expiry_date IS NOT NULL AND es.biz_org_code LIKE concat(#{equipmentSpecific.bizOrgCode}, '%')
AND es.biz_org_code LIKE concat(#{bizOrgCode}, '%') AND 0 >= DATEDIFF( DATE_ADD( DATE_FORMAT( ed.production_date, '%Y-%m-%d' ), INTERVAL e.expiry_date YEAR ), CURRENT_DATE )
AND 0 >= DATEDIFF( DATE_ADD( DATE_FORMAT( ed.production_date, '%Y-%m-%d' ), INTERVAL e.expiry_date YEAR ), CURRENT_DATE ) AND ( (sd.`status` != 7) or (sd.`status` is null) or (sd.`status` = ''))
) AS `value` UNION ALL ) AS `value` UNION ALL
SELECT SELECT
'近1月临期设备' AS `name`, '近1月临期设备' AS `name`,
...@@ -2812,12 +2812,12 @@ ...@@ -2812,12 +2812,12 @@
LEFT JOIN wl_equipment e ON ed.equipment_id = e.id LEFT JOIN wl_equipment e ON ed.equipment_id = e.id
LEFT JOIN wl_stock_detail sd ON sd.equipment_detail_id = ed.id LEFT JOIN wl_stock_detail sd ON sd.equipment_detail_id = ed.id
WHERE WHERE
ed.production_date IS NOT NULL ed.production_date IS NOT NULL
AND ( (sd.`status` != 7) or (sd.`status` is null) or (sd.`status` = '')) AND e.expiry_date IS NOT NULL
AND e.expiry_date IS NOT NULL AND es.biz_org_code LIKE concat(#{equipmentSpecific.bizOrgCode}, '%')
AND es.biz_org_code LIKE concat(#{bizOrgCode}, '%') AND ( (sd.`status` != 7) or (sd.`status` is null) or (sd.`status` = ''))
AND 30 >= DATEDIFF( DATE_ADD( DATE_FORMAT( ed.production_date, '%Y-%m-%d' ), INTERVAL e.expiry_date YEAR ), CURRENT_DATE ) AND 30 >= DATEDIFF( DATE_ADD( DATE_FORMAT( ed.production_date, '%Y-%m-%d' ), INTERVAL e.expiry_date YEAR ), CURRENT_DATE )
AND DATEDIFF( DATE_ADD( DATE_FORMAT( ed.production_date, '%Y-%m-%d' ), INTERVAL e.expiry_date YEAR ), CURRENT_DATE ) >= 0 AND DATEDIFF( DATE_ADD( DATE_FORMAT( ed.production_date, '%Y-%m-%d' ), INTERVAL e.expiry_date YEAR ), CURRENT_DATE ) >= 0
) AS `value` ) AS `value`
</select> </select>
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
</if> </if>
</where> </where>
group by `name` group by `name`
order by create_date desc
</select> </select>
<select id="getCountInfo" resultType="java.util.Map"> <select id="getCountInfo" resultType="java.util.Map">
......
...@@ -4263,7 +4263,7 @@ ...@@ -4263,7 +4263,7 @@
</select> </select>
<select id="selectWeekReportList" resultType="java.util.Map"> <select id="selectWeekReportList" resultType="java.util.Map">
select * from (
SELECT temp.name,temp.num,temp.normalNum,temp1.type_name , temp1.monitoringData,temp1.acquisition,temp1.normal, SELECT temp.name,temp.num,temp.normalNum,temp1.type_name , temp1.monitoringData,temp1.acquisition,temp1.normal,
IFNULL(temp1.alarmEquipNum,0) AS alarmEquipNum, temp1.type_code,temp.code IFNULL(temp1.alarmEquipNum,0) AS alarmEquipNum, temp1.type_code,temp.code
FROM FROM
...@@ -4281,12 +4281,6 @@ ...@@ -4281,12 +4281,6 @@
FROM wl_equipment_alarm_report_day report FROM wl_equipment_alarm_report_day report
where report.equipment_code = a.code where report.equipment_code = a.code
and FIND_IN_SET(a.system_id,report.system_ids) and FIND_IN_SET(a.system_id,report.system_ids)
and( report.index_type LIKE CONCAT('%','FireAlarm','%')
or report.index_type LIKE CONCAT('%','Fault','%')
or report.index_type LIKE CONCAT('%','Shield','%')
or report.index_type LIKE CONCAT('%','Open','%')
or report.index_type LIKE CONCAT('%','OilLeak','%')
or report.index_type LIKE CONCAT('%','Alarm','%') )
and report.index_true_num > 0 and report.report_date >= #{startDate} and and report.index_true_num > 0 and report.report_date >= #{startDate} and
report.report_date &lt;= #{endDate}) as exepctionNum report.report_date &lt;= #{endDate}) as exepctionNum
FROM( FROM(
...@@ -4294,7 +4288,7 @@ ...@@ -4294,7 +4288,7 @@
s.id as system_id, s.id as system_id,
equipment.code, equipment.code,
equipment.name, equipment.name,
count(1) AS num (select count(1) from wl_equipment_specific s where FIND_IN_SET( #{systemId}, s.system_id ) AND equipment.is_iot = 1 and s.equipment_code = equipment.code ) AS num
FROM FROM
wl_equipment_specific spec wl_equipment_specific spec
LEFT JOIN wl_equipment_detail detail ON spec.equipment_detail_id = detail.id LEFT JOIN wl_equipment_detail detail ON spec.equipment_detail_id = detail.id
...@@ -4358,23 +4352,21 @@ ...@@ -4358,23 +4352,21 @@
)temp1 on temp.system_id = temp1.systemId and temp.code = temp1.code )temp1 on temp.system_id = temp1.systemId and temp.code = temp1.code
group by code, type_code group by code, type_code
ORDER BY temp.name ORDER BY temp.name ) d where type_code is not null
</select> </select>
<select id="selectAlarms" resultType="java.lang.Integer"> <select id="selectAlarms" resultType="java.lang.Integer">
SELECT SELECT
ifnull(SUM(index_true_num), 0) ifnull(SUM(index_true_num), 0)
FROM FROM
wl_equipment_alarm_report_day report wl_equipment_alarm_report_day report
LEFT JOIN f_fire_fighting_system s ON FIND_IN_SET( s.id, report.system_ids )
LEFT JOIN wl_equipment_specific spec on report.equipment_specific_id = spec.id
where report.system_ids is not null and report.index_true_num > 0 where report.system_ids is not null and report.index_true_num > 0
<foreach collection="indicator" item="index" open="AND(" separator="or" close=")"> <foreach collection="indicator" item="index" open="AND(" separator="or" close=")">
report.index_type like concat ('%', #{index}) report.index_type like concat ('%', #{index})
</foreach> </foreach>
and report.report_date BETWEEN #{startDate} and #{endDate} and report.report_date BETWEEN #{startDate} and #{endDate}
and system_id = #{systemId} and FIND_IN_SET( #{systemId}, report.system_ids)
and index_type = #{indexType} and index_type = #{indexType}
and report.equipment_code = #{equipmentCode} and report.equipment_code = #{equipmentCode}
</select> </select>
...@@ -4923,7 +4915,8 @@ ...@@ -4923,7 +4915,8 @@
ec.image, ec.image,
r.resource_type, r.resource_type,
r.sequence_nbr, r.sequence_nbr,
wes.code wes.code,
ifnull(rp.pump_device_id, '') as pumpDeviceId
FROM FROM
cb_water_resource r cb_water_resource r
LEFT JOIN cb_water_resource_pool rp ON rp.resource_id = r.sequence_nbr LEFT JOIN cb_water_resource_pool rp ON rp.resource_id = r.sequence_nbr
...@@ -4953,7 +4946,8 @@ ...@@ -4953,7 +4946,8 @@
a.image, a.image,
a.resource_type, a.resource_type,
a.sequence_nbr, a.sequence_nbr,
a.code a.code,
a.pumpDeviceId
FROM FROM
( (
SELECT SELECT
...@@ -4982,7 +4976,8 @@ ...@@ -4982,7 +4976,8 @@
r.resource_type, r.resource_type,
r.sequence_nbr, r.sequence_nbr,
rp.level_device_id, rp.level_device_id,
wes.code wes.code,
ifnull(rp.pump_device_id, '') as pumpDeviceId
FROM FROM
cb_water_resource r cb_water_resource r
LEFT JOIN cb_water_resource_pool rp ON rp.resource_id = r.sequence_nbr LEFT JOIN cb_water_resource_pool rp ON rp.resource_id = r.sequence_nbr
...@@ -5067,7 +5062,7 @@ ...@@ -5067,7 +5062,7 @@
a.id, a.id,
a.name, a.name,
IFNULL( a.image, '' ) AS image, IFNULL( a.image, '' ) AS image,
'M' AS unit, a.unit AS unit,
IFNULL( a.nowLevel, '--' ) AS nowLevel, IFNULL( a.nowLevel, '--' ) AS nowLevel,
a.minLevel AS minLevel, a.minLevel AS minLevel,
a.maxLevel AS maxLevel, a.maxLevel AS maxLevel,
...@@ -5115,91 +5110,117 @@ ...@@ -5115,91 +5110,117 @@
</select> </select>
<select id="getFoamTankBySuper" resultType="java.util.Map"> <select id="getFoamTankBySuper" resultType="java.util.Map">
SELECT
select
*, *,
( (
CASE CASE
WHEN nowLevel IS NOT NULL WHEN nowLevel IS NOT NULL
AND maxLevel IS NOT NULL AND maxLevel IS NOT NULL
AND nowLevel - maxLevel > 0 THEN '1' AND nowLevel - maxLevel > 0 THEN
'1'
WHEN nowLevel IS NOT NULL WHEN nowLevel IS NOT NULL
AND minLevel IS NOT NULL AND minLevel IS NOT NULL
AND nowLevel != '--' AND nowLevel != '--'
AND nowLevel - minLevel >= 0 THEN '2' AND nowLevel - minLevel >= 0 THEN
WHEN nowLevel IS NOT NULL '2'
AND minLevel IS NOT NULL WHEN nowLevel IS NOT NULL
AND nowLevel != '--' AND minLevel IS NOT NULL
AND minLevel - nowLevel > 0 THEN '0' AND nowLevel != '--'
ELSE '4' AND minLevel - nowLevel > 0 THEN
END ) AS `status` '0' ELSE '4'
from END
) AS `status`
FROM
( (
SELECT SELECT
a.`name`, IFNULL( a.nowLevel, '--' ) AS nowLevel, a.id, IFNULL( a.image, '' ) AS image, a.unit, a.minLevel AS minLevel, a.maxLevel AS maxLevel, ( a.`name`,
CASE IFNULL( a.nowLevel, '--' ) AS nowLevel,
WHEN a.nowLevel IS NULL a.id,
OR a.minLevel IS NULL THEN '--' IFNULL( a.image, '' ) AS image,
WHEN a.minLevel - a.nowLevel > 0 THEN '缺水' a.unit,
ELSE '正常' a.minLevel AS minLevel,
END ) AS levelStatus, 'foamTank' AS type a.maxLevel AS maxLevel,
(
CASE
WHEN a.nowLevel IS NULL
OR a.minLevel IS NULL THEN
'--'
WHEN a.minLevel - a.nowLevel > 0 THEN
'缺水' ELSE '正常'
END
) AS levelStatus,
'foamTank' AS type
FROM FROM
( (
SELECT SELECT
ed.`name`, es.iot_code, es.id, ec.image, ei.unit, max( CASE WHEN ei.equipment_index_key = 'CAFS_FoamTank_FoamTankLevel' THEN ei.`value` END ) AS nowLevel, max( CASE WHEN fi.field_name = 'minLevel' THEN fi.field_value END ) AS minLevel, max( CASE WHEN fi.field_name = 'maxLevel' THEN fi.field_value END ) AS maxLevel ed.`name`,
es.iot_code,
es.id,
ec.image,
ei.unit,
max( CASE WHEN ei.equipment_index_key = 'CAFS_FoamTank_FoamTankLevel' THEN ei.`value` END ) AS nowLevel,
max( CASE WHEN fi.field_name = 'minLevel' THEN fi.field_value END ) AS minLevel,
max( CASE WHEN fi.field_name = 'maxLevel' THEN fi.field_value END ) AS maxLevel
FROM FROM
wl_equipment_specific es wl_equipment_specific es
LEFT JOIN wl_equipment_detail ed ON LEFT JOIN wl_equipment_detail ed ON es.equipment_detail_id = ed.id
es.equipment_detail_id = ed.id LEFT JOIN wl_equipment_specific_index ei ON es.id = ei.equipment_specific_id
LEFT JOIN wl_equipment_specific_index ei ON LEFT JOIN wl_equipment e ON e.id = ed.equipment_id
es.id = ei.equipment_specific_id LEFT JOIN wl_equipment_category ec ON e.category_id = ec.id
LEFT JOIN wl_equipment e ON LEFT JOIN wl_form_instance_equip fi ON fi.instance_id = es.id
e.id = ed.equipment_id
LEFT JOIN wl_equipment_category ec ON
e.category_id = ec.id
LEFT JOIN wl_form_instance_equip fi ON
fi.instance_id = es.id
WHERE WHERE
ed.`code` LIKE '92031900%' ed.`code` LIKE '92031900%'
AND es.biz_org_code LIKE concat(#{bizOrgCode}, '%') AND es.biz_org_code LIKE concat( #{bizOrgCode}, '%')
AND es.iot_code IS NOT NULL AND es.iot_code IS NOT NULL GROUP BY es.id ) a UNION ALL
GROUP BY
es.id ) a
UNION ALL
SELECT SELECT
a.`name`, IFNULL( a.nowLevel, '--' ) AS nowLevel, a.id, IFNULL( a.image, '' ) AS image, 'M' AS unit, a.minLevel AS minLevel, a.maxLevel AS maxLevel, ( a.`name`,
CASE IFNULL( a.nowLevel, '--' ) AS nowLevel,
WHEN a.nowLevel IS NULL a.id,
OR a.minLevel IS NULL THEN '--' IFNULL( a.image, '' ) AS image,
WHEN a.minLevel - a.nowLevel > 0 THEN '缺水' a.unit AS unit,
ELSE '正常' a.minLevel AS minLevel,
END ) AS levelStatus, a.type AS type a.maxLevel AS maxLevel,
(
CASE
WHEN a.nowLevel IS NULL
OR a.minLevel IS NULL THEN
'--'
WHEN a.minLevel - a.nowLevel > 0 THEN
'缺水' ELSE '正常'
END
) AS levelStatus,
'waterTank' AS type
FROM FROM
( (
SELECT SELECT
r.`name`, IFNULL( rp.min_water_level, 0 ) AS minLevel, IFNULL( rp.max_water_level, 0 ) AS maxLevel, ( ed.`name`,
SELECT es.iot_code,
FORMAT( avg( IFNULL( ei.`value`, 0 ) ), 2 ) es.id,
FROM ec.image,
wl_equipment_specific_index ei ei.unit,
WHERE max( CASE WHEN ei.equipment_index_key = 'CAFS_WaterTank_WaterTankLevel' THEN ei.`value` END ) AS nowLevel,
( ei.equipment_index_key = 'FHS_FirePoolDevice_WaterLevel' max( CASE WHEN fi.field_name = 'minLevel' THEN fi.field_value END ) AS minLevel,
OR ei.equipment_index_key = 'FHS_WirelessliquidDetector_WaterLevel' ) max( CASE WHEN fi.field_name = 'maxLevel' THEN fi.field_value END ) AS maxLevel
AND FIND_IN_SET( ei.equipment_specific_id, rp.level_device_id ) > 0 ) AS nowLevel, ec.image, r.resource_type AS type, r.sequence_nbr AS id
FROM FROM
cb_water_resource r wl_equipment_specific es
LEFT JOIN cb_water_resource_pool rp ON LEFT JOIN wl_equipment_detail ed ON es.equipment_detail_id = ed.id
rp.resource_id = r.sequence_nbr LEFT JOIN wl_equipment_specific_index ei ON es.id = ei.equipment_specific_id
LEFT JOIN wl_equipment_category ec ON LEFT JOIN wl_equipment e ON e.id = ed.equipment_id
ec.id = r.equip_category_id LEFT JOIN wl_equipment_category ec ON e.category_id = ec.id
LEFT JOIN wl_form_instance_equip fi ON fi.instance_id = es.id
WHERE WHERE
r.resource_type = 'waterTank' ed.`code` LIKE '92032000%'
AND r.biz_org_code LIKE concat(#{bizOrgCode}, '%') AND es.iot_code IS NOT NULL
AND r.is_delete = 1 AND es.biz_org_code LIKE concat( #{bizOrgCode}, '%')
GROUP BY GROUP BY es.id ) a
r.sequence_nbr ) a
ORDER BY ORDER BY
levelStatus DESC ) as b order by status asc levelStatus DESC
) AS b
ORDER BY
`status` ASC
</select> </select>
<select id="getPipeNetworkBySuper" resultType="java.util.Map"> <select id="getPipeNetworkBySuper" resultType="java.util.Map">
......
...@@ -3957,4 +3957,18 @@ ...@@ -3957,4 +3957,18 @@
</sql> </sql>
</changeSet> </changeSet>
<changeSet author="zs" id="20240401-zs-1">
<preConditions onFail="MARK_RAN">
<not>
<columnExists tableName="cb_water_resource_pool" columnName="pump_device_id"/>
</not>
</preConditions>
<comment>modify table cb_water_resource_pool add columns</comment>
<sql>
ALTER TABLE `cb_water_resource_pool`
ADD pump_device_id varchar(1000) DEFAULT NULL COMMENT '消防泵装置ids',
ADD pump_device_name varchar(1500) DEFAULT NULL COMMENT '消防泵装置名称s';
</sql>
</changeSet>
</databaseChangeLog> </databaseChangeLog>
...@@ -442,10 +442,6 @@ ...@@ -442,10 +442,6 @@
and a.org_code LIKE CONCAT(#{bizOrgCode},'%') and a.org_code LIKE CONCAT(#{bizOrgCode},'%')
</if> </if>
</trim> </trim>
<choose>
<when test="pageSize==-1"></when>
<when test="pageSize!=-1">limit #{offset},#{pageSize}</when>
</choose>
</select> </select>
<select id="getPeopleCheckPage" resultMap="checkInfoMap"> <select id="getPeopleCheckPage" resultMap="checkInfoMap">
......
...@@ -1265,6 +1265,23 @@ ...@@ -1265,6 +1265,23 @@
</where> </where>
</select> </select>
<select id="getDefectEquipInfoByIds" resultType="Map">
SELECT
es.position AS equipLocation,
es.id as id
FROM
wl_equipment_specific es
<where>
<if test="ids != null">
es.id in
<foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
</select>
<select id="getCheckMissedEquipInfo" resultType="Map"> <select id="getCheckMissedEquipInfo" resultType="Map">
SELECT SELECT
cl.`name` AS equipName, cl.`name` AS equipName,
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>amos-boot-utils</artifactId>
<groupId>com.amosframework.boot</groupId>
<version>1.0.0</version>
</parent>
<artifactId>amos-boot-utils-adpter</artifactId>
<properties>
<tyboot.version>1.1.23-SNAPSHOT</tyboot.version>
</properties>
<dependencies>
<dependency>
<groupId>com.amosframework.boot</groupId>
<artifactId>amos-boot-core</artifactId>
<version>${amos-biz-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<artifactId>mysql-connector-java</artifactId>
<groupId>mysql</groupId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.yeejoin.amos;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableAsync;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* <pre>
* 服务启动类
* </pre>
*
* @author amos
* @version $Id: AmosBootUtilsAdpterApplication, v 0.1 2024年5月7日 下午4:56:29 amos Exp $
*/
@SpringBootApplication
@EnableConfigurationProperties
@ServletComponentScan
@EnableDiscoveryClient
@EnableFeignClients
@EnableAsync
@EnableEurekaClient
@ComponentScan({"org.typroject","com.yeejoin.amos"})
public class AmosBootUtilsAdpterApplication {
private static final Logger logger = LoggerFactory.getLogger(AmosBootUtilsAdpterApplication.class);
public static void main(String[] args) throws UnknownHostException {
ConfigurableApplicationContext context = SpringApplication.run(AmosBootUtilsAdpterApplication.class, args);
Environment env = context.getEnvironment();
String ip = InetAddress.getLocalHost().getHostAddress();
String port = env.getProperty("server.port");
String path = env.getProperty("server.servlet.context-path");
logger.info("\n----------------------------------------------------------\n\t" +
"Application Amos-Biz-Boot is running! Access URLs:\n\t" +
"Swagger文档: \thttp://" + ip + ":" + port + path + "/doc.html\n" +
"----------------------------------------------------------");
}
}
package com.yeejoin.amos.adpter.controller;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.adpter.service.AdpterService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* 同步接口
*
* @author system_generator
* @date 2021-06-29
*/
@RestController
@Slf4j
@Api(tags = "同步接口Api")
@RequestMapping(value = "/adpter")
public class AdpterController {
@Autowired
AdpterService adpterService;
/**
* 同步接口Api
*
* @return
*/
@GetMapping(value = "/tran")
@ApiOperation(httpMethod = "GET", value = "同步接口Api", notes = "同步接口Api")
public Map<String,String> tran() {
Map<String, String> handle = adpterService.handle();
return handle;
}
}
\ No newline at end of file
package com.yeejoin.amos.adpter.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class AdpterService {
private final static Logger log = LoggerFactory.getLogger(AdpterService.class);
//开始时间
private static Long startTime = 0L;
//结束时间
private static Long endTime =0L;
@Value("${source.jdbc.ip}")
String sourceJdbc;
@Value("${goal.jdbc.ip}")
String goalJdbc;
@Value("${source.jdbc.ip.idx}")
String sourceJdbcIdx;
@Value("${goal.jdbc.ip.idx}")
String goalJdbcIdx;
@Value("${source.jdbc.ip.buss}")
String sourceJdbcBuss;
@Value("${goal.jdbc.ip.buss}")
String goalJdbcBuss;
String driver = "com.mysql.cj.jdbc.Driver";
@Value("${yeejoin.user}")
String userName;
@Value("${yeejoin.pwd}")
String pwd;
public Map<String, String> handle() {
Map<String,String> rMap = new HashMap<>();
// 处理common库
copy(sourceJdbc, goalJdbc, "cb_firefighters", "cb_firefighters", "sequence_nbr", rMap);
copy(sourceJdbc, goalJdbc, "cb_org_usr", "cb_org_usr", "sequence_nbr", rMap);
copy(sourceJdbc, goalJdbc, "cb_water_resource", "cb_water_resource", "sequence_nbr", rMap);
copy(sourceJdbc, goalJdbc, "cb_water_resource_crane", "cb_water_resource_crane", "sequence_nbr", rMap);
copy(sourceJdbc, goalJdbc, "cb_water_resource_hydrant", "cb_water_resource_hydrant", "sequence_nbr", rMap);
copy(sourceJdbc, goalJdbc, "cb_water_resource_index", "cb_water_resource_index", "sequence_nbr", rMap);
copy(sourceJdbc, goalJdbc, "cb_water_resource_iot", "cb_water_resource_iot", "sequence_nbr", rMap);
copy(sourceJdbc, goalJdbc, "cb_water_resource_natural", "cb_water_resource_natural", "sequence_nbr", rMap);
copy(sourceJdbc, goalJdbc, "cb_water_resource_pool", "cb_water_resource_pool", "sequence_nbr", rMap);
// 处理 idx库
copy(sourceJdbcIdx, goalJdbcIdx, "cb_org_usr", "cb_org_usr", "sequence_nbr", rMap);
copy(sourceJdbcIdx, goalJdbcIdx, "idx_biz_unit_person", "idx_biz_unit_person", "SEQUENCE_NBR", rMap);
// 处理business
copy(sourceJdbcBuss, goalJdbcBuss, "f_equipment", "f_equipment", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "cb_org_usr", "cb_org_usr", "sequence_nbr", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "cb_water_resource", "cb_water_resource", "sequence_nbr", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "f_equipment_fire_equipment", "f_equipment_fire_equipment", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "f_fire_fighting_system", "f_fire_fighting_system", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_input_item", "p_input_item", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_plan", "p_plan", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_plan_exec_statistics", "p_plan_exec_statistics", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_plan_task", "p_plan_task", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_plan_task_detail", "p_plan_task_detail", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_point", "p_point", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_point_classify", "p_point_classify", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_point_inputitem", "p_point_inputitem", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_point_photo", "p_point_photo", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_route", "p_route", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_route_point", "p_route_point", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_point_config", "p_point_config", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "p_route_point_item", "p_route_point_item", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "wl_car", "wl_car", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "wl_car_property", "wl_car_property", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "wl_dynamic_form_instance", "wl_dynamic_form_instance", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "wl_equipment_detail", "wl_equipment_detail", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "wl_equipment_specific", "wl_equipment_specific", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "wl_equipment_specific_index", "wl_equipment_specific_index", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "wl_form_instance", "wl_form_instance", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "wl_form_instance_equip", "wl_form_instance_equip", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "wl_warehouse", "wl_warehouse", "id", rMap);
copy(sourceJdbcBuss, goalJdbcBuss, "wl_warehouse_structure", "wl_warehouse_structure", "id", rMap);
log.info("执行结束================");
return rMap;
}
/**
* 获取数据库连接
* @param
* @return
*/
public Connection getConnection(String jdbc) {
//加载驱动
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String jdbcUrl = jdbc;
String user = userName;
String password = pwd;
//链接数据库
try {
return DriverManager.getConnection(jdbcUrl, user, password);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("连接数据库失败");
}
}
/**
* 将查询的数据复制到另一个数据库的表中,要求两张表的字段名,字段类型完全相同。
* @param srcTableName 要查询的表
* @param destTableName 目标表名称
* @return
*/
public int[] copy(String source, String goal, String srcTableName, String destTableName ,String id, Map rMap) {
startTime = System.currentTimeMillis();
Connection conn = null;
PreparedStatement pst = null;
conn = getConnection(goal);
int count[] = new int[0];
List<String> list = new ArrayList<>();
//查询数据
String sql = String.format("select * from %s ", srcTableName);
//查询数据
String sqlGoal = "select count(*) as num from "+ destTableName +" where "+id+" = ";
List<Map<String,Object>> queryOld = query(source, sql);
List<Map<String,Object>> query = new ArrayList<>();
//插入数据
String insertSql = "insert into %s(%s) values(%s)";
StringBuilder key = new StringBuilder();
StringBuilder value = new StringBuilder();
List<String> columns = new ArrayList<>();
List<List<Object>> params = new ArrayList<>();
// 剔除已存在的数据
for (Map map:queryOld
) {
try {
pst = conn.prepareStatement(sqlGoal+map.get(id));
ResultSet resultSet = pst.executeQuery();
while (resultSet.next()) {
int num = resultSet.getInt("num");
if(num < 1) {
query.add(map);
} else {
list.add(map.get(id).toString());
}
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(query.size() > 0) {
for(String column : query.get(0).keySet()) {
key.append(column).append(",");
value.append("?,");
columns.add(column);
}
insertSql = String.format(insertSql,
destTableName,
key.substring(0, key.length()-1).toString(),
value.substring(0, value.length()-1).toString());
for (Map<String, Object> map : query) {
List<Object> param = new ArrayList<>();
for (String column : columns) {
param.add(map.get(column));
}
params.add(param);
}
count = executeBatch(goal, insertSql, params, destTableName);
endTime = System.currentTimeMillis();
log.debug("复制表"+destTableName+"成功"+"用时"+(endTime-startTime)+"ms");
}
if(list.size()>0) {
rMap.put(destTableName, String.join(",", list));
} else {
rMap.put(destTableName, "复制表"+destTableName+"成功"+"用时"+(endTime-startTime)+"ms");
}
return count;
}
/**
* 批量执行一个 SQL 语句,可以传不同的参数
* @param sql SQL 语句
* @param params 参数列表
* @return
*/
public int[] executeBatch(String goal, String sql, List<List<Object>> params, String destTableName) {
int count[] = new int[0];
Connection conn = null;
PreparedStatement pst = null;
try {
conn = getConnection(goal);
boolean autoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
pst = conn.prepareStatement(sql);
for (List<Object> list : params) {
for(int i = 0; i < list.size(); i++) {
pst.setObject(i + 1, list.get(i));
}
pst.addBatch();
}
count = pst.executeBatch();
conn.commit();
conn.setAutoCommit(autoCommit);
} catch (Exception e) {
log.error("插入数据失败"+e.getMessage()+"========"+destTableName);
throw new RuntimeException("插入数据失败"+e.getMessage());
} finally {
closeStatement(pst);
closeConnection(conn);
}
return count;
}
/**
* 查询数据并封装到 List 集合中
* @param sql SQL 语句
* @param args 参数列表
* @return List<Map<字段名, 值>>
*/
public List<Map<String, Object>> query(String source, String sql, Object...args) {
List<Map<String, Object>> result = new ArrayList<>();
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
try {
conn = getConnection(source);
pst = conn.prepareStatement(sql);
for(int i = 0; i < args.length; i++) {
pst.setObject(i + 1, args[i]);
}
rs = pst.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
//获取字段数量
int columnCount = rsmd.getColumnCount();
List<String> columns = new ArrayList<>(columnCount);
for(int i = 1; i <= columnCount; i++) {
columns.add(rsmd.getColumnName(i)); // 字段名
}
//封装数据
while(rs.next()) {
Map<String, Object> map = new HashMap<>();
for (String column : columns) {
map.put(column, rs.getObject(column));
}
result.add(map);
}
} catch (Exception e) {
throw new RuntimeException("查询异常"+e.getMessage());
} finally {
closeStatement(pst);
closeConnection(conn);
closeResultSet(rs);
}
return result;
}
/**
* 关闭 Statement
* @param stmt
* @return
*/
public static boolean closeStatement(Statement stmt) {
boolean flag = true;
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
flag = false;
}
}
return flag;
}
/**
* 关闭 ResultSet
* @param rs
* @return
*/
public static boolean closeResultSet(ResultSet rs) {
boolean flag = true;
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
flag = false;
}
}
return flag;
}
/**
* 关闭 Connection
* @param conn
* @return
*/
public static boolean closeConnection(Connection conn) {
boolean flag = true;
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
flag = false;
}
}
return flag;
}
}
#\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740
#eureka.client.service-url.defaultZone =http://172.16.11.201:10001/eureka/
eureka.instance.prefer-ip-address=true
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*
eureka.instance.health-check-url-path=/actuator/health
eureka.instance.metadata-map.management.context-path=${server.servlet.context-path}/actuator
eureka.instance.status-page-url-path=/actuator/info
eureka.instance.metadata-map.management.api-docs=http://172.16.11.201:${server.port}${server.servlet.context-path}/swagger-ui.html
#服务实例ip地址,若eureka.instance.prefer-ip-address=false,ip-address设置失效,一般情况不用设置。
#eureka.instance.ip-address= 172.16.3.135
#eureka服务ip配置,可填写固定ip地址
eureka.instance.hostname=172.16.11.201
#eureka服务配置的校验账号及密码,配置需和eureka服务后台配置文件中一致
spring.security.user.name=admin
spring.security.user.password=a1234560
eureka.client.serviceUrl.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:10001/eureka/
##########eureka配置信息###############
management.health.redis.enabled=false
source.jdbc.ip=jdbc:mysql://172.16.11.201:3306/dl_amos_common_biz?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
goal.jdbc.ip=jdbc:mysql://172.16.11.201:3306/dl_amos_common_biz_20230828?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
source.jdbc.ip.idx=jdbc:mysql://172.16.11.201:3306/dl_amos_idx_biz?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
goal.jdbc.ip.idx=jdbc:mysql://172.16.11.201:3306/dl_amos_idx_biz_bak?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
source.jdbc.ip.buss=jdbc:mysql://172.16.11.201:3306/dl_business?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
goal.jdbc.ip.buss=jdbc:mysql://172.16.11.201:3306/dl_business_copy?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
yeejoin.user=root
yeejoin.pwd=Yeejoin@2020
\ No newline at end of file
spring.application.name=AMOS-ADPTER
server.servlet.context-path=/adpter
server.port=8120
spring.profiles.active=dev
spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.serialization.write-dates-as-timestamps=true
##代码中有部分逻辑冲突需要处理 为区分机场和电力逻辑 增加开关 若为true 则为机场逻辑 为false 则为电力逻辑
logic=false
logging.config=classpath:logback-${spring.profiles.active}.xml
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="log" />
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/jpush.log.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
<!--日志文件大小-->
<MaxFileSize>30mb</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- show parameters for hibernate sql 专为 Hibernate 定制
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
-->
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="DEBUG"/>
<logger name="org.mybatis" level="DEBUG" />
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<logger name="org.springframework" level="DEBUG"/>
<!-- 日志输出级别 -->
<root level="DEBUG">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="log"/>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/jpush.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
<!--按大小分割同一天的-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- show parameters for hibernate sql 专为 Hibernate 定制
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
-->
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="INFO"/>
<logger name="org.mybatis" level="INFO"/>
<logger name="java.sql.Connection" level="INFO"/>
<logger name="java.sql.Statement" level="INFO"/>
<logger name="java.sql.PreparedStatement" level="INFO"/>
<logger name="com.baomidou.mybatisplus" level="INFO"/>
<logger name="org.typroject" level="INFO"/>
<logger name="com.yeejoin.amos" level="INFO"/>
<logger name="org.springframework" level="INFO"/>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</configuration>
\ No newline at end of file
package com.yeejoin.amos.message.kafka; package com.yeejoin.amos.message.kafka;
import com.alibaba.fastjson.JSON;
import com.yeejoin.amos.message.utils.ClassToJsonUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONObject; import net.sf.json.JSONObject;
import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.Acknowledgment; import org.springframework.kafka.support.Acknowledgment;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.component.emq.EmqKeeper; import org.typroject.tyboot.component.emq.EmqKeeper;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
...@@ -28,10 +32,13 @@ public class KafkaConsumerService { ...@@ -28,10 +32,13 @@ public class KafkaConsumerService {
private static final String MQTT_TOPIC = "romaSite/data/transmit"; private static final String MQTT_TOPIC = "romaSite/data/transmit";
private static final String PROVINCE_MQTT_TOPIC = "province/data/transport"; private static final String PROVINCE_MQTT_TOPIC = "province/data/transport";
private static final String MQTT_TOPIC_EVENT_ALARM = "romaSite/data/eventAlarm";
@Autowired @Autowired
protected EmqKeeper emqKeeper; protected EmqKeeper emqKeeper;
@Value("${system.zxj}") @Value("${system.zxj}")
private boolean isZxj; private boolean isZxj;
@Value("classpath:/json/commonMessage.json")
private Resource commonMessage;
/** /**
* 批量消费kafka消息 * 批量消费kafka消息
...@@ -106,19 +113,136 @@ public class KafkaConsumerService { ...@@ -106,19 +113,136 @@ public class KafkaConsumerService {
try { try {
Optional<?> messages = Optional.ofNullable(record.value()); Optional<?> messages = Optional.ofNullable(record.value());
if (messages.isPresent()) { if (messages.isPresent()) {
JSONObject messageObj = JSONObject.fromObject(record.value()); // JSONObject messageObj = JSONObject.fromObject(record.value());
if (messageObj.getJSONObject(BODY).isEmpty()) { // if (messageObj.getJSONObject(BODY).isEmpty()) {
messageObj.put(DATA_TYPE, STATE); // messageObj.put(DATA_TYPE, STATE);
} // }
emqKeeper.getMqttClient().publish(MQTT_TOPIC, messageObj.toString().getBytes(StandardCharsets.UTF_8), 0, false); // JSONObject object = JSONObject.fromObject(record.value());
// String json = ClassToJsonUtil.class2json(object, commonMessage, MQTT_TOPIC);
// emqKeeper.getMqttClient().publish(MQTT_TOPIC, json.getBytes(StandardCharsets.UTF_8), 0, false);
JSONObject object = JSONObject.fromObject(record.value());
com.alibaba.fastjson.JSONObject jsonObj = ClassToJsonUtil.class2json(object, commonMessage, record.topic());
emqKeeper.getMqttClient().publish(String.valueOf(jsonObj.get("mqTopic")), JSON.toJSONString(jsonObj).getBytes("UTF-8"), 0, false);
} }
} catch (MqttException e) { } catch (MqttException e) {
log.error("换流站转发Kafka消息失败" + e.getMessage(), e); log.error("换流站转发Kafka消息失败" + e.getMessage(), e);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} finally { } finally {
ack.acknowledge(); ack.acknowledge();
} }
} }
@KafkaListener(id = "kafkaConsumerEventAlarm", groupId = "kafkaConsumerGroupEventAlarm", topics = "#{'${queue.kafka.eventAlarm.topics}'.split(',')}", containerFactory = "kafkaRomaContainerFactory")
public void kafkaConsumerEventAlarm(ConsumerRecord<?, String> record, Acknowledgment ack) {
Optional<?> message = Optional.ofNullable(record.value());
if (message.isPresent()) {
try {
// JSONObject messageObj = JSONObject.fromObject(record.value());
// JSONArray dataArray = messageObj.getJSONArray("data");
// JSONArray jsonArray = new JSONArray();
// String timestamp = "";
// for (Object obj : dataArray) {
// JSONObject finallyObj = new JSONObject();
// com.alibaba.fastjson.JSONObject detail = com.alibaba.fastjson.JSONObject.parseObject(com.alibaba.fastjson.JSONObject.toJSONString(obj));
// finallyObj.put("eventtextL1", detail.get("description"));
// finallyObj.put("pointId", detail.get("astId"));
// finallyObj.put("time", detail.get("dateTime"));
// jsonArray.add(finallyObj);
// timestamp = detail.get("dateTime").toString();
// }
// JSONObject jsonObjectMessage = new JSONObject();
// jsonObjectMessage.put("warns", jsonArray);
// jsonObjectMessage.put("timestamp", timestamp);
// JSONObject object = JSONObject.fromObject(record.value());
// String json = ClassToJsonUtil.class2json(object, commonMessage, MQTT_TOPIC_EVENT_ALARM);
// emqKeeper.getMqttClient().publish(MQTT_TOPIC_EVENT_ALARM, json.getBytes(StandardCharsets.UTF_8), 0, false);
JSONObject object = JSONObject.fromObject(record.value());
com.alibaba.fastjson.JSONObject jsonObj = ClassToJsonUtil.class2json(object, commonMessage, record.topic());
emqKeeper.getMqttClient().publish(String.valueOf(jsonObj.get("mqTopic")), JSON.toJSONString(jsonObj).getBytes("UTF-8"), 0, false);
ack.acknowledge();
} catch (MqttException e) {
log.error("解析数据失败,{}", e.getMessage());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
//
// /**
// * 韶山换流对接Kafka
// * @param record record
// * @param ack ack
// */
// @KafkaListener(id = "kafkaConsumer", groupId = "kafkaConsumerGroup", topics = "#{'${queue.kafka.shaoshan.topics}'.split(',')}", containerFactory = "kafkaRomaContainerFactory")
// public void kafkaConsumer(ConsumerRecord<?, String> record, Acknowledgment ack) {
// Optional<?> message = Optional.ofNullable(record.value());
// if (message.isPresent()) {
// try {
//// JSONObject messageObj = JSONObject.fromObject(record.value());
//// JSONObject data = messageObj.getJSONObject("body");
//// JSONObject object = JSONObject.fromObject(record.value());
//// String json = ClassToJsonUtil.class2json(object, commonMessage, MQTT_TOPIC_EVENT_ALARM);
//// emqKeeper.getMqttClient().publish(MQTT_TOPIC_EVENT_ALARM, json.getBytes(StandardCharsets.UTF_8), 0, false);
//
// JSONObject object = JSONObject.fromObject(record.value());
// com.alibaba.fastjson.JSONObject jsonObj = ClassToJsonUtil.class2json(object, commonMessage, record.topic());
// emqKeeper.getMqttClient().publish(String.valueOf(jsonObj.get("mqTopic")), JSON.toJSONString(jsonObj).getBytes("UTF-8"), 0, false);
// ack.acknowledge();
// } catch (MqttException e) {
// log.error("解析数据失败,{}", e.getMessage());
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
// }
// }
//
// /**
// * 事件告警对接Kafka
// * @param record record
// * @param ack ack
// * groupId = kafkaConsumerGroup
// * 该消息的消息格式为
// * {"data_class":"realdata","data_type":"alarm","op_type":"subscribe_emergency","condition":{"station_psr_id":"50edcb6c1b8a811030493c80a2014950ed9d4f59e8","station_name":"中州换流站","alarm_type":"yx_bw"},"data":[{"psrId":"D017020000000000000000999","astId":"D017020000000000000000999","equipType":"ASTType_0000111","eventType":"OtherSignal","alarmSource":"OWS","alarmLevel":"3","description":"2024-03-11 09:06:17::585 S2WCL12A E3.C01软水器再生结束信号 出现","dateTime":"2024-03-11 09:06:17.585"}]}
// */
//
// @KafkaListener(id = "kafkaConsumerEventAlarm", groupId = "kafkaConsumerGroupEventAlarm", topics = "#{'${queue.kafka.eventAlarm.topics}'.split(',')}", containerFactory = "kafkaRomaContainerFactory")
// public void kafkaConsumerEventAlarm(ConsumerRecord<?, String> record, Acknowledgment ack) {
// Optional<?> message = Optional.ofNullable(record.value());
// if (message.isPresent()) {
// try {
//// JSONObject messageObj = JSONObject.fromObject(record.value());
//// JSONArray dataArray = messageObj.getJSONArray("data");
//// JSONArray jsonArray = new JSONArray();
//// String timestamp = "";
//// for (Object obj : dataArray) {
//// JSONObject finallyObj = new JSONObject();
//// com.alibaba.fastjson.JSONObject detail = com.alibaba.fastjson.JSONObject.parseObject(com.alibaba.fastjson.JSONObject.toJSONString(obj));
//// finallyObj.put("eventtextL1", detail.get("description"));
//// finallyObj.put("pointId", detail.get("astId"));
//// finallyObj.put("time", detail.get("dateTime"));
//// jsonArray.add(finallyObj);
//// timestamp = detail.get("dateTime").toString();
//// }
//// JSONObject jsonObjectMessage = new JSONObject();
//// jsonObjectMessage.put("warns", jsonArray);
//// jsonObjectMessage.put("timestamp", timestamp);
//
// JSONObject object = JSONObject.fromObject(record.value());
// com.alibaba.fastjson.JSONObject jsonObj = ClassToJsonUtil.class2json(object, commonMessage, record.topic());
// emqKeeper.getMqttClient().publish(String.valueOf(jsonObj.get("mqTopic")), JSON.toJSONString(jsonObj).getBytes("UTF-8"), 0, false);
// ack.acknowledge();
// } catch (MqttException e) {
// log.error("解析数据失败,{}", e.getMessage());
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
// }
// }
///** ///**
// * 消费单条消息,topics 可以监听多个topic,如:topics = {"topic1", "topic2"} // * 消费单条消息,topics 可以监听多个topic,如:topics = {"topic1", "topic2"}
......
package com.yeejoin.amos.message.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.io.Resource;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author keyong
* @title: ClassToJsonUtil
* <pre>
* @description: TODO
* </pre>
* @date 2024/4/11 11:28
*/
public class ClassToJsonUtil {
private static Map<String, Object> map = new HashMap<>();
public static JSONObject class2json(Object obj, Resource commonMessage, String topic) {
String json;
try {
json = IOUtils.toString(commonMessage.getInputStream(), String.valueOf(StandardCharsets.UTF_8));
} catch (IOException e) {
throw new RuntimeException("获取kafka信息模板失败!");
}
List<Map> listModel = JSONObject.parseArray(json, Map.class);
if (0 < listModel.size()) {
List<Map> mapList = listModel.stream().filter(x -> String.valueOf(x.get("kafkaTopic")).equalsIgnoreCase(topic)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(mapList)) {
Map<String, Object> map1 = mapList.get(0);
JSONObject object = JSON.parseObject(String.valueOf(obj));
analysisJson(object, "");
JSONObject res = analyseJson(JSON.toJSONString(map1), map);
res.put("kafkaTopic", map1.get("kafkaTopic"));
res.put("mqTopic", map1.get("mqTopic"));
return res;
}
}
return null;
}
private static JSONObject analysisJson(Object objJson, String flag) {
if (objJson instanceof JSONArray) {//如果obj为json数组
JSONArray objArray = (JSONArray) objJson;
for (int i = 0; i < objArray.size(); i++) {
analysisJson(objArray.get(i), flag);
}
} else if (objJson instanceof JSONObject) {//如果为json对象
JSONObject jsonObject = (JSONObject) objJson;
Iterator it = jsonObject.keySet().iterator();
while (it.hasNext()) {
String key = it.next().toString();
Object object = jsonObject.get(key);
//如果得到的是数组
if (object instanceof JSONArray) {
JSONArray objArray = (JSONArray) object;
String path = "";
if (StringUtils.isNotBlank(flag)) {
path = flag + "." + key;
} else {
path = key;
}
analysisJson(objArray, path);
} else if (object instanceof JSONObject) {//如果key中是一个json对象
String path = "";
if (StringUtils.isNotBlank(flag)) {
path = flag + "." + key;
} else {
path = key;
}
analysisJson((JSONObject) object, path);
} else {//如果key中是其他
String path = "";
if (StringUtils.isNotBlank(flag)) {
path = flag + "." + key;
} else {
path = key;
}
// System.out.println(path+":"+object.toString()+" ");
map.put(path, String.valueOf(object));
}
}
} else {//如果key中是其他
// System.out.println(flag+":"+objJson.toString()+" ");
map.put(flag, String.valueOf(objJson));
}
return JSONObject.parseObject(JSON.toJSONString(map));
}
public static JSONObject analyseJson(String jsonData, Map<String, Object> keyMap) {
SortedMap<String, Object> map = new TreeMap<>();
JSONObject jsonObject = JSON.parseObject(jsonData);
for (String key : jsonObject.keySet()) {
String resKey = keyMap.get(key) == null ? key : String.valueOf(keyMap.get(key));
Object value = jsonObject.get(key);
if (value instanceof JSONArray) {
JSONArray jsonArray = new JSONArray(new LinkedList<>());
JSONArray array = jsonObject.getJSONArray(key);
for (int i = 0; i < array.size(); i++) {
Object object = array.get(i);
if (object instanceof String) {
map.put(resKey, array);
} else {
JSONObject sortJson = analyseJson(String.valueOf(object), keyMap);
jsonArray.add(sortJson);
map.put(resKey, jsonArray);
}
}
} else if (value instanceof JSONObject) {
JSONObject sortJson = analyseJson(String.valueOf(value), keyMap);
map.put(resKey, sortJson);
} else {
map.put(resKey, ObjectUtils.isNotEmpty(keyMap.get(value)) ? keyMap.get(value) : "");
}
}
return new JSONObject(map);
}
}
#\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740 #\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740
eureka.client.service-url.defaultZone =http://172.16.11.201:10001/eureka/ #eureka.client.service-url.defaultZone =http://172.16.11.201:10001/eureka/
eureka.instance.prefer-ip-address=true eureka.instance.prefer-ip-address=true
management.endpoint.health.show-details=always management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=* management.endpoints.web.exposure.include=*
...@@ -7,14 +7,26 @@ eureka.instance.health-check-url-path=/actuator/health ...@@ -7,14 +7,26 @@ eureka.instance.health-check-url-path=/actuator/health
eureka.instance.metadata-map.management.context-path=${server.servlet.context-path}/actuator eureka.instance.metadata-map.management.context-path=${server.servlet.context-path}/actuator
eureka.instance.status-page-url-path=/actuator/info eureka.instance.status-page-url-path=/actuator/info
eureka.instance.metadata-map.management.api-docs=http://172.16.11.201:${server.port}${server.servlet.context-path}/swagger-ui.html eureka.instance.metadata-map.management.api-docs=http://172.16.11.201:${server.port}${server.servlet.context-path}/swagger-ui.html
#服务实例ip地址,若eureka.instance.prefer-ip-address=false,ip-address设置失效,一般情况不用设置。
#eureka.instance.ip-address= 172.16.3.135
#eureka服务ip配置,可填写固定ip地址
eureka.instance.hostname=172.16.11.201
#eureka服务配置的校验账号及密码,配置需和eureka服务后台配置文件中一致
spring.security.user.name=admin
spring.security.user.password=a1234560
eureka.client.serviceUrl.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:10001/eureka/
##########eureka配置信息###############
# kafka\u96C6\u7FA4\u4FE1\u606F # kafka\u96C6\u7FA4\u4FE1\u606F
spring.kafka.bootstrap-servers=172.16.10.215:9092 spring.kafka.bootstrap-servers=172.16.10.241:9092
# \u751F\u4EA7\u8005\u914D\u7F6E # \u751F\u4EA7\u8005\u914D\u7F6E
# \u8BBE\u7F6E\u5927\u4E8E0\u7684\u503C\uFF0C\u5219\u5BA2\u6237\u7AEF\u4F1A\u5C06\u53D1\u9001\u5931\u8D25\u7684\u8BB0\u5F55\u91CD\u65B0\u53D1\u9001 # \u91CD\u8BD5\u6B21\u6570 # \u8BBE\u7F6E\u5927\u4E8E0\u7684\u503C\uFF0C\u5219\u5BA2\u6237\u7AEF\u4F1A\u5C06\u53D1\u9001\u5931\u8D25\u7684\u8BB0\u5F55\u91CD\u65B0\u53D1\u9001 # \u91CD\u8BD5\u6B21\u6570
spring.kafka.producer.retries=1 spring.kafka.producer.retries=1
spring.kafka.producer.bootstrap-servers=172.16.10.215:9092 spring.kafka.producer.bootstrap-servers=172.16.10.241:9092
#16K #16K
spring.kafka.producer.batch-size=16384 spring.kafka.producer.batch-size=16384
spring.kafka.producer.buffer-memory=33554432 spring.kafka.producer.buffer-memory=33554432
...@@ -42,7 +54,7 @@ spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.Str ...@@ -42,7 +54,7 @@ spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.Str
# latest:\u91CD\u7F6E\u4E3A\u5206\u533A\u4E2D\u6700\u65B0\u7684offset(\u6D88\u8D39\u5206\u533A\u4E2D\u65B0\u4EA7\u751F\u7684\u6570\u636E) # latest:\u91CD\u7F6E\u4E3A\u5206\u533A\u4E2D\u6700\u65B0\u7684offset(\u6D88\u8D39\u5206\u533A\u4E2D\u65B0\u4EA7\u751F\u7684\u6570\u636E)
# none:\u53EA\u8981\u6709\u4E00\u4E2A\u5206\u533A\u4E0D\u5B58\u5728\u5DF2\u63D0\u4EA4\u7684offset,\u5C31\u629B\u51FA\u5F02\u5E38 # none:\u53EA\u8981\u6709\u4E00\u4E2A\u5206\u533A\u4E0D\u5B58\u5728\u5DF2\u63D0\u4EA4\u7684offset,\u5C31\u629B\u51FA\u5F02\u5E38
spring.kafka.consumer.group-id=zhTestGroup spring.kafka.consumer.group-id=zhTestGroup
spring.kafka.consumer.bootstrap-servers=172.16.10.215:9092 spring.kafka.consumer.bootstrap-servers=172.16.10.241:9092
spring.kafka.consumer.enable-auto-commit=false spring.kafka.consumer.enable-auto-commit=false
# \u5F53\u5404\u5206\u533A\u4E0B\u6709\u5DF2\u63D0\u4EA4\u7684offset\u65F6\uFF0C\u4ECE\u63D0\u4EA4\u7684offset\u5F00\u59CB\u6D88\u8D39\uFF1B\u65E0\u63D0\u4EA4\u7684offset\u65F6\uFF0C\u4ECE\u5934\u5F00\u59CB\u6D88\u8D39 # \u5F53\u5404\u5206\u533A\u4E0B\u6709\u5DF2\u63D0\u4EA4\u7684offset\u65F6\uFF0C\u4ECE\u63D0\u4EA4\u7684offset\u5F00\u59CB\u6D88\u8D39\uFF1B\u65E0\u63D0\u4EA4\u7684offset\u65F6\uFF0C\u4ECE\u5934\u5F00\u59CB\u6D88\u8D39
# # \u81EA\u52A8\u63D0\u4EA4\u7684\u9891\u7387 \u5355\u4F4D ms # # \u81EA\u52A8\u63D0\u4EA4\u7684\u9891\u7387 \u5355\u4F4D ms
...@@ -98,4 +110,7 @@ system.zxj=false ...@@ -98,4 +110,7 @@ system.zxj=false
#emq.topic=ccs-user-login-info,sync.execute,data/mcb/warning,emq.risk.qrcode.put,emq.risk.qrcode.clean #emq.topic=ccs-user-login-info,sync.execute,data/mcb/warning,emq.risk.qrcode.put,emq.risk.qrcode.clean
queue.kafka.topics=null queue.kafka.topics=null
kafka.auto-startup=false kafka.auto-startup=false
\ No newline at end of file
#浜嬩欢鍛婅瀵规帴Kafka涓婚
queue.kafka.eventAlarm.topics=JKXT2BP-GJ-Topic-site
[
{
"kafkaTopic": "T_DC_MQ_REALDATA__guanggu",
"mqTopic": "romaSite/data/transmit",
"data": {
"dataType": "body.datatype",
"value": "body.value",
"timeStamp": "body.time_stamp",
"quality": "body.quality",
"scadaId": "body.key",
"key": "body.key",
"disCreate": "body.station_psr_id",
"name": "body.name"
}
},
{
"kafkaTopic": "T_DC_MQ_ALARM__guanggu",
"mqTopic": "romaSite/data/eventAlarm",
"data": {
"timeStamp": "body.warns.time",
"warns": [
{
"eventTextL1": "body.warns.systemid",
"pointId": "body.warns.pointId",
"time": "body.warns.type",
"deviceId": "deviceId",
"eventstatus": "body.warns.content"
}
]
}
}
]
\ No newline at end of file
...@@ -21,5 +21,6 @@ ...@@ -21,5 +21,6 @@
<module>amos-boot-utils-video</module> <module>amos-boot-utils-video</module>
<module>amos-boot-utils-speech</module> <module>amos-boot-utils-speech</module>
<module>amos-boot-utils-message</module> <module>amos-boot-utils-message</module>
<module>amos-boot-utils-adpter</module>
</modules> </modules>
</project> </project>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment