Merge branch 'master' of ssh://git.jizhiweb.cn:2222/clinic-v2/server

This commit is contained in:
佟明轩 2025-05-23 16:59:55 +08:00
commit 52233cf83a
9 changed files with 222 additions and 20 deletions

16
pom.xml
View File

@ -108,7 +108,21 @@
<artifactId>springfox-swagger2</artifactId> <artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version> <version>2.9.2</version>
</dependency> </dependency>
<dependency>
<groupId>com.syjiaer.common</groupId>
<artifactId>bcpkix</artifactId>
<version>1.60</version>
</dependency>
<dependency>
<groupId>com.syjiaer.common</groupId>
<artifactId>bcprov</artifactId>
<version>1.60</version>
</dependency>
<dependency>
<groupId>com.syjiaer.common</groupId>
<artifactId>EncUtil</artifactId>
<version>1.00</version>
</dependency>
<dependency> <dependency>
<groupId>io.springfox</groupId> <groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId> <artifactId>springfox-swagger-ui</artifactId>

View File

@ -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);
}
}

View File

@ -123,7 +123,7 @@ public class RegistrationController extends BaseController {
@RequestMapping("/getListByType") @RequestMapping("/getListByType")
public Result<Page<PatientRegistration>> getListByType() { public Result<Page<PatientRegistration>> getListByType() {
RegistrationQuery query = parmsUtil.getObject("query", RegistrationQuery.class); RegistrationQuery query = parmsUtil.getObject("query", RegistrationQuery.class);
return success(patientRegistrationService.getPageByType(query)); return success(patientRegistrationService.getListByType(query));
} }
/** /**

View File

@ -1,25 +1,25 @@
package com.syjiaer.clinic.server.entity.patient; package com.syjiaer.clinic.server.entity.patient;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/** /**
* <p> * <p>
* 挂号表 * 挂号表
* </p> * </p>
* *
* @author NiuZiYuan * @author NiuZiYuan
* @since 2025-04-30 * @since 2025-05-23
*/ */
@Getter @Getter
@Setter @Setter
@ -93,4 +93,11 @@ public class PatientRegistration implements Serializable {
@ApiModelProperty("流水号") @ApiModelProperty("流水号")
private String fstNo; private String fstNo;
@ApiModelProperty("挂号时间")
private LocalDateTime appointmentTime;
@ApiModelProperty("是否预约")
@TableField(exist = false)
private Boolean isAppointment;
} }

View File

@ -79,4 +79,6 @@ public class RegistrationSaveDto {
@ApiModelProperty("医保余额") @ApiModelProperty("医保余额")
private BigDecimal insuBalance; private BigDecimal insuBalance;
@ApiModelProperty("预约时间")
private String appointmentTime;
} }

View File

