Переглянути джерело

增加管理老师科室统计接口

baifucheng 2 місяців тому
батько
коміт
82b68ba9af

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

@@ -1,5 +1,6 @@
 package com.ruoyi.api.controller.info;
 
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -14,19 +15,25 @@ import com.ruoyi.api.controller.common.AbstractApiController;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.validate.QueryGroup;
 import com.ruoyi.common.utils.BeanCopyUtils;
+import com.ruoyi.common.utils.CollectionUtils;
 import com.ruoyi.info.hospital.domain.bo.HospitalDepartmentBo;
+import com.ruoyi.info.hospital.domain.vo.DepartmentOrderCountVo;
+import com.ruoyi.info.hospital.domain.vo.DepartmentOrderStatisticsVo;
 import com.ruoyi.info.hospital.domain.vo.DepartmentSimpleInfoVo;
 import com.ruoyi.info.hospital.domain.vo.HospitalDepartmentVo;
-import com.ruoyi.info.hospital.domain.vo.HospitalSimpleInfoVo;
+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.TeacherDepartmentRel;
 import com.ruoyi.info.management.service.ITeacherDepartmentRelService;
+import com.ruoyi.info.order.service.IOrderService;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 
 import static com.ruoyi.common.utils.CollectionUtils.convertSet;
+import static com.ruoyi.common.utils.CollectionUtils.findFirst;
 
 /**
  * @author fucheng.bai
@@ -39,10 +46,14 @@ import static com.ruoyi.common.utils.CollectionUtils.convertSet;
 @RequestMapping("/api/info/hospitalDepartment")
 public class ApiHospitalDepartmentController extends AbstractApiController {
 
+    private final IHospitalService iHospitalService;
+
     private final IHospitalDepartmentService iHospitalDepartmentService;
 
     private final ITeacherDepartmentRelService iTeacherDepartmentRelService;
 
+    private final IOrderService iOrderService;
+
     /**
      * 获取科室列表
      */
@@ -68,5 +79,48 @@ public class ApiHospitalDepartmentController extends AbstractApiController {
         return R.ok(simpleDepartmentList);
     }
 
+    @ApiOperation("获取管理老师关联的科室订单统计")
+    @GetMapping("/teacher/simpleList")
+    public R<DepartmentOrderStatisticsVo> getTeacherSimpleInfo(
+        @RequestParam(value = "hospitalId", required = false) Long hospitalId,
+        @RequestParam(value = "departmentId", required = false) Long departmentId) {
+        Long teacherId = getTeacherId();
+
+        Set<Long> departmentIds = new HashSet<>();
+        // 如果没有传科室id,则需要查询了管理老师可管理的科室id列表
+        if (departmentId == null) {
+            List<TeacherDepartmentRel> teacherDepartmentRelList = iTeacherDepartmentRelService.queryByTeacherId(teacherId);
+            departmentIds = teacherDepartmentRelList.stream()
+                .filter(item -> hospitalId == null || item.getHospitalId().equals(hospitalId))
+                .map(TeacherDepartmentRel::getDepartmentId).collect(Collectors.toSet());
+        } else {
+            departmentIds.add(departmentId);
+        }
+        List<DepartmentOrderCountVo> departmentOrderCountList = iOrderService.queryDepartmentOrderCount(departmentIds);
+
+        // 获取医院以及科室名称
+        Set<Long> hospitalIds = convertSet(departmentOrderCountList, DepartmentOrderCountVo::getHospitalId);
+        List<HospitalVo> hospitalList = iHospitalService.queryListByIds(hospitalIds);
+        List<HospitalDepartmentVo> departmentHospitalList =  iHospitalDepartmentService.queryListByIds(departmentIds);
+        for (DepartmentOrderCountVo departmentOrderCount : departmentOrderCountList) {
+            HospitalVo hospitalVo = findFirst(hospitalList, h -> h.getId().equals(departmentOrderCount.getHospitalId()));
+            if (hospitalVo != null) {
+                departmentOrderCount.setHospitalName(hospitalVo.getName());
+            }
+            HospitalDepartmentVo departmentHospitalVo = findFirst(departmentHospitalList, h -> h.getId().equals(departmentOrderCount.getDepartmentId()));
+            if (departmentHospitalVo != null) {
+                departmentOrderCount.setDepartmentName(departmentHospitalVo.getName());
+            }
+        }
+
+        // 汇总
+        DepartmentOrderStatisticsVo departmentOrderStatisticsVo = new DepartmentOrderStatisticsVo();
+        departmentOrderStatisticsVo.setDepartmentOrderCountList(departmentOrderCountList);
+        departmentOrderStatisticsVo.setOrderCount(CollectionUtils.getSumValue(departmentOrderCountList, DepartmentOrderCountVo::getOrderCount, Integer::sum, 0));
+        departmentOrderStatisticsVo.setInProgressCount(CollectionUtils.getSumValue(departmentOrderCountList, DepartmentOrderCountVo::getInProgressCount, Integer::sum, 0));
+        departmentOrderStatisticsVo.setFinishCount(CollectionUtils.getSumValue(departmentOrderCountList, DepartmentOrderCountVo::getFinishCount, Integer::sum, 0));
+
+        return R.ok(departmentOrderStatisticsVo);
+    }
 
 }

