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> drugtracinfo = new ArrayList<>(); - List TracCodgList = orderInventory.getTraceabilityCode() == null ? new ArrayList<>() + List TracCodgList = orderInventory.getTraceabilityCode() == null|| + orderInventory.getTraceabilityCode().isEmpty() ? new ArrayList<>() : Arrays.asList(orderInventory.getTraceabilityCode().split(",")); for (String tracCodg : TracCodgList) { Map map =new HashMap<>(); diff --git a/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java b/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java index f9735d4..ec7bbb8 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java @@ -7,6 +7,7 @@ import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList; import com.syjiaer.clinic.server.entity.charge.ChargeOrder; import com.syjiaer.clinic.server.entity.diagnosis.Diagnosis; import com.syjiaer.clinic.server.entity.goods.Goods; +import com.syjiaer.clinic.server.entity.manager.ManagerUser; import com.syjiaer.clinic.server.entity.organization.OrganizationMember; import com.syjiaer.clinic.server.entity.patient.PatientRegistration; import com.syjiaer.clinic.server.entity.statistics.*; @@ -14,6 +15,7 @@ import com.syjiaer.clinic.server.mapper.charge.ChargeGoodsListMapper; import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper; import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMapper; import com.syjiaer.clinic.server.mapper.goods.GoodsMapper; +import com.syjiaer.clinic.server.mapper.manager.ManagerUserMapper; import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper; import com.syjiaer.clinic.server.mapper.patient.PatientRegistrationMapper; import com.syjiaer.clinic.server.service.BaseService; @@ -39,6 +41,8 @@ public class StatisticsService extends BaseService { private DiagnosisMapper diagnosisMapper; @Autowired private GoodsMapper goodsMapper; + @Autowired + private ManagerUserMapper managerUserMapper; public RevenueOverviewVo getRevenueOverview(LocalDateTime begin, LocalDateTime end) { RevenueOverviewVo overviewVo = new RevenueOverviewVo(); @@ -187,29 +191,46 @@ public class StatisticsService extends BaseService { } public TipCountVo getWaitCount(LocalDateTime beginTime, LocalDateTime endTime) { + ManagerUser user = getManagerUser(); + ManagerUser dbUser = managerUserMapper.selectById(user.getId()); + OrganizationMember member= null; + if (dbUser != null && dbUser.getOrganizationMemberId() != null){ + member = organizationMemberMapper.selectById(dbUser.getOrganizationMemberId()); + } + + TipCountVo tipCountVo = new TipCountVo(); RegistrationStatusEnum registrationStatusEnum = RegistrationStatusEnum.waiting; QueryWrapper registrationWrapper = new QueryWrapper<>(); - registrationWrapper.lt("create_datetime", endTime); - registrationWrapper.ge("create_datetime", beginTime); + registrationWrapper.lt("appointment_time", endTime); + registrationWrapper.ge("appointment_time", beginTime); registrationWrapper.eq("status", registrationStatusEnum.getStatus()); registrationWrapper.eq("del_flag",0); + if (member != null && member.getRole() == 1){ + registrationWrapper.eq("organization_doctor_id", member.getId()); + } tipCountVo.setWaitDiagnosisCount(patientRegistrationMapper.selectCount(registrationWrapper)); registrationStatusEnum = RegistrationStatusEnum.inProgress; registrationWrapper = new QueryWrapper<>(); - registrationWrapper.lt("create_datetime", endTime); - registrationWrapper.ge("create_datetime", beginTime); + registrationWrapper.lt("appointment_time", endTime); + registrationWrapper.ge("appointment_time", beginTime); registrationWrapper.eq("status", registrationStatusEnum.getStatus()); registrationWrapper.eq("del_flag",0); + if (member != null && member.getRole() == 1){ + registrationWrapper.eq("organization_doctor_id", member.getId()); + } tipCountVo.setDiagnosingCount(patientRegistrationMapper.selectCount(registrationWrapper)); registrationStatusEnum = RegistrationStatusEnum.complete; registrationWrapper = new QueryWrapper<>(); - registrationWrapper.lt("create_datetime", endTime); - registrationWrapper.ge("create_datetime", beginTime); + registrationWrapper.lt("appointment_time", endTime); + registrationWrapper.ge("appointment_time", beginTime); registrationWrapper.eq("status", registrationStatusEnum.getStatus()); registrationWrapper.eq("del_flag",0); + if (member != null && member.getRole() == 1){ + registrationWrapper.eq("organization_doctor_id", member.getId()); + } tipCountVo.setCompleteDiaCount(patientRegistrationMapper.selectCount(registrationWrapper));