瀏覽代碼

护工小程序列表查询

baifucheng 3 月之前
父節點
當前提交
af8a79781a

+ 2 - 2
ruoyi-api/src/main/java/com/ruoyi/api/controller/info/ApiHospitalDepartmentController.java

@@ -80,8 +80,8 @@ public class ApiHospitalDepartmentController extends AbstractApiController {
     }
 
     @ApiOperation("获取管理老师关联的科室订单统计")
-    @GetMapping("/teacher/simpleList")
-    public R<DepartmentOrderStatisticsVo> getTeacherSimpleInfo(
+    @GetMapping("/teacher/statistics")
+    public R<DepartmentOrderStatisticsVo> getTeacherStatistics(
         @RequestParam(value = "hospitalId", required = false) Long hospitalId,
         @RequestParam(value = "departmentId", required = false) Long departmentId) {
         Long teacherId = getTeacherId();

+ 3 - 1
ruoyi-api/src/main/java/com/ruoyi/api/controller/info/ApiManagementTeacherController.java

@@ -6,6 +6,7 @@ import java.util.Set;
 
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -20,6 +21,8 @@ import com.ruoyi.info.management.domain.vo.ManagementTeacherBenchVo;
 import com.ruoyi.info.management.domain.vo.ManagementTeacherVo;
 import com.ruoyi.info.management.service.IManagementTeacherService;
 import com.ruoyi.info.management.service.ITeacherDepartmentRelService;
+import com.ruoyi.info.nursing.domain.bo.NursingWorkerBo;
+import com.ruoyi.info.nursing.domain.vo.NursingWorkerVo;
 import com.ruoyi.info.order.domain.bo.OrderCountBo;
 import com.ruoyi.info.order.domain.bo.OrderRefundCountBo;
 import com.ruoyi.info.order.enums.OrderStatus;
@@ -88,5 +91,4 @@ public class ApiManagementTeacherController extends AbstractApiController {
 
 
 
-
 }

+ 93 - 1
ruoyi-api/src/main/java/com/ruoyi/api/controller/info/ApiNursingWorkerController.java

@@ -1,29 +1,51 @@
 package com.ruoyi.api.controller.info;
 
+import java.util.Collections;
 import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.validation.constraints.NotNull;
 
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.ruoyi.api.controller.common.AbstractApiController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.BeanCopyUtils;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.date.LocalDateTimeUtils;
+import com.ruoyi.info.management.domain.TeacherDepartmentRel;
+import com.ruoyi.info.management.domain.vo.WorkerOrderCountVo;
+import com.ruoyi.info.management.service.ITeacherDepartmentRelService;
+import com.ruoyi.info.nursing.domain.bo.NursingWorkerApiReqBo;
+import com.ruoyi.info.nursing.domain.bo.NursingWorkerBo;
 import com.ruoyi.info.nursing.domain.vo.NursingWorkerBenchVo;
 import com.ruoyi.info.nursing.domain.vo.NursingWorkerVo;
 import com.ruoyi.info.nursing.service.INursingWorkerService;
 import com.ruoyi.info.order.domain.bo.OrderCountBo;
 import com.ruoyi.info.order.enums.OrderStatus;
 import com.ruoyi.info.order.service.IOrderService;
-import com.ruoyi.user.domain.User;
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
 
+import static com.ruoyi.common.utils.CollectionUtils.convertSet;
+import static com.ruoyi.common.utils.CollectionUtils.findFirst;
+
 /**
  * @author fucheng.bai
  * @date 2025/10/9
@@ -39,6 +61,8 @@ public class ApiNursingWorkerController extends AbstractApiController {
 
     private final IOrderService orderService;
 
+    private final ITeacherDepartmentRelService teacherDepartmentRelService;
+
     @ApiOperation("护工工作台信息")
     @GetMapping("/workbench")
     public R<NursingWorkerBenchVo> workbench() {
@@ -69,4 +93,72 @@ public class ApiNursingWorkerController extends AbstractApiController {
         return R.ok(nursingWorkerBenchVo);
     }
 
+    // 护工列表查询
+    @ApiOperation("护工列表查询")
+    @GetMapping("/list")
+    public R<List<NursingWorkerVo>> list(NursingWorkerApiReqBo bo) {
+        Long teacherId = getTeacherId();
+
+        Set<Long> hospitalIds = new HashSet<>();
+        // 查询管理老师可查看的医院
+        if (bo.getHospitalId() == null) {
+            List<TeacherDepartmentRel> teacherDepartmentRelList = teacherDepartmentRelService.queryByTeacherId(teacherId);
+            hospitalIds = convertSet(teacherDepartmentRelList, TeacherDepartmentRel::getHospitalId);
+        } else {
+            hospitalIds.add(bo.getHospitalId());
+        }
+        bo.setHospitalIds(hospitalIds);
+
+        // 查询护工列表
+        List<NursingWorkerVo> nursingWorkerList = nursingWorkerService.queryListForTeacher(bo);
+
+        // 查询护工的订单数量
+        Set<Long> workerIds = convertSet(nursingWorkerList, NursingWorkerVo::getId);
+        List<WorkerOrderCountVo> workerOrderCountList = orderService.queryWorkerOrderCount(workerIds);
+        for (NursingWorkerVo nursingWorker : nursingWorkerList) {
+            WorkerOrderCountVo workerOrderCountVo = findFirst(workerOrderCountList, o -> o.getWorkerId().equals(nursingWorker.getId()));
+            if (workerOrderCountVo != null) {
+                nursingWorker.setInProgressCount(workerOrderCountVo.getInProgressCount());
+                nursingWorker.setFinishCount(workerOrderCountVo.getFinishCount());
+            }
+        }
+
+        return R.ok(nursingWorkerList);
+    }
+
+    /**
+     * 获取护工信息详细信息
+     */
+    @ApiOperation("获取护工信息详细信息")
+    @SaCheckPermission("info:nursingWorker:query")
+    @GetMapping("/info/{id}")
+    public R<NursingWorkerVo> getInfo(@ApiParam("主键")
+                                      @NotNull(message = "主键不能为空")
+                                      @PathVariable("id") Long id) {
+        NursingWorkerVo nursingWorker = nursingWorkerService.queryById(id);
+
+        // 查询订单数量
+        List<Long> ids = Collections.singletonList(nursingWorker.getId());
+        List<WorkerOrderCountVo> workerOrderCountList = orderService.queryWorkerOrderCount(ids);
+
+        WorkerOrderCountVo workerOrderCountVo = findFirst(workerOrderCountList, o -> o.getWorkerId().equals(nursingWorker.getId()));
+        if (workerOrderCountVo != null) {
+            nursingWorker.setInProgressCount(workerOrderCountVo.getInProgressCount());
+            nursingWorker.setFinishCount(workerOrderCountVo.getFinishCount());
+        }
+        return R.ok(nursingWorker);
+    }
+
+
+    /**
+     * 新增护工信息
+     */
+    @ApiOperation("新增护工信息")
+    @RepeatSubmit()
+    @PostMapping("/add")
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody NursingWorkerBo bo) {
+//        return toAjax(iNursingWorkerService.insertByBo(bo) ? 1 : 0);
+        return R.ok();
+    }
+
 }