+ 51 - 0
ruoyi-info/ruoyi-info-biz/src/main/java/com/ruoyi/info/hospital/domain/vo/DepartmentOrderCountVo.java

@@ -0,0 +1,51 @@
+package com.ruoyi.info.hospital.domain.vo;
+
+import java.io.Serializable;
+
+import lombok.Data;
+
+/**
+ * @author fucheng.bai
+ * @date 2025/10/10
+ */
+@Data
+public class DepartmentOrderCountVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 科室id
+     */
+    private Long departmentId;
+
+    /**
+     * 医院id
+     */
+    private Long hospitalId;
+
+    /**
+     * 医院名称
+     */
+    private String hospitalName;
+
+    /**
+     * 科室名称
+     */
+    private String departmentName;
+
+    /**
+     * 订单总数量
+     */
+    private Integer orderCount;
+
+    /**
+     * 服务中数量
+     */
+    private Integer inProgressCount;
+
+    /**
+     * 已完成数量
+     */
+    private Integer finishCount;
+
+}

+ 36 - 0
ruoyi-info/ruoyi-info-biz/src/main/java/com/ruoyi/info/hospital/domain/vo/DepartmentOrderStatisticsVo.java

@@ -0,0 +1,36 @@
+package com.ruoyi.info.hospital.domain.vo;
+
+import java.io.Serializable;
+import java.util.List;
+
+import lombok.Data;
+
+/**
+ * @author fucheng.bai
+ * @date 2025/10/10
+ */
+@Data
+public class DepartmentOrderStatisticsVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 订单总数量
+     */
+    private Integer orderCount;
+
+    /**
+     * 服务中数量
+     */
+    private Integer inProgressCount;
+
+    /**
+     * 已完成数量
+     */
+    private Integer finishCount;
+
+    /**
+     * 科室订单数量
+     */
+    private List<DepartmentOrderCountVo> departmentOrderCountList;
+}

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

@@ -2,6 +2,7 @@ package com.ruoyi.info.order.mapper;
 
 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.order.domain.Order;
 import com.ruoyi.info.order.domain.bo.OrderBo;
@@ -11,6 +12,7 @@ import com.ruoyi.info.order.domain.vo.OrderWorkerSumVo;
 
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -30,4 +32,6 @@ public interface OrderMapper extends BaseMapperPlus<OrderMapper, Order, OrderVo>
     List<OrderWorkerSumVo> selectOrderWorkerSum();
 
     Integer selectOrderCount(@Param("bo") OrderCountBo orderCountBo);
+
+    List<DepartmentOrderCountVo> selectDepartmentOrderCount(@Param("departmentIds") Collection<Long> departmentIds);
 }

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

@@ -2,6 +2,7 @@ package com.ruoyi.info.order.service;
 
 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.order.domain.Order;
 import com.ruoyi.info.order.domain.bo.OrderBo;
@@ -103,7 +104,20 @@ public interface IOrderService {
 
     List<OrderWorkerSumVo> getOrderWorkerSum();
 
+    /**
+     * 订单按条件查询数量
+     * @param orderCountBo
+     * @return
+     */
     Integer queryOrderCount(OrderCountBo orderCountBo);
 
+
+    /**
+     * 订单按科室,根据不同状态查询数量
+     *
+     * @return
+     */
+    List<DepartmentOrderCountVo> queryDepartmentOrderCount(Collection<Long> departmentIds);
+
     OrderVo convertAllVo(OrderVo vo, boolean queryPatient);
 }

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

@@ -16,6 +16,7 @@ import com.ruoyi.common.utils.BeanCopyUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.info.hospital.domain.Hospital;
 import com.ruoyi.info.hospital.domain.HospitalDepartment;
+import com.ruoyi.info.hospital.domain.vo.DepartmentOrderCountVo;
 import com.ruoyi.info.hospital.domain.vo.HospitalDepartmentVo;
 import com.ruoyi.info.hospital.domain.vo.HospitalStatisticsVo;
 import com.ruoyi.info.hospital.domain.vo.HospitalVo;
@@ -500,6 +501,11 @@ public class OrderServiceImpl implements IOrderService {
         return vo;
     }
 
+    @Override
+    public List<DepartmentOrderCountVo> queryDepartmentOrderCount(Collection<Long> departmentIds) {
+        return baseMapper.selectDepartmentOrderCount(departmentIds);
+    }
+
     private List<OrderVo> convertAllList(List<OrderVo> list, boolean queryPatient) {
         return list.stream().map(o -> convertAllVo(o, queryPatient)).collect(Collectors.toList());
     }

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

@@ -89,6 +89,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
 
+    <select id="selectDepartmentOrderCount" resultType="com.ruoyi.info.hospital.domain.vo.DepartmentOrderCountVo">
+        SELECT
+            hospital_id AS hospitalId,
+            hospital_department_id AS departmentId,
+            COUNT(*) AS orderCount,
+            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="departmentIds != null and departmentIds.size > 0">
+                hospital_department_id in
+                <foreach item="item" collection="departmentIds" separator="," open="(" close=")" index="">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        GROUP BY hospital_id, hospital_department_id
+        ORDER BY hospital_id, hospital_department_id;
+    </select>
+
+
     <sql id="queryList">
         select o.*, u.nickname as userName, u.mobile as userMobile from tb_order o
         left join tb_user u on u.id = o.user_id