Commit c8e10b26 by 刘泽志

文档上传

parent 3f89b1b1
...@@ -16,23 +16,25 @@ import com.tbyf.his.framework.datasource.DataSourceUtil; ...@@ -16,23 +16,25 @@ import com.tbyf.his.framework.datasource.DataSourceUtil;
import com.tbyf.his.framework.datasource.DynamicDataSourceContextHolder; import com.tbyf.his.framework.datasource.DynamicDataSourceContextHolder;
import com.tbyf.his.system.domain.SysDatasource; import com.tbyf.his.system.domain.SysDatasource;
import com.tbyf.his.system.service.ISysDatasourceService; import com.tbyf.his.system.service.ISysDatasourceService;
import com.tbyf.his.web.dataImport.core.DiConfig;
import com.tbyf.his.web.dataImport.core.RuleVO;
import com.tbyf.his.web.dataImport.core.RuleValidator;
import com.tbyf.his.web.dataImport.domain.param.*; import com.tbyf.his.web.dataImport.domain.param.*;
import com.tbyf.his.web.dataImport.entity.DataDict; import com.tbyf.his.web.dataImport.entity.*;
import com.tbyf.his.web.dataImport.entity.DataField; import com.tbyf.his.web.dataImport.service.*;
import com.tbyf.his.web.dataImport.entity.DataImportTemplate;
import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.service.DataDictService;
import com.tbyf.his.web.dataImport.service.DataFieldService;
import com.tbyf.his.web.dataImport.service.DataImportTemplateService;
import com.tbyf.his.web.dataImport.service.DataRuleService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
...@@ -68,13 +70,17 @@ public class DataImportController { ...@@ -68,13 +70,17 @@ public class DataImportController {
@Autowired @Autowired
private DataRuleService dataRuleService; private DataRuleService dataRuleService;
@Autowired
private BindRuleService bindRuleService;
@Autowired
private ExcelDataService excelDataService;
@IgnoreWebSecurity @IgnoreWebSecurity
@GetMapping("/template") @GetMapping("/template")
@ApiOperation("模板查询") @ApiOperation("模板查询")
public AjaxResult queryTemplate(@Validated QueryTemplateParam param) { public AjaxResult queryTemplate(@Validated QueryTemplateParam param) {
final LambdaQueryWrapper<DataImportTemplate> wrapper = Wrappers.lambdaQuery(DataImportTemplate.class) return AjaxResult.success(dataImportService.queryTemplate(param));
.eq(DataImportTemplate::getYear, param.getYear());
return AjaxResult.success(dataImportService.list(wrapper));
} }
@IgnoreWebSecurity @IgnoreWebSecurity
...@@ -309,4 +315,103 @@ public class DataImportController { ...@@ -309,4 +315,103 @@ public class DataImportController {
return AjaxResult.success(); return AjaxResult.success();
} }
@IgnoreWebSecurity
@PostMapping("/rule/test")
@ApiOperation("规则测试")
public AjaxResult testRule(@RequestBody @Validated RuleVO test) {
final RuleValidator validator = DiConfig.getValidator(test.getMode());
validator.validate(test);
if (StringUtils.isNotBlank(test.getResult())) {
return AjaxResult.error(test.getResult());
}
return AjaxResult.success();
}
@IgnoreWebSecurity
@GetMapping("/bind/quick")
@ApiOperation("快速绑定")
public AjaxResult quickBind(@RequestParam String templateId,
@RequestParam String ruleId) {
final LambdaQueryWrapper<DataField> queryWrapper = Wrappers.lambdaQuery(DataField.class)
.select(DataField::getId)
.eq(DataField::getTemplateId, templateId);
final List<String> fieldIdList = dataFieldService.list(queryWrapper).stream()
.map(DataField::getId)
.collect(Collectors.toList());
final LambdaQueryWrapper<BindRule> removeWrapper = Wrappers.lambdaQuery(BindRule.class)
.in(BindRule::getDataId, fieldIdList)
.eq(BindRule::getRuleId, ruleId);
bindRuleService.remove(removeWrapper);
final List<BindRule> bindRuleList = fieldIdList.stream().map(item -> {
BindRule bind = new BindRule();
bind.setDataId(item);
bind.setRuleId(ruleId);
return bind;
}).collect(Collectors.toList());
bindRuleService.saveBatch(bindRuleList);
return AjaxResult.success();
}
@IgnoreWebSecurity
@GetMapping("/bind")
@ApiOperation("查询绑定的规则")
public AjaxResult queryBindRule(@RequestParam String fieldId) {
final List<BindRule> list = bindRuleService.list(Wrappers.lambdaQuery(BindRule.class)
.eq(BindRule::getDataId, fieldId));
if (CollectionUtils.isEmpty(list)) {
return AjaxResult.success(Collections.emptyList());
}
final List<String> idList = list.stream().map(BindRule::getRuleId).collect(Collectors.toList());
return AjaxResult.success(dataRuleService.list(Wrappers.lambdaQuery(DataRule.class)
.in(DataRule::getId, idList)));
}
@IgnoreWebSecurity
@PostMapping("/bind")
@ApiOperation("配置字段规则绑定")
@Transactional(rollbackFor = Exception.class)
public AjaxResult bindRule(@RequestBody BindRuleParam param) {
bindRuleService.remove(Wrappers.lambdaQuery(BindRule.class).eq(BindRule::getDataId, param.getFieldId()));
if (!CollectionUtils.isEmpty(param.getRuleIdList())) {
final List<BindRule> bindRuleList = param.getRuleIdList().stream().map(item -> {
BindRule bd = new BindRule();
bd.setRuleId(item);
bd.setDataId(param.getFieldId());
return bd;
}).collect(Collectors.toList());
bindRuleService.saveBatch(bindRuleList);
}
return AjaxResult.success();
}
@SneakyThrows
@IgnoreWebSecurity
@PostMapping("/upload")
@ApiOperation("文件导入")
public AjaxResult bindRule(UploadExcelParam param) {
if (StringUtils.equals(param.getType(), "1")) {
} else if (StringUtils.equals(param.getType(), "2")) {
ExcelData excelData = excelDataService.getOne(Wrappers.lambdaQuery(ExcelData.class)
.eq(ExcelData::getTemplateId, param.getTemplateId())
.eq(ExcelData::getType, "2"), false);
if (ObjectUtils.isEmpty(excelData)) {
excelData = new ExcelData();
excelData.setFile(param.getFile().getBytes());
excelData.setFileName(param.getFile().getOriginalFilename());
excelData.setType("2");
excelData.setTemplateId(param.getTemplateId());
excelData.setYear(param.getYear());
excelData.setOrgName(param.getOrgName());
excelDataService.save(excelData);
} else {
excelData.setFile(param.getFile().getBytes());
excelData.setFileName(param.getFile().getOriginalFilename());
excelDataService.updateById(excelData);
}
}
return AjaxResult.success();
}
} }
package com.tbyf.his.web.dataImport.core;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author lzz
* @date 2023/2/9 9:22
*/
@Configuration
public class DiConfig {
@Autowired
private ApplicationContext applicationContext;
public static final Map<String, RuleValidator> VALIDATOR_MAP = new ConcurrentHashMap<>(8);
@PostConstruct
public void init() {
final Map<String, RuleValidator> validatorMap = applicationContext.getBeansOfType(RuleValidator.class);
VALIDATOR_MAP.putAll(validatorMap);
}
/**
* 获取校验器
*
* @param mode
* @return
*/
public static RuleValidator getValidator(String mode) {
return VALIDATOR_MAP.get(DiConstants.SERVICE_PREFIX + mode);
}
}
package com.tbyf.his.web.dataImport.core;
/**
* DataImport常量
*
* @author lzz
* @date 2023/1/10 17:22
*/
public class DiConstants {
/**
* 唯一分隔符
*/
public static final String SEPARATOR = ",";
/**
* 验证规则 正则
*/
public static final String SERVICE_PREFIX = "di_validation_mode_";
/**
* 验证规则 正则
*/
public static final String VALID_MODE_REG = "正则";
/**
* 验证规则 非空
*/
public static final String VALID_MODE_NOTNULL = "非空";
/**
* 验证规则 区间
*/
public static final String VALID_MODE_SECTION = "区间";
/**
* 验证规则 比较
*/
public static final String VALID_MODE_COMPARE = "比较";
/**
* 验证规则 值域
*/
public static final String VALID_MODE_RANGE = "值域";
/**
* 验证规则 逻辑与
*/
public static final String VALID_MODE_WITH = "逻辑与";
/**
* 验证规则 逻辑或
*/
public static final String VALID_MODE_OR = "逻辑或";
/**
* 基础规则
*/
public static final String RULE_BASE = "基础规则";
/**
* 组合规则
*/
public static final String RULE_COMBINE = "组合规则";
}
package com.tbyf.his.web.dataImport.core;
import com.tbyf.his.web.dataImport.entity.DataRule;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author lzz
* @date 2023/2/9 9:18
*/
@Data
public class RuleVO {
@ApiModelProperty("规则ID")
private String id;
@ApiModelProperty("规则名称")
private String name;
@ApiModelProperty("规则类型")
private String type;
@ApiModelProperty("验证模式")
private String mode;
@ApiModelProperty("验证内容")
private String content;
@ApiModelProperty("待验证的值")
private String value;
@ApiModelProperty("验证结果")
private String result;
public void init(DataRule rule) {
this.setId(rule.getId());
this.setName(rule.getName());
this.setType(rule.getType());
this.setMode(rule.getMode());
this.setContent(rule.getContent());
}
public static RuleVO create(DataRule rule) {
final RuleVO vo = new RuleVO();
vo.init(rule);
return vo;
}
}
package com.tbyf.his.web.dataImport.core;
/**
* @author lzz
* @date 2023/2/9 9:21
*/
public interface RuleValidator {
/**
* 校验方法
*
* @param rule
*/
void validate(RuleVO rule);
}
package com.tbyf.his.web.dataImport.core.validator;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.web.dataImport.core.DiConstants;
import com.tbyf.his.web.dataImport.core.RuleVO;
import com.tbyf.his.web.dataImport.core.RuleValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
/**
* 比较规则校验
* 目前支持符号为 > >= < <= = !=
*
* @author lzz
* @date 2023/1/29 14:21
*/
@Service(DiConstants.SERVICE_PREFIX + DiConstants.VALID_MODE_COMPARE)
@Slf4j
public class CompareValidator implements RuleValidator {
public static final String GT = ">";
public static final String GTE = ">=";
public static final String LT = "<";
public static final String LTE = "<=";
public static final String EQ = "=";
public static final String NEQ = "!=";
private String getValue(String value, String symbol) {
return value.trim().substring(symbol.length()).trim();
}
@Override
public void validate(RuleVO rule) {
try {
if (rule.getContent().startsWith(GT)) {
final BigDecimal x = new BigDecimal(getValue(rule.getContent(), GT));
if (new BigDecimal(rule.getValue()).compareTo(x) <= 0) {
rule.setResult(StringUtils.format("比较 {} 未通过", rule.getContent()));
}
} else if (rule.getContent().startsWith(GTE)) {
final BigDecimal x = new BigDecimal(getValue(rule.getContent(), GTE));
if (new BigDecimal(rule.getValue()).compareTo(x) < 0) {
rule.setResult(StringUtils.format("比较 {} 未通过", rule.getContent()));
}
} else if (rule.getContent().startsWith(LT)) {
final BigDecimal x = new BigDecimal(getValue(rule.getContent(), LT));
if (new BigDecimal(rule.getValue()).compareTo(x) >= 0) {
rule.setResult(StringUtils.format("比较 {} 未通过", rule.getContent()));
}
} else if (rule.getContent().startsWith(LTE)) {
final BigDecimal x = new BigDecimal(getValue(rule.getContent(), LTE));
if (new BigDecimal(rule.getValue()).compareTo(x) > 0) {
rule.setResult(StringUtils.format("比较 {} 未通过", rule.getContent()));
}
} else if (rule.getContent().startsWith(EQ)) {
final String content = getValue(rule.getContent(), EQ);
if (!StringUtils.equals(rule.getValue().trim(), content)) {
rule.setResult(StringUtils.format("比较 {} 未通过", rule.getContent()));
}
} else if (rule.getContent().startsWith(NEQ)) {
final String content = getValue(rule.getContent(), NEQ);
if (StringUtils.equals(rule.getValue().trim(), content)) {
rule.setResult(StringUtils.format("比较 {} 未通过", rule.getContent()));
}
}
} catch (Exception e) {
log.error("比较未通过", e);
rule.setResult(StringUtils.format("比较 {} 未通过", rule.getContent()));
}
}
}
package com.tbyf.his.web.dataImport.core.validator;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.web.dataImport.core.DiConstants;
import com.tbyf.his.web.dataImport.core.RuleVO;
import com.tbyf.his.web.dataImport.core.RuleValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* 非空规则校验
*
* @author lzz
* @date 2023/1/29 14:21
*/
@Service(DiConstants.SERVICE_PREFIX + DiConstants.VALID_MODE_NOTNULL)
@Slf4j
public class NotNullValidator implements RuleValidator {
@Override
public void validate(RuleVO rule) {
try {
if (StringUtils.isBlank(rule.getValue())) {
rule.setResult(StringUtils.format("非空校验 {} 未通过", rule.getName()));
return;
}
if (StringUtils.isNotBlank(rule.getContent())) {
final String[] badArray = rule.getContent().split(DiConstants.SEPARATOR);
for (String badStr : badArray) {
if (StringUtils.equals(badStr, rule.getValue())) {
rule.setResult(StringUtils.format("非空校验 {} 未通过", rule.getName()));
return;
}
}
}
} catch (Exception e) {
log.error("非空校验未通过", e);
rule.setResult(StringUtils.format("非空校验 {} 未通过", rule.getName()));
}
}
}
package com.tbyf.his.web.dataImport.core.validator;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.web.dataImport.core.DiConfig;
import com.tbyf.his.web.dataImport.core.DiConstants;
import com.tbyf.his.web.dataImport.core.RuleVO;
import com.tbyf.his.web.dataImport.core.RuleValidator;
import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.service.DataRuleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 组合规则 逻辑或校验
*
* @author lzz
* @date 2023/1/29 14:21
*/
@Service(DiConstants.SERVICE_PREFIX + DiConstants.VALID_MODE_OR)
@Slf4j
public class OrValidator implements RuleValidator {
@Autowired
private DataRuleService dataRuleService;
@Override
public void validate(RuleVO rule) {
try {
if (StringUtils.isNotBlank(rule.getContent())) {
final String[] ruleIds = rule.getContent().split(DiConstants.SEPARATOR);
final DataRule dataRule1 = dataRuleService.getById(ruleIds[0]);
final DataRule dataRule2 = dataRuleService.getById(ruleIds[1]);
final RuleVO rule1 = RuleVO.create(dataRule1);
final RuleVO rule2 = RuleVO.create(dataRule2);
rule1.setValue(rule.getValue());
rule2.setValue(rule.getValue());
final RuleValidator validator1 = DiConfig.getValidator(rule1.getMode());
validator1.validate(rule1);
if (StringUtils.isNotBlank(rule1.getResult())) {
// 第一个条件不满足就进行第二个
final RuleValidator validator2 = DiConfig.getValidator(rule2.getMode());
validator2.validate(rule2);
if (StringUtils.isNotBlank(rule2.getResult())) {
rule.setResult(rule2.getResult());
}
}
}
} catch (Exception e) {
log.error("逻辑或组合校验未通过", e);
//rule.setResult(StringUtils.format("逻辑或组合校验未通过"));
}
}
}
package com.tbyf.his.web.dataImport.core.validator;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.web.dataImport.core.DiConstants;
import com.tbyf.his.web.dataImport.core.RuleVO;
import com.tbyf.his.web.dataImport.core.RuleValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* 值域校验
*
* @author lzz
* @date 2023/1/29 14:21
*/
@Service(DiConstants.SERVICE_PREFIX + DiConstants.VALID_MODE_RANGE)
@Slf4j
public class RangeValidator implements RuleValidator {
@Override
public void validate(RuleVO rule) {
try {
if (StringUtils.isNotBlank(rule.getContent())) {
final String[] arr = rule.getContent().split(DiConstants.SEPARATOR);
boolean flag = false;
for (String value : arr) {
if (StringUtils.equals(value.trim(), rule.getValue().trim())) {
flag = true;
break;
}
}
if (!flag) {
rule.setResult(StringUtils.format("值域校验未通过,值域:{}", rule.getContent()));
}
}
} catch (Exception e) {
log.error("值域校验未通过", e);
rule.setResult(StringUtils.format("值域校验未通过,值域:{}", rule.getContent()));
}
}
}
package com.tbyf.his.web.dataImport.core.validator;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.web.dataImport.core.DiConstants;
import com.tbyf.his.web.dataImport.core.RuleVO;
import com.tbyf.his.web.dataImport.core.RuleValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.regex.Pattern;
/**
* @author lzz
* @date 2023/1/29 14:21
*/
@Service(DiConstants.SERVICE_PREFIX + DiConstants.VALID_MODE_REG)
@Slf4j
public class RegValidator implements RuleValidator {
@Override
public void validate(RuleVO rule) {
try {
final boolean matches = Pattern.matches(rule.getContent(), rule.getValue());
if (!matches) {
rule.setResult(StringUtils.format("正则表达式{}校验未通过", rule.getContent()));
}
} catch (Exception e) {
log.error("正则表达式校验未通过", e);
rule.setResult(StringUtils.format("正则表达式{}校验未通过", rule.getContent()));
}
}
}
package com.tbyf.his.web.dataImport.core.validator;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.web.dataImport.core.DiConstants;
import com.tbyf.his.web.dataImport.core.RuleVO;
import com.tbyf.his.web.dataImport.core.RuleValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
/**
* 区间规则校验
*
* @author lzz
* @date 2023/1/29 14:21
*/
@Service(DiConstants.SERVICE_PREFIX + DiConstants.VALID_MODE_SECTION)
@Slf4j
public class SectionValidator implements RuleValidator {
@Override
public void validate(RuleVO rule) {
try {
if (StringUtils.isNotBlank(rule.getContent())) {
final String[] section = rule.getContent().split(DiConstants.SEPARATOR);
final BigDecimal a = new BigDecimal(section[0]);
final BigDecimal b = new BigDecimal(section[1]);
final BigDecimal value = new BigDecimal(rule.getValue());
if (value.compareTo(a) >= 0) {
if (b.compareTo(value) < 0) {
rule.setResult(StringUtils.format("区间校验未通过,数据大于{}", b.toString()));
}
} else {
rule.setResult(StringUtils.format("区间校验未通过,数据小于{}", a.toString()));
}
}
} catch (Exception e) {
log.error("区间校验未通过", e);
rule.setResult(StringUtils.format("区间校验 {} 未通过", rule.getName()));
}
}
}
package com.tbyf.his.web.dataImport.core.validator;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.web.dataImport.core.DiConfig;
import com.tbyf.his.web.dataImport.core.DiConstants;
import com.tbyf.his.web.dataImport.core.RuleVO;
import com.tbyf.his.web.dataImport.core.RuleValidator;
import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.service.DataRuleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 组合规则逻辑与校验
*
* @author lzz
* @date 2023/1/29 14:21
*/
@Service(DiConstants.SERVICE_PREFIX + DiConstants.VALID_MODE_WITH)
@Slf4j
public class WithValidator implements RuleValidator {
@Autowired
private DataRuleService dataRuleService;
@Override
public void validate(RuleVO rule) {
try {
if (StringUtils.isNotBlank(rule.getContent())) {
final String[] ruleIds = rule.getContent().split(DiConstants.SEPARATOR);
final DataRule dataRule1 = dataRuleService.getById(ruleIds[0]);
final DataRule dataRule2 = dataRuleService.getById(ruleIds[1]);
final RuleVO rule1 = RuleVO.create(dataRule1);
final RuleVO rule2 = RuleVO.create(dataRule2);
rule1.setValue(rule.getValue());
rule2.setValue(rule.getValue());
final RuleValidator validator1 = DiConfig.getValidator(rule1.getMode());
validator1.validate(rule1);
if (StringUtils.isBlank(rule1.getResult())) {
final RuleValidator validator2 = DiConfig.getValidator(rule2.getMode());
validator2.validate(rule2);
if (StringUtils.isNotBlank(rule2.getResult())) {
rule.setResult(rule2.getResult());
}
} else {
rule.setResult(rule1.getResult());
}
}
} catch (Exception e) {
log.error("逻辑与组合校验未通过", e);
//rule.setResult(StringUtils.format("逻辑与组合校验未通过"));
}
}
}
package com.tbyf.his.web.dataImport.domain.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* @author lzz
* @date 2023/1/10 15:36
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "规则绑定入参", description = "规则绑定入参")
public class BindRuleParam implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "字段ID")
@NotNull(message = "id不能为空")
private String fieldId;
@ApiModelProperty(value = "规则ID集合")
private List<String> ruleIdList;
}
package com.tbyf.his.web.dataImport.domain.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.web.multipart.MultipartFile;
import java.io.Serializable;
/**
* @author lzz
* @date 2023/1/10 15:36
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "excel上传入参", description = "excel上传入参")
public class UploadExcelParam implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "文件类型")
private String type;
@ApiModelProperty(value = "规则ID集合")
private MultipartFile file;
@ApiModelProperty(value = "模板ID")
private String templateId;
@ApiModelProperty(value = "数据年份")
private String year;
@ApiModelProperty(value = "机构类型")
private String orgName;
}
package com.tbyf.his.web.dataImport.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.tbyf.his.web.dataImport.domain.BaseMp;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* @author lzz
* @date 2023/1/10 15:36
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel(value = "数据导入模板", description = "数据导入模板")
public class TemplateVO extends BaseMp implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "模板ID")
private String id;
@ApiModelProperty(value = "模板名称")
private String name;
@ApiModelProperty(value = "机构类型")
private String orgName;
@ApiModelProperty(value = "导入状态 1-已导入 0-未导入")
private String importStatus;
@ApiModelProperty(value = "数据年份")
private String year;
@JsonFormat(pattern = FORMAT, timezone = TIMEZONE)
@ApiModelProperty(value = "上次导入时间")
private Date importTime;
@ApiModelProperty(value = "数据源ID")
private String dataSourceId;
@ApiModelProperty(value = "表名")
private String tableName;
@ApiModelProperty(value = "excel模板id")
private String excelId;
}
package com.tbyf.his.web.dataImport.entity;
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 io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @author lzz
* @date 2023/1/10 15:36
*/
@Data
@Accessors(chain = true)
@TableName(value = "excel_data", autoResultMap = true)
@ApiModel(value = "excel存储表", description = "excel存储表")
public class ExcelData implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "文件名")
@TableField("file_name")
private String fileName;
@ApiModelProperty(value = "文件数据")
@TableField("file")
private byte[] file;
@ApiModelProperty(value = "文件类型 1-初始导入文件 2-标准模板文件")
@TableField("type")
private String type;
@ApiModelProperty(value = "模板ID")
@TableField("template_id")
private String templateId;
@ApiModelProperty(value = "数据年份")
@TableField("year")
private String year;
@ApiModelProperty(value = "机构类型")
@TableField("org_name")
private String orgName;
}
package com.tbyf.his.web.dataImport.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tbyf.his.web.dataImport.entity.BindRule;
/**
* @author lzz
* @date 2023/2/7 11:22
*/
public interface BindRuleMapper extends BaseMapper<BindRule> {
}
package com.tbyf.his.web.dataImport.mapper; package com.tbyf.his.web.dataImport.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam;
import com.tbyf.his.web.dataImport.domain.vo.TemplateVO;
import com.tbyf.his.web.dataImport.entity.DataImportTemplate; import com.tbyf.his.web.dataImport.entity.DataImportTemplate;
import java.util.List;
/** /**
* @author lzz * @author lzz
* @date 2023/2/7 11:22 * @date 2023/2/7 11:22
*/ */
public interface DataImportTemplateMapper extends BaseMapper<DataImportTemplate> { public interface DataImportTemplateMapper extends BaseMapper<DataImportTemplate> {
/**
* 查询模板数据
*
* @param param
* @return
*/
List<TemplateVO> queryTemplate(QueryTemplateParam param);
} }
package com.tbyf.his.web.dataImport.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tbyf.his.web.dataImport.entity.ExcelData;
/**
* @author lzz
* @date 2023/2/7 11:22
*/
public interface ExcelDataMapper extends BaseMapper<ExcelData> {
}
package com.tbyf.his.web.dataImport.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tbyf.his.web.dataImport.entity.BindRule;
/**
* @author lzz
* @date 2023/2/7 11:23
*/
public interface BindRuleService extends IService<BindRule> {
}
package com.tbyf.his.web.dataImport.service; package com.tbyf.his.web.dataImport.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam;
import com.tbyf.his.web.dataImport.domain.vo.TemplateVO;
import com.tbyf.his.web.dataImport.entity.DataImportTemplate; import com.tbyf.his.web.dataImport.entity.DataImportTemplate;
import java.util.List;
/** /**
* @author lzz * @author lzz
* @date 2023/2/7 11:23 * @date 2023/2/7 11:23
*/ */
public interface DataImportTemplateService extends IService<DataImportTemplate> { public interface DataImportTemplateService extends IService<DataImportTemplate> {
/**
* 查询模板信息
*
* @param param
* @return
*/
List<TemplateVO> queryTemplate(QueryTemplateParam param);
} }
package com.tbyf.his.web.dataImport.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tbyf.his.web.dataImport.entity.ExcelData;
/**
* @author lzz
* @date 2023/2/7 11:23
*/
public interface ExcelDataService extends IService<ExcelData> {
}
package com.tbyf.his.web.dataImport.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tbyf.his.common.annotation.DataSource;
import com.tbyf.his.common.enums.DataSourceType;
import com.tbyf.his.web.dataImport.entity.BindRule;
import com.tbyf.his.web.dataImport.mapper.BindRuleMapper;
import com.tbyf.his.web.dataImport.service.BindRuleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author lzz
* @date 2023/2/7 11:24
*/
@Slf4j
@Service
@DataSource(DataSourceType.MASTER)
public class BindRuleServiceImpl extends ServiceImpl<BindRuleMapper, BindRule> implements BindRuleService {
}
...@@ -3,12 +3,17 @@ package com.tbyf.his.web.dataImport.service.impl; ...@@ -3,12 +3,17 @@ package com.tbyf.his.web.dataImport.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tbyf.his.common.annotation.DataSource; import com.tbyf.his.common.annotation.DataSource;
import com.tbyf.his.common.enums.DataSourceType; import com.tbyf.his.common.enums.DataSourceType;
import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam;
import com.tbyf.his.web.dataImport.domain.vo.TemplateVO;
import com.tbyf.his.web.dataImport.entity.DataImportTemplate; import com.tbyf.his.web.dataImport.entity.DataImportTemplate;
import com.tbyf.his.web.dataImport.mapper.DataImportTemplateMapper; import com.tbyf.his.web.dataImport.mapper.DataImportTemplateMapper;
import com.tbyf.his.web.dataImport.service.DataImportTemplateService; import com.tbyf.his.web.dataImport.service.DataImportTemplateService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* @author lzz * @author lzz
* @date 2023/2/7 11:24 * @date 2023/2/7 11:24
...@@ -17,4 +22,12 @@ import org.springframework.stereotype.Service; ...@@ -17,4 +22,12 @@ import org.springframework.stereotype.Service;
@Service @Service
@DataSource(DataSourceType.MASTER) @DataSource(DataSourceType.MASTER)
public class DataImportTemplateServiceImpl extends ServiceImpl<DataImportTemplateMapper, DataImportTemplate> implements DataImportTemplateService { public class DataImportTemplateServiceImpl extends ServiceImpl<DataImportTemplateMapper, DataImportTemplate> implements DataImportTemplateService {
@Autowired
private DataImportTemplateMapper dataImportTemplateMapper;
@Override
public List<TemplateVO> queryTemplate(QueryTemplateParam param) {
return dataImportTemplateMapper.queryTemplate(param);
}
} }
package com.tbyf.his.web.dataImport.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tbyf.his.common.annotation.DataSource;
import com.tbyf.his.common.enums.DataSourceType;
import com.tbyf.his.web.dataImport.entity.ExcelData;
import com.tbyf.his.web.dataImport.mapper.ExcelDataMapper;
import com.tbyf.his.web.dataImport.service.ExcelDataService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author lzz
* @date 2023/2/7 11:24
*/
@Slf4j
@Service
@DataSource(DataSourceType.MASTER)
public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData> implements ExcelDataService {
}
...@@ -63,18 +63,18 @@ spring: ...@@ -63,18 +63,18 @@ spring:
redisEnable: false redisEnable: false
redis: redis:
# 地址 # 地址
host: 81.68.90.14 # host: 81.68.90.14
# host: 127.0.0.1 host: 127.0.0.1
# 端口,默认为6379 # 端口,默认为6379
port: 16378 port: 16378
# port: 6379 # port: 6379
# port: 6379 # port: 6379
# 数据库索引 # 数据库索引
database: 0 database: 0
# 密码 # 密码
password: afJmdkaW07xR password: afJmdkaW07xR
# 连接超时时间 # 连接超时时间
timeout: 3000 timeout: 3000
lettuce: lettuce:
pool: pool:
# 连接池中的最小空闲连接 # 连接池中的最小空闲连接
......
<?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.tbyf.his.web.dataImport.mapper.DataImportTemplateMapper">
<select id="queryTemplate" resultType="com.tbyf.his.web.dataImport.domain.vo.TemplateVO">
SELECT id,
name,
org_name as orgName,
import_status as importStatus,
year,
import_time as importTime,
datasource_id as dataSourceId,
table_name as tableName,
create_time as createTime,
update_time as updateTime,
remarks,
(select id from excel_data where template_id = data_import_template.id and type = '2' limit 1) as excelId
FROM data_import_template
<where>
<if test="year != null and year != ''">
year = #{year}
</if>
</where>
</select>
</mapper>
...@@ -52,4 +52,16 @@ create table bind_rule ...@@ -52,4 +52,16 @@ create table bind_rule
( (
data_id varchar(32) null comment '数据ID', data_id varchar(32) null comment '数据ID',
rule_id varchar(32) null comment '规则ID' rule_id varchar(32) null comment '规则ID'
) comment '规则绑定表'; ) comment '规则绑定表';
\ No newline at end of file
create table excel_data
(
id varchar(32) not null primary key,
file_name varchar(64) null comment '文件名',
file longblob null comment '文件数据',
type varchar(64) null comment '文件类型 1-初始导入文件 2-标准模板文件',
template_id varchar(32) null comment '模板ID',
year varchar(32) null comment '数据年份',
org_name varchar(64) null comment '机构类型',
) comment 'excel存储表';
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