Commit 11a6ea3e authored by tianbo's avatar tianbo

feat(module-jg): 新增设备超设计年限问题生成和处理功能

- 在 CommonMapper 中添加查询超设计年限设备的 SQL 方法- 在 SafetyProblemTracingGenServiceImpl 中实现超设计年限问题生成逻辑 - 新增 EquipmentProblemStrategy接口和实现类,用于处理设备相关问题 - 修改 SafetyProblemEventHandlerFactory,支持超设计年限问题处理 - 更新 SafetyProblemTracingController,添加生成超设计年限问题的接口 - 在 SafetyProblemTracingDto 中添加与超设计年限相关的字段 - 修改 SafetyProblemTracingServiceImpl,支持处理超设计年限问题 - 更新 SafetyProblemTypeEnum,增加超设计年限相关枚举值
parent 6a8239cd
......@@ -148,4 +148,12 @@ public class SafetyProblemTracingDto extends BaseDto {
@ApiModelProperty(value = "设备类别")
private String equCategory;
@ApiModelProperty(value = "设计使用年限")
private String designWorkingLife;
@ApiModelProperty(value = "投用年月")
private String useDate;
@ApiModelProperty(value = "制造日期")
private String productDate;
}
......@@ -188,7 +188,7 @@ public class SafetyProblemTracing extends BaseEntity {
/**
* 扩展信息
*/
@TableField("extraInfo")
@TableField("\"extraInfo\"")
private String extraInfo;
/**
......
......@@ -12,14 +12,16 @@ import lombok.Getter;
public enum SafetyProblemTypeEnum {
/**
* 问题主体类型
* 问题类型枚举
*/
JYCQ("2", "检验超期", "设备检验超期", "safetyProblemTracing/jy/cq", "outOfInspectionRecords"),
JYBJ("21", "检验报检", "设备报检", "safetyProblemTracing/jy/bj", null),
WBCQ("1", "维保超期", "设备维保超期", "safetyProblemTracing/wb/cq", "outOfMaintenanceRecords"),
WBBA("11", "维保合同备案", "设备维保合同备案", "safetyProblemTracing/wb/ba", null),
XKCQ("3", "许可超期", "企业许可超期", "safetyProblemTracing/xk/cq", null),
ZZCQ("9", "资质超期", "人员资质超期", "safetyProblemTracing/zz/cq", null);
ZZCQ("9", "资质超期", "人员资质超期", "safetyProblemTracing/zz/cq", null),
SJNXCQ("5", "超设计年限", "设备超设计年限", "safetyProblemTracing/synx/cq", null),
SJNXDJ("51", "超设计年限登记", "超设计年限登记", "safetyProblemTracing/synx/dj", null);
private final String code;
......
......@@ -13,6 +13,7 @@ import com.yeejoin.amos.boot.module.jg.api.dto.ReportAnalysisSearchDTO;
import com.yeejoin.amos.boot.module.ymt.api.entity.EquipmentCategory;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
......@@ -153,6 +154,9 @@ public interface CommonMapper extends BaseMapper<EquipmentCategory> {
*/
List<Map<String, Object>> queryOutOfMaintenanceRecord();
/**
* 查询巡检超期的设备
*/
List<Map<String, Object>> queryOutOfInspectionRecord();
/**
......@@ -165,6 +169,10 @@ public interface CommonMapper extends BaseMapper<EquipmentCategory> {
**/
List<Map<String, Object>> queryOutOfCertificationRecord();
List<Map<String, Object>> queryOverDesignLifeRecord(Date since);
List<Map<String, Object>> queryOverDesignLifeAgainRecord(Date since);
/**
* 大屏业务全过程统计已经完成的单据
*
......
......@@ -2665,4 +2665,94 @@
where
company_code <![CDATA[<>]]> ''
</select>
<select id="queryOverDesignLifeRecord" resultType="java.util.Map">
select * from (
select
ui."RECORD",
ui."USE_UNIT_NAME",
ui."USE_UNIT_CREDIT_CODE",
(select unit_type from tz_base_enterprise_info where use_unit_code = ui."USE_UNIT_CREDIT_CODE") unitType,
ri."EQU_LIST",
(SELECT name FROM tz_equipment_category WHERE code = ri."EQU_LIST") equList,
(SELECT name FROM tz_equipment_category WHERE code = ri."EQU_CATEGORY") equCategory,
ri."EQU_CATEGORY",
oi."SUPERVISORY_CODE",
si."ORG_BRANCH_NAME",
si."ORG_BRANCH_CODE",
si."COMPANY_ORG_BRANCH_CODE",
json_build_object('designWorkingLife', (SELECT MIN((num[1])::numeric) FROM regexp_matches(di."DESIGN_USE_DATE", '\d+', 'g') AS t(num)), 'useDate', ui."USE_DATE" ,'productDate', fi."PRODUCE_DATE")::text extraInfo,
parse_custom_date(
REGEXP_REPLACE(
REGEXP_REPLACE(
REGEXP_REPLACE(ui."USE_DATE", '[ 年月日/\-]', '-', 'g'),
'-+', '-', 'g'
),
'-$', '', 'g'
)) + ((SELECT MIN((num[1])::numeric) FROM regexp_matches(di."DESIGN_USE_DATE", '\d+', 'g') AS t(num)) ||'years')::"interval" <![CDATA[<]]> #{currentDate} isExpired
from idx_biz_jg_use_info ui
LEFT JOIN idx_biz_jg_design_info di on di."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_register_info ri on ri."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_other_info oi ON oi."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_supervision_info si on si."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_factory_info fi on fi."RECORD" = ui."RECORD"
WHERE ui."USE_DATE" is not null and ui."IS_INTO_MANAGEMENT" = true and ri."EQU_LIST" = '2000' and di."DESIGN_USE_DATE" is not null
and ui."USE_DATE" not in ('null','不详','/') and di."DESIGN_USE_DATE" not in ('null','不详','/') and di.OVER_DESIGN_REG_NUM = 0
) t where t.isExpired = true
UNION ALL
select * from (
select
ui."RECORD",
ui."USE_UNIT_NAME",
ui."USE_UNIT_CREDIT_CODE",
(select unit_type from tz_base_enterprise_info where use_unit_code = ui."USE_UNIT_CREDIT_CODE") unitType,
ri."EQU_LIST",
(SELECT name FROM tz_equipment_category WHERE code = ri."EQU_LIST") equList,
(SELECT name FROM tz_equipment_category WHERE code = ri."EQU_CATEGORY") equCategory,
ri."EQU_CATEGORY",
oi."SUPERVISORY_CODE",
si."ORG_BRANCH_NAME",
si."ORG_BRANCH_CODE",
si."COMPANY_ORG_BRANCH_CODE",
json_build_object('designWorkingLife', (SELECT MIN((num[1])::numeric) FROM regexp_matches(di."DESIGN_USE_DATE", '\d+', 'g') AS t(num)), 'useDate', ui."USE_DATE" ,'productDate', fi."PRODUCE_DATE")::text extraInfo,
case when (SELECT MIN((num[1])::numeric) FROM regexp_matches(di."DESIGN_USE_DATE", '\d+', 'g') AS t(num)) ~ '^\d{1,5}$' then
COALESCE((select NEXT_INSPECT_DATE from idx_biz_jg_inspection_detection_info where record = ui.record and inspect_type = 'AZJDJY' ORDER BY "NEXT_INSPECT_DATE" desc limit 1) + ((SELECT MIN((num[1])::numeric) FROM regexp_matches(di."DESIGN_USE_DATE", '\d+', 'g') AS t(num)) ||'years')::"interval" <![CDATA[<]]> #{currentDate}, false) else false end isExpired
from idx_biz_jg_use_info ui
LEFT JOIN idx_biz_jg_register_info ri on ri."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_design_info di on di."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_other_info oi ON oi."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_supervision_info si on si."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_inspection_detection_info d on d."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_factory_info fi on fi."RECORD" = ui."RECORD"
WHERE ui."IS_INTO_MANAGEMENT" = true and ri."EQU_LIST" = '6000' and di."DESIGN_USE_DATE" is not null and di."DESIGN_USE_DATE" not in ('null','不详','/') and di."OVER_DESIGN_REG_NUM" = 0
) tt where tt.isExpired = true;
</select>
<select id="queryOverDesignLifeAgainRecord" resultType="java.util.Map">
select * from (
select
ui."RECORD",
ri."EQU_LIST",
ui."USE_UNIT_NAME",
ui."USE_UNIT_CREDIT_CODE",
(select unit_type from tz_base_enterprise_info where use_unit_code = ui."USE_UNIT_CREDIT_CODE") unitType,
ri."EQU_LIST",
(SELECT name FROM tz_equipment_category WHERE code = ri."EQU_LIST") equList,
(SELECT name FROM tz_equipment_category WHERE code = ri."EQU_CATEGORY") equCategory,
ri."EQU_CATEGORY",
oi."SUPERVISORY_CODE",
si."ORG_BRANCH_NAME",
si."ORG_BRANCH_CODE",
si."COMPANY_ORG_BRANCH_CODE",
json_build_object('designWorkingLife', (SELECT MIN((num[1])::numeric) FROM regexp_matches(di."DESIGN_USE_DATE", '\d+', 'g') AS t(num)), 'useDate', ui."USE_DATE" ,'productDate', fi."PRODUCE_DATE")::text extraInfo,
di."DELAY_SERVICE_LIFE_DATE" <![CDATA[<]]> #{currentDate} isExpired
from idx_biz_jg_design_info di
LEFT JOIN idx_biz_jg_use_info ui on di."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_register_info ri on ri."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_other_info oi ON oi."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_supervision_info si on si."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_factory_info fi on fi."RECORD" = ui."RECORD"
WHERE ui."IS_INTO_MANAGEMENT" = true and (ri."EQU_LIST" = '6000' OR ri."EQU_LIST" = '2000') and di."DELAY_SERVICE_LIFE_DATE" > 0
) tt where tt.isExpired = true;
</select>
</mapper>
......@@ -290,4 +290,17 @@ public class SafetyProblemTracingController extends BaseController {
safetyProblemTracingGenService.executeEnterpriseQualificationCheck();
return ResponseHelper.buildResponse("success");
}
/**
* 生成超设计使用年限问题
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "GET", value = "生成超设计使用年限问题", notes = "生成超设计使用年限问题")
@GetMapping(value = "/gen/overDesignLifeProblem")
public ResponseModel<String> genOverDesignLifeProblem() {
safetyProblemTracingGenService.executeOverDesignLifeCheck();
return ResponseHelper.buildResponse("success");
}
}
......@@ -2,41 +2,25 @@ package com.yeejoin.amos.boot.module.jg.biz.handler;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.jg.api.entity.SafetyProblemTracing;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemStatusEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.event.SafetyProblemEvent;
import com.yeejoin.amos.boot.module.jg.api.event.handler.SafetyProblemEventHandler;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgOtherInfoServiceImpl;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.SafetyProblemTracingServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgOtherInfo;
import com.yeejoin.amos.boot.module.jg.biz.handler.strategy.ProblemHandleStrategy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.List;
import java.util.stream.Collectors;
/**
* WBCQEventHandler 类实现了 SafetyProblemEventHandler 接口,
* 用于处理检验报检安全问题事件
* 用于处理检验报检安全问题闭环
*/
@Component
public class JYBJEventHandler implements SafetyProblemEventHandler {
SafetyProblemTracingServiceImpl safetyProblemTracingService;
IdxBizJgOtherInfoServiceImpl idxBizJgOtherInfoService;
ESEquipmentCategory esEquipmentCategory;
ProblemHandleStrategy equipmentStrategy;
@Autowired
public JYBJEventHandler(SafetyProblemTracingServiceImpl safetyProblemTracingService, IdxBizJgOtherInfoServiceImpl idxBizJgOtherInfoService, ESEquipmentCategory esEquipmentCategory) {
this.safetyProblemTracingService = safetyProblemTracingService;
this.idxBizJgOtherInfoService = idxBizJgOtherInfoService;
this.esEquipmentCategory = esEquipmentCategory;
public JYBJEventHandler(ProblemHandleStrategy equipmentStrategy) {
this.equipmentStrategy = equipmentStrategy;
}
......@@ -50,25 +34,7 @@ public class JYBJEventHandler implements SafetyProblemEventHandler {
public void handle(SafetyProblemEvent event) {
// 此处为处理安全问题事件的逻辑代码
JSONArray jsonArray = JSONObject.parseArray(event.getMessage().toString());
handleInspectionRecord(jsonArray);
}
private void handleInspectionRecord(JSONArray jsonArray) {
List<String> equipRecords = jsonArray.stream().map(obj -> JSONObject.parseObject(obj.toString()).getString("record")).collect(Collectors.toList());
if (!ValidationUtil.isEmpty(equipRecords)) {
safetyProblemTracingService.lambdaUpdate()
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.in(SafetyProblemTracing::getSourceId, equipRecords)
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.JYCQ.getCode()).update();
idxBizJgOtherInfoService.lambdaUpdate().set(IdxBizJgOtherInfo::getStatus, SafetyProblemStatusEnum.HANDLED.getCode())
.in(IdxBizJgOtherInfo::getRecord, equipRecords).update();
Iterable<ESEquipmentCategoryDto> equipEsDtoIter = esEquipmentCategory.findAllById(equipRecords);
for (ESEquipmentCategoryDto equipEsDto : equipEsDtoIter) {
equipEsDto.setProblemStatus(SafetyProblemStatusEnum.HANDLED.getCode());
}
esEquipmentCategory.saveAll(equipEsDtoIter);
}
equipmentStrategy.handleProblem(jsonArray, SafetyProblemTypeEnum.JYBJ);
}
}
package com.yeejoin.amos.boot.module.jg.biz.handler;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.event.SafetyProblemEvent;
import com.yeejoin.amos.boot.module.jg.api.event.handler.SafetyProblemEventHandler;
import com.yeejoin.amos.boot.module.jg.biz.listener.SafetyProblemTopicMessage;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.SafetyProblemTracingServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* SJNXCQEventHandler 类实现了 SafetyProblemEventHandler 接口,
* 用于处理超设计使用年限安全问题事件。
*/
@Component
public class SJNXCQEventHandler implements SafetyProblemEventHandler {
private SafetyProblemTracingServiceImpl safetyProblemTracingService;
@Autowired
public SJNXCQEventHandler(SafetyProblemTracingServiceImpl safetyProblemTracingService) {
this.safetyProblemTracingService = safetyProblemTracingService;
}
/**
* 处理安全问题事件。
*
* @param event 安全问题事件对象,包含事件的详细信息。
* 该参数用于描述发生的安全问题事件。
*/
@Override
public void handle(SafetyProblemEvent event) {
// 此处为处理安全问题事件的逻辑代码
JSONArray jsonArray = JSONObject.parseArray(event.getMessage().toString());
generateProblem(jsonArray);
}
private void generateProblem(JSONArray jsonArray) {
SafetyProblemTopicMessage.generateProblem(jsonArray, SafetyProblemTypeEnum.SJNXCQ, safetyProblemTracingService);
}
}
package com.yeejoin.amos.boot.module.jg.biz.handler;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.event.SafetyProblemEvent;
import com.yeejoin.amos.boot.module.jg.api.event.handler.SafetyProblemEventHandler;
import com.yeejoin.amos.boot.module.jg.biz.handler.strategy.ProblemHandleStrategy;
import org.springframework.stereotype.Component;
/**
* SJNXDJEventHandler 类实现了 SafetyProblemEventHandler 接口,
* 用于处理超设计使用年限登记后问题闭环。
*/
@Component
public class SJNXDJEventHandler implements SafetyProblemEventHandler {
private final ProblemHandleStrategy equipmentStrategy;
public SJNXDJEventHandler(ProblemHandleStrategy equipmentStrategy) {
this.equipmentStrategy = equipmentStrategy;
}
/**
* 处理安全问题事件。
*
* @param event 安全问题事件对象,包含事件的详细信息。
* 该参数用于描述发生的安全问题事件。
*/
@Override
public void handle(SafetyProblemEvent event) {
// 此处为处理安全问题事件的逻辑代码
JSONArray jsonArray = JSONObject.parseArray(event.getMessage().toString());
equipmentStrategy.handleProblem(jsonArray, SafetyProblemTypeEnum.SJNXDJ);
}
}
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.jg.biz.handler;
import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.event.handler.SafetyProblemEventHandler;
import com.yeejoin.amos.boot.module.jg.biz.handler.strategy.EquipmentProblemStrategy;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgOtherInfoServiceImpl;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.SafetyProblemTracingServiceImpl;
import org.springframework.context.ApplicationContext;
......@@ -20,18 +21,23 @@ public class SafetyProblemEventHandlerFactory {
SafetyProblemTracingServiceImpl safetyProblemTracingService = context.getBean(SafetyProblemTracingServiceImpl.class);
IdxBizJgOtherInfoServiceImpl idxBizJgOtherInfoService = context.getBean(IdxBizJgOtherInfoServiceImpl.class);
ESEquipmentCategory esEquipmentCategory = context.getBean(ESEquipmentCategory.class);
EquipmentProblemStrategy equipmentProblemStrategy = new EquipmentProblemStrategy(safetyProblemTracingService, idxBizJgOtherInfoService, esEquipmentCategory);
if (topic.startsWith(SafetyProblemTypeEnum.WBCQ.getTopic())) {
return new WBCQEventHandler(safetyProblemTracingService);
} else if (topic.startsWith(SafetyProblemTypeEnum.WBBA.getTopic())) {
return new WBBAEventHandler(safetyProblemTracingService, idxBizJgOtherInfoService, esEquipmentCategory);
return new WBBAEventHandler(equipmentProblemStrategy);
} else if (topic.startsWith(SafetyProblemTypeEnum.JYCQ.getTopic())) {
return new JYCQEventHandler(safetyProblemTracingService);
} else if (topic.startsWith(SafetyProblemTypeEnum.JYBJ.getTopic())) {
return new JYBJEventHandler(safetyProblemTracingService, idxBizJgOtherInfoService, esEquipmentCategory);
return new JYBJEventHandler(equipmentProblemStrategy);
} else if (topic.startsWith(SafetyProblemTypeEnum.XKCQ.getTopic())) {
return new XKCQEventHandler(safetyProblemTracingService);
}else if (topic.startsWith(SafetyProblemTypeEnum.ZZCQ.getTopic())) {
} else if (topic.startsWith(SafetyProblemTypeEnum.ZZCQ.getTopic())) {
return new ZZCQEventHandler(safetyProblemTracingService);
} else if (topic.startsWith(SafetyProblemTypeEnum.SJNXCQ.getTopic())) {
return new SJNXCQEventHandler(safetyProblemTracingService);
} else if (topic.startsWith(SafetyProblemTypeEnum.SJNXDJ.getTopic())) {
return new SJNXDJEventHandler(equipmentProblemStrategy);
} else {
// 其他策略类的创建
throw new IllegalArgumentException("Unsupported topic: " + topic);
......
......@@ -2,41 +2,25 @@ package com.yeejoin.amos.boot.module.jg.biz.handler;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.jg.api.entity.SafetyProblemTracing;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemStatusEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.event.SafetyProblemEvent;
import com.yeejoin.amos.boot.module.jg.api.event.handler.SafetyProblemEventHandler;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgOtherInfoServiceImpl;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.SafetyProblemTracingServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgOtherInfo;
import com.yeejoin.amos.boot.module.jg.biz.handler.strategy.ProblemHandleStrategy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.List;
import java.util.stream.Collectors;
/**
* WBBAEventHandler 类实现了 SafetyProblemEventHandler 接口,
* 用于处理维保备案安全问题事件
* 用于处理维保备案安全问题闭环
*/
@Component
public class WBBAEventHandler implements SafetyProblemEventHandler {
SafetyProblemTracingServiceImpl safetyProblemTracingService;
IdxBizJgOtherInfoServiceImpl idxBizJgOtherInfoService;
ESEquipmentCategory esEquipmentCategory;
ProblemHandleStrategy equipmentStrategy;
@Autowired
public WBBAEventHandler(SafetyProblemTracingServiceImpl safetyProblemTracingService, IdxBizJgOtherInfoServiceImpl idxBizJgOtherInfoService, ESEquipmentCategory esEquipmentCategory) {
this.safetyProblemTracingService = safetyProblemTracingService;
this.idxBizJgOtherInfoService = idxBizJgOtherInfoService;
this.esEquipmentCategory = esEquipmentCategory;
public WBBAEventHandler(ProblemHandleStrategy equipmentStrategy) {
this.equipmentStrategy = equipmentStrategy;
}
/**
......@@ -49,25 +33,7 @@ public class WBBAEventHandler implements SafetyProblemEventHandler {
public void handle(SafetyProblemEvent event) {
// 此处为处理安全问题事件的逻辑代码
JSONArray jsonArray = JSONObject.parseArray(event.getMessage().toString());
handleMaintenanceRecord(jsonArray);
}
private void handleMaintenanceRecord(JSONArray jsonArray) {
List<String> equipRecords = jsonArray.stream().map(obj -> JSONObject.parseObject(obj.toString()).getString("record")).collect(Collectors.toList());
if (!ValidationUtil.isEmpty(equipRecords)) {
safetyProblemTracingService.lambdaUpdate()
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.in(SafetyProblemTracing::getSourceId, equipRecords)
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.WBCQ.getCode()).update();
idxBizJgOtherInfoService.lambdaUpdate().set(IdxBizJgOtherInfo::getStatus, SafetyProblemStatusEnum.HANDLED.getCode())
.in(IdxBizJgOtherInfo::getRecord, equipRecords).update();
Iterable<ESEquipmentCategoryDto> equipEsDtoIter = esEquipmentCategory.findAllById(equipRecords);
for (ESEquipmentCategoryDto equipEsDto : equipEsDtoIter) {
equipEsDto.setProblemStatus(SafetyProblemStatusEnum.HANDLED.getCode());
}
esEquipmentCategory.saveAll(equipEsDtoIter);
}
equipmentStrategy.handleProblem(jsonArray, SafetyProblemTypeEnum.WBBA);
}
}
package com.yeejoin.amos.boot.module.jg.biz.handler.strategy;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.jg.api.entity.SafetyProblemTracing;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemStatusEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemTypeEnum;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgOtherInfoServiceImpl;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.SafetyProblemTracingServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgOtherInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.List;
import java.util.stream.Collectors;
@Component("equipmentProblemStrategy")
@RequiredArgsConstructor
public class EquipmentProblemStrategy implements ProblemHandleStrategy {
private final SafetyProblemTracingServiceImpl safetyProblemTracingService;
private final IdxBizJgOtherInfoServiceImpl idxBizJgOtherInfoService;
private final ESEquipmentCategory esEquipmentCategory;
@Transactional(rollbackFor = Exception.class)
@Override
public void handleProblem(JSONArray jsonArray, SafetyProblemTypeEnum problemTypeEnum) {
List<String> equipRecords = jsonArray.stream().map(obj -> JSONObject.parseObject(obj.toString()).getString("record")).collect(Collectors.toList());
if (!ValidationUtil.isEmpty(equipRecords)) {
safetyProblemTracingService.lambdaUpdate()
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.in(SafetyProblemTracing::getSourceId, equipRecords)
.eq(SafetyProblemTracing::getProblemTypeCode, problemTypeEnum.getCode()).update();
idxBizJgOtherInfoService.lambdaUpdate().set(IdxBizJgOtherInfo::getStatus, SafetyProblemStatusEnum.HANDLED.getCode())
.in(IdxBizJgOtherInfo::getRecord, equipRecords).update();
Iterable<ESEquipmentCategoryDto> equipEsDtoIter = esEquipmentCategory.findAllById(equipRecords);
for (ESEquipmentCategoryDto equipEsDto : equipEsDtoIter) {
equipEsDto.setProblemStatus(SafetyProblemStatusEnum.HANDLED.getCode());
}
esEquipmentCategory.saveAll(equipEsDtoIter);
}
}
}
package com.yeejoin.amos.boot.module.jg.biz.handler.strategy;
import com.alibaba.fastjson.JSONArray;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemTypeEnum;
/**
* 处理策略接口
*/
public interface ProblemHandleStrategy {
void handleProblem(JSONArray jsonArray, SafetyProblemTypeEnum problemTypeEnum);
}
......@@ -134,6 +134,7 @@ public class SafetyProblemTopicMessage extends EmqxListener {
safetyProblemTracing.setGoverningBody(json.getOrDefault("ORG_BRANCH_NAME", "").toString());
safetyProblemTracing.setGoverningBodyCode(json.getOrDefault("COMPANY_ORG_BRANCH_CODE", "").toString());
safetyProblemTracing.setGoverningBodyOrgCode(json.getOrDefault("ORG_BRANCH_CODE", "").toString());
safetyProblemTracing.setExtraInfo(json.getOrDefault("extraInfo", "").toString());
// safetyProblemTracing.setRegionName(json.getString("regionName"));
safetyProblemTracing.setRegionCode(json.getString("regionCode"));
safetyProblemTracing.setCreateDate(new Date());
......
......@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
......@@ -17,11 +18,11 @@ import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.biz.common.utils.SnowflakeIdUtil;
import com.yeejoin.amos.boot.module.jg.api.dto.*;
import com.yeejoin.amos.boot.module.jg.api.entity.*;
import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.CompanyTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.WorkFlowStatusEnum;
import com.yeejoin.amos.boot.module.jg.api.entity.JgOverDesignServiceLife;
import com.yeejoin.amos.boot.module.jg.api.entity.JgOverDesignServiceLifeEq;
import com.yeejoin.amos.boot.module.jg.api.entity.JgRegistrationHistory;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistrationManage;
import com.yeejoin.amos.boot.module.jg.api.enums.*;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgOverDesignServiceLifeEqMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgOverDesignServiceLifeMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IJgOverDesignServiceLifeService;
......@@ -34,7 +35,10 @@ import com.yeejoin.amos.boot.module.jg.biz.feign.TzsServiceFeignClient;
import com.yeejoin.amos.boot.module.jg.biz.service.ICmWorkflowService;
import com.yeejoin.amos.boot.module.jg.biz.service.ICompensateFlowDataOfRedis;
import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgInspectionDetectionInfoService;
import com.yeejoin.amos.boot.module.ymt.api.entity.*;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgDesignInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgInspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgRegisterInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.InspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.InspectionDetectionInfoMapper;
......@@ -52,6 +56,7 @@ import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
......@@ -63,16 +68,16 @@ import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.nio.charset.StandardCharsets;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
/**
......@@ -692,18 +697,20 @@ public class JgOverDesignServiceLifeServiceImpl extends BaseService<JgOverDesign
private void sendOverDesignMessage(List<Map<String, Object>> equipmentLists) {
JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(equipmentLists));
if (CollectionUtil.isNotEmpty(jsonArray)){
// try {
// emqKeeper.getMqttClient().publish(SafetyProblemTypeEnum.JYCQ.getTopic(), jsonArray.toString().getBytes(StandardCharsets.UTF_8), 2, false);
// } catch (MqttException e) {
// log.error("发送超设计使用年限消息失败---->{}" + e.getMessage());
// throw new RuntimeException(e);
// }
try {
emqKeeper.getMqttClient().publish(SafetyProblemTypeEnum.SJNXDJ.getTopic(), jsonArray.toString().getBytes(StandardCharsets.UTF_8), 2, false);
} catch (MqttException e) {
log.error("发送超设计使用年限消息失败---->{}" + e.getMessage());
throw new RuntimeException(e);
}
}
}
private void updateRegistrationManage(List<String> useOrgCodes) {
List<JgUseRegistrationManage> registrationList = useRegistrationManageService.lambdaQuery()
.in(JgUseRegistrationManage::getUseRegistrationCode, useOrgCodes).list();
.in(JgUseRegistrationManage::getUseRegistrationCode, useOrgCodes)
.eq(JgUseRegistrationManage::getIsDelete, 0)
.eq(JgUseRegistrationManage::getCertificateStatus, CertificateStatusEnum.YIDENGJI.getName()).list();
if (!CollectionUtils.isEmpty(registrationList)) {
useRegistrationManageService.updateBatchById(
registrationList.stream().peek(v -> {
......
......@@ -27,6 +27,7 @@ import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
......@@ -138,6 +139,9 @@ public class SafetyProblemTracingGenServiceImpl{
}
private void updateEquipAndSendMessage(List<Map<String, Object>> mapList, SafetyProblemTypeEnum safetyProblemTypeEnum) {
if (ValidationUtil.isEmpty(mapList)) {
return;
}
List<String> records = mapList.stream().map(m -> m.get("RECORD").toString()).collect(Collectors.toList());
// 更新设备状态为未处理(异常)
idxBizJgOtherInfoService.lambdaUpdate()
......@@ -150,12 +154,13 @@ public class SafetyProblemTracingGenServiceImpl{
esEquipmentCategoryDto.add(equipmentCategoryDto);
}
esEquipmentCategory.saveAll(esEquipmentCategoryDto);
// JSONObject jsonObject = new JSONObject();
// jsonObject.put(safetyProblemTypeEnum.getMsgKey(), mapList);
sendSafetyProblemMessage(mapList, safetyProblemTypeEnum);
}
private void updateEnterpriseAndSendMessage(List<Map<String, Object>> mapList) {
if (ValidationUtil.isEmpty(mapList)) {
return;
}
Set<String> outOfUnitLicenseList = mapList.stream().map(m -> m.get("useUnitCode").toString()).collect(Collectors.toSet());
if (ValidationUtil.isEmpty(outOfUnitLicenseList)) {
return;
......@@ -166,6 +171,9 @@ public class SafetyProblemTracingGenServiceImpl{
}
private void updateUserInfoAndSendMessage(List<Map<String, Object>> certificationRecords) {
if (ValidationUtil.isEmpty(certificationRecords)) {
return;
}
Set<String> outOfUnitLicenseList = certificationRecords.stream().map(m -> m.get("userSeq").toString()).collect(Collectors.toSet());
if (!ValidationUtil.isEmpty(outOfUnitLicenseList)) {
LambdaUpdateWrapper<TzsUserInfo> up = new LambdaUpdateWrapper();
......@@ -193,4 +201,27 @@ public class SafetyProblemTracingGenServiceImpl{
}
}
}
@Scheduled(cron = "0 0 1 * * ?")
@SchedulerLock(name = "executeOverDesignLifeCheck", lockAtMostFor = "PT5H", lockAtLeastFor = "PT10M")
public void executeOverDesignLife() {
executeOverDesignLifeCheck();
}
public void executeOverDesignLifeCheck() {
logger.info("开始生成超设计使用年限问题");
List<Map<String, Object>> allEquipRecords = Lists.newArrayList();
// 查询当天超设计使用年限的设备-首次超期
List<Map<String, Object>> overDesignLifeRecords = commonMapper.queryOverDesignLifeRecord(new Date());
if (ValidationUtil.isEmpty(overDesignLifeRecords)) {
allEquipRecords.addAll(overDesignLifeRecords);
}
// 查询当天超设计使用年限的设备-办理超期登记后再次超期
List<Map<String, Object>> overDesignLifeAgainRecords = commonMapper.queryOverDesignLifeAgainRecord(new Date());
if (ValidationUtil.isEmpty(overDesignLifeRecords)) {
allEquipRecords.addAll(overDesignLifeAgainRecords);
}
updateEquipAndSendMessage(allEquipRecords, SafetyProblemTypeEnum.SJNXCQ);
logger.info("生成超设计使用年限问题结束");
}
}
\ No newline at end of file
......@@ -15,12 +15,12 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl;
import com.yeejoin.amos.boot.module.jg.api.dto.SafetyProblemTracingDto;
import com.yeejoin.amos.boot.module.jg.api.entity.SafetyProblemTracing;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemSourceTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemStatusEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.CommonMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.SafetyProblemTracingMapper;
import com.yeejoin.amos.boot.module.jg.api.dto.SafetyProblemTracingDto;
import com.yeejoin.amos.boot.module.jg.api.service.ISafetyProblemTracingService;
import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgRegisterInfoService;
import org.apache.ibatis.session.SqlSession;
......@@ -28,7 +28,6 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.ValidationUtils;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
......@@ -112,6 +111,24 @@ public class SafetyProblemTracingServiceImpl extends BaseService<SafetyProblemTr
Map<String, String> problemStatusObj = new HashMap<>();
problemStatusObj.put("problemStatusCode", entity.getProblemStatusCode());
entity.setProblemStatusObj(problemStatusObj);
if (!ValidationUtil.isEmpty(problem.getExtraInfo())) {
try {
JSONObject jsonObject = JSONObject.parseObject(entity.getExtraInfo());
// 将extraInfo中的数据结构后赋值给entity
if (jsonObject.containsKey("designWorkingLife")) {
entity.setDesignWorkingLife(jsonObject.getString("designWorkingLife"));
}
if (jsonObject.containsKey("useDate")) {
entity.setUseDate(jsonObject.getString("useDate"));
}
if (jsonObject.containsKey("productDate")) {
entity.setProductDate(jsonObject.getString("productDate"));
}
} catch (Exception e) {
e.printStackTrace();
log.error("extraInfo解析失败", e);
}
}
return entity;
}
......
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