Ver código fonte

fix
手术接口重写

18339543638 6 meses atrás
pai
commit
4ca1405a4b
37 arquivos alterados com 676 adições e 775 exclusões
  1. 0 67
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/dto/BizClinicDTO.java
  2. 0 18
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/dto/BizClinicQueryDTO.java
  3. 1 1
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/dto/BizClinicRoomDTO.java
  4. 2 2
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/dto/BizClinicRoomWxUserDTO.java
  5. 2 2
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/enums/ClinicPhaseEnums.java
  6. 7 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/enums/PatientGenderEnums.java
  7. 13 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/enums/UserTypeEnums.java
  8. 0 36
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/mapper/BizClinicMapper.java
  9. 3 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/mapper/BizClinicRoomMapper.java
  10. 3 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/mapper/BizPatientMapper.java
  11. 0 97
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizClinicPO.java
  12. 39 6
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizClinicRoomPO.java
  13. 1 1
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizClinicRoomWxUserPO.java
  14. 2 5
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizMissionDocPO.java
  15. 2 5
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizMissionDocSquarePO.java
  16. 9 19
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizPatientPO.java
  17. 0 31
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/repository/BizClinicRepository.java
  18. 8 1
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/repository/BizClinicRoomRepository.java
  19. 4 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/repository/BizClinicRoomWxUserRepository.java
  20. 41 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizClinicRoomService.java
  21. 23 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizClinicRoomWxUserService.java
  22. 0 74
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizClinicService.java
  23. 7 2
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizPatientService.java
  24. 200 1
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizClinicRoomServiceImpl.java
  25. 72 27
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizClinicRoomWxUserServiceImpl.java
  26. 0 238
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizClinicServiceImpl.java
  27. 5 5
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizMissionDocServiceImpl.java
  28. 38 31
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizPatientServiceImpl.java
  29. 0 65
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/web/controller/BizClinicController.java
  30. 1 21
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/web/controller/BizPatientController.java
  31. 12 13
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/BizWxAppletClinicController.java
  32. 44 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/BizWxAppletDeptController.java
  33. 47 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/vo/BizWxDeptVO.java
  34. 20 6
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/dto/BizClinicAddOrEditDTO.java
  35. 47 1
      tr-modules/tr-module-smartFollowUp/src/main/resources/mapper/smart/BizClinicRoomMapper.xml
  36. 17 0
      tr-modules/tr-module-smartFollowUp/src/main/resources/mapper/smart/BizClinicRoomWxUserMapper.xml
  37. 6 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/LoginTypeConstant.java

+ 0 - 67
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/dto/BizClinicDTO.java

@@ -1,67 +0,0 @@
-package cn.tr.module.smart.common.dto;
-
-import cn.tr.plugin.mybatis.pojo.BaseDTO;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import cn.tr.core.validation.Update;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import javax.validation.constraints.*;
-import java.util.*;
-/**
- * 手术信息传输对象
- *
- * @author lf
- * @date  2025/05/23 14:17
- **/
-@Data
-@ApiModel("手术信息传输对象")
-@EqualsAndHashCode(callSuper = true)
-@ToString
-public class BizClinicDTO extends BaseDTO  {
-    private static final long serialVersionUID = 1L;
-    @ApiModelProperty(value = "id", position = 1)
-     @NotBlank  (message = "主键不能为空",groups = {Update.class})
-    private String id;
-
-    @ApiModelProperty(value = "年龄", position = 2)
-    private Integer patientAge;
-
-    @ApiModelProperty(value = "科室", position = 3)
-    private String deptId;
-
-    @ApiModelProperty(value = "科室名称", position = 3)
-    private String deptName;
-
-    @ApiModelProperty(value = "手术名称", position = 4)
-    private String clinicName;
-
-    @ApiModelProperty(value = "手术开始时间", position = 5)
-    private Date clinicStartTime;
-
-    @ApiModelProperty(value = "手术结束时间", position = 6)
-    private Date clinicEndTime;
-
-    @ApiModelProperty(value = "手术状态", position = 7)
-    private String clinicStatus;
-
-    @ApiModelProperty(value = "最后一次随访时间", position = 8)
-    private Date lastFollowUpTime;
-
-    @ApiModelProperty(value = "随访次数", position = 9)
-    private Integer followUpCount;
-
-    @ApiModelProperty(value = "是否已随访", position = 10)
-    private Boolean followUp;
-
-    @ApiModelProperty(value = "住院号", position = 15)
-    private String patientCode;
-
-    @ApiModelProperty(value = "患者姓名", position = 16)
-    private String patientName;
-
-    @ApiModelProperty(value = "是否为看护中的临床,0、否 1、是", position = 18)
-    private Boolean care;
-
-}

+ 0 - 18
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/dto/BizClinicQueryDTO.java

@@ -1,18 +0,0 @@
-package cn.tr.module.smart.common.dto;
-
-import lombok.ToString;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-
-/**
- * 手术信息查询参数
- *
- * @author lf
- * @date  2025/05/23 14:17
- **/
-@Data
-@ApiModel("手术信息查询参数")
-@ToString
-public class BizClinicQueryDTO  {
-    private static final long serialVersionUID = 1L;
-}

+ 1 - 1
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/dto/BizClinicRoomDTO.java

