18339543638 6 місяців тому
батько
коміт
860581e0fc

+ 1 - 1
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/enums/QuestionTypeEnums.java

@@ -1,6 +1,6 @@
 package cn.tr.module.smart.common.enums;
 
-public class QuestionTypeEnums {
+public interface QuestionTypeEnums {
     /**
      * 单选框
      */

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

@@ -9,6 +9,7 @@ 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.module.smart.wx.dto.BizWxAppletFinishClinicDTO;
 
 import java.util.*;
 
@@ -55,6 +56,14 @@ public interface IBizClinicRoomService{
      * @return
      */
     BizWxAppletClinicDetailVO stdSelectWxAppletById(String id);
+
+    /**
+     * 添加手术结束时间
+     * @param source
+     * @return
+     */
+    Boolean wxAppletFinishClinic(BizWxAppletFinishClinicDTO source);
+
     /**
      * 微信端删除患者信息
      * @param ids
@@ -110,6 +119,4 @@ public interface IBizClinicRoomService{
      * @date 2025/6/10
      */
     List<WxDoctorClinicRoomVO> selectByClinicRoomAndPatientList(WxDoctorClinicRoomDTO source);
-
-
 }

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

@@ -1,5 +1,6 @@
 package cn.tr.module.smart.common.service.impl;
 
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -8,18 +9,19 @@ import cn.tr.core.strategy.LoginUserStrategy;
 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.ClinicPhaseEnums;
 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.repository.BizQuestionAnswerRepository;
 import cn.tr.module.smart.common.service.*;
 import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicDetailVO;
 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.module.smart.wx.dto.BizWxAppletFinishClinicDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -61,14 +63,12 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
     @Lazy
     private IBizClinicRoomWxUserService roomWxUserService;
 
-    @Autowired
-    private BizQuestionAnswerRepository answerRepository;
-
     @Autowired
     private IBizQuestionService bizQuestionService;
 
     @Autowired
     private IBizDeptService bizDeptService;
+
     @Override
     public List<BizWxAppletClinicVO> stdSelectWxAppletClinicList(BizWxAppletClinicQueryDTO query) {
         return baseRepository.stdSelectWxAppletClinicList(query);
@@ -124,6 +124,7 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
             clinicRoom.setFollowUp(Boolean.FALSE);
             clinicRoom.setLastModifyUserType(UserTypeEnums.PATIENT_WX_APPLET);
             clinicRoom.setLastModifyUserBy(userId);
+            clinicRoom.setClinicStatus(ClinicPhaseEnums.BEFORE);
             this.baseRepository.insert(clinicRoom);
             //更新患者绑定的最新手术id
             patient.setCurrentClinicId(clinicRoom.getId());
@@ -164,6 +165,39 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
         return baseRepository.stdSelectWxAppletById(id);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean wxAppletFinishClinic(BizWxAppletFinishClinicDTO source) {
+        BizClinicRoomPO clinicRoom = baseRepository.selectById(source.getClinicId());
+        if(ObjectUtil.compare(source.getClinicEndTime(),new Date())>0){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001
+                    ,String.format("手术结束时间[%s],不得大于当前时间[%s]"
+                    ,DateUtil.formatDateTime(source.getClinicEndTime())
+                    ,DateUtil.formatDateTime(new Date())));
+        }
+        //精确到
+        if (ObjectUtil.isNull(clinicRoom)) {
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"未查询到手术信息");
+        }
+        String currentUserId = LoginUserStrategy.tr.getCurrentUserId();
+        BizClinicRoomWxUserPO clinicRoomWxUser = clinicRoomWxUserRepository.selectOne(new LambdaQueryWrapper<BizClinicRoomWxUserPO>()
+                .eq(BizClinicRoomWxUserPO::getWxUserId, currentUserId)
+                .eq(BizClinicRoomWxUserPO::getClinicRoomId, source.getClinicId())
+                .last("limit 1"));
+        if(ObjectUtil.isNull(clinicRoomWxUser)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"当前用户无权限操作所选手术信息");
+        }
+        if(ObjectUtil.compare(clinicRoom.getClinicStartTime(),source.getClinicEndTime())>0){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001
+                    ,String.format("手术结束时间[%s],不得早于手术开始时间[%s]"
+                    ,DateUtil.formatDateTime(source.getClinicEndTime())
+                    ,DateUtil.formatDateTime(clinicRoom.getClinicStartTime())));
+        }
+        clinicRoom.setClinicEndTime(source.getClinicEndTime());
+        clinicRoom.setClinicStatus(ClinicPhaseEnums.AFTER);
+        return baseRepository.updateById(clinicRoom)!=0;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Integer removeBizClinicByIds(Collection<String> ids) {
@@ -196,8 +230,6 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
             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,"手术未关联科室");

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

@@ -7,10 +7,14 @@ import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.module.smart.common.entity.BizQuestionEntity;
 import cn.tr.module.smart.common.entity.BizWxAppletQuestionAnswerEntity;
