Commit 14f4a95e authored by taabe's avatar taabe

feat:安全追溯增加企业许可超期问题生成

parent de492e90
......@@ -17,7 +17,7 @@ public enum SafetyProblemTypeEnum {
JYBJ("21", "检验报检", "设备报检", "safetyProblemTracing/jy/bj", null),
WBCQ("1", "维保超期", "设备维保超期", "safetyProblemTracing/wb/cq", "outOfMaintenanceRecords"),
WBBA("11", "维保合同备案", "设备维保合同备案", "safetyProblemTracing/wb/ba", null),
ZZCQ("3", "资质超期", "企业资质超期", "safetyProblemTracing/zz/cq", null);
XKCQ("3", "许可超期", "企业许可超期", "safetyProblemTracing/xk/cq", null);
private final String code;
......
......@@ -13,6 +13,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 装备分类 Mapper 接口
......@@ -141,6 +142,11 @@ public interface CommonMapper extends BaseMapper<EquipmentCategory> {
List<Map<String, Object>> queryOutOfInspectionRecord();
/**
* 查询许可超期的企业
* */
List<Map<String, Object>> queryOutOfQualificationRecord();
/**
* 大屏业务全过程统计已经完成的单据
*
* @param orgCode 行政区划对应公司的orgCode
......@@ -223,5 +229,6 @@ public interface CommonMapper extends BaseMapper<EquipmentCategory> {
List<Map<String, String>> VINAccountUniqueWithVehGasCyl(@Param("VIN") String VIN,
@Param("record") String record);
void updateEnterpriseSafetyStatus(@Param("useUnitCodeList") Set<String> useUnitCodeList);
}
......@@ -2550,4 +2550,32 @@
</where>
</select>
<select id="queryOutOfQualificationRecord" resultType="java.util.Map">
SELECT
ei.use_unit_code useUnitCode,
ei.use_unit useUnit,
ei.unit_type unitType,
ei.supervise_org_code superviseOrgCode,
ei.supervise_org_name superviseOrgName,
ul.sequence_nbr licenceSeq,
ul.cert_no certNo,
ul.expiry_date expiryDate,
ul.item_code itemCode,
ul.item_code_name itemName,
ul.sub_item_code subItemCode,
ul.sub_item_name subItemName
FROM
tz_base_unit_licence ul
LEFT JOIN tz_base_enterprise_info ei ON ul.unit_code = ei.use_unit_code
WHERE
ei.use_unit_code IS NOT NULL
AND ul.is_delete = 0
AND ul.expiry_date <![CDATA[<]]> to_char( now( ), 'YYYY-MM-DD' )
</select>
<update id="updateEnterpriseSafetyStatus">
update tz_base_enterprise_info
set status = '1'
where use_unit_code in (#{useUnitCodeList})
</update>
</mapper>
......@@ -28,8 +28,8 @@ public class SafetyProblemEventHandlerFactory {
return new JYCQEventHandler(safetyProblemTracingService);
} else if (topic.startsWith(SafetyProblemTypeEnum.JYBJ.getTopic())) {
return new JYBJEventHandler(safetyProblemTracingService, idxBizJgOtherInfoService, esEquipmentCategory);
} else if (topic.startsWith(SafetyProblemTypeEnum.ZZCQ.getTopic())) {
return new ZZCQEventHandler();
} else if (topic.startsWith(SafetyProblemTypeEnum.XKCQ.getTopic())) {
return new XKCQEventHandler(safetyProblemTracingService);
} else {
// 其他策略类的创建
throw new IllegalArgumentException("Unsupported topic: " + topic);
......
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;
/**
* ZZCQEventHandler 类实现了 SafetyProblemEventHandler 接口,
* XKCQEventHandler 类实现了 SafetyProblemEventHandler 接口,
* 用于处理企业资质超期安全问题事件。
*/
@Component
public class ZZCQEventHandler implements SafetyProblemEventHandler {
public class XKCQEventHandler implements SafetyProblemEventHandler {
SafetyProblemTracingServiceImpl safetyProblemTracingService;
@Autowired
public XKCQEventHandler(SafetyProblemTracingServiceImpl safetyProblemTracingService) {
this.safetyProblemTracingService = safetyProblemTracingService;
}
/**
* 处理安全问题事件。
......@@ -21,10 +33,12 @@ public class ZZCQEventHandler implements SafetyProblemEventHandler {
@Override
public void handle(SafetyProblemEvent event) {
// 此处为处理安全问题事件的逻辑代码
generateProblem(JSONObject.parseObject(event.getMessage().toString()));
JSONArray jsonArray = JSONObject.parseArray(event.getMessage().toString());
generateProblem(jsonArray);
}
private void generateProblem(JSONObject jsonObject) {
private void generateProblem(JSONArray jsonArray) {
SafetyProblemTopicMessage.generateUnitProblem(jsonArray, SafetyProblemTypeEnum.XKCQ, safetyProblemTracingService);
}
}
......@@ -150,6 +150,42 @@ public class SafetyProblemTopicMessage extends EmqxListener {
.eq("problem_status_code", SafetyProblemStatusEnum.UNHANDLED.getCode()));}
}
public static void generateUnitProblem(JSONArray jsonArray, SafetyProblemTypeEnum problemTypeEnum, SafetyProblemTracingServiceImpl safetyProblemTracingService) {
if (jsonArray == null || problemTypeEnum == null) {
throw new IllegalArgumentException("jsonObject and problemTypeEnum must not be null.");
}
if (!ValidationUtil.isEmpty(jsonArray)) {
List<SafetyProblemTracing> safetyProblemTracingList = jsonArray.stream().map(item -> {
if (!(item instanceof JSONObject)) {
throw new IllegalArgumentException("item is not a JSONObject.");
}
JSONObject json = (JSONObject) item;
SafetyProblemTracing safetyProblemTracing = new SafetyProblemTracing();
safetyProblemTracing.setProblemType(problemTypeEnum.getName());
safetyProblemTracing.setProblemTypeCode(problemTypeEnum.getCode());
safetyProblemTracing.setProblemDesc(problemTypeEnum.getDesc());
safetyProblemTracing.setSourceType(SafetyProblemSourceTypeEnum.UNIT.getName());
safetyProblemTracing.setSourceTypeCode(SafetyProblemSourceTypeEnum.UNIT.getCode());
safetyProblemTracing.setSourceId(json.getOrDefault("licenceSeq", "").toString());
safetyProblemTracing.setProblemTime(new Date());
safetyProblemTracing.setPrincipalUnit(json.getOrDefault("useUnit", "").toString());
safetyProblemTracing.setPrincipalUnitCode(json.getOrDefault("useUnitCode", "").toString());
safetyProblemTracing.setPrincipalUnitType(json.getOrDefault("unitType", "").toString());
safetyProblemTracing.setGoverningBody(json.getOrDefault("superviseOrgName", "").toString());
safetyProblemTracing.setGoverningBodyCode(json.getOrDefault("useUnitCode", "").toString());
safetyProblemTracing.setGoverningBodyOrgCode(json.getOrDefault("superviseOrgCode", "").toString());
safetyProblemTracing.setCreateDate(new Date());
safetyProblemTracing.setProblemStatus(SafetyProblemStatusEnum.UNHANDLED.getName());
safetyProblemTracing.setProblemStatusCode(SafetyProblemStatusEnum.UNHANDLED.getCode());
return safetyProblemTracing;
}).collect(Collectors.toList());
safetyProblemTracingService.saveOrUpdateBatchByColumns(safetyProblemTracingList,
safetyProblemTracing -> new QueryWrapper<>()
.eq("problem_type_code", safetyProblemTracing.getProblemTypeCode())
.eq("source_id", safetyProblemTracing.getSourceId())
.eq("problem_status_code", SafetyProblemStatusEnum.UNHANDLED.getCode()));}
}
public String buildTopic(String topic) {
String topicPrefix = "$share/" + applicationName;
return String.format("%s/%s", topicPrefix, topic);
......
......@@ -10,8 +10,9 @@ 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.mapper.CommonMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.SafetyProblemTracingMapper;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgOtherInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseEnterpriseInfoMapper;
import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.slf4j.Logger;
......@@ -24,6 +25,7 @@ import org.typroject.tyboot.component.emq.EmqKeeper;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 安全追溯问题生成服务实现类
......@@ -50,11 +52,15 @@ public class SafetyProblemTracingGenServiceImpl{
@Autowired
private SafetyProblemTracingServiceImpl safetyProblemTracingService;
@Autowired
TzBaseEnterpriseInfoMapper baseEnterpriseInfoMapper;
@Scheduled(cron = "0 0 1 * * ?")
@SchedulerLock(name = "executeSafetyProblemCheck", lockAtMostFor = "PT5H", lockAtLeastFor = "PT10M")
public void executeSafetyProblemCheck() {
executeMaintenanceCheck();
executeInspectionCheck();
executeEnterpriseQualificationCheck();
}
public void executeInspectionCheck() {
......@@ -73,6 +79,14 @@ public class SafetyProblemTracingGenServiceImpl{
logger.info("维保超期检查结束");
}
public void executeEnterpriseQualificationCheck() {
logger.info("开始企业许可超期检查");
// 查询当天许可超期的企业许可数据
List<Map<String, Object>> outOfQualificationRecords = commonMapper.queryOutOfQualificationRecord();
updateEnterpriseAndSendMessage(outOfQualificationRecords);
logger.info("企业许可超期检查结束");
}
public void update3MaintenanceCheck() {
logger.info("开始修正数据");
List<String> oldAllRecords = idxBizJgOtherInfoService.getBaseMapper()
......@@ -122,6 +136,22 @@ public class SafetyProblemTracingGenServiceImpl{
esEquipmentCategory.saveAll(esEquipmentCategoryDto);
// JSONObject jsonObject = new JSONObject();
// jsonObject.put(safetyProblemTypeEnum.getMsgKey(), mapList);
sendSafetyProblemMessage(mapList, safetyProblemTypeEnum);
}
private void updateEnterpriseAndSendMessage(List<Map<String, Object>> mapList) {
Set<String> outOfUnitLicenseList = mapList.stream().map(m -> m.get("useUnitCode").toString()).collect(Collectors.toSet());
// 更新企业问题状态为未处理(异常)-多个许可超期归并一个企业问题
commonMapper.updateEnterpriseSafetyStatus(outOfUnitLicenseList);
sendSafetyProblemMessage(mapList, SafetyProblemTypeEnum.XKCQ);
}
/**
* 发送安全问题
* @param mapList
* @param safetyProblemTypeEnum
*/
private void sendSafetyProblemMessage(List<Map<String, Object>> mapList, SafetyProblemTypeEnum safetyProblemTypeEnum) {
JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(mapList));
try {
emqKeeper.getMqttClient().publish(safetyProblemTypeEnum.getTopic(), jsonArray.toString().getBytes(StandardCharsets.UTF_8), 2, false);
......
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