yxh
7 天以前 68ff33beff11310e830b0615b5a81f83fad0f683
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/AppointmentController.java
@@ -1,57 +1,40 @@
package cn.lihu.jh.module.ecg.controller.admin.appointment;
import cn.hutool.core.bean.BeanUtil;
import cn.lihu.jh.framework.common.exception.ErrorCode;
import cn.lihu.jh.framework.common.util.date.DateUtils;
import cn.lihu.jh.module.ecg.controller.admin.devrent.vo.DevRentSaveReqVO;
import cn.lihu.jh.module.ecg.controller.admin.queue.vo.QueueSaveReqVO;
import cn.lihu.jh.module.ecg.enums.QueueStatusEnum;
import cn.lihu.jh.module.ecg.feign.RemoteDataService;
import cn.lihu.jh.module.ecg.feign.RestApiReqBodyVo;
import cn.lihu.jh.module.ecg.feign.RestApiResult;
import cn.lihu.jh.module.ecg.feign.dto.AppointmentExternal;
import cn.lihu.jh.framework.apilog.core.annotation.ApiAccessLog;
import cn.lihu.jh.framework.common.pojo.CommonResult;
import cn.lihu.jh.framework.common.pojo.PageParam;
import cn.lihu.jh.framework.common.pojo.PageResult;
import cn.lihu.jh.framework.common.util.object.BeanUtils;
import cn.lihu.jh.framework.excel.core.util.ExcelUtils;
import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.AppointmentConfirmReqVO;
import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.AppointmentPageReqVO;
import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.AppointmentRespVO;
import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.AppointmentSaveReqVO;
import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO;
import cn.lihu.jh.module.ecg.service.appointment.AppointmentService;
import cn.lihu.jh.module.ecg.service.devrent.DevRentService;
import cn.lihu.jh.module.ecg.service.queue.QueueService;
import cn.lihu.jh.module.ecg.service.room.RoomService;
import cn.lihu.jh.module.system.api.dept.DeptApi;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.*;
import java.io.IOException;
import java.util.stream.Collectors;
import cn.lihu.jh.framework.common.pojo.PageParam;
import cn.lihu.jh.framework.common.pojo.PageResult;
import cn.lihu.jh.framework.common.pojo.CommonResult;
import cn.lihu.jh.framework.common.util.object.BeanUtils;
import static cn.lihu.jh.framework.common.pojo.CommonResult.error;
import static cn.lihu.jh.framework.common.pojo.CommonResult.success;
import cn.lihu.jh.framework.excel.core.util.ExcelUtils;
import cn.lihu.jh.framework.apilog.core.annotation.ApiAccessLog;
import static cn.lihu.jh.framework.apilog.core.enums.OperateTypeEnum.*;
import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*;
import static java.time.format.DateTimeFormatter.ISO_LOCAL_DATE;
import static java.time.format.DateTimeFormatter.ISO_LOCAL_TIME;
import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.*;
import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO;
import cn.lihu.jh.module.ecg.service.appointment.AppointmentService;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.time.LocalDate;
import java.util.List;
import static cn.lihu.jh.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.lihu.jh.framework.common.pojo.CommonResult.error;
import static cn.lihu.jh.framework.common.pojo.CommonResult.success;
import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.APPOINTMENT_NOT_BILLING;
@Tag(name = "管理后台 - 预约")
@RestController
@@ -89,6 +72,14 @@
        return success(true);
    }
    @PostMapping("/updateStatus")
    @Operation(summary = "更新申请状态")
    @PreAuthorize("@ss.hasPermission('ecg:appointment:update')")
    public CommonResult<Boolean> updateAppointmentStatus(@RequestBody AppointmentSaveReqVO updateReqVO) {
        appointmentService.updateAppointmentStatus(updateReqVO);
        return success(true);
    }
    @DeleteMapping("/delete")
    @Operation(summary = "删除预约")
    @Parameter(name = "id", description = "编号", required = true)
