1.每个页面查看病历页面展示时间轴

2.病案室退回后医生再提交,将该行字体换颜色展示
3.增加菜单,病案封存,当病历进行病案封存后,这份病历就只能在病案封存这个菜单里查看
4.增加菜单,病案封存日志,记录病案封存后又撤回的信息
5.工号栏显示姓名
6.首次签收与超期页面根据要求修改sql
————2021.02.24 王泽钦
master
wzqgit 4 years ago
parent 75fed113ac
commit 0a3f7669c5

@ -1,9 +1,8 @@
package com.emr.controller;
import com.emr.entity.Archive_Master;
import com.emr.entity.Archive_Master_Vo;
import com.emr.entity.OffsetLimitPage;
import com.emr.entity.*;
import com.emr.service.Archive_MasterService;
import com.emr.service.Archive_Master_FollowingService;
import com.emr.util.ExportExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@ -22,6 +21,8 @@ import java.util.List;
public class MedicalHandleController {
@Autowired
private Archive_MasterService archiveMasterService;
@Autowired
private Archive_Master_FollowingService archive_master_followingService;
@RequestMapping(value = "/medicalHandles")
public String faults(Model model) {
@ -31,7 +32,6 @@ public class MedicalHandleController {
@ResponseBody
@RequestMapping(value = "/medicalHandlesList")
public OffsetLimitPage medicalHandlesList(HttpServletRequest request, HttpServletResponse response, Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit) {
OffsetLimitPage result = archiveMasterService.selectHandleDetail(archiveMasterVo, offset, limit);
return result;
}
@ -52,4 +52,12 @@ public class MedicalHandleController {
//导出excel的操作
exportExcelUtil.expordExcel(tableThNames, fieldCns, list, fileName, response);
}
@ResponseBody
@RequestMapping(value = "/getTimeLine")
public List<Archive_Master_Following> getTimeLine(HttpServletRequest request,String masterId){
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
Integer roleId = user.getRoleId();
return archive_master_followingService.selectByMasterId(roleId,masterId);
}
}

@ -3,7 +3,9 @@ package com.emr.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.emr.entity.Power_User;
import com.emr.service.PowerUserService;
import com.emr.util.HttpClientUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@ -16,40 +18,21 @@ import java.util.List;
@Controller
public class PowerUserController {
@Value("${powerGetUserList}")
private String powerGetUserList;
@Autowired
private PowerUserService powerUserService;
@RequestMapping("getPowerUserList")
@ResponseBody
public Object test(HttpServletRequest request,String type){
public Object getPowerUserList(HttpServletRequest request,String type){
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
String handleName = user.getUserPosition();//姓名
request.setAttribute("handleName",handleName);
JSONObject jsonObject = HttpClientUtils.httpGet(powerGetUserList);
List<JSONObject> users = new ArrayList<>();
String code = jsonObject.getString("code");
if (code.equals("100")){
JSONObject data = jsonObject.getJSONObject("extend");
// return data.toString()
JSONArray userList = data.getJSONArray("userList");
if (type.equals("1")){
// return userList.toJSONString();
return userList;
}else{
for (int i = 0; i < userList.size(); i++) {
JSONObject temp = userList.getJSONObject(i);
String roleId = temp.getString("roleId");
if (roleId.equals("22")||roleId.equals("20")){
users.add(temp);
}
}
return users;
}
}else{
JSONArray powerUserList = powerUserService.getPowerUserList(type);
if(powerUserList == null){
return "ERROR";
}else{
return powerUserList;
}
}
}

@ -71,7 +71,7 @@ public class lastVerifyController {
String tableThNames = "病历清单id,住院号,住院次数,名字,性别,身份证,出院科室,出院日期,主管医生,状态,医生是否提交,医生,医生提交日期,护士是否提交,护士,护士提交日期,电子病历医生提交,电子病历护士提交,是否死亡";
String fieldCns = "id,inpNo,visitId,name,sex,idNo,deptName,dischargeDateTime,doctorInCharge,archivestate,cmtDoctor,doctorName,cmtDoctorDate,cmtNurse,nurseName,cmtDurseDate,emrDoctorCmt,emrNureCmt,deathFlag";
//构造excel的数据
List<Archive_Master> list = archiveMasterService.selectByLast(archiveMasterVo);
List<Archive_Master_Vo> list = archiveMasterService.selectByLast(archiveMasterVo);
//文件名
String fileName = "病案室终审" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls";

@ -0,0 +1,176 @@
/**
* Copyright (C), 2015-2019
* Author: HJL
* Date: 2019/7/19 14:39
* Description:
*/
package com.emr.controller;
import com.emr.annotation.OptionalLog;
import com.emr.entity.*;
import com.emr.service.*;
import com.emr.util.ExportExcelUtil;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@PropertySource(value = "classpath:config/jdbc.properties", encoding = "UTF-8")
@Controller
@RequestMapping("/storage")
public class storageController {
@Autowired
private Emr_Fault_DetailService emrFaultDetailService;
@Autowired
private Emr_DictionaryService emrDictionaryService;
@Autowired
private Archive_MasterService archiveMasterService;
@Autowired
private Archive_Master_FollowingService archiveMasterFollowingService;
@RequestMapping(value = "/MedicalRecordStorage")
public String faults(Model model) {
return "medicalRecordStorageDir/MedicalRecordStorage";
}
@ResponseBody
@RequestMapping(value = "/StorageList")
public OffsetLimitPage recallList(HttpServletRequest request, HttpServletResponse response, Emr_Fault_Vo emrFaultVo, Integer offset, Integer limit) {
OffsetLimitPage result = emrFaultDetailService.selectStorageByCol(emrFaultVo, offset, limit);
return result;
}
@ResponseBody
@RequestMapping(value = "/exportExcel")
public void exportExcel(HttpServletResponse response, Emr_Fault_Vo emrFaultVo) throws Exception {
String tableThNames = "ID,病历清单id,住院号,住院次数,名字,性别,身份证,入院科室,入院日期,出院科室,出院日期,状态,归档状态";
String fieldCns = "id,archiveDetailId,inpNo,visitId,name,sex,idNo,deptAdmissionTo,admissionDateTime,deptName,dischargeDateTime,state,archivestate";
//构造excel的数据
List<Emr_Fault_Vo> list = emrFaultDetailService.selectByCol(emrFaultVo);
Emr_Dictionary dic = new Emr_Dictionary();
dic.setEffective(1);
dic.setTypecode("dept_code");
//科室列表
List<Emr_Dictionary> dicList = emrDictionaryService.dicByTypeCode(dic);
for (int i = 0; i < list.size(); i++) {
//替换科室
for (int k = 0; k < dicList.size(); k++) {
String deptName = list.get(i).getDeptName();
if (deptName.equals(dicList.get(k).getCode())) {
//出院科室
deptName = deptName.replace(deptName, dicList.get(k).getName());
list.get(i).setDeptName(deptName);
//入院科室dept_admission_to
deptName = list.get(i).getDeptAdmissionTo();
deptName = deptName.replace(deptName, dicList.get(k).getName());
list.get(i).setDeptAdmissionTo(deptName);
}
}
}
//文件名
String fileName = "召回信息数据" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls";
//ExportExcelUtil
ExportExcelUtil exportExcelUtil = new ExportExcelUtil();
response.setContentType("application/ms-excel;charset=gbk");
//导出excel的操作
exportExcelUtil.expordExcel(tableThNames, fieldCns, list, fileName, response);
}
/**
*
*
*
*/
@Transactional
@OptionalLog(methods = "病案封存")
@ResponseBody
@RequestMapping(value = "/updateState")
public int updateState(HttpServletRequest request, HttpServletResponse response, Emr_Fault_Detail emrFaultDetail) throws UnsupportedEncodingException {
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
Subject currentUser = SecurityUtils.getSubject();
Session session = currentUser.getSession();
String username = (String) session.getAttribute("userSession");//获取前面登录的用户名
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
String handleName = user.getUserPosition();//姓名
emrFaultDetail.setUpdater(username);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String nowTime = format1.format(new Date());
emrFaultDetail.setUpdateTime(nowTime);
Archive_Master archiveMaster = new Archive_Master();
Archive_Master_Following archiveMasterFollowing = new Archive_Master_Following();
archiveMaster.setId(emrFaultDetail.getArchiveDetailId());
archiveMaster.setArchivestate(emrFaultDetail.getArchiveState());
archiveMaster.setCmtNurse(1);
archiveMaster.setCmtDoctor(1);
int bol = archiveMasterService.updateByClo(archiveMaster);
if (bol == 1) {
if(archiveMaster.getArchivestate().equals("已封存")){
archiveMasterFollowing.setMasterId(emrFaultDetail.getArchiveDetailId());
archiveMasterFollowing.setFollowingContent("病案封存");
archiveMasterFollowing.setFollowingType("11");
archiveMasterFollowing.setHandleTime(nowTime);
// archiveMasterFollowing.setHandleId();
archiveMasterFollowing.setHandleName(handleName);
archiveMasterFollowing.setRemark(emrFaultDetail.getRecallReason());
bol = archiveMasterFollowingService.insertSelective(archiveMasterFollowing);
}else if (archiveMaster.getArchivestate().equals("已归档")){
archiveMasterFollowing.setMasterId(emrFaultDetail.getArchiveDetailId());
archiveMasterFollowing.setFollowingContent("病案取消封存");
archiveMasterFollowing.setFollowingType("12");
archiveMasterFollowing.setHandleTime(nowTime);
// archiveMasterFollowing.setHandleId();
archiveMasterFollowing.setHandleName(handleName);
archiveMasterFollowing.setRemark(emrFaultDetail.getRecallReason());
bol = archiveMasterFollowingService.insertSelective(archiveMasterFollowing);
}
}
return bol;
}
/*
*
* */
@RequestMapping(value = "/MedicalRecordStorageLog")
public String faultsLog(Model model) {
return "medicalRecordStorageDir/MedicalRecordStorageLog";
}
/*
*
* */
@ResponseBody
@RequestMapping(value = "/storageLogList")
public OffsetLimitPage storageLogList(HttpServletRequest request, HttpServletResponse response, Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit) {
OffsetLimitPage result = archiveMasterService.selectByFollowinglog(archiveMasterVo, offset, limit);
return result;
}
}

@ -18,7 +18,7 @@ public interface Archive_MasterMapper {
List<Archive_Master> selectByColumn(Archive_Master_Vo record);
List<Archive_Master> selectByLast(Archive_Master_Vo record);
List<Archive_Master_Vo> selectByLast(Archive_Master_Vo record);
List<Archive_Master> selectByUnfile(Archive_Master_Vo record);
List<Archive_Master> selectByUnfile2(Archive_Master_Vo record);
@ -41,9 +41,12 @@ public interface Archive_MasterMapper {
List<Archive_Master> getDoctorInCharge(Archive_Master record);
//power查询用户姓名
String getFName(String userName);
//查询病案室操作记录
List<Archive_Master_Vo> selectHandleDetail(Archive_Master_Vo record);
//查询超期天数列表
List<Archive_Master_Vo> selectOverdue(Archive_Master_Vo record);
//封存日志
List<Archive_Master> selectByFollowinglog(Archive_Master_Vo record);
}

@ -2,6 +2,9 @@ package com.emr.dao;
import com.emr.entity.Archive_Master_Following;
import java.util.HashMap;
import java.util.List;
public interface Archive_Master_FollowingMapper {
int deleteByPrimaryKey(String id);
@ -14,4 +17,6 @@ public interface Archive_Master_FollowingMapper {
int updateByPrimaryKeySelective(Archive_Master_Following record);
int updateByPrimaryKey(Archive_Master_Following record);
List<Archive_Master_Following> selectByMasterId(HashMap<String, Object> param);
}

@ -34,4 +34,6 @@ public interface Emr_Fault_DetailMapper {
Emr_Fault_Detail selectByDept(Emr_Fault_Detail emrFaultDetail);
List<Emr_Fault_Detail> selectByArchiveId(Emr_Fault_Detail emrFaultDetail);
List<Emr_Fault_Vo> selectStorageByCol(Emr_Fault_Vo emrFaultVo);
}

@ -110,6 +110,47 @@ public class Archive_Master_Vo {
private String transferDept;
//2021-02-02新增
private String overdue;//超期天数
private String createTime;//初审时间
private String createTimeStart;
private String createTimeEnd;
public String getCreateTimeStart() {
return createTimeStart;
}
public void setCreateTimeStart(String createTimeStart) {
this.createTimeStart = createTimeStart;
}
public String getCreateTimeEnd() {
return createTimeEnd;
}
public void setCreateTimeEnd(String createTimeEnd) {
this.createTimeEnd = createTimeEnd;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getOverdue() {
return overdue;
}
public void setOverdue(String overdue) {
this.overdue = overdue;
}
public String getCmtDoctorDate() {
return cmtDoctorDate;
}

@ -39,7 +39,7 @@ public interface Archive_MasterService {
* @param archiveMasterVo
* @return
*/
List<Archive_Master> selectByLast(Archive_Master_Vo archiveMasterVo);
List<Archive_Master_Vo> selectByLast(Archive_Master_Vo archiveMasterVo);
/**
* '','退'
@ -164,9 +164,6 @@ public interface Archive_MasterService {
*/
OffsetLimitPage bbSel2(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit);
//power查询用户姓名
String getFullName(String userName);
/**
*
*
@ -182,6 +179,25 @@ public interface Archive_MasterService {
* @return
*/
OffsetLimitPage selectHandleDetail(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit);
/**
*
*
* @param archiveMasterVo
* @return
*/
List<Archive_Master_Vo> selectOverdue(Archive_Master_Vo archiveMasterVo);
/**
*
*
* @param archiveMasterVo
* @return
*/
OffsetLimitPage selectOverdue(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit);
//封存日志
OffsetLimitPage selectByFollowinglog(Archive_Master_Vo record, Integer offset, Integer limit);
}

@ -2,6 +2,10 @@ package com.emr.service;
import com.emr.entity.Archive_Master_Following;
import java.util.List;
public interface Archive_Master_FollowingService {
int insertSelective(Archive_Master_Following record);
List<Archive_Master_Following> selectByMasterId(Integer roleId,String masterId);
}

@ -95,6 +95,8 @@ public interface Emr_Fault_DetailService {
List<Emr_Fault_Detail> selectByArchiveId(Emr_Fault_Detail emrFaultDetail);
OffsetLimitPage selectStorageByCol(Emr_Fault_Vo emrFaultVo, Integer offset, Integer limit);
}

@ -0,0 +1,11 @@
package com.emr.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
public interface PowerUserService {
JSONArray getPowerUserList(String type);
}

@ -6,6 +6,8 @@
*/
package com.emr.service.ipml;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.emr.dao.Archive_DetailMapper;
import com.emr.dao.Archive_MasterMapper;
import com.emr.entity.Archive_Master;
@ -14,13 +16,17 @@ import com.emr.entity.Emr_Dictionary;
import com.emr.entity.OffsetLimitPage;
import com.emr.service.Archive_MasterService;
import com.emr.service.Emr_DictionaryService;
import com.emr.service.PowerUserService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.google.common.base.Function;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.google.common.collect.Maps;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
public class Archive_MasterServiceImpl implements Archive_MasterService {
@ -31,6 +37,9 @@ public class Archive_MasterServiceImpl implements Archive_MasterService {
@Autowired
private Emr_DictionaryService emrDictionaryService;
@Autowired
private PowerUserService powerUserService;
@Override
public Archive_Master selectById(String id) {
return archiveMasterMapper.selectById(id);
@ -39,9 +48,41 @@ public class Archive_MasterServiceImpl implements Archive_MasterService {
@Override
public OffsetLimitPage selectByCol(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit) {
PageHelper.offsetPage(offset, limit);
//archiveMasterVo.setDeptAdmissionTo("20050102,20070102");
List<Archive_Master> list= archiveMasterMapper.selectByCol(archiveMasterVo);
return new OffsetLimitPage((Page) list);
List<Archive_Master> resultList = new Page<>();
JSONArray powerUsers = powerUserService.getPowerUserList("1");
List<JSONObject> powerUserList = JSONArray.parseArray(powerUsers.toJSONString(), JSONObject.class);
if (powerUserList != null){
Map<String,JSONObject> mappedMovies = Maps.uniqueIndex(powerUserList, new Function<JSONObject,String>() {
@Override
public String apply(JSONObject temp) {
return temp.getString("userName");
}});
for (Archive_Master archive_master : list) {
String doctorName ="";
String nurseName ="";
JSONObject userInfo = mappedMovies.get(archive_master.getDoctorName());
if (userInfo==null){
doctorName=archive_master.getDoctorName();
}else {
doctorName = userInfo.getString("name");
}
userInfo = mappedMovies.get(archive_master.getNurseName());
if (userInfo==null){
nurseName=archive_master.getNurseName();
}else {
nurseName = userInfo.getString("name");
}
archive_master.setDoctorName(doctorName);
archive_master.setNurseName(nurseName);
resultList.add(archive_master);
}
}
return new OffsetLimitPage((Page) resultList);
}
@Override
@ -75,7 +116,7 @@ public class Archive_MasterServiceImpl implements Archive_MasterService {
}
@Override
public List<Archive_Master> selectByLast(Archive_Master_Vo archiveMasterVo) {
public List<Archive_Master_Vo> selectByLast(Archive_Master_Vo archiveMasterVo) {
return archiveMasterMapper.selectByLast(archiveMasterVo);
}
@ -83,32 +124,169 @@ public class Archive_MasterServiceImpl implements Archive_MasterService {
public OffsetLimitPage selectByColumn(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit) {
PageHelper.offsetPage(offset, limit);
List<Archive_Master> list = archiveMasterMapper.selectByColumn(archiveMasterVo);
return new OffsetLimitPage((Page) list);
List<Archive_Master> resultList = new Page<>();
JSONArray powerUsers = powerUserService.getPowerUserList("1");
List<JSONObject> powerUserList = JSONArray.parseArray(powerUsers.toJSONString(), JSONObject.class);
if (powerUserList != null){
Map<String,JSONObject> mappedMovies = Maps.uniqueIndex(powerUserList, new Function<JSONObject,String>() {
@Override
public String apply(JSONObject temp) {
return temp.getString("userName");
}});
for (Archive_Master archive_master : list) {
String doctorName ="";
String nurseName ="";
JSONObject userInfo = mappedMovies.get(archive_master.getDoctorName());
if (userInfo==null){
doctorName=archive_master.getDoctorName();
}else {
doctorName = userInfo.getString("name");
}
userInfo = mappedMovies.get(archive_master.getNurseName());
if (userInfo==null){
nurseName=archive_master.getNurseName();
}else {
nurseName = userInfo.getString("name");
}
archive_master.setDoctorName(doctorName);
archive_master.setNurseName(nurseName);
resultList.add(archive_master);
}
}
return new OffsetLimitPage((Page) resultList);
}
@Override
public OffsetLimitPage selectByUnfile(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit) {
PageHelper.offsetPage(offset, limit);
List<Archive_Master> list = archiveMasterMapper.selectByUnfile(archiveMasterVo);
return new OffsetLimitPage((Page) list);
List<Archive_Master> resultList = new Page<>();
JSONArray powerUsers = powerUserService.getPowerUserList("1");
List<JSONObject> powerUserList = JSONArray.parseArray(powerUsers.toJSONString(), JSONObject.class);
if (powerUserList != null){
Map<String,JSONObject> mappedMovies = Maps.uniqueIndex(powerUserList, new Function<JSONObject,String>() {
@Override
public String apply(JSONObject temp) {
return temp.getString("userName");
}});
for (Archive_Master archive_master : list) {
String doctorName ="";
String nurseName ="";
JSONObject userInfo = mappedMovies.get(archive_master.getDoctorName());
if (userInfo==null){
doctorName=archive_master.getDoctorName();
}else {
doctorName = userInfo.getString("name");
}
userInfo = mappedMovies.get(archive_master.getNurseName());
if (userInfo==null){
nurseName=archive_master.getNurseName();
}else {
nurseName = userInfo.getString("name");
}
archive_master.setDoctorName(doctorName);
archive_master.setNurseName(nurseName);
resultList.add(archive_master);
}
}
return new OffsetLimitPage((Page) resultList);
}
@Override
public OffsetLimitPage selectByLast(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit) {
PageHelper.offsetPage(offset, limit);
List<Archive_Master> list = archiveMasterMapper.selectByLast(archiveMasterVo);
return new OffsetLimitPage((Page) list);
List<Archive_Master_Vo> list = archiveMasterMapper.selectByLast(archiveMasterVo);
List<Archive_Master_Vo> resultList = new Page<>();
JSONArray powerUsers = powerUserService.getPowerUserList("1");
List<JSONObject> powerUserList = JSONArray.parseArray(powerUsers.toJSONString(), JSONObject.class);
if (powerUserList != null){
Map<String,JSONObject> mappedMovies = Maps.uniqueIndex(powerUserList, new Function<JSONObject,String>() {
@Override
public String apply(JSONObject temp) {
return temp.getString("userName");
}});
for (Archive_Master_Vo archive_master : list) {
String doctorName ="";
String nurseName ="";
String firstInstance ="";
JSONObject userInfo = mappedMovies.get(archive_master.getDoctorName());
if (userInfo==null){
doctorName=archive_master.getDoctorName();
}else {
doctorName = userInfo.getString("name");
}
userInfo = mappedMovies.get(archive_master.getNurseName());
if (userInfo==null){
nurseName=archive_master.getNurseName();
}else {
nurseName = userInfo.getString("name");
}
userInfo = mappedMovies.get(archive_master.getFirstInstance());
if (userInfo==null){
firstInstance=archive_master.getFirstInstance();
}else {
firstInstance = userInfo.getString("name");
}
archive_master.setDoctorName(doctorName);
archive_master.setNurseName(nurseName);
archive_master.setFirstInstance(firstInstance);
resultList.add(archive_master);
}
}
return new OffsetLimitPage((Page) resultList);
}
@Override
public OffsetLimitPage selectByCmtCol(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit) {
PageHelper.offsetPage(offset, limit);
List<Archive_Master> list = archiveMasterMapper.selectByCmtCol(archiveMasterVo);
return new OffsetLimitPage((Page) list);
List<Archive_Master> resultList = new Page<>();
JSONArray powerUsers = powerUserService.getPowerUserList("1");
List<JSONObject> powerUserList = JSONArray.parseArray(powerUsers.toJSONString(), JSONObject.class);
if (powerUserList != null){
Map<String,JSONObject> mappedMovies = Maps.uniqueIndex(powerUserList, new Function<JSONObject,String>() {
@Override
public String apply(JSONObject temp) {
return temp.getString("userName");
}});
for (Archive_Master archive_master : list) {
String doctorName ="";
String nurseName ="";
JSONObject userInfo = mappedMovies.get(archive_master.getDoctorName());
if (userInfo==null){
doctorName=archive_master.getDoctorName();
}else {
doctorName = userInfo.getString("name");
}
userInfo = mappedMovies.get(archive_master.getNurseName());
if (userInfo==null){
nurseName=archive_master.getNurseName();
}else {
nurseName = userInfo.getString("name");
}
archive_master.setDoctorName(doctorName);
archive_master.setNurseName(nurseName);
resultList.add(archive_master);
}
}
return new OffsetLimitPage((Page) resultList);
}
@Override
@ -150,11 +328,6 @@ public class Archive_MasterServiceImpl implements Archive_MasterService {
return new OffsetLimitPage((Page) list);
}
@Override
public String getFullName(String userName) {
return archiveMasterMapper.getFName(userName);
}
@Override
public List<Archive_Master_Vo> selectHandleDetail(Archive_Master_Vo archiveMasterVo) {
List<Archive_Master_Vo> list = archiveMasterMapper.selectHandleDetail(archiveMasterVo);
@ -167,6 +340,60 @@ public class Archive_MasterServiceImpl implements Archive_MasterService {
List<Archive_Master_Vo> list = archiveMasterMapper.selectHandleDetail(archiveMasterVo);
return new OffsetLimitPage((Page) list);
}
@Override
public List<Archive_Master_Vo> selectOverdue(Archive_Master_Vo archiveMasterVo) {
List<Archive_Master_Vo> list = archiveMasterMapper.selectOverdue(archiveMasterVo);
return list;
}
@Override
public OffsetLimitPage selectOverdue(Archive_Master_Vo archiveMasterVo, Integer offset, Integer limit) {
PageHelper.offsetPage(offset, limit);
List<Archive_Master_Vo> list = archiveMasterMapper.selectOverdue(archiveMasterVo);
List<Archive_Master_Vo> resultList = new Page<>();
JSONArray powerUsers = powerUserService.getPowerUserList("1");
List<JSONObject> powerUserList = JSONArray.parseArray(powerUsers.toJSONString(), JSONObject.class);
if (powerUserList != null){
Map<String,JSONObject> mappedMovies = Maps.uniqueIndex(powerUserList, new Function<JSONObject,String>() {
@Override
public String apply(JSONObject temp) {
return temp.getString("userName");
}});
for (Archive_Master_Vo archive_master : list) {
String doctorInChargeName ="";
String firstInstance ="";
JSONObject userInfo = mappedMovies.get(archive_master.getDoctorInCharge());
if (userInfo==null){
doctorInChargeName=archive_master.getDoctorInCharge();
}else {
doctorInChargeName = userInfo.getString("name");
}
userInfo = mappedMovies.get(archive_master.getFirstInstance());
if (userInfo==null){
firstInstance=archive_master.getFirstInstance();
}else {
firstInstance = userInfo.getString("name");
}
archive_master.setDoctorInCharge(doctorInChargeName);
archive_master.setFirstInstance(firstInstance);
resultList.add(archive_master);
}
}
return new OffsetLimitPage((Page) resultList);
}
@Override
public OffsetLimitPage selectByFollowinglog(Archive_Master_Vo record, Integer offset, Integer limit) {
PageHelper.offsetPage(offset, limit);
List<Archive_Master> list = archiveMasterMapper.selectByFollowinglog(record);
return new OffsetLimitPage((Page) list);
}
}

@ -6,6 +6,9 @@ import com.emr.service.Archive_Master_FollowingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
@Service
public class Archive_Master_FollowingServiceImpl implements Archive_Master_FollowingService {
@Autowired
@ -14,4 +17,17 @@ public class Archive_Master_FollowingServiceImpl implements Archive_Master_Follo
public int insertSelective(Archive_Master_Following record) {
return archive_master_followingMapper.insertSelective(record);
}
@Override
public List<Archive_Master_Following> selectByMasterId(Integer roleId,String masterId) {
String roleIds = "16,19,23,24,25,26,29";//小于等于科主任权限的roleId
HashMap<String, Object> param = new HashMap<>();
param.put("masterId", masterId);
if (roleIds.indexOf(roleId)>-1){
param.put("type", 1);
}else{
param.put("type", 0);
}
return archive_master_followingMapper.selectByMasterId(param);
}
}

@ -145,6 +145,55 @@ public class Emr_Fault_DetailServiceImpl implements Emr_Fault_DetailService {
public List<Emr_Fault_Detail> selectByArchiveId(Emr_Fault_Detail emrFaultDetail) {
return emrFaultDetailMapper.selectByArchiveId(emrFaultDetail);
}
@Override
public OffsetLimitPage selectStorageByCol(Emr_Fault_Vo emrFaultVo, Integer offset, Integer limit) {
//return emrFaultDetailMapper.selectByCol(emrFaultDetail);
PageHelper.offsetPage(offset, limit);
List<Emr_Fault_Vo> list = emrFaultDetailMapper.selectStorageByCol(emrFaultVo);
Emr_Dictionary dic = new Emr_Dictionary();
dic.setEffective(1);
dic.setTypecode("dept_code");
//科室列表
List<Emr_Dictionary> dicList = emrDictionaryService.dicByTypeCode(dic);
//获取缺陷类别列表
Emr_Fault_Type obj = new Emr_Fault_Type();
obj.setEffective(1);
List<Emr_Fault_Type> typeLis = emrFaultTypeService.selectByCol(obj);
for (int i = 0; i < list.size(); i++) {
//替换科室
for (int k = 0; k < dicList.size(); k++) {
String deptName = list.get(i).getDeptName();
//入院科室dept_admission_to
String dept2 = list.get(i).getDeptAdmissionTo();
if ((deptName != null && deptName.equals(dicList.get(k).getCode())) || (dept2 != null && dept2.equals(dicList.get(k).getCode()))) {
//出院科室
deptName = deptName.replace(deptName, dicList.get(k).getName());
list.get(i).setDeptName(deptName);
dept2 = dept2.replace(dept2, dicList.get(k).getName());
list.get(i).setDeptAdmissionTo(dept2);
}
}
String assortId = list.get(i).getAssortId();
if(assortId!="" && assortId!=null) {
String[] assorArr = assortId.split(",");
//替换类别
for (int j = 0; j < typeLis.size(); j++) {
String id = String.valueOf(typeLis.get(j).getId());
if (Arrays.asList(assorArr).contains(id)) {
assortId = assortId.replace(id, typeLis.get(j).getTypeName());
list.get(i).setAssortId(assortId);
}
}
}
}
return new OffsetLimitPage((Page) list);
}
}

@ -0,0 +1,44 @@
package com.emr.service.ipml;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.emr.util.HttpClientUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.emr.service.PowerUserService;
import java.util.ArrayList;
import java.util.List;
@Service
public class PowerUserServiceImpl implements PowerUserService {
@Value("${powerGetUserList}")
private String powerGetUserList;
@Override
public JSONArray getPowerUserList(String type) {
JSONObject jsonObject = HttpClientUtils.httpGet(powerGetUserList);
JSONArray users = new JSONArray();
String code = jsonObject.getString("code");
if (code.equals("100")) {
JSONObject data = jsonObject.getJSONObject("extend");
// return data.toString()
JSONArray userList = data.getJSONArray("userList");
if (type.equals("1")) {
return userList;
} else {
for (int i = 0; i < userList.size(); i++) {
JSONObject temp = userList.getJSONObject(i);
String roleId = temp.getString("roleId");
if (roleId.equals("22") || roleId.equals("20")) {
users.add(temp);
}
}
return users;
}
}
return null;
}
}

@ -94,7 +94,7 @@
<if test="flag != null">
and t.flag = #{flag,jdbcType=NVARCHAR}
</if>
ORDER BY z.assort_sort,t.page_number,t.Title,t.UpLoadDateTime
ORDER BY z.assort_sort,t.Title,t.page_number,t.UpLoadDateTime
</select>
<select id="selectByid" parameterType="java.lang.String" resultMap="BaseResultMap">
select

@ -82,6 +82,8 @@
<result column="handle_time" jdbcType="NVARCHAR" property="handleTime"/>
<result column="following_type" jdbcType="NVARCHAR" property="followingType"/>
<result column="following_content" jdbcType="NVARCHAR" property="followingContent"/>
<result column="overdue" jdbcType="NVARCHAR" property="overdue"/>
<result column="create_time" jdbcType="NVARCHAR" property="createTime"/>
</resultMap>
<sql id="Base_Column_List">
id, patient_id, inp_no, visit_id, name, sex, dept_name, discharge_date_time, ArchiveState,
@ -309,11 +311,11 @@
ORDER BY m.discharge_date_time desc
</select>
<select id="selectByLast" parameterType="com.emr.entity.Archive_Master_Vo" resultMap="BaseResultMap">
select m.id,m.patient_id,m.inp_no,m.visit_id,m.name,m.sex,f.name
<select id="selectByLast" parameterType="com.emr.entity.Archive_Master_Vo" resultMap="BaseResultMap2">
select DISTINCT m.id,m.patient_id,m.inp_no,m.visit_id,m.name,m.sex,f.name
dept_name,CONVERT(varchar(10),m.discharge_date_time, 120) discharge_date_time,m.ArchiveState,CONVERT(varchar(10),m.admission_date_time, 120) admission_date_time,d.name dept_admission_to
,m.check_doctor,m.checked_datetime,m.checked_doctor,m.LockInfo,m.DOCTOR_IN_CHARGE,m.ID_NO,m.DISCHARGE_DISPOSITION,m.dept_code_lend,m.isscaned,
m.cmt_doctor,m.cmt_nurse,m.doctor_name,m.nurse_name,m.cmt_doctor_date,m.cmt_nurse_date,m.emr_doctor_cmt,m.emr_nure_cmt,m.death_flag,m.first_instance,m.is_scanning,bed_number
m.cmt_doctor,m.cmt_nurse,m.doctor_name,m.nurse_name,m.cmt_doctor_date,m.cmt_nurse_date,m.emr_doctor_cmt,m.emr_nure_cmt,m.death_flag,m.first_instance,m.is_scanning,bed_number,amf.following_type
from archive_master m
LEFT JOIN (select code,name from emr_dictionary where parent_id=(select id from emr_dictionary where
typeCode='dept_code' )) d
@ -321,6 +323,8 @@
LEFT JOIN (select code,name from emr_dictionary where parent_id=(select id from emr_dictionary where
typeCode='dept_code' )) f
on m.dept_name=f.code
left join Archive_Master_Following amf
on m.id=amf.master_id and amf.following_type=9
where 1=1 and ArchiveState in('初审')
<if test="id != null and id != ''">
and m.id = #{id,jdbcType=NVARCHAR}
@ -996,9 +1000,6 @@
bed_number=#{bedNumber,jdbcType=NVARCHAR}
where id = #{id,jdbcType=NVARCHAR}
</update>
<select id="getFName" parameterType="java.lang.String" resultType="java.lang.String">
SELECT `name` FROM `power_user` WHERE user_name = #{userName}
</select>
<select id="selectHandleDetail" parameterType="com.emr.entity.Archive_Master_Vo" resultMap="BaseResultMap2">
SELECT m.id
,m.patient_id
@ -1050,7 +1051,7 @@
LEFT JOIN (select code,name from emr_dictionary where parent_id=(select id from emr_dictionary where
typeCode='dept_code' )) g
on m.dept_name=g.code
where 1=1
where 1=1 and f.following_type in(8,9)
<if test="id != null and id != ''">
and m.id = #{id,jdbcType=NVARCHAR}
</if>
@ -1091,8 +1092,126 @@
</foreach>
</if>
<if test="followingType != null and followingType != ''">
and f.following_type in(#{followingType,jdbcType=NVARCHAR})
and f.following_type = #{followingType,jdbcType=NVARCHAR}
</if>
ORDER BY f.handle_time desc
</select>
<select id="selectOverdue" parameterType="com.emr.entity.Archive_Master_Vo" resultMap="BaseResultMap2">
select DISTINCT m.id,m.patient_id, m.inp_no,m.visit_id,m.name,g.name dept_name,
m.discharge_date_time,t.name dept_admission_to,
CONVERT(varchar(10),m.admission_date_time, 120)admission_date_time,
d.create_time,m.first_instance,m.DOCTOR_IN_CHARGE,m.death_flag,[dbo].[getWorkday](m.discharge_date_time,d.create_time) overdue
from Archive_Master m join emr_dictionary e on m.dept_name = e.code
join emr_fault_detail d on m.ID=d.archive_detail_id
LEFT JOIN (select code,name from emr_dictionary where parent_id=(select id from emr_dictionary where
typeCode='dept_code' )) t
on m.dept_admission_to=t.code
LEFT JOIN (select code,name from emr_dictionary where parent_id=(select id from emr_dictionary where
typeCode='dept_code' )) g
on m.dept_name=g.code
where 1=1
--判断初审以及状态为null
and d.archive_state in ('初审', null)
--或者初审时间,时间最小
and d.create_time in (select create_time from emr_fault_detail A where create_time=(select min(create_time) from emr_fault_detail B where A.[archive_detail_id]=B.[archive_detail_id]))
<if test="id != null and id != ''">
and m.id = #{id,jdbcType=NVARCHAR}
</if>
<if test="inpNo != null and inpNo != ''">
and m.inp_no like '%'+#{inpNo,jdbcType=NCHAR}+'%'
</if>
<if test="visitId != null and visitId != ''">
and m.visit_id=#{visitId,jdbcType=NCHAR}
</if>
<if test="name != null and name != ''">
and m.name like '%'+#{name,jdbcType=NCHAR}+'%'
</if>
<if test="deptName!= null and deptName!= ''">
and m.dept_name in
<foreach item="item" collection="deptName.split(',')" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="deptAdmissionTo != null and deptAdmissionTo!=''">
and m.dept_admission_to in
<foreach item="item" collection="deptAdmissionTo.split(',')" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="dischargeDateTime != null">
and m.discharge_date_time = #{dischargeDateTime,jdbcType=NVARCHAR}
</if>
<choose>
<when test="startDate != null and startDate != '' and endDate != null and endDate != ''">
and m.discharge_date_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
<when test="startDate != null and startDate != ''">
and m.discharge_date_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<when test="endDate != null and endDate != ''">
and m.discharge_date_time &lt;= #{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
</choose>
<if test="createTime != null">
and d.create_time = #{createTime,jdbcType=NVARCHAR}
</if>
<choose>
<when test="createTimeStart != null and createTimeStart != '' and createTimeEnd != null and createTimeEnd != ''">
and d.create_time between CONVERT(VARCHAR(10),#{createTimeStart,jdbcType=NCHAR},120) and
#{createTimeEnd,jdbcType=NCHAR}+ ' 23:59:59'
</when>
<when test="createTimeStart != null and createTimeStart != ''">
and d.create_time >= CONVERT(VARCHAR(10),#{createTimeStart,jdbcType=NCHAR},120)
</when>
<when test="createTimeEnd != null and createTimeEnd != ''">
and d.create_time &lt;= #{createTimeEnd,jdbcType=NCHAR}+ ' 23:59:59'
</when>
</choose>
<if test="deathFlag != null and deathFlag != ''">
and m.death_flag = #{deathFlag,jdbcType=NVARCHAR}
<if test="deathFlag == '0'.toString()">
and [dbo].[getWorkday](m.discharge_date_time,d.create_time)>3
</if>
<if test="deathFlag == '1'.toString()">
and [dbo].[getWorkday](m.discharge_date_time,d.create_time)>7
</if>
</if>
</select>
<!--封存日志-->
<select id="selectByFollowinglog" parameterType="com.emr.entity.Archive_Master_Vo" resultMap="BaseResultMap">
select m.INP_NO,m.VISIT_ID,m.name,m.sex,f.handle_name,f.handle_time, m.archiveState ,f.following_content from Archive_Master m
INNER JOIN Archive_Master_Following f on m.ID=f.master_id
where 1=1 AND f.following_type in('11','12')
<if test="inpNo != null and inpNo != ''">
and m.inp_no like '%'+#{inpNo,jdbcType=NCHAR}+'%'
</if>
<if test="visitId != null and visitId != ''">
and m.visit_id=#{visitId,jdbcType=NCHAR}
</if>
<if test="name != null and name != ''">
and m.name like '%'+#{name,jdbcType=NCHAR}+'%'
</if>
<if test="archivestate != null and archivestate != ''">
and m.ArchiveState=#{archivestate,jdbcType=NVARCHAR}
</if>
<if test="handleName != null and handleName != ''">
and f.handle_name=#{handleName,jdbcType=NVARCHAR}
</if>
<if test="followingContent != null and followingContent != ''">
and f.following_content=#{followingContent,jdbcType=NVARCHAR}
</if>
<choose>
<when test="startDate != null and startDate != '' and endDate != null and endDate != ''">
and f.handle_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
<when test="startDate != null and startDate != ''">
and f.handle_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<when test="endDate != null and endDate != ''">
and f.handle_time &lt;= #{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
</choose>
</select>
</mapper>

@ -126,4 +126,14 @@
remark = #{remark,jdbcType=NVARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
<select id="selectByMasterId" parameterType="hashmap" resultMap="BaseResultMap">
select handle_name,handle_time,following_content from Archive_Master_Following
where 1=1
<if test="masterId != null and masterId != ''">
and master_id = #{masterId,jdbcType=NVARCHAR}
</if>
<if test="type==1">
and following_type in (1,2,3,4,5,6,7)
</if>
</select>
</mapper>

@ -12,6 +12,7 @@
<link rel="stylesheet" href="${path}/static/bootstrap-3.3.7/plugins/bootstrap-treeview/bootstrap-treeview.min.css" type="text/css"/>
<link rel="stylesheet" href="${path}/static/bootstrap-3.3.7/plugins/bootstrap-table-develop/src/extensions/page-jump/bootstrap-table-pagejump.css"/>
<link rel="stylesheet" href="${path}/static/bootstrap-3.3.7/plugins/bootstrap-select-1.13.0-dev/dist/css/bootstrap-select.min.css">
<link rel="stylesheet" type="text/css" href="${path}/static/css/timeAxis1.css">
<script type="text/javascript" src="${path}/static/js/comm.js"></script>
<script type="text/javascript" src="${path}/static/bootstrap-3.3.7/bower_components/bootstrap-datepicker/js/bootstrap-datepicker.js"></script>
@ -21,6 +22,7 @@
<script type="text/javascript" src="${path}/static/bootstrap-3.3.7/plugins/bootstrap-table-develop/dist/bootstrap-table.min.js"></script>
<script type="text/javascript" src="${path}/static/bootstrap-3.3.7/plugins/bootstrap-select-1.13.0-dev/dist/js/bootstrap-select.min.js"></script>
<script type="text/javascript" src="${path}/static/bootstrap-3.3.7/plugins/bootstrap-table-develop/src/extensions/page-jump/bootstrap-table-pagejump.js"></script>
<script type="text/javascript" src="${path}/static/js/timeAxis1.js"></script>
<%--<!-- 引入中文语言包 -->--%>
<script type="text/javascript"

@ -1,4 +1,4 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set value="${pageContext.request.contextPath}" var="path" scope="page"/>
<%
@ -217,6 +217,12 @@
!important;
}
#timeLineModal .modal-content {
margin-left: 50%;
margin-top: 35%;
width: 100%;
}
</style>
</head>
@ -381,6 +387,10 @@
退回管理:
<button type="button" class="btn btn-danger btn-sm" id="getRecallBtn">退回查看</button>
</div>
<div class="col-sm-3" id="timeLine">
跟踪管理:
<button type="button" class="btn btn-info btn-sm" id="getTimeline">跟踪查看</button>
</div>
</div>
<div class="row divCss2">
@ -458,6 +468,29 @@
</div>
</div>
<%--时间轴弹窗--%>
<div class="modal fade" id="timeLineModal" 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" style="height:500px;overflow:auto">
<div class="cx-time-main" id="cxTime">
</div>
</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="verifyBtn">通过</button>--%>
</div>
</div>
</div>
</div>
<!-- 模态框3Modal分段信息 -->
<div class="modal fade" id="assortModal" tabindex="2" role="dialog" aria-hidden="true">
<div class="modal-dialog">
@ -2908,11 +2941,15 @@
html = html + '<button type="button" class="btn btn-sm btn-warning nursInfo">归档护士提交</button>'
}
}
if (row.archivestate != '初审' && row.archivestate != '提交' && row.cmtDoctor == 1) {
html = html + '<button type="button" class="btn btn-sm btn-primary doctorInfoBack">归档医生撤回</button>'
if (index.indexOf("hcmit") != -1) {
if (row.archivestate != '初审' && row.archivestate != '提交' && row.cmtDoctor == 1) {
html = html + '<button type="button" class="btn btn-sm btn-primary doctorInfoBack">归档医生撤回</button>'
}
}
if (row.archivestate != '初审' && row.archivestate != '提交' && row.cmtNurse == 1) {
html = html + '<button type="button" class="btn btn-sm btn-primary nursInfoBack">归档护士撤回</button>'
if (index.indexOf("ncmit") != -1) {
if (row.archivestate != '初审' && row.archivestate != '提交' && row.cmtNurse == 1) {
html = html + '<button type="button" class="btn btn-sm btn-primary nursInfoBack">归档护士撤回</button>'
}
}
}
return html;
@ -4002,6 +4039,37 @@
}
});
var oTimeAxiosFun = null;
$("#getTimeline").click(function () {
$('#timeLineModal').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
var param = {
data: "", // 数据
id: 'cxTime', //dom节点ID
index: 0, // 选中时间节点
sort: 'just', // 正序just反序back, 其他表示不排序
sortKey: 'handleTime', //排序的参数key
// activeColor: '#26a69a', // 选中颜色
props: ['handleName','handleTime','followingContent'], //展示的key
}
var masterId=$("#idLab").html();
$.ajax({
url: "${path}/medicalHandle/getTimeLine?masterId=" + masterId,
type: "GET",
success: function (result) {
param.data = result;
oTimeAxiosFun = new oTimeAxios(param);
}, error: function () {
toastr.error("操作失败!");
}
});
})
</script>
</html>

@ -184,6 +184,11 @@
!important;
}
#timeLineModal .modal-content {
margin-left: 50%;
margin-top: 35%;
width: 100%;
}
</style>
</head>
@ -502,6 +507,10 @@
初审管理:
<button type="button" class="btn btn-danger btn-sm" id="getFirstBtn">初审查看</button>
</div>
<div class="col-sm-3" id="timeLine">
跟踪管理:
<button type="button" class="btn btn-info btn-sm" id="getTimeline">跟踪查看</button>
</div>
</div>
<div class="row divCss2">
<%--<div class="col-sm-4">--%>
@ -580,6 +589,29 @@
</div>
</div>
<%--时间轴弹窗--%>
<div class="modal fade" id="timeLineModal" 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" style="height:500px;overflow:auto">
<div class="cx-time-main" id="cxTime">
</div>
</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="verifyBtn">通过</button>--%>
</div>
</div>
</div>
</div>
<!-- 模态框3Modal分段信息 -->
<div class="modal fade" id="assortModal" tabindex="2" role="dialog" aria-hidden="true">
<div class="modal-dialog">
@ -3991,6 +4023,37 @@
}
});
var oTimeAxiosFun = null;
$("#getTimeline").click(function () {
$('#timeLineModal').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
var param = {
data: "", // 数据
id: 'cxTime', //dom节点ID
index: 0, // 选中时间节点
sort: 'just', // 正序just反序back, 其他表示不排序
sortKey: 'handleTime', //排序的参数key
// activeColor: '#26a69a', // 选中颜色
props: ['handleName','handleTime','followingContent'], //展示的key
}
var masterId=$("#idLab").html();
$.ajax({
url: "${path}/medicalHandle/getTimeLine?masterId=" + masterId,
type: "GET",
success: function (result) {
param.data = result;
oTimeAxiosFun = new oTimeAxios(param);
}, error: function () {
toastr.error("操作失败!");
}
});
})
</script>
</html>

@ -178,6 +178,12 @@
!important;
}
#timeLineModal .modal-content {
margin-left: 50%;
margin-top: 35%;
width: 100%;
}
</style>
</head>
@ -339,6 +345,10 @@
初审管理:
<button type="button" class="btn btn-danger btn-sm" id="getFirstBtn">初审查看</button>
</div>
<div class="col-sm-3" id="timeLine">
跟踪管理:
<button type="button" class="btn btn-info btn-sm" id="getTimeline">跟踪查看</button>
</div>
</div>
<div class="row divCss2">
<%--<div class="col-sm-4">--%>
@ -417,6 +427,29 @@
</div>
</div>
<%--时间轴弹窗--%>
<div class="modal fade" id="timeLineModal" 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" style="height:500px;overflow:auto">
<div class="cx-time-main" id="cxTime">
</div>
</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="verifyBtn">通过</button>--%>
</div>
</div>
</div>
</div>
<!-- 模态框3Modal分段信息 -->
<div class="modal fade" id="assortModal" tabindex="2" role="dialog" aria-hidden="true">
<div class="modal-dialog">
@ -1811,6 +1844,7 @@
exportOptions: {
fileName: document.title
},
rowStyle:rowStyle,//通过自定义函数设置行样式
// showToggle: false, //是否显示详细视图和列表视图的切换按钮
// cardView: false, //是否显示详细视图
// detailView: false, //是否显示父子表
@ -2308,6 +2342,14 @@
}
}
function rowStyle(row, index) {
var style = {};
if (row.followingType != null) {
style={css:{'color':'#ed5565'}};
}
return style;
}
var idArr = [];
var flag=0;
@ -3164,6 +3206,37 @@
}
});
var oTimeAxiosFun = null;
$("#getTimeline").click(function () {
$('#timeLineModal').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
var param = {
data: "", // 数据
id: 'cxTime', //dom节点ID
index: 0, // 选中时间节点
sort: 'just', // 正序just反序back, 其他表示不排序
sortKey: 'handleTime', //排序的参数key
// activeColor: '#26a69a', // 选中颜色
props: ['handleName','handleTime','followingContent'], //展示的key
}
var masterId=$("#idLab").html();
$.ajax({
url: "${path}/medicalHandle/getTimeLine?masterId=" + masterId,
type: "GET",
success: function (result) {
param.data = result;
oTimeAxiosFun = new oTimeAxios(param);
}, error: function () {
toastr.error("操作失败!");
}
});
})
</script>
</html>

