Commit 531d50d7 authored by tangwei's avatar tangwei

Merge branch 'developer' of http://39.98.45.134:8090/moa/amos-boot-biz into developer

parents 8c26c0f4 2c85d0ab
......@@ -13,7 +13,8 @@ public enum RuleTypeEnum {
计划提交("计划提交", "addPlan","auditPage", RuleConstant.WEB, RuleConstant.TASK),
计划审核("计划审核", "planAudit", "auditPage", RuleConstant.APP_WEB, RuleConstant.NOTIFY),
计划审核完成("计划审核完成", "planAuditAll", "formulatePage", RuleConstant.APP_WEB, RuleConstant.TASK),
计划生成("计划生成", "addPlanTask", null, RuleConstant.APP, RuleConstant.NOTIFY),
消息型计划生成("计划生成", "addPlanTask", null, RuleConstant.APP, RuleConstant.NOTIFY),
任务型计划生成("计划生成", "addPlanTask", null, RuleConstant.APP, RuleConstant.TASK),
计划完成("计划完成", "planCompleted", null, RuleConstant.APP_WEB, RuleConstant.NOTIFY),
// 隐患
......
......@@ -25,6 +25,10 @@ public class SourceScene extends BaseEntity {
@ApiModelProperty(value = "文件名称")
@TableField("source_name")
private String sourceName;
@ApiModelProperty(value = "数据源类型:building(建筑类),system(系统类)")
@TableField("source_type")
private String sourceType;
@ApiModelProperty(value = "组态工程id")
@TableField("project_id")
......
package com.yeejoin.amos.boot.module.tzs.api.dto;
import java.io.Serializable;
import com.yeejoin.amos.component.rule.Label;
import com.yeejoin.amos.component.rule.RuleFact;
import lombok.Data;
@RuleFact(value = "气瓶预警消息",project = "气瓶监管")
@Data
public class CylWarningMsgDto implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Label("企业名称")
private String companyName;
@Label("企业联系人")
private String people;
@Label("企业联系人电话")
private String phone;
@Label("使用人类型")
private String userType;
@Label("气瓶使用人")
private String userPeople;
@Label("使用人电话")
private String userPeoplePhone;
@Label("出厂编号")
private String factoryNum;
@Label("预警值")
private String num;
@Label("气瓶seq")
private String cylSeq;
}
package com.yeejoin.amos.boot.module.tzs.api.dto;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 消息流水表
*
* @author system_generator
* @date 2022-04-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "MsgLogDto", description = "消息流水表")
public class MsgLogDto extends BaseDto {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "关联编号")
private String relationCode;
@ApiModelProperty(value = "消息类型(超期预警、许可超期、风险预警)")
private String msgType;
@ApiModelProperty(value = "消息类型名称")
private String msgTypeName;
@ApiModelProperty(value = "消息内容")
private String body;
@ApiModelProperty(value = "接收者账号")
private String targetCode;
@ApiModelProperty(value = "接收者名称")
private String targetName;
@ApiModelProperty(value = "发送日期")
private Date sendTime;
@ApiModelProperty(value = "站端类型: WEB,APP")
private String terminalType;
}
......@@ -54,4 +54,6 @@ public class SpecialEquipmentDto {
@ApiModelProperty(value = "内部编码")
private String innerNum;
@ApiModelProperty(value = "产权单位")
private String unitName;
}
package com.yeejoin.amos.boot.module.tzs.api.entity;
import lombok.Data;
import lombok.experimental.Accessors;
import org.elasticsearch.common.geo.GeoPoint;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.elasticsearch.annotations.GeoPointField;
/**
* @author tb
* @date 2022-04-20.
*/
@Data
@Accessors(chain = true)
@Document(indexName = "cylinder", replicas = 0)
public class EsCylinder {
/**
* 主键
*/
@Id
private Long sequenceNbr;
/**
* 气瓶出厂编号
*/
@Field(type = FieldType.Text)
private String factoryNum;
// /**
// * 所属省
// */
// @Field(type = FieldType.Text)
// private String province;
//
// /**
// * 所属地市
// */
// @Field(type = FieldType.Text)
// private String city;
//
// /**
// * 所属区县
// */
// @Field(type = FieldType.Text)
// private String district;
//
// /**
// * 所属区域代码
// */
// @Field(type = FieldType.Text, searchAnalyzer = "ik_max_word", analyzer = "ik_max_word")
// private String regionCode;
/**
* 产权单位名称
*/
@Field(type = FieldType.Text)
private String unitName;
/**
* 经度
*/
@Field(type = FieldType.Double)
private Double longitude;
/**
* 纬度
*/
@Field(type = FieldType.Double)
private Double latitude;
/**
* 经纬度字段
*/
@GeoPointField
private GeoPoint location;
/**
* 地址
*/
@Field(type = FieldType.Text, searchAnalyzer = "ik_max_word", analyzer = "ik_max_word")
private String address;
}
package com.yeejoin.amos.boot.module.tzs.api.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.naming.ldap.PagedResultsControl;
import java.util.Date;
/**
* 消息流水表
*
* @author system_generator
* @date 2022-04-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("tz_msg_log")
public class MsgLog extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 关联编号
*/
@TableField("relation_code")
private String relationCode;
/**
* 消息类型(超期预警、许可超期、风险预警)
*/
@TableField("msg_type")
private String msgType;
/**
* 消息类型名称
*/
private String msgTypeName;
/**
* 消息内容
*/
@TableField("body")
private String body;
/**
* 接收者账号
*/
@TableField("target_code")
private String targetCode;
/**
* 接收者名称
*/
@TableField("target_name")
private String targetName;
/**
* 发送日期
*/
@TableField("send_time")
private Date sendTime;
/**
* 站端类型: WEB,APP
*/
private String terminalType;
}
package com.yeejoin.amos.boot.module.tzs.api.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
/**
* @author DELL
*/
@AllArgsConstructor
@Getter
public enum EarlyWarningLevelEnum {
/**
* 预警等级枚举
*
*/
EARLY_WARNING_FIRST_LEVEL("一级预警", "1", "即将超期", "earlyWarning_firstLevel"),
EARLY_WARNING_SECOND_LEVEL("二级预警", "2", "即将超期", "earlyWarning_secondLevel"),
EARLY_WARNING_THREE_LEVEL("三级预警", "3", "已超期", "earlyWarning_threeLevel");
private String name;
private String level;
private String status;
private String code;
public static EarlyWarningLevelEnum getEumByLevel(String level) {
Optional<EarlyWarningLevelEnum> op = Arrays.stream(EarlyWarningLevelEnum.values()).filter(e -> e.getLevel().equals(level)).findFirst();
return op.orElseThrow(() -> new RuntimeException("未知的类型"));
}
}
package com.yeejoin.amos.boot.module.tzs.api.enums;
/**
* <pre>
* 特种设备类别枚举
* </pre>
*
* @author tb
*/
public enum SpecialEquipmentCategoryEnum {
ELEVATOR("3000", "电梯"),
PRESSURE_VESSEL("2000", "压力容器");
/**
* 编码
*/
private String code;
/**
* 名称
*/
private String name;
// 构造方法
SpecialEquipmentCategoryEnum(String code, String name) {
this.code = code;
this.name = name;
}
public static SpecialEquipmentCategoryEnum getEnum(String code) {
for (SpecialEquipmentCategoryEnum specialEquipmentCategoryEnum : SpecialEquipmentCategoryEnum.values()) {
if (specialEquipmentCategoryEnum.getCode().equals(code)) {
return specialEquipmentCategoryEnum;
}
}
return null;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
}
package com.yeejoin.amos.boot.module.tzs.api.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author DELL
*/
@AllArgsConstructor
@Getter
public enum TerminalTypeEnum {
/**
* 终端类型
*/
TERMINAL_TYPE_WEB("WEB"),
TERMINAL_TYPE_APP("APP");
private String code;
}
package com.yeejoin.amos.boot.module.tzs.api.mapper;
import com.yeejoin.amos.boot.module.tzs.api.entity.MsgLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 消息流水表 Mapper 接口
*
* @author system_generator
* @date 2022-04-20
*/
public interface MsgLogMapper extends BaseMapper<MsgLog> {
}
package com.yeejoin.amos.boot.module.tzs.api.service;
/**
* 消息流水表接口类
*
* @author system_generator
* @date 2022-04-20
*/
public interface IMsgLogService {
}
package com.yeejoin.amos.boot.module.tzs.flc.api.dto;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.List;
......@@ -16,10 +17,10 @@ import java.util.List;
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="CylinderInfoDto", description="气瓶基本信息")
public class CylinderInfoDto extends BaseDto {
@ApiModel(value = "CylinderInfoDto", description = "气瓶基本信息")
public class CylinderInfoDto extends BaseDto {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "气瓶基本信息ID")
......@@ -103,7 +104,43 @@ public class CylinderInfoDto extends BaseDto {
@ApiModelProperty(value = "查询单位appid")
private List<String> appIds;
@ApiModelProperty(value = "检验状态 0 已超期 1 正常 2 即将超期")
@ApiModelProperty(value = "检验状态 0 已超期 1 正常 2 即将超期")
private int inspectionStatas;
@ApiModelProperty(value = "检验状态描述")
private String inspectionStatusDesc;
@ApiModelProperty(value = "预警等级")
private String earlyWarningLevel;
@ApiModelProperty(value = "预警等级名称")
private String earlyWarningLevelName;
@ApiModelProperty(value = "最近配送地址")
private String address;
@ApiModelProperty(value = "最近预警时间")
private Date earlyWarningLevelCalDate;
@ApiModelProperty(value = "经度")
private String longitude;
@ApiModelProperty(value = "纬度")
private String latitude;
@ApiModelProperty(value = "客户名称")
private String customType;
@ApiModelProperty(value = "客户类型")
private String customName;
@ApiModelProperty(value = "联系电话")
private String contactPhone;
@ApiModelProperty(value = "企业负责人手机")
private String personMobilePhone;
@ApiModelProperty(value = "企业负责人")
private String unitPerson;
}
package com.yeejoin.amos.boot.module.tzs.flc.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 气瓶终端用户
*
* @author system_generator
* @date 2022-04-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="EndUserDto", description="气瓶终端用户")
public class EndUserDto extends BaseDto {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "客户编号")
private String customCode;
@ApiModelProperty(value = "客户名称")
private String customName;
@ApiModelProperty(value = "客户类型")
private String customType;
@ApiModelProperty(value = "开户类型")
private String accountType;
@ApiModelProperty(value = "联系人")
private String contact;
@ApiModelProperty(value = "联系电话")
private String contactPhone;
@ApiModelProperty(value = "客户地址")
private String address;
@ApiModelProperty(value = "充装单位")
private String fillingUnit;
@ApiModelProperty(value = "所属机构")
private String affiliation;
@ApiModelProperty(value = "上次下单时间")
private Date lastOrderDate;
@ApiModelProperty(value = "配送员")
private String delivery;
@ApiModelProperty(value = "配送员电话")
private String deliveryPhone;
@ApiModelProperty(value = "钢瓶码")
private String cylinderCode;
@ApiModelProperty(value = "芯片号")
private String chipCode;
@ApiModelProperty(value = "经度")
private String longitude;
@ApiModelProperty(value = "纬度")
private String latitude;
}
......@@ -159,4 +159,32 @@ public class CylinderInfo {
*/
@TableField("integrity")
private Double integrity;
/**
* 预警等级
*/
private String earlyWarningLevel;
/**
* 预警等级 计算日期
*/
private Date earlyWarningLevelCalDate;
/**
* 经度
*/
@TableField("longitude")
private String longitude;
/**
* 纬度
*/
@TableField("latitude")
private String latitude;
/**
* 最近气瓶使用客户编号
*/
@TableField("end_custom_code")
private String endCustomCode;
}
package com.yeejoin.amos.boot.module.tzs.flc.api.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* 气瓶终端用户
*
* @author system_generator
* @date 2022-04-21
*/
@Data
@EqualsAndHashCode()
@Accessors(chain = true)
@TableName("tz_end_user")
public class EndUser {
private static final long serialVersionUID = 1L;
@TableId(value = "sequence_nbr", type = IdType.ID_WORKER)
protected Long sequenceNbr;
@TableField(value = "rec_date", fill = FieldFill.INSERT_UPDATE)
protected Date recDate;
@TableField(value = "rec_user_id", fill = FieldFill.INSERT_UPDATE)
protected String recUserId;
/**
* 客户编号
*/
@TableField("custom_code")
private String customCode;
/**
* 客户名称
*/
@TableField("custom_name")
private String customName;
/**
* 客户类型
*/
@TableField("custom_type")
private String customType;
/**
* 开户类型
*/
@TableField("account_type")
private String accountType;
/**
* 联系人
*/
@TableField("contact")
private String contact;
/**
* 联系电话
*/
@TableField("contact_phone")
private String contactPhone;
/**
* 客户地址
*/
@TableField("address")
private String address;
/**
* 充装单位
*/
@TableField("filling_unit")
private String fillingUnit;
/**
* 所属机构
*/
@TableField("affiliation")
private String affiliation;
/**
* 上次下单时间
*/
@TableField("last_order_date")
private Date lastOrderDate;
/**
* 配送员
*/
@TableField("delivery")
private String delivery;
/**
* 配送员电话
*/
@TableField("delivery_phone")
private String deliveryPhone;
/**
* 钢瓶码
*/
@TableField("cylinder_code")
private String cylinderCode;
/**
* 芯片号
*/
@TableField("chip_code")
private String chipCode;
/**
* 经度
*/
@TableField("longitude")
private String longitude;
/**
* 纬度
*/
@TableField("latitude")
private String latitude;
}
package com.yeejoin.amos.boot.module.tzs.flc.api.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.tzs.flc.api.dto.CylinderInfoDto;
import com.yeejoin.amos.boot.module.tzs.flc.api.entity.CylinderInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
......@@ -56,4 +58,11 @@ public interface CylinderInfoMapper extends BaseMapper<CylinderInfo> {
* @return
*/
Integer getMonthBeforeLastInfoTotalUnit(@Param("appId")String appId);
Integer countOverDateNumber(@Param("earlyWarningLevel") String earlyWarningLevel);
Page<CylinderInfoDto> queryPageListByEarlyWarningLevel(Page<CylinderInfoDto> page, @Param("earlyWarningLevel") String earlyWarningLevel);
CylinderInfoDto getDetail(String sequenceCode);
}
package com.yeejoin.amos.boot.module.tzs.flc.api.mapper;
import com.yeejoin.amos.boot.module.tzs.flc.api.entity.EndUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 气瓶终端用户 Mapper 接口
*
* @author system_generator
* @date 2022-04-21
*/
public interface EndUserMapper extends BaseMapper<EndUser> {
}
package com.yeejoin.amos.boot.module.tzs.flc.api.service;
/**
* 气瓶终端用户接口类
*
* @author system_generator
* @date 2022-04-21
*/
public interface IEndUserService {
}
......@@ -53,6 +53,55 @@
<select id="getMonthBeforeLastInfoTotalUnit" resultType="java.lang.Integer">
select IFNULL(count(sequence_nbr), 0) from tz_cylinder_info where PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( sync_date, '%Y%m' ) ) =2 AND app_id = #{appId}
</select>
<select id="countOverDateNumber" resultType="java.lang.Integer">
SELECT
count(1)
FROM `tz_cylinder_info` ci
where
ci.early_warning_level = #{earlyWarningLevel}
</select>
<select id="queryPageListByEarlyWarningLevel"
resultType="com.yeejoin.amos.boot.module.tzs.flc.api.dto.CylinderInfoDto">
select
ci.sequence_code,
ci.unit_name,
ci.factory_num,
ci.inspection_date,
ci.next_inspection_date,
ci.early_warning_level,
ci.early_warning_level_cal_date,
ci.longitude,
ci.latitude,
eu.address
from
tz_cylinder_info ci
left join tz_end_user eu on ci.end_custom_code = eu.custom_code
where
ci.early_warning_level = #{earlyWarningLevel}
order by ci.next_inspection_date
</select>
<select id="getDetail" resultType="com.yeejoin.amos.boot.module.tzs.flc.api.dto.CylinderInfoDto">
select
ci.sequence_code,
ci.unit_name,
ci.inspection_date,
ci.factory_num,
ci.next_inspection_date,
ci.early_warning_level,
ci.early_warning_level_cal_date,
ci.longitude,
ci.latitude,
eu.address,
eu.custom_name,
eu.custom_type,
eu.contact_phone,
cu.person_mobile_phone,
cu.unit_person
from
tz_cylinder_info ci
left join tz_end_user eu on ci.end_custom_code = eu.custom_code
left join tz_cylinder_unit cu on cu.app_id = ci.app_id
where
ci.sequence_code = #{sequenceCode}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.tzs.flc.api.mapper.EndUserMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.tzs.api.mapper.MsgLogMapper">
</mapper>
......@@ -810,7 +810,8 @@ public class TopographyController extends AbstractBaseController {
}
}
}
return CommonResponseUtil.success(list);
List<TopographyIotVo> result = list.stream().sorted(Comparator.comparing(TopographyIotVo::getTime).reversed()).collect(Collectors.toList());
return CommonResponseUtil.success(result);
} else {
logger.error("查询物联日志数据为空或iotCode为 (" + iotCode + ") 的装备不存在于物联系统中!");
return CommonResponseUtil.success();
......
......@@ -238,6 +238,7 @@ public class BuildingServiceImpl extends ServiceImpl<BuildingMapper, Building> i
model.put("id", String.valueOf(System.currentTimeMillis()));
model.put("projectId", String.valueOf(projectSeq));
model.put("creatorId", userId);
model.put("sourceType", "building");
model.put("instanceId", resourceDTO.getCode());
model.put("name", resourceDTO.getName());
this.baseMapper.insetSourceScene(model);
......
......@@ -63,6 +63,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
@Autowired
IEquipmentSpecificIndexService equipmentSpecificIndexService;
@Autowired
private ISyncDataService syncDataService;
......@@ -165,6 +166,7 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
ent.setEquipmentSpecificId(alarmLog.getEquipmentSpecificId());
ent.setEquipmentSpecificIndexKey(alarmLog.getEquipmentSpecificIndexKey());
String cleanType = equipmentSpecificMapper.getEquipmentBySpecificId(alarmLog.getEquipmentSpecificId());
int i = 0 ; // 是否成功标识
if (StringUtil.isNotEmpty(cleanType) && AlarmCleanTypeEnum.QRXC.getCode().equals(cleanType)) {
EquipmentSpecificAlarm alarm = equipmentSpecificAlarmMapper.selectById(alarmLog.getEquipmentSpecificAlarmId());
alarm.setStatus(AlarmStatusEnum.HF.getCode());
......@@ -176,6 +178,12 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
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(), equipmentSpecificAlarmLogService);
}
// 如果是批量确警,先查询,再确警,用于批量消息推送
......
......@@ -31,6 +31,7 @@ import com.yeejoin.equipmanage.mapper.*;
import com.yeejoin.equipmanage.remote.RemoteSecurityService;
import com.yeejoin.equipmanage.service.*;
import org.apache.commons.beanutils.BeanUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
......@@ -48,7 +49,7 @@ import java.net.SocketException;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service
public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSystemMapper, FireFightingSystemEntity>
implements IFireFightingSystemService {
......@@ -353,6 +354,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
sourceScene.setSourceId(systemId);
sourceScene.setSourceName(resourceDTO.getName());
sourceScene.setSceneId(resourceDTO.getId());
sourceScene.setSourceType("system");
}
// TODO 获取画布下 绑定的装备点、摄像头,目前消防系统只能绑定装备,不能绑定摄像头(树未返回摄像头)
List<Map> children = (List<Map>) parse.get("children");
......@@ -637,26 +639,14 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
}
@Override
@Transactional
public Boolean deleteSystem(Long id) {
// QueryWrapper<FormInstance> fqw = new QueryWrapper<>();
// fqw.eq("field_value",id);
// fqw.groupBy("instance_id");
// List<FormInstance> formInstances = formInstanceMapper.selectList(fqw);
// if (formInstances != null && formInstances.size()>0){
// QueryWrapper<FormInstance> one = new QueryWrapper<>();
// one.eq("instance_id",formInstances.get(0).getInstanceId());
// one.eq("field_name","name");
// List<FormInstance> formInstances1 = formInstanceMapper.selectList(one);
// FormInstance formInstance = formInstances1.get(0);
// String name = formInstance.getFieldValue();
// throw new BadRequest(name+"建筑与该系统存在绑定关系,请清除后再进行删除!");
// }
FireFightingSystemEntity entity = baseMapper.selectById(id);
if (entity.getSceneId() != null) {
try {
FeignUtil.remoteCall(() -> Morphic.morphicSubjectClient.delete(entity.getSceneId()));
} catch (Exception e) {
throw new RuntimeException("远程调用 MORPHIC 服务的删除操作出错");
log.error("远程调用 MORPHIC 服务的删除操作出错:"+e.getMessage().toString(),e);
}
}
formInstanceMapper.clearSystemId(id);
......@@ -667,7 +657,11 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
if (i > 0 && syncSwitch) {
syncDataService.syncDeletedFireFightingSystem(Arrays.asList(id));
}
// 删除动态关联表单实例数据
//删除系统图与设备关系表
QueryWrapper<SourceScene> ssWrapper = new QueryWrapper<SourceScene>();
ssWrapper.lambda().eq(SourceScene::getSourceId, id);
sourceSceneMapper.delete(ssWrapper);
//删除动态关联表单实例数据
if (entity.getInstanceId() != null) {
instanceService.remove(new LambdaQueryWrapper<DynamicFormInstance>().eq(DynamicFormInstance::getInstanceId,
entity.getInstanceId()));
......
......@@ -2149,7 +2149,7 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD
finalBuildingAbsolutePositionMap.get(danger.getStructureId().toString()).toString());
}
LatentDangerBizTypeEnum bizTypeEnum = LatentDangerBizTypeEnum.getByCode(danger.getBizType());
if (bizType.equals(danger.getBizType())) {
if (bizType.equals(danger.getBizType()) && !"draft".equals(danger.getDangerState())) {
LatentDangerState.SupervisionDangerStateEnum dangerStateEnum = LatentDangerState.SupervisionDangerStateEnum
.getEnumByCode(danger.getDangerState());
danger.setProcessState(dangerStateEnum.getProcessState());
......
......@@ -9,6 +9,7 @@ import com.yeejoin.amos.supervision.business.dao.repository.IPlanAuditLogDao;
import com.yeejoin.amos.supervision.business.dao.repository.IPlanDao;
import com.yeejoin.amos.supervision.business.feign.JCSFeignClient;
import com.yeejoin.amos.supervision.business.service.intfc.IPlanAuditService;
import com.yeejoin.amos.supervision.business.service.intfc.IPlanTaskService;
import com.yeejoin.amos.supervision.common.enums.CheckTypeSuEnum;
import com.yeejoin.amos.supervision.common.enums.DangerCheckTypeLevelEnum;
import com.yeejoin.amos.supervision.common.enums.PlanStatusEnum;
......@@ -52,7 +53,8 @@ public class PlanAuditServiceImpl implements IPlanAuditService {
@Autowired
JCSFeignClient jcsFeignClient;
@Autowired
IPlanTaskService planTaskService;
@Override
@Transactional
public Boolean auditWorkFlow(PlanAuditLog planAuditLog, Integer status, String condition, ReginParams reginParams) throws Exception {
......@@ -84,6 +86,9 @@ public class PlanAuditServiceImpl implements IPlanAuditService {
planAuditLog.setFlowJson(condition);
planAuditLog.setRoleName(roleName);
planAuditLogDao.save(planAuditLog);
if("导入外部监查隐患".equals(planAuditLog.getFlowTaskName())) {
planTaskService.taskExecutionImportPlan(planAuditLog.getPlanId());
}
planService.getUserIdsByWorkflow(plan, instanceId, status, planAuditLog.getExcuteState());
return Boolean.TRUE;
}
......
......@@ -5,16 +5,15 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.data.domain.Page;
import com.yeejoin.amos.supervision.business.entity.mybatis.CheckChkExListBo;
import com.yeejoin.amos.supervision.business.param.CheckPtListPageParam;
import com.yeejoin.amos.supervision.business.param.PlanTaskPageParam;
import com.yeejoin.amos.supervision.business.vo.CodeOrderVo;
import com.yeejoin.amos.supervision.business.vo.LeavePlanTaskVo;
import com.yeejoin.amos.supervision.business.vo.PlanTaskVo;
import com.yeejoin.amos.supervision.core.common.request.CommonPageable;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Page;
import com.yeejoin.amos.supervision.business.param.CheckPtListPageParam;
import com.yeejoin.amos.supervision.business.param.PlanTaskPageParam;
import com.yeejoin.amos.supervision.core.common.response.AppPointCheckRespone;
import com.yeejoin.amos.supervision.dao.entity.PlanTask;
......@@ -171,4 +170,6 @@ public interface IPlanTaskService {
List<Map<String, Object>> queryPlanTaskTimeAxis(Long userId, Integer createDate);
List<Map<String, Object>> queryTimeAxis(Long userId, Integer createDate);
Boolean taskExecutionImportPlan(Long id);
}
package com.yeejoin.amos.boot.module.tzs.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import java.util.List;
import com.yeejoin.amos.boot.module.tzs.biz.service.impl.MsgLogServiceImpl;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.tzs.api.dto.MsgLogDto;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
/**
* 消息流水表
*
* @author system_generator
* @date 2022-04-20
*/
@RestController
@Api(tags = "消息流水表Api")
@RequestMapping(value = "/msg-log")
public class MsgLogController extends BaseController {
@Autowired
MsgLogServiceImpl msgLogServiceImpl;
/**
* 新增消息流水表
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增消息流水表", notes = "新增消息流水表")
public ResponseModel<MsgLogDto> save(@RequestBody MsgLogDto model) {
model = msgLogServiceImpl.createWithModel(model);
return ResponseHelper.buildResponse(model);
}
/**
* 根据sequenceNbr更新
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新消息流水表", notes = "根据sequenceNbr更新消息流水表")
public ResponseModel<MsgLogDto> updateBySequenceNbrMsgLog(@RequestBody MsgLogDto model,@PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(msgLogServiceImpl.updateWithModel(model));
}
/**
* 根据sequenceNbr删除
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除消息流水表", notes = "根据sequenceNbr删除消息流水表")
public ResponseModel<Boolean> deleteBySequenceNbr(HttpServletRequest request, @PathVariable(value = "sequenceNbr") Long sequenceNbr){
return ResponseHelper.buildResponse(msgLogServiceImpl.removeById(sequenceNbr));
}
/**
* 根据sequenceNbr查询
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET",value = "根据sequenceNbr查询单个消息流水表", notes = "根据sequenceNbr查询单个消息流水表")
public ResponseModel<MsgLogDto> selectOne(@PathVariable Long sequenceNbr) {
return ResponseHelper.buildResponse(msgLogServiceImpl.queryBySeq(sequenceNbr));
}
/**
* 列表分页查询
*
* @param current 当前页
* @param current 每页大小
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET",value = "消息流水表分页查询", notes = "消息流水表分页查询")
public ResponseModel<Page<MsgLogDto>> queryForPage(@RequestParam(value = "current") int current,@RequestParam
(value = "size") int size) {
Page<MsgLogDto> page = new Page<MsgLogDto>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(msgLogServiceImpl.queryForMsgLogPage(page));
}
/**
* 列表全部数据查询
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET",value = "消息流水表列表全部数据查询", notes = "消息流水表列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<MsgLogDto>> selectForList() {
return ResponseHelper.buildResponse(msgLogServiceImpl.queryForMsgLogList());
}
}
......@@ -26,9 +26,11 @@ import com.yeejoin.amos.boot.module.tzs.api.entity.Elevator;
import com.yeejoin.amos.boot.module.tzs.api.entity.EquipmentRegionNum;
import com.yeejoin.amos.boot.module.tzs.api.entity.MaintainInfo;
import com.yeejoin.amos.boot.module.tzs.api.entity.TestInfo;
import com.yeejoin.amos.boot.module.tzs.api.enums.SpecialEquipmentCategoryEnum;
import com.yeejoin.amos.boot.module.tzs.api.service.IElevatorRelationService;
import com.yeejoin.amos.boot.module.tzs.api.service.IElevatorService;
import com.yeejoin.amos.boot.module.tzs.api.service.TzsAuthService;
import com.yeejoin.amos.boot.module.tzs.biz.service.impl.ESCylinderServiceImpl;
import com.yeejoin.amos.boot.module.tzs.biz.service.impl.ESElevatorServiceImpl;
import com.yeejoin.amos.boot.module.tzs.biz.service.impl.ElevatorServiceImpl;
import com.yeejoin.amos.boot.module.tzs.biz.service.impl.EquipmentRegionNumServiceImpl;
......@@ -112,6 +114,9 @@ public class SpecialEquipmentController extends BaseController {
@Autowired
EquipmentRegionNumServiceImpl equipmentRegionNumServiceImpl;
@Autowired
ESCylinderServiceImpl esCylinderService;
/**
* ES查询特种设备信息 带分页 加经纬度过滤 keyword 搜索
......@@ -128,9 +133,12 @@ public class SpecialEquipmentController extends BaseController {
throw new BadRequest("参数校验失败.");
}
if(StringUtils.isNotBlank(esSpecialEquipmentDto.getCategoryCode())) { // 查找特定设备
if("3000".equals(esSpecialEquipmentDto.getCategoryCode())) {
if(SpecialEquipmentCategoryEnum.ELEVATOR.getCode().equals(esSpecialEquipmentDto.getCategoryCode())) {
result = esElevatorService.queryPageByDto(esSpecialEquipmentDto, current, size);
}
if(SpecialEquipmentCategoryEnum.PRESSURE_VESSEL.getCode().equals(esSpecialEquipmentDto.getCategoryCode())) {
result = esCylinderService.queryPageByDto(esSpecialEquipmentDto, current, size);
}
}
return ResponseHelper.buildResponse(result);
}
......
package com.yeejoin.amos.boot.module.tzs.biz.dao;
import com.yeejoin.amos.boot.module.tzs.api.entity.EsCylinder;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
/**
* @author fengwang
* @date 2021-09-26.
*/
@Repository
public interface ESCylinderRepository extends PagingAndSortingRepository<EsCylinder, Long> {
}
package com.yeejoin.amos.boot.module.tzs.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.yeejoin.amos.boot.module.tzs.api.dto.EsSpecialEquipmentDto;
import com.yeejoin.amos.boot.module.tzs.api.dto.SpecialEquipmentDto;
import com.yeejoin.amos.boot.module.tzs.api.entity.EsCylinder;
import com.yeejoin.amos.boot.module.tzs.api.enums.SpecialEquipmentCategoryEnum;
import com.yeejoin.amos.boot.module.tzs.biz.dao.ESCylinderRepository;
import com.yeejoin.amos.boot.module.tzs.flc.api.entity.CylinderInfo;
import com.yeejoin.amos.boot.module.tzs.flc.api.entity.EndUser;
import com.yeejoin.amos.boot.module.tzs.flc.biz.service.impl.EndUserServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.LinkedList;
import java.util.List;
/**
* <pre>
* 压力容器信息ES检索服务
* </pre>
*
* @author tb
* @version 2022年4月20日
*/
@Service
public class ESCylinderServiceImpl {
@Autowired
private ElasticsearchRestTemplate elasticsearchTemplate;
@Autowired
private ESCylinderRepository esCylinderRepository;
@Autowired
private EndUserServiceImpl endUserService;
/**
* <pre>
* 保存气瓶信息
* </pre>
*
* @param cylinderInfoList 保存气瓶信息
*/
public boolean saveEsCylinderToES(List<CylinderInfo> cylinderInfoList) {
List<EsCylinder> esCylinderList = Lists.newArrayList();
if (!ValidationUtil.isEmpty(cylinderInfoList)) {
cylinderInfoList.forEach(cylinderInfo -> {
EsCylinder esCylinder = new EsCylinder();
if (StringUtils.isNotEmpty(cylinderInfo.getLongitude())) {
esCylinder.setLongitude(Double.parseDouble(cylinderInfo.getLongitude()));
}
if (StringUtils.isNotEmpty(cylinderInfo.getLatitude())) {
esCylinder.setLatitude(Double.parseDouble(cylinderInfo.getLatitude()));
}
esCylinder.setSequenceNbr(cylinderInfo.getSequenceNbr());
EndUser endUser = endUserService.getOne(new LambdaQueryWrapper<EndUser>().eq(EndUser::getCustomCode,
cylinderInfo.getEndCustomCode()));
if (!ValidationUtil.isEmpty(endUser)) {
esCylinder.setAddress(endUser.getAddress());
}
esCylinder.setFactoryNum(cylinderInfo.getFactoryNum());
esCylinder.setUnitName(cylinderInfo.getUnitName());
if (StringUtils.isNotBlank(cylinderInfo.getLatitude()) && StringUtils.isNotBlank(cylinderInfo.getLongitude())) {
double lat = Double.parseDouble(cylinderInfo.getLatitude());
double lon = Double.parseDouble(cylinderInfo.getLongitude());
esCylinder.setLocation(new GeoPoint(lat, lon));
}
esCylinderList.add(esCylinder);
});
}
esCylinderRepository.saveAll(esCylinderList);
return true;
}
public Page<SpecialEquipmentDto> queryPageByDto(EsSpecialEquipmentDto esSpecialEquipmentDto, int current, int size) {
Page<SpecialEquipmentDto> result = new Page<>(current, size);
Double startLongitude = esSpecialEquipmentDto.getStartLongitude();
Double startLatitude = esSpecialEquipmentDto.getStartLatitude();
Double endLongitude = esSpecialEquipmentDto.getEndLongitude();
Double endLatitude = esSpecialEquipmentDto.getEndLatitude();
String regionCode = esSpecialEquipmentDto.getRegionCode();
String keyword = esSpecialEquipmentDto.getKeyword();
/**
* 通用匹配规则,条件构建
*/
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
// 经度比start 大比end 小 纬度比start 小 比end 大
if (!ValidationUtil.isEmpty(startLongitude) && !ValidationUtil.isEmpty(startLatitude) && !ValidationUtil.isEmpty(endLongitude) && !ValidationUtil.isEmpty(endLatitude)) {
BoolQueryBuilder longLatMust = QueryBuilders.boolQuery();
BoolQueryBuilder qb1 = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("longitude").gte(startLongitude).lte(endLongitude));
BoolQueryBuilder qb2 = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("latitude").gte(endLatitude).lte(startLatitude));
longLatMust.must(qb1);
longLatMust.must(qb2);
boolMust.must(longLatMust);
}
if (!ValidationUtil.isEmpty(regionCode)) {
BoolQueryBuilder qb2 = QueryBuilders.boolQuery().
filter(QueryBuilders.matchPhraseQuery("regionCode", regionCode));
boolMust.must(qb2);
}
if (!ValidationUtil.isEmpty(keyword)) {
BoolQueryBuilder qb0 = QueryBuilders.boolQuery().
must(QueryBuilders.matchQuery("factoryNum", keyword));
boolMust.should(qb0);
BoolQueryBuilder qb1 = QueryBuilders.boolQuery().
must(QueryBuilders.matchQuery("address", keyword));
boolMust.should(qb1);
BoolQueryBuilder qb2 = QueryBuilders.boolQuery().
must(QueryBuilders.matchQuery("unitName", keyword));
boolMust.should(qb2);
boolMust.minimumShouldMatch(1);
}
// 创建查询构造器
NativeSearchQuery query = new NativeSearchQueryBuilder()
// 分页
.withPageable(PageRequest.of(current - 1, size))
// 排序
// .withSort(SortBuilders.fieldSort("callTimeLong").order(SortOrder.DESC))
//过滤条件
.withQuery(boolMust).build();
query.setTrackTotalHits(true);
query.setMaxResults(size);
List<SpecialEquipmentDto> list = new LinkedList<>();
long total = 0;
try {
SearchHits<EsCylinder> searchHits = elasticsearchTemplate.search(query, EsCylinder.class);
for (SearchHit searchHit : searchHits.getSearchHits()) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(searchHit.getContent());
SpecialEquipmentDto esCylinderDto = JSONObject.toJavaObject(jsonObject, SpecialEquipmentDto.class);
esCylinderDto.setCategoryCode(SpecialEquipmentCategoryEnum.PRESSURE_VESSEL.getCode());
esCylinderDto.setUnitName(jsonObject.getString("unitName"));
esCylinderDto.setRegisterCode(jsonObject.getString("factoryNum"));
list.add(esCylinderDto);
}
total = searchHits.getTotalHits();
} catch (Exception e) {
// TODO: handle exception
}
result.setRecords(list);
result.setTotal(total);
return result;
}
}
package com.yeejoin.amos.boot.module.tzs.biz.service.impl;
import com.yeejoin.amos.boot.module.tzs.api.entity.MsgLog;
import com.yeejoin.amos.boot.module.tzs.api.mapper.MsgLogMapper;
import com.yeejoin.amos.boot.module.tzs.api.service.IMsgLogService;
import com.yeejoin.amos.boot.module.tzs.api.dto.MsgLogDto;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
* 消息流水表服务实现类
*
* @author system_generator
* @date 2022-04-20
*/
@Service
public class MsgLogServiceImpl extends BaseService<MsgLogDto,MsgLog,MsgLogMapper> implements IMsgLogService {
/**
* 分页查询
*/
public Page<MsgLogDto> queryForMsgLogPage(Page<MsgLogDto> page) {
return this.queryForPage(page, null, false);
}
/**
* 列表查询 示例
*/
public List<MsgLogDto> queryForMsgLogList() {
return this.queryForList("" , false);
}
}
\ No newline at end of file
......@@ -166,7 +166,8 @@ public class TzsAuthServiceImpl implements TzsAuthService {
if(redisUtils.hasKey(RedisKey.CTI_USER_TOKEN)) {
// 验证token
boolean validToken = TokenOperation.refresh(redisUtils.get(RedisKey.CTI_USER_TOKEN).toString());
if(!validToken) { // 登陆
// 登陆
if(!validToken) {
this.loginCtiUser();
}
} else { // 登陆
......@@ -178,9 +179,6 @@ public class TzsAuthServiceImpl implements TzsAuthService {
FeignClientResult<AgencyUserModel> agencyUserModel = Privilege.agencyUserClient.queryByUserName(ctiUserName);
AgencyUserModel userModel = agencyUserModel.getResult();
RequestContext.setExeUserId(userModel.getUserId());
if (userModel == null) {
throw new Exception("无法获取用户信息");
}
saveUserRedis(userModel, ctiToken);
} catch (Exception e) {
//删除失效token缓存
......
......@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.module.tzs.api.entity.MsgLog;
import com.yeejoin.amos.boot.module.tzs.biz.service.impl.ESCylinderServiceImpl;
import com.yeejoin.amos.boot.module.tzs.biz.utils.BeanDtoVoUtils;
import com.yeejoin.amos.boot.module.tzs.flc.api.dto.CylinderFillingRecordDto;
import com.yeejoin.amos.boot.module.tzs.flc.api.dto.CylinderInfoDto;
......@@ -20,10 +22,19 @@ import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.common.recycler.Recycler;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
......@@ -31,7 +42,12 @@ import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 气瓶基本信息
......@@ -53,6 +69,9 @@ public class CylinderInfoController extends BaseController {
@Autowired
CylinderFillingRecordServiceImpl cylinderFillingRecordServiceImpl;
@Autowired
ESCylinderServiceImpl esCylinderService;
private Map<Integer, String> regionMap;
......@@ -87,7 +106,6 @@ public class CylinderInfoController extends BaseController {
* 根据sequenceNbr删除
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@DeleteMapping(value = "/{sequenceNbr}")
......@@ -841,4 +859,76 @@ public class CylinderInfoController extends BaseController {
return ResponseHelper.buildResponse(true);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET",value = "气瓶超期数量统计")
@GetMapping(value = "/{earlyWarningLevel}/statistics")
public ResponseModel<Integer> getOverDateStatisticsNumber(@PathVariable String earlyWarningLevel){
return ResponseHelper.buildResponse(cylinderInfoServiceImpl.getOverDateStatisticsNumber(earlyWarningLevel));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET",value = "按照预警类型查询气瓶分页列表",notes = "按照预警类型查询气瓶分页列表")
@GetMapping(value = "/{earlyWarningLevel}/page")
public ResponseModel<Page<CylinderInfoDto>> getOverDateStatisticsNumber(
@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
@PathVariable String earlyWarningLevel){
Page<CylinderInfoDto> page = new Page<>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(cylinderInfoServiceImpl.earlyWarningLevelPageList(page,earlyWarningLevel));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET",value = "气瓶详情")
@GetMapping(value = "/{sequenceCode}/detail")
public ResponseModel<CylinderInfoDto> getDetail(@PathVariable String sequenceCode){
return ResponseHelper.buildResponse(cylinderInfoServiceImpl.getDetail(sequenceCode));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET",value = "气瓶处置日志")
@GetMapping(value = "/msg/{sequenceCode}/list")
public ResponseModel<List<MsgLog>> getMsgList(@PathVariable String sequenceCode,
@RequestParam(value = "terminalType",required = false) String terminalType){
return ResponseHelper.buildResponse(cylinderInfoServiceImpl.getMsgList(sequenceCode, terminalType));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "PUT",value = "下次检验日期更新",notes = "下次检验日期更新")
@PutMapping(value = "/nextInspectionDate/update")
public ResponseModel<Boolean> nextInspectionDateUpdate(@RequestBody List<CylinderInfoDto> cylinderInfoDtos){
return ResponseHelper.buildResponse(cylinderInfoServiceImpl.nextInspectionDateUpdate(cylinderInfoDtos));
}
/**
* 气瓶信息放入es
*
* @return
*/
@TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
@RequestMapping(value = "/init", method = RequestMethod.PUT)
@ApiOperation(httpMethod = "PUT", value = "气瓶信息放入es", notes = "气瓶信息放入es")
public void init(Integer num) {
IPage<CylinderInfo> cylinderInfoPage = new Page<>();
Integer count = cylinderInfoServiceImpl.count();
Integer times = 0;
if (ValidationUtil.isEmpty(num) && count != 0) {
times = count / 500;
int last = count % 500;
if (last > 0) {
times++;
}
} else if (count != 0) {
times = num;
}
for (int i = 0; i < times; i++) {
cylinderInfoPage.setCurrent(i);
cylinderInfoPage.setSize(500);
cylinderInfoPage = cylinderInfoServiceImpl.page(cylinderInfoPage);
esCylinderService.saveEsCylinderToES(cylinderInfoPage.getRecords());
}
}
}
package com.yeejoin.amos.boot.module.tzs.flc.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import java.util.List;
import com.yeejoin.amos.boot.module.tzs.flc.biz.service.impl.EndUserServiceImpl;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.tzs.flc.api.dto.EndUserDto;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
/**
* 气瓶终端用户
*
* @author system_generator
* @date 2022-04-21
*/
@RestController
@Api(tags = "气瓶终端用户Api")
@RequestMapping(value = "/end-user")
public class EndUserController extends BaseController {
@Autowired
EndUserServiceImpl endUserServiceImpl;
/**
* 新增气瓶终端用户
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增气瓶终端用户", notes = "新增气瓶终端用户")
public ResponseModel<EndUserDto> save(@RequestBody EndUserDto model) {
model = endUserServiceImpl.createWithModel(model);
return ResponseHelper.buildResponse(model);
}
/**
* 根据sequenceNbr更新
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新气瓶终端用户", notes = "根据sequenceNbr更新气瓶终端用户")
public ResponseModel<EndUserDto> updateBySequenceNbrEndUser(@RequestBody EndUserDto model,@PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(endUserServiceImpl.updateWithModel(model));
}
/**
* 根据sequenceNbr删除
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除气瓶终端用户", notes = "根据sequenceNbr删除气瓶终端用户")
public ResponseModel<Boolean> deleteBySequenceNbr(HttpServletRequest request, @PathVariable(value = "sequenceNbr") Long sequenceNbr){
return ResponseHelper.buildResponse(endUserServiceImpl.removeById(sequenceNbr));
}
/**
* 根据sequenceNbr查询
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET",value = "根据sequenceNbr查询单个气瓶终端用户", notes = "根据sequenceNbr查询单个气瓶终端用户")
public ResponseModel<EndUserDto> selectOne(@PathVariable Long sequenceNbr) {
return ResponseHelper.buildResponse(endUserServiceImpl.queryBySeq(sequenceNbr));
}
/**
* 列表分页查询
*
* @param current 当前页
* @param current 每页大小
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET",value = "气瓶终端用户分页查询", notes = "气瓶终端用户分页查询")
public ResponseModel<Page<EndUserDto>> queryForPage(@RequestParam(value = "current") int current,@RequestParam
(value = "size") int size) {
Page<EndUserDto> page = new Page<EndUserDto>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(endUserServiceImpl.queryForEndUserPage(page));
}
/**
* 列表全部数据查询
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET",value = "气瓶终端用户列表全部数据查询", notes = "气瓶终端用户列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<EndUserDto>> selectForList() {
return ResponseHelper.buildResponse(endUserServiceImpl.queryForEndUserList());
}
}
package com.yeejoin.amos.boot.module.tzs.flc.biz.quartz;
import com.yeejoin.amos.boot.module.tzs.flc.biz.service.impl.CylinderInfoServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* @author DELL
*/
@Component
@EnableScheduling
public class CylinderSchedulerJob {
@Autowired
private CylinderInfoServiceImpl cylinderInfoService;
/**
* 每天9点-日报生成
*/
@Scheduled(cron = "0 0 9 * * ?")
public void dayReport() {
cylinderInfoService.calEarlyWarningLevel();
}
}
package com.yeejoin.amos.boot.module.tzs.flc.biz.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.module.tzs.api.dto.CylWarningMsgDto;
import com.yeejoin.amos.boot.module.tzs.api.entity.MsgLog;
import com.yeejoin.amos.boot.module.tzs.api.enums.EarlyWarningLevelEnum;
import com.yeejoin.amos.boot.module.tzs.biz.service.impl.MsgLogServiceImpl;
import com.yeejoin.amos.boot.module.tzs.biz.service.impl.TzsAuthServiceImpl;
import com.yeejoin.amos.boot.module.tzs.flc.api.dto.*;
import com.yeejoin.amos.boot.module.tzs.flc.api.entity.*;
import com.yeejoin.amos.boot.module.tzs.flc.api.mapper.CylinderInfoMapper;
import com.yeejoin.amos.boot.module.tzs.flc.api.service.ICylinderInfoService;
import com.yeejoin.amos.component.rule.RuleTrigger;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -27,6 +39,7 @@ import java.util.function.IntConsumer;
* @date 2021-12-14
*/
@Service
@Slf4j
public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, CylinderInfo, CylinderInfoMapper> implements ICylinderInfoService {
......@@ -78,6 +91,17 @@ public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, Cylind
@Autowired
CylinderFillingUnloadDataUnitServiceImpl cylinderFillingUnloadDataUnitServiceImpl;
@Autowired
MsgLogServiceImpl msgLogService;
@Autowired
private RuleTrigger ruleTrigger;
@Autowired
TzsAuthServiceImpl tzsAuthService;
@Value("${cylinder-early-warning-packageId:气瓶监管/cylwarningmsg}")
private String packageId;
/**
* 分页查询
......@@ -558,4 +582,116 @@ public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, Cylind
});
}
}
public Integer getOverDateStatisticsNumber(String earlyWarningLevel) {
return this.baseMapper.countOverDateNumber(earlyWarningLevel);
}
public Page<CylinderInfoDto> earlyWarningLevelPageList(Page<CylinderInfoDto> page, String earlyWarningLevel) {
Page<CylinderInfoDto> result = this.baseMapper.queryPageListByEarlyWarningLevel(page, earlyWarningLevel);
result.getRecords().forEach(r -> {
r.setEarlyWarningLevelName(EarlyWarningLevelEnum.getEumByLevel(earlyWarningLevel).getName());
r.setInspectionStatusDesc(EarlyWarningLevelEnum.getEumByLevel(earlyWarningLevel).getStatus());
});
return result;
}
public void calEarlyWarningLevel() {
if (log.isDebugEnabled()) {
log.debug("气瓶超期预警时间调用规则开始");
}
// 1.批量分组大小
int size = 500;
int total = this.count();
int groupNumber = total / size + 1;
// 2.批量小分组处理数据,调用规则
for (int i = 0; i < groupNumber; i++) {
Page<CylinderInfo> page = new Page<>();
page.setCurrent(i);
page.setSize(size);
LambdaQueryWrapper<CylinderInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.orderByDesc(CylinderInfo::getSequenceNbr);
IPage<CylinderInfo> result = this.page(page, wrapper);
for (CylinderInfo r : result.getRecords()) {
// 设置token
tzsAuthService.setRequestContext();
// 调用规则
this.touchRuleToCalLevel(r);
}
}
if (log.isDebugEnabled()) {
log.debug("气瓶超期预警时间调用规则完成");
}
}
private void touchRuleToCalLevel(CylinderInfo r) {
Date now = new Date();
//1.气瓶详情
CylinderInfoDto cylinderInfoDto = this.getDetail(r.getSequenceCode());
try {
CylWarningMsgDto cylWarningMsgDto = new CylWarningMsgDto();
int interval = DateUtils.dateBetweenIncludeToday(cylinderInfoDto.getNextInspectionDate(), now);
cylWarningMsgDto.setNum(String.valueOf(interval));
cylWarningMsgDto.setFactoryNum(cylinderInfoDto.getFactoryNum());
cylWarningMsgDto.setUserType(cylinderInfoDto.getCustomType());
cylWarningMsgDto.setUserPeople(cylinderInfoDto.getCustomName());
cylWarningMsgDto.setUserPeoplePhone(cylinderInfoDto.getContactPhone());
cylWarningMsgDto.setCylSeq(cylinderInfoDto.getSequenceCode());
cylWarningMsgDto.setCompanyName(cylinderInfoDto.getUnitName());
cylWarningMsgDto.setPhone(cylinderInfoDto.getPersonMobilePhone());
cylWarningMsgDto.setPeople(cylinderInfoDto.getUnitPerson());
// 2.循环调用规则 触发计算等级及发送消息
if (log.isInfoEnabled()) {
log.info("调用规则对象!+:{}", JSON.toJSONString(cylWarningMsgDto));
}
ruleTrigger.publish(cylWarningMsgDto, packageId, null);
} catch (Exception e) {
log.error("调用规则失败!:{}", JSON.toJSONString(cylinderInfoDto));
}
}
public CylinderInfoDto getDetail(String sequenceCode) {
CylinderInfoDto dto = this.baseMapper.getDetail(sequenceCode);
dto.setInspectionStatusDesc(dto.getEarlyWarningLevel() != null ? EarlyWarningLevelEnum.getEumByLevel(dto.getEarlyWarningLevel()).getStatus() : "");
return dto;
}
public List<MsgLog> getMsgList(String sequenceCode, String terminalType) {
LambdaQueryWrapper<MsgLog> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(MsgLog::getRelationCode, sequenceCode);
wrapper.eq(StringUtils.isNotEmpty(terminalType), MsgLog::getTerminalType, terminalType);
wrapper.orderByDesc(MsgLog::getSendTime);
return msgLogService.list(wrapper);
}
/**
* 更新气瓶等级
* @param sequenceCode 唯一表设
* @param level 等级
* @return CylinderInfo
*/
public CylinderInfo updateEarlyWarningLevel(String sequenceCode, String level) {
CylinderInfo cylinderInfo = this.getOne(new LambdaQueryWrapper<CylinderInfo>().eq(CylinderInfo::getSequenceCode, sequenceCode));
cylinderInfo.setEarlyWarningLevel(level);
cylinderInfo.setEarlyWarningLevelCalDate(new Date());
this.updateById(cylinderInfo);
return cylinderInfo;
}
public Boolean nextInspectionDateUpdate(List<CylinderInfoDto> cylinderInfoDtos) {
// 1.更新下次检验日期
List<CylinderInfo> cylinderInfos = new ArrayList<>();
cylinderInfoDtos.forEach(c -> {
CylinderInfo cylinderInfo = this.getOne(new LambdaQueryWrapper<CylinderInfo>().eq(CylinderInfo::getSequenceCode, c.getSequenceCode()));
cylinderInfo.setNextInspectionDate(c.getNextInspectionDate());
cylinderInfos.add(cylinderInfo);
});
if (!cylinderInfos.isEmpty()) {
this.updateBatchById(cylinderInfos);
}
// 2.循环调用规则 触发计算等级及发送消息
cylinderInfos.forEach(this::touchRuleToCalLevel);
return Boolean.TRUE;
}
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.tzs.flc.biz.service.impl;
import com.yeejoin.amos.boot.module.tzs.flc.api.entity.EndUser;
import com.yeejoin.amos.boot.module.tzs.flc.api.mapper.EndUserMapper;
import com.yeejoin.amos.boot.module.tzs.flc.api.service.IEndUserService;
import com.yeejoin.amos.boot.module.tzs.flc.api.dto.EndUserDto;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
* 气瓶终端用户服务实现类
*
* @author system_generator
* @date 2022-04-21
*/
@Service
public class EndUserServiceImpl extends BaseService<EndUserDto,EndUser,EndUserMapper> implements IEndUserService {
/**
* 分页查询
*/
public Page<EndUserDto> queryForEndUserPage(Page<EndUserDto> page) {
return this.queryForPage(page, null, false);
}
/**
* 列表查询 示例
*/
public List<EndUserDto> queryForEndUserList() {
return this.queryForList("" , false);
}
}
\ No newline at end of file
......@@ -2776,4 +2776,51 @@
</sql>
</changeSet>
<changeSet author="my" id="16504254290001-1">
<preConditions onFail="MARK_RAN">
<not>
<columnExists tableName="wl_source_scene" columnName="source_type"/>
</not>
</preConditions>
<comment>wl_source_scene add column source_type 添加组态页面关系表数据源类型字段</comment>
<sql>
ALTER TABLE `wl_source_scene`
ADD COLUMN `source_type` varchar(255) NULL COMMENT '数据源类型:building(建筑类),system(系统类)' AFTER `source_name`;
UPDATE wl_source_scene ss
SET ss.source_type = 'building'
WHERE
(
SELECT
count(1)
FROM
wl_warehouse_structure ws
WHERE
ws.id = ss.source_id
) > 0;
UPDATE wl_source_scene ss
SET ss.source_type = 'system'
WHERE
(
SELECT
count(1)
FROM
f_fire_fighting_system ffs
WHERE
ffs.id = ss.source_id
) > 0;
</sql>
</changeSet>
<changeSet author="chenzhao" id="2022-04-21-1">
<preConditions onFail="MARK_RAN">
<tableExists tableName="wl_form_group_column"/>
</preConditions>
<comment>add data wl_form_group</comment>
<sql>
REPLACE INTO `wl_form_group_column`(`id`, `field_name`, `field_label`, `data_type`, `group_id`, `query_strategy`, `not_null`, `group_code`, `creator_id`, `create_date`) VALUES (133000000346, 'inwhichBuild', '所在建筑', 'String', 132828674824, 'eq', b'0', 'r_tank', 2581805, '2022-04-18 11:29:34');
</sql>
</changeSet>
</databaseChangeLog>
\ No newline at end of file
......@@ -104,6 +104,7 @@
(id,
source_id,
source_name,
source_type,
project_id,
scene_id,
point_in_scene,
......@@ -114,6 +115,7 @@
#{id},
#{instanceId},
#{name},
#{sourceType},
#{projectId},
#{sceneId},
null,
......
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