修改ca签章,也改成关闭了

master
zengwh 2 years ago
parent 7a6e0df6fd
commit 73c314b1f4

@ -429,67 +429,69 @@ public class FontController {
@RequestMapping(value = "sendMessageWith")
public void sendMessageWith(HttpServletRequest request, String title, String content,String typeFlag) {
try {
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
String deptId = user.getRemark();
OverdueRemindVO overdueRemindVO= new OverdueRemindVO();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String date2="2021-01-01";
Date date1=null;
try {
date1=format.parse(date2);
} catch (ParseException e) {
e.printStackTrace();
}
overdueRemindVO.setDate1(date1);
//查询主治医生id
String s = user.getUserName();
Integer userId = user.getUserId();
overdueRemindVO.setDoctorInCharge(s);
//判断这个医生今天是否已读超期消息提醒
int i = overdueRemindService.selectOverdueStatcByDoctorId(overdueRemindVO);
if (i ==0) {
//查询该主治医生有多少超期的病案未归档
if (deptId.equals("病案室")){
StringBuffer sb = new StringBuffer();
String deptId1 = user.getDeptIdQuality();
String deptIdQuality = deptId1.replaceAll("\\b", "'");
List<OverdueRemindVO> overdueRemindVOS = overdueRemindService.selectoverdueNumAndQualityControl(deptIdQuality);
for (int b=0;overdueRemindVOS.size()>b;b++){
String overdueNum = overdueRemindVOS.get(b).getOverdueNum();
String name = overdueRemindVOS.get(b).getName();
sb.append(name+"有:"+overdueNum+"份,");
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
if(null != user) {
String deptId = user.getRemark();
OverdueRemindVO overdueRemindVO = new OverdueRemindVO();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String date2 = "2021-01-01";
Date date1 = null;
try {
date1 = format.parse(date2);
} catch (ParseException e) {
e.printStackTrace();
}
String string = sb.toString();
if (!string.equals("")){
content = "尊敬的质控老师!您质控的科室'" + string + "'应归档的病案未归档";
}else {
content = "尊敬的质控老师!您质控的科室'" + "没有" + "'应归档的病案未归档";
overdueRemindVO.setDate1(date1);
//查询主治医生id
String s = user.getUserName();
Integer userId = user.getUserId();
overdueRemindVO.setDoctorInCharge(s);
//判断这个医生今天是否已读超期消息提醒
int i = overdueRemindService.selectOverdueStatcByDoctorId(overdueRemindVO);
if (i == 0) {
//查询该主治医生有多少超期的病案未归档
if (deptId.equals("病案室")) {
StringBuffer sb = new StringBuffer();
String deptId1 = user.getDeptIdQuality();
String deptIdQuality = deptId1.replaceAll("\\b", "'");
List<OverdueRemindVO> overdueRemindVOS = overdueRemindService.selectoverdueNumAndQualityControl(deptIdQuality);
for (int b = 0; overdueRemindVOS.size() > b; b++) {
String overdueNum = overdueRemindVOS.get(b).getOverdueNum();
String name = overdueRemindVOS.get(b).getName();
sb.append(name + "有:" + overdueNum + "份,");
}
String string = sb.toString();
if (!string.equals("")) {
content = "尊敬的质控老师!您质控的科室'" + string + "'应归档的病案未归档";
} else {
content = "尊敬的质控老师!您质控的科室'" + "没有" + "'应归档的病案未归档";
}
Map<String, String> map = new HashMap<>();
map.put("title", "未归档的病案通知");
map.put("content", content);
map.put("sysFlag", "emr_medical_record");
map.put("userId", userId + "");
map.put("typeFlag", typeFlag);
HttpClientUtils.doGet(POWER_URLHEAD + "/font/sendMessage", map);
//保存到提醒日志
overdueRemindVO.setDOCTOR_IN_CHARGE(s);
overdueRemindService.insertRemind(overdueRemindVO);
} else {
String overdueNum = overdueRemindService.selectoverdueNumAndDoctorId(overdueRemindVO);
content = "尊敬的医生!您有'" + overdueNum + "'条超期的病案未归档";
Map<String, String> map = new HashMap<>();
map.put("title", "超期的病案通知");
map.put("content", content);
map.put("sysFlag", "emr_medical_record");
map.put("userId", userId + "");
map.put("typeFlag", typeFlag);
HttpClientUtils.doGet(POWER_URLHEAD + "/font/sendMessage", map);
//保存到提醒日志
overdueRemindVO.setDOCTOR_IN_CHARGE(s);
overdueRemindService.insertRemind(overdueRemindVO);
}
}
Map<String, String> map = new HashMap<>();
map.put("title", "未归档的病案通知");
map.put("content", content);
map.put("sysFlag", "emr_medical_record");
map.put("userId", userId + "");
map.put("typeFlag", typeFlag);
HttpClientUtils.doGet(POWER_URLHEAD + "/font/sendMessage", map);
//保存到提醒日志
overdueRemindVO.setDOCTOR_IN_CHARGE(s);
overdueRemindService.insertRemind(overdueRemindVO);
}else {
String overdueNum = overdueRemindService.selectoverdueNumAndDoctorId(overdueRemindVO);
content = "尊敬的医生!您有'" + overdueNum + "'条超期的病案未归档";
Map<String, String> map = new HashMap<>();
map.put("title", "超期的病案通知");
map.put("content", content);
map.put("sysFlag", "emr_medical_record");
map.put("userId", userId + "");
map.put("typeFlag", typeFlag);
HttpClientUtils.doGet(POWER_URLHEAD + "/font/sendMessage", map);
//保存到提醒日志
overdueRemindVO.setDOCTOR_IN_CHARGE(s);
overdueRemindService.insertRemind(overdueRemindVO);
}
}
} catch (Exception e) {
e.printStackTrace();
}

@ -0,0 +1,7 @@
package com.emr.dao;
import com.emr.entity.Archive_Detail_ca_reqParam;
public interface Archive_Detail_ca_reqParamMapper {
Archive_Detail_ca_reqParam selectAll();
}

@ -0,0 +1,16 @@
package com.emr.entity;
import lombok.Data;
/**
* @author
* @description: XXX
* @createTime 2023/9/15 16:08
*/
@Data
public class Archive_Detail_ca_reqParam {
private Integer signLeft;
private Integer signTop;
private Integer signRight;
private Integer signBottom;
}

@ -5,17 +5,20 @@ import cn.org.bjca.seal.esspdf.client.message.ChannelMessage;
import cn.org.bjca.seal.esspdf.client.message.RectangleBean;
import cn.org.bjca.seal.esspdf.client.tools.AnySignClientTool;
import cn.org.bjca.seal.esspdf.client.utils.ClientUtil;
import com.emr.dao.Archive_Detail_ca_reqParamMapper;
import com.emr.dto.Archive_DetailPdfPathDto;
import com.emr.entity.Archive_Detail_caSign;
import com.emr.entity.Archive_Detail_ca_reqParam;
import com.emr.service.Archive_DetailService;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfReader;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.io.*;
@ -40,14 +43,6 @@ public class CaSignServiceImpl {
private int caServerPort;
@Value("${signNo}")
private String signNo;
@Value("${signLeft}")
private String signLeft;
@Value("${signTop}")
private String signTop;
@Value("${signRight}")
private String signRight;
@Value("${signBottom}")
private String signBottom;
@Value("${isCaOpen}")
private int isCaOpen;
@Value("${caCopyPath}")
@ -56,6 +51,8 @@ public class CaSignServiceImpl {
private Archive_DetailService archiveDetailService;
@Resource
private Archive_Detai_CaSignServiceImpl archiveDetaiCaSignService;
@Resource
private Archive_Detail_ca_reqParamMapper archiveDetailCaReqParamMapper;
/**
* @Description: caSignByMasterIdmasterIdca
* @param: [masterId]
@ -72,6 +69,8 @@ public class CaSignServiceImpl {
try {
List<Archive_DetailPdfPathDto> pdfPathList = archiveDetailService.getPdfPathByMasterId(masterId);
if (!CollectionUtils.isEmpty(pdfPathList)) {
//查询签章位置比例
Archive_Detail_ca_reqParam caReqParam = archiveDetailCaReqParamMapper.selectAll();
//定义此次需要签章的文件id集合
List<String> idList = new ArrayList<>();
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
@ -86,7 +85,7 @@ public class CaSignServiceImpl {
//备份源文件
caCopyFile(pdfPath, todayDate, masterId);
//进行签章
boolean isSign = caSign(pdfPath);
boolean isSign = caSign(pdfPath,caReqParam);
if (isSign) {
idList.add(dto.getId());
}
@ -159,7 +158,8 @@ public class CaSignServiceImpl {
* @author
* @createTime 2023/7/25 10:30
*/
private boolean caSign(String fileSrc) throws Exception {
private boolean caSign(String fileSrc,Archive_Detail_ca_reqParam caReqParam) throws Exception {
System.out.println("fileSrc:"+fileSrc);
//定义是否成功
boolean flag = false;
PdfReader pdfReader = null;
@ -169,38 +169,51 @@ public class CaSignServiceImpl {
e.printStackTrace();
}
if (pdfReader != null) {
anySignClientTool = new AnySignClientTool(caServerIp, caServerPort);
File file = new File(fileSrc);
byte[] pdfBty = ClientUtil.readFileToByteArray(file);
//pdf验章
ChannelMessage messageExist = anySignClientTool.pdfVerify(pdfBty);
if(!StringUtils.isEmpty(messageExist.getStatusInfo()) && "pdf文档未签章".equals(messageExist.getStatusInfo())) {
RectangleBean bean = new RectangleBean();
bean.setLeft(Float.valueOf(signLeft));
bean.setTop(Float.valueOf(signTop));
bean.setRight(Float.valueOf(signRight));
bean.setBottom(Float.valueOf(signBottom));
int numberOfPages = pdfReader.getNumberOfPages();
for (int i = 0; i < numberOfPages; i++) {
if (i != 0) {
pdfBty = ClientUtil.readFileToByteArray(file);
}
bean.setPageNo(i + 1);
ChannelMessage message = null;
message = anySignClientTool.pdfSignByParam(pdfBty, signNo, bean);
if ("200".equals(message.getStatusCode())) {//成功
ClientUtil.writeByteArrayToFile(new File(fileSrc), message.getBody());
} else {
String statusCode = message.getStatusCode();
String statusInfo = message.getStatusInfo();
System.out.println("statusCode=" + statusCode + ";statusInfo=" + statusInfo);
try {
anySignClientTool = new AnySignClientTool(caServerIp, caServerPort);
File file = new File(fileSrc);
byte[] pdfBty = ClientUtil.readFileToByteArray(file);
//pdf验章
ChannelMessage messageExist = anySignClientTool.pdfVerify(pdfBty);
if(!StringUtils.isEmpty(messageExist.getStatusInfo()) && "pdf文档未签章".equals(messageExist.getStatusInfo())) {
RectangleBean bean = new RectangleBean();
int numberOfPages = pdfReader.getNumberOfPages();
for (int i = 0; i < numberOfPages; i++) {
if (i != 0) {
pdfBty = ClientUtil.readFileToByteArray(file);
}
bean.setPageNo(i + 1);
ChannelMessage message = null;
//获取pdf的高宽
Rectangle pageSize = pdfReader.getPageSizeWithRotation(i+1);
// 获取页面的宽度和高度
float width = pageSize.getWidth();
float height = pageSize.getHeight();
System.out.println("pdf尺寸width:"+width+"height:"+height);
bean.setLeft(Float.valueOf(width - caReqParam.getSignLeft()));
bean.setTop(Float.valueOf(caReqParam.getSignTop()));
bean.setRight(Float.valueOf(width));
bean.setBottom(Float.valueOf(caReqParam.getSignBottom()));
System.out.println("左:"+bean.getLeft()+",上:"+bean.getTop()+",右:"+bean.getRight()+",下:"+bean.getBottom());
message = anySignClientTool.pdfSignByParam(pdfBty, signNo, bean);
if ("200".equals(message.getStatusCode())) {//成功
ClientUtil.writeByteArrayToFile(new File(fileSrc), message.getBody());
System.out.println("签章成功");
} else {
String statusCode = message.getStatusCode();
String statusInfo = message.getStatusInfo();
log.error("statusCode=" + statusCode + ";statusInfo=" + statusInfo);
}
}
}
flag = true;
}catch (Exception e){
e.printStackTrace();
}
flag = true;
} else {
log.error("进行签章pdf"+fileSrc+"不存在或损坏");
}
System.out.println("完成");
return flag;
}
}

@ -46,7 +46,7 @@
<property name="timeBetweenEvictionRunsMillis" value="-1"/>
<property name="minIdle" value="20"/>
<property name="removeAbandoned" value="true"/>
<property name="removeAbandonedTimeout" value="180"/>
<property name="removeAbandonedTimeout" value="1800"/>
<property name="logAbandoned" value="true"/>
<property name="testWhileIdle" value="true"/>
<property name="validationQuery" value="SELECT 'x'"/>

@ -1,27 +1,19 @@
#\u662F\u5426\u5F00\u542F\u63A5\u53E3 1:\u5F00\u542F\uFF1B0:\u5173\u95ED
isCaOpen=1
isCaOpen=0
#ca\u63A5\u53E3ip
#caServerIp=10.6.0.88
##ca\u63A5\u53E3\u7AEF\u53E3
#caServerPort=8002
#\u7B7E\u7AE0\u7F16\u53F7
#signNo=3012E4D7D234DC58
caServerIp=10.6.0.88
#ca\u63A5\u53E3\u7AEF\u53E3
caServerPort=8002
\u7B7E\u7AE0\u7F16\u53F7
signNo=3012E4D7D234DC58
#\u7B7E\u7AE0\u7BA1\u7406\u540E\u53F0\u8D26\u53F7\uFF1Aoperator \u5BC6\u7801\uFF1A111111
#\u5916\u7F51\u6D4B\u8BD5
#ca\u63A5\u53E3ip
caServerIp=223.70.139.221
#ca\u63A5\u53E3\u7AEF\u53E3
caServerPort=18002
##\u7B7E\u7AE0\u7F16\u53F7
signNo=59BC18FE5DEB0F15
#\u7B7E\u7AE0\u4F4D\u7F6E\u5DE6\u504F
signLeft=100
#\u7B7E\u7AE0\u4F4D\u7F6E\u4E0A\u504F
signTop=750
#\u7B7E\u7AE0\u4F4D\u7F6E\u53F3\u504F
signRight=150
#\u7B7E\u7AE0\u4F4D\u7F6E\u4E0B\u504F
signBottom=200
#caServerIp=223.70.139.221
##ca\u63A5\u53E3\u7AEF\u53E3
#caServerPort=18002
###\u7B7E\u7AE0\u7F16\u53F7
#signNo=59BC18FE5DEB0F15
#\u5907\u4EFD\u539F\u6587\u4EF6\u8DEF\u5F84

@ -4,8 +4,8 @@
<insert id="insertBatchCaSign">
insert into Archive_Detail_caSign(archive_detail_id,master_id,sign_time)
values
<foreach collection="list" item="item" separator="," open="(" close=")">
#{item.archiveDetailId},#{item.masterId},#{item.signTime}
<foreach collection="list" item="item" separator=",">
(#{item.archiveDetailId},#{item.masterId},#{item.signTime})
</foreach>
</insert>

@ -0,0 +1,7 @@
<?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.Archive_Detail_ca_reqParamMapper">
<select id="selectAll" resultType="com.emr.entity.Archive_Detail_ca_reqParam">
select * from Archive_Detail_ca_reqParam where id = 1
</select>
</mapper>
Loading…
Cancel
Save