@@ -51,7 +51,7 @@ public class BizClinicRoomDTO extends BaseDTO  {
     private Integer followUpCount;
 
     @ApiModelProperty(value = "是否已随访", position = 10)
-    private Integer followUp;
+    private Boolean followUp;
 
     @ApiModelProperty(value = "住院号", position = 15)
     private String patientCode;

+ 2 - 2
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/dto/BizClinicRoomWxUserDTO.java

@@ -23,14 +23,14 @@ import java.util.*;
 public class BizClinicRoomWxUserDTO extends BaseDTO  {
     private static final long serialVersionUID = 1L;
     @ApiModelProperty(value = "id", position = 1)
-     @NotBlank  (message = "主键不能为空",groups = {Update.class})
+    @NotBlank  (message = "主键不能为空",groups = {Update.class})
     private String id;
 
     @ApiModelProperty(value = "微信用户", position = 2)
     private String wxUserId;
 
     @ApiModelProperty(value = "是否为看护中", position = 3)
-    private Integer care;
+    private Boolean care;
 
     @ApiModelProperty(value = "诊室id", position = 4)
     private String clinicRoomId;

+ 2 - 2
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/constant/PhaseConstant.java → tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/enums/ClinicPhaseEnums.java

@@ -1,11 +1,11 @@
-package cn.tr.module.smart.common.constant;
+package cn.tr.module.smart.common.enums;
 
 /**
  * @author wangzl
  * @description: 手术常量
  * @date 2025/6/4 9:14
  */
-public interface PhaseConstant {
+public interface ClinicPhaseEnums {
 
     /** 术前 */
     String BEFORE = "BEFORE";

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

@@ -0,0 +1,7 @@
+package cn.tr.module.smart.common.enums;
+
+public interface PatientGenderEnums {
+    String MAN="man";
+
+    String WOMAN="woman";
+}

+ 13 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/enums/UserTypeEnums.java

@@ -0,0 +1,13 @@
+package cn.tr.module.smart.common.enums;
+
+public interface UserTypeEnums {
+    /**
+     * 患者小程序用户
+     */
+    String PATIENT_WX_APPLET="PatientWxApplet";
+
+    /**
+     * 医生APP用户
+     */
+    String APP_DOCTOR="AppDoctor";
+}

+ 0 - 36
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/mapper/BizClinicMapper.java

@@ -1,36 +0,0 @@
-package cn.tr.module.smart.common.mapper;
-
-import cn.tr.module.smart.common.po.BizClinicPO;
-import cn.tr.module.smart.common.dto.BizClinicDTO;
-import cn.tr.module.smart.wx.dto.BizClinicAddOrEditDTO;
-import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicVO;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-import java.util.List;
-
-/**
-* 手术信息映射工具
-*
-* @author lf
-* @date  2025/05/23 14:17
-**/
-@Mapper
-public interface BizClinicMapper {
-    BizClinicMapper INSTANCE = Mappers.getMapper(BizClinicMapper.class);
-
-    BizClinicPO convertPO(BizClinicDTO source);
-
-    BizClinicPO convertPO(BizClinicAddOrEditDTO source);
-
-    BizClinicDTO convertDto(BizClinicPO source);
-
-    List<BizClinicDTO> convertDtoList(List<BizClinicPO> source);
-
-    List<BizClinicPO> convertPOList(List<BizClinicDTO> source);
-
-    List<BizWxAppletClinicVO> convertWxAppletVOList(List<BizClinicPO> source);
-
-    BizWxAppletClinicVO convertWxAppletVO(BizClinicPO source);
-
-}

+ 3 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/mapper/BizClinicRoomMapper.java

@@ -2,6 +2,7 @@ package cn.tr.module.smart.common.mapper;
 
 import cn.tr.module.smart.common.po.BizClinicRoomPO;
 import cn.tr.module.smart.common.dto.BizClinicRoomDTO;
+import cn.tr.module.smart.wx.dto.BizClinicAddOrEditDTO;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
@@ -19,6 +20,8 @@ public interface BizClinicRoomMapper {
 
     BizClinicRoomPO convertPO(BizClinicRoomDTO source);
 
+    BizClinicRoomPO convertPO(BizClinicAddOrEditDTO source);
+
     BizClinicRoomDTO convertDto(BizClinicRoomPO source);
 
     List<BizClinicRoomDTO> convertDtoList(List<BizClinicRoomPO> source);

+ 3 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/mapper/BizPatientMapper.java

@@ -2,6 +2,7 @@ package cn.tr.module.smart.common.mapper;
 
 import cn.tr.module.smart.common.po.BizPatientPO;
 import cn.tr.module.smart.common.dto.BizPatientDTO;
+import cn.tr.module.smart.wx.dto.BizClinicAddOrEditDTO;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
@@ -17,6 +18,8 @@ import java.util.List;
 public interface BizPatientMapper {
     BizPatientMapper INSTANCE = Mappers.getMapper(BizPatientMapper.class);
 
+    BizPatientPO convertPO(BizClinicAddOrEditDTO source);
+
     BizPatientPO convertPO(BizPatientDTO source);
 
     BizPatientDTO convertDto(BizPatientPO source);

+ 0 - 97
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizClinicPO.java

@@ -1,97 +0,0 @@
-package cn.tr.module.smart.common.po;
-
-import cn.tr.plugin.mybatis.pojo.TenantPO;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import java.util.*;
-/**
- * 手术信息实体
- *
- * @author lf
- * @date  2025/05/23 14:17
- **/
-@Data
-@TableName(value="biz_clinic",autoResultMap = true)
-@EqualsAndHashCode(callSuper = true)
-@ToString
-public class BizClinicPO extends TenantPO {
-
-    /** id */
-    @TableId
-    @ApiModelProperty(value = "id", position = 1)
-    private String id;
-
-    /** 患者名称 */
-    @ApiModelProperty(value = "患者名称", position = 2)
-    private String patientName;
-
-    /** 患者性别 */
-    @ApiModelProperty(value = "患者性别", position = 2)
-    private String patientGender;
-
-    /** 年龄 */
-    @ApiModelProperty(value = "年龄", position = 2)
-    private Integer patientAge;
-
-    /** 住院号 */
-    @ApiModelProperty(value = "住院号", position = 2)
-    private String patientCode;
-
-    /** 科室 */
-    @ApiModelProperty(value = "科室", position = 3)
-    private String deptId;
-
-    @ApiModelProperty(value = "科室名称", position = 3)
-    private String deptName;
-
-    /** 手术名称 */
-    @ApiModelProperty(value = "手术名称", position = 4)
-    private String clinicName;
-
-    /** 手术开始时间 */
-    @ApiModelProperty(value = "手术开始时间", position = 5)
-    private Date clinicStartTime;
-
-    /** 手术结束时间 */
-    @ApiModelProperty(value = "手术结束时间", position = 6)
-    private Date clinicEndTime;
-
-    /** 手术状态 */
-    @ApiModelProperty(value = "手术状态", position = 7)
-    private String clinicStatus;
-
-    /** 最后一次随访时间 */
-    @ApiModelProperty(value = "最后一次随访时间", position = 8)
-    private Date lastFollowUpTime;
-
-    /** 随访次数 */
-    @ApiModelProperty(value = "随访次数", position = 9)
-    private Integer followUpCount;
-
-    /** 是否已随访 */
-    @ApiModelProperty(value = "是否已随访", position = 10)
-    private Boolean followUp;
-
-    @ApiModelProperty(value = "是否为看护中的临床,0、否 1、是", position = 18)
-    private Boolean care;
-
-    @ApiModelProperty("微信小程序用户id")
-    private String wxUserId;
-
-    @ApiModelProperty("头像图片链接")
-    private String imageUrl;
-
-    @ApiModelProperty("上一次看护时间")
-    private Date lastCareTime;
-
-    @ApiModelProperty("上一次填写问卷时间")
-    private Date lastQuestionTime;
-
-    @TableLogic
-    private Integer deleted;
-}

+ 39 - 6
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizClinicRoomPO.java

@@ -1,12 +1,15 @@
 package cn.tr.module.smart.common.po;
 
-import cn.tr.plugin.mybatis.pojo.TenantPO;   
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import cn.tr.module.smart.common.enums.ClinicPhaseEnums;
+import cn.tr.module.smart.common.enums.UserTypeEnums;
+import cn.tr.plugin.mybatis.pojo.TenantPO;
+import com.baomidou.mybatisplus.annotation.*;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
+import org.apache.ibatis.type.JdbcType;
+
 import java.util.*;
 /**
  * 诊疗室实体
@@ -25,6 +28,14 @@ public class BizClinicRoomPO extends TenantPO {
     @ApiModelProperty(value = "id", position = 1)
     private String id;
 
+    @ApiModelProperty("住院号")
+    private String patientCode;
+
+    @ApiModelProperty(value = "患者名称", position = 2)
+    private String patientName;
+
+    @ApiModelProperty(value = "患者性别", position = 2)
+    private String patientGender;
     /** 年龄 */
     @ApiModelProperty(value = "年龄", position = 2)
     private Integer patientAge;
@@ -33,6 +44,9 @@ public class BizClinicRoomPO extends TenantPO {
     @ApiModelProperty(value = "科室", position = 3)
     private String deptId;
 
+    @ApiModelProperty("科室名称")
+    private String deptName;
+
     /** 手术名称 */
     @ApiModelProperty(value = "手术名称", position = 4)
     private String clinicName;
@@ -45,7 +59,10 @@ public class BizClinicRoomPO extends TenantPO {
     @ApiModelProperty(value = "手术结束时间", position = 6)
     private Date clinicEndTime;
 
-    /** 手术状态 */
+    /**
+     * 手术状态
+     * {@link  ClinicPhaseEnums}
+     */
     @ApiModelProperty(value = "手术状态", position = 7)
     private String clinicStatus;
 
@@ -59,6 +76,22 @@ public class BizClinicRoomPO extends TenantPO {
 
     /** 是否已随访 */
     @ApiModelProperty(value = "是否已随访", position = 10)
-    private Integer followUp;
+    private Boolean followUp;
+
+    @ApiModelProperty("绑定的患者id")
+    private String patientId;
+
+    @ApiModelProperty("上次填写问卷时间")
+    private Date lastQuestionTime;
+    /**
+     * {@link UserTypeEnums}
+     */
+    @ApiModelProperty("最后更新临床信息的人员类型")
+    private String lastModifyUserType;
+
+    @ApiModelProperty("最后更新临床信息的人员id")
+    private String lastModifyUserBy;
 
-}
+    @TableField(updateStrategy = FieldStrategy.NEVER,fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)
+    private Integer deleted;
+}

+ 1 - 1
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizClinicRoomWxUserPO.java

@@ -32,7 +32,7 @@ public class BizClinicRoomWxUserPO extends BasePO {
 
     /** 是否为看护中 */
     @ApiModelProperty(value = "是否为看护中", position = 3)
-    private Integer care;
+    private Boolean care;
 
     /** 诊室id */
     @ApiModelProperty(value = "诊室id", position = 4)

+ 2 - 5
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizMissionDocPO.java

@@ -3,10 +3,7 @@ package cn.tr.module.smart.common.po;
 import cn.tr.core.annotation.ColumnDefaultValue;
 import cn.tr.core.annotation.Comment;
 import cn.tr.plugin.mybatis.pojo.TenantPO;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -81,7 +78,7 @@ public class BizMissionDocPO extends TenantPO {
     @ApiModelProperty(value = "宣教光广场ID", position = 19)
     private String squareDocId;
 
-    @TableLogic
+    @TableField(updateStrategy = FieldStrategy.NEVER,fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)
     private Integer deleted;
 
 }

+ 2 - 5
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizMissionDocSquarePO.java

@@ -3,10 +3,7 @@ package cn.tr.module.smart.common.po;
 import cn.tr.core.annotation.ColumnDefaultValue;
 import cn.tr.core.annotation.Comment;
 import cn.tr.plugin.mybatis.pojo.TenantPO;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -90,6 +87,6 @@ public class BizMissionDocSquarePO extends TenantPO {
     @ApiModelProperty(value = "md5", position = 16)
     private String contentMd5;
 
-    @TableLogic
+    @TableField(updateStrategy = FieldStrategy.NEVER,fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)
     private Integer deleted;
 }

+ 9 - 19
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizPatientPO.java

@@ -1,12 +1,13 @@
 package cn.tr.module.smart.common.po;
 
-import cn.tr.plugin.mybatis.pojo.TenantPO;   
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import cn.tr.plugin.mybatis.pojo.TenantPO;
+import com.baomidou.mybatisplus.annotation.*;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
+import org.apache.ibatis.type.JdbcType;
+
 import java.util.*;
 /**
  * 患者信息实体
@@ -25,24 +26,13 @@ public class BizPatientPO extends TenantPO {
     @ApiModelProperty(value = "id", position = 1)
     private String id;
 
-    /** 病人姓名 */
-    @ApiModelProperty(value = "病人姓名", position = 2)
-    private String name;
-
-    /** 病人性别 */
-    @ApiModelProperty(value = "病人性别", position = 3)
-    private String gender;
-
-    /** 病人出生年月日 */
-    @ApiModelProperty(value = "病人出生年月日", position = 4)
-    private Date birthday;
-
-    /** 身份证号 */
-    @ApiModelProperty(value = "身份证号", position = 5)
-    private String cardNo;
+    @ApiModelProperty(value = "住院号",position = 6)
+    private String patientCode;
 
     /** 当前手术id */
     @ApiModelProperty(value = "当前手术id", position = 6)
     private String currentClinicId;
 
-}
+    @TableField(updateStrategy = FieldStrategy.NEVER,fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)
+    private Integer deleted;
+}

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

@@ -1,31 +0,0 @@
-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.apache.ibatis.annotations.Update;
-import org.springframework.stereotype.Repository;
-import cn.tr.module.smart.common.po.BizClinicPO;
-
-import java.util.List;
-
-/**
- * 手术信息Mapper接口
- *
- * @author lf
- * @date  2025/05/23 14:17
- **/
-@Repository
-@Mapper
-public interface BizClinicRepository extends BaseMapper<BizClinicPO> {
-
-    @Update(
-            "update biz_clinic set care = 0 where wx_user_id = #{userId}}"
-    )
-    void updateWxAppletAllNotCare(@Param("userId") String userId);
-
-
-    List<BizWxAppletClinicVO> stdSelectWxAppletClinicList(BizWxAppletClinicQueryDTO query);
-}

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

@@ -10,6 +10,7 @@ import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 import cn.tr.module.smart.common.po.BizClinicRoomPO;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -24,4 +25,10 @@ public interface BizClinicRoomRepository extends BaseMapper<BizClinicRoomPO> {
     List<BizWxAppletClinicVO> stdSelectWxAppletClinicList(@Param("query") BizWxAppletClinicQueryDTO query);
 
     List<WxDoctorClinicRoomVO> selectByClinicRoomAndPatientList(@Param("source") WxDoctorClinicRoomDTO source);
-}
+
+    BizWxAppletClinicVO stdSelectWxAppletCareClinicByUserId(@Param("currentUserId") String currentUserId);
+
+    BizClinicRoomPO stdWxAppletSelectByPatientCodeAndClinicStartTime(@Param("patientCode") String patientCode, @Param("clinicStartTime")Date clinicStartTime);
+
+    BizWxAppletClinicVO stdSelectWxAppletById(@Param("id") String id);
+}

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

@@ -2,8 +2,11 @@ package cn.tr.module.smart.common.repository;
 
 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.BizClinicRoomWxUserPO;
+import org.springframework.web.bind.annotation.PathVariable;
+
 /**
  * 诊室患者绑定idMapper接口
  *
@@ -13,4 +16,5 @@ import cn.tr.module.smart.common.po.BizClinicRoomWxUserPO;
 @Repository
 @Mapper
 public interface BizClinicRoomWxUserRepository extends BaseMapper<BizClinicRoomWxUserPO> {
+    void shiftWxAppletCurrent(@Param("userId") String userId,@Param("clinicRoomId") String clinicRoomId);
 }

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

@@ -4,8 +4,11 @@ import cn.tr.module.smart.app.controller.dto.WxDoctorClinicRoomDTO;
 import cn.tr.module.smart.app.controller.vo.WxDoctorClinicRoomVO;
 import cn.tr.module.smart.common.dto.BizClinicRoomDTO;
 import cn.tr.module.smart.common.dto.BizClinicRoomQueryDTO;
+import cn.tr.module.smart.wx.controller.vo.BizPreSurgeryQuestionVO;
 import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicVO;
+import cn.tr.module.smart.wx.dto.BizClinicAddOrEditDTO;
 import cn.tr.module.smart.wx.dto.BizWxAppletClinicQueryDTO;
+import cn.tr.module.smart.wx.dto.BizWxAppletClinicShiftCareDTO;
 
 import java.util.*;
 
@@ -24,6 +27,44 @@ public interface IBizClinicRoomService{
      */
     List<BizWxAppletClinicVO> stdSelectWxAppletClinicList(BizWxAppletClinicQueryDTO query);
 
+
+    /**
+     * 获取用户当前关注的手术信息
+     * @param currentUserId
+     * @return
+     */
+    BizWxAppletClinicVO stdSelectWxAppletCareClinicByUserId(String currentUserId);
+
+    /**
+     * 微信小程序新增患者手术信息
+     * @param source
+     * @return
+     */
+    Boolean stdAddWxApplet(BizClinicAddOrEditDTO source);
+
+    /**
+     * 微信小程序编辑患者手术信息
+     * @param source
+     * @return
+     */
+    Boolean stdEditWxApplet(BizClinicAddOrEditDTO source);
+
+    /**
+     * 微信小程序查询患者详情
+     * @param id
+     * @return
+     */
+    BizWxAppletClinicVO stdSelectWxAppletById(String id);
+
+    /**
+     * 微信端删除患者信息
+     * @param ids
+     * @return
+     */
+    Integer removeBizClinicByIds(Collection<String> ids);
+
+    BizPreSurgeryQuestionVO selectPreSurgeryQuestionnaire(String clinicId);
+
     /**
      * 根据条件查询诊疗室
      * @param    query 查询参数

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

@@ -51,4 +51,27 @@ public interface IBizClinicRoomWxUserService{
      * @date    2025/06/09 11:54
      */
     int removeBizClinicRoomWxUserByIds(Collection<String> ids);
+
+    /**
+     * 小程序切换看护患者
+     * @param userId
+     * @param clinicId
+     * @return
+     */
+    Boolean shiftWxAppletCurrent(String userId, String clinicId);
+
+    /**
+     * 患者小程序新增监护手术信息
+     * @param userId
+     * @param clinicRoomId
+     */
+    void stdWxAppletInsertBizClinicRoomWxUser(String userId, String clinicRoomId);
+
+    /**
+     * 患者小程序删除手术信息
+     * @param userId
+     * @param ids
+     * @return
+     */
+    Integer stdWxAppletRemoveBizClinicRoomWxUserByUserIdAndIds(String userId, Collection<String> ids);
 }

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

@@ -1,74 +0,0 @@
-package cn.tr.module.smart.common.service;
-
-import cn.tr.module.smart.common.dto.BizClinicDTO;
-import cn.tr.module.smart.common.dto.BizClinicQueryDTO;
-import cn.tr.module.smart.wx.controller.vo.BizPreSurgeryQuestionVO;
-import cn.tr.module.smart.wx.controller.vo.BizWxDeptQuestionVO;
-import cn.tr.module.smart.wx.dto.BizClinicAddOrEditDTO;
-import cn.tr.module.smart.wx.dto.BizWxAppletClinicQueryDTO;
-import cn.tr.module.smart.wx.dto.BizWxAppletClinicShiftCareDTO;
-import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicVO;
-
-import java.util.*;
-
-/**
- * 手术信息Service接口
- *
- * @author lf
- * @date  2025/05/23 14:17
- **/
-public interface IBizClinicService{
-
-    /**
-     * 根据条件查询手术信息
-     * @param    query 查询参数
-     * @author   lf
-     * @date      2025/05/23 14:17
-     */
-    List<BizClinicDTO> selectBizClinicList(BizClinicQueryDTO query);
-
-    /**
-     * 根据id查询手术信息
-     * @param    id 主键id
-     * @author   lf
-     * @date      2025/05/23 14:17
-     */
-    BizClinicDTO selectBizClinicById(String id);
-
-    /**
-     * 删除手术信息详情
-     * @param  ids 删除主键集合
-     * @author lf
-     * @date    2025/05/23 14:17
-     */
-    int removeBizClinicByIds(Collection<String> ids);
-
-    /**
-     * 微信小程序查询当前用户当前医院所绑定的患者信息
-     * @param query
-     * @return
-     */
-    List<BizWxAppletClinicVO>  stdSelectWxAppletList(BizWxAppletClinicQueryDTO query);
-
-    /**
-     * 微信小程序查询当前用户当前医院所看护的当前患者信息
-     * @param currentUserId
-     * @return
-     */
-    BizWxAppletClinicVO stdSelectWxAppletCareClinicList(String currentUserId);
-
-    /**
-     * 微信小程序查询切换当前用户当前医院所看护的当前患者信息
-     * @param source
-     * @return
-     */
-    Boolean shiftWxAppletCurrent(BizWxAppletClinicShiftCareDTO source);
-
-    Boolean stdWxAppletAdd(BizClinicAddOrEditDTO source);
-
-    Boolean stdWxAppletEdit(BizClinicAddOrEditDTO source);
-
-    BizWxAppletClinicVO stdSelectWxAppletById(String id);
-
-    BizPreSurgeryQuestionVO selectPreSurgeryQuestionnaire(String clinicId);
-}

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

@@ -4,6 +4,9 @@ import cn.tr.module.smart.app.controller.dto.WxDoctorPatientInfoDTO;
 import cn.tr.module.smart.app.controller.vo.WxDoctorPatientVO;
 import cn.tr.module.smart.common.dto.BizPatientDTO;
 import cn.tr.module.smart.common.dto.BizPatientQueryDTO;
+import cn.tr.module.smart.common.po.BizPatientPO;
+import cn.tr.module.smart.wx.dto.BizClinicAddOrEditDTO;
+
 import java.util.*;
 
 /**
@@ -36,7 +39,7 @@ public interface IBizPatientService{
      * @author  lf
      * @date     2025/06/09 15:58
      */
-    boolean updateBizPatientById(BizPatientDTO source);
+    boolean updateBizPatientById(BizClinicAddOrEditDTO source);
 
     /**
      * 新增患者信息
@@ -44,7 +47,7 @@ public interface IBizPatientService{
      * @author lf
      * @date  2025/06/09 15:58
      */
-    boolean insertBizPatient(BizPatientDTO source);
+    boolean insertBizPatient(BizClinicAddOrEditDTO source);
 
     /**
      * 删除患者信息详情
@@ -60,4 +63,6 @@ public interface IBizPatientService{
      * @date 2025/6/10
      */
     List<WxDoctorPatientVO>  selectPatientList(WxDoctorPatientInfoDTO source);
+
+    BizPatientPO insertBizPatientAndReturnObj(BizClinicAddOrEditDTO source);
 }

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

@@ -1,12 +1,27 @@
 package cn.tr.module.smart.common.service.impl;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.module.smart.app.controller.dto.WxDoctorClinicRoomDTO;
 import cn.tr.module.smart.app.controller.vo.WxDoctorClinicRoomVO;
+import cn.tr.module.smart.common.dto.BizDeptDTO;
+import cn.tr.module.smart.common.enums.UserTypeEnums;
+import cn.tr.module.smart.common.po.BizClinicRoomWxUserPO;
+import cn.tr.module.smart.common.po.BizPatientPO;
+import cn.tr.module.smart.common.repository.BizClinicRoomWxUserRepository;
+import cn.tr.module.smart.common.repository.BizPatientRepository;
+import cn.tr.module.smart.common.service.*;
+import cn.tr.module.smart.wx.controller.vo.BizPreSurgeryQuestionVO;
 import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicVO;
+import cn.tr.module.smart.wx.controller.vo.BizWxDeptQuestionVO;
+import cn.tr.module.smart.wx.dto.BizClinicAddOrEditDTO;
 import cn.tr.module.smart.wx.dto.BizWxAppletClinicQueryDTO;
+import cn.tr.plugin.security.bo.UserLoginInfoBO;
+import cn.tr.plugin.security.context.LoginUserContextHolder;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import cn.hutool.core.collection.CollectionUtil;
 import org.springframework.transaction.annotation.Transactional;
@@ -18,8 +33,8 @@ import cn.tr.module.smart.common.dto.BizClinicRoomDTO;
 import cn.tr.module.smart.common.dto.BizClinicRoomQueryDTO;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
-import cn.tr.module.smart.common.service.IBizClinicRoomService;
 import cn.tr.module.smart.common.mapper.BizClinicRoomMapper;
 
 /**
@@ -33,12 +48,172 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
     @Autowired
     private BizClinicRoomRepository baseRepository;
 
+    @Autowired
+    private BizPatientRepository patientRepository;
+
+    @Autowired
+    private IBizPatientService patientService;
+
+    @Autowired
+    private BizClinicRoomWxUserRepository clinicRoomWxUserRepository;
+
+    @Autowired
+    @Lazy
+    private IBizClinicRoomWxUserService roomWxUserService;
+
 
+    @Autowired
+    private IBizQuestionService bizQuestionService;
+
+    @Autowired
+    private IBizDeptService bizDeptService;
     @Override
     public List<BizWxAppletClinicVO> stdSelectWxAppletClinicList(BizWxAppletClinicQueryDTO query) {
         return baseRepository.stdSelectWxAppletClinicList(query);
     }
 
+    @Override
+    public BizWxAppletClinicVO stdSelectWxAppletCareClinicByUserId(String currentUserId) {
+        return baseRepository.stdSelectWxAppletCareClinicByUserId(currentUserId);
+    }
+
+    /**
+     * 新增手术信息 对于手术时间,患者只精确到日,医生端精确到小时
+     * 1、一个住院号对应1个病人
+     * 2、一个病人对应多场手术信息
+     * 3、病人信息中记录最新的手术数据
+     * @param source
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean stdAddWxApplet(BizClinicAddOrEditDTO source) {
+        String userId = LoginUserContextHolder.getUser().getUserId();
+        String patientCode = source.getPatientCode();
+        Date clinicStartTime = source.getClinicStartTime();
+        //1、先判断住院号这一天是否已经有患者添加过了
+        BizClinicRoomPO clinicRoom=baseRepository.stdWxAppletSelectByPatientCodeAndClinicStartTime(patientCode,clinicStartTime);
+        if (ObjectUtil.isNotNull(clinicRoom)) {
+            //手术已经存在,判断该手术是否已被患者端监护
+            BizClinicRoomWxUserPO clinicRoomWxUserPO = clinicRoomWxUserRepository.selectOne(new LambdaQueryWrapper<BizClinicRoomWxUserPO>()
+                    .eq(BizClinicRoomWxUserPO::getClinicRoomId, clinicRoom.getId())
+                    .eq(BizClinicRoomWxUserPO::getWxUserId, userId)
+                    .last("limit 1"));
+            if (ObjectUtil.isNotNull(clinicRoomWxUserPO)) {
+                throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("住院号{%s}于{%s}已存在手术:{%s},请勿重复添加",patientCode, DateUtil.formatDate(clinicStartTime),clinicRoom.getClinicName()));
+            }
+            //若未监护,则证明该手术是由医生端发起的,添加监护信息(手术信息以医生输入为主,如果医生没有输入,则按照病人输入的来)
+            roomWxUserService.stdWxAppletInsertBizClinicRoomWxUser(userId,clinicRoom.getId());
+            //更新监护信息
+            updateClinicInfoBaseOnDoctorByWxApplet(clinicRoom,source);
+            baseRepository.updateById(clinicRoom);
+        }else {
+            //手术不存在,则新增手术信息
+            //1、先判断是否已经添加过了患者信息
+            BizPatientPO patient = patientRepository.selectOne(new LambdaQueryWrapper<BizPatientPO>()
+                    .eq(BizPatientPO::getPatientCode, patientCode)
+                    .last("limit 1"));
+            if(ObjectUtil.isNull(patient)){
+                patient=patientService.insertBizPatientAndReturnObj(source);
+            }
+            clinicRoom = BizClinicRoomMapper.INSTANCE.convertPO(source);
+            clinicRoom.setPatientId(patient.getId());
+            clinicRoom.setFollowUpCount(0);
+            clinicRoom.setFollowUp(Boolean.FALSE);
+            this.baseRepository.insert(clinicRoom);
+            //更新患者绑定的最新手术id
+            patient.setCurrentClinicId(clinicRoom.getId());
+            patientRepository.updateById(patient);
+            //更新微信用户患者列表
+            roomWxUserService.stdWxAppletInsertBizClinicRoomWxUser(userId,clinicRoom.getId());
+        }
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 微信端编辑手术信息
+     * @param source
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean stdEditWxApplet(BizClinicAddOrEditDTO source) {
+        String id = source.getId();
+        source.setPatientCode(null);
+        BizClinicRoomPO clinicRoomPO = baseRepository.selectById(id);
+        if(ObjectUtil.isNull(clinicRoomPO)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"手术信息不存在");
+        }
+        BizClinicRoomPO updateSource = BizClinicRoomMapper.INSTANCE.convertPO(source);
+        //医生已确认数据,则患者只能编辑一些基本信息、如病人名称、年龄、性别
+        if(StrUtil.equals(clinicRoomPO.getLastModifyUserType(), UserTypeEnums.APP_DOCTOR)){
+            updateSource.setClinicStartTime(null);
+            updateSource.setClinicName(null);
+            updateSource.setDeptName(null);
+            updateSource.setDeptId(null);
+        }
+        return baseRepository.updateById(clinicRoomPO)!=0;
+    }
+
+    @Override
+    public BizWxAppletClinicVO stdSelectWxAppletById(String id) {
+        return baseRepository.stdSelectWxAppletById(id);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Integer removeBizClinicByIds(Collection<String> ids) {
+        UserLoginInfoBO user = LoginUserContextHolder.getUser();
+        String userId = user.getUserId();
+        Integer deletedCount = roomWxUserService.stdWxAppletRemoveBizClinicRoomWxUserByUserIdAndIds(userId, ids);
+        if(deletedCount!=0){
+            //重新设置当前看护患者
+            BizWxAppletClinicQueryDTO clinicQuery = new BizWxAppletClinicQueryDTO();
+            clinicQuery.setUserId(userId);
+            clinicQuery.setTenantId(user.getTenantId());
+            List<BizWxAppletClinicVO> clinicList = stdSelectWxAppletClinicList(clinicQuery);
+            if(CollectionUtil.isNotEmpty(clinicList)){
+                clinicList= clinicList.stream()
+                        .sorted(Comparator.comparing(BizWxAppletClinicVO::getClinicStartTime)).collect(Collectors.toList());
+                roomWxUserService.shiftWxAppletCurrent(userId,CollectionUtil.getFirst(clinicList).getId());
+            }
+        }
+        return deletedCount;
+    }
+
+    @Override
+    public BizPreSurgeryQuestionVO selectPreSurgeryQuestionnaire(String clinicId) {
+        //判断临床id是否为空
+        if(StrUtil.isBlank(clinicId)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"参数为空");
+        }
+        BizClinicRoomPO clinic = baseRepository.selectById(clinicId);
+        if (ObjectUtil.isNull(clinic)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"手术信息不存在");
+        }
+        String deptId = clinic.getDeptId();
+        Date lastQuestionTime = clinic.getLastQuestionTime();
+
+        //判断科室id是否为空
+        if(StrUtil.isBlank(deptId)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"手术未关联科室");
+        }
+        BizDeptDTO bizDeptDTO = bizDeptService.selectBizDeptById(deptId);
+        if (ObjectUtil.isNull(bizDeptDTO)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"科室信息不存在");
+        }
+        String groupId = bizDeptDTO.getGroupId();
+        //通过获取到的groupId查询问卷调查问题表
+        List<BizWxDeptQuestionVO> questionVOList = bizQuestionService.selectBizQuestionByGroupId(groupId);
+
+        BizPreSurgeryQuestionVO result = new BizPreSurgeryQuestionVO();
+        result.setDataList(questionVOList);
+        result.setLastQuestionTime(lastQuestionTime);
+
+
+        return result;
+    }
+
     /**
      * 根据条件查询诊疗室
      *
@@ -127,4 +302,28 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
         return baseRepository.selectByClinicRoomAndPatientList(source);
     }
 
+    /**
+     * 微信小程序基于医生已填写的信息更新数据
+     */
+    private void updateClinicInfoBaseOnDoctorByWxApplet(BizClinicRoomPO baseInfo,BizClinicAddOrEditDTO source){
+        if(ObjectUtil.isNull(source)){
+            return;
+        }
+        if (ObjectUtil.isNull(baseInfo.getPatientAge())) {
+            baseInfo.setPatientAge(source.getPatientAge());
+        }
+        if (StrUtil.isBlank(baseInfo.getDeptId())) {
+            baseInfo.setDeptId(source.getDeptId());
+        }
+        if (StrUtil.isBlank(baseInfo.getDeptName())) {
+            baseInfo.setDeptName(source.getDeptName());
+        }
+        if (StrUtil.isBlank(baseInfo.getClinicName())) {
+            baseInfo.setClinicName(source.getClinicName());
+        }
+        if (ObjectUtil.isNull(baseInfo.getClinicStartTime())) {
+            baseInfo.setClinicStartTime(source.getClinicStartTime());
+        }
+    }
+
 }

+ 72 - 27
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizClinicRoomWxUserServiceImpl.java

@@ -1,6 +1,10 @@
 package cn.tr.module.smart.common.service.impl;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.tr.core.exception.TRExcCode;
+import cn.tr.module.smart.common.po.BizClinicRoomPO;
+import cn.tr.module.smart.common.repository.BizClinicRoomRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import cn.hutool.core.collection.CollectionUtil;
@@ -25,13 +29,15 @@ public class BizClinicRoomWxUserServiceImpl implements IBizClinicRoomWxUserServi
     @Autowired
     private BizClinicRoomWxUserRepository baseRepository;
 
+    @Autowired
+    private BizClinicRoomRepository clinicRoomRepository;
 
     /**
-    * 根据条件查询诊室患者绑定id
-    * @param    query 查询参数
-    * @author   lf
-    * @date      2025/06/09 11:54
-    */
+     * 根据条件查询诊室患者绑定id
+     * @param    query 查询参数
+     * @author   lf
+     * @date      2025/06/09 11:54
+     */
     @Override
     public List<BizClinicRoomWxUserDTO> selectBizClinicRoomWxUserList(BizClinicRoomWxUserQueryDTO query){
         return BizClinicRoomWxUserMapper.INSTANCE.convertDtoList(
@@ -41,34 +47,34 @@ public class BizClinicRoomWxUserServiceImpl implements IBizClinicRoomWxUserServi
     };
 
     /**
-    * 根据id查询诊室患者绑定id
-    * @param    id 主键id
-    * @author   lf
-    * @date      2025/06/09 11:54
-    */
+     * 根据id查询诊室患者绑定id
+     * @param    id 主键id
+     * @author   lf
+     * @date      2025/06/09 11:54
+     */
     @Override
     public BizClinicRoomWxUserDTO selectBizClinicRoomWxUserById(String id){
         return BizClinicRoomWxUserMapper.INSTANCE.convertDto(baseRepository.selectById(id));
     };
 
     /**
-    * 编辑诊室患者绑定id
-    * @param   source 编辑实体类
-    * @author  lf
-    * @date     2025/06/09 11:54
-    */
+     * 编辑诊室患者绑定id
+     * @param   source 编辑实体类
+     * @author  lf
+     * @date     2025/06/09 11:54
+     */
     @Transactional(rollbackFor = Exception.class)
     @Override
     public boolean updateBizClinicRoomWxUserById(BizClinicRoomWxUserDTO source){
-            return baseRepository.updateById(BizClinicRoomWxUserMapper.INSTANCE.convertPO(source))!=0;
+        return baseRepository.updateById(BizClinicRoomWxUserMapper.INSTANCE.convertPO(source))!=0;
     };
 
     /**
-    * 新增诊室患者绑定id
-    * @param   source 新增实体类
-    * @author lf
-    * @date  2025/06/09 11:54
-    */
+     * 新增诊室患者绑定id
+     * @param   source 新增实体类
+     * @author lf
+     * @date  2025/06/09 11:54
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean insertBizClinicRoomWxUser(BizClinicRoomWxUserDTO source){
@@ -76,11 +82,11 @@ public class BizClinicRoomWxUserServiceImpl implements IBizClinicRoomWxUserServi
     };
 
     /**
-    * 删除诊室患者绑定id详情
-    * @param  ids 删除主键集合
-    * @author lf
-    * @date    2025/06/09 11:54
-    */
+     * 删除诊室患者绑定id详情
+     * @param  ids 删除主键集合
+     * @author lf
+     * @date    2025/06/09 11:54
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int removeBizClinicRoomWxUserByIds(Collection<String> ids){
@@ -88,5 +94,44 @@ public class BizClinicRoomWxUserServiceImpl implements IBizClinicRoomWxUserServi
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"请选择要删除的数据");
         }
         return baseRepository.deleteBatchIds(ids);
-    };
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean shiftWxAppletCurrent(String userId, String clinicId) {
+        BizClinicRoomWxUserPO bizClinicRoomWxUserPO = this.baseRepository.selectOne(new LambdaQueryWrapper<BizClinicRoomWxUserPO>()
+                .eq(BizClinicRoomWxUserPO::getWxUserId, userId)
+                .eq(BizClinicRoomWxUserPO::getClinicRoomId, clinicId)
+                .last("limit 1"));
+        if(ObjectUtil.isNull(bizClinicRoomWxUserPO)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"尚未添加该患者数据");
+        }
+        baseRepository.shiftWxAppletCurrent(userId,clinicId);
+        return Boolean.TRUE;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void stdWxAppletInsertBizClinicRoomWxUser(String userId, String clinicRoomId) {
+        BizClinicRoomWxUserPO clinicRoomWxUserPO = new BizClinicRoomWxUserPO();
+        clinicRoomWxUserPO.setClinicRoomId(clinicRoomId);
+        clinicRoomWxUserPO.setWxUserId(userId);
+        clinicRoomWxUserPO.setCare(Boolean.FALSE);
+        baseRepository.insert(clinicRoomWxUserPO);
+        //将新增的患者更新为默认监护的的患者
+        shiftWxAppletCurrent(userId,clinicRoomId);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Integer stdWxAppletRemoveBizClinicRoomWxUserByUserIdAndIds(String userId, Collection<String> ids) {
+        //如果医生也没有监护,则直接删除病患信息
+        int result = baseRepository.delete(new LambdaQueryWrapper<BizClinicRoomWxUserPO>()
+                .eq(BizClinicRoomWxUserPO::getWxUserId, userId)
+                .in(BizClinicRoomWxUserPO::getClinicRoomId, ids));
+        if(result!=0){
+            clinicRoomRepository.deleteBatchIds(ids);
+        }
+        return result;
+    }
 }

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

@@ -1,238 +0,0 @@
-package cn.tr.module.smart.common.service.impl;
-
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.tr.core.exception.TRExcCode;
-import cn.tr.core.strategy.LoginUserStrategy;
-import cn.tr.module.smart.common.dto.BizDeptDTO;
-import cn.tr.module.smart.common.po.BizDeptPO;
-import cn.tr.module.smart.common.repository.BizDeptRepository;
-import cn.tr.module.smart.common.service.IBizDeptService;
-import cn.tr.module.smart.common.service.IBizQuestionService;
-import cn.tr.module.smart.wx.controller.vo.BizPreSurgeryQuestionVO;
-import cn.tr.module.smart.wx.controller.vo.BizWxDeptQuestionVO;
-import cn.tr.module.smart.wx.dto.BizClinicAddOrEditDTO;
-import cn.tr.module.smart.wx.dto.BizWxAppletClinicQueryDTO;
-import cn.tr.module.smart.wx.dto.BizWxAppletClinicShiftCareDTO;
-import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicVO;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.apache.poi.util.StringUtil;
-import org.checkerframework.checker.units.qual.A;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import cn.hutool.core.collection.CollectionUtil;
-import org.springframework.transaction.annotation.Transactional;
-import cn.tr.core.exception.ServiceException;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import cn.tr.module.smart.common.repository.BizClinicRepository;
-import cn.tr.module.smart.common.po.BizClinicPO;
-import cn.tr.module.smart.common.dto.BizClinicDTO;
-import cn.tr.module.smart.common.dto.BizClinicQueryDTO;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import cn.tr.module.smart.common.service.IBizClinicService;
-import cn.tr.module.smart.common.mapper.BizClinicMapper;
-import org.springframework.util.StringUtils;
-
-/**
- * 手术信息Service接口实现类
- *
- * @author lf
- * @date  2025/05/23 14:17
- **/
-@Service
-public class BizClinicServiceImpl extends ServiceImpl<BizClinicRepository,BizClinicPO> implements IBizClinicService {
-
-
-    @Autowired
-    private IBizDeptService bizDeptService;
-
-    @Autowired
-    private IBizQuestionService bizQuestionService;
-
-    @Autowired
-    private BizClinicRepository bizClinicRepository;
-
-
-    /**
-     * 根据条件查询手术信息
-     * @param    query 查询参数
-     * @author   lf
-     * @date      2025/05/23 14:17
-     */
-    @Override
-    public List<BizClinicDTO> selectBizClinicList(BizClinicQueryDTO query){
-        return BizClinicMapper.INSTANCE.convertDtoList(
-                baseMapper.selectList(new LambdaQueryWrapper<BizClinicPO>()
-                )
-        );
-    };
-
-    /**
-     * 根据id查询手术信息
-     * @param    id 主键id
-     * @author   lf
-     * @date      2025/05/23 14:17
-     */
-    @Override
-    public BizClinicDTO selectBizClinicById(String id){
-        return BizClinicMapper.INSTANCE.convertDto(baseMapper.selectById(id));
-    };
-
-
-    /**
-     * 删除手术信息详情
-     * @param  ids 删除主键集合
-     * @author lf
-     * @date    2025/05/23 14:17
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int removeBizClinicByIds(Collection<String> ids){
-        if(CollectionUtil.isEmpty(ids)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"请选择要删除的数据");
-        }
-        //先判断有没有删除数据的权限
-        String userId = LoginUserStrategy.tr.getCurrentUserId();
-        List<BizClinicPO> clinics = baseMapper.selectBatchIds(ids);
-        if(CollectionUtil.isEmpty(clinics)){
-            return 0;
-        }
-        Map<String, List<BizClinicPO>> clinicMap = clinics.stream()
-                .collect(Collectors.groupingBy(BizClinicPO::getWxUserId));
-        if(CollectionUtil.size(clinicMap)>1){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"所选患者手术信息和当前账号没有绑定关系");
-        }
-        List<BizClinicPO> clinicList = clinicMap.get(userId);
-        if(CollectionUtil.isNotEmpty(clinicMap)&&CollectionUtil.isEmpty(clinicList)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"所选患者手术信息和当前账号没有绑定关系");
-        }
-        if(CollectionUtil.isEmpty(clinicList)){
-            return 0;
-        }
-        int result = baseMapper.deleteBatchIds(ids);
-
-        //判断是否删除了当前看护
-        Optional<BizClinicPO> careClinic = clinicList.stream()
-                .filter(clinic -> Boolean.TRUE.equals(clinic.getCare()))
-                .findFirst();
-        if(careClinic.isPresent()){
-            //重新设置看护人员信息
-            BizClinicPO nextCare = baseMapper.selectOne(new LambdaQueryWrapper<BizClinicPO>()
-                    .orderByDesc(BizClinicPO::getLastCareTime)
-                    .last("limit 1"));
-            if(ObjectUtil.isNotNull(nextCare)){
-                baseMapper.updateById(nextCare);
-            }
-        }
-        return result;
-    }
-
-    @Override
-    public List<BizWxAppletClinicVO> stdSelectWxAppletList(BizWxAppletClinicQueryDTO query) {
-//        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
-    public BizWxAppletClinicVO stdSelectWxAppletCareClinicList(String currentUserId) {
-        return BizClinicMapper.INSTANCE.convertWxAppletVO(
-                baseMapper.selectOne(new LambdaQueryWrapper<BizClinicPO>()
-                        .eq(BizClinicPO::getWxUserId, currentUserId)
-                        .eq(BizClinicPO::getCare,Boolean.TRUE)
-                        .last("limit 1"))
-        );
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Boolean shiftWxAppletCurrent(BizWxAppletClinicShiftCareDTO source) {
-        BizClinicPO clinic = baseMapper.selectById(source.getClinicId());
-        if (ObjectUtil.isNull(clinic)) {
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"所切换的患者手术信息不存在");
-        }
-        if (!StrUtil.equals(clinic.getWxUserId(),source.getUserId())) {
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"此患者手术信息和当前账号没有绑定关系");
-        }
-        clinic.setCare(Boolean.TRUE);
-        clinic.setLastCareTime(new Date());
-        baseMapper.updateWxAppletAllNotCare(source.getUserId());
-        baseMapper.updateById(clinic);
-        return Boolean.TRUE;
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Boolean stdWxAppletAdd(BizClinicAddOrEditDTO source) {
-        String currentUserId = LoginUserStrategy.tr.getCurrentUserId();
-        BizClinicPO insertSource = BizClinicMapper.INSTANCE.convertPO(source);
-        //手术状态 todo
-        insertSource.setClinicStatus("");
-        insertSource.setFollowUpCount(0);
-        insertSource.setFollowUp(Boolean.FALSE);
-        insertSource.setCare(Boolean.TRUE);
-        insertSource.setWxUserId(currentUserId);
-        insertSource.setLastCareTime(new Date());
-        baseMapper.insert(insertSource);
-        //切换看护人员
-        shiftWxAppletCurrent(BizWxAppletClinicShiftCareDTO.of(insertSource.getId(),currentUserId));
-        return Boolean.TRUE;
-    }
-
-    @Override
-    public Boolean stdWxAppletEdit(BizClinicAddOrEditDTO source) {
-        return baseMapper.updateById( BizClinicMapper.INSTANCE.convertPO(source))!=0;
-    }
-
-    @Override
-    public BizWxAppletClinicVO stdSelectWxAppletById(String id) {
-        String userId = LoginUserStrategy.tr.getCurrentUserId();
-        BizClinicPO result = baseMapper.selectById(id);
-        if(ObjectUtil.isNull(result)){
-            return null;
-        }
-        if(!StrUtil.equals(result.getWxUserId(),userId)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"此患者手术信息和当前账号没有绑定关系");
-        }
-        return BizClinicMapper.INSTANCE.convertWxAppletVO(result);
-    }
-
-    @Override
-    public BizPreSurgeryQuestionVO selectPreSurgeryQuestionnaire(String clinicId) {
-        //判断临床id是否为空
-        if(StrUtil.isBlank(clinicId)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"参数为空");
-        }
-        BizClinicPO clinic = baseMapper.selectById(clinicId);
-        if (ObjectUtil.isNull(clinic)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"手术信息不存在");
-        }
-        String deptId = clinic.getDeptId();
-        Date lastQuestionTime = clinic.getLastQuestionTime();
-
-        //判断科室id是否为空
-        if(StrUtil.isBlank(deptId)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"手术未关联科室");
-        }
-        BizDeptDTO bizDeptDTO = bizDeptService.selectBizDeptById(deptId);
-        if (ObjectUtil.isNull(bizDeptDTO)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"科室信息不存在");
-        }
-        String groupId = bizDeptDTO.getGroupId();
-        //通过获取到的groupId查询问卷调查问题表
-        List<BizWxDeptQuestionVO> questionVOList = bizQuestionService.selectBizQuestionByGroupId(groupId);
-
-        BizPreSurgeryQuestionVO result = new BizPreSurgeryQuestionVO();
-        result.setDataList(questionVOList);
-        result.setLastQuestionTime(lastQuestionTime);
-
-
-        return result;
-    }
-}

+ 5 - 5
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizMissionDocServiceImpl.java

@@ -9,7 +9,7 @@ import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.core.strategy.LoginUserStrategy;
 import cn.tr.core.utils.JsonUtils;
-import cn.tr.module.smart.common.constant.PhaseConstant;
+import cn.tr.module.smart.common.enums.ClinicPhaseEnums;
 import cn.tr.module.smart.common.dto.BizMissionDocAndSquareCoverDTO;
 import cn.tr.module.smart.common.dto.BizMissionDocDTO;
 import cn.tr.module.smart.common.dto.BizMissionDocJsonDTO;
@@ -47,7 +47,7 @@ public class BizMissionDocServiceImpl implements IBizMissionDocService {
     @Resource
     private BizMissionDocSquareRepository bizMissionDocSquareRepository;
     @Resource
-    private BizClinicRepository bizClinicRepository;
+    private BizClinicRoomRepository clinicRoomRepository;
     @Resource
     private BizDocDeptRepository bizDocDeptRepository;
 
@@ -201,7 +201,7 @@ public class BizMissionDocServiceImpl implements IBizMissionDocService {
      */
     @Override
     public List<BizDeptAndDocVO> selectWxMissionDocList(BizWxMissionDocQueryDTO query) {
-        BizClinicPO bizClinicPO = bizClinicRepository.selectById(query.getClinicId());
+        BizClinicRoomPO bizClinicPO = clinicRoomRepository.selectById(query.getClinicId());
         if (Objects.isNull(bizClinicPO)) {
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "患者手术信息不存在");
         }
@@ -256,9 +256,9 @@ public class BizMissionDocServiceImpl implements IBizMissionDocService {
         boolean isBefore = DateUtil.compare(queryDate, clinicStartTime) <= 0;
         String phase;
         if (isBefore) {
-            phase = PhaseConstant.BEFORE;
+            phase = ClinicPhaseEnums.BEFORE;
         } else {
-            phase = PhaseConstant.AFTER;
+            phase = ClinicPhaseEnums.AFTER;
         }
         return baseRepository.selectBizDeptAndDocByDeptIdList(new BizWxQueryDTO(deptId, time, phase));
     }

+ 38 - 31
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizPatientServiceImpl.java

@@ -3,6 +3,7 @@ package cn.tr.module.smart.common.service.impl;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.module.smart.app.controller.dto.WxDoctorPatientInfoDTO;
 import cn.tr.module.smart.app.controller.vo.WxDoctorPatientVO;
+import cn.tr.module.smart.wx.dto.BizClinicAddOrEditDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import cn.hutool.core.collection.CollectionUtil;
@@ -27,13 +28,20 @@ public class BizPatientServiceImpl implements IBizPatientService {
     @Autowired
     private BizPatientRepository baseRepository;
 
-
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public BizPatientPO insertBizPatientAndReturnObj(BizClinicAddOrEditDTO source) {
+        BizPatientPO insertSource = new BizPatientPO();
+        insertSource.setPatientCode(source.getPatientCode());
+        baseRepository.insert(insertSource);
+        return insertSource;
+    }
     /**
-    * 根据条件查询患者信息
-    * @param    query 查询参数
-    * @author   lf
-    * @date      2025/06/09 15:58
-    */
+     * 根据条件查询患者信息
+     * @param    query 查询参数
+     * @author   lf
+     * @date      2025/06/09 15:58
+     */
     @Override
     public List<BizPatientDTO> selectBizPatientList(BizPatientQueryDTO query){
         return BizPatientMapper.INSTANCE.convertDtoList(
@@ -43,46 +51,46 @@ public class BizPatientServiceImpl implements IBizPatientService {
     };
 
     /**
-    * 根据id查询患者信息
-    * @param    id 主键id
-    * @author   lf
-    * @date      2025/06/09 15:58
-    */
+     * 根据id查询患者信息
+     * @param    id 主键id
+     * @author   lf
+     * @date      2025/06/09 15:58
+     */
     @Override
     public BizPatientDTO selectBizPatientById(String id){
         return BizPatientMapper.INSTANCE.convertDto(baseRepository.selectById(id));
     };
 
     /**
-    * 编辑患者信息
-    * @param   source 编辑实体类
-    * @author  lf
-    * @date     2025/06/09 15:58
-    */
+     * 编辑患者信息
+     * @param   source 编辑实体类
+     * @author  lf
+     * @date     2025/06/09 15:58
+     */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public boolean updateBizPatientById(BizPatientDTO source){
-            return baseRepository.updateById(BizPatientMapper.INSTANCE.convertPO(source))!=0;
+    public boolean updateBizPatientById(BizClinicAddOrEditDTO source){
+        return true;
     };
 
     /**
-    * 新增患者信息
-    * @param   source 新增实体类
-    * @author lf
-    * @date  2025/06/09 15:58
-    */
+     * 新增患者信息
+     * @param   source 新增实体类
+     * @author lf
+     * @date  2025/06/09 15:58
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean insertBizPatient(BizPatientDTO source){
-        return baseRepository.insert(BizPatientMapper.INSTANCE.convertPO(source))!=0;
+    public boolean insertBizPatient(BizClinicAddOrEditDTO source){
+        return true;
     };
 
     /**
-    * 删除患者信息详情
-    * @param  ids 删除主键集合
-    * @author lf
-    * @date    2025/06/09 15:58
-    */
+     * 删除患者信息详情
+     * @param  ids 删除主键集合
+     * @author lf
+     * @date    2025/06/09 15:58
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int removeBizPatientByIds(Collection<String> ids){
@@ -102,5 +110,4 @@ public class BizPatientServiceImpl implements IBizPatientService {
     public List<WxDoctorPatientVO> selectPatientList(WxDoctorPatientInfoDTO source) {
         return baseRepository.selectPatientList(source);
     }
-
 }

+ 0 - 65
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/web/controller/BizClinicController.java

@@ -1,65 +0,0 @@
-package cn.tr.module.smart.web.controller;
-
-import cn.dev33.satoken.annotation.SaCheckLogin;
-import cn.tr.module.sys.oauth2.LoginTypeConstant;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.tr.core.validation.Insert;
-import cn.tr.core.validation.Update;
-import cn.tr.core.pojo.CommonResult;
-import lombok.AllArgsConstructor;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-import cn.tr.module.smart.common.dto.BizClinicDTO;
-import cn.tr.module.smart.common.service.IBizClinicService;
-import cn.tr.module.smart.common.dto.BizClinicQueryDTO;
-import java.util.*;
-import cn.tr.plugin.mybatis.base.BaseController;
-import org.springframework.web.bind.annotation.*;
-import cn.tr.module.api.sys.log.annotation.OperateLog;
-import cn.tr.core.pojo.TableDataInfo;
-/**
- * 手术信息控制器
- *
- * @author lf
- * @date  2025/05/23 14:17
- */
-@Api(tags = "手术信息")
-@RestController
-@RequestMapping("/web/clinic")
-@AllArgsConstructor
-//@SaCheckLogin(type = LoginTypeConstant.WEB)
-public class BizClinicController extends BaseController{
-
-    private final IBizClinicService bizClinicService;
-
-    @ApiOperationSupport(author = "lf",order = 1)
-    @ApiOperation(value="根据条件查询手术信息",notes = "权限: 无")
-    @PostMapping("/query/page")
-    public TableDataInfo<BizClinicDTO> selectList(@RequestBody BizClinicQueryDTO query) {
-        startPage();
-        return getDataTable(bizClinicService.selectBizClinicList(query));
-    }
-
-    @ApiOperationSupport(author = "lf",order = 2)
-    @ApiOperation(value = "根据id查询手术信息",notes = "权限: wx:clinic:query")
-    @GetMapping("/detail/{id}")
-    @SaCheckPermission("wx:clinic:query")
-    public CommonResult<BizClinicDTO> findById(@PathVariable("id") String id){
-        return CommonResult.success(bizClinicService.selectBizClinicById(id));
-    }
-
-    @ApiOperationSupport(author = "lf",order = 5)
-    @ApiOperation(value="删除手术信息",notes = "权限: wx:clinic:remove")
-    @PostMapping("/removeByIds")
-    @OperateLog
-    @SaCheckPermission("wx:clinic:remove")
-    public CommonResult<Integer> delete(@RequestBody Collection<String> ids) {
-        return CommonResult.success(bizClinicService.removeBizClinicByIds(ids));
-    }
-}

+ 1 - 21
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/web/controller/BizPatientController.java

@@ -2,13 +2,11 @@ package cn.tr.module.smart.web.controller;
 
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.tr.core.validation.Insert;
-import cn.tr.core.validation.Update;
+
 import cn.tr.core.pojo.CommonResult;
 import lombok.AllArgsConstructor;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -51,24 +49,6 @@ public class BizPatientController extends BaseController{
         return CommonResult.success(bizPatientService.selectBizPatientById(id));
     }
 
-    @ApiOperationSupport(author = "lf",order = 3)
-    @ApiOperation(value="添加患者信息",notes = "权限: common:patient:add")
-    @PostMapping("/add")
-    @OperateLog
-    @SaCheckPermission("common:patient:add")
-    public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) BizPatientDTO source) {
-        return CommonResult.success(bizPatientService.insertBizPatient(source));
-    }
-
-    @ApiOperationSupport(author = "lf",order = 4)
-    @ApiOperation(value="通过主键id编辑患者信息",notes = "权限: common:patient:edit")
-    @PostMapping("/edit")
-    @OperateLog
-    @SaCheckPermission("common:patient:edit")
-    public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) BizPatientDTO source) {
-        return CommonResult.success(bizPatientService.updateBizPatientById(source));
-    }
-
     @ApiOperationSupport(author = "lf",order = 5)
     @ApiOperation(value="删除患者信息",notes = "权限: common:patient:remove")
     @PostMapping("/removeByIds")

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

@@ -6,13 +6,12 @@ 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.common.service.IBizClinicRoomWxUserService;
 import cn.tr.module.smart.wx.controller.vo.BizPreSurgeryQuestionVO;
 import cn.tr.module.smart.wx.dto.BizClinicAddOrEditDTO;
 import cn.tr.module.smart.wx.dto.BizWxAppletClinicQueryDTO;
 import cn.tr.module.smart.wx.dto.BizWxAppletClinicShiftCareDTO;
 import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicVO;
-import cn.tr.module.sys.oauth2.LoginTypeConstant;
 import cn.tr.plugin.mybatis.base.BaseController;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
@@ -35,22 +34,22 @@ import java.util.*;
 //@SaCheckLogin(type = LoginTypeConstant.WX_APPLET)
 public class BizWxAppletClinicController extends BaseController{
 
-    private final IBizClinicService clinicService;
     private final IBizClinicRoomService clinicRoomService;
+    private final IBizClinicRoomWxUserService roomWxUserService;
     @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)
     @ApiOperation(value="获取当前看护患者手术信息",notes = "权限: 无")
     @PostMapping("/query/care")
     public CommonResult<BizWxAppletClinicVO> selectCurrentClinic() {
-        return CommonResult.success(clinicService.stdSelectWxAppletCareClinicList(LoginUserStrategy.tr.getCurrentUserId()));
+        return CommonResult.success(clinicRoomService.stdSelectWxAppletCareClinicByUserId(LoginUserStrategy.tr.getCurrentUserId()));
     }
 
     @ApiOperationSupport(author = "lf",order = 3)
@@ -58,42 +57,42 @@ public class BizWxAppletClinicController extends BaseController{
     @PostMapping("/shift/care")
     public CommonResult<Boolean> shiftCurrent(@RequestBody BizWxAppletClinicShiftCareDTO source) {
         source.setUserId(LoginUserStrategy.tr.getCurrentUserId());
-        return CommonResult.success(clinicService.shiftWxAppletCurrent(source));
+        return CommonResult.success(roomWxUserService.shiftWxAppletCurrent(source.getUserId(),source.getClinicId()));
     }
 
     @ApiOperationSupport(author = "lf",order = 4)
-    @ApiOperation(value="添加患者手术信息)",notes = "权限: 无")
+    @ApiOperation(value="添加患者手术信息",notes = "权限: 无")
     @PostMapping("/add")
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) BizClinicAddOrEditDTO source) {
-        return CommonResult.success(clinicService.stdWxAppletAdd(source));
+        return CommonResult.success(clinicRoomService.stdAddWxApplet(source));
     }
 
     @ApiOperationSupport(author = "lf",order = 5)
-    @ApiOperation(value="编辑患者手术信息)",notes = "权限: 无")
+    @ApiOperation(value="编辑患者手术信息",notes = "权限: 无")
     @PostMapping("/edit")
     public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) BizClinicAddOrEditDTO source) {
-        return CommonResult.success(clinicService.stdWxAppletEdit(source));
+        return CommonResult.success(clinicRoomService.stdEditWxApplet(source));
     }
 
     @ApiOperationSupport(author = "lf",order = 6)
     @ApiOperation(value="删除患者手术信息",notes = "权限: 无")
     @PostMapping("/removeByIds")
     public CommonResult<Integer> delete(@RequestBody Collection<String> ids) {
-        return CommonResult.success(clinicService.removeBizClinicByIds(ids));
+        return CommonResult.success(clinicRoomService.removeBizClinicByIds(ids));
     }
 
     @ApiOperationSupport(author = "lf",order = 7)
     @ApiOperation(value="查询患者手术详情",notes = "权限: 无")
     @GetMapping("/detail/{id}")
     public CommonResult<BizWxAppletClinicVO> detail(@PathVariable("id") String id) {
-        return CommonResult.success(clinicService.stdSelectWxAppletById(id));
+        return CommonResult.success(clinicRoomService.stdSelectWxAppletById(id));
     }
 
     @ApiOperationSupport(author = "zzy",order = 8)
     @GetMapping("/preSurgeryQuestionnaire/{clinicId}")
     @ApiOperation(value = "术前问卷",notes = "权限: 无")
     public CommonResult<BizPreSurgeryQuestionVO> preSurgeryQuestionnaire(@PathVariable("clinicId") String clinicId){
-        return CommonResult.success(clinicService.selectPreSurgeryQuestionnaire(clinicId));
+        return CommonResult.success(clinicRoomService.selectPreSurgeryQuestionnaire(clinicId));
     }
 
 }

+ 44 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/BizWxAppletDeptController.java

@@ -0,0 +1,44 @@
+package cn.tr.module.smart.wx.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.tr.core.pojo.CommonResult;
+import cn.tr.core.pojo.TableDataInfo;
+import cn.tr.core.validation.Insert;
+import cn.tr.core.validation.Update;
+import cn.tr.module.api.sys.log.annotation.OperateLog;
+import cn.tr.module.smart.common.dto.BizDeptDTO;
+import cn.tr.module.smart.common.dto.BizDeptQueryDTO;
+import cn.tr.module.smart.common.service.IBizDeptService;
+import cn.tr.plugin.mybatis.base.BaseController;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+/**
+ * 科室控制器
+ *
+ * @author lf
+ * @date  2025/06/04 14:09
+ */
+@Api(tags = "科室")
+@RestController
+@RequestMapping("/wx/dept")
+@AllArgsConstructor
+//@SaCheckLogin(type = LoginTypeConstant.WX_APPLET)
+public class BizWxAppletDeptController extends BaseController{
+
+    private final IBizDeptService bizDeptService;
+
+    @ApiOperationSupport(author = "lf",order = 2)
+    @ApiOperation(value = "根据id查询科室",notes = "权限: biz:dept:query")
+    @GetMapping("/detail/{id}")
+    @SaCheckPermission("biz:dept:query")
+    public CommonResult<BizDeptDTO> findById(@PathVariable("id") String id){
+        return CommonResult.success(bizDeptService.selectBizDeptById(id));
+    }
+}

+ 47 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/vo/BizWxDeptVO.java

@@ -0,0 +1,47 @@
+package cn.tr.module.smart.wx.controller.vo;
+
+import cn.tr.core.tree.TreeNode;
+import cn.tr.core.validation.Update;
+import cn.tr.plugin.mybatis.pojo.BaseDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * 科室传输对象
+ *
+ * @author lf
+ * @date  2025/06/04 14:09
+ **/
+@Data
+@ApiModel("微信小程序术科室展示对象")
+@ToString
+public class BizWxDeptVO extends TreeNode<String> {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "id", position = 1)
+     @NotBlank  (message = "主键不能为空",groups = {Update.class})
+    private String id;
+
+    @ApiModelProperty(value = "科室名称", position = 2)
+    private String name;
+
+    @ApiModelProperty(value = "科室级别", position = 3)
+    private Integer level;
+
+    @ApiModelProperty(value = "是否为叶子节点", position = 4)
+    private Integer leave;
+
+    @ApiModelProperty(value = "父级id", position = 5)
+    private String parentId;
+
+    @ApiModelProperty(value = "排序", position = 6)
+    private Integer sort;
+
+    @ApiModelProperty(value = "节点路径", position = 7)
+    private String nodePath;
+}

+ 20 - 6
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/dto/BizClinicAddOrEditDTO.java