+import cn.tr.module.smart.common.enums.ClinicPhaseEnums;
 import cn.tr.module.smart.common.mapper.BizQuestionAnswerMapper;
 import cn.tr.module.smart.common.mapper.BizQuestionMapper;
+import cn.tr.module.smart.common.po.BizClinicRoomPO;
+import cn.tr.module.smart.common.po.BizClinicRoomWxUserPO;
 import cn.tr.module.smart.common.po.BizQuestionAnswerPO;
 import cn.tr.module.smart.common.po.BizQuestionPO;
+import cn.tr.module.smart.common.repository.BizClinicRoomRepository;
 import cn.tr.module.smart.common.repository.BizQuestionRepository;
 import cn.tr.module.smart.wx.controller.vo.BizWxDeptQuestionVO;
 import cn.tr.module.smart.wx.dto.BizWxAppletCommitSurgeryQuestionDTO;
@@ -40,9 +44,18 @@ public class BizQuestionAnswerServiceImpl implements IBizQuestionAnswerService {
     @Autowired
     private BizQuestionRepository questionRepository;
 
+    @Autowired
+    private BizClinicRoomRepository clinicRoomRepository;
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean stdWxAppletCommitPreSurgeryQuestionnaireAnswer(BizWxAppletCommitSurgeryQuestionDTO source) {
+        BizClinicRoomPO clinicRoom = clinicRoomRepository.selectById(source.getClinicId());
+        if(ObjectUtil.isNull(clinicRoom)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"未查询到手术信息");
+        }
+        if (ClinicPhaseEnums.AFTER.equals(clinicRoom.getClinicStatus())) {
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"手术已结束,无法填写术前问卷");
+        }
         //做全量更新,删除原来的手术问卷信息
         baseRepository.delete(new LambdaQueryWrapper<BizQuestionAnswerPO>()
                 .eq(BizQuestionAnswerPO::getClinicId,source.getClinicId()));

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

@@ -12,6 +12,7 @@ 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.smart.wx.dto.BizWxAppletFinishClinicDTO;
 import cn.tr.plugin.mybatis.base.BaseController;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
@@ -87,4 +88,11 @@ public class BizWxAppletClinicController extends BaseController{
     public CommonResult<BizWxAppletClinicDetailVO> detail(@PathVariable("id") String id) {
         return CommonResult.success(clinicRoomService.stdSelectWxAppletById(id));
     }
+
+    @ApiOperationSupport(author = "lf",order = 8)
+    @ApiOperation(value="结束手术",notes = "权限: 无")
+    @PostMapping("/finish")
+    public CommonResult<Boolean> finishedClinic(@RequestBody@Validated BizWxAppletFinishClinicDTO source) {
+        return CommonResult.success(clinicRoomService.wxAppletFinishClinic(source));
+    }
 }

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

@@ -65,4 +65,10 @@ public class BizWxAppletClinicDetailVO implements Serializable {
 
     @ApiModelProperty("上次填写术前问卷时间")
     private Date lastModifyQuestionTime;
+
+    @ApiModelProperty("看护医生id")
+    private String doctorId;
+
+    @ApiModelProperty("看护医生昵称")
+    private String doctorNickname;
 }

+ 21 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/dto/BizWxAppletFinishClinicDTO.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;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Data
+@ApiModel("添加手术结束时间")
+public class BizWxAppletFinishClinicDTO {
+    @ApiModelProperty(value = "手术id",required = true)
+    @NotBlank(message = "手术id不能为空")
+    private String clinicId;
+
+    @ApiModelProperty(value = "手术结束时间",required = true)
+    @NotNull(message = "手术结束时间不能为空")
+    private Date clinicEndTime;
+}

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

@@ -36,6 +36,8 @@
         <result property="care" column="care"/>
         <result property="lastModifyQuestionTime" column="last_modify_question_time"/>
         <result property="questionAnswerId" column="question_answer_id"/>
+        <result property="doctorId" column="doctor_id"/>
+        <result property="doctorNickname" column="doctor_nickname"/>
     </resultMap>
 
     <resultMap id="RoomAndPatient" type="cn.tr.module.smart.app.controller.vo.WxDoctorClinicRoomVO">
@@ -139,10 +141,14 @@
         bcr.clinic_status as clinic_status,
         bcrwu.care as care,
         bqa.id as question_answer_id,
-        bqa.answer_time as last_modify_question_time
+        bqa.answer_time as last_modify_question_time,
+        su.id as doctor_id,
+        su.nickname as doctor_nickname
         from
         biz_clinic_room as bcr
         join biz_clinic_room_wx_user as bcrwu on bcrwu.clinic_room_id=bcr.id
+        left join biz_clinic_room_doctor_user as bcrmu on bcrmu.clinic_room_id=bcr.id
+        left join sys_user as su on bcrmu.user_id=su.id
         left join biz_question_answer as bqa on bqa.clinic_id=bcr.id
         where bcr.id =#{id}
     </select>