@ -166,6 +166,12 @@
width: 100%;
}
#timeLineModal .modal-content {
margin-left: 50%;
margin-top: 35%;
width: 100%;
}
#returnModal .modal-content {
margin-left: 3%;
margin-top: 35%;
@ -309,7 +315,6 @@
</div>
<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>
</div>
</form>
<!--数据表格-->
@ -391,6 +396,10 @@
初审管理:
<button type="button" class="btn btn-danger btn-sm" id="getFirstBtn">初审查看</button>
</div>
<div class="col-sm-3" id="timeLine">
跟踪管理:
<button type="button" class="btn btn-info btn-sm" id="getTimeline">跟踪查看</button>
</div>
</div>
<div class="row divCss2">
<%--<div class="col-sm-4">--%>
@ -853,6 +862,29 @@
</div>
</div>
<%--时间轴弹窗--%>
<div class="modal fade" id="timeLineModal" 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" style="height:500px;overflow:auto">
<div class="cx-time-main" id="cxTime">
</div>
</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="verifyBtn">通过</button>--%>
</div>
</div>
</div>
</div>
<%--确认框--%>
<div class="modal fade" id="delPdfModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
<div class="modal-dialog" role="document">
@ -3468,6 +3500,37 @@
}
});
var oTimeAxiosFun = null;
$("#getTimeline").click(function () {
$('#timeLineModal').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
var param = {
data: "", // 数据
id: 'cxTime', //dom节点ID
index: 0, // 选中时间节点
sort: 'just', // 正序just反序back, 其他表示不排序
sortKey: 'handleTime', //排序的参数key
// activeColor: '#26a69a', // 选中颜色
props: ['handleName','handleTime','followingContent'], //展示的key
}
var masterId=$("#idLab").html();
$.ajax({
url: "${path}/medicalHandle/getTimeLine?masterId=" + masterId,
type: "GET",
success: function (result) {
param.data = result;
oTimeAxiosFun = new oTimeAxios(param);
}, error: function () {
toastr.error("操作失败!");
}
});
})
</script>

