Commit d6b13e7a authored by suhuiguang's avatar suhuiguang

feat(重要提醒):基础代码搭建

1.重要提醒开发基础代码 2.使用登记审核完成后更新管道汇总表字段 2管道es增加使用登记证编号
parent 8f970efd
package com.yeejoin.amos.boot.module.jg.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 2025-06-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="TzsJgColumnReminderRuleDto", description="字段提醒配置表")
public class TzsJgColumnReminderRuleDto extends BaseDto {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "业务类型,如使用登记、安装告知")
private String bizType;
@ApiModelProperty(value = "字段唯一标识")
private String columnKey;
@ApiModelProperty(value = "数据项名称")
private String columnLabel;
@ApiModelProperty(value = "数据项说明")
private String columnValue;
@ApiModelProperty(value = "0-新增;1-历史有证;2-历史无证,未空代表公共")
private String regType;
@ApiModelProperty(value = "设备种类编码,未空代表公共")
private String equList;
@ApiModelProperty(value = "设备类别编码,未空代表公共")
private String equCategory;
@ApiModelProperty(value = "严重程度:1到n,数字越大,等级越高,自定义")
private Integer sId;
}
package com.yeejoin.amos.boot.module.jg.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 java.util.Date;
/**
* 字段提醒配置表
*
* @author system_generator
* @date 2025-06-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("tzs_jg_column_reminder_rule")
public class TzsJgColumnReminderRule extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 业务类型,如使用登记、安装告知
*/
@TableField("biz_type")
private String bizType;
/**
* 字段唯一标识
*/
@TableField("column_key")
private String columnKey;
/**
* 数据项名称
*/
@TableField("column_label")
private String columnLabel;
/**
* 数据项说明
*/
@TableField("column_value")
private String columnValue;
/**
* 0-新增;1-历史有证;2-历史无证
*/
@TableField("reg_type")
private String regType;
/**
* 设备种类编码,多个逗号分割
*/
@TableField("equ_list")
private String equList;
/**
* 未空代表公共,多个逗号分割
*/
@TableField("equ_category")
private String equCategory;
/**
* 严重程度:1到n,数字越大,等级越高,自定义
*/
@TableField("s_id")
private Integer sId;
}
package com.yeejoin.amos.boot.module.jg.api.mapper;
import com.yeejoin.amos.boot.module.jg.api.entity.TzsJgColumnReminderRule;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 字段提醒配置表 Mapper 接口
*
* @author system_generator
* @date 2025-06-17
*/
public interface TzsJgColumnReminderRuleMapper extends BaseMapper<TzsJgColumnReminderRule> {
}
package com.yeejoin.amos.boot.module.jg.api.service;
/**
* 字段提醒配置表接口类
*
* @author system_generator
* @date 2025-06-17
*/
public interface ITzsJgColumnReminderRuleService {
}
<?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.jg.api.mapper.TzsJgColumnReminderRuleMapper">
</mapper>
package com.yeejoin.amos.boot.module.jg.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.jg.biz.service.impl.TzsJgColumnReminderRuleServiceImpl;
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.jg.api.dto.TzsJgColumnReminderRuleDto;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
/**
* 字段提醒配置表
*
* @author system_generator
* @date 2025-06-17
*/
@RestController
@Api(tags = "字段提醒配置表Api")
@RequestMapping(value = "/tzs-jg-column-reminder-rule")
public class TzsJgColumnReminderRuleController extends BaseController {
@Autowired
TzsJgColumnReminderRuleServiceImpl tzsJgColumnReminderRuleServiceImpl;
/**
* 新增字段提醒配置表
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增字段提醒配置表", notes = "新增字段提醒配置表")
public ResponseModel<TzsJgColumnReminderRuleDto> save(@RequestBody TzsJgColumnReminderRuleDto model) {
model = tzsJgColumnReminderRuleServiceImpl.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<TzsJgColumnReminderRuleDto> updateBySequenceNbrTzsJgColumnReminderRule(@RequestBody TzsJgColumnReminderRuleDto model,@PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(tzsJgColumnReminderRuleServiceImpl.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(tzsJgColumnReminderRuleServiceImpl.removeById(sequenceNbr));
}
/**
* 根据sequenceNbr查询
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET",value = "根据sequenceNbr查询单个字段提醒配置表", notes = "根据sequenceNbr查询单个字段提醒配置表")
public ResponseModel<TzsJgColumnReminderRuleDto> selectOne(@PathVariable Long sequenceNbr) {
return ResponseHelper.buildResponse(tzsJgColumnReminderRuleServiceImpl.queryBySeq(sequenceNbr));
}
/**
* 列表分页查询
*
* @param current 当前页
* @param current 每页大小
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET",value = "字段提醒配置表分页查询", notes = "字段提醒配置表分页查询")
public ResponseModel<Page<TzsJgColumnReminderRuleDto>> queryForPage(@RequestParam(value = "current") int current,@RequestParam
(value = "size") int size) {
Page<TzsJgColumnReminderRuleDto> page = new Page<TzsJgColumnReminderRuleDto>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(tzsJgColumnReminderRuleServiceImpl.queryForTzsJgColumnReminderRulePage(page));
}
/**
* 列表全部数据查询
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET",value = "字段提醒配置表列表全部数据查询", notes = "字段提醒配置表列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<TzsJgColumnReminderRuleDto>> selectForList() {
return ResponseHelper.buildResponse(tzsJgColumnReminderRuleServiceImpl.queryForTzsJgColumnReminderRuleList());
}
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.biz.installNotice;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jg.biz.reminder.core.DefaultReminder;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.MatchItemDto;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.ReminderItemDto;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class InstallNoticeReminderAdapter extends DefaultReminder {
public InstallNoticeReminderAdapter(ApplicationContext applicationContext) {
super(applicationContext);
}
@Override
public IPage<ReminderItemDto> realtimeParse(String bizId, Page<ReminderItemDto> page) {
return null;
}
@Override
public IPage<ReminderItemDto> jsonParse(String bizId, Map<String, Object> formData, Page<ReminderItemDto> page) {
return null;
}
@Override
public MatchItemDto getMatchItem(String bizId, Map<String, Object> formData) {
return null;
}
@Override
public MatchItemDto getMatchItem(String bizId) {
return null;
}
@Override
public String supportBizType() {
return BusinessTypeEnum.JG_INSTALLATION_NOTIFICATION.name();
}
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.biz.newEquip;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.yeejoin.amos.boot.module.jg.biz.edit.process.equip.CommonEquipDataProcessService;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.MatchItemDto;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgRegisterInfoServiceImpl;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgUseInfoServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.*;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import static com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgRegisterInfoServiceImpl.*;
@Component
@RequiredArgsConstructor
@Getter
public class NewEquipParseService {
private final IdxBizJgUseInfoServiceImpl idxBizJgUseInfoService;
private final IdxBizJgRegisterInfoServiceImpl idxBizJgRegisterInfoService;
private final CommonEquipDataProcessService equipDataProcessService;
public String getRegTypeForEdit(String record) {
IdxBizJgUseInfo useInfo = idxBizJgUseInfoService.getOneData(record);
String dataSource = useInfo.getDataSource();
if (dataSource.contains("jg_his_black")) {
return "2";
} else if (dataSource.contains("jg_his")) {
return "1";
} else {
return "0";
}
}
public String getRegTypeForInsert(Map<String, Object> formData) {
String dataSource = formData.get("DATA_SOURCE").toString();
return "new".equals(dataSource) ? "0" : "his".equals(dataSource) ? "1" : "2";
}
public void setEquCateInfoForInsert(Map<String, Object> formData, MatchItemDto matchItemDto) {
LinkedHashMap equipmentClassForm = (LinkedHashMap) checkAndCast(formData.get(EQUIP_CLASS_FORM_ID));
String equListCode = (String) equipmentClassForm.get("EQU_LIST");
String equCategoryCode = (String) equipmentClassForm.get("EQU_CATEGORY");
String equDefineCode = (String) equipmentClassForm.get("EQU_DEFINE");
matchItemDto.setEquList(equListCode);
matchItemDto.setEquCategory(equCategoryCode);
matchItemDto.setEquDefine(equDefineCode);
}
public void setEquCateInfoForEdit(String record, MatchItemDto matchItemDto) {
IdxBizJgRegisterInfo registerInfo = idxBizJgRegisterInfoService.getOneData(record);
matchItemDto.setEquList(registerInfo.getEquList());
matchItemDto.setEquCategory(registerInfo.getEquCategory());
matchItemDto.setEquDefine(registerInfo.getEquDefine());
}
private Object checkAndCast(Object obj) {
if (obj instanceof LinkedHashMap) {
return obj;
} else {
throw new ClassCastException("对象类型不匹配");
}
}
public Map<String, Object> getEquipDetailByRecord(String record) {
return equipDataProcessService.getEquipDetailByRecord(record);
}
public IdxBizJgRegisterInfo getRegisterInfoFromJson(Map<String, Object> formData) {
LinkedHashMap equipmentInfoForm = (LinkedHashMap) checkAndCast(formData.get(EQUIP_INFO_FORM_ID));
return JSON.parseObject(JSON.toJSONString(equipmentInfoForm), IdxBizJgRegisterInfo.class);
}
public Map<String, Object> getDetailInfoFromJson(Map<String, Object> formData) {
Map<String, Object> re = new HashMap<>();
LinkedHashMap equipmentInfoForm = (LinkedHashMap) checkAndCast(formData.get(EQUIP_INFO_FORM_ID));
LinkedHashMap equipmentParamsForm = (LinkedHashMap) checkAndCast(formData.get(EQUIP_PARAMS_FORM_ID));
// 使用信息
IdxBizJgUseInfo useInfo = JSON.parseObject(JSON.toJSONString(equipmentInfoForm), IdxBizJgUseInfo.class);
// 设计信息
IdxBizJgDesignInfo designInfo = JSON.parseObject(JSON.toJSONString(equipmentInfoForm), IdxBizJgDesignInfo.class);
// 制造信息
IdxBizJgFactoryInfo factoryInfo = JSON.parseObject(JSON.toJSONString(equipmentInfoForm), IdxBizJgFactoryInfo.class);
// 施工信息
IdxBizJgConstructionInfo constructionInfo = JSON.parseObject(JSON.toJSONString(equipmentInfoForm), IdxBizJgConstructionInfo.class);
// 注册登记信息
IdxBizJgRegisterInfo registerInfo = JSON.parseObject(JSON.toJSONString(equipmentInfoForm), IdxBizJgRegisterInfo.class);
// 监督管理
IdxBizJgSupervisionInfo supervisionInfo = JSON.parseObject(JSON.toJSONString(equipmentInfoForm), IdxBizJgSupervisionInfo.class);
// 其他信息
IdxBizJgOtherInfo otherInfo = JSON.parseObject(JSON.toJSONString(equipmentInfoForm), IdxBizJgOtherInfo.class);
IdxBizJgInspectionDetectionInfo inspectionDetectionInfo = JSON.parseObject(JSON.toJSONString(equipmentInfoForm), IdxBizJgInspectionDetectionInfo.class);
IdxBizJgMaintenanceRecordInfo idxBizJgMaintenanceRecordInfo = JSON.parseObject(JSON.toJSONString(equipmentInfoForm), IdxBizJgMaintenanceRecordInfo.class);
re.putAll(BeanUtil.beanToMap(useInfo));
re.putAll(BeanUtil.beanToMap(registerInfo));
re.putAll(BeanUtil.beanToMap(factoryInfo));
re.putAll(BeanUtil.beanToMap(otherInfo));
re.putAll(BeanUtil.beanToMap(designInfo));
re.putAll(BeanUtil.beanToMap(supervisionInfo));
re.putAll(BeanUtil.beanToMap(inspectionDetectionInfo));
re.putAll(BeanUtil.beanToMap(idxBizJgMaintenanceRecordInfo));
re.putAll(BeanUtil.beanToMap(constructionInfo));
re.putAll(equipmentParamsForm);
return re;
}
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.biz.newEquip;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jg.biz.reminder.core.DefaultReminder;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.MatchItemDto;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.ReminderItemDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgRegisterInfo;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.Map;
@Component
public class NewEquipReminderAdapter extends DefaultReminder {
private final NewEquipParseService newEquipParseService;
public NewEquipReminderAdapter(ApplicationContext applicationContext, NewEquipParseService newEquipParseService) {
super(applicationContext);
this.newEquipParseService = newEquipParseService;
}
@Override
public IPage<ReminderItemDto> realtimeParse(String bizId, Page<ReminderItemDto> page) {
IdxBizJgRegisterInfo registerInfo = newEquipParseService.getIdxBizJgRegisterInfoService().getOneData(bizId);
ReminderItemDto reminderItemDto = new ReminderItemDto();
reminderItemDto.setEquipId(bizId);
reminderItemDto.setEquipNo(registerInfo.getEquCode());
reminderItemDto.setEquipName(registerInfo.getProductName());
reminderItemDto.setDetailData(newEquipParseService.getEquipDetailByRecord(bizId));
page.setRecords(Collections.singletonList(reminderItemDto));
page.setTotal(1L);
return page;
}
@Override
public IPage<ReminderItemDto> jsonParse(String bizId, Map<String, Object> formData, Page<ReminderItemDto> page) {
IdxBizJgRegisterInfo registerInfo = newEquipParseService.getRegisterInfoFromJson(formData);
ReminderItemDto reminderItemDto = new ReminderItemDto();
reminderItemDto.setEquipId(bizId);
reminderItemDto.setEquipNo(registerInfo.getEquCode());
reminderItemDto.setEquipName(registerInfo.getProductName());
reminderItemDto.setDetailData(newEquipParseService.getDetailInfoFromJson(formData));
page.setRecords(Collections.singletonList(reminderItemDto));
page.setTotal(1L);
return page;
}
@Override
public MatchItemDto getMatchItem(String bizId, Map<String, Object> formData) {
MatchItemDto matchItemDto = MatchItemDto.builder().build();
newEquipParseService.setEquCateInfoForInsert(formData, matchItemDto);
matchItemDto.setRegType(newEquipParseService.getRegTypeForInsert(formData));
return matchItemDto;
}
@Override
public MatchItemDto getMatchItem(String bizId) {
MatchItemDto matchItemDto = MatchItemDto.builder().build();
newEquipParseService.setEquCateInfoForEdit(bizId, matchItemDto);
matchItemDto.setRegType(newEquipParseService.getRegTypeForEdit(bizId));
return matchItemDto;
}
@Override
public String supportBizType() {
return BusinessTypeEnum.JG_NEW_EQUIP.name();
}
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.biz.useRegister;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jg.biz.reminder.core.DefaultReminder;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.MatchItemDto;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.ReminderItemDto;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class UseRegisterReminderAdapter extends DefaultReminder {
public UseRegisterReminderAdapter(ApplicationContext applicationContext) {
super(applicationContext);
}
@Override
public IPage<ReminderItemDto> realtimeParse(String bizId, Page<ReminderItemDto> page) {
return null;
}
@Override
public IPage<ReminderItemDto> jsonParse(String bizId, Map<String, Object> formData, Page<ReminderItemDto> page) {
return null;
}
@Override
public MatchItemDto getMatchItem(String bizId, Map<String, Object> formData) {
return null;
}
@Override
public MatchItemDto getMatchItem(String bizId) {
return null;
}
@Override
public String supportBizType() {
return BusinessTypeEnum.JG_USAGE_REGISTRATION.name();
}
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.core;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.MatchItemDto;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.ReminderField;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.ReminderItemDto;
import org.springframework.context.ApplicationContext;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public abstract class DefaultReminder implements IReminderHandler {
private final ApplicationContext applicationContext;
public DefaultReminder(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
@Override
public IPage<ReminderItemDto> remindersPage(Page<ReminderItemDto> page, String bizId, SourceType sourceType, Map<String, Object> formData) {
IPage<ReminderItemDto> params = parse(page, bizId, sourceType, formData);
ReminderFieldDiff reminderFieldDiff = applicationContext.getBean(ReminderFieldDiff.class);
MatchItemDto matchItemDto = getMatchItem(bizId, formData) == null ? MatchItemDto.builder().build() : getMatchItem(bizId, formData);
matchItemDto.setBizType(supportBizType());
matchItemDto.setPage(page);
return reminderFieldDiff.getReminderItemsPage(params, matchItemDto);
}
@Override
public Integer getReminderLevel(String bizId) {
ReminderFieldDiff reminderFieldDiff = applicationContext.getBean(ReminderFieldDiff.class);
MatchItemDto matchItemDto = getMatchItem(bizId) == null ? MatchItemDto.builder().build() : getMatchItem(bizId);
List<ReminderItemDto> equips = reminderFieldDiff.getReminderItemList(realtimeParse(bizId, null).getRecords(), matchItemDto);
List<ReminderField> items = equips.stream().flatMap(s -> s.getItems().stream()).collect(Collectors.toList());
return items.stream().max(Comparator.comparingInt(ReminderField::getSId)).map(ReminderField::getSId).orElse(-1);
}
private IPage<ReminderItemDto> parse(Page<ReminderItemDto> page, String bizId, SourceType sourceType, Map<String, Object> formData) {
switch (sourceType) {
case realTime:
return realtimeParse(bizId, page);
case json:
return jsonParse(bizId, formData, page);
default:
throw new RuntimeException("no support type for " + sourceType);
}
}
public abstract IPage<ReminderItemDto> realtimeParse(String bizId, Page<ReminderItemDto> page);
public abstract IPage<ReminderItemDto> jsonParse(String bizId, Map<String, Object> formData, Page<ReminderItemDto> page);
public abstract MatchItemDto getMatchItem(String bizId, Map<String, Object> formData);
public abstract MatchItemDto getMatchItem(String bizId);
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.core;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.ReminderItemDto;
import java.util.Map;
public interface IReminderHandler {
IPage<ReminderItemDto> remindersPage(Page<ReminderItemDto> page, String bizId, SourceType sourceType, Map<String, Object> formData);
Integer getReminderLevel(String bizId);
String supportBizType();
enum SourceType {
// 实时查询
realTime,
// 用json生成
json
}
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.core;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Component
@RequiredArgsConstructor
public class ReminderFactory {
private final List<IReminderHandler> reminderHandlers;
private final Map<String, IReminderHandler> reminderHandlerMap = new ConcurrentHashMap<>();
public IReminderHandler getReminderHandler(String bizType) {
return reminderHandlerMap.computeIfAbsent(bizType, (k) -> {
for (IReminderHandler handler : reminderHandlers) {
if (handler.supportBizType().equals(bizType)) {
return handler;
}
}
throw new BadRequest("not found reminder handler for " + bizType);
});
}
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.core;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.MatchItemDto;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.ReminderItemDto;
import java.util.List;
public interface ReminderFieldDiff {
IPage<ReminderItemDto> getReminderItemsPage(IPage<ReminderItemDto> equips, MatchItemDto matchItem);
List<ReminderItemDto> getReminderItemList(List<ReminderItemDto> equips, MatchItemDto matchItem);
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.dto;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class MatchItemDto {
private String bizType;
private String equList;
private String equCategory;
private String equDefine;
private String regType;
Page<ReminderItemDto> page;
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.dto;
import lombok.Data;
@Data
public class ReminderField {
/**
* 字段唯一标识
*/
private String columnKey;
/**
* 字段描述
*/
private String columnLabel;
/**
* 字段类型预留
*/
private String columnType;
/**
* 说明
*/
private String columnValue;
/**
* 严重等级
*/
private int sId;
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.dto;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class ReminderItemDto {
/**
* 设备装置标识
*/
private String equipId;
/**
* 设备名称
*/
private String equipName;
/**
* 设备管道编号
*/
private String equipNo;
/**
* 详细数据
*/
@JSONField(serialize = false)
private Map<String, Object> detailData;
/**
* 变更的数据项
*/
private List<ReminderField> items;
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.jg.biz.reminder.core.IReminderHandler;
import com.yeejoin.amos.boot.module.jg.biz.reminder.core.ReminderFactory;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.ReminderItemDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
@RequiredArgsConstructor
public class RemindServiceImpl {
private final ReminderFactory reminderFactory;
public IPage<ReminderItemDto> getReminderItems(Page<ReminderItemDto> page, String bizId, String bizType, IReminderHandler.SourceType sourceType, Map<String, Object> formData) {
return reminderFactory.getReminderHandler(bizType).remindersPage(page, bizId, sourceType, formData);
}
public Integer getReminderLevel(String bizId, String bizType) {
return reminderFactory.getReminderHandler(bizType).getReminderLevel(bizId);
}
}
package com.yeejoin.amos.boot.module.jg.biz.reminder.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yeejoin.amos.boot.module.jg.api.entity.TzsJgColumnReminderRule;
import com.yeejoin.amos.boot.module.jg.biz.reminder.core.ReminderFieldDiff;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.MatchItemDto;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.ReminderField;
import com.yeejoin.amos.boot.module.jg.biz.reminder.dto.ReminderItemDto;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.TzsJgColumnReminderRuleServiceImpl;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Component
@RequiredArgsConstructor
public class ReminderFieldDiffImpl implements ReminderFieldDiff {
private final TzsJgColumnReminderRuleServiceImpl reminderRuleService;
@Override
public IPage<ReminderItemDto> getReminderItemsPage(IPage<ReminderItemDto> page, MatchItemDto matchItem) {
page.getRecords().forEach(reminderItemDto -> {
reminderItemDto.setItems(this.buildRemindItem(reminderItemDto, matchItem));
});
return page;
}
@Override
public List<ReminderItemDto> getReminderItemList(List<ReminderItemDto> equips, MatchItemDto matchItem) {
equips.forEach(reminderItemDto -> {
reminderItemDto.setItems(this.buildRemindItem(reminderItemDto, matchItem));
});
return equips;
}
private List<ReminderField> buildRemindItem(ReminderItemDto reminderItemDto, MatchItemDto matchItem) {
// regType默认0-新增,不同regType对应不同字段时,配置多行
List<TzsJgColumnReminderRule> rules = reminderRuleService.list(new LambdaQueryWrapper<TzsJgColumnReminderRule>().eq(TzsJgColumnReminderRule::getBizType, matchItem.getBizType()).eq(StringUtils.isNotEmpty(matchItem.getRegType()), TzsJgColumnReminderRule::getRegType, matchItem.getRegType()));
List<TzsJgColumnReminderRule> equCategoryMatch = new ArrayList<>();
List<TzsJgColumnReminderRule> equListMatch = new ArrayList<>();
// 特殊不一样的配置设备类别
if (matchItem.getEquCategory() != null) {
equCategoryMatch = rules.stream().filter(r -> r.getEquCategory().contains(matchItem.getEquCategory())).collect(Collectors.toList());
}
// 和设备类别没关系配置设备整理
if (matchItem.getEquList() != null) {
equListMatch = rules.stream().filter(r -> r.getEquList().contains(matchItem.getEquList())).collect(Collectors.toList());
}
Set<TzsJgColumnReminderRule> reminderRules = new HashSet<>(Stream.concat(equCategoryMatch.stream(), equListMatch.stream()).collect(Collectors.toMap(TzsJgColumnReminderRule::getColumnKey, Function.identity(), (O1, O2) -> O1)).values());
return reminderRules.stream().filter(e -> containKeyAndValue(reminderItemDto.getDetailData(), e.getColumnKey())).map(e -> {
ReminderField reminderField = new ReminderField();
reminderField.setColumnKey(e.getColumnKey());
reminderField.setColumnLabel(e.getColumnLabel());
reminderField.setColumnValue(e.getColumnValue());
reminderField.setSId(e.getSId());
return reminderField;
}).collect(Collectors.toList());
}
private boolean containKeyAndValue(Map<String, Object> detailData, String columnKey) {
return Arrays.stream(columnKey.split(",")).noneMatch(k -> detailData.containsKey(k) && StringUtils.isNotEmpty(detailData.get(k).toString()));
}
}
......@@ -151,11 +151,11 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
*/
public static final String BUSINESS_SCENARIOS = "businessScenarios";
// 设备分类表单id
private static final String EQUIP_CLASS_FORM_ID = "equipClass";
public static final String EQUIP_CLASS_FORM_ID = "equipClass";
// 设备基本信息表单id
private static final String EQUIP_INFO_FORM_ID = "equipInfo";
public static final String EQUIP_INFO_FORM_ID = "equipInfo";
// 设备技术参数表单id
private static final String EQUIP_PARAMS_FORM_ID = "equipParams";
public static final String EQUIP_PARAMS_FORM_ID = "equipParams";
// 主要零部件
private static final String EQUIP_MAINPARTS_FORM_ID = "mainParts";
// 安全附件
......
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.yeejoin.amos.boot.module.jg.api.entity.TzsJgColumnReminderRule;
import com.yeejoin.amos.boot.module.jg.api.mapper.TzsJgColumnReminderRuleMapper;
import com.yeejoin.amos.boot.module.jg.api.service.ITzsJgColumnReminderRuleService;
import com.yeejoin.amos.boot.module.jg.api.dto.TzsJgColumnReminderRuleDto;
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 2025-06-17
*/
@Service
public class TzsJgColumnReminderRuleServiceImpl extends BaseService<TzsJgColumnReminderRuleDto,TzsJgColumnReminderRule,TzsJgColumnReminderRuleMapper> implements ITzsJgColumnReminderRuleService {
/**
* 分页查询
*/
public Page<TzsJgColumnReminderRuleDto> queryForTzsJgColumnReminderRulePage(Page<TzsJgColumnReminderRuleDto> page) {
return this.queryForPage(page, null, false);
}
/**
* 列表查询 示例
*/
public List<TzsJgColumnReminderRuleDto> queryForTzsJgColumnReminderRuleList() {
return this.queryForList("" , false);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment