Преглед на файлове

add
患者表、诊室表、诊室医生关联表、诊室微信用户关联表
fix
医院切换

18339543638 преди 6 месеца
родител
ревизия
2f5893a6a8
променени са 13 файла, в които са добавени 208 реда и са изтрити 27 реда
  1. 90 0
      tr-framework/src/main/java/cn/tr/core/utils/AgeUtils.java
  2. 5 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/repository/BizClinicRepository.java
  3. 7 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/repository/BizClinicRoomRepository.java
  4. 12 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizClinicRoomService.java
  5. 3 2
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizWxUserService.java
  6. 7 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizClinicRoomServiceImpl.java
  7. 7 6
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizClinicServiceImpl.java
  8. 3 1
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizWxUserServiceImpl.java
  9. 5 3
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/BizWxAppletClinicController.java
  10. 5 8
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/WxAppletUserController.java
  11. 19 7
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/vo/BizWxAppletClinicVO.java
  12. 21 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/dto/BizWxUserShiftHospitalDTO.java
  13. 24 0
      tr-modules/tr-module-smartFollowUp/src/main/resources/mapper/smart/BizClinicRoomMapper.xml

+ 90 - 0
tr-framework/src/main/java/cn/tr/core/utils/AgeUtils.java

@@ -0,0 +1,90 @@
+package cn.tr.core.utils;
+
+import java.time.LocalDate;
+import java.time.Period;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 年龄计算工具类(支持 LocalDate、Date、字符串日期)
+ * 规则:按周岁计算(生日未过则年龄减 1)
+ */
+public class AgeUtils {
+
+    // ==================== 方法 1:接收 LocalDate(Java 8+ 推荐) ====================
+    /**
+     * 根据 LocalDate 出生日期计算年龄(周岁)
+     * @param birthDate 出生日期(如:LocalDate.of(2000, 6, 10))
+     * @return 年龄(出生日期为未来时返回 0)
+     */
+    public static int calculateAge(LocalDate birthDate) {
+        if (birthDate == null) {
+            return 0;
+        }
+        LocalDate now = LocalDate.now(); // 系统默认时区(若需指定上海时区,可传 ZoneId:LocalDate.now(ZoneId.of("Asia/Shanghai")))
+        if (birthDate.isAfter(now)) { // 出生日期在未来,返回 0
+            return 0;
+        }
+        Period period = Period.between(birthDate, now);
+        return period.getYears();
+    }
+
+
+    // ==================== 方法 2:接收 java.util.Date(兼容旧代码) ====================
+    /**
+     * 根据 Date 出生日期计算年龄(周岁)
+     * @param birthDate 出生日期
+     * @return 年龄(出生日期为未来时返回 0)
+     */
+    public static Integer calculateAge(Date birthDate) {
+        if (birthDate == null) {
+            return null;
+        }
+        Calendar birthCal = Calendar.getInstance();
+        birthCal.setTime(birthDate);
+        Calendar nowCal = Calendar.getInstance();
+
+        int yearDiff = nowCal.get(Calendar.YEAR) - birthCal.get(Calendar.YEAR);
+        int monthDiff = nowCal.get(Calendar.MONTH) - birthCal.get(Calendar.MONTH);
+        int dayDiff = nowCal.get(Calendar.DAY_OF_MONTH) - birthCal.get(Calendar.DAY_OF_MONTH);
+
+        // 调整:若当前月份 < 出生月份,或同月但日期更小,年龄减 1
+        if (monthDiff < 0 || (monthDiff == 0 && dayDiff < 0)) {
+            yearDiff--;
+        }
+        // 确保年龄非负(应对未来日期)
+        return Math.max(yearDiff, 0);
+    }
+
+
+    // ==================== 方法 3:接收字符串日期(需指定格式,如 "yyyy-MM-dd") ====================
+    /**
+     * 根据字符串日期和格式计算年龄(周岁)
+     * @param birthDateStr 日期字符串(如 "2000-06-10")
+     * @param format       日期格式(如 "yyyy-MM-dd")
+     * @return 年龄(解析失败或未来日期返回 0)
+     */
+    public static int calculateAge(String birthDateStr, String format) {
+        if (birthDateStr == null || format == null) {
+            return 0;
+        }
+        try {
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+            LocalDate birthDate = LocalDate.parse(birthDateStr, formatter);
+            return calculateAge(birthDate);
+        } catch (DateTimeParseException e) {
+            // 日志记录解析异常(建议实际项目中添加日志)
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 简化版:默认日期格式为 "yyyy-MM-dd"
+     */
+    public static int calculateAge(String birthDateStr) {
+        return calculateAge(birthDateStr, "yyyy-MM-dd");
+    }
+}

+ 5 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/repository/BizClinicRepository.java

@@ -1,5 +1,7 @@
 package cn.tr.module.smart.common.repository;
 
+import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicVO;
+import cn.tr.module.smart.wx.dto.BizWxAppletClinicQueryDTO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -23,4 +25,7 @@ public interface BizClinicRepository extends BaseMapper<BizClinicPO> {
             "update biz_clinic set care = 0 where wx_user_id = #{userId}}"
     )
     void updateWxAppletAllNotCare(@Param("userId") String userId);
+
+
+    List<BizWxAppletClinicVO> stdSelectWxAppletClinicList(BizWxAppletClinicQueryDTO query);
 }

+ 7 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/repository/BizClinicRoomRepository.java

@@ -1,9 +1,15 @@
 package cn.tr.module.smart.common.repository;
 
+import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicVO;
+import cn.tr.module.smart.wx.dto.BizWxAppletClinicQueryDTO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 import cn.tr.module.smart.common.po.BizClinicRoomPO;
+
+import java.util.List;
+
 /**
  * 诊疗室Mapper接口
  *
@@ -13,4 +19,5 @@ import cn.tr.module.smart.common.po.BizClinicRoomPO;
 @Repository
 @Mapper
 public interface BizClinicRoomRepository extends BaseMapper<BizClinicRoomPO> {
+    List<BizWxAppletClinicVO> stdSelectWxAppletClinicList(@Param("query") BizWxAppletClinicQueryDTO query);
 }

+ 12 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizClinicRoomService.java

@@ -2,6 +2,9 @@ package cn.tr.module.smart.common.service;
 
 import cn.tr.module.smart.common.dto.BizClinicRoomDTO;
 import cn.tr.module.smart.common.dto.BizClinicRoomQueryDTO;
+import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicVO;
+import cn.tr.module.smart.wx.dto.BizWxAppletClinicQueryDTO;
+
 import java.util.*;
 
 /**
@@ -12,6 +15,13 @@ import java.util.*;
  **/
 public interface IBizClinicRoomService{
 
+    /**
+     * 微信小程序查询所有的患者信息
+     * @param query
+     * @return
+     */
+    List<BizWxAppletClinicVO> stdSelectWxAppletClinicList(BizWxAppletClinicQueryDTO query);
+
     /**
      * 根据条件查询诊疗室
      * @param    query 查询参数
@@ -51,4 +61,6 @@ public interface IBizClinicRoomService{
      * @date    2025/06/09 10:59
      */
     int removeBizClinicRoomByIds(Collection<String> ids);
+
+
 }

+ 3 - 2
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizWxUserService.java

@@ -5,6 +5,7 @@ import cn.tr.module.smart.common.dto.BizWxUserDTO;
 import cn.tr.module.smart.common.dto.BizWxUserQueryDTO;
 import cn.tr.module.smart.common.po.BizWxUserPO;
 import cn.tr.module.smart.wx.controller.vo.BizWxUserBindHospitalVO;
+import cn.tr.module.smart.wx.dto.BizWxUserShiftHospitalDTO;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 
@@ -63,10 +64,10 @@ public interface IBizWxUserService{
 
     /**
      * 切换登录医院
-     * @param tenantId
+     * @param source
      * @return
      */
-    Boolean shiftTenant(String tenantId);
+    Boolean shiftTenant(BizWxUserShiftHospitalDTO source);
 
     List<BizWxUserBindHospitalVO> allBindHospital();
 

+ 7 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizClinicRoomServiceImpl.java

@@ -1,6 +1,8 @@
 package cn.tr.module.smart.common.service.impl;
 
 import cn.tr.core.exception.TRExcCode;
+import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicVO;
+import cn.tr.module.smart.wx.dto.BizWxAppletClinicQueryDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import cn.hutool.core.collection.CollectionUtil;
@@ -26,6 +28,11 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
     private BizClinicRoomRepository baseRepository;
 
 
+    @Override
+    public List<BizWxAppletClinicVO> stdSelectWxAppletClinicList(BizWxAppletClinicQueryDTO query) {
+        return baseRepository.stdSelectWxAppletClinicList(query);
+    }
+
     /**
     * 根据条件查询诊疗室
     * @param    query 查询参数

+ 7 - 6
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizClinicServiceImpl.java

@@ -125,12 +125,13 @@ public class BizClinicServiceImpl extends ServiceImpl<BizClinicRepository,BizCli
 
     @Override
     public List<BizWxAppletClinicVO> stdSelectWxAppletList(BizWxAppletClinicQueryDTO query) {
-        return BizClinicMapper.INSTANCE.convertWxAppletVOList(
-                baseMapper.selectList(new LambdaQueryWrapper<BizClinicPO>()
-                                .like(StrUtil.isNotEmpty(query.getPatientCode()),BizClinicPO::getPatientCode,query.getPatientCode())
-                        .eq(BizClinicPO::getWxUserId, query.getUserId())
-                        .orderByDesc(BizClinicPO::getCare,BizClinicPO::getClinicStartTime))
-        );
+        return baseMapper.stdSelectWxAppletClinicList(query);
+//        return BizClinicMapper.INSTANCE.convertWxAppletVOList(
+//                baseMapper.selectList(new LambdaQueryWrapper<BizClinicPO>()
+//                                .like(StrUtil.isNotEmpty(query.getPatientCode()),BizClinicPO::getPatientCode,query.getPatientCode())
+//                        .eq(BizClinicPO::getWxUserId, query.getUserId())
+//                        .orderByDesc(BizClinicPO::getCare,BizClinicPO::getClinicStartTime))
+//        );
     }
 
     @Override

+ 3 - 1
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizWxUserServiceImpl.java

@@ -10,6 +10,7 @@ import cn.tr.module.smart.common.po.BizWxUserHospitalPO;
 import cn.tr.module.smart.common.repository.BizHospitalRepository;
 import cn.tr.module.smart.common.repository.BizWxUserHospitalRepository;
 import cn.tr.module.smart.wx.controller.vo.BizWxUserBindHospitalVO;
+import cn.tr.module.smart.wx.dto.BizWxUserShiftHospitalDTO;
 import cn.tr.module.sys.user.service.ISysUserService;
 import cn.tr.plugin.security.bo.UserLoginInfoBO;
 import cn.tr.plugin.security.constant.SecurityConstant;
@@ -127,7 +128,8 @@ public class BizWxUserServiceImpl implements IBizWxUserService {
 
     @Override
     @TenantIgnore
-    public Boolean shiftTenant(String tenantId) {
+    public Boolean shiftTenant(BizWxUserShiftHospitalDTO source) {
+        String tenantId = source.getTenantId();
         String userId = LoginUserStrategy.tr.getCurrentUserId();
         List<BizWxUserHospitalPO> wxUserList = wxUserHospitalRepository.selectList(new LambdaQueryWrapper<BizWxUserHospitalPO>()
                 .eq(BizWxUserHospitalPO::getWxUserId, userId));

+ 5 - 3
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/BizWxAppletClinicController.java

@@ -5,6 +5,7 @@ import cn.tr.core.strategy.LoginUserStrategy;
 import cn.tr.core.tenant.TenantContextHolder;
 import cn.tr.core.validation.Insert;
 import cn.tr.core.validation.Update;
+import cn.tr.module.smart.common.service.IBizClinicRoomService;
 import cn.tr.module.smart.common.service.IBizClinicService;
 import cn.tr.module.smart.wx.controller.vo.BizPreSurgeryQuestionVO;
 import cn.tr.module.smart.wx.dto.BizClinicAddOrEditDTO;
@@ -35,13 +36,14 @@ import java.util.*;
 public class BizWxAppletClinicController extends BaseController{
 
     private final IBizClinicService clinicService;
+    private final IBizClinicRoomService clinicRoomService;
     @ApiOperationSupport(author = "lf",order = 1)
     @ApiOperation(value="查询当前用户所添加的所有患者手术记录(不分页)",notes = "权限: 无")
     @PostMapping("/query/list")
     public CommonResult<List<BizWxAppletClinicVO>> selectList(@RequestBody BizWxAppletClinicQueryDTO query) {
         query.setUserId(LoginUserStrategy.tr.getCurrentUserId());
         query.setTenantId(TenantContextHolder.getTenantId());
-        return CommonResult.success(clinicService.stdSelectWxAppletList(query));
+        return CommonResult.success(clinicRoomService.stdSelectWxAppletClinicList(query));
     }
 
     @ApiOperationSupport(author = "lf",order = 2)
@@ -82,13 +84,13 @@ public class BizWxAppletClinicController extends BaseController{
 
     @ApiOperationSupport(author = "lf",order = 7)
     @ApiOperation(value="查询患者手术详情",notes = "权限: 无")
-    @PostMapping("/detail/{id}")
+    @GetMapping("/detail/{id}")
     public CommonResult<BizWxAppletClinicVO> detail(@PathVariable("id") String id) {
         return CommonResult.success(clinicService.stdSelectWxAppletById(id));
     }
 
     @ApiOperationSupport(author = "zzy",order = 8)
-    @PostMapping("/preSurgeryQuestionnaire/{clinicId}")
+    @GetMapping("/preSurgeryQuestionnaire/{clinicId}")
     @ApiOperation(value = "术前问卷",notes = "权限: 无")
     public CommonResult<BizPreSurgeryQuestionVO> preSurgeryQuestionnaire(@PathVariable("clinicId") String clinicId){
         return CommonResult.success(clinicService.selectPreSurgeryQuestionnaire(clinicId));

+ 5 - 8
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/WxAppletUserController.java

@@ -8,6 +8,7 @@ import cn.tr.core.exception.TRExcCode;
 import cn.tr.core.pojo.CommonResult;
 import cn.tr.core.strategy.LoginUserStrategy;
 import cn.tr.module.smart.common.service.IBizWxUserService;
+import cn.tr.module.smart.wx.dto.BizWxUserShiftHospitalDTO;
 import cn.tr.module.smart.wx.dto.WxAppletEncodeInfoDTO;
 import cn.tr.module.smart.wx.controller.vo.BizWxUserBindHospitalVO;
 import cn.tr.module.smart.wx.dto.BizWxUserBindHospitalDTO;
@@ -57,17 +58,13 @@ public class WxAppletUserController {
     }
 
 
-    @PostMapping("/{tenantId}")
+    @PostMapping("/shiftTenant")
     @ApiOperation(value = "切换用户当前登录的医院",position = 2)
-    public CommonResult<Boolean> shiftTenant(@PathVariable("tenantId") String tenantId){
-        return CommonResult.success( wxUserService.shiftTenant(tenantId));
+    public CommonResult<Boolean> shiftTenant(@RequestBody BizWxUserShiftHospitalDTO source){
+        return CommonResult.success( wxUserService.shiftTenant(source));
     }
 
-    @PostMapping("/editUserInfo")
-    @ApiOperation(value = "编辑当前用户信息",position = 3)
-    public CommonResult<Boolean> editUserInfo(@PathVariable("tenantId") String tenantId){
-        return CommonResult.success( wxUserService.shiftTenant(tenantId));
-    }
+
 
 
     @PostMapping("/allBindHospital")

+ 19 - 7
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/vo/BizWxAppletClinicVO.java

@@ -1,6 +1,8 @@
 package cn.tr.module.smart.wx.controller.vo;
 
+import cn.tr.core.utils.AgeUtils;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -29,9 +31,6 @@ public class BizWxAppletClinicVO implements Serializable {
     @ApiModelProperty(value = "患者姓名", position = 2)
     private String patientName;
 
-    @ApiModelProperty(value = "年龄", position = 3)
-    private Integer patientAge;
-
     @ApiModelProperty(value = "患者性别", position = 4)
     private String patientGender;
 
@@ -42,16 +41,29 @@ public class BizWxAppletClinicVO implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
     private Date clinicStartTime;
 
-    @ApiModelProperty("科室名称")
+    @ApiModelProperty(value = "科室id",position = 7)
+    private String deptId;
+
+
+    @ApiModelProperty(value = "科室名称",position = 8)
     private String deptName;
 
-    @ApiModelProperty(value = "手术名称", position = 7)
+    @ApiModelProperty(value = "手术名称", position = 9)
     private String clinicName;
 
-    @ApiModelProperty(value = "手术状态", position = 8)
+    @ApiModelProperty(value = "手术状态", position = 10)
     private String clinicStatus;
 
-    @ApiModelProperty(value = "是否为看护中的临床,0、否 1、是", position = 9)
+    @ApiModelProperty(value = "是否为看护中的临床,0、否 1、是", position = 11)
     private Boolean care;
 
+    @JsonIgnore
+    private Date birthday;
+
+
+    @ApiModelProperty("病人年龄")
+    public Integer getPatientAge(){
+        return AgeUtils.calculateAge(this.getBirthday());
+    }
+
 }

+ 21 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/dto/BizWxUserShiftHospitalDTO.java

@@ -0,0 +1,21 @@
+package cn.tr.module.smart.wx.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @ClassName : BizWxUserBindHospitalDTO
+ * @Description :
+ * @Author : LF
+ * @Date: 2025年06月06日
+ */
+@Data
+@ApiModel("切换医院id")
+public class BizWxUserShiftHospitalDTO {
+    @ApiModelProperty("医院id")
+    @NotBlank(message = "医院id不能为空")
+    private String tenantId;
+}

+ 24 - 0
tr-modules/tr-module-smartFollowUp/src/main/resources/mapper/smart/BizClinicRoomMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.tr.module.smart.common.repository.BizClinicRoomRepository">
+
+    <resultMap id="stdWxAppletResult" type="cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicVO">
+        <result property="id" column="id"/>
+        <result property="patientName" column="patient_name"/>
+        <result property="birthday" column="birthday"/>
+        <result property="patientGender" column="patient_gender"/>
+        <result property="patientCode" column="patient_code"/>
+        <result property="clinicStartTime" column="clinic_start_time"/>
+        <result property="deptId" column="dept_id"/>
+        <result property="deptName" column="dept_name"/>
+        <result property="clinicName" column="clinic_name"/>
+        <result property="clinicStatus" column="clinic_status"/>
+        <result property="care" column="care"/>
+    </resultMap>
+
+    <select id="stdSelectWxAppletClinicList" resultMap="stdWxAppletResult">
+
+    </select>
+</mapper>