@ -0,0 +1,641 @@
<%@ 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"/>
<%--<%@ include file="/WEB-INF/jspf/common.jspf" %>--%>
<html>
<head>
<title>病案封存</title>
<meta charset="utf-8">
<!-- 解决部分兼容性问题如果安装了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" %>
</head>
<style>
.modal-header2 {
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-header {*/
/*padding: 5px 5px 5px 5px !important;*/
/*}*/
.modal-footer{
padding: 5px;
}
.divCss {
margin-top: 5px;
}
.divCss2 {
margin-top: 5px;
margin-left: 20px;
}
.divCss8 {
margin-top: 5px;
margin-right: 20px;
}
/* dataTables表头居中 */
.table > thead:first-child > tr:first-child > th {
text-align: center !important;
}
.enterCss2{
height: 160px;
width: 500px;
}
</style>
<body>
<div style="margin-left:30px;margin-right:10px;height:auto">
<!--搜索-->
<form style="margin-top:20px;">
<div class="form-inline">
<div class="form-group divCss8">
<label for="inpNo">住院号:</label>
<input type="text" class="input-sm form-control" id="inpNo" placeholder="请输入住院号">
</div>
<div class="form-group divCss8">
<label for="visitId">住院次数:</label>
<input type="number" class="input-sm form-control" id="visitId" placeholder="请输入次数">
</div>
<div class="form-group divCss8">
<label for="name">姓名:</label>
<input type="text" class="input-sm form-control" id="name" placeholder="请输入姓名">
</div>
<div class="form-group divCss8">
<label for="archivestate">归档状态 :</label>
<select class="input-sm form-control" id="archivestate">
<option value="">全部</option>
<option value="已归档">已归档</option>
<option value="已封存">已封存</option>
</select>
</div>
<div class="form-group divCss8" id="deptDiv" style="height: 18px;margin-top: -7px;">
<label>出院科室 :</label>
<%--<select class="input-sm form-control" id="deptName">--%>
<%--<option value="">全部</option>--%>
<%--&lt;%&ndash;<option value="在院">在院</option>&ndash;%&gt;--%>
<%--&lt;%&ndash;<option value="未归档">未归档</option>&ndash;%&gt;--%>
<%--&lt;%&ndash;<option value="归档中">归档中</option>&ndash;%&gt;--%>
<%--&lt;%&ndash;<option value="初审">初审</option>&ndash;%&gt;--%>
<%--&lt;%&ndash;<option value="已认证">已认证</option>&ndash;%&gt;--%>
<%--&lt;%&ndash;<option value="已归档">已归档</option>&ndash;%&gt;--%>
<%--</select>--%>
<select class="selectpicker bla bla bli" multiple data-live-search="true" name="deptName"
id="deptName" title="请输入科室">
<option value="">全部</option>
</select>
</div>
<%-- <div class="form-group divCss">--%>
<%-- <label for="state">召回状态 :</label>--%>
<%-- <select class="input-sm form-control" id="state">--%>
<%-- <option value="">全部</option>--%>
<%-- <option value="已召回">已召回</option>--%>
<%-- <option value="未召回">未召回</option>--%>
<%-- </select>--%>
<%-- </div>--%>
<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>
</div>
</form>
<!--数据表格-->
<table id="table" class="table text-nowrap table-striped" ></table>
<div id="toolbar" class="btn-group pull-right" style="margin-right: 20px;">
<div class="columns columns-right btn-group pull-right" style="margin-top:0px;">
<div class="btn-group btn-info">
<select id="sel_exportoption" class="form-control">                
<option value="">导出当前页面数据</option>                
<option value="all">导出全部数据</option>              
<option value="selected">导出选中数据</option>
</select>
</div>
<button class=" btn btn-success btn-sm" style="height: 34px" type="button" id="refreshBtn" name="refresh" aria-label="Refresh"
title="Refresh">
<i class="glyphicon glyphicon-refresh icon-refresh"></i>
</button>
</div>
</div>
</div>
<%--确认框--确认/取消封存--%>
<div class="modal fade" id="exampleModal" 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" id="exampleModalLabel">封存信息修改</h4>
</div>
<div class="modal-body">
<form>
<div class="form-group ">
<input type="hidden" id="id" name="id" value=""/><label hidden id="danganhao"></label>
<span style="vertical-align:top;">取消封存概述:</span><textarea rows="6" style="width:87%;" maxlength="255" id="recallReason2"></textarea>
</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="stateBtn">确认</button>
</div>
</div>
</div>
</div>
<%--确认框--确认/取消封存--%>
<div class="modal fade" id="exampleModal1" 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" id="exampleModalLabel1">封存信息修改</h4>
</div>
<div class="modal-body">
<form>
<div class="form-group ">
<input type="hidden" id="id1" name="id" value=""/><label hidden id="danganhao1"></label>
<span style="vertical-align:top;">确认封存概述:</span><textarea rows="6" style="width:87%;" maxlength="255" id="recallReason"></textarea>
</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="stateBtn1">确认</button>
</div>
</div>
</div>
</div>
</body>
<script>
var tipLoad = 1;
$(function () {
//日期控件
$(".input-daterange").datepicker({
format: "yyyy-mm-dd",
language: "zh-CN"
});
var url = window.location.href;
var index = url.substring(url.lastIndexOf('?') + 1).replace("num=", "");
if (index != null && index != "" && index.indexOf("excel") != -1) {
$("#excelBtn").show();
$("#toolbar").show();
} else {
$("#excelBtn").hide();
$(".columns-right").hide();
}
// var deptAdmissionTo = url.substring(url.lastIndexOf('&') + 1).replace("depts=", "");
// var deptArr = deptAdmissionTo.split(',');
// //var n = (deptAdmissionTo.split(',')).length ;
// if (deptAdmissionTo == null || deptAdmissionTo == '' || deptArr.length > 1) {
// $('#deptDiv').show();
// } else {
// $('#deptDiv').hide();
// }
function getDept() {
//获取科室列表
$.ajax({
url: "${path}/inHosp/getDept",
type: "POST",
data: {effective: 1, typecode: "dept_code"},
success: function (result) {
if (result != null) {
for (var i = 0; i < result.length; i++) {
$("#deptName").append("<option value=" + result[i].code + ">" + result[i].name + "</option>");
}
}
$('#deptName').selectpicker('refresh');
// for (var i = 0; i < result.length; i++) {
// if (deptArr.length != 1 && deptArr[0] != "") {
// var bol = deptArr.indexOf(result[i].code);
// if (bol != -1) {
// $("#deptName").append("<option value=" + result[i].code + ">" + result[i].name + "</option>");
// }
// } else {
// $("#deptName").append("<option value=" + result[i].code + ">" + result[i].name + "</option>");
// }
// }
}
});
}
getDept();
});
//处理导出内容,这个方法可以自定义某一行、某一列、甚至某个单元格的内容,也就是将其值设置为自己想要的内容
function DoOnCellHtmlData(cell, row, col, data) {
if (row == 0) {
return data;
}
//由于备注列超过6个字的话,通过span标签处理只显示前面6个字,如果直接导出的话会导致内容不完整,因此要将携带完整内容的span标签中title属性的值替换
if (col == 4 || col == 11 || col == 7) {
var spanObj = $(data);//将带 <span title="val"></span> 标签的字符串转换为jQuery对象
var title = spanObj.attr("title");//读取<span title="val"></span>中title属性的值
//var span = cell[0].firstElementChild;//读取cell数组中的第一个值下的第一个元素
if (typeof (title) != 'undefined') {
return title;
}
}
return data;
}
function initTable() {
if(tipLoad == 1){
$("#table").bootstrapTable({ // 对应table标签的id
//method: 'POST',
url: "${path}/storage/StorageList", // 获取表格数据的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;
}
var url = window.location.href;
var deptName = '';
// var deptName = url.substring(url.lastIndexOf('&') + 1).replace("depts=", "");
// var len = ($("#deptName").val()).length;
// if (len > 0) {
// var deptNameT = $("#deptName").val();
// if (deptNameT.indexOf("") == -1) {
// deptName = $("#deptName").val().toString();
// }
// }
// var url = window.location.href;
// var deptName = url.substring(url.lastIndexOf('&') + 1).replace("depts=", "");
var len = value.length;
if (len > 0) {
if (value.indexOf("") == -1) {
deptName = value.toString();
}
}
var temp = {
limit: limit, //页面大小
offset: offset, //页码
order: params.order, //排位命令descasc
idNo: $("#idNo").val(),
inpNo: "" + $("#inpNo").val(),
visitId:""+$("#visitId").val(),
name:""+$("#name").val(),
archivestate: "" + $("#archivestate").val(),
// state:"" + $("#state").val(),
deptName: deptName.toString()
};
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: '病案清单id',
field: 'archiveDetailId',
align: 'left',
valign: 'middle',
visible: false
},
{
title: '住院号',
field: 'inpNo',
align: 'center',
valign: 'middle',
},
{
title: '住院次数',
field: 'visitId',
align: 'center',
valign: 'middle',
},
{
title: '姓名',
field: 'name',
align: 'left',
valign: 'middle',
},
{
title: '性别',
field: 'sex',
align: 'center',
valign: 'middle',
},
{
title: '身份证号',
field: 'idNo',
align: 'left',
valign: 'middle',
},
{
title: '入院科室',
field: 'deptAdmissionTo',
align: 'left',
valign: 'middle',
},
{
title: '入院日期',
field: 'admissionDateTime',
align: 'center',
},
{
title: '出院科室',
field: 'deptName',
align: 'left',
valign: 'middle',
},
{
title: '出院日期',
field: 'dischargeDateTime',
align: 'center',
valign: 'middle',
formatter: function (value, row, index) {
return value.substring(0, 10);
}
// formatter: function (value, row, index) {
// return value
// }
},
/*{
title: '上次封存状态',
field: 'state',
align: 'center',
valign: 'middle',
formatter: function (value, row, index) {
//在院 未归档 归档中 初审 已归档 已认证
var a = '';
if (value == "已封存") {
a = '<span style="color:red"><i class="fa fa-check-circle-o" aria-hidden="true"></i>'+ value +'</span>';
} else {
a = '<span style="color:#ccc;"><i class="fa fa-times-circle-o" aria-hidden="true"></i>'+ value +'</span>';
}
return a;
}
},*/
{
title: '归档状态',
field: 'archivestate',
align: 'center',
valign: 'middle',
formatter: function (value, row, index) {
//在院 未归档 归档中 初审 已归档 已认证
//在院 未归档 归档中 初审 已归档 已认证 复审退回
var a = '';
if (value == "已封存") {
a = '<span style="color:#00CC00;"><i class="fa fa-times-circle-o" aria-hidden="true"></i>' + value + '</span>';
} else if (value == "已归档") {
a = '<span style="color:#030378"><i class="fa fa-check-circle-o" aria-hidden="true"></i>' + value + '</span>';
}
return a;
}
},
{
title: "操作",
align: 'left',
valign: 'middle',
width: 80, // 定义列的宽度单位为像素px
formatter: function (value, row, index) {
var url = window.location.href;
var index = url.substring(url.lastIndexOf('?') + 1).replace("num=", "");
if (index != null && index != "" && index.indexOf("recall") != -1) {
if (row.archivestate == "已封存" || row.archivestate == "已归档") {
if(row.archivestate=="已封存"){
return '<button class="btn btn-success btn-sm" onclick="recallFun(\'' + row.id + '\',\'' + row.archiveDetailId + '\')">已封存 </button>';
//return '<button class="btn btn-warning btn-sm" onclick="recallFun(\'' + row.id + '\',\'' + row.archiveDetailId + '\')">已封存 </button>' + '<button class="btn btn-danger btn-sm" onclick="logFun(\'' + row.id + '\',\'' + row.archiveDetailId + '\',\'' + row.recallReason + '\')">日志</button>';
}else{
return '<button class="btn btn-warning btn-sm" onclick="recallFun1(\'' + row.id + '\',\'' + row.archiveDetailId + '\')">未封存 </button>';
}
} else {
return '';
}
}
},
cellStyle: function (value, row, index) {
return {classes: 'success'}
}
}
],
onLoadSuccess: function (result) { //加载成功时执行
//console.info("加载成功");
tipLoad = 0;
},
onLoadError: function () { //加载失败时执行
//console.info("加载数据失败");
tipLoad = 0;
}
});
}
}
function recallFun(id, archiveDetailId){
$('#exampleModal').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
$("#recallReason2").val("");
$("#danganhao").html(archiveDetailId);
}
function recallFun1(id, archiveDetailId){
$('#exampleModal1').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
$("#recallReason").val("");
$("#danganhao1").html(archiveDetailId);
}
var value = [];
//查询
$('#searchBtn').click(function () {
if ($("#deptName").val().length > 0){
value = $("#deptName").val();
}
if (tipLoad == 0) {
$("#table").bootstrapTable("refreshOptions", {pageNumber: 1});
} else {
toastr.warning("正在查询,请稍等...");
}
$("#deptName").val([]);
});
//获取table的高度
function getHeight() {
return $(window).height() - 100;
}
initTable();
//2.初始化select的change事件
$("#sel_exportoption").change(function () {
$('#table').bootstrapTable('refreshOptions', {
exportDataType: $(this).val()
});
});
$("#refreshBtn").click(function () {
//刷新
$('#table').bootstrapTable('refresh');
});
//导出excel功能
$("#excelBtn").click(function () {
var inpNo = "" + $("#inpNo").val();
var visitId = "" + $("#visitId").val();
var name = "" + $("#name").val();
var idNo = "" + $("#idNo").val();
var state = "" + $("#state").val();
var archivestate=""+ $("#archivestate").val();
var deptName= $("#deptName").val();
window.location.href = "${path}/medicalRecall/exportExcel?inpNo=" + inpNo + "&visitId=" + visitId +
"&name=" + name + "&state=" + state + "&idNo=" + idNo + "&archivestate=" + archivestate+ "&deptName=" + deptName;
});
$("#stateBtn").click(function () {
$('#exampleModal').modal('hide'); //手动关闭
var archiveDetailId=$("#danganhao").html();
var visitId=$("#visitId").html();
var id = archiveDetailId;
var ArchiveState=$("#archivestate").html();
var recallReason= $("#recallReason2").val();
$.ajax({
url: "${path}/storage/updateState",
type: "POST",
data: {"ArchiveState":"已归档", "archiveDetailId": archiveDetailId, recallReason: recallReason},
success: function (result) {
//刷新
$('#table').bootstrapTable('refresh');
if(result>0){
toastr.success("取消封存成功!");
}else{
toastr.error("取消封存失败!");
}
}, error: function () {
//刷新
toastr.error("封存异常111")
}
});
});
$("#stateBtn1").click(function () {
$('#exampleModal1').modal('hide'); //手动关闭
var archiveDetailId=$("#danganhao1").html();
var visitId=$("#visitId").html();
var id = archiveDetailId;
var ArchiveState=$("#archivestate").html();
var recallReason= $("#recallReason").val();
$.ajax({
url: "${path}/storage/updateState",
type: "POST",
data: {"ArchiveState":"已封存", "archiveDetailId": archiveDetailId, recallReason: recallReason},
success: function (result) {
//刷新
$('#table').bootstrapTable('refresh');
if(result>0){
toastr.success("确认封存成功!");
}else{
toastr.error("确认封存失败!");
}
}, error: function () {
//刷新
toastr.error("封存异常111")
}
});
});
</script>
</html>