+ 8 - 0
ruoyi-info/ruoyi-info-biz/src/main/java/com/ruoyi/info/management/domain/vo/ManagementTeacherBenchVo.java

@@ -2,6 +2,8 @@ package com.ruoyi.info.management.domain.vo;
 
 import java.io.Serializable;
 
+import com.alibaba.excel.annotation.ExcelProperty;
+
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -41,6 +43,12 @@ public class ManagementTeacherBenchVo  implements Serializable {
     @ApiModelProperty("形象照片url")
     private String photographUrl;
 
+    /**
+     * 是否开启管理护工权限 N-否 Y-是
+     */
+    @ApiModelProperty("是否开启管理护工权限 N-否 Y-是")
+    private String manageNursingFlag;
+
     /**
      * 订单总数
      */

+ 31 - 0
ruoyi-info/ruoyi-info-biz/src/main/java/com/ruoyi/info/management/domain/vo/WorkerOrderCountVo.java

@@ -0,0 +1,31 @@
+package com.ruoyi.info.management.domain.vo;
+
+import java.io.Serializable;
+
+import lombok.Data;
+
+/**
+ * @author fucheng.bai
+ * @date 2025/10/10
+ */
+@Data
+public class WorkerOrderCountVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 护工id
+     */
+    private Long workerId;
+
+    /**
+     * 服务中数量
+     */
+    private Integer inProgressCount;
+
+    /**
+     * 已完成数量
+     */
+    private Integer finishCount;
+
+}

+ 47 - 0
ruoyi-info/ruoyi-info-biz/src/main/java/com/ruoyi/info/nursing/domain/bo/NursingWorkerApiReqBo.java

@@ -0,0 +1,47 @@
+package com.ruoyi.info.nursing.domain.bo;
+
+import java.util.Collection;
+import java.util.List;
+
+import javax.validation.constraints.NotNull;
+
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author fucheng.bai
+ * @date 2025/10/10
+ */
+@Data
+@ApiModel("护工信息业务对象")
+public class NursingWorkerApiReqBo {
+
+    /**
+     * 常驻医院id
+     */
+    @ApiModelProperty(value = "常驻医院id")
+    private Long hospitalId;
+
+    /**
+     * 性别
+     */
+    @ApiModelProperty(value = "性别")
+    private String sex;
+
+    @ApiModelProperty(value = "排序字段 年龄-age 服务中(数量)-serviceCount")
+    private String sortFiled;
+
+    @ApiModelProperty(value = "排序方式 正序-asc 倒序-desc")
+    private String sortMethod;
+
+    /**
+     * 常驻医院id列表
+     */
+    @ApiModelProperty(value = "常驻医院id列表")
+    private Collection<Long> hospitalIds;
+}