@@ -1,5 +1,7 @@
 package cn.tr.module.smart.wx.dto;
 
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
 import cn.tr.core.validation.Insert;
 import cn.tr.core.validation.Update;
 import cn.tr.plugin.mybatis.pojo.BaseDTO;
@@ -36,23 +38,35 @@ public class BizClinicAddOrEditDTO implements Serializable {
     @NotBlank  (message = "患者姓名不能为空",groups = {Update.class, Insert.class})
     private String patientName;
 
-    @ApiModelProperty(value = "住院号", position = 4,required = true)
-    @NotBlank  (message = "住院号不能为空",groups = {Update.class, Insert.class})
+    @ApiModelProperty(value = "住院号(编辑时,住院号不可编辑)", position = 4,required = true)
+    @NotBlank  (message = "住院号不能为空",groups = {Insert.class})
     private String patientCode;
 
     @ApiModelProperty(value = "年龄", position = 5,required = true)
     @NotNull  (message = "年龄不能为空",groups = {Update.class, Insert.class})
     private Integer patientAge;
 
-    @ApiModelProperty(value = "科室", position = 6,required = true)
-    @NotBlank  (message = "科室不能为空",groups = {Update.class, Insert.class})
+    @ApiModelProperty(value = "性别", position = 6,required = true)
+    @NotNull  (message = "性别不能为空",groups = {Update.class, Insert.class})
+    private String patientGender;
+
+    @ApiModelProperty(value = "科室id", position = 7,required = true)
+    @NotBlank  (message = "科室id不能为空",groups = {Update.class, Insert.class})
     private String deptId;
 
-    @ApiModelProperty(value = "手术名称", position = 7,required = true)
+    @ApiModelProperty(value = "科室名称",position = 8,required = true)
+    @NotBlank(message = "科室名称不能为空",groups = {Update.class, Insert.class})
+    private String deptName;
+
+    @ApiModelProperty(value = "手术名称", position = 8,required = true)
     @NotBlank  (message = "手术名称不能为空",groups = {Update.class, Insert.class})
     private String clinicName;
 
-    @ApiModelProperty(value = "手术开始时间", position = 8,required = true)
+    @ApiModelProperty(value = "手术开始时间", position = 9,required = true)
     @NotNull  (message = "手术开始时间不能为空",groups = {Update.class, Insert.class})
     private Date clinicStartTime;
+
+    public void setClinicStartTime(Date clinicStartTime) {
+        this.clinicStartTime= DateUtil.beginOfDay(clinicStartTime);
+    }
 }