@ -0,0 +1,385 @@
<%@ 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>
<meta charset="utf-8">
<!-- 解决部分兼容性问题如果安装了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" %>
<style>
.divCss {
margin-top: 5px;
}
.divCss2 {
margin-top: 5px;
margin-left: 20px;
}
.divCss8 {
margin-top: 5px;
margin-right: 20px;
}
/* dataTables表头居中 */
.table > thead:first-child > tr:first-child > th {
text-align: center !important;
}
</style>
</head>
<body>
<div style="margin-left:30px;margin-right:10px;height:auto">
<!--搜索-->
<form style="margin-top:20px;">
<div class="form-inline">
<div class="form-group divCss8">
<label for="inpNo">住院号:</label>
<input type="text" class="input-sm form-control" id="inpNo" placeholder="请输入住院号">
</div>
<div class="form-group divCss8" >
<label for="visitId">住院次数:</label>
<input type="number" class="input-sm form-control" id="visitId" placeholder="请输入次数">
</div>
<div class="form-group divCss8">
<label for="name">姓名:</label>
<input type="text" class="input-sm form-control" id="name" placeholder="请输入姓名">
</div>
<div class="form-group divCss8">
<label for="handleName">撤回人:</label>
<input type="text" class="input-sm form-control" id="handleName" placeholder="请输入撤回人">
</div>
<div class="form-group divCss8">
<label for="archivestate">归档状态 :</label>
<select class="input-sm form-control" id="archivestate">
<option value="">全部</option>
<option value="已归档">已归档</option>
<option value="已封存">已封存</option>
</select>
</div>
<div class="form-group divCss8">
<label for="followingContent">状态 :</label>
<select class="input-sm form-control" id="followingContent">
<option value="">全部</option>
<option value="病案封存">病案封存</option>
<option value="病案取消封存">病案取消封存</option>
</select>
</div>
<div class="form-group divCss">
<label>封存日期:</label>
<div class="input-daterange input-group" id="datepicker">
<input type="text" class="input-sm form-control" name="start" id="startDate"/>
<span class="input-group-addon">-</span>
<input type="text" class="input-sm form-control" name="end" id="endDate"/>
</div>
</div>
<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>
</div>
</form>
<!--数据表格-->
<table id="table" class="table table-striped"></table>
<div id="toolbar" class="btn-group pull-right" style="margin-right: 20px;">
<div class="columns columns-right btn-group pull-right" style="margin-top:0px;">
<div class="btn-group btn-info">
<select id="sel_exportoption" class="form-control">                
<option value="">导出当前页面数据</option>
               
