一、 系统参数配置
系统运行参数,一个系统运行所需要设置参数值。
由管理员登陆系统后台进行设置
系统参数保存数据库BASICINFO
使用时,只需要根据BASICINFO表的id查询参数值。
在程序代码中,通过SystemConfigService,查询系统参数
//改为从系统参数配置表获取参数值
String filePath = systemConfigService.findBasicinfoById("00301").getValue();
二、 药品目录导入
1. 需求 用户线下按照导入文件模版编写excel文件(03 版本),将药品目录 导入系统中。
第一步:进入导入页面
内容包括:导入说明
提供导入模版:
包括导入说明、导入工作表模版(列顺序固定)
第二步:下载导入模版
用户按照模版的导入说明,直接在模版中填写要导入的数据。
第三步:选择导入文件,执行导入操作
2 。mapper
向药品目录 插入记录。
Ypxx表中,bm值通过触发器实现(使用序列,在插入之前通过触发器得一个序列值,实现自增主键)
create or replace trigger generator_ypxxbm
before insert on ypxx
for each row
declare
-- local variables here
begin
select ypxxbm.nextval into :new.bm from dual;
end generator_ypxxbm;
public class YpxxImportServiceImpl implements HxlsOptRowsInterface {
@Autowired
private YpxxMapper ypxxMapper;
@Override
public String optRows(int sheetIndex, int curRow, List rowlist)
throws Exception {
try {
//得到导入的数据
//rowlist数据 是一行数据,按照模版解析
String mc = rowlist.get(0);//通用名
String jx = rowlist.get(1);//剂型
String gg = rowlist.get(2);//规格
String zhxs = rowlist.get(3);//转换系数
//进行校验
//校验中标价格合法性
//校验交易状态的合法性
if(jyzt == null || (!jyzt.equals("1") && !jyzt.equals("2"))){
return "交易状态输入值不正确,请输入1:正常,2:暂停";
}
Ypxx ypxx = new Ypxx();
ypxx.setId(UUIDBuild.getUUID());
ypxx.setMc(mc);
ypxx.setJx(jx);
ypxx.setZbjg(Float.parseFloat(zbjg));
ypxx.setJyzt(jyzt);
//校验调用mapper
ypxxMapper.insert(ypxx);
} catch (Exception e) {
e.printStackTrace();
return "导入失败";
}
return "success";
}
}
4 。 action
包括两个方法:
导入页面显示方法
导入提交方法:
将文件上传到服务器(实现文件上传)
调用HSSF事件驱动封装类,导入药品目录
//药品导入提交
@RequestMapping("/importypxxsubmit")
public @ResponseBody SubmitResultInfo importypxxsubmit
(MultipartFile ypxximportfile)throws Exception{
//将上传的文件写到磁盘
String originalFilename = ypxximportfile.getOriginalFilename();
File file = new File("D:/upload/linshi/" + UUIDBuild.getUUID() +
originalFilename.substring(originalFilename.lastIndexOf(".")));
if(!file.exists()){
file.mkdirs();
}
String absolutePath = file.getAbsolutePath();
ypxximportfile.transferTo(file);
//调用工具类进行药品目录 导入
HxlsRead xls2csv = null;
try {
//第一个参数就是导入的文件
//第二个参数就是导入文件中哪个sheet
//第三个参数导入接口的实现类对象
xls2csv = new HxlsRead(absolutePath, 1, ypxxImportService);
xls2csv.process();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
//提示导入成功条数 和失败的条数
long success_num = xls2csv.getOptRows_success();
long failure_num = xls2csv.getOptRows_failure();
return ResultUtil.createSubmitResult(
ResultUtil.createSuccess(Config.MESSAGE, 314, new Object[]{
success_num,failure_num
}));
}
5 页面
导入页面:
导入模版下载、
导入说明文字
导入文件上传选择组件
<TR>
<TD height=30 align=right>选择导入文件TD>
<TD class=category>
<input type="file" name="ypxximportfile" />
TD>
TR>
最终调试
导入结果中有导入成功数量、导入失败数量,导入失败原因 。
导入失败原因如何展示给用户:
包括失败原因和具体失败记录。
为了方便用户对失败的记录重新修改后提交,在导入结果中,提示“导出失败记录的链接”,用户点击此链接导出失败记录(excel文件,符合excel导入模版),在失败记录文件最后一列为“失败原因”,显示具体失败原因。
对于失败记录处理:
第一步:用户下载失败记录文件(excel文件,符合excel导入模版),内容都是失败记录
第二步:用户参数此文件中失败原因列的内容,修改记录
第三步:将修改后失败记录文件,重新导入。
实现:
在导入action中,获取导入失败记录及导入失败原因。
在导入action中,将失败记录及失败原因导出一个excel,将链接提供给用户下载。
//对导入失败记录处理
//获取导入失败记录
//xls2csv.getFailrows()
//获取导入记录的title
//xls2csv.getRowtitle();
//获取导入失败原因
//xls2csv.getFailmsgs()