diff --git a/pom.xml b/pom.xml index 7724959..2df0aa2 100644 --- a/pom.xml +++ b/pom.xml @@ -108,7 +108,21 @@ springfox-swagger2 2.9.2 - + + com.syjiaer.common + bcpkix + 1.60 + + + com.syjiaer.common + bcprov + 1.60 + + + com.syjiaer.common + EncUtil + 1.00 + io.springfox springfox-swagger-ui diff --git a/src/main/java/com/syjiaer/clinic/server/common/util/EncUtil.java b/src/main/java/com/syjiaer/clinic/server/common/util/EncUtil.java new file mode 100644 index 0000000..b632270 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/common/util/EncUtil.java @@ -0,0 +1,88 @@ +package com.syjiaer.clinic.server.common.util; + +import cn.hsaf.common.utils.EasyGmUtils; +import cn.hsaf.common.utils.SignUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import org.bouncycastle.util.encoders.Hex; + +import java.util.Base64; + +public class EncUtil { + + + /** + * 加密 + * + * @param data + * @param appId + * @param appSecret + * @return + * @throws Exception + */ + public static String encrypt(String data, String appId, String appSecret) throws Exception { + //加密流程 + //用appId加密appSecret获取新秘钥 + byte[] appSecretEncData = EasyGmUtils.sm4Encrypt(appId.substring(0, 16).getBytes("UTF-8"), appSecret.getBytes("UTF-8")); + //新秘钥串 + byte[] secKey = Hex.toHexString(appSecretEncData).toUpperCase().substring(0, 16).getBytes("UTF-8"); + //加密0数据 + String encryptDataStr = Hex.toHexString(EasyGmUtils.sm4Encrypt(secKey, data.getBytes("UTF-8"))).toUpperCase(); + return encryptDataStr; + } + + /** + * 解密 + * + * @param data + * @param appId + * @param appSecret + * @return + * @throws Exception + */ + public static String decrypt(String data, String appId, String appSecret) throws Exception { + byte[] appSecretEncDataDecode = EasyGmUtils.sm4Encrypt(appId.substring(0, 16).getBytes("UTF-8"), appSecret.getBytes("UTF-8")); + byte[] secKeyDecode = Hex.toHexString(appSecretEncDataDecode).toUpperCase().substring(0, 16).getBytes("UTF-8"); + String decryptDataStr = new String(EasyGmUtils.sm4Decrypt(secKeyDecode, Hex.decode(data))); + return decryptDataStr; + } + + /** + * 签名 + * + * @param jsonObject + * @param appSecret + * @param privateKey + * @return + * @throws Exception + */ + public static String sign(JSONObject jsonObject, String appSecret, String privateKey) throws Exception { + // 获取签名串 + byte[] signText = SignUtil.getSignText(jsonObject, appSecret).getBytes("UTF-8"); + byte[] userId = appSecret.getBytes(); + byte[] prvkey = Base64.getDecoder().decode(privateKey); + String responseSign = Base64.getEncoder().encodeToString(EasyGmUtils.signSm3WithSm2(signText, userId, prvkey)); + return responseSign; + } + + /** + * 验签 + * + * @param jsonObject + * @param appSecret + * @param publicKey + * @param responseSign + * @return + * @throws Exception + */ + public static boolean verify(JSONObject jsonObject, String appSecret, String publicKey, String responseSign) throws Exception { + //验签 + byte[] msg = SignUtil.getSignText(jsonObject, appSecret).getBytes("UTF-8"); + byte[] userIdDecode = appSecret.getBytes("UTF-8"); + byte[] pubkey = Base64.getDecoder().decode(publicKey); + byte[] signData = Base64.getDecoder().decode(responseSign); + return EasyGmUtils.verifySm3WithSm2(msg, userIdDecode, signData, pubkey); + } + + +} diff --git a/src/main/java/com/syjiaer/clinic/server/service/diagnosis/DiagnosisService.java b/src/main/java/com/syjiaer/clinic/server/service/diagnosis/DiagnosisService.java index 734214c..23f9192 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/diagnosis/DiagnosisService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/diagnosis/DiagnosisService.java @@ -102,6 +102,15 @@ public class DiagnosisService extends BaseService { @Transactional(rollbackFor = Exception.class) public void save(MedicalRecordSaveDto saveDto) { + int regisId =saveDto.getRegistrationId(); + + QueryWrapper queryWrapperRegis = new QueryWrapper<>(); + queryWrapperRegis.eq("registration_id", regisId); + Diagnosis regisDbDiagnosis = diagnosisMapper.selectOne(queryWrapperRegis); + if(regisDbDiagnosis!=null){ + throw new MessageException("该挂号已完诊,请不要重复完诊"); + } + if (saveDto == null){ throw new MessageException("参数不能为空"); }