归档率统计表格

master
linjj 1 year ago
parent 7ddb2145a0
commit 516989c0de

@ -133,11 +133,6 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.alibaba</groupId>-->
<!-- <artifactId>fastjson</artifactId>-->
<!-- <version>${fastjson.version}</version>-->
<!-- </dependency>-->
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>

@ -0,0 +1,61 @@
package com.emr.controller;
import com.emr.dto.ThreeDaysFileDto;
import com.emr.entity.OffsetLimitPage;
import com.emr.service.StatementService;
import com.emr.util.Msg;
import com.emr.vo.ThreeDaysFileVo;
import com.emr.vo.ExecuteVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* @ClassName StatementController
* @Description
* @Author linjj
* @Date 2024/1/11 14:28
* @Version 1.0
*/
@Controller
@RequestMapping("statement")
public class StatementController {
@Autowired
StatementService statementService;
@RequestMapping(value = "/threeDaysFile")
public String threeDaysFile(Model model) {
return "statementDir/ThreeDaysFile";
}
@RequestMapping(value = "/threeDaysFileList")
@ResponseBody
public List<ThreeDaysFileVo> threeDaysFileList(ThreeDaysFileDto dto) {
return statementService.threeDaysFileList(dto);
}
@RequestMapping(value = "/reportList")
@ResponseBody
public OffsetLimitPage getMedicalOverdueReportList(Integer offset, Integer limit) {
OffsetLimitPage result = statementService.getMedicalOverdueReportList(offset, limit);
return result;
}
@RequestMapping(value = "/saveExecute")
@ResponseBody
public Msg saveMedicalOverdueExecute(ThreeDaysFileDto dto) {
return statementService.saveMedicalOverdueExecute(dto);
}
@RequestMapping(value = "/echoExecute")
@ResponseBody
public ExecuteVo executeList() {
return statementService.executeList();
}
}