+ 47 - 1
tr-modules/tr-module-smartFollowUp/src/main/resources/mapper/smart/BizClinicRoomMapper.xml

@@ -47,7 +47,7 @@
             biz_clinic_room as bcr
                 join biz_clinic_room_wx_user as bcrwu on bcrwu.clinic_room_id=bcr.id
         <where>
-            and bcrwu.wx_user_id = #{query.userId}
+            and bcr.deleted=0 and bcrwu.wx_user_id = #{query.userId}
             <if test="query.patientCode != null and query.patientCode != ''">
                 bcr.patient_code like concat('',#{query.patientCode},'')
             </if>
@@ -78,4 +78,50 @@
             </if>
         </where>
     </select>
+
+    <select id="stdSelectWxAppletCareClinicByUserId" resultMap="stdWxAppletResult">
+        select
+        bcr.id as id,
+        bcr.patient_name as patient_name,
+        bcr.patient_age as patient_age,
+        bcr.patient_gender as patient_gender,
+        bcr.patient_code as patient_code,
+        bcr.clinic_start_time as clinic_start_time,
+        bcr.dept_id as dept_id,
+        bcr.dept_name as dept_name,
+        bcr.clinic_name as clinic_name,
+        bcr.clinic_status as clinic_status,
+        bcrwu.care as care
+        from
+        biz_clinic_room as bcr
+        join biz_clinic_room_wx_user as bcrwu on bcrwu.clinic_room_id=bcr.id
+        <where>
+            and bcrwu.wx_user_id = #{currentUserId} and bcrwu.care = 1
+        </where>
+    </select>
+
+    <select id="stdWxAppletSelectByPatientCodeAndClinicStartTime" resultType="cn.tr.module.smart.common.po.BizClinicRoomPO">
+        select * from biz_clinic_room
+        where patient_code =#{patientCode} and DATE(clinic_start_time) = DATE(#{clinicStartTime}) limit 1
+    </select>
+
+
+    <select id="stdSelectWxAppletById" resultMap="stdWxAppletResult">
+        select
+        bcr.id as id,
+        bcr.patient_name as patient_name,
+        bcr.patient_age as patient_age,
+        bcr.patient_gender as patient_gender,
+        bcr.patient_code as patient_code,
+        bcr.clinic_start_time as clinic_start_time,
+        bcr.dept_id as dept_id,
+        bcr.dept_name as dept_name,
+        bcr.clinic_name as clinic_name,
+        bcr.clinic_status as clinic_status,
+        bcrwu.care as care
+        from
+        biz_clinic_room as bcr
+        join biz_clinic_room_wx_user as bcrwu on bcrwu.clinic_room_id=bcr.id
+        where bcr.id =#{id}
+    </select>
 </mapper>

+ 17 - 0
tr-modules/tr-module-smartFollowUp/src/main/resources/mapper/smart/BizClinicRoomWxUserMapper.xml

@@ -0,0 +1,17 @@
+<?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.BizClinicRoomWxUserRepository">
+
+    <update id="shiftWxAppletCurrent" >
+        UPDATE biz_clinic_room_wx_user
+        SET care =
+                CASE
+                    WHEN wx_user_id = #{userId} AND clinic_room_id = #{clinicRoomId} THEN 1
+                    WHEN wx_user_id = #{userId} AND clinic_room_id != #{clinicRoomId} THEN 0
+                    ELSE care
+                    END
+        WHERE wx_user_id = #{userId}
+    </update>
+</mapper>

+ 6 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/LoginTypeConstant.java

@@ -8,7 +8,13 @@ package cn.tr.module.sys.oauth2;
  */
 
 public interface  LoginTypeConstant {
+     /**
+      * 微信登录体系
+      */
      String WX_APPLET="WxApplet";
 
+     /**
+      * web端登录体系
+      */
      String WEB="login";
 }