From e1c4655c9a9fee49eccd068bc5c66cdda0a178c8 Mon Sep 17 00:00:00 2001 From: hcy <314517173@qq.com> Date: Mon, 13 May 2024 21:23:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=B8=85=E5=8D=95=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E3=80=81=E5=AF=BC=E5=87=BApdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/emr/controller/FontController.java | 11 + .../exportTask/ExportTaskController.java | 128 ++++++++++ .../ExportTaskDetailsController.java | 61 +++++ .../com/emr/dao/ExportTaskDetailsMapper.java | 20 ++ .../java/com/emr/dao/ExportTaskMapper.java | 25 ++ src/main/java/com/emr/entity/ExportTask.java | 46 ++++ .../com/emr/entity/ExportTaskDetails.java | 56 +++++ .../ImportExcel/ImportExcelJudgeMethod.java | 131 ++++++++++ .../service/ImportExcel/ImportExcelUtil.java | 127 +++++++++- .../batchExport/BatchExportService.java | 4 + .../batchExport/BatchExportServiceImpl.java | 211 +++++++++++++++- src/main/java/com/emr/util/Logger.java | 3 +- src/main/java/com/emr/vo/ExportInpVo.java | 15 ++ .../java/com/emr/vo/ExportTaskDetailsVo.java | 4 + src/main/java/com/emr/vo/ExportTaskVo.java | 43 ++++ .../mapper/ExportTaskDetailsMapper.xml | 131 ++++++++++ .../resources/mapper/ExportTaskMapper.xml | 106 ++++++++ .../webapp/WEB-INF/jspf/importExcelJsp.jspf | 95 ++++++++ .../webapp/WEB-INF/jspf/importPackageJsp.jspf | 86 +++++++ .../exportTask/exportTaskList.jsp | 230 ++++++++++++++++++ .../exportTaskDetailsList.jsp | 229 +++++++++++++++++ .../recordManage/exportTask/exportTaskList.js | 209 ++++++++++++++++ .../exportTaskDetailsList.js | 158 ++++++++++++ .../static/js/template/任务清单模板.xls | Bin 0 -> 19968 bytes 24 files changed, 2126 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/emr/controller/exportTask/ExportTaskController.java create mode 100644 src/main/java/com/emr/controller/exportTaskDetails/ExportTaskDetailsController.java create mode 100644 src/main/java/com/emr/dao/ExportTaskMapper.java create mode 100644 src/main/java/com/emr/entity/ExportTask.java create mode 100644 src/main/java/com/emr/entity/ExportTaskDetails.java create mode 100644 src/main/java/com/emr/vo/ExportInpVo.java create mode 100644 src/main/java/com/emr/vo/ExportTaskVo.java create mode 100644 src/main/resources/mapper/ExportTaskMapper.xml create mode 100644 src/main/webapp/WEB-INF/jspf/importExcelJsp.jspf create mode 100644 src/main/webapp/WEB-INF/jspf/importPackageJsp.jspf create mode 100644 src/main/webapp/WEB-INF/views/recordManage/exportTask/exportTaskList.jsp create mode 100644 src/main/webapp/WEB-INF/views/recordManage/exportTaskDetails/exportTaskDetailsList.jsp create mode 100644 src/main/webapp/static/js/recordManage/exportTask/exportTaskList.js create mode 100644 src/main/webapp/static/js/recordManage/exportTaskDetails/exportTaskDetailsList.js create mode 100644 src/main/webapp/static/js/template/任务清单模板.xls diff --git a/src/main/java/com/emr/controller/FontController.java b/src/main/java/com/emr/controller/FontController.java index c3d6880..4424534 100644 --- a/src/main/java/com/emr/controller/FontController.java +++ b/src/main/java/com/emr/controller/FontController.java @@ -603,4 +603,15 @@ public class FontController { public String batchExportPdf(int taskId) throws Exception { return batchExportService.batchExportPdf(taskId); } + + /** + * 下载pdf病例到本地 + * @param taskId + * @param response + */ + @ResponseBody + @RequestMapping(value = "downloadPdfZip", produces = {"text/json;charset=UTF-8"}, method = RequestMethod.POST) + public String downloadPdfZip(int taskId,HttpServletResponse response) throws IOException { + return batchExportService.downloadPdfZip(taskId,response); + } } diff --git a/src/main/java/com/emr/controller/exportTask/ExportTaskController.java b/src/main/java/com/emr/controller/exportTask/ExportTaskController.java new file mode 100644 index 0000000..fee789f --- /dev/null +++ b/src/main/java/com/emr/controller/exportTask/ExportTaskController.java @@ -0,0 +1,128 @@ +package com.emr.controller.exportTask; + + +import com.alibaba.fastjson.JSON; +import com.emr.annotation.OptionalLog; +import com.emr.dao.ExportTaskDetailsMapper; +import com.emr.dao.ExportTaskMapper; +import com.emr.entity.ExportTask; +import com.emr.entity.ExportTaskDetails; +import com.emr.service.ImportExcel.ImportExcelEntity; +import com.emr.service.ImportExcel.ImportExcelUtil; +import com.emr.util.ExceptionPrintUtil; +import com.emr.vo.ExportTaskDetailsVo; +import com.emr.vo.ExportTaskVo; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import javax.servlet.http.HttpServletRequest; +import java.nio.charset.Charset; +import java.util.List; + +/** + * 任务清单控制层 + */ +@Controller +@RequestMapping("exportTask/") +public class ExportTaskController { + + @Autowired + private ExportTaskMapper exportTaskMapper; + + @Autowired + private ExportTaskDetailsMapper exportTaskDetailsMapper; + + /*@RequiresPermissions("/exportTask/exportTaskList")*/ + @OptionalLog(module = "任务清单列表", methods = "任务清单列表页面") + @RequestMapping("exportTaskList") + public String exportTaskList() { + return "recordManage/exportTask/exportTaskList"; + } + + @OptionalLog(module = "任务清单列表", methods = "任务清单列表页面") + @RequestMapping("getExportTaskList") + @ResponseBody + public String getExportTaskList(Integer page, Integer limit, ExportTask exportTask,String startTime,String endTime) { + if (null != page && null != limit) { + PageHelper.startPage(page, limit); + } + try { + List list = exportTaskMapper.getExportTaskList(exportTask,startTime,endTime); + + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + //根据taskid查询所有需要导出病历的住院号出院日期 + List taskList = exportTaskDetailsMapper.selectAllByTaskId(list.get(i).getTaskId()); + if (taskList != null && taskList.size() > 0) { + list.get(i).setState(0); + }else{ + list.get(i).setState(1); + } + } + } + + PageInfo pageInfo = new PageInfo<>(list); + return JSON.toJSONString(pageInfo); + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + return null; + } + } + + @RequiresPermissions("/exportTask/impExcelTask") + @RequestMapping(value = "impExcelTask", method = {RequestMethod.POST}) + @ResponseBody + public ResponseEntity impExcelTask(HttpServletRequest request) { + HttpHeaders responseHeaders = new HttpHeaders(); + responseHeaders.setContentType(new MediaType("text", "html", Charset.forName("UTF-8"))); + try { + //读取文件 + MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) (request); + MultipartFile multipartFile = multiRequest.getFile("upfile"); + //属性名 + String[] fieldNames = {"inpno", "dischargedatetime"}; + //判断集中类中的方法名 + String[] judgeMethods = {"judgeInpNo", "judgeDischargeDateTime"}; + ExportTaskDetails exportTaskDetails = new ExportTaskDetails(); + exportTaskDetails.setState(0); + + //实例化 + ImportExcelUtil.newInstance("exportTaskDetailsMapper", exportTaskDetails, ExportTaskDetails.class); + //导入excel的操作 + ImportExcelEntity excelEntity = ImportExcelUtil.fileImport1(multipartFile, fieldNames, judgeMethods, ""); + if (excelEntity.getSuccessCount() == 0 && excelEntity.getWrongCount() == 0) { + //无数据 + return new ResponseEntity("无数据!", responseHeaders, HttpStatus.OK); + } + if (excelEntity.getWrongCount() == 0) { + //成功 + return new ResponseEntity(null, responseHeaders, HttpStatus.OK); + } else { + //有出错数据 + String msgStr = excelEntity.getWorkBookKey() + "@已成功导入" + excelEntity.getSuccessCount() + "条,失败" + excelEntity.getWrongCount() + "条,随后将导出错误记录!"; + return new ResponseEntity(msgStr, responseHeaders, HttpStatus.OK); + } + + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + //抛异常 + return new ResponseEntity(e.getMessage(), responseHeaders, HttpStatus.OK); + } + + } + +} diff --git a/src/main/java/com/emr/controller/exportTaskDetails/ExportTaskDetailsController.java b/src/main/java/com/emr/controller/exportTaskDetails/ExportTaskDetailsController.java new file mode 100644 index 0000000..e06ae25 --- /dev/null +++ b/src/main/java/com/emr/controller/exportTaskDetails/ExportTaskDetailsController.java @@ -0,0 +1,61 @@ +package com.emr.controller.exportTaskDetails; + + +import com.alibaba.fastjson.JSON; +import com.emr.annotation.OptionalLog; +import com.emr.dao.ExportTaskDetailsMapper; +import com.emr.dao.ExportTaskMapper; +import com.emr.entity.ExportTask; +import com.emr.entity.ExportTaskDetails; +import com.emr.util.ExceptionPrintUtil; +import com.emr.vo.ExportTaskDetailsVo; +import com.emr.vo.ExportTaskVo; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * 任务清单控制层 + */ +@Controller +@RequestMapping("exportTaskDetails/") +public class ExportTaskDetailsController { + + @Autowired + private ExportTaskMapper exportTaskMapper; + + @Autowired + private ExportTaskDetailsMapper exportTaskDetailsMapper; + + + @OptionalLog(module = "任务清单明细查询", methods = "任务清单明细查询页面") + @RequestMapping("exportTaskDetailsList") + public String exportTaskDetailsList() { + return "recordManage/exportTaskDetails/exportTaskDetailsList"; + } + + @OptionalLog(module = "任务清单明细列表", methods = "任务清单明细列表页面") + @RequestMapping("getExportTaskDetailsList") + @ResponseBody + public String getExportTaskDetailsList(Integer page, Integer limit, ExportTaskDetails exportTaskDetails,String startTime,String endTime) { + if (null != page && null != limit) { + PageHelper.startPage(page, limit); + } + try { + List list = exportTaskDetailsMapper.getExportTaskDetailsList(exportTaskDetails,startTime,endTime); + + PageInfo pageInfo = new PageInfo<>(list); + return JSON.toJSONString(pageInfo); + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + return null; + } + } + +} diff --git a/src/main/java/com/emr/dao/ExportTaskDetailsMapper.java b/src/main/java/com/emr/dao/ExportTaskDetailsMapper.java index 1015bfd..0b9a520 100644 --- a/src/main/java/com/emr/dao/ExportTaskDetailsMapper.java +++ b/src/main/java/com/emr/dao/ExportTaskDetailsMapper.java @@ -1,5 +1,6 @@ package com.emr.dao; +import com.emr.entity.ExportTaskDetails; import com.emr.vo.ExportDetailsVo; import com.emr.vo.ExportTaskDetailsVo; import org.apache.ibatis.annotations.Param; @@ -20,4 +21,23 @@ public interface ExportTaskDetailsMapper { List getfilePath(@Param("inpNo") String inpNo, @Param("dischargeDateTime") String dischargeDateTime); int upStatc(@Param("state") int state,@Param("id") int id); + + + int deleteByPrimaryKey(Integer id); + + int insert(ExportTaskDetails record); + + int insertSelective(ExportTaskDetails record); + + ExportTaskDetails selectByPrimaryKey(Integer id); + + int updateByPrimaryKeySelective(ExportTaskDetails record); + + int updateByPrimaryKey(ExportTaskDetails record); + + int SimpleInsert(List list); + + ExportTaskDetails selectExportTaskDetailsByInpNo(@Param("inpNo") String inpNo); + + List getExportTaskDetailsList(@Param("record") ExportTaskDetails exportTaskDetails,@Param("startTime") String startTime,@Param("endTime") String endTime); } diff --git a/src/main/java/com/emr/dao/ExportTaskMapper.java b/src/main/java/com/emr/dao/ExportTaskMapper.java new file mode 100644 index 0000000..afe389b --- /dev/null +++ b/src/main/java/com/emr/dao/ExportTaskMapper.java @@ -0,0 +1,25 @@ +package com.emr.dao; + +import com.emr.entity.ExportTask; +import com.emr.vo.ExportTaskVo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface ExportTaskMapper { + int deleteByPrimaryKey(Integer taskId); + + int insert(ExportTask record); + + int insertSelective(ExportTask record); + + ExportTask selectByPrimaryKey(Integer taskId); + + int updateByPrimaryKeySelective(ExportTask record); + + int updateByPrimaryKey(ExportTask record); + + ExportTask getExportTaskByName(@Param("taskName") String taskName); + + List getExportTaskList(@Param("record") ExportTask exportTask,@Param("startTime") String startTime,@Param("endTime") String endTime); +} \ No newline at end of file diff --git a/src/main/java/com/emr/entity/ExportTask.java b/src/main/java/com/emr/entity/ExportTask.java new file mode 100644 index 0000000..ae6d16d --- /dev/null +++ b/src/main/java/com/emr/entity/ExportTask.java @@ -0,0 +1,46 @@ +package com.emr.entity; + +import java.util.Date; + +public class ExportTask { + private Integer taskId; + + private String taskName; + + private Integer state; + + private Date createDate; + + + public Integer getTaskId() { + return taskId; + } + + public void setTaskId(Integer taskId) { + this.taskId = taskId; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName == null ? null : taskName.trim(); + } + + public Integer getState() { + return state; + } + + public void setState(Integer state) { + this.state = state; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } +} \ No newline at end of file diff --git a/src/main/java/com/emr/entity/ExportTaskDetails.java b/src/main/java/com/emr/entity/ExportTaskDetails.java new file mode 100644 index 0000000..e438214 --- /dev/null +++ b/src/main/java/com/emr/entity/ExportTaskDetails.java @@ -0,0 +1,56 @@ +package com.emr.entity; + +import java.util.Date; + +public class ExportTaskDetails { + + private Integer id; + + private Integer taskid; + + private String inpno; + + private Date dischargedatetime; + + private Integer state; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getTaskid() { + return taskid; + } + + public void setTaskid(Integer taskid) { + this.taskid = taskid; + } + + public String getInpno() { + return inpno; + } + + public void setInpno(String inpno) { + this.inpno = inpno == null ? null : inpno.trim(); + } + + public Date getDischargedatetime() { + return dischargedatetime; + } + + public void setDischargedatetime(Date dischargedatetime) { + this.dischargedatetime = dischargedatetime; + } + + public Integer getState() { + return state; + } + + public void setState(Integer state) { + this.state = state; + } +} \ No newline at end of file diff --git a/src/main/java/com/emr/service/ImportExcel/ImportExcelJudgeMethod.java b/src/main/java/com/emr/service/ImportExcel/ImportExcelJudgeMethod.java index 74397a6..5be3514 100644 --- a/src/main/java/com/emr/service/ImportExcel/ImportExcelJudgeMethod.java +++ b/src/main/java/com/emr/service/ImportExcel/ImportExcelJudgeMethod.java @@ -1,16 +1,21 @@ package com.emr.service.ImportExcel; import com.emr.dao.CommomMapper; +import com.emr.dao.ExportTaskMapper; import com.emr.dao.approve.Emr_Apply_ApproveMapper; +import com.emr.entity.ExportTask; +import com.emr.entity.ExportTaskDetails; import com.emr.entity.Power_User; import com.emr.entity.ResultUtil; import com.emr.entity.approve.Emr_Apply_Approve; import com.emr.vo.commomSearch.CommomVo; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.DateUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.request.RequestContextHolder; @@ -20,6 +25,7 @@ import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; /** @@ -44,6 +50,9 @@ public class ImportExcelJudgeMethod { @Autowired private Emr_Apply_ApproveMapper applyApproveMapper; + @Autowired + private ExportTaskMapper exportTaskMapper; + /****************************************导入公共判断******************************************************/ /** * 批量插入 @@ -58,6 +67,52 @@ public class ImportExcelJudgeMethod { Method method = cls.getDeclaredMethod(SIMPLEINSERT,List.class); return (int)method.invoke(bean,list); } + + /** + * 批量插入 + */ + public int SimpleInsert1(List list, String mapperName, String value) throws Exception { + + int t = 0; + String taskName = value.replaceAll(".xls", "").replaceAll(".xlsx", ""); + ExportTask task = null; + task = exportTaskMapper.getExportTaskByName(taskName); + + + if (list != null && list.size() > 0) { + ExportTask exportTask = new ExportTask(); + exportTask.setTaskName(taskName); + exportTask.setState(0); + exportTask.setCreateDate(new Date()); + + if (ObjectUtils.isEmpty(task)) { + //任务清单主表插入 + exportTaskMapper.insertSelective(exportTask); + //根据任务名称查找任务清单id + task = exportTaskMapper.getExportTaskByName(taskName); + }else{ + exportTask.setTaskId(task.getTaskId()); + exportTaskMapper.updateByPrimaryKeySelective(exportTask); + + } + + for (int i = 0; i < list.size(); i++) { + ExportTaskDetails exportTaskDetails = (ExportTaskDetails) list.get(i); + exportTaskDetails.setTaskid(task.getTaskId()); + } + //注入判断方法集中类 + WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); + //获取类实例 + Object bean = wac.getBean(mapperName); + Class cls = bean.getClass(); + //获取执行方法 + Method method = cls.getDeclaredMethod(SIMPLEINSERT, List.class); + t = (int) method.invoke(bean, list); + + } + return t; + } + /****************************************自定义验证记录合法******************************************************/ public String judgeRecord(String fieldName, String value, Field f, Object object, String head)throws Exception{ Emr_Apply_Approve applyApprove = (Emr_Apply_Approve)object; @@ -199,4 +254,80 @@ public class ImportExcelJudgeMethod { } return ""; } + + /** + * 验证taskId + * + * @param fieldName + * @param value + * @param f + * @param object + * @param head + * @return + */ + public String judgeTaskId(String fieldName, String value, Field f, Object object, String head) throws Exception { + + if ("taskid".equals(fieldName)) { + if (StringUtils.isBlank(value)) { + return "\"" + head + "\"不能为空,"; + } + f.set(object, Integer.valueOf(value)); + } + + return ""; + + } + + /** + * 验证病案号 + * + * @param fieldName + * @param value + * @param f + * @param object + * @param head + * @return + */ + public String judgeInpNo(String fieldName, String value, Field f, Object object, String head) throws Exception { + + if ("inpno".equals(fieldName)) { + if (StringUtils.isBlank(value)) { + return "\"" + head + "\"不能为空,"; + } + //判断长度 + if (value.length() > 30) { + return "\"" + head + "\"输入内容太长,长度为30,"; + } + //判断当前行病案号是否已经存在 + /*ExportTaskDetails exportTaskDetails = exportTaskDetailsMapper.selectExportTaskDetailsByInpNo(value); + if (exportTaskDetails != null) { + return "\"" + head + "\"已存在,"; + }*/ + + f.set(object, value); + } + return ""; + } + + /** + * 验证出院日期 + * + * @param fieldName + * @param value + * @param f + * @param object + * @param head + * @return + */ + public String judgeDischargeDateTime(String fieldName, String value, Field f, Object object, String head) throws Exception { + + if ("dischargedatetime".equals(fieldName)) { + if (StringUtils.isBlank(value)) { + return "\"" + head + "\"不能为空,"; + } + + f.set(object, DateUtil.parseYYYYMMDDDate(value)); + } + return ""; + } } diff --git a/src/main/java/com/emr/service/ImportExcel/ImportExcelUtil.java b/src/main/java/com/emr/service/ImportExcel/ImportExcelUtil.java index 5bbb4cf..cb46056 100644 --- a/src/main/java/com/emr/service/ImportExcel/ImportExcelUtil.java +++ b/src/main/java/com/emr/service/ImportExcel/ImportExcelUtil.java @@ -41,6 +41,8 @@ public class ImportExcelUtil { //公共批量插入方法 private static final String SIMPLEINSERT = "SimpleInsert"; + private static final String SIMPLEINSERT1 = "SimpleInsert1"; + public static void newInstance(String mapperName,Object o,Class oClass){ MAPPERNAME = mapperName; object = o; @@ -150,6 +152,109 @@ public class ImportExcelUtil { return excelEntity; } + /** + * 导入功能 + * + * @param multipartFile + * @return + */ + public static ImportExcelEntity fileImport1(MultipartFile multipartFile, String[] fieldNames, String[] judgeMethods, String jedgeMethod) { + Workbook workbook = null; + int successCount = 0; + int wrongCount = 0; + String workBookKey = ""; + //正确行数下角标 + List wrongRowIndex = new ArrayList<>(); + try { + /*把文件流copy读取到文件中*/ + workbook = WorkbookFactory.create(multipartFile.getInputStream()); + /*遍历sheet页*/ + for (int i = 0; i < workbook.getNumberOfSheets(); i++) { + Sheet sheet = workbook.getSheetAt(i); + if (sheet == null) { + continue; + } + //获取表头行 + Row head = sheet.getRow(0); + /*遍历行,这里j的初始值取1是因为我的表格里第一行是表头*/ + List list = new ArrayList<>(); + for (int j = 1; j < sheet.getPhysicalNumberOfRows(); j++) { + Row row = sheet.getRow(j); + boolean flag = isRowEmpty(row); + if (!flag) { + if (row.getPhysicalNumberOfCells() != 0) { + StringBuilder wrongStr = new StringBuilder(); + for (int k = 0; k < fieldNames.length; k++) { + //对象赋值后返回错误对象 + wrongStr.append(getValueByField(object, fieldNames[k], getCellValue(row.getCell(k)), getCellValue(head.getCell(k)), judgeMethods[k])); + } + //有错误信息在行尾创建cell,并标红提示文字 + if (StringUtils.isBlank(wrongStr)) { + Constructor constructor = ObjectClass.getDeclaredConstructor(); + Object obj = (Object) constructor.newInstance(); + //判断是否有自定义条件 + if (StringUtils.isNotBlank(jedgeMethod)) { + //判断是否有报错信息,有报错信息添加到报错信息 + String valueByField = judgeMethod(jedgeMethod); + if (StringUtils.isNotBlank(valueByField)) { + wrongStr.append(valueByField); + } else { + successCount++; + wrongRowIndex.add(j); + //复制 + copy(object, obj); + list.add(obj); + } + } else { + successCount++; + wrongRowIndex.add(j); + //复制 + copy(object, obj); + list.add(obj); + } + } + if (StringUtils.isNotBlank(wrongStr)) { + //设置错误信息字体为红色加粗 + Font font = workbook.createFont(); + font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); + font.setColor(HSSFColor.RED.index); + CellStyle cellStyle = workbook.createCellStyle(); + cellStyle.setFont(font); + Cell cell = row.createCell(fieldNames.length); + cell.setCellStyle(cellStyle); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + wrongStr = new StringBuilder(wrongStr.substring(0, wrongStr.length() - 1)); + cell.setCellValue(wrongStr.toString()); + wrongCount++; + } + } + } + } + //批量新增成功记录 + SimpleInsert1(list, multipartFile.getOriginalFilename()); + //删除正确行 + if (!wrongRowIndex.isEmpty()) { + //定义删除次数,对应后方下角标都要减去删除次数 + int deleteCount = 0; + //递归删除 + removeSheet(sheet, deleteCount, wrongRowIndex); + } + } + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(); + } + //错误excel加入缓存 + if (wrongCount != 0) { + workBookKey = UUIDUtils.getUUID(); + workBookMap.put(workBookKey, workbook); + } + ImportExcelEntity excelEntity = new ImportExcelEntity(); + excelEntity.setSuccessCount(successCount); + excelEntity.setWrongCount(wrongCount); + excelEntity.setWorkBookKey(workBookKey); + return excelEntity; + } //批量新增成功数据方法 private static int SimpleInsert(List list)throws Exception{ if(null != list && !list.isEmpty()){ @@ -170,6 +275,26 @@ public class ImportExcelUtil { } } + //批量新增成功数据方法 + private static int SimpleInsert1(List list, String value) throws Exception { + if (null != list && !list.isEmpty()) { + //注入判断方法集中类 + //插入数据库 + //反射执行插入方法 + //获取当前上下文环境,spring容器 + WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); + //获取类实例 + Object bean = wac.getBean(IMPORTEXCELJUDGEMETHOD); + Class cls = bean.getClass(); + //获取执行方法 + Method method = cls.getDeclaredMethod(SIMPLEINSERT1, List.class, String.class, String.class); + return (int) method.invoke(bean, list, MAPPERNAME, value); + //执行方法 + } else { + return 0; + } + } + //判断空行 private static boolean isRowEmpty(Row row) { for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) { @@ -286,7 +411,7 @@ public class ImportExcelUtil { if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式 SimpleDateFormat sdf = null; // 验证short值 - if (cell.getCellStyle().getDataFormat() == 14) { + if (cell.getCellStyle().getDataFormat() == 14 || cell.getCellStyle().getDataFormat() == 176) { sdf = new SimpleDateFormat("yyyy/MM/dd"); } else if (cell.getCellStyle().getDataFormat() == 21) { sdf = new SimpleDateFormat("HH:mm:ss"); diff --git a/src/main/java/com/emr/service/batchExport/BatchExportService.java b/src/main/java/com/emr/service/batchExport/BatchExportService.java index 3cce112..4c34dd5 100644 --- a/src/main/java/com/emr/service/batchExport/BatchExportService.java +++ b/src/main/java/com/emr/service/batchExport/BatchExportService.java @@ -1,5 +1,7 @@ package com.emr.service.batchExport; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; /** @@ -14,4 +16,6 @@ public interface BatchExportService { //批量导出 String batchExportPdf(int taskId)throws Exception; + + String downloadPdfZip(int taskId, HttpServletResponse response) throws IOException; } diff --git a/src/main/java/com/emr/service/batchExport/BatchExportServiceImpl.java b/src/main/java/com/emr/service/batchExport/BatchExportServiceImpl.java index 9afdf76..7241668 100644 --- a/src/main/java/com/emr/service/batchExport/BatchExportServiceImpl.java +++ b/src/main/java/com/emr/service/batchExport/BatchExportServiceImpl.java @@ -1,9 +1,11 @@ package com.emr.service.batchExport; import com.emr.dao.ExportTaskDetailsMapper; +import com.emr.dao.emrPdfWaterSet.EmrPdfWaterSetMapper; import com.emr.entity.emrPdfWaterSet.EmrPdfWaterSet; import com.emr.util.ExceptionPrintUtil; import com.emr.util.Logger; +import com.emr.util.img2PdfUtil; import com.emr.vo.ExportDetailsVo; import com.emr.vo.ExportTaskDetailsVo; import com.emr.vo.commomSearch.ScanPathVo; @@ -17,12 +19,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; import static com.emr.util.img2PdfUtil.addWaterMark; @@ -35,10 +40,17 @@ import static com.emr.util.img2PdfUtil.addWaterMark; */ @Service public class BatchExportServiceImpl implements BatchExportService { - private static Logger logger = new Logger(); + //private static Logger logger = new Logger(); + + @Resource + private Logger logger; @Autowired ExportTaskDetailsMapper exportTaskDetailsMapper; + + @Autowired + private EmrPdfWaterSetMapper pdfWaterSetMapper; + @Value("${export_pdf_hospital_info}") private String flieName; @@ -189,4 +201,201 @@ public class BatchExportServiceImpl implements BatchExportService { String formattedDate = targetFormat.format(date); return flieName + "_" + dto.getInpNo() + "_" + formattedDate; } + + @Override + public String downloadPdfZip(int taskId, HttpServletResponse response) throws IOException { + //是否存在目录不存在创建 + File file = new File(exportPdfPath); + if (!file.isDirectory()) { + file.mkdirs(); + } + //根据taskid查询所有需要导出病历的住院号出院日期 + List taskList = exportTaskDetailsMapper.selectAllByTaskId(taskId); + if (taskList == null) { + return "没有任务"; + } + response.reset(); + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + ZipOutputStream zos = null; + BufferedOutputStream bos = null; + ByteArrayOutputStream out = null; + BufferedInputStream bis = null; + try { + String zipName = "任务清单pdf压缩包"; + zipName = java.net.URLEncoder.encode(zipName, "UTF-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + zipName + "(" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ").zip"); + zos = new ZipOutputStream(response.getOutputStream()); + bos = new BufferedOutputStream(zos); + EmrPdfWaterSet emrPdfWaterSet = pdfWaterSetMapper.selectByPrimaryKey(1); + for (ExportTaskDetailsVo list : taskList) { + //根据住院号出院日期查询需要导出病历路径 + List filePathList = exportTaskDetailsMapper.getfilePath(list.getInpNo(), list.getDischargeDateTime()); + if (filePathList == null || filePathList.size() == 0) { + exportTaskDetailsMapper.upStatc(2, list.getId()); + logger.log("病案号为:" + list.getInpNo() + "出院时间为:" + list.getDischargeDateTime() + "的病历找不到。"); + continue; + } + //组织导出文件名 + //fileName = exportFlieName(list); + out = new ByteArrayOutputStream(); + Boolean aBoolean = imageToPdf1(filePathList, out, emrPdfWaterSet); + //Boolean aBoolean = imageToPdf(filePathList, fileName,exportPdfPath); + //为true时修改任务状态1完成2失败 + if (aBoolean) { + exportTaskDetailsMapper.upStatc(1, list.getId()); + String inpNo = list.getInpNo(); + String dischargeDateTime = list.getDischargeDateTime(); + //格式化日期 + String disDateStr = dischargeDateTime.substring(0, 4) + dischargeDateTime.substring(5, 7) + dischargeDateTime.substring(8, 10); + String pdfNameStr = inpNo + "_" + disDateStr; + //每个文件名 + String filePdfName = flieName + "_" + pdfNameStr; + zos.putNextEntry(new ZipEntry(filePdfName + ".pdf")); + + byte[] file1 = out.toByteArray(); //这个zip文件的字节 + bis = new BufferedInputStream(new ByteArrayInputStream(file1)); + //输出 + int len = 0; + byte[] buf = new byte[1024 * 1024]; + while ((len = bis.read(buf, 0, buf.length)) != -1) { + bos.write(buf, 0, len); + } + + } else { + exportTaskDetailsMapper.upStatc(2, list.getId()); + logger.log("病案号为:" + list.getInpNo() + "出院时间为:" + list.getDischargeDateTime() + "的病历保存失败。"); + } + } + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + } finally { + try { + if (null != bos) { + bos.flush(); + bos.close(); + } + if (null != bis) { + bis.close(); + } + out.flush(); + out.close(); + if (null != zos) { + zos.flush(); + zos.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return "下载完成"; + } + + + public Boolean imageToPdf1(List scanPathVos, ByteArrayOutputStream bos, EmrPdfWaterSet pdfWaterSet) { + //ByteArrayOutputStream bos = null; + FileOutputStream fileOutputStream = null; + PdfWriter writer = null; + try { + //bos = new ByteArrayOutputStream(); + Document document = new Document(PageSize.A4, 0, 0, 0, 0); //创建文档容器 + //fileOutputStream = new FileOutputStream(exportPdfPath + fileName + ".pdf"); + //writer = PdfWriter.getInstance(document, fileOutputStream);//创建编写器(PDF类型) + //是否启用水印 + writer = PdfWriter.getInstance(document, bos); + //上一个目录名称 + String lastOutline = null; + //是否增加标签 + boolean outFlag = true; + //标签顺序 + Integer outNum = 1; + // 添加目录 + document.open(); //打开容器 + float w, h; + PdfContentByte cb = writer.getDirectContent(); + cb.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 12); + cb.beginText(); + cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "目录", 300, 780, 0); + cb.endText(); + // 创建目录 + PdfOutline root = cb.getRootOutline(); + // 添加图片到PDF + for (int i = 0; i < scanPathVos.size(); i++) { + try { + String assortName = scanPathVos.get(i).getAssortName(); + if (StringUtils.isNotBlank(lastOutline) && lastOutline.equals(assortName)) { + outFlag = false; + } + if (StringUtils.isBlank(lastOutline)) { + lastOutline = assortName; + outFlag = true; + } + if (!lastOutline.equals(assortName)) { + lastOutline = assortName; + outFlag = true; + } + String imagePath = scanPathVos.get(i).getFilePath(); + + Image image = Image.getInstance(imagePath); + /*处理图片缩放比例*/ + w = image.getWidth(); + h = image.getHeight(); + image.setAlignment(com.lowagie.text.Image.ALIGN_CENTER); + image.scaleAbsolute(PageSize.A4.getWidth(), PageSize.A4.getWidth() * (h / w)); + // 创建新页面并添加图片 + if (i != 0) { + document.newPage(); + } + document.add(image); + if (outFlag) { + System.out.println(); + //目录跳转页面内容设置。 + PdfAction action = PdfAction.gotoLocalPage(i + 1, new PdfDestination(PdfDestination.FIT), writer); + //标题目录 + String title = outNum + "." + scanPathVos.get(i).getAssortName(); + new PdfOutline(root, action, title, false); + outNum++; + } + + } catch (Exception e) { + logger.log("导出失败" + scanPathVos.get(i).getFilePath() + e.getMessage()); + e.printStackTrace(); + } + } + document.close(); + //是否启用水印 + Short effective = pdfWaterSet.getDownloadEffective(); + Short isImg = pdfWaterSet.getDownloadIsImg(); + if (effective == 1 || isImg == 1) { + img2PdfUtil.addWaterMark(bos, null, pdfWaterSet.getUpOrUnder(), pdfWaterSet.getTransparent(), + pdfWaterSet.getText(), pdfWaterSet.getTextX(), pdfWaterSet.getTextY(), + pdfWaterSet.getTextColor(), pdfWaterSet.getTextSize(), pdfWaterSet.getTextRotation(), + effective, isImg, pdfWaterSet.getImgFile(), pdfWaterSet.getImgWidth(), + pdfWaterSet.getImgHeight(), pdfWaterSet.getImgX(), pdfWaterSet.getImgY()); + } + } catch (Exception e) { + logger.log(e + ""); + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + return false; + } finally { + try { + if (writer != null) { + writer.close(); + } + if (fileOutputStream != null) { + fileOutputStream.close(); + } + + if (bos != null) { + bos.flush(); + bos.close(); + } + + } catch (IOException e) { + e.printStackTrace(); + } + } + return true; + } } diff --git a/src/main/java/com/emr/util/Logger.java b/src/main/java/com/emr/util/Logger.java index 65c7f07..b5cc2ad 100644 --- a/src/main/java/com/emr/util/Logger.java +++ b/src/main/java/com/emr/util/Logger.java @@ -1,6 +1,7 @@ package com.emr.util; import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; import java.io.File; import java.io.FileOutputStream; @@ -8,7 +9,7 @@ import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; - +@Component public class Logger { @Value("${export_pdf_path}") diff --git a/src/main/java/com/emr/vo/ExportInpVo.java b/src/main/java/com/emr/vo/ExportInpVo.java new file mode 100644 index 0000000..99c8e15 --- /dev/null +++ b/src/main/java/com/emr/vo/ExportInpVo.java @@ -0,0 +1,15 @@ +package com.emr.vo; + +import lombok.Data; + +/** + * 费用清单异常 + */ +@Data +public class ExportInpVo { + private String inpatientNo;//病案号 + + private String disDate; //出院日期 + + +} diff --git a/src/main/java/com/emr/vo/ExportTaskDetailsVo.java b/src/main/java/com/emr/vo/ExportTaskDetailsVo.java index e2713e7..b36be08 100644 --- a/src/main/java/com/emr/vo/ExportTaskDetailsVo.java +++ b/src/main/java/com/emr/vo/ExportTaskDetailsVo.java @@ -21,4 +21,8 @@ public class ExportTaskDetailsVo { //出院日期 private String dischargeDateTime; + private Integer state; + + private String createDate; + } diff --git a/src/main/java/com/emr/vo/ExportTaskVo.java b/src/main/java/com/emr/vo/ExportTaskVo.java new file mode 100644 index 0000000..b9c2ea2 --- /dev/null +++ b/src/main/java/com/emr/vo/ExportTaskVo.java @@ -0,0 +1,43 @@ +package com.emr.vo; + +public class ExportTaskVo { + + private Integer taskId; + private String taskName; + + private Integer state; + + private String createDate; + + public Integer getTaskId() { + return taskId; + } + + public void setTaskId(Integer taskId) { + this.taskId = taskId; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName == null ? null : taskName.trim(); + } + + public Integer getState() { + return state; + } + + public void setState(Integer state) { + this.state = state; + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } +} \ No newline at end of file diff --git a/src/main/resources/mapper/ExportTaskDetailsMapper.xml b/src/main/resources/mapper/ExportTaskDetailsMapper.xml index c01a956..8671011 100644 --- a/src/main/resources/mapper/ExportTaskDetailsMapper.xml +++ b/src/main/resources/mapper/ExportTaskDetailsMapper.xml @@ -32,4 +32,135 @@ + + + + + + + + + id, taskId, inpNo, dischargeDateTime, state + + + + + + delete from Export_Task_Details + where id = #{id,jdbcType=INTEGER} + + + insert into Export_Task_Details (id, taskId, inpNo, + dischargeDateTime, state) + values (#{id,jdbcType=INTEGER}, #{taskid,jdbcType=INTEGER}, #{inpno,jdbcType=VARCHAR}, + #{dischargedatetime,jdbcType=TIMESTAMP}, #{state,jdbcType=INTEGER}) + + + insert into Export_Task_Details + + + id, + + + taskId, + + + inpNo, + + + dischargeDateTime, + + + state, + + + + + #{id,jdbcType=INTEGER}, + + + #{taskid,jdbcType=INTEGER}, + + + #{inpno,jdbcType=VARCHAR}, + + + #{dischargedatetime,jdbcType=TIMESTAMP}, + + + #{state,jdbcType=INTEGER}, + + + + + INSERT INTO Export_Task_Details(taskId,inpNo,dischargeDateTime,state) + VALUES + + ( + #{item.taskid,jdbcType=INTEGER}, + #{item.inpno,jdbcType=VARCHAR}, + #{item.dischargedatetime,jdbcType=TIMESTAMP}, + #{item.state,jdbcType=INTEGER} + ) + + + + update Export_Task_Details + + + taskId = #{taskid,jdbcType=INTEGER}, + + + inpNo = #{inpno,jdbcType=VARCHAR}, + + + dischargeDateTime = #{dischargedatetime,jdbcType=TIMESTAMP}, + + + state = #{state,jdbcType=INTEGER}, + + + where id = #{id,jdbcType=INTEGER} + + + update Export_Task_Details + set taskId = #{taskid,jdbcType=INTEGER}, + inpNo = #{inpno,jdbcType=VARCHAR}, + dischargeDateTime = #{dischargedatetime,jdbcType=TIMESTAMP}, + state = #{state,jdbcType=INTEGER} + where id = #{id,jdbcType=INTEGER} + + \ No newline at end of file diff --git a/src/main/resources/mapper/ExportTaskMapper.xml b/src/main/resources/mapper/ExportTaskMapper.xml new file mode 100644 index 0000000..b593e46 --- /dev/null +++ b/src/main/resources/mapper/ExportTaskMapper.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + task_id, task_name, state,create_date + + + + + + delete from Export_Task + where task_id = #{taskId,jdbcType=INTEGER} + + + insert into Export_Task (task_id, task_name, state,create_date + ) + values (#{taskId,jdbcType=INTEGER}, #{taskName,jdbcType=VARCHAR}, #{state,jdbcType=INTEGER}, #{createDate,jdbcType=TIMESTAMP} + ) + + + insert into Export_Task + + + task_id, + + + task_name, + + + state, + + + create_date, + + + + + #{taskId,jdbcType=INTEGER}, + + + #{taskName,jdbcType=VARCHAR}, + + + #{state,jdbcType=INTEGER}, + + + #{createDate,jdbcType=TIMESTAMP}, + + + + + update Export_Task + + + task_name = #{taskName,jdbcType=VARCHAR}, + + + state = #{state,jdbcType=INTEGER}, + + + create_date = #{createDate,jdbcType=INTEGER}, + + + where task_id = #{taskId,jdbcType=INTEGER} + + + update Export_Task + set task_name = #{taskName,jdbcType=VARCHAR}, + state = #{state,jdbcType=INTEGER} + where task_id = #{taskId,jdbcType=INTEGER} + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jspf/importExcelJsp.jspf b/src/main/webapp/WEB-INF/jspf/importExcelJsp.jspf new file mode 100644 index 0000000..a4f4824 --- /dev/null +++ b/src/main/webapp/WEB-INF/jspf/importExcelJsp.jspf @@ -0,0 +1,95 @@ +<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + diff --git a/src/main/webapp/WEB-INF/jspf/importPackageJsp.jspf b/src/main/webapp/WEB-INF/jspf/importPackageJsp.jspf new file mode 100644 index 0000000..e856687 --- /dev/null +++ b/src/main/webapp/WEB-INF/jspf/importPackageJsp.jspf @@ -0,0 +1,86 @@ +<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + diff --git a/src/main/webapp/WEB-INF/views/recordManage/exportTask/exportTaskList.jsp b/src/main/webapp/WEB-INF/views/recordManage/exportTask/exportTaskList.jsp new file mode 100644 index 0000000..7ace9ec --- /dev/null +++ b/src/main/webapp/WEB-INF/views/recordManage/exportTask/exportTaskList.jsp @@ -0,0 +1,230 @@ +<%@ page import="java.util.Date" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + +<%@ include file="/WEB-INF/jspf/common.jspf" %> +<%@ include file="/WEB-INF/jspf/importExcelJsp.jspf" %> + + + + 任务清单列表 + + + + + + + + + + +
+
+
+ + 任务清单列表 + +
+
+
+ +
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+ + + +
+ +
+ +
+
+
+
+ + + + + + +<%-- + + +--%> + + + diff --git a/src/main/webapp/WEB-INF/views/recordManage/exportTaskDetails/exportTaskDetailsList.jsp b/src/main/webapp/WEB-INF/views/recordManage/exportTaskDetails/exportTaskDetailsList.jsp new file mode 100644 index 0000000..3b413a7 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/recordManage/exportTaskDetails/exportTaskDetailsList.jsp @@ -0,0 +1,229 @@ +<%@ page import="java.util.Date" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + +<%@ include file="/WEB-INF/jspf/common.jspf" %> + + + + + 任务清单明细列表 + + + + + + + + + + +
+
+
+ + 任务清单明细列表 + +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ <%--
+ + + +
--%> + +
+ +
+
+
+
+ + + +<%-- + + +--%> + + + diff --git a/src/main/webapp/static/js/recordManage/exportTask/exportTaskList.js b/src/main/webapp/static/js/recordManage/exportTask/exportTaskList.js new file mode 100644 index 0000000..edd69d0 --- /dev/null +++ b/src/main/webapp/static/js/recordManage/exportTask/exportTaskList.js @@ -0,0 +1,209 @@ +$(function () { + initDateInput(1); +}) + +var pageNumber; + +/** + * 加载数据表格 + */ +$('#mytab').bootstrapTable({ + height: 5000, + toolbar: '#toolbar', //工具按钮用哪个容器 + striped: true, //是否显示行间隔色 + cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) + pagination: true, //是否显示分页(*) + sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*) + paginationPreText: '上一页', + paginationNextText: '下一页', + pageNumber: 1, //初始化加载第一页,默认第一页 + pageSize: 10, //每页的记录行数(*) + pageList: [10, 20, 30, 40, 50],//可供选择的每页的行数(*) + height: $(window).height() - 134, //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度 + columns: [ + /*{ + title: '全选', + field: 'select', + checkbox: true, + width: 25, + align: 'center', + valign: 'middle' + },*/ + { + field: 'no', + title: '序号', + sortable: true, + formatter: function (value, row, index) { + //获取每页显示的数量 + var pageSize = $('#mytab').bootstrapTable('getOptions').pageSize; + //获取当前是第几页 + var pageNumber = $('#mytab').bootstrapTable('getOptions').pageNumber; + //返回序号,注意index是从0开始的,所以要加上1 + return pageSize * (pageNumber - 1) + index + 1; + } + }, + { + title: '任务ID', + field: 'taskId', + }, + { + title: '任务名称', + field: 'taskName', + }, + { + title: '操作日期', + field: 'createDate', + formatter: function(value,row,index){ + return covertDate(value); + } + }, + /*{ + title: '任务状态', + field: 'state', + formatter: function (value, row, index) { + var spanValue; + if (value == '0') { + spanValue = '

未完成

'; + } else if (value == '1') { + spanValue = '

已完成

'; + } + return spanValue; + } + },*/ + { + title: '操作', + formatter: function (value, row, index) { + var editanddrop = ''; + if (row.state == 0 || row.state == 1) { + editanddrop += ''; + } + return editanddrop; + } + } + ], + locale: 'zh-CN',//中文支持, + url: path + '/exportTask/getExportTaskList',//排序方式 + queryParams: function (params) { + return { + limit: params.limit, // 每页显示数量 + offset: params.offset, // SQL语句起始索引 + page: (params.offset / params.limit) + 1, //当前页码, + taskName: $("#searchName").val(), + startTime: $("#startTime1").val(), + endTime:$("#endTime1").val(), + } + }, + responseHandler: function (res) { + //在ajax获取到数据,渲染表格之前,修改数据源 + var nres = []; + nres.push({total: res.total, rows: res.list}); + return nres[0]; + }, + onLoadSuccess: function () { + $(".page-list").show(); + $(".fixed-table-body").css("overflow", "auto"); + }, + //监听分页点击事件 + onPageChange: function (num, type) { + pageNumber = num; + }, + //选中单个复选框 + onCheck: function (row) { + var checks = $("#checks").val(); + $("#checks").val(checks += "'" + row.id + "',"); + }, + //取消单个复选框 + onUncheck: function (row) { + var checks = $("#checks").val(); + checks = checks.replace("'" + row.id + "',", ""); + $("#checks").val(checks); + }, + //全选 + onCheckAll: function (rows) { + $("#checks").val(""); + var checks = ''; + for (var i = 0; i < rows.length; i++) { + checks += "'" + rows[i].id + "'," + } + $("#checks").val(checks); + }, + //全不选 + onUncheckAll: function (rows) { + $("#checks").val(""); + } +}) + + +/** + * 查询按钮 + */ +function refreshTable() { + $("#checks").val(""); + $('#mytab').bootstrapTable('refresh', { + url: path + '/exportTask/getExportTaskList' + }) +} + + +/** + * 显示申请信息详情 + * @param id + */ +function showApprove(id) { + loadSelect(path + '/approve/loadType', null, 'applyType1'); + //加载申请原因模板 + loadSelect(path + '/approve/loadReasonModle', null, 'parentId1'); + $.ajax({ + type: 'get', + url: path + '/approve/getApproveById', + data: {id: id}, + dataType: 'json', + success: function (data) { + if (null != data) { + $("#approveId1").val(data.id); + $("#effeTime1").val(data.effeTime); + $("#effeDays1").val(data.effeDays); + $("#applyType1").val(data.applyType); + $("#parentId1").val(data.reasonParentId); + $("#applyReason1").val(data.applyReason); + $("#inpatientNo1").val(data.inpatientNo); + $("#admissTimes1").val(data.admissTimes); + $("#name1").val(data.name); + $("#startTime3").val(data.disTime); + } + } + }) +} + + +/** + * 导出excel功能 + */ +function exportExcel(taskId) { + //var checks = $("#checks").val(); + + Common.confirm({ + title: "提示", + message: "您确定要导出PDF吗?", + operate: function (reselt) { + if (reselt) { + + post(path + '/font/downloadPdfZip', {"taskId": taskId, + }); + /*$.ajax({ + type: 'post', + url: path + '/font/downloadPdfZip?taskId=' +taskId, + dataType: 'text', + success: function (data) { + toastr.success("下载成功!"); + //refreshTable(); + //$('#mytab').bootstrapTable('selectPage', pageNumber); + + } + })*/ + } + + } + }) + +} diff --git a/src/main/webapp/static/js/recordManage/exportTaskDetails/exportTaskDetailsList.js b/src/main/webapp/static/js/recordManage/exportTaskDetails/exportTaskDetailsList.js new file mode 100644 index 0000000..2a5dc87 --- /dev/null +++ b/src/main/webapp/static/js/recordManage/exportTaskDetails/exportTaskDetailsList.js @@ -0,0 +1,158 @@ +$(function () { + initDateInput(1); +}) + +var pageNumber; + +/** + * 加载数据表格 + */ +$('#mytab').bootstrapTable({ + height: 5000, + toolbar: '#toolbar', //工具按钮用哪个容器 + striped: true, //是否显示行间隔色 + cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) + pagination: true, //是否显示分页(*) + sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*) + paginationPreText: '上一页', + paginationNextText: '下一页', + pageNumber: 1, //初始化加载第一页,默认第一页 + pageSize: 10, //每页的记录行数(*) + pageList: [10, 20, 30, 40, 50],//可供选择的每页的行数(*) + height: $(window).height() - 134, //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度 + columns: [ + /*{ + title: '全选', + field: 'select', + checkbox: true, + width: 25, + align: 'center', + valign: 'middle' + },*/ + { + field: 'no', + title: '序号', + sortable: true, + formatter: function (value, row, index) { + //获取每页显示的数量 + var pageSize = $('#mytab').bootstrapTable('getOptions').pageSize; + //获取当前是第几页 + var pageNumber = $('#mytab').bootstrapTable('getOptions').pageNumber; + //返回序号,注意index是从0开始的,所以要加上1 + return pageSize * (pageNumber - 1) + index + 1; + } + }, + { + title: '任务ID', + field: 'taskId', + }, + { + title: '病案号', + field: 'inpNo', + }, + { + title: '出院日期', + field: 'dischargeDateTime', + formatter: function (value, row, index) { + return value.substring(0,10); + } + }, + { + title: '操作日期', + field: 'createDate', + formatter: function(value,row,index){ + return covertDate(value); + } + }, + { + title: '状态', + field: 'state', + formatter: function (value, row, index) { + var spanValue; + if (value == '0') { + spanValue = '

未开始

'; + } else if (value == '1') { + spanValue = '

完成

'; + }else if (value == '2') { + spanValue = '

失败

'; + } + return spanValue; + } + } + /*{ + title: '操作', + formatter: function (value, row, index) { + var editanddrop = ''; + if (row.state == 0) { + editanddrop += ''; + } + return editanddrop; + } + }*/ + ], + locale: 'zh-CN',//中文支持, + url: path + '/exportTaskDetails/getExportTaskDetailsList',//排序方式 + queryParams: function (params) { + return { + limit: params.limit, // 每页显示数量 + offset: params.offset, // SQL语句起始索引 + page: (params.offset / params.limit) + 1, //当前页码, + taskid: $("#taskid").val(), + state:$("#state").val(), + startTime: $("#startTime1").val(), + endTime:$("#endTime1").val(), + } + }, + responseHandler: function (res) { + //在ajax获取到数据,渲染表格之前,修改数据源 + var nres = []; + nres.push({total: res.total, rows: res.list}); + return nres[0]; + }, + onLoadSuccess: function () { + $(".page-list").show(); + $(".fixed-table-body").css("overflow", "auto"); + }, + //监听分页点击事件 + onPageChange: function (num, type) { + pageNumber = num; + }, + //选中单个复选框 + onCheck: function (row) { + var checks = $("#checks").val(); + $("#checks").val(checks += "'" + row.id + "',"); + }, + //取消单个复选框 + onUncheck: function (row) { + var checks = $("#checks").val(); + checks = checks.replace("'" + row.id + "',", ""); + $("#checks").val(checks); + }, + //全选 + onCheckAll: function (rows) { + $("#checks").val(""); + var checks = ''; + for (var i = 0; i < rows.length; i++) { + checks += "'" + rows[i].id + "'," + } + $("#checks").val(checks); + }, + //全不选 + onUncheckAll: function (rows) { + $("#checks").val(""); + } +}) + + +/** + * 查询按钮 + */ +function refreshTable() { + // $("#checks").val(""); + $('#mytab').bootstrapTable('refresh', { + url: path + '/exportTaskDetails/getExportTaskDetailsList' + }) +} + + + diff --git a/src/main/webapp/static/js/template/任务清单模板.xls b/src/main/webapp/static/js/template/任务清单模板.xls new file mode 100644 index 0000000000000000000000000000000000000000..7eea91ff4f7c2161a4dbd8d604c79afca9165702 GIT binary patch literal 19968 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 bK-gX;gev!-4B-(-Ubo--m3FcJH6{N8<*%40 literal 0 HcmV?d00001