@ -6,9 +6,13 @@
*/
package com.emr.controller;
import com.emr.dao.MedicalOverdueReportMapper;
import com.emr.dto.ThreeDaysFileDto;
import com.emr.entity.Temp_Info;
import com.emr.service.StatementService;
import com.emr.service.Temp_InfoService;
import com.emr.util.PDFUtils;
import com.emr.vo.ExecuteVo;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -34,6 +38,10 @@ import java.util.List;
public class taskController {
@Autowired
private Temp_InfoService tempInfoService;
@Autowired
private StatementService statementService;
@Autowired
private MedicalOverdueReportMapper medicalOverdueReportMapper;
@Value("${HomepageDictionary}")
private String HomepageDictionary;
@ -75,6 +83,15 @@ public class taskController {
PDFUtils.delAllFile(pdfErrorUrl);
}
@Scheduled(cron="0 0 2 * * ?")//每天4点触发cron="0 0 4 * * ?"
public void medicalOverdueReport() throws IOException {
ExecuteVo executeVo = medicalOverdueReportMapper.executeList();
ThreeDaysFileDto threeDaysFileDto=new ThreeDaysFileDto();
threeDaysFileDto.setDay(executeVo.getDay());
threeDaysFileDto.setStartDateTo(executeVo.getStartDateTo());
threeDaysFileDto.setEndDateTo(executeVo.getEndDateTo());
statementService.threeDaysFileList(threeDaysFileDto);
}
// @Scheduled(cron="0 0 1 * * ?")//每天4点触发cron="0 0 4 * * ?"
// public void taskPDF() throws IOException {

@ -0,0 +1,34 @@
package com.emr.dao;
import com.emr.dto.MedicalOverdueReportDto;
import com.emr.dto.ThreeDaysFileDto;
import com.emr.util.Msg;
import com.emr.vo.ExecuteVo;
import com.emr.vo.MedicalOverdueReportVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @InterfaceName MedicalOverdueReportMapper
* @Description medical_overdue_report
* @Author linjj
* @Date 2024/1/17 8:59
* @Version 1.0
*/
public interface MedicalOverdueReportMapper {
//查询记录表中是否有数据
int getMedicalOverdueReport();
int addMedicalOverdueReport(@Param("list") List<MedicalOverdueReportDto> list);
int delMedicalOverdueReport();
List<MedicalOverdueReportVo>getMedicalOverdueReportList();
int saveMedicalOverdueExecute(ThreeDaysFileDto dto);
ExecuteVo executeList();
}

@ -0,0 +1,37 @@
package com.emr.dao;
import com.emr.dto.ThreeDaysFileDto;
import com.emr.vo.ThreeDaysFileVo;
import java.util.List;
/**
* @InterfaceName StatementMapper
* @Description mapper
* @Author linjj
* @Date 2024/1/11 14:30
* @Version 1.0
*/
public interface StatementMapper {
//归档数量
List<ThreeDaysFileVo> getThreeDaysFileList(ThreeDaysFileDto dto);
//及时归档
List<ThreeDaysFileVo> getDay3Rate(ThreeDaysFileDto dto);
//二日及时归档
List<ThreeDaysFileVo> getDay2Rate(ThreeDaysFileDto dto);
//每本每份超期天数
List<ThreeDaysFileVo> getLateNum(ThreeDaysFileDto dto);
//反馈数量
List<ThreeDaysFileVo> getReturnNum(ThreeDaysFileDto dto);
//反馈超期总数量
List<ThreeDaysFileVo> returnTimelyNum(ThreeDaysFileDto dto);
//反馈病历数量
List<ThreeDaysFileVo> feedBackRecord(ThreeDaysFileDto dto);
//3天归档奖励本数
List<ThreeDaysFileVo> day3RewardNum(ThreeDaysFileDto dto);
//返修超期数量
List<ThreeDaysFileVo>returnOverdueNum(ThreeDaysFileDto dto);
//2天内归档有反馈数
List<ThreeDaysFileVo>returnOverdue2Day(ThreeDaysFileDto dto);
}

@ -0,0 +1,53 @@
package com.emr.dto;
import lombok.Data;
/**
* @ClassName MedicalOverdueReport
* @Description dto
* @Author linjj
* @Date 2024/1/16 16:42
* @Version 1.0
*/
@Data
public class MedicalOverdueReportDto {
//出院科室编码
private String deptCode;
//出院科室名称
private String deptName;
//出院人数
private int outNum;
//迟交合计
private int lateNum;
//及时合计数量
private int day3Rate;
//2天内及时合计数量
private int day2Rate;
//科室迟交合计
private int deptNameLate;
//初次及时归档率
private String day3RateSting;
//返修及时归档百分比
private String returnNumString;
//科室科室kpi
private String deptNameLateKpi;
//退回病历数量
private int feedBackRecordNum;
//无发聩病历数量
private int notFeedBackRecordNum;
//反馈扣罚金额
private int feedBackMoney;
//返修超期数量(本)
private int returnOverdueNum;
//超期扣罚金额
private int returnOverdueMoney;
//3天归档奖励本数
private int day3RewardNum;
//2天内归档无反馈数
private int noReturnOverdue2Day;
}

@ -0,0 +1,22 @@
package com.emr.dto;
import lombok.Data;
/**
* @ClassName ThreeDaysFileDto
* @Description
* @Author linjj
* @Date 2024/1/11 16:30
* @Version 1.0
*/
@Data
public class ThreeDaysFileDto {
private String startDateTo;
private String endDateTo;
private int day;
}

@ -0,0 +1,28 @@
package com.emr.service;
import com.emr.dto.ThreeDaysFileDto;
import com.emr.entity.OffsetLimitPage;
import com.emr.util.Msg;
import com.emr.vo.ExecuteVo;
import com.emr.vo.MedicalOverdueReportVo;
import com.emr.vo.ThreeDaysFileVo;
import java.util.List;
/**
* @InterfaceName StatementService
* @Description
* @Author linjj
* @Date 2024/1/11 14:31
* @Version 1.0
*/
public interface StatementService {
List<ThreeDaysFileVo> threeDaysFileList(ThreeDaysFileDto dto);
OffsetLimitPage getMedicalOverdueReportList(Integer offset, Integer limit);
Msg saveMedicalOverdueExecute(ThreeDaysFileDto dto);
ExecuteVo executeList();
}

@ -0,0 +1,353 @@
package com.emr.service.ipml;
import com.emr.dao.MedicalOverdueReportMapper;
import com.emr.dao.StatementMapper;
import com.emr.dto.MedicalOverdueReportDto;
import com.emr.dto.ThreeDaysFileDto;
import com.emr.entity.Emr_Dictionary;
import com.emr.entity.OffsetLimitPage;
import com.emr.entity.V_Count;
import com.emr.service.Emr_DictionaryService;
import com.emr.service.StatementService;
import com.emr.util.ListUtil;
import com.emr.util.Msg;
import com.emr.util.Setters;
import com.emr.vo.ExecuteVo;
import com.emr.vo.MedicalOverdueReportVo;
import com.emr.vo.ThreeDaysFileVo;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* @ClassName StatementServiceImpl
* @Description
* @Author linjj
* @Date 2024/1/11 14:31
* @Version 1.0
*/
@Service
@Transactional
public class StatementServiceImpl implements StatementService {
@Autowired
StatementMapper statementMapper;
@Autowired
private Emr_DictionaryService emrDictionaryService;
@Autowired
private MedicalOverdueReportMapper medicalOverdueReportMapper;
@Override
public List<ThreeDaysFileVo> threeDaysFileList(ThreeDaysFileDto dto) {
ArrayList<MedicalOverdueReportDto> dtos = new ArrayList<>();
List<ThreeDaysFileVo> list = statementMapper.getThreeDaysFileList(dto);
//格式化保留两位小数四舍五入
DecimalFormat df = new DecimalFormat("#.00");
//转换科室方法
conversion(list);
//及时合计方法
day3Rate(dto, list);
//2天及时合计方法
day2Rate(dto, list);
//计算每个科室有多少迟交病历
deptNameLate(dto, list);
//返修及时归档数量
returnNum(dto, list);
//返修总数
returnTimelyNum(dto, list);
//反馈病历数量(本)
feedBackRecord(dto, list);
//超期扣罚数量
returnOverdueNum(dto, list);
//2天内归档有反馈数
returnOverdue2Day(dto, list);
for (ThreeDaysFileVo lists : list) {
//为空填充0
fillNum(lists);
//计算迟交合计出院合计-及时合计
int lateNum = lists.getOutNum() - lists.getDay3Rate();
lists.setLateNum(lateNum);
//初次及时归档率
if (String.valueOf(lists.getDay3Rate()).equals("0")) {
lists.setDay3RateSting("0%");
} else {
double day3Rate = (double) lists.getDay3Rate() / (double) lists.getOutNum();
//计算科室kpi
String kpi = df.format(day3Rate * 5);
lists.setDeptNameLateKpi(kpi);
lists.setDay3RateSting(df.format(day3Rate * 100) + "%");
}
//返修及时归档率计算
if (String.valueOf(lists.getReturnNum()).equals("0")) {
lists.setReturnNumString("0%");
} else {
double returnNum = (double) lists.getReturnNum() / (double) lists.getReturnTimelyNum();
lists.setReturnNumString(df.format(returnNum * 100) + "%");
}
//计算归档病历迟交扣罚金额,每本每天*30元
int i = lists.getDeptNameLate() * 30;
lists.setDeptNameLate(i);
//计算无反馈病历数量(本)出院数量-反馈病历数量
lists.setNotFeedBackRecordNum(lists.getOutNum() - lists.getFeedBackRecordNum());
//计算反馈病历扣罚金额
lists.setFeedBackMoney(lists.getFeedBackRecordNum() * 30);
//计算超期扣罚金额,返修每本超期天数综合*30
lists.setReturnOverdueMoney(lists.getReturnOverdueDay() * 30);
//3天归档奖励本数
lists.setDay3RewardNum(lists.getNotFeedBackRecordNum());
//计算2天归档病历无反馈数量2天及时合计-2天归档有反馈数量
lists.setNoReturnOverdue2Day(lists.getDay2Rate() - lists.getReturnOverdue2Day());
}
arrangeDto(list,dtos);
int medicalOverdueReport = medicalOverdueReportMapper.getMedicalOverdueReport();
//判断是否存在数据存在数据先清空后插入
if (StringUtils.isNotBlank(String.valueOf(medicalOverdueReport))) {
medicalOverdueReportMapper.delMedicalOverdueReport();
medicalOverdueReportMapper.addMedicalOverdueReport(dtos);
}else {
medicalOverdueReportMapper.addMedicalOverdueReport(dtos);
}
return list;
}
@Override
public OffsetLimitPage getMedicalOverdueReportList(Integer offset, Integer limit) {
PageHelper.offsetPage(offset, limit);
List<MedicalOverdueReportVo> list = medicalOverdueReportMapper.getMedicalOverdueReportList();
return new OffsetLimitPage((Page) list);
}
@Override
public Msg saveMedicalOverdueExecute(ThreeDaysFileDto dto) {
int i = medicalOverdueReportMapper.saveMedicalOverdueExecute(dto);
if (i==1){
return Msg.success("执行计划修改成功");
}
return Msg.success("执行计划修改失败");
}
@Override
public ExecuteVo executeList() {
return medicalOverdueReportMapper.executeList();
}
//整理dto
private static void arrangeDto(List<ThreeDaysFileVo> list,List<MedicalOverdueReportDto> dtos) {
for (ThreeDaysFileVo lists : list) {
MedicalOverdueReportDto medicalOverdueReportDto = new MedicalOverdueReportDto();
medicalOverdueReportDto.setDeptCode(lists.getDeptCode());
if (StringUtils.isNotBlank(lists.getDeptName())) {
medicalOverdueReportDto.setDeptName(lists.getDeptName());
}
medicalOverdueReportDto.setOutNum(lists.getOutNum());
medicalOverdueReportDto.setLateNum(lists.getLateNum());
medicalOverdueReportDto.setDay3Rate(lists.getDay3Rate());
medicalOverdueReportDto.setDay2Rate(lists.getDay2Rate());
medicalOverdueReportDto.setDeptNameLate(lists.getDeptNameLate());
medicalOverdueReportDto.setDay3RateSting(lists.getDay3RateSting());
medicalOverdueReportDto.setReturnNumString(lists.getReturnNumString());
medicalOverdueReportDto.setDeptNameLateKpi(lists.getDeptNameLateKpi());
medicalOverdueReportDto.setFeedBackRecordNum(lists.getFeedBackRecordNum());
medicalOverdueReportDto.setNotFeedBackRecordNum(lists.getNotFeedBackRecordNum());
medicalOverdueReportDto.setFeedBackMoney(lists.getFeedBackMoney());
medicalOverdueReportDto.setReturnOverdueNum(lists.getReturnOverdueNum());
medicalOverdueReportDto.setReturnOverdueMoney(lists.getReturnOverdueMoney());
medicalOverdueReportDto.setDay3RewardNum(lists.getDay3RewardNum());
medicalOverdueReportDto.setNoReturnOverdue2Day(lists.getNoReturnOverdue2Day());
dtos.add(medicalOverdueReportDto);
}
}
//2天内归档有反馈数
private void returnOverdue2Day(ThreeDaysFileDto dto, List<ThreeDaysFileVo> list) {
List<ThreeDaysFileVo> returnOverdueList = statementMapper.returnOverdue2Day(dto);
//根据科室code转换key。value
Map<String, ThreeDaysFileVo> codeMap = ListUtil.toMap(returnOverdueList, ThreeDaysFileVo::getDeptCode);
Setters.<ThreeDaysFileVo>instance().list(list).cycleSetProperties(p -> {
String deptCode = p.getDeptCode();
if (StringUtils.isNotBlank(deptCode) && codeMap.containsKey(deptCode)) {
int returnOverdue2Day = codeMap.get(deptCode).getReturnOverdue2Day();
p.setReturnOverdue2Day(returnOverdue2Day);
}
});
}
//超期扣罚数量
private void returnOverdueNum(ThreeDaysFileDto dto, List<ThreeDaysFileVo> list) {
//填充0防止空指针异常
for (ThreeDaysFileVo lists : list) {
lists.setReturnOverdueNum(0);
lists.setReturnOverdueDay(0);
}
List<ThreeDaysFileVo> returnOverdueList = statementMapper.returnOverdueNum(dto);
if (returnOverdueList.size() > 0) {
//根据科室code转换key。value
Map<String, ThreeDaysFileVo> codeMap = ListUtil.toMap(list, ThreeDaysFileVo::getDeptCode);
Setters.<ThreeDaysFileVo>instance().list(returnOverdueList).cycleSetProperties(p -> {
String deptCode = p.getDeptCode();
if (StringUtils.isNotBlank(deptCode) && codeMap.containsKey(deptCode)) {
//超期本数
codeMap.get(deptCode).setReturnOverdueNum(codeMap.get(deptCode).getReturnOverdueNum() + 1);
//超期天数
codeMap.get(deptCode).setReturnOverdueDay(codeMap.get(deptCode).getReturnOverdueDay() + p.getReturnOverdueDay() - dto.getDay());
}
});
}
}
//反馈病历数量(本)
private void feedBackRecord(ThreeDaysFileDto dto, List<ThreeDaysFileVo> list) {
List<ThreeDaysFileVo> feedBackRecordList = statementMapper.feedBackRecord(dto);
//根据科室code转换key。value
Map<String, ThreeDaysFileVo> codeMap = ListUtil.toMap(feedBackRecordList, ThreeDaysFileVo::getDeptCode);
Setters.<ThreeDaysFileVo>instance().list(list).cycleSetProperties(p -> {
String deptCode = p.getDeptCode();
if (StringUtils.isNotBlank(deptCode) && codeMap.containsKey(deptCode)) {
int feedBackRecordNum = codeMap.get(deptCode).getFeedBackRecordNum();
p.setFeedBackRecordNum(feedBackRecordNum);
}
});
}
//返修总数
private void returnTimelyNum(ThreeDaysFileDto dto, List<ThreeDaysFileVo> list) {
List<ThreeDaysFileVo> returnTimelyNumList = statementMapper.returnTimelyNum(dto);
//根据科室code转换key。value
Map<String, ThreeDaysFileVo> codeMap = ListUtil.toMap(returnTimelyNumList, ThreeDaysFileVo::getDeptCode);
Setters.<ThreeDaysFileVo>instance().list(list).cycleSetProperties(p -> {
String deptCode = p.getDeptCode();
if (StringUtils.isNotBlank(deptCode) && codeMap.containsKey(deptCode)) {
int returnTimelyNum = codeMap.get(deptCode).getReturnTimelyNum();
p.setReturnTimelyNum(returnTimelyNum);
}
});
}
//返修及时归档数量
private void returnNum(ThreeDaysFileDto dto, List<ThreeDaysFileVo> list) {
List<ThreeDaysFileVo> returnNumList = statementMapper.getReturnNum(dto);
//根据科室code转换key。value
Map<String, ThreeDaysFileVo> codeMap = ListUtil.toMap(returnNumList, ThreeDaysFileVo::getDeptCode);
Setters.<ThreeDaysFileVo>instance().list(list).cycleSetProperties(p -> {
String deptCode = p.getDeptCode();
if (StringUtils.isNotBlank(deptCode) && codeMap.containsKey(deptCode)) {
int returnNum = codeMap.get(deptCode).getReturnNum();
p.setReturnNum(returnNum);
}
});
}
//计算每个科室有多少天迟交病历
private void deptNameLate(ThreeDaysFileDto dto, List<ThreeDaysFileVo> list) {
for (ThreeDaysFileVo vo : list) {
vo.setDeptNameLate(0);
}
List<ThreeDaysFileVo> lateNumList = statementMapper.getLateNum(dto);
if (lateNumList.size() > 0) {
//根据科室code转换key。value
Map<String, ThreeDaysFileVo> codeMap = ListUtil.toMap(list, ThreeDaysFileVo::getDeptCode);
Setters.<ThreeDaysFileVo>instance().list(lateNumList).cycleSetProperties(p -> {
String deptCode = p.getDeptCode();
if (StringUtils.isNotBlank(deptCode) && codeMap.containsKey(deptCode)) {
int lateNum = p.getLateNum();
if (lateNum != 0) {
codeMap.get(deptCode).setDeptNameLate(codeMap.get(deptCode).getDeptNameLate() + lateNum - dto.getDay());
}
}
});
}
}
//2天及时合计方法
private void day2Rate(ThreeDaysFileDto dto, List<ThreeDaysFileVo> list) {
//2天及时合计
List<ThreeDaysFileVo> day2Rate1 = statementMapper.getDay2Rate(dto);
//根据科室code转换key。value
Map<String, ThreeDaysFileVo> codeMap = ListUtil.toMap(day2Rate1, ThreeDaysFileVo::getDeptCode);
Setters.<ThreeDaysFileVo>instance().list(list).cycleSetProperties(p -> {
String deptCode = p.getDeptCode();
if (StringUtils.isNotBlank(deptCode) && codeMap.containsKey(deptCode)) {
int day2Rate = codeMap.get(deptCode).getDay2Rate();
p.setDay2Rate(day2Rate);
}
});
}
//即使合计方法
private void day3Rate(ThreeDaysFileDto dto, List<ThreeDaysFileVo> list) {
List<ThreeDaysFileVo> day3Rate1 = statementMapper.getDay3Rate(dto);
//根据科室code转换key。value
Map<String, ThreeDaysFileVo> codeMap = ListUtil.toMap(day3Rate1, ThreeDaysFileVo::getDeptCode);
Setters.<ThreeDaysFileVo>instance().list(list).cycleSetProperties(p -> {
String deptCode = p.getDeptCode();
if (StringUtils.isNotBlank(deptCode) && codeMap.containsKey(deptCode)) {
int day3Rate = codeMap.get(deptCode).getDay3Rate();
p.setDay3Rate(day3Rate);
}
});
}
private static void fillNum(ThreeDaysFileVo list) {
if (StringUtils.isBlank(String.valueOf(list.getDay3Rate()))) {
list.setDay3Rate(0);
}
if (StringUtils.isBlank(String.valueOf(list.getReturnNum()))) {
list.setReturnNum(0);
}
if (StringUtils.isBlank(String.valueOf(list.getDeptNameLate()))) {
list.setDeptNameLate(0);
}
if (StringUtils.isBlank(String.valueOf(list.getFeedBackRecordNum()))) {
list.setFeedBackRecordNum(0);
}
if (StringUtils.isBlank(String.valueOf(list.getReturnOverdueDay()))) {
list.setReturnOverdueDay(0);
}
if (StringUtils.isBlank(String.valueOf(list.getReturnOverdue2Day()))) {
list.setReturnOverdue2Day(0);
}
}
//转换科室
private void conversion(List<ThreeDaysFileVo> list) {
//科室名称转换
Emr_Dictionary dic = new Emr_Dictionary();
dic.setEffective(1);
dic.setTypecode("dept_code");
List<Emr_Dictionary> dicList = emrDictionaryService.dicByTypeCode(dic);
//转换科室
Map<String, Emr_Dictionary> codeMap = ListUtil.toMap(dicList, Emr_Dictionary::getCode);
Setters.<ThreeDaysFileVo>instance().list(list).cycleSetProperties(p -> {
String deptCode = p.getDeptCode();
if (StringUtils.isNotBlank(deptCode) && codeMap.containsKey(deptCode)) {
String deptName = codeMap.get(deptCode).getName();
p.setDeptName(deptName);
}
});
}
// //3天归档奖励本书
// private void day3RewardNum(ThreeDaysFileDto dto, List<ThreeDaysFileVo> list){
// List<ThreeDaysFileVo> day3RewardLiset = statementMapper.day3RewardNum(dto);
// //根据科室code转换key。value
// Map<String, ThreeDaysFileVo> codeMap = ListUtil.toMap(day3RewardLiset, ThreeDaysFileVo::getDeptCode);
// Setters.<ThreeDaysFileVo>instance().list(list).cycleSetProperties(p -> {
// String deptCode = p.getDeptCode();
// if (StringUtils.isNotBlank(deptCode) && codeMap.containsKey(deptCode)) {
// int day3RewardNum = codeMap.get(deptCode).getDay3RewardNum();
// p.setDay3RewardNum(day3RewardNum);
// }
// });
// }
}

@ -42,6 +42,14 @@ public class Msg {
return result;
}
public static Msg success(String msg){
Msg result=new Msg();
result.setCode(100);
result.setMsg(msg);
return result;
}
public Msg add(String key, Object value){
this.getExtend().put(key, value);
return this;

@ -0,0 +1,22 @@
package com.emr.vo;
import lombok.Data;
/**
* @ClassName ThreeDaysFileDto
* @Description
* @Author linjj
* @Date 2024/1/11 16:30
* @Version 1.0
*/
@Data
public class ExecuteVo {
private String startDateTo;
private String endDateTo;
private int day;
}

@ -0,0 +1,53 @@
package com.emr.vo;
import lombok.Data;
/**
* @ClassName MedicalOverdueReport
* @Description dto
* @Author linjj
* @Date 2024/1/16 16:42
* @Version 1.0
*/
@Data
public class MedicalOverdueReportVo {
//出院科室编码
private String deptCode;
//出院科室名称
private String deptName;
//出院人数
private int outNum;
//迟交合计
private int lateNum;
//及时合计数量
private int day3Rate;
//2天内及时合计数量
private int day2Rate;
//科室迟交合计
private int deptNameLate;
//初次及时归档率
private String day3RateSting;
//返修及时归档百分比
private String returnNumString;
//科室科室kpi
private String deptNameLateKpi;
//退回病历数量
private int feedBackRecordNum;
//无发聩病历数量
private int notFeedBackRecordNum;
//反馈扣罚金额
private int feedBackMoney;
//返修超期数量(本)
private int returnOverdueNum;
//超期扣罚金额
private int returnOverdueMoney;
//3天归档奖励本数
private int day3RewardNum;
//2天内归档无反馈数
private int noReturnOverdue2Day;
}

@ -0,0 +1,59 @@
package com.emr.vo;
import lombok.Data;
/**
* @ClassName ThreeDaysFileVo
* @Description
* @Author linjj
* @Date 2024/1/11 16:27
* @Version 1.0
*/
@Data
public class ThreeDaysFileVo {
//出院科室编码
private String deptCode;
//出院科室名称
private String deptName;
//出院人数
private int outNum;
//及时合计数量
private int day3Rate;
//2天内及时合计数量
private int day2Rate;
private String day3RateSting;
//迟交合计
private int lateNum;
//科室迟交合计
private int deptNameLate;
//返修及时归档数量
private int returnNum;
//返修及时归档百分比
private String returnNumString;
//返修总数
private int returnTimelyNum;
//科室科室kpi
private String deptNameLateKpi;
//退回病历数量
private int feedBackRecordNum;
//无发聩病历数量
private int notFeedBackRecordNum;
//反馈扣罚金额
private int feedBackMoney;
//3天归档奖励本数
private int day3RewardNum;
//返修超期数量(本)
private int returnOverdueNum;
//返修超期数量天数
private int returnOverdueDay;
//超期扣罚金额
private int returnOverdueMoney;
//2天内归档有反馈数
private int returnOverdue2Day;
//2天内归档无反馈数
private int noReturnOverdue2Day;
}

@ -1,18 +1,18 @@
#POWER_IP=localhost
#jdbc.username=sa
#jdbc.password=admin123
#dataBaseName=zj_record_new
#POWER_PORT=8082
#jdbc.url=jdbc\:sqlserver\://${POWER_IP}:1433;databaseName=${dataBaseName}
POWER_IP=localhost
jdbc.username=sa
jdbc.password=admin123
dataBaseName=zj_record_new
POWER_PORT=8082
jdbc.url=jdbc\:sqlserver\://${POWER_IP}:1433;databaseName=${dataBaseName}
#
POWER_IP=localhost
jdbc.username=sa
jdbc.password=docus@702
dataBaseName=DB_PrivilegeManagement_GYFY
POWER_PORT=9001
jdbc.url=jdbc\:sqlserver\://10.6.1.127:1433;databaseName=${dataBaseName}
#POWER_IP=localhost
#jdbc.username=sa
#jdbc.password=docus@702
#dataBaseName=DB_PrivilegeManagement_GYFY
#POWER_PORT=9001
#jdbc.url=jdbc\:sqlserver\://10.6.1.127:1433;databaseName=${dataBaseName}
jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
#hibernate config

@ -0,0 +1,31 @@
<?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.emr.dao.MedicalOverdueReportMapper" >
<insert id="addMedicalOverdueReport">
insert into medical_overdue_report(deptCode,deptName,outNum,lateNum,day3Rate,day2Rate,deptNameLate,day3RateSting,returnNumString,
deptNameLateKpi,feedBackRecordNum,notFeedBackRecordNum,feedBackMoney,returnOverdueNum,returnOverdueMoney,day3RewardNum,
noReturnOverdue2Day)
values
<foreach collection="list" item="item" separator=",">
(#{item.deptCode},#{item.deptName},#{item.outNum},#{item.lateNum},#{item.day3Rate},#{item.day2Rate},#{item.deptNameLate},
#{item.day3RateSting},#{item.returnNumString},#{item.deptNameLateKpi},#{item.feedBackRecordNum},#{item.notFeedBackRecordNum},
#{item.feedBackMoney},#{item.returnOverdueNum},#{item.returnOverdueMoney},#{item.day3RewardNum},#{item.noReturnOverdue2Day})
</foreach>
</insert>
<update id="saveMedicalOverdueExecute">
update medical_overdue_execute set day=#{day},startDateTo=#{startDateTo},endDateTo=#{endDateTo} where static=1
</update>
<delete id="delMedicalOverdueReport">
delete from medical_overdue_report
</delete>
<select id="getMedicalOverdueReport" resultType="java.lang.Integer">
select count(*) from medical_overdue_report
</select>
<select id="getMedicalOverdueReportList" resultType="com.emr.vo.MedicalOverdueReportVo">
select * from medical_overdue_report order by day3RateSting desc
</select>
<select id="executeList" resultType="com.emr.vo.ExecuteVo">
select * from medical_overdue_execute
</select>
</mapper>

@ -0,0 +1,454 @@
<?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.emr.dao.StatementMapper" >
<select id="getThreeDaysFileList" resultType="com.emr.vo.ThreeDaysFileVo">
SELECT COUNT
( * ) AS outNum,
dept_name as deptCode
FROM
Archive_Master
WHERE
ArchiveState NOT IN ( '作废', '已封存', '取消入院' ) AND id is not null AND dept_name is not null and id!=''
AND inp_no NOT LIKE 'LG%'
GROUP BY
dept_name
</select>
<select id="getDay3Rate" resultType="com.emr.vo.ThreeDaysFileVo">
SELECT
ISNULL( COUNT ( m.id ), 0 ) day3Rate,
dept_name AS deptCode
FROM
Archive_Master m
INNER JOIN (
SELECT
ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY handle_time ASC ) RowNum,
Archive_Master_Following.*
FROM
Archive_Master_Following
WHERE
1 = 1
AND following_type = '5'
) AS f ON m.ID= f.master_id
<where>
RowNum = 1
AND YEAR ( discharge_date_time ) != '1801'
AND m.id IS NOT NULL
AND dept_name IS NOT NULL
AND m.id != ''
AND ArchiveState not in('作废','已封存','取消入院')
<if test="day != null and day != ''">
AND (SELECT dbo.getWorkday(discharge_date_time,handle_time)) &lt;=#{day}
</if>
<choose>
<when test="startDateTo != null and startDateTo != '' and endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),discharge_date_time,23) between #{startDateTo} and
#{endDateTo}
</when>
<when test="startDateTo != null and startDateTo != ''">
and CONVERT(VARCHAR(20),discharge_date_time,23) >=#{startDateTo}
</when>
<when test="endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),discharge_date_time,23) &lt;= #{endDateTo}
</when>
</choose>
</where>
GROUP BY
dept_name
</select>
<select id="getDay2Rate" resultType="com.emr.vo.ThreeDaysFileVo">
SELECT
ISNULL( COUNT ( m.id ), 0 ) day2Rate,
dept_name AS deptCode
FROM
Archive_Master m
INNER JOIN (
SELECT
ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY handle_time ASC ) RowNum,
Archive_Master_Following.*
FROM
Archive_Master_Following
WHERE
1 = 1
AND following_type = '5'
) AS f ON m.ID= f.master_id
<where>
RowNum = 1
AND YEAR ( discharge_date_time ) != '1801'
AND m.id IS NOT NULL
AND dept_name IS NOT NULL
AND m.id != ''
AND ArchiveState not in('作废','已封存','取消入院')
AND ( SELECT dbo.getWorkday ( discharge_date_time, handle_time ) ) &lt;=2
<choose>
<when test="startDateTo != null and startDateTo != '' and endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),discharge_date_time,23) between #{startDateTo} and
#{endDateTo}
</when>
<when test="startDateTo != null and startDateTo != ''">
and CONVERT(VARCHAR(20),discharge_date_time,23) >=#{startDateTo}
</when>
<when test="endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),discharge_date_time,23) &lt;= #{endDateTo}
</when>
</choose>
</where>
GROUP BY
dept_name
</select>
<select id="getLateNum" resultType="com.emr.vo.ThreeDaysFileVo">
SELECT
dept_name AS deptCode,
( SELECT dbo.getWorkday ( discharge_date_time, handle_time ) ) lateNum
FROM
archive_master m
INNER JOIN (
SELECT
ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY handle_time ASC ) RowNum,
Archive_Master_Following.*
FROM
Archive_Master_Following
WHERE
1 = 1
AND following_type = '5'
) AS f ON m.ID= f.master_id
<where>
RowNum = 1
AND YEAR ( discharge_date_time ) != '1801'
AND ArchiveState NOT IN ( '作废', '已封存', '取消入院' )
AND m.id IS NOT NULL
AND dept_name IS NOT NULL
AND m.id != ''
<if test="day != null and day != ''">
AND (SELECT dbo.getWorkday(discharge_date_time,handle_time)) >#{day}
</if>
<choose>
<when test="startDateTo != null and startDateTo != '' and endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),discharge_date_time,23) between #{startDateTo} and
#{endDateTo}
</when>
<when test="startDateTo != null and startDateTo != ''">
and CONVERT(VARCHAR(20),discharge_date_time,23) >=#{startDateTo}
</when>
<when test="endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),discharge_date_time,23) &lt;= #{endDateTo}
</when>
</choose>
</where>
</select>
<select id="getReturnNum" resultType="com.emr.vo.ThreeDaysFileVo">
SELECT COUNT
( f1.id ) returnNum,
m.dept_name deptCode
FROM
(
SELECT
id,
master_id,
following_type,
following_content,
handle_name,
handle_time,
ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY master_id, handle_time ) AS rowNumb
FROM
Archive_Master_Following
WHERE
following_type = '9'
) f1
LEFT JOIN (
SELECT
*
FROM
( SELECT *, ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY master_id, handle_time ) AS rowNumb FROM Archive_Master_Following WHERE following_type = '5' ) a
) f2 ON f1.master_id= f2.master_id
AND f1.rowNumb= f2.rowNumb- 1
LEFT JOIN (
SELECT
id master_id,
patient_id,
inp_no,
visit_id,
name,
dept_name,
CONVERT ( VARCHAR, discharge_date_time, 120 ) discharge_date_time,
check_doctor,
first_instance,
DOCTOR_IN_CHARGE,
death_flag,
dept_admission_to,
CONVERT ( VARCHAR, admission_date_time, 120 ) admission_date_time
FROM
archive_master
WHERE
1 = 1
AND ArchiveState NOT IN ( '作废', '已封存', '取消入院' )
AND Is_Valid != 1
) m ON f1.master_id= m.master_id
<where>
m.master_id!= ''
AND m.master_id IS NOT NULL
AND f2.handle_time IS NOT NULL
<if test="day != null and day != ''">
AND ( SELECT dbo.getWorkday ( f1.handle_time, f2.handle_time ) ) &lt;=#{day}
</if>
<choose>
<when test="startDateTo != null and startDateTo != '' and endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) between #{startDateTo} and
#{endDateTo}
</when>
<when test="startDateTo != null and startDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) >=#{startDateTo}
</when>
<when test="endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) &lt;= #{endDateTo}
</when>
</choose>
</where>
GROUP BY m.dept_name
</select>
<select id="returnTimelyNum" resultType="com.emr.vo.ThreeDaysFileVo">
SELECT ISNULL( COUNT ( f1.id ), 0 ) returnTimelyNum,
m.dept_name deptCode
FROM
(
SELECT
id,
master_id,
following_type,
following_content,
handle_name,
handle_time,
ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY master_id, handle_time ) AS rowNumb
FROM
Archive_Master_Following
WHERE
following_type = '9'
) f1
LEFT JOIN (
SELECT
*
FROM
( SELECT *, ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY master_id, handle_time ) AS rowNumb FROM Archive_Master_Following WHERE following_type = '5' ) a
) f2 ON f1.master_id= f2.master_id
AND f1.rowNumb= f2.rowNumb- 1
LEFT JOIN (
SELECT
id master_id,
patient_id,
inp_no,
visit_id,
name,
dept_name,
CONVERT ( VARCHAR, discharge_date_time, 120 ) discharge_date_time,
check_doctor,
first_instance,
DOCTOR_IN_CHARGE,
death_flag,
dept_admission_to,
CONVERT ( VARCHAR, admission_date_time, 120 ) admission_date_time
FROM
archive_master
WHERE
1 = 1
AND ArchiveState NOT IN ( '作废', '已封存', '取消入院' )
AND Is_Valid != 1
) m ON f1.master_id= m.master_id
<where>1=1
<choose>
<when test="startDateTo != null and startDateTo != '' and endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) between #{startDateTo} and
#{endDateTo}
</when>
<when test="startDateTo != null and startDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) >=#{startDateTo}
</when>
<when test="endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) &lt;= #{endDateTo}
</when>
</choose>
</where>
GROUP BY dept_name
</select>
<select id="feedBackRecord" resultType="com.emr.vo.ThreeDaysFileVo">
SELECT
ISNULL( COUNT ( DISTINCT m.id ), 0 ) feedBackRecordNum,
m.dept_name deptCode
FROM archive_master m
INNER JOIN (SELECT ROW_NUMBER() OVER ( partition BY master_id ORDER BY handle_time ASC ) RowNum,
Archive_Master_Following.*
FROM Archive_Master_Following
WHERE 1 = 1
AND following_type = '9') AS f ON m.ID = f.master_id
INNER JOIN emr_fault_detail d ON d.archive_detail_id = m.ID
<where>
RowNum = 1
AND YEAR (discharge_date_time ) != '1801'
AND ArchiveState NOT IN ( '作废', '已封存', '取消入院' )
AND m.id IS NOT NULL
AND dept_name IS NOT NULL
AND m.id != ''
AND d.assort_id NOT IN ( '1212', '1855', '485' )
<choose>
<when test="startDateTo != null and startDateTo != '' and endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) between #{startDateTo} and
#{endDateTo}
</when>
<when test="startDateTo != null and startDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) >=#{startDateTo}
</when>
<when test="endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) &lt;= #{endDateTo}
</when>
</choose>
</where>
GROUP BY m.dept_name
</select>
<select id="day3RewardNum" resultType="com.emr.vo.ThreeDaysFileVo">
SELECT
ISNULL( COUNT ( m.id ), 0 ) day3RewardNum,
dept_name AS deptCode
FROM
Archive_Master m
INNER JOIN (
SELECT
ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY handle_time ASC ) RowNum,
Archive_Master_Following.*
FROM
Archive_Master_Following
WHERE
1 = 1
AND following_type = '5'
) AS f ON m.ID= f.master_id
WHERE
f.RowNum = 1
AND YEAR ( discharge_date_time ) != '1801'
AND m.id IS NOT NULL
AND dept_name IS NOT NULL
AND m.id != ''
AND ArchiveState NOT IN ( '作废', '已封存', '取消入院' )
AND ( SELECT dbo.getWorkday ( discharge_date_time, f.handle_time ) ) &lt;= 3
<where>1=1
<choose>
<when test="startDateTo != null and startDateTo != '' and endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) between #{startDateTo} and
#{endDateTo}
</when>
<when test="startDateTo != null and startDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) >=#{startDateTo}
</when>
<when test="endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) &lt;= #{endDateTo}
</when>
</choose>
</where>
GROUP BY m.dept_name
</select>
<select id="returnOverdueNum" resultType="com.emr.vo.ThreeDaysFileVo">
SELECT
( SELECT dbo.getWorkday ( f1.handle_time, f2.handle_time ) ) returnOverdueDay,
m.dept_name AS deptCode
FROM
(
SELECT
id,
master_id,
handle_time,
ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY master_id, handle_time ) AS rowNumb
FROM
Archive_Master_Following
WHERE
following_type = '9'
) f1
LEFT JOIN (
SELECT
*
FROM
( SELECT *, ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY master_id, handle_time ) AS rowNumb FROM
Archive_Master_Following WHERE following_type = '5' ) a
) f2 ON f1.master_id= f2.master_id
AND f1.rowNumb= f2.rowNumb- 1
LEFT JOIN (
SELECT
id master_id,
dept_name,
discharge_date_time
FROM
archive_master
WHERE
1 = 1
AND ArchiveState NOT IN ( '作废', '已封存', '取消入院' )
AND Is_Valid != 1
) m ON f1.master_id= m.master_id
<where>
m.master_id!= ''
AND m.master_id IS NOT NULL
AND f2.handle_time IS NOT NULL
AND YEAR ( discharge_date_time ) != '1801'
AND dept_name IS NOT NULL
<if test="day != null and day != ''">
AND ( SELECT dbo.getWorkday ( f1.handle_time, f2.handle_time ) ) >#{day}
</if>
<choose>
<when test="startDateTo != null and startDateTo != '' and endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) between #{startDateTo} and
#{endDateTo}
</when>
<when test="startDateTo != null and startDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) >=#{startDateTo}
</when>
<when test="endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) &lt;= #{endDateTo}
</when>
</choose>
</where>
</select>
<select id="returnOverdue2Day" resultType="com.emr.vo.ThreeDaysFileVo">
SELECT
ISNULL( COUNT ( m.id ), 0 ) returnOverdue2Day,
m.dept_name
FROM
Archive_Master m
INNER JOIN (
SELECT
ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY handle_time ASC ) RowNum,
Archive_Master_Following.*
FROM
Archive_Master_Following
WHERE following_type = '5')
AS f ON m.ID = f.master_id
INNER JOIN (SELECT ROW_NUMBER ( ) OVER ( partition BY master_id ORDER BY handle_time ASC ) RowNum,Archive_Master_Following.*
FROM
Archive_Master_Following
WHERE
following_type = '9')
AS f1 ON m.ID = f1.master_id
<where>
f.RowNum = 1
AND f1.RowNum = 1
AND YEAR ( discharge_date_time ) != '1801'
AND m.id IS NOT NULL
AND dept_name IS NOT NULL
AND m.id != ''
AND ArchiveState NOT IN ( '作废', '已封存', '取消入院' )
AND ( SELECT dbo.getWorkday ( discharge_date_time, f.handle_time ) ) &lt;=2
<choose>
<when test="startDateTo != null and startDateTo != '' and endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) between #{startDateTo} and
#{endDateTo}
</when>
<when test="startDateTo != null and startDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) >=#{startDateTo}
</when>
<when test="endDateTo != null and endDateTo != ''">
and CONVERT(VARCHAR(20),m.discharge_date_time,23) &lt;= #{endDateTo}
</when>
</choose>
</where>
GROUP BY m.dept_name
</select>
</mapper>

