Commit 619cf8e1 by 刘泽志

api等接口分类

parent ab35a02c
package com.tbyf.his.web.controller.dataImport;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tbyf.his.common.annotation.IgnoreWebSecurity;
import com.tbyf.his.common.core.domain.AjaxResult;
import com.tbyf.his.common.core.page.TableDataInfo;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.common.utils.bean.BeanUtils;
import com.tbyf.his.web.dataImport.core.DiConfig;
import com.tbyf.his.web.dataImport.domain.param.AddFieldParam;
import com.tbyf.his.web.dataImport.domain.param.QueryFieldParam;
import com.tbyf.his.web.dataImport.domain.param.UpdateFieldParam;
import com.tbyf.his.web.dataImport.entity.BindRule;
import com.tbyf.his.web.dataImport.entity.DataField;
import com.tbyf.his.web.dataImport.entity.ExcelData;
import com.tbyf.his.web.dataImport.service.BindRuleService;
import com.tbyf.his.web.dataImport.service.DataFieldService;
import com.tbyf.his.web.dataImport.service.ExcelDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author lzz
* @date 2023/2/16 15:29
*/
@RestController
@Api(tags = "数据字段接口")
@RequestMapping("/data/field")
@Slf4j
public class DataFieldController {
@Autowired
private DataFieldService dataFieldService;
@Autowired
private BindRuleService bindRuleService;
@Autowired
private ExcelDataService excelDataService;
@IgnoreWebSecurity
@GetMapping("")
@ApiOperation("字段查询")
public TableDataInfo queryField(@Validated QueryFieldParam param) {
final Page<DataField> page = Page.of(param.getPageNum(), param.getPageSize());
final LambdaQueryWrapper<DataField> queryWrapper = Wrappers.lambdaQuery(DataField.class);
queryWrapper.eq(StringUtils.isNotBlank(param.getTemplateId()), DataField::getTemplateId, param.getTemplateId())
.like(StringUtils.isNotBlank(param.getCode()), DataField::getCode, param.getCode())
.like(StringUtils.isNotBlank(param.getTitle()), DataField::getTitle, param.getTitle())
.like(StringUtils.isNotBlank(param.getCoordinate()), DataField::getCoordinate, param.getCoordinate())
.like(StringUtils.isNotBlank(param.getField()), DataField::getField, param.getField());
final Page<DataField> templatePage = dataFieldService.page(page, queryWrapper);
return param.convert(templatePage);
}
@IgnoreWebSecurity
@PostMapping("")
@ApiOperation("字段新增")
public AjaxResult addField(@RequestBody @Validated AddFieldParam param) {
DataField field = new DataField();
BeanUtils.copyProperties(param, field);
dataFieldService.save(field);
return AjaxResult.success();
}
@IgnoreWebSecurity
@PostMapping("/update")
@ApiOperation("修改字段")
public AjaxResult updateField(@RequestBody @Validated UpdateFieldParam param) {
DataField field = new DataField();
BeanUtils.copyProperties(param, field);
dataFieldService.updateById(field);
return AjaxResult.success();
}
@IgnoreWebSecurity
@GetMapping("/delete")
@ApiOperation("删除字段")
public AjaxResult deleteField(@RequestParam String fieldId) {
dataFieldService.removeById(fieldId);
bindRuleService.remove(Wrappers.lambdaQuery(BindRule.class).eq(BindRule::getDataId, fieldId));
return AjaxResult.success();
}
@IgnoreWebSecurity
@GetMapping("/reset")
@ApiOperation("根据基础模板重置字段")
public AjaxResult resetField(@RequestParam String excelId) {
final ExcelData excelData = excelDataService.getById(excelId);
final LambdaQueryWrapper<DataField> wrapper = Wrappers.lambdaQuery(DataField.class).eq(DataField::getTemplateId, excelData.getTemplateId());
final List<DataField> list = dataFieldService.list(wrapper);
if (!CollectionUtils.isEmpty(list)) {
final List<String> fieldIdList = list.stream().map(DataField::getId).collect(Collectors.toList());
bindRuleService.remove(Wrappers.lambdaQuery(BindRule.class).in(BindRule::getDataId, fieldIdList));
}
dataFieldService.remove(Wrappers.lambdaQuery(DataField.class).eq(DataField::getTemplateId, excelData.getTemplateId()));
try (InputStream is = new ByteArrayInputStream(excelData.getFile()); Workbook workbook = WorkbookFactory.create(is)) {
final Sheet sheet = workbook.getSheetAt(0);
final int rows = sheet.getLastRowNum() + 1;
List<DataField> fieldList = new ArrayList<>();
for (int i = 1; i < rows; i++) {
final Row row = sheet.getRow(i);
String code = DiConfig.getValue(row.getCell(1, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL));
String title = DiConfig.getValue(row.getCell(2, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL));
String unit = DiConfig.getValue(row.getCell(4, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL));
if (StringUtils.isAllBlank(code, title, unit)) {
continue;
}
if (StringUtils.equals(code, "代码") || StringUtils.equals(title, "指标名称") || StringUtils.equals(unit, "计量单位")) {
continue;
}
final DataField dataField = new DataField();
dataField.setTemplateId(excelData.getTemplateId());
dataField.setCode(code);
dataField.setTitle(title);
dataField.setUnit(unit);
// TODO 这里坐标修改为i+1是因为excel文件中展示的第一行号是1,符合直觉
dataField.setCoordinate("F," + (i + 1));
dataField.setSort(i + 1);
dataField.createField();
fieldList.add(dataField);
}
dataFieldService.saveBatch(fieldList);
} catch (IOException e) {
throw new RuntimeException(e);
}
return AjaxResult.success();
}
}
package com.tbyf.his.web.controller.dataImport;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tbyf.his.common.annotation.IgnoreWebSecurity;
import com.tbyf.his.common.core.domain.AjaxResult;
import com.tbyf.his.common.core.page.TableDataInfo;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.common.utils.bean.BeanUtils;
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.AddRuleParam;
import com.tbyf.his.web.dataImport.domain.param.BindRuleParam;
import com.tbyf.his.web.dataImport.domain.param.QueryRuleParam;
import com.tbyf.his.web.dataImport.domain.param.UpdateRuleParam;
import com.tbyf.his.web.dataImport.entity.BindRule;
import com.tbyf.his.web.dataImport.entity.DataField;
import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.service.BindRuleService;
import com.tbyf.his.web.dataImport.service.DataFieldService;
import com.tbyf.his.web.dataImport.service.DataRuleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author lzz
* @date 2023/2/16 15:29
*/
@RestController
@Api(tags = "数据字段接口")
@RequestMapping("/data/rule")
@Slf4j
public class DataRuleController {
@Autowired
private DataRuleService dataRuleService;
@Autowired
private BindRuleService bindRuleService;
@Autowired
private DataFieldService dataFieldService;
@IgnoreWebSecurity
@GetMapping("")
@ApiOperation("规则查询")
public TableDataInfo queryRule(@Validated QueryRuleParam param) {
final Page<DataRule> page = Page.of(param.getPageNum(), param.getPageSize());
final LambdaQueryWrapper<DataRule> queryWrapper = Wrappers.lambdaQuery(DataRule.class);
queryWrapper.like(StringUtils.isNotBlank(param.getName()), DataRule::getName, param.getName())
.eq(StringUtils.isNotBlank(param.getType()), DataRule::getType, param.getType())
.in(DataRule::getType, "基础规则", "组合规则");
final Page<DataRule> templatePage = dataRuleService.page(page, queryWrapper);
return param.convert(templatePage);
}
@IgnoreWebSecurity
@GetMapping("/dict")
@ApiOperation("规则字典")
public AjaxResult queryRuleDict() {
final LambdaQueryWrapper<DataRule> queryWrapper = Wrappers.lambdaQuery(DataRule.class);
queryWrapper.in(DataRule::getType, "基础规则", "组合规则")
.select(DataRule::getId, DataRule::getName);
return AjaxResult.success(dataRuleService.list(queryWrapper));
}
@IgnoreWebSecurity
@PostMapping("")
@ApiOperation("规则新增")
public AjaxResult addRule(@RequestBody @Validated AddRuleParam param) {
DataRule rule = new DataRule();
BeanUtils.copyProperties(param, rule);
dataRuleService.save(rule);
return AjaxResult.success();
}
@IgnoreWebSecurity
@PostMapping("/update")
@ApiOperation("修改规则")
public AjaxResult updateRule(@RequestBody @Validated UpdateRuleParam param) {
DataRule rule = new DataRule();
BeanUtils.copyProperties(param, rule);
dataRuleService.updateById(rule);
return AjaxResult.success();
}
@IgnoreWebSecurity
@GetMapping("/delete")
@ApiOperation("删除规则")
public AjaxResult deleteRule(@RequestParam String ruleId) {
dataRuleService.removeById(ruleId);
bindRuleService.remove(Wrappers.lambdaQuery(BindRule.class).eq(BindRule::getRuleId, ruleId));
return AjaxResult.success();
}
@IgnoreWebSecurity
@PostMapping("/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();
}
}
package com.tbyf.his.web.controller.dataImport;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tbyf.his.common.annotation.IgnoreWebSecurity;
import com.tbyf.his.common.core.domain.AjaxResult;
import com.tbyf.his.common.utils.bean.BeanUtils;
import com.tbyf.his.web.dataImport.domain.param.*;
import com.tbyf.his.web.dataImport.entity.*;
import com.tbyf.his.web.dataImport.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author lzz
* @date 2023/2/7 10:42
*/
@RestController
@Api(tags = "数据模板接口")
@RequestMapping("/data/template")
@Slf4j
public class DataTemplateController {
@Autowired
private DataTemplateService dataImportService;
@Autowired
private DataFieldService dataFieldService;
@Autowired
private DataRuleService dataRuleService;
@Autowired
private BindRuleService bindRuleService;
@Autowired
private ExcelDataService excelDataService;
@IgnoreWebSecurity
@GetMapping()
@ApiOperation("模板查询")
public AjaxResult queryTemplate(@Validated QueryTemplateParam param) {
return AjaxResult.success(dataImportService.queryTemplate(param));
}
@IgnoreWebSecurity
@GetMapping("/allField")
@ApiOperation("查询模板的所有字段数据")
public AjaxResult getAllTemplateField(@RequestParam String templateId) {
return AjaxResult.success(dataFieldService.list(Wrappers.lambdaQuery(DataField.class)
.eq(DataField::getTemplateId, templateId)));
}
@IgnoreWebSecurity
@GetMapping("/allRule")
@ApiOperation("查询模板的所有规则数据")
public AjaxResult getAllTemplateRule(@RequestParam String templateId) {
final List<BindRule> bindRules = bindRuleService.list(Wrappers.lambdaQuery(BindRule.class)
.eq(BindRule::getDataId, templateId));
if (CollectionUtils.isEmpty(bindRules)) {
return AjaxResult.success(Collections.emptyList());
}
return AjaxResult.success(dataRuleService.list(Wrappers.lambdaQuery(DataRule.class)
.eq(DataRule::getType, "模板规则")
.in(DataRule::getId, bindRules.stream().map(BindRule::getRuleId).collect(Collectors.toList()))));
}
@IgnoreWebSecurity
@PostMapping("")
@ApiOperation("模板新增")
public AjaxResult addTemplate(@RequestBody @Validated AddTemplateParam param) {
DataTemplate template = new DataTemplate();
BeanUtils.copyProperties(param, template);
template.initAdd();
dataImportService.save(template);
return AjaxResult.success();
}
@IgnoreWebSecurity
@PostMapping("/template/update")
@ApiOperation("修改模板")
public AjaxResult updateTemplate(@RequestBody @Validated UpdateTemplateParam param) {
DataTemplate template = new DataTemplate();
BeanUtils.copyProperties(param, template);
template.initAdd();
dataImportService.updateById(template);
return AjaxResult.success();
}
@IgnoreWebSecurity
@GetMapping("/template/delete")
@ApiOperation("删除模板")
public AjaxResult deleteTemplate(@RequestParam String templateId) {
dataImportService.removeById(templateId);
excelDataService.remove(Wrappers.lambdaQuery(ExcelData.class).eq(ExcelData::getTemplateId, templateId));
final LambdaQueryWrapper<DataField> wrapper = Wrappers.lambdaQuery(DataField.class).eq(DataField::getTemplateId, templateId);
final List<DataField> list = dataFieldService.list(wrapper);
final List<String> idList = new ArrayList<>();
idList.add(templateId);
if (!CollectionUtils.isEmpty(list)) {
final List<String> fieldIdList = list.stream().map(DataField::getId).collect(Collectors.toList());
dataFieldService.remove(Wrappers.lambdaQuery(DataField.class).eq(DataField::getTemplateId, templateId));
idList.addAll(fieldIdList);
}
bindRuleService.remove(Wrappers.lambdaQuery(BindRule.class).in(BindRule::getDataId, idList));
//TODO 已经删除:模板,字段,模板与字段关联的规则信息,模板文件表 未删除: 模板规则信息
return AjaxResult.success();
}
@IgnoreWebSecurity
@PostMapping("/rule")
@ApiOperation("规则新增By Template")
public AjaxResult addRuleByTemplate(@RequestBody @Validated AddTemplateRuleParam param) {
DataRule rule = new DataRule();
BeanUtils.copyProperties(param, rule);
dataRuleService.save(rule);
final BindRule bindRule = new BindRule();
bindRule.setDataId(param.getTid())
.setRuleId(rule.getId());
bindRuleService.save(bindRule);
return AjaxResult.success();
}
@IgnoreWebSecurity
@PostMapping("/rule/update")
@ApiOperation("修改规则By Template")
public AjaxResult updateRuleByTemplate(@RequestBody @Validated UpdateRuleParam param) {
DataRule rule = new DataRule();
BeanUtils.copyProperties(param, rule);
dataRuleService.updateById(rule);
return AjaxResult.success();
}
@IgnoreWebSecurity
@GetMapping("/rule/delete")
@ApiOperation("删除规则By Template")
public AjaxResult deleteRuleByTemplate(@RequestParam String ruleId,
@RequestParam String templateId) {
dataRuleService.removeById(ruleId);
bindRuleService.remove(Wrappers.lambdaQuery(BindRule.class)
.eq(BindRule::getRuleId, ruleId)
.eq(BindRule::getDataId, templateId));
return AjaxResult.success();
}
}
package com.tbyf.his.web.controller.dataImport;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tbyf.his.common.annotation.IgnoreWebSecurity;
import com.tbyf.his.common.core.domain.AjaxResult;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.common.utils.bean.BeanUtils;
import com.tbyf.his.web.dataImport.domain.param.AddDictParam;
import com.tbyf.his.web.dataImport.domain.param.UpdateDictParam;
import com.tbyf.his.web.dataImport.entity.DataDict;
import com.tbyf.his.web.dataImport.service.DataDictService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author lzz
* @date 2023/2/16 15:30
*/
@RestController
@Api(tags = "字典接口")
@RequestMapping("/data/dict")
@Slf4j
public class DictDataController {
@Autowired
private DataDictService dictService;
@IgnoreWebSecurity
@GetMapping("")
@ApiOperation("字典查询")
public AjaxResult queryDict(@RequestParam String type) {
final LambdaQueryWrapper<DataDict> wrapper = Wrappers.lambdaQuery(DataDict.class)
.eq(DataDict::getType, type);
final List<Map<String, String>> list = dictService.list(wrapper).stream().map(item -> {
String json = item.getRemarks();
item.setRemarks(null);
final Map<String, String> map = BeanUtils.getFieldValueMap(item);
if (StringUtils.isNotBlank(json)) {
try {
final JSONObject object = JSON.parseObject(json);
object.forEach((key, value) -> {
map.put(key, (String) value);
});
} catch (Exception ignore) {
}
}
return map;
}).collect(Collectors.toList());
return AjaxResult.success(list);
}
@IgnoreWebSecurity
@PostMapping("")
@ApiOperation("新增字典")
public AjaxResult addDict(@RequestBody AddDictParam param) {
DataDict dict = new DataDict();
BeanUtils.copyProperties(param, dict);
dictService.save(dict);
return AjaxResult.success();
}
@IgnoreWebSecurity
@PostMapping("/update")
@ApiOperation("修改字典")
public AjaxResult updateDict(@RequestBody @Validated UpdateDictParam param) {
DataDict template = new DataDict();
BeanUtils.copyProperties(param, template);
dictService.updateById(template);
return AjaxResult.success();
}
@IgnoreWebSecurity
@GetMapping("/delete")
@ApiOperation("删除字典")
public AjaxResult deleteDict(@RequestParam String dictId) {
dictService.removeById(dictId);
return AjaxResult.success();
}
}
package com.tbyf.his.web.controller.dataImport;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tbyf.his.common.annotation.IgnoreWebSecurity;
import com.tbyf.his.common.core.domain.AjaxResult;
import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.web.dataImport.domain.param.UploadExcelParam;
import com.tbyf.his.web.dataImport.entity.ExcelData;
import com.tbyf.his.web.dataImport.service.ExcelDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
/**
* @author lzz
* @date 2023/2/16 15:30
*/
@RestController
@Api(tags = "excel文件接口")
@RequestMapping("/data/excel")
@Slf4j
public class ExcelDataController {
@Autowired
private ExcelDataService excelDataService;
@IgnoreWebSecurity
@GetMapping("/download/template")
@ApiOperation("模板下载")
public void downloadTemplate(HttpServletResponse response,
@RequestParam String excelId) {
final ExcelData excel = excelDataService.getById(excelId);
if (excel != null) {
try (OutputStream os = response.getOutputStream()) {
os.write(excel.getFile());
os.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
@IgnoreWebSecurity
@GetMapping("/download/template/filename")
@ApiOperation("获取模板文件名")
public AjaxResult getTemplateFileName(@RequestParam String excelId) {
final ExcelData excel = excelDataService.getOne(
Wrappers.lambdaQuery(ExcelData.class)
.select(ExcelData::getFileName)
.eq(ExcelData::getId, excelId)
);
if (excel != null) {
return AjaxResult.success(excel);
} else {
return AjaxResult.error("未查询到指定的模板文件");
}
}
@SneakyThrows
@IgnoreWebSecurity
@PostMapping("/upload")
@ApiOperation("文件导入")
public AjaxResult bindRule(UploadExcelParam param) {
if (StringUtils.equals(param.getType(), "1")) {
ExcelData excelData = excelDataService.getOne(Wrappers.lambdaQuery(ExcelData.class)
.eq(ExcelData::getTemplateId, param.getTemplateId())
.eq(ExcelData::getType, "1"), false);
if (excelData == null) {
excelData = new ExcelData();
excelData.setType("1");
excelData.setTemplateId(param.getTemplateId());
excelData.setYear(param.getYear());
excelData.setOrgName(param.getOrgName());
}
excelData.setFile(param.getFile().getBytes());
excelData.setFileName(param.getFile().getOriginalFilename());
excelDataService.saveOrUpdate(excelData);
} 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();
}
}
...@@ -26,9 +26,9 @@ import java.util.stream.Stream; ...@@ -26,9 +26,9 @@ import java.util.stream.Stream;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true) @Accessors(chain = true)
@TableName(value = "data_import_template", autoResultMap = true) @TableName(value = "data_template", autoResultMap = true)
@ApiModel(value = "数据导入模板表", description = "数据导入模板表") @ApiModel(value = "数据导入模板表", description = "数据导入模板表")
public class DataImportTemplate extends BaseMp implements Serializable { public class DataTemplate extends BaseMp implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "模板ID") @ApiModelProperty(value = "模板ID")
......
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 = "meta_data", autoResultMap = true)
@ApiModel(value = "元字段信息", description = "元字段信息")
public class MetaField implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "字段元ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "字段名 ORG_CODE")
@TableField("field_name")
private String fieldName;
@ApiModelProperty(value = "字段类型 VARCHAR(32) NUMBER")
@TableField("field_type")
private String fieldType;
@ApiModelProperty(value = "字段注释/指标名称")
@TableField("field_comment")
private String fieldComment;
@ApiModelProperty(value = "备注")
@TableField("remarks")
private String remarks;
}
...@@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam; import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam;
import com.tbyf.his.web.dataImport.domain.vo.TemplateVO; import com.tbyf.his.web.dataImport.domain.vo.TemplateVO;
import com.tbyf.his.web.dataImport.domain.vo.VerifyVO; import com.tbyf.his.web.dataImport.domain.vo.VerifyVO;
import com.tbyf.his.web.dataImport.entity.DataImportTemplate;
import com.tbyf.his.web.dataImport.entity.DataRule; import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.entity.DataTemplate;
import java.util.List; import java.util.List;
...@@ -14,7 +14,7 @@ import java.util.List; ...@@ -14,7 +14,7 @@ import java.util.List;
* @date 2023/2/7 11:22 * @date 2023/2/7 11:22
*/ */
public interface DataImportTemplateMapper extends BaseMapper<DataImportTemplate> { public interface DataTemplateMapper extends BaseMapper<DataTemplate> {
/** /**
* 查询模板数据 * 查询模板数据
......
package com.tbyf.his.web.dataImport.service;
import com.alibaba.druid.pool.DruidDataSource;
import com.tbyf.his.common.utils.spring.SpringUtils;
import com.tbyf.his.framework.datasource.DynamicDataSource;
import com.tbyf.his.framework.datasource.DynamicDataSourceContextHolder;
import com.tbyf.his.framework.utils.AesUtils;
import com.tbyf.his.system.domain.SysDatasource;
import com.tbyf.his.system.service.ISysDatasourceService;
import java.util.List;
import java.util.Map;
import static com.tbyf.his.framework.datasource.DataSourceUtil.getDataSource;
/**
* @author lzz
* @date 2023/2/16 16:05
*/
public interface DataSourceService {
static void switchDb(String dsName) {
if (!DynamicDataSourceContextHolder.dataSourcesMap.containsKey(dsName)) {
final SysDatasource datasource = SpringUtils.getBean(ISysDatasourceService.class).selectSysDatasourceByDsName(dsName);
String password;
try {
password = AesUtils.decrypt(datasource.getPassword());
} catch (Exception e) {
password = datasource.getPassword();
}
DruidDataSource druidDataSource = getDataSource(datasource.getUrl(), datasource.getDatasourceName(), datasource.getUsername(), password);
DynamicDataSourceContextHolder.dataSourcesMap.put(dsName, druidDataSource);
DynamicDataSource dynamicDataSource = SpringUtils.getBean("dynamicDataSource");
dynamicDataSource.afterPropertiesSet();
}
DynamicDataSourceContextHolder.setDataSourceType(dsName);
}
static void switchDefault() {
DynamicDataSourceContextHolder.clearDataSourceType();
}
/**
* 执行单条查询sql返回
*
* @param dsName
* @param sql
* @return
*/
List<Map<String, Object>> executeList(String dsName, String sql);
}
...@@ -5,8 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -5,8 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam; import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam;
import com.tbyf.his.web.dataImport.domain.vo.TemplateVO; import com.tbyf.his.web.dataImport.domain.vo.TemplateVO;
import com.tbyf.his.web.dataImport.domain.vo.VerifyVO; import com.tbyf.his.web.dataImport.domain.vo.VerifyVO;
import com.tbyf.his.web.dataImport.entity.DataImportTemplate;
import com.tbyf.his.web.dataImport.entity.DataRule; import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.entity.DataTemplate;
import java.util.List; import java.util.List;
...@@ -15,7 +15,7 @@ import java.util.List; ...@@ -15,7 +15,7 @@ import java.util.List;
* @date 2023/2/7 11:23 * @date 2023/2/7 11:23
*/ */
public interface DataImportTemplateService extends IService<DataImportTemplate> { public interface DataTemplateService extends IService<DataTemplate> {
/** /**
* 查询模板信息 * 查询模板信息
......
package com.tbyf.his.web.dataImport.service.impl;
import com.tbyf.his.web.dataImport.service.DataSourceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* @author lzz
* @date 2023/2/16 16:05
*/
@Slf4j
@Service
public class DataSourceServiceImpl implements DataSourceService {
@Resource
public JdbcTemplate jdbcTemplate;
@Override
public List<Map<String, Object>> executeList(String dsName, String sql) {
try {
DataSourceService.switchDb(dsName);
return jdbcTemplate.queryForList(sql);
} finally {
DataSourceService.switchDefault();
}
}
}
...@@ -8,10 +8,10 @@ import com.tbyf.his.common.utils.StringUtils; ...@@ -8,10 +8,10 @@ import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam; import com.tbyf.his.web.dataImport.domain.param.QueryTemplateParam;
import com.tbyf.his.web.dataImport.domain.vo.TemplateVO; import com.tbyf.his.web.dataImport.domain.vo.TemplateVO;
import com.tbyf.his.web.dataImport.domain.vo.VerifyVO; import com.tbyf.his.web.dataImport.domain.vo.VerifyVO;
import com.tbyf.his.web.dataImport.entity.DataImportTemplate;
import com.tbyf.his.web.dataImport.entity.DataRule; import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.mapper.DataImportTemplateMapper; import com.tbyf.his.web.dataImport.entity.DataTemplate;
import com.tbyf.his.web.dataImport.service.DataImportTemplateService; import com.tbyf.his.web.dataImport.mapper.DataTemplateMapper;
import com.tbyf.his.web.dataImport.service.DataTemplateService;
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.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -25,19 +25,19 @@ import java.util.List; ...@@ -25,19 +25,19 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
@DataSource(DataSourceType.MASTER) @DataSource(DataSourceType.MASTER)
public class DataImportTemplateServiceImpl extends ServiceImpl<DataImportTemplateMapper, DataImportTemplate> implements DataImportTemplateService { public class DataTemplateServiceImpl extends ServiceImpl<DataTemplateMapper, DataTemplate> implements DataTemplateService {
@Autowired @Autowired
private DataImportTemplateMapper dataImportTemplateMapper; private DataTemplateMapper dataTemplateMapper;
@Override @Override
public List<TemplateVO> queryTemplate(QueryTemplateParam param) { public List<TemplateVO> queryTemplate(QueryTemplateParam param) {
return dataImportTemplateMapper.queryTemplate(param); return dataTemplateMapper.queryTemplate(param);
} }
@Override @Override
public DbType getDbType(String dataSourceId) { public DbType getDbType(String dataSourceId) {
final String dbType = dataImportTemplateMapper.queryDbType(dataSourceId); final String dbType = dataTemplateMapper.queryDbType(dataSourceId);
if (StringUtils.isBlank(dbType)) { if (StringUtils.isBlank(dbType)) {
return DbType.MYSQL; return DbType.MYSQL;
} }
...@@ -50,11 +50,11 @@ public class DataImportTemplateServiceImpl extends ServiceImpl<DataImportTemplat ...@@ -50,11 +50,11 @@ public class DataImportTemplateServiceImpl extends ServiceImpl<DataImportTemplat
@Override @Override
public List<VerifyVO> getVerify(String id) { public List<VerifyVO> getVerify(String id) {
return dataImportTemplateMapper.getVerify(id); return dataTemplateMapper.getVerify(id);
} }
@Override @Override
public List<DataRule> getAllRule(String templateId) { public List<DataRule> getAllRule(String templateId) {
return dataImportTemplateMapper.getAllRule(templateId); return dataTemplateMapper.getAllRule(templateId);
} }
} }
...@@ -13,11 +13,11 @@ import com.tbyf.his.web.dataImport.core.RuleVO; ...@@ -13,11 +13,11 @@ import com.tbyf.his.web.dataImport.core.RuleVO;
import com.tbyf.his.web.dataImport.core.RuleValidator; import com.tbyf.his.web.dataImport.core.RuleValidator;
import com.tbyf.his.web.dataImport.domain.vo.ExcelVO; import com.tbyf.his.web.dataImport.domain.vo.ExcelVO;
import com.tbyf.his.web.dataImport.domain.vo.VerifyVO; import com.tbyf.his.web.dataImport.domain.vo.VerifyVO;
import com.tbyf.his.web.dataImport.entity.DataImportTemplate;
import com.tbyf.his.web.dataImport.entity.DataRule; import com.tbyf.his.web.dataImport.entity.DataRule;
import com.tbyf.his.web.dataImport.entity.DataTemplate;
import com.tbyf.his.web.dataImport.entity.ExcelData; import com.tbyf.his.web.dataImport.entity.ExcelData;
import com.tbyf.his.web.dataImport.mapper.ExcelDataMapper; import com.tbyf.his.web.dataImport.mapper.ExcelDataMapper;
import com.tbyf.his.web.dataImport.service.DataImportTemplateService; import com.tbyf.his.web.dataImport.service.DataTemplateService;
import com.tbyf.his.web.dataImport.service.ExcelDataService; import com.tbyf.his.web.dataImport.service.ExcelDataService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
...@@ -48,7 +48,7 @@ import java.util.stream.Collectors; ...@@ -48,7 +48,7 @@ import java.util.stream.Collectors;
public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData> implements ExcelDataService { public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData> implements ExcelDataService {
@Autowired @Autowired
private DataImportTemplateService dataImportTemplateService; private DataTemplateService dataTemplateService;
@Autowired @Autowired
private JdbcTemplate jdbcTemplate; private JdbcTemplate jdbcTemplate;
...@@ -56,8 +56,8 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData ...@@ -56,8 +56,8 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData
@Override @Override
public void analyzeExport(ExcelData excelData, HttpServletResponse response) { public void analyzeExport(ExcelData excelData, HttpServletResponse response) {
final DataImportTemplate template = dataImportTemplateService.getById(excelData.getTemplateId()); final DataTemplate template = dataTemplateService.getById(excelData.getTemplateId());
List<VerifyVO> verifyList = dataImportTemplateService.getVerify(template.getId()); List<VerifyVO> verifyList = dataTemplateService.getVerify(template.getId());
try (InputStream is = new ByteArrayInputStream(excelData.getFile()); Workbook workbook = WorkbookFactory.create(is)) { try (InputStream is = new ByteArrayInputStream(excelData.getFile()); Workbook workbook = WorkbookFactory.create(is)) {
final Sheet sheet = workbook.getSheetAt(0); final Sheet sheet = workbook.getSheetAt(0);
//final int rows = sheet.getLastRowNum() + 1; //final int rows = sheet.getLastRowNum() + 1;
...@@ -145,7 +145,7 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData ...@@ -145,7 +145,7 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData
} }
}); });
// 模板规则的数据校验 // 模板规则的数据校验
final List<DataRule> allRule = dataImportTemplateService.getAllRule(template.getId()); final List<DataRule> allRule = dataTemplateService.getAllRule(template.getId());
for (DataRule rule : allRule) { for (DataRule rule : allRule) {
if (StringUtils.isNotBlank(rule.getContent())) { if (StringUtils.isNotBlank(rule.getContent())) {
if (StringUtils.equals(rule.getMode(), "逻辑相加")) { if (StringUtils.equals(rule.getMode(), "逻辑相加")) {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tbyf.his.web.dataImport.mapper.DataImportTemplateMapper"> <mapper namespace="com.tbyf.his.web.dataImport.mapper.DataTemplateMapper">
<select id="queryTemplate" resultType="com.tbyf.his.web.dataImport.domain.vo.TemplateVO"> <select id="queryTemplate" resultType="com.tbyf.his.web.dataImport.domain.vo.TemplateVO">
SELECT id, SELECT id,
name, name,
...@@ -18,10 +18,10 @@ ...@@ -18,10 +18,10 @@
remarks, remarks,
(select id (select id
from excel_data from excel_data
where template_id = data_import_template.id where template_id = data_template.id
and type = '2' and type = '2'
limit 1) as excelId limit 1) as excelId
FROM data_import_template FROM data_template
<where> <where>
<if test="year != null and year != ''"> <if test="year != null and year != ''">
year = #{year} year = #{year}
......
package com.tbyf.his.system.mapper; package com.tbyf.his.system.mapper;
import com.tbyf.his.common.core.domain.model.MyKeyValue; import com.tbyf.his.common.core.domain.model.MyKeyValue;
import com.tbyf.his.system.domain.SysDatasource;; import com.tbyf.his.system.domain.SysDatasource;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
;
/** /**
* 数据源配置Mapper接口 * 数据源配置Mapper接口
* *
...@@ -78,4 +80,6 @@ public interface SysDatasourceMapper { ...@@ -78,4 +80,6 @@ public interface SysDatasourceMapper {
@Param(value = "keyName") String keyName, @Param(value = "keyName") String keyName,
@Param(value = "keyValue") Long keyValue @Param(value = "keyValue") Long keyValue
); );
SysDatasource selectSysDatasourceByDsName(String dsName);
} }
...@@ -25,6 +25,8 @@ public interface ISysDatasourceService { ...@@ -25,6 +25,8 @@ public interface ISysDatasourceService {
*/ */
public SysDatasource selectSysDatasourceByDatasourceId(Long datasourceId); public SysDatasource selectSysDatasourceByDatasourceId(Long datasourceId);
SysDatasource selectSysDatasourceByDsName(String dsName);
/** /**
* 查询数据源配置列表 * 查询数据源配置列表
* *
......
...@@ -60,6 +60,11 @@ public class SysDatasourceServiceImpl implements ISysDatasourceService { ...@@ -60,6 +60,11 @@ public class SysDatasourceServiceImpl implements ISysDatasourceService {
return sysDatasourceMapper.selectSysDatasourceByDatasourceId(datasourceId); return sysDatasourceMapper.selectSysDatasourceByDatasourceId(datasourceId);
} }
@Override
public SysDatasource selectSysDatasourceByDsName(String dsName) {
return sysDatasourceMapper.selectSysDatasourceByDsName(dsName);
}
/** /**
* 查询数据源配置列表 * 查询数据源配置列表
* *
......
...@@ -47,7 +47,9 @@ ...@@ -47,7 +47,9 @@
</select> </select>
<select id="selectSysDatasource" resultMap="MyKeyValueResult"> <select id="selectSysDatasource" resultMap="MyKeyValueResult">
select datasource_id, datasource_name from sys_datasource where adapter_flag = '0' select datasource_id, datasource_name
from sys_datasource
where adapter_flag = '0'
</select> </select>
<select id="selectSysDatasourceByDatasourceId" parameterType="Long" resultMap="SysDatasourceResult"> <select id="selectSysDatasourceByDatasourceId" parameterType="Long" resultMap="SysDatasourceResult">
...@@ -55,6 +57,11 @@ ...@@ -55,6 +57,11 @@
where datasource_id = #{datasourceId} where datasource_id = #{datasourceId}
</select> </select>
<select id="selectSysDatasourceByDsName" resultMap="SysDatasourceResult">
<include refid="selectSysDatasourceVo"/>
where datasource_name = #{dsName}
</select>
<select id="executeSql" resultType="java.util.Map"> <select id="executeSql" resultType="java.util.Map">
${sqlStr} ${sqlStr}
</select> </select>
......
...@@ -62,6 +62,14 @@ create table excel_data ...@@ -62,6 +62,14 @@ create table excel_data
type varchar(64) null comment '文件类型 1-初始导入文件 2-标准模板文件', type varchar(64) null comment '文件类型 1-初始导入文件 2-标准模板文件',
template_id varchar(32) null comment '模板ID', template_id varchar(32) null comment '模板ID',
year varchar(32) null comment '数据年份', year varchar(32) null comment '数据年份',
org_name varchar(64) null comment '机构类型' org_name varchar(64) null comment '机构类型'
) comment 'excel存储表'; ) comment 'excel存储表';
create table meta_field
(
id varchar(32) not null primary key,
field_name varchar(64) null comment '字段名',
field_type varchar(64) null comment '字段类型',
field_comment varchar(64) null comment '字段注释',
remarks varchar(256) null comment '备注'
) comment '元字段信息表';
\ 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