@@ -107,19 +98,58 @@
        return success(BeanUtils.toBean(appointment, AppointmentRespVO.class));
    }
    @GetMapping("/get-by-patient")
    @Operation(summary = "根据患者编号.获得预约")
    @GetMapping("/get-current-by-patient")
    @Operation(summary = "根据患者编号.查询当天预约")
    @Parameter(name = "id", description = "编号", required = true, example = "1024")
    @PreAuthorize("@ss.hasPermission('ecg:appointment:query')")
    public CommonResult<AppointmentRespVO> getAppointmentByPatient(@RequestParam("patId") String patId) {
        AppointmentDO appointment = appointmentService.getAppointmentByPatId( patId );
    public CommonResult<AppointmentRespVO> getCurAppointmentByPatId(@RequestParam("patId") String patId, @RequestParam("checkType") Integer checkType) {
        AppointmentDO appointment = appointmentService.getCurAppointmentByPatIdAndCheckType(patId, checkType);
        return success(BeanUtils.toBean(appointment, AppointmentRespVO.class));
    }
    @GetMapping("/query-and-create-by-patient")
    @Operation(summary = "根据患者编号.获得预约.并内部创建预约")
    @Parameter(name = "id", description = "编号", required = true, example = "1024")
    @PreAuthorize("@ss.hasPermission('ecg:appointment:query')")
    public CommonResult<List<AppointmentRespVO>> queryAndCreateAppointmentByPatId(@RequestParam("patId") String patId) {
        List<AppointmentDO> appointmentDOList = appointmentService.queryAndCreateAppointmentByPatId(patId);
        return success(BeanUtils.toBean(appointmentDOList, AppointmentRespVO.class));
    }
    @GetMapping("/query-his-by-patient")
    @Operation(summary = "从HIS.查询患者预约/开单信息")
    @Parameter(name = "id", description = "编号", required = true, example = "1024")
    @PreAuthorize("@ss.hasPermission('ecg:appointment:query')")
    public CommonResult<AppointmentRespVO> queryHisByPatient(@RequestParam("patId") String patId) {
        List<AppointmentDO> appointmentList = appointmentService.getAppointmentExtermal(patId);
        if (0 == appointmentList.size()) return error(APPOINTMENT_NOT_BILLING);
        return success(BeanUtils.toBean(appointmentList.get(0), AppointmentRespVO.class));
    }
    /**
     * 【本需求:紧急患者不排队直接检查】按「申请单号 / 就诊号 / 患者编号」查近一个月的预约记录。
     *
     * <p>工作台在三个输入框里按回车时调用;结果按**预约时间倒序**(最近的在前),
     * 多条时由前端弹选择框。窗口为 [今天-30 天, 今天+30 天],并按本窗口开展的检查项目过滤。
     *
     * @param code       申请单号 / 就诊流水号 / 患者编号(三者之一)
     * @param checkTypes 本窗口(诊室)开展的检查项目,逗号分隔;为空表示不限制
     */
    @GetMapping("/emergency-candidates")
    @Operation(summary = "紧急加做:按申请单号/就诊号/患者编号查近一个月的预约记录")
    @Parameter(name = "code", description = "申请单号 / 就诊流水号 / 患者编号", required = true)
    @Parameter(name = "checkTypes", description = "本窗口开展的检查项目,逗号分隔;为空不限制")
    @PreAuthorize("@ss.hasPermission('ecg:appointment:query')")
    public CommonResult<List<AppointmentRespVO>> getEmergencyCandidates(@RequestParam("code") String code,
                                                                       @RequestParam(value = "checkTypes", required = false) String checkTypes) {
        List<AppointmentDO> appointmentList = appointmentService.getEmergencyCandidates(code, checkTypes);
        return success(BeanUtils.toBean(appointmentList, AppointmentRespVO.class));
    }
    @GetMapping("/page")
    @Operation(summary = "获得预约分页")
    @PreAuthorize("@ss.hasPermission('ecg:appointment:query')")
    public CommonResult<PageResult<AppointmentRespVO>> getAppointmentPage(@Valid AppointmentPageReqVO pageReqVO) {
    @PreAuthorize("@ss.hasPermission('ecg:appointment:query')")    public CommonResult<PageResult<AppointmentRespVO>> getAppointmentPage(AppointmentPageReqVO pageReqVO) {
        pageReqVO.setOrderCreateTime("1");
        PageResult<AppointmentDO> pageResult = appointmentService.getAppointmentPage(pageReqVO);
        return success(BeanUtils.toBean(pageResult, AppointmentRespVO.class));
    }
@@ -128,21 +158,30 @@
    @Operation(summary = "导出预约 Excel")
    @PreAuthorize("@ss.hasPermission('ecg:appointment:export')")
    @ApiAccessLog(operateType = EXPORT)
    public void exportAppointmentExcel(@Valid AppointmentPageReqVO pageReqVO,
              HttpServletResponse response) throws IOException {
    public void exportAppointmentExcel(@Valid AppointmentPageReqVO pageReqVO, HttpServletResponse response) throws IOException {
        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
        List<AppointmentDO> list = appointmentService.getAppointmentPage(pageReqVO).getList();
        // 导出 Excel
        ExcelUtils.write(response, "预约.xls", "数据", AppointmentRespVO.class,
                        BeanUtils.toBean(list, AppointmentRespVO.class));
        ExcelUtils.write(response, "预约.xls", "数据", AppointmentRespVO.class, BeanUtils.toBean(list, AppointmentRespVO.class));
    }
    @PostMapping("/confirm")
    @Operation(summary = "预约确认")
    @PreAuthorize("@ss.hasPermission('ecg:appointment:confirm')")
    public CommonResult<String> appointmentConfirm(@RequestBody AppointmentConfirmReqVO confirmReqVO) {
        appointmentService.appoitmentConfirm( confirmReqVO );
        return success("确认成功");
    public CommonResult<Integer> appointmentConfirm(@RequestBody AppointmentConfirmReqVO confirmReqVO) {
        confirmReqVO.setIsVip(0);
        Integer newSeqNo = appointmentService.appoitmentConfirm(confirmReqVO);
        return success(newSeqNo);
    }
    @PostMapping("/confirm-vip")
    @Operation(summary = "VIP预约确认")
    @PreAuthorize("@ss.hasPermission('ecg:appointment:confirm')")
    public CommonResult<Integer> appointmentConfirmVip(@RequestBody AppointmentConfirmReqVO confirmReqVO) {
        confirmReqVO.setIsVip(1);
        confirmReqVO.setBookDate(LocalDate.now());
        Integer newSeqNo = appointmentService.appoitmentConfirm(confirmReqVO);
        return success(newSeqNo);
    }
}