@ -1,34 +0,0 @@
package java.com.emr;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.File;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:config/applicationContext.xml"})
public class MapperTest {
/*@Autowired
PaperDao paperDao;
*//**
* mapper
*/
@Test
public void testCRUD(){
String path = "F:\\isDelete\\mr_file\\pdf\\pdf";
File file = new File(path);
File[] files = file.listFiles();
for(File file1 : files){
String absolutePath = file1.getAbsolutePath();
System.out.println(absolutePath);
}
}
}

@ -887,29 +887,6 @@
<div class="modal-body divCss2">
<!--通过审批且未过期的patientId集合-->
<form class="form-horizontal" id="form2">
<%--<div class="row">--%>
<%--<div class="row divCss3">缺陷信息</div>--%>
<%--<div class="row divCss2">--%>
<%--<div class="row divCss2">--%>
<%--<span style="float:left;vertical-align:top;">选项:</span>--%>
<%--<div style="float:left;" id="faultTypeDiv">--%>
<%--&lt;%&ndash;<div class="row " style="width:600px">&ndash;%&gt;--%>
<%--&lt;%&ndash;<label class="col-xs-6"><input name="Fruit" type="checkbox" value=""/>苹果 </label>&ndash;%&gt;--%>
<%--&lt;%&ndash;<label class="col-xs-6"><input name="Fruit" type="checkbox" value=""/>桃子 </label>&ndash;%&gt;--%>
<%--&lt;%&ndash;</div>&ndash;%&gt;--%>
<%--&lt;%&ndash;<div class="row " style="width:600px">&ndash;%&gt;--%>
<%--&lt;%&ndash;<label class="col-xs-6"><input name="Fruit" type="checkbox" value=""/>苹果水电费是否是的范德萨</label>&ndash;%&gt;--%>
<%--&lt;%&ndash;<label class="col-xs-6"><input name="Fruit" type="checkbox" value=""/>桃子</label>&ndash;%&gt;--%>
<%--&lt;%&ndash;</div>&ndash;%&gt;--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="row divCss2">--%>
<%--<span style="vertical-align:top;">内容:</span>--%>
<%--<textarea id="content" rows="6" style="width:80%;"></textarea>--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="divCss4"></div>--%>
<div class="row"><input id="backArchiveId" hidden>
<%--<div class="row divCss3 ">退回信息</div>--%>
<div class="row divCss2">