@ -102,6 +102,15 @@ public class DiagnosisService extends BaseService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void save(MedicalRecordSaveDto saveDto) { public void save(MedicalRecordSaveDto saveDto) {
int regisId =saveDto.getRegistrationId();
QueryWrapper<Diagnosis> queryWrapperRegis = new QueryWrapper<>();
queryWrapperRegis.eq("registration_id", regisId);
Diagnosis regisDbDiagnosis = diagnosisMapper.selectOne(queryWrapperRegis);
if(regisDbDiagnosis!=null){
throw new MessageException("该挂号已完诊,请不要重复完诊");
}
if (saveDto == null){ if (saveDto == null){
throw new MessageException("参数不能为空"); throw new MessageException("参数不能为空");
} }

View File

@ -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.DateUtil;
import com.syjiaer.clinic.server.common.util.StringUtil; import com.syjiaer.clinic.server.common.util.StringUtil;
import com.syjiaer.clinic.server.common.vo.Page; 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.OrganizationMember;
import com.syjiaer.clinic.server.entity.organization.OrganizationSection; import com.syjiaer.clinic.server.entity.organization.OrganizationSection;
import com.syjiaer.clinic.server.entity.patient.PatientInfo; 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.dto.RegistrationSaveDto;
import com.syjiaer.clinic.server.entity.patient.vo.PatientAndRegistrationInfoVo; import com.syjiaer.clinic.server.entity.patient.vo.PatientAndRegistrationInfoVo;
import com.syjiaer.clinic.server.entity.patient.vo.PatientRegistrationVo; 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.OrganizationMemberMapper;
import com.syjiaer.clinic.server.mapper.organization.OrganizationSectionMapper; import com.syjiaer.clinic.server.mapper.organization.OrganizationSectionMapper;
import com.syjiaer.clinic.server.mapper.patient.PatientInfoMapper; import com.syjiaer.clinic.server.mapper.patient.PatientInfoMapper;
@ -35,6 +37,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -53,6 +57,8 @@ public class PatientRegistrationService extends BaseService {
@Autowired @Autowired
private OrganizationSectionMapper organizationSectionMapper; private OrganizationSectionMapper organizationSectionMapper;
@Autowired @Autowired
private ManagerUserMapper managerUserMapper;
@Autowired
@Lazy @Lazy
private PatientRegistrationService patientRegistrationService; private PatientRegistrationService patientRegistrationService;
@Autowired @Autowired
@ -75,6 +81,20 @@ public class PatientRegistrationService extends BaseService {
throw new MessageException("证件号码不能为空"); 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(); LocalDateTime now = LocalDateTime.now();
String fstNo = StringUtil.getCode("FSN"); String fstNo = StringUtil.getCode("FSN");
@ -96,6 +116,7 @@ public class PatientRegistrationService extends BaseService {
BeanUtils.copyProperties(registrationParam, registration); BeanUtils.copyProperties(registrationParam, registration);
registration.setFstNo(fstNo); registration.setFstNo(fstNo);
registration.setRegistrationMoney(new BigDecimal("0")); registration.setRegistrationMoney(new BigDecimal("0"));
registration.setAppointmentTime(appointmentTime);
registration.setCreateDatetime(now); registration.setCreateDatetime(now);
registration.setStatus(1); registration.setStatus(1);
OrganizationMember docker = organizationMemberMapper.selectById(registration.getOrganizationDoctorId()); OrganizationMember docker = organizationMemberMapper.selectById(registration.getOrganizationDoctorId());
@ -235,9 +256,42 @@ public class PatientRegistrationService extends BaseService {
* 根据查询条件查询挂号信息 * 根据查询条件查询挂号信息
* @param query 查询条件 * @param query 查询条件
*/ */
public Page<PatientRegistration> getPageByType(RegistrationQuery query) { public Page<PatientRegistration> getListByType(RegistrationQuery query) {
ManagerUser user = getManagerUser();
List<PatientRegistration> Beforlist = patientRegistrationMapper.selectList(getQueryWrapper(query, user,true));
List<PatientRegistration> Afterlist = patientRegistrationMapper.selectList(getQueryWrapper(query, user,false));
List<PatientRegistration> 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<PatientRegistration> 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<PatientRegistration> regisQuery = new QueryWrapper<>(); QueryWrapper<PatientRegistration> 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); regisQuery.eq("del_flag", 0);
if (member != null && member.getRole() == 1){
regisQuery.eq("organization_doctor_id", member.getId());
}
if (query.getStatus() != null) { if (query.getStatus() != null) {
regisQuery.eq("status", query.getStatus()); regisQuery.eq("status", query.getStatus());
} }
@ -252,13 +306,19 @@ public class PatientRegistrationService extends BaseService {
query.setPageSize(Constants.DetailPageSize); query.setPageSize(Constants.DetailPageSize);
} }
if (query.getBeginTime() != null) { if (query.getBeginTime() != null) {
regisQuery.ge("create_datetime", query.getBeginTime()); regisQuery.ge("appointment_time", query.getBeginTime());
} }
if (query.getEndTime() != null) { if (query.getEndTime() != null) {
regisQuery.le("create_datetime", query.getEndTime()); regisQuery.le("appointment_time", query.getEndTime());
} }
if(isBefore){
return pageHelper(query.getPageNum(), query.getPageSize(), regisQuery, patientRegistrationMapper, "create_datetime", false); regisQuery.le("appointment_time", LocalDateTime.now());
regisQuery.orderByDesc("appointment_time");
}else{
regisQuery.ge("appointment_time", LocalDateTime.now());
regisQuery.orderByAsc("appointment_time");
}
return regisQuery;
} }
/** /**

View File

@ -471,7 +471,7 @@ public class SocialInventoryUploadService extends BaseService {
if (chargeOrder.getPayType().equals(RetailOrderPayTypeEnum.MEDICARE.getCode())) { if (chargeOrder.getPayType().equals(RetailOrderPayTypeEnum.MEDICARE.getCode())) {
//医保支付 //医保支付
ChargeSocialPayLog payLog = chargeSocialPayLogMapper.selectOne(new QueryWrapper<ChargeSocialPayLog>(). ChargeSocialPayLog payLog = chargeSocialPayLogMapper.selectOne(new QueryWrapper<ChargeSocialPayLog>().
eq("retail_order_code", orderInventory.getChargeOrderCode()).last("limit 1")); eq("charge_order_code", orderInventory.getChargeOrderCode()).last("limit 1"));
im3505.setSetlId(payLog.getSetlId()); im3505.setSetlId(payLog.getSetlId());
im3505.setMdtrtSn(payLog.getMdtrtId()); im3505.setMdtrtSn(payLog.getMdtrtId());
im3505.setPsnNo(payLog.getPsnNo()); im3505.setPsnNo(payLog.getPsnNo());
@ -495,7 +495,8 @@ public class SocialInventoryUploadService extends BaseService {
List<Map<String, String>> drugtracinfo = new ArrayList<>(); List<Map<String, String>> drugtracinfo = new ArrayList<>();
List<String> TracCodgList = orderInventory.getTraceabilityCode() == null ? new ArrayList<>() List<String> TracCodgList = orderInventory.getTraceabilityCode() == null||
orderInventory.getTraceabilityCode().isEmpty() ? new ArrayList<>()
: Arrays.asList(orderInventory.getTraceabilityCode().split(",")); : Arrays.asList(orderInventory.getTraceabilityCode().split(","));
for (String tracCodg : TracCodgList) { for (String tracCodg : TracCodgList) {
Map<String, String> map =new HashMap<>(); Map<String, String> map =new HashMap<>();

View File

@ -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.charge.ChargeOrder;
import com.syjiaer.clinic.server.entity.diagnosis.Diagnosis; import com.syjiaer.clinic.server.entity.diagnosis.Diagnosis;
import com.syjiaer.clinic.server.entity.goods.Goods; 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.organization.OrganizationMember;
import com.syjiaer.clinic.server.entity.patient.PatientRegistration; import com.syjiaer.clinic.server.entity.patient.PatientRegistration;
import com.syjiaer.clinic.server.entity.statistics.*; 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.charge.ChargeOrderMapper;
import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMapper; import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMapper;
import com.syjiaer.clinic.server.mapper.goods.GoodsMapper; 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.organization.OrganizationMemberMapper;
import com.syjiaer.clinic.server.mapper.patient.PatientRegistrationMapper; import com.syjiaer.clinic.server.mapper.patient.PatientRegistrationMapper;
import com.syjiaer.clinic.server.service.BaseService; import com.syjiaer.clinic.server.service.BaseService;
@ -39,6 +41,8 @@ public class StatisticsService extends BaseService {
private DiagnosisMapper diagnosisMapper; private DiagnosisMapper diagnosisMapper;
@Autowired @Autowired
private GoodsMapper goodsMapper; private GoodsMapper goodsMapper;
@Autowired
private ManagerUserMapper managerUserMapper;
public RevenueOverviewVo getRevenueOverview(LocalDateTime begin, LocalDateTime end) { public RevenueOverviewVo getRevenueOverview(LocalDateTime begin, LocalDateTime end) {
RevenueOverviewVo overviewVo = new RevenueOverviewVo(); RevenueOverviewVo overviewVo = new RevenueOverviewVo();
@ -187,29 +191,46 @@ public class StatisticsService extends BaseService {
} }
public TipCountVo getWaitCount(LocalDateTime beginTime, LocalDateTime endTime) { 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(); TipCountVo tipCountVo = new TipCountVo();
RegistrationStatusEnum registrationStatusEnum = RegistrationStatusEnum.waiting; RegistrationStatusEnum registrationStatusEnum = RegistrationStatusEnum.waiting;
QueryWrapper<PatientRegistration> registrationWrapper = new QueryWrapper<>(); QueryWrapper<PatientRegistration> registrationWrapper = new QueryWrapper<>();
registrationWrapper.lt("create_datetime", endTime); registrationWrapper.lt("appointment_time", endTime);
registrationWrapper.ge("create_datetime", beginTime); registrationWrapper.ge("appointment_time", beginTime);
registrationWrapper.eq("status", registrationStatusEnum.getStatus()); registrationWrapper.eq("status", registrationStatusEnum.getStatus());
registrationWrapper.eq("del_flag",0); registrationWrapper.eq("del_flag",0);
if (member != null && member.getRole() == 1){
registrationWrapper.eq("organization_doctor_id", member.getId());
}
tipCountVo.setWaitDiagnosisCount(patientRegistrationMapper.selectCount(registrationWrapper)); tipCountVo.setWaitDiagnosisCount(patientRegistrationMapper.selectCount(registrationWrapper));
registrationStatusEnum = RegistrationStatusEnum.inProgress; registrationStatusEnum = RegistrationStatusEnum.inProgress;
registrationWrapper = new QueryWrapper<>(); registrationWrapper = new QueryWrapper<>();
registrationWrapper.lt("create_datetime", endTime); registrationWrapper.lt("appointment_time", endTime);
registrationWrapper.ge("create_datetime", beginTime); registrationWrapper.ge("appointment_time", beginTime);
registrationWrapper.eq("status", registrationStatusEnum.getStatus()); registrationWrapper.eq("status", registrationStatusEnum.getStatus());
registrationWrapper.eq("del_flag",0); registrationWrapper.eq("del_flag",0);
if (member != null && member.getRole() == 1){
registrationWrapper.eq("organization_doctor_id", member.getId());
}
tipCountVo.setDiagnosingCount(patientRegistrationMapper.selectCount(registrationWrapper)); tipCountVo.setDiagnosingCount(patientRegistrationMapper.selectCount(registrationWrapper));
registrationStatusEnum = RegistrationStatusEnum.complete; registrationStatusEnum = RegistrationStatusEnum.complete;
registrationWrapper = new QueryWrapper<>(); registrationWrapper = new QueryWrapper<>();
registrationWrapper.lt("create_datetime", endTime); registrationWrapper.lt("appointment_time", endTime);
registrationWrapper.ge("create_datetime", beginTime); registrationWrapper.ge("appointment_time", beginTime);
registrationWrapper.eq("status", registrationStatusEnum.getStatus()); registrationWrapper.eq("status", registrationStatusEnum.getStatus());
registrationWrapper.eq("del_flag",0); registrationWrapper.eq("del_flag",0);
if (member != null && member.getRole() == 1){
registrationWrapper.eq("organization_doctor_id", member.getId());
}
tipCountVo.setCompleteDiaCount(patientRegistrationMapper.selectCount(registrationWrapper)); tipCountVo.setCompleteDiaCount(patientRegistrationMapper.selectCount(registrationWrapper));