+ 12 - 0
ruoyi-info/ruoyi-info-biz/src/main/java/com/ruoyi/info/nursing/domain/vo/NursingWorkerVo.java

@@ -134,4 +134,16 @@ public class NursingWorkerVo implements Serializable {
      */
     @ApiModelProperty("技能信息列表")
     private List<NursingCertificateVo> nursingCertificateList;
+
+    /**
+     * 服务中数量
+     */
+    @ApiModelProperty("服务中数量")
+    private Integer inProgressCount = 0;
+
+    /**
+     * 已完成数量
+     */
+    @ApiModelProperty("已完成数量")
+    private Integer finishCount = 0;
 }

+ 9 - 0
ruoyi-info/ruoyi-info-biz/src/main/java/com/ruoyi/info/nursing/service/INursingWorkerService.java

@@ -2,6 +2,7 @@ package com.ruoyi.info.nursing.service;
 
 import com.ruoyi.info.nursing.domain.NursingWorker;
 import com.ruoyi.info.nursing.domain.bo.EnableStatusBo;
+import com.ruoyi.info.nursing.domain.bo.NursingWorkerApiReqBo;
 import com.ruoyi.info.nursing.domain.vo.NursingWorkerVo;
 import com.ruoyi.info.nursing.domain.bo.NursingWorkerBo;
 import com.ruoyi.common.core.page.TableDataInfo;
@@ -91,4 +92,12 @@ public interface INursingWorkerService {
      * @return
      */
     NursingWorkerVo getByPhoneNumber(String mobile, boolean isEnable);
+
+    /**
+     * 查询护工列表
+     *
+     * @param bo
+     * @return
+     */
+    List<NursingWorkerVo> queryListForTeacher(NursingWorkerApiReqBo bo);
 }

+ 17 - 1
ruoyi-info/ruoyi-info-biz/src/main/java/com/ruoyi/info/nursing/service/impl/NursingWorkerServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ruoyi.info.nursing.service.impl;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -19,6 +20,7 @@ import com.ruoyi.info.nursing.domain.NursingCertificate;
 import com.ruoyi.info.nursing.domain.NursingWorker;
 import com.ruoyi.info.nursing.domain.bo.EnableStatusBo;
 import com.ruoyi.info.nursing.domain.bo.NursingCertificateBo;
+import com.ruoyi.info.nursing.domain.bo.NursingWorkerApiReqBo;
 import com.ruoyi.info.nursing.domain.bo.NursingWorkerBo;
 import com.ruoyi.info.nursing.domain.vo.NursingCertificateVo;
 import com.ruoyi.info.nursing.domain.vo.NursingWorkerVo;
