Commit 9893840e by liuzz

中医院部分功能修改

parent 0cc5d391
...@@ -18,7 +18,9 @@ import com.tbyf.his.web.dataImport.domain.param.QueryFieldParam; ...@@ -18,7 +18,9 @@ import com.tbyf.his.web.dataImport.domain.param.QueryFieldParam;
import com.tbyf.his.web.dataImport.domain.param.QueryMetaFieldParam; import com.tbyf.his.web.dataImport.domain.param.QueryMetaFieldParam;
import com.tbyf.his.web.dataImport.domain.param.UpdateFieldParam; import com.tbyf.his.web.dataImport.domain.param.UpdateFieldParam;
import com.tbyf.his.web.dataImport.domain.vo.CreateFieldVO; import com.tbyf.his.web.dataImport.domain.vo.CreateFieldVO;
import com.tbyf.his.web.dataImport.domain.vo.FieldDbDiffVO;
import com.tbyf.his.web.dataImport.entity.*; import com.tbyf.his.web.dataImport.entity.*;
import com.tbyf.his.web.dataImport.mapper.MetaFieldMapper;
import com.tbyf.his.web.dataImport.service.*; import com.tbyf.his.web.dataImport.service.*;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -70,6 +72,9 @@ public class DataFieldController { ...@@ -70,6 +72,9 @@ public class DataFieldController {
@Autowired @Autowired
private JdbcTemplate jdbcTemplate; private JdbcTemplate jdbcTemplate;
@Autowired
private MetaFieldMapper metaFieldMapper;
@IgnoreWebSecurity @IgnoreWebSecurity
@GetMapping("") @GetMapping("")
@ApiOperation("字段查询") @ApiOperation("字段查询")
...@@ -371,4 +376,75 @@ public class DataFieldController { ...@@ -371,4 +376,75 @@ public class DataFieldController {
return AjaxResult.success(); return AjaxResult.success();
} }
@IgnoreWebSecurity
@PostMapping("/fieldDbDiff")
@ApiOperation("字段与数据库差异化查询")
public AjaxResult fieldDbDiff(@RequestBody MetaField metaField) {
// 查询绑定了此字段的所有模板
LambdaQueryWrapper<DataField> wrapper = Wrappers.lambdaQuery(DataField.class).eq(DataField::getField, metaField.getId());
List<DataField> fieldList = dataFieldService.list(wrapper);
if (CollectionUtils.isEmpty(fieldList)){
return AjaxResult.success(Collections.emptyList());
}
LambdaQueryWrapper<DataTemplate> queryWrapper = Wrappers.lambdaQuery(DataTemplate.class).in(DataTemplate::getId, fieldList.stream().map(DataField::getTemplateId).toArray());
List<DataTemplate> templateList = dataTemplateService.list(queryWrapper);
if (CollectionUtils.isEmpty(fieldList)){
return AjaxResult.success(Collections.emptyList());
}
List<FieldDbDiffVO> list = new ArrayList<>();
templateList.forEach(item->{
Optional<FieldDbDiffVO> first = list.stream().filter(l -> StringUtils.equalsIgnoreCase(item.getDataSourceId(), item.getTableName())).findFirst();
if (!first.isPresent()){
FieldDbDiffVO vo = new FieldDbDiffVO();
vo.setDatasourceId(item.getDataSourceId());
vo.setTableName(item.getTableName().toUpperCase());
vo.setColumnName(metaField.getFieldName().toUpperCase());
vo.setMetaType(metaField.getFieldType());
list.add(vo);
FieldDbDiffVO vo2 = new FieldDbDiffVO();
vo2.setDatasourceId(item.getDataSourceId());
vo2.setTableName(item.getTableName().toUpperCase()+"_TEMP");
vo2.setColumnName(metaField.getFieldName().toUpperCase());
vo2.setMetaType(metaField.getFieldType());
list.add(vo2);
}
});
if (CollectionUtils.isEmpty(list)){
return AjaxResult.success(Collections.emptyList());
}
return AjaxResult.success(list.stream().peek(item->{
try {
DataSourceService.switchDb(item.getDatasourceId());
List<FieldDbDiffVO> vos = metaFieldMapper.selectFieldDbDiffVO(item.getTableName().toUpperCase(), item.getColumnName().toUpperCase());
if (!CollectionUtils.isEmpty(vos)){
FieldDbDiffVO diffVO = vos.get(0);
item.setColumnType(diffVO.getColumnType());
item.setColumnLength(diffVO.getColumnLength());
item.setColumnPrecision(diffVO.getColumnPrecision());
item.setColumnScale(diffVO.getColumnScale());
item.setMergeSql(StrFormatter.format("ALTER TABLE {} MODIFY ( {} {} )",
item.getTableName().toUpperCase(),item.getColumnName().toUpperCase(),item.getMetaType().toUpperCase()));
}
}catch (Exception ignored){}
finally {
DataSourceService.switchDefault();
}
}).filter(item->StringUtils.isNotBlank(item.getColumnType()))
.collect(Collectors.toList()));
}
@IgnoreWebSecurity
@PostMapping("/executeSql")
@ApiOperation("sql执行")
public AjaxResult executeSql(@RequestBody FieldDbDiffVO vo) {
try {
DataSourceService.switchDb(vo.getDatasourceId());
jdbcTemplate.execute(vo.getMergeSql());
} finally {
DataSourceService.switchDefault();
}
return AjaxResult.success("同步成功");
}
} }
...@@ -304,6 +304,15 @@ public class DataImportController { ...@@ -304,6 +304,15 @@ public class DataImportController {
} }
public static void main(String[] args) {
String field = "UNIFORM_CREDIT_NUMBER,ORG_CODE,ORG_NAME,DJZCLXDM,YLWSJGLBDM,JGFLGLDM,AREA_NUMBER_CODE,FORMSOF_INSTITU_OWNERSHIP,DWSSQX,DWSZXZJDMC,XZJDDM,SZZBDWDM,YLWSJGLSGXDM,DWSZDSFMZZZDF,SFFZJG,BASE_INFO,JGSZDZ,JGDLWZ,JD,WD,POST_CODE_UNIT,ORG_TEL,ORG_LEGALPERSON_NAME,SFDEMCWSQWSFWZXHXZWSY,SFWDXFSYY,SFYYJHJG,HOSPITAL_GRADE,HOSPITAL_LEVEL,SFKZHLWZLFW,SFHDHLWYYZYXK,NUMSUPPORT_MEDIINSTITU,NUMSUPPORTCLINICS,NUMSUPPORTPRIMARYINSTITU,NUM_CLIN_DEPT_HOSP,NUM_CLIN_DEPT_WITH_WARDS,NUM_CLIN_DEPT_WITH_TREATROOM,IS_FEVER_CLINIC,OP_TREAT_AREA_SIGNS,NUMOF_HOSP_SICK_AREA,NUMOF_SICK_AREA_WITHTREATROOM,KZYZHLFWDBQS,CHPROOM_SIGN,YYZYDYLJGZYZJPZS,TJZQTYLJGZYZJPZS,TJZBJGSYDYLJGZYZJPZS,PBDGJJBYWMLZZCYPZS,KZDMLNZYYLJSXMS,KZDMLWZYYLJSXMS,NUM_TCM_NURSING_PROJECTS,CDDTJYSKYKTS,NUM_SCIENRESEATOPIC_ABOVEPROV,CONSTRU_OF_INFOR_SYSTEM,USE_HIS,USE_LIS,USE_PACS,USE_CIS,USE_HRP,USE_OA,USE_HSB,IN_HOSP_MOBILE_HEALTHCARE,OUT_HOSP_MOBILE_HEALTHCARE,TELEMEDICINE_SYS,DZBLYYGNSPFJ,HLHTBZHCSD,YYZHGLFJ,NUM_PEOPLE_ONDUTY,TOTALNUMOFSENIOR_TITLES,TOTALNUMOFSUBSENIOR_TITLES,TOTALNUMOFMIDDLE_TITLES,TOTALNUMOFPRIMARY_TITLES,WSJSRYS,JYGJZCDJSRYS,TOTALNUMOFPRACTISDOC,NUMOF_TCMPRACTISDOC,NUMOFSENIORTCMPRACTISDOC,NUMOFSUBSENIORTCMPRACTISDOC,NUMOFMIDDLETCMPRACTISDOC,ZCWQKYXZYDRS,QDZYQKYSPXHGZDRS,ZYZCYSRS,NUMOF_NON_TCMPRACTISDOC,XYXXZYRYS,NUM_OF_PHARMACISTS,LCYSS,ZYSS,JYZGJZCRSZYSS,JYFGJZCRSZYSS,JYZJZCRSZYS,ZYSSS,TOTALNUM_OF_NURSES,NUMOF_NURSESSENIOR_TITLES,NUMOF_NURSESSUBSENIORTITLES,NUMOF_NURSESMIDTITLES,NUMOF_NURSES_TRAINED,CJJXJYBQDGDXFDZYYZYJSRYS,TOTALNUM_OFHOSPLEADERS,NUM_OFHOSPLEADEWITHTCMPROFESS,NUM_OFHOSPLEADEWITHTCMPRACT,FZYLBZYZLYSDJYZYYZYXLHXWDRS,NUM_OFHOSPLEADEWITHTCMTRAIN,CLINICALDEPT,NUMTCM_PRACTDOCINCLINDEPT,NUMTCM_TRAINDOCINCLINDEPT,NUMOFPEOPLEIN_TDD,NUMTCM_DOC_NUR_INTDD,NUMOFTCMWITH_STANDARDTRAIN,NUMOFBEDPREPARED,TOTAL_NNUM_BEDS,NUMOFBEDINICU,FYBFCWS,NUMOFSPECIALBED,YLCWS,NUMOFDAYSOPENED,NUMOFDAYSOCCUPIED,NUMOFDAYSOCCUPIEDOUTHISP,TOTAL_AREAOFHOUSING,BUSINESS_ROOM_SIZE,CHPROOM_AREA,NUMOFEQUIPOVERFIVETHOUSRMB,NUMTCMEQUIPOVERFIVETHOUSRMB,ALLVALUEOFEQUIPOVERMILION,ALLVALUE_TCMEQUIPOVERMILION,ANNUAL_GROSS_INCOME,INCOMEFROM_FINANCIAL_ASSIS,MEDICAL_INCOME,TCYGXHDYLSR,HCZSR,ZDJKGZYYHCSR,OUTPATIENT_INCOME,INCOMEFROM_OP_TCMSERVICES,TXYLSRMZ,OUTPATIENT_DRUG_INCOME,OUTPATIENT_WM_INCOME,ZDJKHXYPHSWZPSRMZ,OUTPATIENT_CPM_INCOME,YLJGZYZJSRMZ,OUTPATIENT_CHM_INCOME,INPATIENT_INCOME,INCOMEFROM_IP_TCMSERVICES,TXYLSRZY,INPATIENT_DRUG_INCOME,INPATIENT_WM_INCOME,ZDJKHXYPHSWZPSRZY,INPATIENT_CPM_INCOME,YLJGZYZJSRZY,INPATIENT_CHM_INCOME,SETTLEMENT_BALANCE,KYXMLXJFZJF,CDDTJYSHDTJKYKTJF,RESEARCH_TOPICS_FEE,ZYYKYXMLXJFZJF,YYDNZJF,NZNH,YXYXJXJFTR,BYHYXJYJFTR,JXYXJYJFTR,TOTAL_FREQOF_DIAG_AND_TREAT,MJZRCS,NUM_OF_OP,YYZYYPZLRCS,FREQOF_NON_DRUG_DIAG_IN_CM,NUM_ACUPUNC_OPND,NUM_MASSAGE_OPND,NUM_MINIMAL_INVASIVE_OPND,NUM_MANUAL_RESET_OPND,NUM_WITHOTHERSDIG_OPND,NUMSPECIALIST_CLINIC,NUM_TCM_SPECIALIST_CLINIC,NUM_WITHSPECIAL_NEEDSOP,NUM_BOOKING_CLINIC,HLWZLFWRCS,FEVER_CLINIC_FREQUENCY,YYDDLJSJ,NUM_TCM_NONDRUG_TREATOP,NUM_ACUPUNC_OPNT,NUM_MASSAGE_OPNT,NUM_MINIMAL_INVASIVE_OPNT,NUM_MANUAL_RESET_OPNT,NUM_WITHOTHERSDIG_OPNT,CYRS,NUM_OUTHIS_TREATED_BY_CHP,NUM_OUTHIS_USETCM_TECH,NUM_OUTHIS_USETCM_EQUIP,NUM_OUTHIS_USECHP,YZYWZZLDCYRS,NUM_OUTHISWITHSPECIAL_NEEDS,NUM_DISCHARGED_OF_DIFF_DISEA,NUM_EMERGENCY_DISCHARGE,XYWCYRS,TOTALNUMDEATHSIN_HOSPITAL,NUM_SURGICAL_TREAT_INHIS,NUM_TCM_SURGICAL_TREAT_INHIS,NUMOFSURGIINLEVELTHREE_FOUR,NUMTCMSURGIINLEVELTHREE_FOUR,ILQLSSZLRS,ZQSSZLRS,RJSHZLRS,ZYCYRJSSZLRS,NUMPATIINICU,NUM_TCM_TREATINICU,NUM_TCM_NURSING_INWARDS,NUMRESCUED,NUMSUCCESSRESCUED,ZZDSJYYDRCS,ZZDBYDRCS,ZZDXJYYHJCYLWSJGRCS,NUMOF_OUTPATIENT_PRESCRIP,NUMOF_PRESCRIPTIONS_IN_CM,NUMOFPRES_FOR_BULK_CHDT,NUMOFPRES_FORSMALLPAC_CHDT,NUMPRESOFCHFG,NUMOF_PCM_PRESCRIPTION,YLJGZYZJCFS,JZYWCFS,TOTAL_NUMOFCHDT,NUMOFDEPT_IMPLE_CP,NUMOFDEPT_IMPLE_TCMCP,NUMOFDISEA_IMPLE_CP,NUMOFDISEA_IMPLE_TCMCP,TOTALNUMOP_ROUTECASES,TOTALNUMOP_TCMROUTECASES,NUMOP_EXE_PATH_CASES,NUMOP_EXE_TCMPATH_CASES,NUMOP_FINI_PATH_CASES,NUMOP_FINI_TCMPATH_CASES,TOTALNUMIP_ROUTECASES,TOTALNUMIP_TCMROUTECASES,NUMIP_EXE_PATH_CASES,NUMIP_EXE_TCMPATH_CASES,NUMIP_FINI_PATH_CASES,NUMIP_FINI_TCMPATH_CASES,YYGRZRS,ILQKSSBWGRRS,ZQSSHZBFZLS,DXYYSBJCRCS,DXYYSBJCYXS,CFZS,DPCFS,ZYCFS,DPZYCFS,CYHZZYYZDPS,ZYZYYZDPS,ZYHZKJYWXHL,MZSYYWDZLRCS,MZSYJBYWDZLRCS,ZYQJSYYWDCYRS,ZYQJSYJBYWRS,YYCGYWPZZS,YYCGJBYWPZS,GJZZYPJZCGZBYPTPZYPYL,GJZZYPJZCGZBYPYL,YYZSJXZRS,YYJSDKZYYYJXRS,YYJSYLTNYYRYJXRS,YYJSQTYYRYJXRS,LCDJJSHZDYSRS,LCDJJSHZDLSJSSJYSPXQQDPXHGZSRS,YYJYPXXYS,YXJYZZGLRYS,GJSCJYZDLSRS,SJJYSSCJYZDLSRS,DSJJYXSCJYZDLSRS,YJSCJYZDLSRS,CJSJJYSSCJYRS,FBDJXLWS,ZDXKZDZKTRJFZJE,ZYYKYCGZHZJE,SFSZNK,SFSZFBK,NUMOFBEDS_LDD,NUMOP_EMERG_LDD,NUMDISCHARGED_LDD,SFSZPWBK,NUMOFBEDS_SASDEPT,NUMOP_EMERG_SASDEPT,NUMDISCHARGED_SASDEPT,SFSZNBK,NUMOFBEDS_BDDIVI,NUMOP_EMERG_BDDIVI,NUMDISCHARGED_BDDIVI,SFSZXXGK,NUMOFBEDS_CARDIOVDEPT,NUMOP_EMERG_CARDIOVDEPT,NUMDISCHARGED_CARDIOVDEPT,SFSZXYK,NUMOFBEDS_HEMATODEPT,NUMOP_EMERG_HEMATODEPT,NUMDISCHARGED_HEMATODEPT,SFSZSBK,NUMOFBEDS_NEPHRODEPT,NUMOP_EMERG_NEPHRODEPT,NUMDISCHARGED_NEPHRODEPT,SFSZNFMK,NUMOFBEDS_ENDOCRDIVI,NUMOP_EMERG_ENDOCRDIVI,NUMDISCHARGED_ENDOCRDIVI,SFSZFSBK,NUMOFBEDS_RHEUMADEPT,NUMOP_EMERG_RHEUMADEPT,NUMDISCHARGED_RHEUMADEPT,SFSZGBK,NUMOFBEDS_HEPATODEPT,NUMOP_EMERG_HEPATODEPT,NUMDISCHARGED_HEPATODEPT,SFSZGRXJBK,NUMOFBEDS_INFECTDIVI,NUMOP_EMERG_INFECTDIVI,NUMDISCHARGED_INFECTDIVI,SFSZSZBK,NUMOFBEDS_PSYCHIDEPT,NUMOP_EMERG_PSYCHIDEPT,NUMDISCHARGED_PSYCHIDEPT,SFSZWK,SFSZFCK,SFSZCK,SFSZEK,SFSZXSEK,SFSZPFK,SFSZYK,SFSZEBYHK,SFSZKQK,SFSZZLK,SFSZGSK,SFSZGCK,SFSZLNBK,SFSZZJK,SFSZTNK,SFSZKFYXK,SFSZJZK,TREATDISEA_WITHOUTDISEA_SIGNS,NUMOFBEDS_TREATDEPTOFDISEA,NUMOP_EMERG_TREATDEPTOFDISEA,NUMDISCHARGED_TREATDEPTOFDISEA,SFSZZZYXK,NUMOFBEDS_ICU,NUMOP_EMERG_ICU,NUMDISCHARGED_ICU,SFSZYFBJK,SFSZQTZYK,SFSZWWEYXK,SFSZZYXK,SFSZMYXK,SFSZYYXK,SFSZDYXK,SFSZQTMZY,SFSZZXYJHK,SFSZQTKS,NUMOFBEDS_OTHERDEPT,NUMOP_EMERG_OTHERDEPT,NUMDISCHARGED_OTHERDEPT,DWFZR,TJFZR,NAME_OF_APPLICANT,LXDH,DORDER,YEAROOFDATARECORD,ROWCODE";
String value = "'91420984MA48RW8W9D','91420984-D','汉川同和中医医院','私营企业','中医(综合)医院','营利性医疗机构','420984','民营','汉川市','仙女山街道办事处霍城大道8号','000','卫生健康行政部门','县(旗)属','否','否','','汉川市霍城大道8号','','113.824623','30.663813','432300','18672299136','刘方钰','否','否','否','未定级','未定等','否','否','0','0','0','2','0','2','否','否','2','1','2','是','0','0','0','0','0','0','0','0','0','','有','无','无','无','无','无','无','无','无','无','未测评','未测评','未测评','71','0','2','19','14','40','0','14','14','0','1','9','0','0','1','0','0','7','0','1','0','0','0','5','16','0','1','10','14','0','5','2','1','0','0','8','4','0','6','4','0','60','60','0','0','0','0','21900','21000','10624','3300','2800','56','70','33','173','25','10505','0','9825','159','159','0','5825','3403','0','2726','49','0','67','0','2610','4000','3006','0','724','390','0','4','0','330','0','0','0','0','0','0','0','0','0','0','20000','18000','18000','8000','16064','3800','1672','10530','82','0','10886','10886','0','0','0','0','0','230546','110834','3800','10530','105300','82','996','577','268','624','0','996','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','1100','600','1000','996','900','0','0','996','996','996','0','3','3','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','设置','未设置','-','-','-','未设置','-','-','-','未设置','-','-','-','未设置','-','-','-','未设置','-','-','-','未设置','-','-','-','未设置','-','-','-','未设置','-','-','-','未设置','-','-','-','未设置','-','-','-','未设置','-','-','-','设置','未设置','未设置','未设置','未设置','未设置','未设置','未设置','未设置','未设置','设置','未设置','未设置','未设置','设置','设置','未设置','设置','60','10','10','未设置','-','-','-','未设置','未设置','未设置','未设置','未设置','未设置','未设置','未设置','未设置','未设置','-','-','-','刘方钰','陈骁','陈骁','13469976551','1692071286103384','2023年','1692071286103385'";
String[] fields = field.split(",");
String[] values = value.split(",");
for (int i = 0; i < fields.length; i++) {
System.out.println(StringUtils.format("UPDATE T0801_TCMHOSP_TEMP SET {} = {} WHERE ROWCODE = '123';",fields[i].replaceAll("\n",""),values[i]));
}
}
......
package com.tbyf.his.web.controller.dataImport; package com.tbyf.his.web.controller.dataImport;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tbyf.his.common.annotation.IgnoreWebSecurity; import com.tbyf.his.common.annotation.IgnoreWebSecurity;
import com.tbyf.his.common.core.domain.AjaxResult; import com.tbyf.his.common.core.domain.AjaxResult;
...@@ -111,8 +112,12 @@ public class ExcelDataController { ...@@ -111,8 +112,12 @@ public class ExcelDataController {
excelData.setFile(param.getFile().getBytes()); excelData.setFile(param.getFile().getBytes());
excelData.setFileName(param.getFile().getOriginalFilename()); excelData.setFileName(param.getFile().getOriginalFilename());
// 保存后导入文件数据 // 保存后导入文件数据
excelDataService.importData(excelData); List<String> strings = excelDataService.importData(excelData);
if (CollectionUtils.isEmpty(strings)){
excelDataService.saveOrUpdate(excelData); excelDataService.saveOrUpdate(excelData);
}else {
return AjaxResult.success(strings);
}
} else if (StringUtils.equals(param.getType(), "2")) { } else if (StringUtils.equals(param.getType(), "2")) {
ExcelData excelData = excelDataService.getOne(Wrappers.lambdaQuery(ExcelData.class) ExcelData excelData = excelDataService.getOne(Wrappers.lambdaQuery(ExcelData.class)
.eq(ExcelData::getTemplateId, param.getTemplateId()) .eq(ExcelData::getTemplateId, param.getTemplateId())
......
...@@ -4,6 +4,7 @@ import com.tbyf.his.common.core.text.StrFormatter; ...@@ -4,6 +4,7 @@ import com.tbyf.his.common.core.text.StrFormatter;
import com.tbyf.his.common.utils.DateUtils; import com.tbyf.his.common.utils.DateUtils;
import com.tbyf.his.common.utils.StringUtils; import com.tbyf.his.common.utils.StringUtils;
import com.tbyf.his.web.dataImport.domain.vo.VerifyVO; import com.tbyf.his.web.dataImport.domain.vo.VerifyVO;
import org.apache.commons.lang3.math.NumberUtils;
import java.util.Date; import java.util.Date;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
...@@ -107,6 +108,8 @@ public class DataImportUtils { ...@@ -107,6 +108,8 @@ public class DataImportUtils {
if (StringUtils.containsIgnoreCase(vo.getFieldType(), "VARCHAR")) { if (StringUtils.containsIgnoreCase(vo.getFieldType(), "VARCHAR")) {
return "'" + vo.getValues().get(index) + "'"; return "'" + vo.getValues().get(index) + "'";
} else if (StringUtils.containsIgnoreCase(vo.getFieldType(), "NUMBER")) { } else if (StringUtils.containsIgnoreCase(vo.getFieldType(), "NUMBER")) {
// 判断是否是number类型
//verifyNumber(vo,index);
return "'" + vo.getValues().get(index) + "'"; return "'" + vo.getValues().get(index) + "'";
} else if (StringUtils.containsIgnoreCase(vo.getFieldType(), "DATE")) { } else if (StringUtils.containsIgnoreCase(vo.getFieldType(), "DATE")) {
try { try {
...@@ -123,6 +126,44 @@ public class DataImportUtils { ...@@ -123,6 +126,44 @@ public class DataImportUtils {
return "'" + vo.getValues().get(index) + "'"; return "'" + vo.getValues().get(index) + "'";
} }
/**
* 校验数字
* @param vo
* @param index
*/
public static void verifyNumber(VerifyVO vo, int index){
String s = vo.getValues().get(index);
if (StringUtils.isBlank(s)){
throw new RuntimeException(StringUtils.format("指标:{}|{}字段:{}的数据为:{},不符合数字要求",
vo.getCode(),vo.getTitle(),vo.getFieldName(),s));
}
if (!NumberUtils.isCreatable(s)){
throw new RuntimeException(StringUtils.format("指标:{}|{}字段:{}的数据为:{},不符合数字要求",
vo.getCode(),vo.getTitle(),vo.getFieldName(),s));
}
if (StringUtils.contains(s,".")){
int i = s.indexOf(".");
i = s.length() - i - 1;
if (StringUtils.containsIgnoreCase(vo.getFieldType(), "(")){
int start = vo.getFieldType().indexOf("(");
int end = vo.getFieldType().indexOf(")");
String col = vo.getFieldType().substring(start + 1, end);
String[] split = col.split(",");
if (split.length == 2){
String length = split[1];
if (i > Integer.parseInt(length)){
throw new RuntimeException(StringUtils.format("指标:{}|{}字段:{}的数据为:{},不符合数字精度要求",
vo.getCode(),vo.getTitle(),vo.getFieldName(),s));
}
}
}
}
}
public static void main(String[] args) {
System.out.println(NumberUtils.isCreatable("1.2x"));
}
public static String str(Object o) { public static String str(Object o) {
return o == null ? StringUtils.EMPTY : o.toString(); return o == null ? StringUtils.EMPTY : o.toString();
} }
......
package com.tbyf.his.web.dataImport.domain.vo;
import lombok.Data;
/**
* 字段与数据库类型对比接口
*/
@Data
public class FieldDbDiffVO {
/**
* 数据源名称
*/
private String datasourceId;
/**
* 表名
*/
private String tableName;
/**
* 数据库字段名
*/
private String columnName;
/**
* 字段类型
*/
private String columnType;
/**
* 字段长度
*/
private String columnLength;
/**
* 数据精度
*/
private String columnPrecision;
/**
* 数据精度系数
*/
private String columnScale;
/**
* 元字段类型
*/
private String metaType;
/**
* 修改sql
*/
private String mergeSql;
}
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.vo.FieldDbDiffVO;
import com.tbyf.his.web.dataImport.entity.MetaField; import com.tbyf.his.web.dataImport.entity.MetaField;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* @author lzz * @author lzz
...@@ -9,4 +13,7 @@ import com.tbyf.his.web.dataImport.entity.MetaField; ...@@ -9,4 +13,7 @@ import com.tbyf.his.web.dataImport.entity.MetaField;
*/ */
public interface MetaFieldMapper extends BaseMapper<MetaField> { public interface MetaFieldMapper extends BaseMapper<MetaField> {
List<FieldDbDiffVO> selectFieldDbDiffVO(@Param("tableName") String tableName, @Param("columnName") String columnName);
} }
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.tbyf.his.web.dataImport.entity.ExcelData; import com.tbyf.his.web.dataImport.entity.ExcelData;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List;
/** /**
* @author lzz * @author lzz
...@@ -24,5 +25,5 @@ public interface ExcelDataService extends IService<ExcelData> { ...@@ -24,5 +25,5 @@ public interface ExcelDataService extends IService<ExcelData> {
* 导入文件数据 * 导入文件数据
* @param excelData * @param excelData
*/ */
void importData(ExcelData excelData); List<String> importData(ExcelData excelData);
} }
...@@ -27,7 +27,9 @@ import org.apache.commons.compress.archivers.ArchiveEntry; ...@@ -27,7 +27,9 @@ import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.zip.Zip64Mode; import org.apache.commons.compress.archivers.zip.Zip64Mode;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.util.IOUtils; import org.apache.poi.util.IOUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -458,7 +460,8 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData ...@@ -458,7 +460,8 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData
} }
@Override @Override
public void importData(ExcelData excelData) { public List<String> importData(ExcelData excelData) {
List<String> errorList = new ArrayList<>();
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
final DataTemplate template = dataTemplateService.getById(excelData.getTemplateId()); final DataTemplate template = dataTemplateService.getById(excelData.getTemplateId());
// 获取元字段与所有校验对象 // 获取元字段与所有校验对象
...@@ -487,13 +490,17 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData ...@@ -487,13 +490,17 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData
int l = 0; // 字段长度 int l = 0; // 字段长度
if (StringUtils.containsIgnoreCase(vo.getFieldType(), "NUMBER")) { if (StringUtils.containsIgnoreCase(vo.getFieldType(), "NUMBER")) {
final String[] numbers = vo.getFieldType().replaceAll("NUMBER", "") final String[] numbers = vo.getFieldType().replaceAll("NUMBER", "")
.replaceAll("number", "")
.replaceAll("\\(", "") .replaceAll("\\(", "")
.replaceAll("\\)", "") .replaceAll("\\)", "")
.split(","); .split(",");
b = Integer.parseInt(numbers[1]); b = Integer.parseInt(numbers[1]);
a = Integer.parseInt(numbers[0]) - b; a = Integer.parseInt(numbers[0]) - b;
} else if (StringUtils.containsIgnoreCase(vo.getFieldType(), "VARCHAR2")) { } else if (StringUtils.containsIgnoreCase(vo.getFieldType(), "VARCHAR")) {
l = Integer.parseInt(vo.getFieldType().replaceAll("VARCHAR2", "") l = Integer.parseInt(vo.getFieldType().replaceAll("VARCHAR2", "")
.replaceAll("varchar2", "")
.replaceAll("VARCHAR", "")
.replaceAll("varchar", "")
.replaceAll("\\(", "") .replaceAll("\\(", "")
.replaceAll("\\)", "")); .replaceAll("\\)", ""));
} }
...@@ -512,18 +519,27 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData ...@@ -512,18 +519,27 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData
} }
int k = cellValue.length() - i - 1; int k = cellValue.length() - i - 1;
if (i > a || k > b) { if (i > a || k > b) {
throw new BaseException( errorList.add(StrFormatter.format("字段数据:[{}],字段类型:[{}],字段名称:[{}],数据位置:[{}],数据精度异常",
StrFormatter.format("字段数据:[{}],字段类型:[{}],字段名称:[{}],数据精度异常,请修改数据元与数据库相对应字段信息", cellValue, vo.getFieldType(), vo.getFieldName(),new CellReference(cell.getRowIndex(),cell.getColumnIndex()).formatAsString()));
cellValue, vo.getFieldType(), vo.getFieldName(), cellValue));
} }
} else if (StringUtils.containsIgnoreCase(vo.getFieldType(), "VARCHAR2")) { if (StringUtils.equals("",cellValue) || StringUtils.equals("-",cellValue)){
if (l < cellValue.length()) { vo.addValue("0");
throw new BaseException( }else if (NumberUtils.isCreatable(cellValue)){
StrFormatter.format("字段数据:[{}],字段类型:[{}],字段名称:[{}],数据长度不足,请修改数据元与数据库相对应字段信息", vo.addValue(cellValue);
cellValue, vo.getFieldType(), vo.getFieldName(), cellValue)); }else {
errorList.add(StrFormatter.format("字段数据:[{}],字段类型:[{}],字段名称:[{}],数据位置:[{}],非数字",
cellValue, vo.getFieldType(), vo.getFieldName(),new CellReference(cell.getRowIndex(),cell.getColumnIndex()).formatAsString()));
vo.addValue(cellValue);
} }
} else if (StringUtils.containsIgnoreCase(vo.getFieldType(), "VARCHAR")) {
if (l < cellValue.length()) {
errorList.add( StrFormatter.format("字段数据:[{}],字段类型:[{}],字段名称:[{}],数据位置:[{}],数据长度不足",
cellValue, vo.getFieldType(), vo.getFieldName(),new CellReference(cell.getRowIndex(),cell.getColumnIndex()).formatAsString()));
} }
vo.addValue(cellValue); vo.addValue(cellValue);
}else {
vo.addValue(cellValue);
}
} }
} }
log.info("解析数据用时:[{}]", System.currentTimeMillis() - startTime); log.info("解析数据用时:[{}]", System.currentTimeMillis() - startTime);
...@@ -544,6 +560,9 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData ...@@ -544,6 +560,9 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData
sqlArr[i] = StrFormatter.format(insertSql, template.getTableName() + "_TEMP", sb); sqlArr[i] = StrFormatter.format(insertSql, template.getTableName() + "_TEMP", sb);
} }
try { try {
if(!CollectionUtils.isEmpty(errorList)){
return errorList;
}
DataSourceService.switchDb(template.getDataSourceId()); DataSourceService.switchDb(template.getDataSourceId());
// 需要先清空临时表的数据,按照年份 // 需要先清空临时表的数据,按照年份
jdbcTemplate.execute(StrFormatter.format("DELETE FROM {} WHERE YEAROOFDATARECORD = '{}'" jdbcTemplate.execute(StrFormatter.format("DELETE FROM {} WHERE YEAROOFDATARECORD = '{}'"
...@@ -561,6 +580,7 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData ...@@ -561,6 +580,7 @@ public class ExcelDataServiceImpl extends ServiceImpl<ExcelDataMapper, ExcelData
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
return null;
} }
/** /**
......
...@@ -4,19 +4,19 @@ spring: ...@@ -4,19 +4,19 @@ spring:
druid: druid:
# 主库数据源 # 主库数据源
master: master:
url: jdbc:mysql://81.68.90.14:13307/his_base?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://centos:3306/his_base?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: his_base username: root
password: HEX3wh8n6d8SeZZT password: 123456
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
# 从库数据源 # 从库数据源
slave: slave:
# 从数据源开关/默认关闭 # 从数据源开关/默认关闭
enabled: true enabled: true
# url: jdbc:oracle:thin:@192.168.0.39:1521:orcl # url: jdbc:oracle:thin:@192.168.0.39:1521:orcl
url: jdbc:oracle:thin:@192.168.0.71:11522:helowin url: jdbc:oracle:thin:@centos:1521:helowin
# username: xhyy # username: xhyy
username: datacenter username: liuzz
password: data password: 123456
driverClassName: oracle.jdbc.OracleDriver driverClassName: oracle.jdbc.OracleDriver
# 初始连接数 # 初始连接数
initialSize: 5 initialSize: 5
......
...@@ -64,15 +64,15 @@ spring: ...@@ -64,15 +64,15 @@ spring:
redis: redis:
# 地址 # 地址
# host: 81.68.90.14 # host: 81.68.90.14
host: 127.0.0.1 host: centos
# 端口,默认为6379 # 端口,默认为6379
port: 16378 port: 6379
# port: 6379 # port: 6379
# port: 6379 # port: 6379
# 数据库索引 # 数据库索引
database: 0 database: 0
# 密码 # 密码
password: afJmdkaW07xR password: 123456
# 连接超时时间 # 连接超时时间
timeout: 3000 timeout: 3000
lettuce: lettuce:
......
<?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.MetaFieldMapper">
<select id="selectFieldDbDiffVO" resultType="com.tbyf.his.web.dataImport.domain.vo.FieldDbDiffVO">
SELECT TABLE_NAME as tableName,
COLUMN_NAME as columnName,
DATA_TYPE as columnType,
DATA_LENGTH as columnLength,
DATA_PRECISION as columnPrecision,
DATA_SCALE as columnScale
FROM ALL_TAB_COLS
WHERE TABLE_NAME = #{tableName}
AND COLUMN_NAME = #{columnName}
</select>
</mapper>
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