<option value="all">导出全部数据</option>
               --%>
<option value="selected">导出选中数据</option>
</select>
</div>
<button class=" btn btn-success" style="height: 34px" type="button" id="refreshBtn" name="refresh"
aria-label="Refresh"
title="Refresh">
<i class="glyphicon glyphicon-refresh icon-refresh"></i>
</button>
</div>
</div>
</div>
</body>
<script>
var tipLoad=1;
$(function () {
//日期控件
$(".input-daterange").datepicker({
format: "yyyy-mm-dd",
language: "zh-CN"
});
var url = window.location.href;
var index = url.substring(url.lastIndexOf('?') + 1).replace("num=", "");
if (index != null && index != "" && index.indexOf("excel") != -1) {
$("#excelBtn").show();
$("#toolbar").show();
} else {
$("#excelBtn").hide();
$(".columns-right").hide();
}
});
//处理导出内容,这个方法可以自定义某一行、某一列、甚至某个单元格的内容,也就是将其值设置为自己想要的内容
function DoOnCellHtmlData(cell, row, col, data) {
if (row == 0) {
return data;
}
//由于备注列超过6个字的话,通过span标签处理只显示前面6个字,如果直接导出的话会导致内容不完整,因此要将携带完整内容的span标签中title属性的值替换
if (col == 4 || col == 11 || col == 7) {
var spanObj = $(data);//将带 <span title="val"></span> 标签的字符串转换为jQuery对象
var title = spanObj.attr("title");//读取<span title="val"></span>中title属性的值
//var span = cell[0].firstElementChild;//读取cell数组中的第一个值下的第一个元素
if (typeof (title) != 'undefined') {
return title;
}
}
return data;
}
function initTable() {
if(tipLoad == 1){
$("#table").bootstrapTable({ // 对应table标签的id
//method: 'POST',
url: "${path}/storage/storageLogList", // 获取表格数据的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
},
// showToggle: false, //是否显示详细视图和列表视图的切换按钮
// cardView: false, //是否显示详细视图
// detailView: false, //是否显示父子表
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;
}
var temp = {
limit: limit, //页面大小
offset: offset, //页码
order: params.order, //排位命令descasc
idNo: $("#idNo").val(),
inpNo: "" + $("#inpNo").val(),
visitId: "" + $("#visitId").val(),
name: "" + $("#name").val(),
handleName: "" + $("#handleName").val(),
handleTime: "" + $("#handleTime").val(),
archivestate: "" + $("#archivestate").val(),
followingContent: "" + $("#followingContent").val(),
state: "" + $("#state").val(),
startDate: $("#startDate").val(),
endDate: $("#endDate").val()
};
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: 'inpNo',
align: 'center',
valign: 'middle',
},
{
title: '住院次数',
field: 'visitId',
align: 'center',
valign: 'middle',
},
{
title: '姓名',
field: 'name',
valign: 'middle',
},
{
title: '性别',
field: 'sex',
align: 'center',
valign: 'middle',
},
{
title: '撤回人',
field: 'handleName',
align: 'center',
valign: 'middle',
},
{
title: '撤回时间',
field: 'handleTime',
align: 'center',
valign: 'middle',
},
{
title: '当前病案归档状态',
field: 'archivestate',
align: 'center',
valign: 'middle',
formatter: function (value, row, index) {
//在院 未归档 归档中 初审 已归档 已认证
var a = '';
if (value == "已归档") {
a = '<span ><i class="fa fa-check-circle-o" aria-hidden="true"></i>未封存</span>';
} else if(value == "已封存"){
a = '<span style="color:#003eff;"><i class="fa fa-times-circle-o" aria-hidden="true"></i>已封存</span>';
}
return a;
}
},
{
title: '状态',
field: 'followingContent',
align: 'center',
valign: 'middle',
}
],
onLoadSuccess: function (result) { //加载成功时执行
//console.info("加载成功");
tipLoad=0;
},
onLoadError: function () { //加载失败时执行
//console.info("加载数据失败");
tipLoad=0;
}
});
}
}
//查询
$('#searchBtn').click(function () {
//查询之后重新从第一页算起
if (tipLoad == 0) {
$("#table").bootstrapTable("refreshOptions", {pageNumber: 1});
} else {
toastr.warning("正在查询,请稍等...");
}
$(".selectpicker").selectpicker( 'deselectAll' );
// $('#table').bootstrapTable('destroy');
//$('#table').bootstrapTable('refreshOptions', {limit: 1, offset: 10});
//刷新
//$('#table').bootstrapTable('refresh');
});
//获取table的高度
function getHeight() {
return $(window).height() - 100;
}
initTable();
//2.初始化select的change事件
$("#sel_exportoption").change(function () {
$('#table').bootstrapTable('refreshOptions', {
exportDataType: $(this).val()
});
});
$("#refreshBtn").click(function () {
//刷新
$('#table').bootstrapTable('refresh');
});
//导出excel功能
$("#excelBtn").click(function () {
var inpNo = "" + $("#inpNo").val();
var visitId = "" + $("#visitId").val();
var name = "" + $("#name").val();
var idNo = "" + $("#idNo").val();
var state = "" + $("#state").val();
var archivestate = "" + $("#archivestate").val();
var startDate = "" + $("#startDate").val();
var endDate=""+ $("#endDate").val();
window.location.href = "${path}/recallDate/exportExcel?inpNo=" + inpNo + "&visitId=" + visitId +
"&name=" + name + "&state=" + state + "&idNo=" + idNo + "&archivestate=" + archivestate
+ "&startDate=" + startDate + "&endDate=" + endDate;
});
</script>
</html>