@@ -31,6 +33,7 @@ import com.ruoyi.info.nursing.service.INursingWorkerService;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
 
 /**
@@ -85,7 +88,7 @@ public class NursingWorkerServiceImpl implements INursingWorkerService {
         lqw.eq(bo.getEnableStatus() != null, NursingWorker::getEnableStatus, bo.getEnableStatus());
         lqw.ge(ObjectUtil.isNotNull(bo.getCreateTimeStart()), NursingWorker::getCreateTime, bo.getCreateTimeStart());
         lqw.le(ObjectUtil.isNotNull(bo.getCreateTimeEnd()), NursingWorker::getCreateTime, bo.getCreateTimeEnd());
-
+        lqw.orderByDesc(NursingWorker::getSortOrder).orderByDesc(NursingWorker::getId);
         return lqw;
     }
 
@@ -231,4 +234,17 @@ public class NursingWorkerServiceImpl implements INursingWorkerService {
         return baseMapper.selectVoOne(wrapper);
     }
 
+    @Override
+    public List<NursingWorkerVo> queryListForTeacher(NursingWorkerApiReqBo bo) {
+        LambdaQueryWrapper<NursingWorker> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StringUtils.isEmpty(bo.getSex()), NursingWorker::getSex, bo.getSex());
+        lqw.in(NursingWorker::getHospitalId, bo.getHospitalIds());
+        if (StrUtil.isEmpty(bo.getSortFiled())) {
+            lqw.orderByDesc(NursingWorker::getSortOrder).orderByDesc(NursingWorker::getId);
+        } else {
+            lqw.orderBy(bo.getSortFiled().equals("age"), bo.getSortMethod().equals("asc"), NursingWorker::getAge);
+        }
+        return Collections.emptyList();
+    }
+
 }

+ 3 - 0
ruoyi-info/ruoyi-info-biz/src/main/java/com/ruoyi/info/order/mapper/OrderMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.mapper.BaseMapperPlus;
 import com.ruoyi.info.hospital.domain.vo.DepartmentOrderCountVo;
 import com.ruoyi.info.hospital.domain.vo.HospitalStatisticsVo;
+import com.ruoyi.info.management.domain.vo.WorkerOrderCountVo;
 import com.ruoyi.info.order.domain.Order;
 import com.ruoyi.info.order.domain.bo.OrderBo;
 import com.ruoyi.info.order.domain.bo.OrderCountBo;
@@ -36,6 +37,8 @@ public interface OrderMapper extends BaseMapperPlus<OrderMapper, Order, OrderVo>
 
     List<DepartmentOrderCountVo> selectDepartmentOrderCount(@Param("departmentIds") Collection<Long> departmentIds);
 
+    List<WorkerOrderCountVo> selectWorkerOrderCount(@Param("workerIds") Collection<Long> workerIds);
+
     BigDecimal totalPriceSum(@Param("bo") OrderBo bo);
 
     BigDecimal refundPriceSum(@Param("bo") OrderBo bo);

+ 9 - 0
ruoyi-info/ruoyi-info-biz/src/main/java/com/ruoyi/info/order/service/IOrderService.java

@@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.PageQuery;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.info.hospital.domain.vo.DepartmentOrderCountVo;
 import com.ruoyi.info.hospital.domain.vo.HospitalStatisticsVo;
+import com.ruoyi.info.management.domain.vo.WorkerOrderCountVo;
 import com.ruoyi.info.order.domain.Order;
 import com.ruoyi.info.order.domain.bo.OrderBo;
 import com.ruoyi.info.order.domain.bo.OrderCountBo;
@@ -120,6 +121,14 @@ public interface IOrderService {
      */
     List<DepartmentOrderCountVo> queryDepartmentOrderCount(Collection<Long> departmentIds);
 
+    /**
+     * 订单按护工,根据不同状态查询数量
+     *
+     * @return
+     */
+    List<WorkerOrderCountVo> queryWorkerOrderCount(Collection<Long> workerIds);
+
+
     OrderVo convertAllVo(OrderVo vo, boolean queryPatient, Boolean isRefund);
 
     BigDecimal totalPriceSum(OrderBo bo);

+ 7 - 0
ruoyi-info/ruoyi-info-biz/src/main/java/com/ruoyi/info/order/service/impl/OrderServiceImpl.java

@@ -23,6 +23,7 @@ import com.ruoyi.info.hospital.domain.vo.HospitalVo;
 import com.ruoyi.info.hospital.service.IHospitalDepartmentService;
 import com.ruoyi.info.hospital.service.IHospitalService;
 import com.ruoyi.info.management.domain.vo.ManagementTeacherVo;
+import com.ruoyi.info.management.domain.vo.WorkerOrderCountVo;
 import com.ruoyi.info.management.service.IManagementTeacherService;
 import com.ruoyi.info.nursing.domain.NursingWorker;
 import com.ruoyi.info.nursing.domain.vo.NursingWorkerVo;
@@ -59,6 +60,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -520,6 +522,11 @@ public class OrderServiceImpl implements IOrderService {
         return baseMapper.selectDepartmentOrderCount(departmentIds);
     }
 
+    @Override
+    public List<WorkerOrderCountVo> queryWorkerOrderCount(Collection<Long> workerIds) {
+        return baseMapper.selectWorkerOrderCount(workerIds);
+    }
+
     private List<OrderVo> convertAllList(List<OrderVo> list, boolean queryPatient, Boolean isRefund) {
         return list.stream().map(o -> convertAllVo(o, queryPatient, isRefund)).collect(Collectors.toList());
     }

+ 17 - 0
ruoyi-info/ruoyi-info-biz/src/main/resources/mapper/order/OrderMapper.xml

@@ -122,6 +122,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="queryWhere"/>
     </select>
 
+    <select id="selectWorkerOrderCount" resultType="com.ruoyi.info.management.domain.vo.WorkerOrderCountVo">
+        SELECT
+            worker_id AS workerId,
+            COUNT(CASE WHEN status = 3 THEN 1 ELSE NULL END) AS inProgressCount,
+            COUNT(CASE WHEN status = 5 THEN 1 ELSE NULL END) AS finishCount
+        FROM tb_order
+        <where>
+            <if test="workerIds != null and workerIds.size > 0">
+                worker_id in
+                <foreach item="item" collection="workerIds" separator="," open="(" close=")" index="">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        GROUP BY worker_id
+    </select>
+
 
     <sql id="queryList">
         select o.*, u.nickname as userName, u.mobile as userMobile from tb_order o