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>
<version>2.9.2</version>
</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>
<groupId>io.springfox</groupId>
<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")
public Result<Page<PatientRegistration>> getListByType() {
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;
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;
/**
* <p>
* 挂号表
* </p>
*
* @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;
}

View File

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

View File

@ -102,6 +102,15 @@ public class DiagnosisService extends BaseService {
@Transactional(rollbackFor = Exception.class)
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){
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.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<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<>();
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;
}
/**

View File

@ -471,7 +471,7 @@ public class SocialInventoryUploadService extends BaseService {
if (chargeOrder.getPayType().equals(RetailOrderPayTypeEnum.MEDICARE.getCode())) {
//医保支付
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.setMdtrtSn(payLog.getMdtrtId());
im3505.setPsnNo(payLog.getPsnNo());
@ -495,7 +495,8 @@ public class SocialInventoryUploadService extends BaseService {
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(","));
for (String tracCodg : TracCodgList) {
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.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<PatientRegistration> 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));