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

医生端增加手术批量解绑 手术批量结束

wangzl преди 2 месеца
родител
ревизия
d8fb8a2b16

+ 15 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/app/controller/AppClinicRoomController.java

@@ -166,4 +166,19 @@ public class AppClinicRoomController extends BaseController {
     public CommonResult<Boolean> unBindDevice(@RequestBody AppDoctorUnBindPumpDTO source) {
         return CommonResult.success(clinicRoomService.unBindDevice(source));
     }
+
+    @ApiOperationSupport(author = "wangzl",order = 16)
+    @ApiOperation(value="批量解绑手术",notes = "权限: 无")
+    @PostMapping("/unBindClinic")
+    public CommonResult<List<AppClinicBatchErrorVO>> unBindClinicBatch(@RequestBody AppClinicUnBindBatchDTO source) {
+        return CommonResult.success(clinicRoomService.unBindClinicBatch(source));
+    }
+
+
+    @ApiOperationSupport(author = "wangzl",order = 17)
+    @ApiOperation(value="批量结束手术",notes = "权限: 无")
+    @PostMapping("/finishClinic")
+    public CommonResult<List<AppClinicBatchErrorVO>> finishClinicBatch(@RequestBody AppClinicFinishBatchDTO source) {
+        return CommonResult.success(clinicRoomService.finishClinicBatch(source));
+    }
 }

+ 27 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/app/controller/dto/AppClinicFinishBatchDTO.java

@@ -0,0 +1,27 @@
+package cn.tr.module.smart.app.controller.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * TODO
+ *
+ * @author wangzl
+ * @date 2025/10/17 9:03
+ */
+@Data
+@ToString
+public class AppClinicFinishBatchDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "手术ID集合", position = 1)
+    private List<String> clinicIds;
+
+    @ApiModelProperty(value = "结束时间", position = 2)
+    private Date clinicEndTime;
+}

+ 23 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/app/controller/dto/AppClinicUnBindBatchDTO.java

@@ -0,0 +1,23 @@
+package cn.tr.module.smart.app.controller.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * TODO
+ *
+ * @author wangzl
+ * @date 2025/10/17 9:07
+ */
+@Data
+@ApiModel("批量解绑手术信息")
+public class AppClinicUnBindBatchDTO  implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "手术ID集合", position = 1)
+    private List<String> clinicIds;
+}

+ 28 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/app/controller/vo/AppClinicBatchErrorVO.java

@@ -0,0 +1,28 @@
+package cn.tr.module.smart.app.controller.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * TODO
+ *
+ * @author wangzl
+ * @date 2025/10/17 9:04
+ */
+
+@Data
+@ToString
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class AppClinicBatchErrorVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "手术ID", position = 1)
+    private String clinicId;
+
+    @ApiModelProperty(value = "错误信息", position = 2)
+    private String errorMsg;
+}

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

@@ -1,10 +1,7 @@
 package cn.tr.module.smart.common.service;
 
 import cn.tr.module.smart.app.controller.dto.*;
-import cn.tr.module.smart.app.controller.vo.AppBizDeviceListVO;
-import cn.tr.module.smart.app.controller.vo.AppDoctorInfusionHistoryVO;
-import cn.tr.module.smart.app.controller.vo.DoctorClinicRoomVO;
-import cn.tr.module.smart.app.controller.vo.WxDoctorClinicRoomThumbnailVO;
+import cn.tr.module.smart.app.controller.vo.*;
 import cn.tr.module.smart.common.dto.BizClinicAddOrEditDTO;
 import cn.tr.module.smart.common.dto.BizClinicRoomDTO;
 import cn.tr.module.smart.common.dto.BizClinicRoomQueryDTO;
@@ -234,4 +231,21 @@ public interface IBizClinicRoomService {
      * @date 2025/10/16
      */
     Boolean unBindDevice(AppDoctorUnBindPumpDTO source);
+
+
+    /**
+     * @description: 批量解绑手术信息
+     * @author wangzl
+     * @date 2025/10/17
+     */
+    List<AppClinicBatchErrorVO> unBindClinicBatch(AppClinicUnBindBatchDTO source);
+
+    /**
+     * @description: 批量结束手术信息
+     * @author wangzl
+     * @date 2025/10/17
+     */
+
+    List<AppClinicBatchErrorVO> finishClinicBatch(AppClinicFinishBatchDTO source);
+
 }

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

@@ -9,10 +9,7 @@ import cn.tr.core.exception.TRExcCode;
 import cn.tr.core.strategy.LoginUserStrategy;
 import cn.tr.module.mobile.repository.ImGroupUserRepository;
 import cn.tr.module.smart.app.controller.dto.*;
-import cn.tr.module.smart.app.controller.vo.AppBizDeviceListVO;
-import cn.tr.module.smart.app.controller.vo.AppDoctorInfusionHistoryVO;
-import cn.tr.module.smart.app.controller.vo.DoctorClinicRoomVO;
-import cn.tr.module.smart.app.controller.vo.WxDoctorClinicRoomThumbnailVO;
+import cn.tr.module.smart.app.controller.vo.*;
 import cn.tr.module.smart.common.dto.*;
 import cn.tr.module.smart.common.entity.BizWxAppletQuestionAnswerEntity;
 import cn.tr.module.smart.common.enums.ClinicPhaseEnums;
@@ -393,8 +390,8 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
                 .set(BizClinicRoomPO::getClinicEndTime, finishDTO.getClinicEndTime())
                 .eq(BizClinicRoomPO::getId, finishDTO.getClinicId()));
         //创建镇痛和问卷的消息通知的任务