@ -0,0 +1,537 @@
<%@ page import="java.util.ResourceBundle" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set value="${pageContext.request.contextPath}" var="path" scope="page"/>
<html>
<head>
<title>归档报表</title>
<%ResourceBundle res = ResourceBundle.getBundle("config.jdbc"); %>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta name="referrer" content="never">
<!-- 解决部分兼容性问题如果安装了GCF则使用GCF来渲染页面如果未安装GCF则使用最高版本的IE内核进行渲染。 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<!-- 页面按原比例显示 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<%@include file="../../jspf/comm.jspf" %>
<%@include file="../../jspf/ztreeCommom.jsp" %>
<script type="text/javascript"
src="${path}/static/bootstrap-3.3.7/bootstrap-table-fixed-columns.js?time=2019-12-25"></script>
<link rel="stylesheet" href="${path}/static/bootstrap-3.3.7/bootstrap-table-fixed-columns.css" type="text/css">
<script src="${path}/static/js/loadAssortDetailCommom.js"></script>
</head>
<style>
.divCss {
margin-top: 5px;
}
/* dataTables表头居中 */
.table > thead:first-child > tr:first-child > th {
text-align: center !important;
}
/*选中行颜色*/
.fixed-table-container tbody .selected td {
background-color: #9acfea;
}
.formCss {
margin-top: 20px;
margin-left: 20px;
}
.tjCss {
margin-left: 10px;
margin-right: 20px;
height: auto;
}
.modal-header2 {
height: 30px;
text-align: center !important;
vertical-align: middle !important;
background-color: #3c8dbc !important;
color: #fff;
font-size: 16px;
font-weight: bold;
padding: 5px 5px 5px 5px !important;
}
.modal-footer {
padding: 5px;
}
.modal {
margin-left: -45%;
overflow-x: auto;
/*z-index: 1049;*/
}
.fixed-table-toolbar .bs-bars .pull-right {
height: 20px;
!important;
}
#maxImg > div > div {
width: calc(210%);
}
#delPdfPageModal .modal-header2 {
width: calc(210%); /*margin-left:-15%;*/
}
#delPdfPageModal .modal-content {
width: calc(210%); /*margin-left:-15%;*/
height: calc(100vh - 100px);
overflow: hidden;
!important;
}
#signModal .modal-content {
margin-left: calc(60%);
width: 500px; /*width: 1300px;*/
overflow: hidden;
}
#archiveIdSign {
margin-left: 8px;
width: 450px;
}
/* dataables表头居中 */
.table > thead:first-child > tr:first-child > th {
text-align: center !important;
}
#assortModal > div > div {
margin-top: 30%;
margin-left: 60%;
width: 500px;
!important;
}
#exampleModal > div > div {
margin-top: 30%;
margin-left: 60%;
width: 400px;
!important;
}
#delPdfModal > div > div {
margin-top: 30%;
margin-left: 60%;
width: 400px;
!important;
}
#tsPdfModal > div > div {
margin-top: 40%;
margin-left: 70%;
width: 400px;
!important;
}
#returnModal .modal-content {
margin-left: 0%;
margin-top: 5%;
width: calc(210%);
}
#firstModal .modal-content {
margin-left: 20%;
margin-top: 0%;
width: calc(180%);
}
#verifyModal .modal-content {
margin-left: 20%;
margin-top: 5%;
width: calc(150%);
}
#verinfyQZModal .modal-content {
margin-left: 50%;
margin-top: 10%;
width: 450px;
}
#delPdfPageModal2 > div > div {
margin-top: 20%;
margin-left: 60%;
width: 400px;
!important;
}
#timeLineModal .modal-content {
margin-left: 50%;
margin-top: 0%;
width: 100%;
}
#delImgPageModal > div > div {
width: 400px;
margin-left: 55%;
margin-top: 20%;
}
#imgDelPageModal .modal-content {
margin-left: 5%;
width: calc(200%); /*margin-left:-15%;*/
height: calc(90vh);
overflow-x: hidden;
overflow-y: auto;
!important;
}
#QXInfoModal .modal-header2 {
width: calc(210%);
}
/*选中行颜色*/
.fixed-table-container tbody .selected td {
background-color: #9acfea;
}
.formCss {
margin-top: 20px;
margin-left: 20px;
}
.tjCss {
margin-left: 10px;
margin-right: 20px;
height: auto;
}
</style>
<body>
<div class="tjCss">
<!--搜索-->
<form class="formCss">
<div class="form-inline">
<button type="button" class="btn btn-primary btn-sm divCss" id="searchBtn">查询</button>
<button type="button" class="btn btn-info btn-sm divCss" id="excelBtn">条件导出</button>
<button type="button" class="btn btn-success btn-sm divCss" id="execute">执行计划</button>
</div>
</form>
<!--数据表格-->
<table id="table" class="table text-nowrap table-striped"></table>
</div>
<%--执行计划--%>
<div class="modal fade" id="executeModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content ">
<div class="modal-header2">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title">执行计划</h4>
</div>
<div class="modal-body">
<form>
<div class="form-group ">
<div class="form-group divCss">
<label>及时归档天数:</label>
<input type="text" class="input-sm form-control" name="day" id="day"/>
</div>
<div class="form-group divCss">
<label>时间范围:</label>
<div class="input-daterange input-group" id="datepickerSign">
<input type="text" class="input-sm form-control" name="start" id="startDateTo"/>
<span class="input-group-addon">-</span>
<input type="text" class="input-sm form-control" name="end" id="endDateTo"/>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default btn-sm" data-dismiss="modal">返回</button>
<button type="button" class="btn btn-primary btn-sm" id="save">保存</button>
</div>
</div>
</div>
</div>
</body>
<script>
var tipLoad = 1;
executeecho();
initTable();
//日期控件
$(".input-daterange").datepicker({
format: "yyyy-mm-dd",
language: "zh-CN"
});
function initTable() {
$("#table").bootstrapTable({ // 对应table标签的id
//method: 'POST',
url: "${path}/statement/reportList", // 获取表格数据的url
contentType: "application/x-www-form-urlencoded",//一种编码。好像在post请求的时候需要用到。这里用的get请求注释掉这句话也能拿到数据
//dataField: "data",//这是返回的json数组的key.默认是"rows".这里只有前后端约定好就行
cache: false, // 设置为 false 禁用 AJAX 数据缓存, 默认为true
striped: true, //表格显示条纹默认为false
pagination: true, // 在表格底部显示分页组件默认false
paginationShowPageGo: true,
pageList: [10, 20, 50, 100], // 如果设置了分页设置可供选择的页面数据条数。设置为All 则显示所有记录。
smartDisplay: false,
pageSize: 2, // 页面数据条数
pageNumber: 1, // 初始化加载第一页,默认第一页
sidePagination: 'server', // 设置为服务器端分页 客户端client
search: false,
showColumns: true,
// sortable: true,
// sortOrder: "asc",
toolbar: '#toolbar',//指定工具栏
searchOnEnterKey: true, //设置为 true时按回车触发搜索方法否则自动触发搜索方法
undefinedText: '---', //当数据为 undefined 时显示的字符
singleSelect: false,//设置True 将禁止多选
clickToSelect: true,//设置true 将在点击行时自动选择rediobox 和 checkbox
//height: 560, //定义表格的高度。
searchTimeOut: 500,// 默认500 设置搜索超时时间。
toolbarAlign: 'right',// 指定 toolbar 水平方向的位置。'left' 或 'right'
paginationDetailHAlign: 'left',//指定 分页详细信息 在水平方向的位置。'left' 或 'right'。
showHeader: true,//是否显示列头。
trimOnSearch: true,//设置为 true 将自动去掉搜索字符的前后空格。
//是否显示导出按钮
showExport: true,
//导出表格方式默认basic只导出当前页的表格数据all导出所有数据selected导出选中的数据
exportDataType: "basic",
//导出文件类型
exportTypes: ['json', 'xml', 'csv', 'txt', 'sql', 'excel'],
exportOptions: {
fileName: document.title
},
queryParams: function (params) {
var currPageSize = this.pageSize;
if (currPageSize == 2) {
currPageSize = 10;
}
var limit = null;
var offset = params.offset;
//判断是否导出全部all
if ($("#sel_exportoption").val() == "all") {
offset = 0;
limit = this.totalRows;
this.pageSize = limit;
} else {
limit = currPageSize;
this.pageSize = currPageSize;
}
//console.log("-=======startDate===="+$("#startDateTo").val());
var temp = {
limit: limit, //页面大小
offset: offset, //页码
order: params.order, //排位命令descasc
};
return temp;
},
sortName: 'id', // 要排序的字段
sortOrder: 'desc', // 排序规则
columns: [{
title: '全选',
field: 'select', //复选框
checkbox: true,
width: 25,
align: 'center',
valign: 'middle',
},
{
title: '序号',
field: 'id',
align: 'center',
valign: 'middle',
//sortable: true,
visible: false,
formatter: function (value, row, index) {
return index + 1;
}
},
{
title: '科室名称',
field: 'deptName',
align: 'left',
valign: 'left',
},
{
title: '出院人数',
field: 'outNum',
align: 'left',
valign: 'middle',
},
{
title: '迟交合计',
field: 'lateNum',
align: 'center',
valign: 'middle',
},
{
title: '及时合计',
field: 'day3Rate',
align: 'left',
valign: 'middle',
},
{
title: '2天及时合计',
field: 'day2Rate',
align: 'center',
valign: 'middle',
},
{
title: '归档病历迟交扣罚金额',
field: 'deptNameLate',
align: 'left',
valign: 'middle',
},
{
title: '初次及时归档率',
field: 'day3RateSting',
align: 'center',
valign: 'left',
},
{
title: '返修及时归档率',
field: 'returnNumString',
align: 'center',
},
{
title: '科室kpi',
field: 'deptNameLateKpi',
align: 'center',
valign: 'middle',
},
{
title: '反馈病历数量(本)',
field: 'feedBackRecordNum',
align: 'center',
valign: 'middle',
},
{
title: '无反馈病历数量(本)',
field: 'notFeedBackRecordNum',
align: 'center',
valign: 'middle',
},
{
title: '反馈病历扣罚金额',
field: 'feedBackMoney',
align: 'center',
valign: 'left',
},
{
title: '超期扣罚数量(本)',
field: 'returnOverdueNum',
align: 'center',
valign: 'middle',
},
{
title: '超期扣罚金额',
field: 'returnOverdueMoney',
align: 'center',
valign: 'middle',
},
{
title: '三天归档奖励本数',
field: 'day3RewardNum',
align: 'center',
valign: 'middle',
},
{
title: '2天归档病历无反馈数量',
field: 'noReturnOverdue2Day',
align: 'center',
valign: 'middle',
},
],
onLoadSuccess: function (result) { //加载成功时执行
//console.info("加载成功");
tipLoad = 0;
},
onLoadError: function () { //加载失败时执行
//console.info("加载数据失败");
tipLoad = 0;
}
});
}
$("#execute").click(function () {
//生成表单token,防止表单重复提交
//setFormToken();
//签收
$('#executeModal').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
});
//查询
$('#searchBtn').click(function () {
if (tipLoad == 0) {
$("#table").bootstrapTable("refreshOptions", {pageNumber: 1});
} else {
toastr.warning("正在查询,请稍等...");
}
});
//保存执行计划
$("#save").click(function () {
var day = $('#day').val()
var startDateTo = $('#startDateTo').val()
var endDateTo = $('#endDateTo').val()
if (day == "") {
return toastr.warning("及时归档天数不能为空!");
}
if (startDateTo == "") {
return toastr.warning("时间范围,开始时间不能为空!");
}
if (endDateTo == "") {
return toastr.warning("时间范围,结束时间不能为空!");
}
$.ajax({
url: "${path}/statement/saveExecute",
type: "POST",
data: {
day: day,
startDateTo: startDateTo,
endDateTo: endDateTo + ' 23:59:59'
},
success: function (result) {
if (result.code == 100) {
return toastr.success(result.msg)
} else {
return toastr.warning(result.msg);
}
},
});
});
//执行计划回显
function executeecho() {
$.ajax({
url: "${path}/statement/echoExecute",
type: "POST",
success: function (result) {
startDateTo = result.startDateTo.substring(0, 11);
endDateTo = result.endDateTo.substring(0, 11);
document.getElementById("day").value = result.day;
document.getElementById("startDateTo").value = startDateTo;
document.getElementById("endDateTo").value = endDateTo;
},
});
}
</script>
</html>
Loading…
Cancel
Save