From 152655510593effc6d95d54ae843b2b6166da999 Mon Sep 17 00:00:00 2001 From: linjj <850658129@qq.com> Date: Wed, 5 Feb 2025 22:20:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=BE=E7=AB=A0=E5=8A=9F=E8=83=BD=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 10 + .../com/emr/controller/TestController.java | 8 +- .../emr/controller/lastVerifyController.java | 17 +- .../java/com/emr/dao/CaDepartIdMapper.java | 33 ++ .../java/com/emr/dao/CaSignatureMapper.java | 2 + src/main/java/com/emr/entity/Power_User.java | 10 + .../emr/service/ipml/CaSignServiceImpl.java | 327 +++++++++++------- src/main/java/com/emr/vo/CaDepartIdVo.java | 17 + src/main/resources/config/caSign.properties | 9 +- .../resources/mapper/CaDepartIdMapper.xml | 27 ++ .../resources/mapper/caSignatureMapper.xml | 3 + 11 files changed, 332 insertions(+), 131 deletions(-) create mode 100644 src/main/java/com/emr/dao/CaDepartIdMapper.java create mode 100644 src/main/java/com/emr/vo/CaDepartIdVo.java create mode 100644 src/main/resources/mapper/CaDepartIdMapper.xml diff --git a/pom.xml b/pom.xml index 718cee11..75cc50d9 100644 --- a/pom.xml +++ b/pom.xml @@ -120,6 +120,16 @@ commons-collections4 4.4 + + com.squareup.okhttp3 + okhttp + 4.9.0 + + + org.json + json + 20210307 + org.apache.httpcomponents diff --git a/src/main/java/com/emr/controller/TestController.java b/src/main/java/com/emr/controller/TestController.java index fa5004de..7a9a0a40 100644 --- a/src/main/java/com/emr/controller/TestController.java +++ b/src/main/java/com/emr/controller/TestController.java @@ -35,10 +35,10 @@ public class TestController { @RequestMapping("font/test") @ResponseBody public String test(String masterId) throws Exception { - long start = System.currentTimeMillis(); - caSignService.caSignByMasterId(masterId); - long end = System.currentTimeMillis(); -// System.out.println("执行后:" + (end - start)); +// long start = System.currentTimeMillis(); +// caSignService.caSignByMasterId(masterId); +// long end = System.currentTimeMillis(); +//// System.out.println("执行后:" + (end - start)); return "完成"; } diff --git a/src/main/java/com/emr/controller/lastVerifyController.java b/src/main/java/com/emr/controller/lastVerifyController.java index 3a0efd82..681887bc 100644 --- a/src/main/java/com/emr/controller/lastVerifyController.java +++ b/src/main/java/com/emr/controller/lastVerifyController.java @@ -258,6 +258,15 @@ public class lastVerifyController { } request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); + // 从session获取用户名 + Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER"); + String handleName = user.getUserPosition();//姓名 + String username = user.getUserName();//工号 + //调用ca签章接口 + Msg msg = caSignService.caSignByMasterId(emrFaultDetail.getArchiveDetailId(), user); + if (msg.getCode()==200){ + return Msg.fail("使用签章时失败"); + } //修改病案归档状态 Archive_Master archiveMaster = new Archive_Master(); archiveMaster.setId(emrFaultDetail.getArchiveDetailId()); @@ -267,6 +276,7 @@ public class lastVerifyController { //归档记录添加到commomtable表 CommomVo commomVo = new CommomVo(); archiveMaster.setCmtNurse(1); + List archiveMasters = archiveMasterService.selectCommonlyUsed(emrFaultDetail.getArchiveDetailId()); for (Archive_Master list : archiveMasters) { commomVo.setPatientId(list.getId()); @@ -283,10 +293,6 @@ public class lastVerifyController { } //添加初审内容 if (bol == 1) { - // 从session获取用户名 - Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER"); - String handleName = user.getUserPosition();//姓名 - String username = user.getUserName();//工号 SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowTime = format1.format(new Date()); emrFaultDetail.setCreater(username); @@ -310,8 +316,6 @@ public class lastVerifyController { //留观号审核推送第三方 archiveMasterService.requestObservationRecord(inpatientNo,"AUDITED",null,null); } - //调用ca签章接口 - caSignService.caSignByMasterId(emrFaultDetail.getArchiveDetailId()); } return Msg.success(); } @@ -331,7 +335,6 @@ public class lastVerifyController { // 从session获取用户名 Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER"); String username = user.getUserName();//获取前面登录的用户名 - //参数输入 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowTime = format.format(new Date()); diff --git a/src/main/java/com/emr/dao/CaDepartIdMapper.java b/src/main/java/com/emr/dao/CaDepartIdMapper.java new file mode 100644 index 00000000..e1f5e2f9 --- /dev/null +++ b/src/main/java/com/emr/dao/CaDepartIdMapper.java @@ -0,0 +1,33 @@ +package com.emr.dao; + +import com.emr.vo.CaDepartIdVo; +import org.apache.ibatis.annotations.Param; + +/** + *@InterfaceName CaDepartIdMapper + *@Description 获得签章id接口 + *@Author linjj + *@Date 2025/2/5 11:31 + *@Version 1.0 + */ +public interface CaDepartIdMapper { + + /** + * @description: 判断该科室是否已经获得签章 + * @params: dataName + * @return: CaDepartIdVo + * @author linjj + * @date: 2025/2/5 11:36 + */ + + CaDepartIdVo getDepartId(String dataName); + + /** + * @description: 添加部门标识 + * @params: dataName + * @return: int + * @author linjj + * @date: 2025/2/5 12:27 + */ + int addDepartId(@Param(value = "dataName") String dataName,@Param(value = "dataId") String dataId); +} diff --git a/src/main/java/com/emr/dao/CaSignatureMapper.java b/src/main/java/com/emr/dao/CaSignatureMapper.java index 2bb46ae6..4f179fb1 100644 --- a/src/main/java/com/emr/dao/CaSignatureMapper.java +++ b/src/main/java/com/emr/dao/CaSignatureMapper.java @@ -15,4 +15,6 @@ public interface CaSignatureMapper { int getCaMasterId(@Param("masterId") String masterId,@Param("signatureStatic") int signatureStatic); + int delCaMasterId(@Param("masterId") String masterId); + } diff --git a/src/main/java/com/emr/entity/Power_User.java b/src/main/java/com/emr/entity/Power_User.java index f7b6f983..08db2bcc 100644 --- a/src/main/java/com/emr/entity/Power_User.java +++ b/src/main/java/com/emr/entity/Power_User.java @@ -34,6 +34,16 @@ public class Power_User { private String deptId; + private String phone; + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + private String deptCode; public String getDeptCode() { diff --git a/src/main/java/com/emr/service/ipml/CaSignServiceImpl.java b/src/main/java/com/emr/service/ipml/CaSignServiceImpl.java index 9a1f9aec..53415fde 100644 --- a/src/main/java/com/emr/service/ipml/CaSignServiceImpl.java +++ b/src/main/java/com/emr/service/ipml/CaSignServiceImpl.java @@ -7,25 +7,36 @@ import cn.org.bjca.seal.esspdf.client.tools.AnySignClientTool; import cn.org.bjca.seal.esspdf.client.utils.ClientUtil; import com.emr.dao.ArchiveDetailCaCopyMapper; import com.emr.dao.Archive_Detail_ca_reqParamMapper; +import com.emr.dao.CaDepartIdMapper; import com.emr.dao.CaSignatureMapper; import com.emr.dto.Archive_DetailPdfPathDto; import com.emr.entity.Archive_Detail_caSign; import com.emr.entity.Archive_Detail_ca_reqParam; +import com.emr.entity.Power_User; import com.emr.service.Archive_DetailService; +import com.emr.util.Msg; +import com.emr.vo.CaDepartIdVo; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.PdfReader; import lombok.extern.slf4j.Slf4j; +import okhttp3.OkHttpClient; import org.apache.commons.lang3.StringUtils; +import org.json.JSONObject; 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 okhttp3.*; import javax.annotation.Resource; import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.file.Files; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Base64; import java.util.Date; import java.util.List; @@ -61,6 +72,17 @@ public class CaSignServiceImpl { private CaSignatureMapper caSignatureMapper; @Resource private ArchiveDetailCaCopyMapper archiveDetailCaCopyMapper; + @Resource + private CaDepartIdMapper caDepartIdMapper; + @Value("${synDepartUrl}") + private String synDepartUrl; + @Value("${signUrl}") + private String signUrl; + + @Value("${clientId}") + private String clientId; + @Value("${clientSecret}") + private String clientSecret; /** * @Description: caSignByMasterId方法是根据masterId查询所有文件进行ca签章 @@ -69,17 +91,29 @@ public class CaSignServiceImpl { * @author 曾文和 * @createTime 2023/7/25 15:52 */ - @Async - public void caSignByMasterId(String masterId) { + public Msg caSignByMasterId(String masterId, Power_User user) { if (isCaOpen == 0) { - return; + return Msg.success(); } //根据masterId查询文件集合 try { List pdfPathList = archiveDetailService.getPdfPathByMasterId(masterId); if (!CollectionUtils.isEmpty(pdfPathList)) { + //判断该部门是否存在签章 + CaDepartIdVo caDepartIdVo = caDepartIdMapper.getDepartId(user.getRemark()); + //没有保存部门签章id时需要请求获取一个新的departId + if (caDepartIdVo==null){ + //请求医院科室在医网信标识id + String departId = getDepartId(user); + caDepartIdMapper.addDepartId(user.getRemark(),departId); + return Msg.fail("该用户科室没有在医信网平台申请部门签章请联系医信网人员"); + } + if (StringUtils.isBlank(caDepartIdVo.getDataId())) { + return Msg.fail("部门标识为空"); + } + String dataId = caDepartIdVo.getDataId(); //保存文件表数据list - List list=new ArrayList<>(); + List list = new ArrayList<>(); //签章后保存目录 String newPath = newPdfPath + File.separator + masterId; //没有目录创建目录 @@ -94,25 +128,29 @@ public class CaSignServiceImpl { List failIdList = new ArrayList<>(); //遍历文件集合 for (Archive_DetailPdfPathDto dto : pdfPathList) { + SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + //获取今天日期 + String todayDate = fmt.format(new Date()); + //签章后地址 + String newPdfPath = newPath + File.separator + todayDate+".pdf"; //获取文件路径 String pdfPath = dto.getPdfPath(); File file = new File(pdfPath); if (file.isFile()) { - SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS"); - //获取今天日期 - String todayDate = fmt.format(new Date()); - //签章后地址 - String newpdfPath = newPath + File.separator + todayDate+".pdf"; - backupsPdf(pdfPath,newpdfPath); - //进行签章 - boolean isSign = caSign(newpdfPath, caReqParam); - if (isSign) { - idList.add(dto.getId()); - dto.setPdfPath(newpdfPath); - } else { - failIdList.add(dto.getId()); - dto.setPdfPath(newpdfPath); + String pdfPathString = pdfToBase64(pdfPath); + PdfReader pdfReader = new PdfReader(pdfPath); + int pageCount = pdfReader.getNumberOfPages(); + Msg msg = sign(pdfPathString, dataId,caReqParam,pageCount); + if (msg.getCode()!=100){ + return Msg.fail(); } + String newPdfPathBase64 = msg.getMsg(); + if (!convertBase64ToPdf(newPdfPathBase64, newPdfPath)){ + return Msg.fail(); + } + dto.setPdfPath(newPdfPath); + } else { + return Msg.fail(); } list.add(dto); } @@ -120,8 +158,9 @@ public class CaSignServiceImpl { updateCaFileState(idList, failIdList, masterId); //判断是否存在,存在在先删除 int caMasterId = caSignatureMapper.getCaMasterId(masterId, 1); - if (caMasterId>0){ + if (caMasterId > 0) { archiveDetailCaCopyMapper.updateByMasterID(masterId); + caSignatureMapper.delCaMasterId(masterId); } //签章完后保存新的文件表 archiveDetailCaCopyMapper.addArchiveDetailCaCopyMapper(list); @@ -130,19 +169,161 @@ public class CaSignServiceImpl { } } catch (Exception e) { e.printStackTrace(); + return Msg.fail("请求失败"); + } + return Msg.success(); + } + + //将pdf文件base64方法 + public static String pdfToBase64(String filePath) throws IOException { + File file = new File(filePath); + // 读取文件内容到字节数组 + byte[] fileContent = Files.readAllBytes(file.toPath()); + // 将字节数组编码为Base64字符串 + return Base64.getEncoder().encodeToString(fileContent); + + } + //将base64转为pdf方法 + public Boolean convertBase64ToPdf(String base64String, String filePath) { + try { + // 解码Base64字符串 + byte[] decodedBytes = Base64.getDecoder().decode(base64String); + + // 将解码后的数据写入PDF文件 + try (FileOutputStream fos = new FileOutputStream(filePath)) { + fos.write(decodedBytes); + } + } catch (Exception e) { + e.printStackTrace(); + return false; } + return true; } - private void backupsPdf(String pdfPath,String newpdfPath){ - try (InputStream inputStream = new FileInputStream(pdfPath); - OutputStream outputStream = new FileOutputStream(newpdfPath)) { - byte[] buffer = new byte[1024]; - int bytesRead; - while ((bytesRead = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, bytesRead); + //签章接口 + private Msg sign(String pdfPathString,String departId,Archive_Detail_ca_reqParam caReqParam,int pageCount) { + // 创建OkHttpClient实例 + OkHttpClient client = new OkHttpClient(); + // 定义请求的URL + String url = signUrl; + String pdfSignBase64=""; + // 创建请求体 + String json = "{" + + "\"head\": {" + + "\"clientId\": \"" + clientId + "\"," + + "\"clientSecret\": \"" + clientSecret + "\"," + + "}," + + "\"body\": {" + + "\"pdfBase64\": \"" + pdfPathString + "\"," + + "\"departId\": \"" + departId + "\"," +// + "\"keyword\": \"医师签名\"," +// + "\"moveType\": \"1\"," +// + "\"searchOrder\": \"2\"," +// + "\"scale\": \"0.4\"," +// + "\"fileType\": \"2\"," + + "\"locationPage\": \"" + pageCount + "\"," + + "\"x\": \"" + caReqParam.getSignTop() + "\"," + + "\"y\": \"" + caReqParam.getSignLeft() + "\"," + + "}" + + "}"; + // 创建RequestBody + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); + + // 创建Request + Request request = new Request.Builder() + .url(url) + .post(requestBody) + .build(); + try { + // 执行请求 + Response response = client.newCall(request).execute(); + + // 检查响应状态码 + if (response.isSuccessful()) { + // 获取响应体 + String responseData = response.body().string(); + + // 解析JSON响应 + JSONObject jsonResponse = new JSONObject(responseData); + + // 获取返回的参数 + pdfSignBase64 = jsonResponse.getJSONObject("data").getString("pdfSignBase64"); + String status = jsonResponse.getString("status"); + if (!status.equals("0")){ + return Msg.fail("请求失败"); + } + } else { + System.out.println("请求失败,状态码:" + response.code()); + } + } catch (Exception e) { + e.printStackTrace(); + return Msg.fail(); + } + return Msg.success(pdfSignBase64); + } + + //请求医信网标识id + private String getDepartId(Power_User user) { + // 创建OkHttpClient实例 + OkHttpClient client = new OkHttpClient(); + + // 定义请求的URL + String url = synDepartUrl; + String dataId = ""; + // 创建请求体 + String json = "{" + + "\"head\": {" + + "\"clientId\": \"" + clientId + "\"," + + "\"clientSecret\": \"" + clientSecret + "\"," + + "}," + + "\"body\": {" + + "\"thirdDepartId\": \"3040000\"," + + "\"departName\": \"病案室\"," + + "\"departPhone\": \"" + user.getUserEmail() + "\"," + + "\"departPerson\": \"" + user.getUserPosition() + "\"," + + "\"clientOrgCode\": \"BAS\"," + + "\"clientOrgType\": \"ORG\"" + + "}" + + "}"; + + // 创建RequestBody + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); + + // 创建Request + Request request = new Request.Builder() + .url(url) + .post(requestBody) + .build(); + + try { + // 执行请求 + Response response = client.newCall(request).execute(); + + // 检查响应状态码 + if (response.isSuccessful()) { + // 获取响应体 + String responseData = response.body().string(); + + // 解析JSON响应 + JSONObject jsonResponse = new JSONObject(responseData); + + // 获取返回的参数 + dataId = jsonResponse.getJSONObject("data").getString("departId"); + String message = jsonResponse.getString("message"); + String status = jsonResponse.getString("status"); + boolean successful = jsonResponse.getBoolean("successful"); + + // 输出解析结果 + System.out.println("DepartId: " + dataId); + System.out.println("Message: " + message); + System.out.println("Status: " + status); + System.out.println("Successful: " + successful); + } else { + System.out.println("请求失败,状态码:" + response.code()); } - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); } + return dataId; } /** @@ -182,96 +363,4 @@ public class CaSignServiceImpl { } } - /** - * @Description: caCopyFile方法是备份ca前文件 - * @param: [pdfPath] - * @return: void - * @author 曾文和 - * @createTime 2023/7/25 15:51 - */ - private void caCopyFile(String pdfPath, String todayDate, String masterId) { - String newPath = caCopyPath + File.separator + todayDate + File.separator + masterId; - if (!new File(newPath).isDirectory()) { - new File(newPath).mkdirs(); - } - String newSrc = newPath + File.separator + new File(pdfPath).getName(); - try (InputStream inputStream = new FileInputStream(pdfPath); - OutputStream outputStream = new FileOutputStream(newSrc)) { - byte[] buffer = new byte[1024]; - int bytesRead; - while ((bytesRead = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, bytesRead); - } - System.out.println("文件拷贝完成"); - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * @Description: caSign方法是根据pdf文件路径调用ca接口进行每页签章 - * @param: [fileSrc] - * @return: void - * @author 曾文和 - * @createTime 2023/7/25 10:30 - * - * z:docus/caTemp/masterId/病案首页 - */ - private boolean caSign(String newpdfPath, Archive_Detail_ca_reqParam caReqParam) throws Exception { - //定义是否成功 - boolean flag = false; - PdfReader pdfReader = null; - try { - pdfReader = new PdfReader(newpdfPath); - } catch (Exception e) { - e.printStackTrace(); - } - if (pdfReader != null) { - try { - anySignClientTool = new AnySignClientTool(caServerIp, caServerPort); - File file = new File(newpdfPath); - 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(newpdfPath), 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(); - } - } else { - log.error("进行签章pdf:" + newpdfPath + "不存在或损坏"); - } - System.out.println("完成"); - return flag; - } } diff --git a/src/main/java/com/emr/vo/CaDepartIdVo.java b/src/main/java/com/emr/vo/CaDepartIdVo.java new file mode 100644 index 00000000..bf1f6f94 --- /dev/null +++ b/src/main/java/com/emr/vo/CaDepartIdVo.java @@ -0,0 +1,17 @@ +package com.emr.vo; + +import lombok.Data; + +/** + * @ClassName CaDepartId + * @Description 部门签章实体类 + * @Author linjj + * @Date 2025/2/5 11:38 + * @Version 1.0 + */ +@Data +public class CaDepartIdVo { + + private String dataName; + private String dataId; +} diff --git a/src/main/resources/config/caSign.properties b/src/main/resources/config/caSign.properties index b01358b1..7ab05745 100644 --- a/src/main/resources/config/caSign.properties +++ b/src/main/resources/config/caSign.properties @@ -14,8 +14,15 @@ signNo=3012E4D7D234DC58 #caServerPort=18002 ###\u7B7E\u7AE0\u7F16\u53F7 #signNo=59BC18FE5DEB0F15 +#\u8bf7\u6c42\u533b\u9662\u79d1\u5ba4\u5728\u533b\u7f51\u4fe1\u6807\u8bc6id +synDepartUrl=https://test.51trust.com/gateway/pdf/synDepart +signUrl=https://test.51trust.com/gateway/pdf/sign +#\u7b2c\u4e09\u65b9\u8d26\u53f7\u6807\u8bc6 +clientId=2017070411003376 +#\u7b2c\u4e09\u65b9\u8d26\u53f7\u79d8\u94a5 +clientSecret=2017070411003360 #\u5907\u4EFD\u539F\u6587\u4EF6\u8DEF\u5F84 caCopyPath=d:docus/caCopy -newPdfPath=z:/caPdfs \ No newline at end of file +newPdfPath=d:\\caPdfs \ No newline at end of file diff --git a/src/main/resources/mapper/CaDepartIdMapper.xml b/src/main/resources/mapper/CaDepartIdMapper.xml new file mode 100644 index 00000000..4c06333e --- /dev/null +++ b/src/main/resources/mapper/CaDepartIdMapper.xml @@ -0,0 +1,27 @@ + + + + + insert into CaDepartId + + + dataName, + + + dataId, + + + + + #{dataName,jdbcType=NVARCHAR}, + + + #{dataId,jdbcType=NVARCHAR}, + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/caSignatureMapper.xml b/src/main/resources/mapper/caSignatureMapper.xml index dda5b27c..76d55682 100644 --- a/src/main/resources/mapper/caSignatureMapper.xml +++ b/src/main/resources/mapper/caSignatureMapper.xml @@ -6,6 +6,9 @@ insert into ca_signature(master_id,signature_static) values(#{masterId},#{signatureStatic}) + + delete FROM ca_signature where master_id=#{masterId} +