@ -203,7 +203,11 @@
!important;
}
#timeLineModal .modal-content {
margin-left: 50%;
margin-top: 35%;
width: 100%;
}
</style>
</head>
@ -393,6 +397,10 @@
初审管理:
<button type="button" class="btn btn-danger btn-sm" id="getFirstBtn">初审查看</button>
</div>
<div class="col-sm-3" id="timeLine">
跟踪管理:
<button type="button" class="btn btn-info btn-sm" id="getTimeline">跟踪查看</button>
</div>
</div>
<div class="row divCss2">
<%--<div class="col-sm-4">--%>
@ -480,6 +488,29 @@
</div>
</div>
<%--时间轴弹窗--%>
<div class="modal fade" id="timeLineModal" 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" style="height:500px;overflow:auto">
<div class="cx-time-main" id="cxTime">
</div>
</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="verifyBtn">通过</button>--%>
</div>
</div>
</div>
</div>
<%--退回弹窗--%>
<div class="modal fade" id="returnModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
<div class="modal-dialog" role="document">
@ -3424,6 +3455,36 @@
}
});
var oTimeAxiosFun = null;
$("#getTimeline").click(function () {
$('#timeLineModal').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
var param = {
data: "", // 数据
id: 'cxTime', //dom节点ID
index: 0, // 选中时间节点
sort: 'just', // 正序just反序back, 其他表示不排序
sortKey: 'handleTime', //排序的参数key
// activeColor: '#26a69a', // 选中颜色
props: ['handleName','handleTime','followingContent'], //展示的key
}
var masterId=$("#idLab").html();
$.ajax({
url: "${path}/medicalHandle/getTimeLine?masterId=" + masterId,
type: "GET",
success: function (result) {
param.data = result;
oTimeAxiosFun = new oTimeAxios(param);
}, error: function () {
toastr.error("操作失败!");
}
});
})
</script>

Loading…
Cancel
Save