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/controller/patient/RegistrationController.java b/src/main/java/com/syjiaer/clinic/server/controller/patient/RegistrationController.java
index 8030d31..0f2eea0 100644
--- a/src/main/java/com/syjiaer/clinic/server/controller/patient/RegistrationController.java
+++ b/src/main/java/com/syjiaer/clinic/server/controller/patient/RegistrationController.java
@@ -123,7 +123,7 @@ public class RegistrationController extends BaseController {
@RequestMapping("/getListByType")
public Result> getListByType() {
RegistrationQuery query = parmsUtil.getObject("query", RegistrationQuery.class);
- return success(patientRegistrationService.getPageByType(query));
+ return success(patientRegistrationService.getListByType(query));
}
/**
diff --git a/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientRegistration.java b/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientRegistration.java
index 2e0ad30..cbbb813 100644
--- a/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientRegistration.java
+++ b/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientRegistration.java
@@ -1,25 +1,25 @@
package com.syjiaer.clinic.server.entity.patient;
import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
/**
*
* 挂号表
*
*
* @author NiuZiYuan
- * @since 2025-04-30
+ * @since 2025-05-23
*/
@Getter
@Setter
@@ -93,4 +93,11 @@ public class PatientRegistration implements Serializable {
@ApiModelProperty("流水号")
private String fstNo;
+
+ @ApiModelProperty("挂号时间")
+ private LocalDateTime appointmentTime;
+
+ @ApiModelProperty("是否预约")
+ @TableField(exist = false)
+ private Boolean isAppointment;
}
diff --git a/src/main/java/com/syjiaer/clinic/server/entity/patient/dto/RegistrationSaveDto.java b/src/main/java/com/syjiaer/clinic/server/entity/patient/dto/RegistrationSaveDto.java
index 31d8594..b5e828f 100644
--- a/src/main/java/com/syjiaer/clinic/server/entity/patient/dto/RegistrationSaveDto.java
+++ b/src/main/java/com/syjiaer/clinic/server/entity/patient/dto/RegistrationSaveDto.java
@@ -79,4 +79,6 @@ public class RegistrationSaveDto {
@ApiModelProperty("医保余额")
private BigDecimal insuBalance;
+ @ApiModelProperty("预约时间")
+ private String appointmentTime;
}
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("参数不能为空");
}
diff --git a/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java b/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java
index da11b6a..6a3a508 100644
--- a/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java
+++ b/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java
@@ -13,6 +13,7 @@ import com.syjiaer.clinic.server.common.exception.MessageException;
import com.syjiaer.clinic.server.common.util.DateUtil;
import com.syjiaer.clinic.server.common.util.StringUtil;
import com.syjiaer.clinic.server.common.vo.Page;
+import com.syjiaer.clinic.server.entity.manager.ManagerUser;
import com.syjiaer.clinic.server.entity.organization.OrganizationMember;
import com.syjiaer.clinic.server.entity.organization.OrganizationSection;
import com.syjiaer.clinic.server.entity.patient.PatientInfo;
@@ -21,6 +22,7 @@ import com.syjiaer.clinic.server.entity.patient.dto.RegistrationQuery;
import com.syjiaer.clinic.server.entity.patient.dto.RegistrationSaveDto;
import com.syjiaer.clinic.server.entity.patient.vo.PatientAndRegistrationInfoVo;
import com.syjiaer.clinic.server.entity.patient.vo.PatientRegistrationVo;
+import com.syjiaer.clinic.server.mapper.manager.ManagerUserMapper;
import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper;
import com.syjiaer.clinic.server.mapper.organization.OrganizationSectionMapper;
import com.syjiaer.clinic.server.mapper.patient.PatientInfoMapper;
@@ -35,6 +37,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -53,6 +57,8 @@ public class PatientRegistrationService extends BaseService {
@Autowired
private OrganizationSectionMapper organizationSectionMapper;
@Autowired
+ private ManagerUserMapper managerUserMapper;
+ @Autowired
@Lazy
private PatientRegistrationService patientRegistrationService;
@Autowired
@@ -75,6 +81,20 @@ public class PatientRegistrationService extends BaseService {
throw new MessageException("证件号码不能为空");
}
+ LocalDateTime appointmentTime=null;
+ if(registrationParam.getAppointmentTime()!=null &&!registrationParam.getAppointmentTime().isEmpty()){
+ try{
+ appointmentTime = LocalDateTime.parse(registrationParam.getAppointmentTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
+ }
+ catch (Exception e){
+ appointmentTime=LocalDateTime.now();
+ }
+
+ }
+
+ if(appointmentTime==null||appointmentTime.isBefore(LocalDateTime.now())){
+ appointmentTime=LocalDateTime.now();
+ }
LocalDateTime now = LocalDateTime.now();
String fstNo = StringUtil.getCode("FSN");
@@ -96,6 +116,7 @@ public class PatientRegistrationService extends BaseService {
BeanUtils.copyProperties(registrationParam, registration);
registration.setFstNo(fstNo);
registration.setRegistrationMoney(new BigDecimal("0"));
+ registration.setAppointmentTime(appointmentTime);
registration.setCreateDatetime(now);
registration.setStatus(1);
OrganizationMember docker = organizationMemberMapper.selectById(registration.getOrganizationDoctorId());
@@ -235,9 +256,42 @@ public class PatientRegistrationService extends BaseService {
* 根据查询条件查询挂号信息
* @param query 查询条件
*/
- public Page getPageByType(RegistrationQuery query) {
+ public Page getListByType(RegistrationQuery query) {
+ ManagerUser user = getManagerUser();
+ List Beforlist = patientRegistrationMapper.selectList(getQueryWrapper(query, user,true));
+ List Afterlist = patientRegistrationMapper.selectList(getQueryWrapper(query, user,false));
+
+ List list = new ArrayList<>();
+ list.addAll(Beforlist);
+ list.addAll(Afterlist);
+ list.forEach((regis)->{
+ LocalDateTime appointmentTime = regis.getAppointmentTime();
+ if (appointmentTime.isBefore(LocalDateTime.now())) {
+ regis.setIsAppointment(false);
+ } else {
+ regis.setIsAppointment(true);
+ }
+ });
+ Page page = new Page<>();
+ page.setList(list);
+ page.setTotal_count(10000);
+ page.setTotal_page(1);
+ return page;
+ }
+
+
+ private QueryWrapper getQueryWrapper(RegistrationQuery query, ManagerUser user,boolean isBefore){
QueryWrapper regisQuery = new QueryWrapper<>();
+ ManagerUser dbUser = managerUserMapper.selectById(user.getId());
+ OrganizationMember member= null;
+ if (dbUser != null && dbUser.getOrganizationMemberId() != null){
+ member = organizationMemberMapper.selectById(dbUser.getOrganizationMemberId());
+ }
+
regisQuery.eq("del_flag", 0);
+ if (member != null && member.getRole() == 1){
+ regisQuery.eq("organization_doctor_id", member.getId());
+ }
if (query.getStatus() != null) {
regisQuery.eq("status", query.getStatus());
}
@@ -252,13 +306,19 @@ public class PatientRegistrationService extends BaseService {
query.setPageSize(Constants.DetailPageSize);
}
if (query.getBeginTime() != null) {
- regisQuery.ge("create_datetime", query.getBeginTime());
+ regisQuery.ge("appointment_time", query.getBeginTime());
}
if (query.getEndTime() != null) {
- regisQuery.le("create_datetime", query.getEndTime());
+ regisQuery.le("appointment_time", query.getEndTime());
}
-
- return pageHelper(query.getPageNum(), query.getPageSize(), regisQuery, patientRegistrationMapper, "create_datetime", false);
+ if(isBefore){
+ regisQuery.le("appointment_time", LocalDateTime.now());
+ regisQuery.orderByDesc("appointment_time");
+ }else{
+ regisQuery.ge("appointment_time", LocalDateTime.now());
+ regisQuery.orderByAsc("appointment_time");
+ }
+ return regisQuery;
}
/**
diff --git a/src/main/java/com/syjiaer/clinic/server/service/social/SocialInventoryUploadService.java b/src/main/java/com/syjiaer/clinic/server/service/social/SocialInventoryUploadService.java
index e85a16f..a9087f5 100644
--- a/src/main/java/com/syjiaer/clinic/server/service/social/SocialInventoryUploadService.java
+++ b/src/main/java/com/syjiaer/clinic/server/service/social/SocialInventoryUploadService.java
@@ -471,7 +471,7 @@ public class SocialInventoryUploadService extends BaseService {
if (chargeOrder.getPayType().equals(RetailOrderPayTypeEnum.MEDICARE.getCode())) {
//医保支付
ChargeSocialPayLog payLog = chargeSocialPayLogMapper.selectOne(new QueryWrapper().
- eq("retail_order_code", orderInventory.getChargeOrderCode()).last("limit 1"));
+ eq("charge_order_code", orderInventory.getChargeOrderCode()).last("limit 1"));
im3505.setSetlId(payLog.getSetlId());
im3505.setMdtrtSn(payLog.getMdtrtId());
im3505.setPsnNo(payLog.getPsnNo());
@@ -495,7 +495,8 @@ public class SocialInventoryUploadService extends BaseService {
List