-        mpPublishTaskService.createQuestionTask(clinicRoom.getId(),finishDTO.getClinicEndTime());
-        mpPublishTaskService.createAssessmentTask(clinicRoom.getId(),finishDTO.getClinicEndTime());
+//        mpPublishTaskService.createQuestionTask(clinicRoom.getId(),finishDTO.getClinicEndTime());
+//        mpPublishTaskService.createAssessmentTask(clinicRoom.getId(),finishDTO.getClinicEndTime());
         return update != 0;
     }
 
@@ -886,6 +883,97 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
         return  infusionClinicRepository.deleteById(bizInfusionClinicPO.getId())!=0;
     }
 
+    /**
+     * @param source
+     * @description: 批量解绑手术信息
+     * @author wangzl
+     * @date 2025/10/17
+     */
+    @Override
+    public List<AppClinicBatchErrorVO> unBindClinicBatch(AppClinicUnBindBatchDTO source) {
+        String currentUserId = LoginUserStrategy.tr.getCurrentUserId();
+        List<String> clinicIds = source.getClinicIds();
+        List<BizClinicRoomPO> clinicRooms = baseRepository.selectList(new LambdaQueryWrapper<BizClinicRoomPO>()
+                .in(BizClinicRoomPO::getId, clinicIds));
+        if (CollectionUtil.isEmpty(clinicRooms)) {
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "手术信息不存在");
+        }
+        Set<String> clinicRoomIds = clinicRooms.stream().map(BizClinicRoomPO::getId).collect(Collectors.toSet());
+        List<AppClinicBatchErrorVO> unBindError = new ArrayList<>();
+        clinicIds.forEach(id -> {
+            if(!clinicRoomIds.contains(id)){
+                unBindError.add( AppClinicBatchErrorVO.builder()
+                        .clinicId(id)
+                        .errorMsg("手术信息不存在")
+                        .build());
+            }
+        });
+        if (clinicRoomDoctorUserRepository.delete(new LambdaQueryWrapper<BizClinicRoomDoctorUserPO>()
+                .in(BizClinicRoomDoctorUserPO::getClinicRoomId, clinicIds)
+                .eq(BizClinicRoomDoctorUserPO::getUserId, currentUserId)) != 0f) {
+            clinicIds.forEach(clinicId -> groupUserRepository.readAllMsg(clinicId,currentUserId));
+        }
+        return unBindError;
+    }
+
+    /**
+     * @param source
+     * @description: 批量结束手术信息
+     * @author wangzl
+     * @date 2025/10/17
+     */
+    @Override
+    public List<AppClinicBatchErrorVO> finishClinicBatch(AppClinicFinishBatchDTO source) {
+        List<String> clinicIds = source.getClinicIds();
+        List<BizClinicRoomPO> clinicRooms = baseRepository.selectList(new LambdaQueryWrapper<BizClinicRoomPO>()
+                .in(BizClinicRoomPO::getId, clinicIds));
+        //去除已删除数据
+        Set<String> existClinicIds = clinicRooms.stream().map(BizClinicRoomPO::getId).collect(Collectors.toSet());
+        clinicIds.removeIf(clinicId -> !existClinicIds.contains(clinicId));
+        List<AppClinicBatchErrorVO> finishError = new ArrayList<>();
+        clinicRooms.forEach(clinicRoom -> {
+            if (ObjectUtil.isNull(clinicRoom)) {
+                finishError.add(AppClinicBatchErrorVO.builder()
+                        .clinicId(clinicRoom.getId())
+                        .errorMsg("手术信息不存在")
+                        .build());
+                return;
+            }
+            if (ClinicPhaseEnums.AFTER.equals(clinicRoom.getClinicStatus())) {
+                finishError.add(AppClinicBatchErrorVO.builder()
+                        .clinicId(clinicRoom.getId())
+                        .errorMsg("手术已结束,无法结束手术")
+                        .build());
+                return;
+            }
+            if (ObjectUtil.compare(source.getClinicEndTime(), new Date()) > 0) {
+                finishError.add(AppClinicBatchErrorVO.builder()
+                        .clinicId(clinicRoom.getId())
+                        .errorMsg(String.format("手术结束时间[%s],不得大于当前时间[%s]"
+                                , DateUtil.formatDateTime(source.getClinicEndTime())
+                                , DateUtil.formatDateTime(new Date())))
+                        .build());
+                return;
+            }
+            if (ObjectUtil.compare(clinicRoom.getClinicStartTime(), source.getClinicEndTime()) > 0) {
+                finishError.add(AppClinicBatchErrorVO.builder()
+                        .clinicId(clinicRoom.getId())
+                        .errorMsg(String.format("手术结束时间[%s],不得早于手术开始时间[%s]"
+                                , DateUtil.formatDateTime(source.getClinicEndTime()),
+                                DateUtil.formatDateTime(clinicRoom.getClinicStartTime())))
+                        .build());
+            }
+        });
+        finishError.forEach(error->clinicIds.removeIf(id-> id.equals(error.getClinicId())));
+        if(CollectionUtil.isNotEmpty(clinicIds)){
+            baseRepository.update(null, new LambdaUpdateWrapper<BizClinicRoomPO>()
+                    .set(BizClinicRoomPO::getClinicStatus, ClinicPhaseEnums.AFTER)
+                    .set(BizClinicRoomPO::getClinicEndTime, source.getClinicEndTime())
+                    .in(BizClinicRoomPO::getId, clinicIds));
+        }
+        return finishError;
+    }
+
     /**
      * 微信小程序基于医生已填写的信息更新数据
      */

+ 2 - 2
tr-test/src/main/resources/application.yml

@@ -8,8 +8,8 @@ server:
 mybatis-plus:
   mapper-locations: classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml,classpath*:mapper/*/*.xml
   configuration:
-    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
-#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+#    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
   global-config:
     db-config:
       logic-delete-value: 1