浏览代码

首页统计

guomengjiao 5 天之前
父节点
当前提交
541f7561c0

+ 44 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/base/HomeController.java

@@ -2,6 +2,11 @@ package com.ruoyi.web.controller.base;
 
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.info.hospital.domain.vo.HospitalStatisticsVo;
+import com.ruoyi.info.hospital.service.IHospitalService;
+import com.ruoyi.info.order.service.IOrderService;
+import com.ruoyi.info.service.domain.vo.ServiceCategorizeStatisticsVo;
+import com.ruoyi.info.service.service.IServiceProductService;
 import com.ruoyi.user.domain.vo.UserStatisticsVo;
 import com.ruoyi.user.service.IUserService;
 import io.swagger.annotations.Api;
@@ -12,7 +17,9 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 首页管理 Controller
@@ -28,16 +35,51 @@ import java.util.List;
 public class HomeController extends BaseController {
 
     private final IUserService userService;
+    private final IHospitalService hospitalService;
+    private final IOrderService orderService;
+    private final IServiceProductService serviceProductService;
+
+    /**
+     * 运营端首页
+     */
+    @ApiOperation("运营端首页")
+    @GetMapping("/homeQuantity")
+    public R<Map<String, Integer>> homeQuantity() {
+        Map<String, Integer> map = new HashMap<>();
+        map.put("userSum", userService.queryUserSumForHome());
+        map.put("hospitalSum", hospitalService.querySumForHome());
+        map.put("orderSum", orderService.querySumForHome());
+        //护工数
+        map.put("nurseSum", 0);
+        return R.ok(map);
+    }
 
     /**
      * 用户最近七日注册数
      */
     @ApiOperation("用户最近七日注册数")
-//    @SaCheckPermission("system:home:top")
     @GetMapping("/user-statistics")
-    public R<List<UserStatisticsVo>> userStatistics () {
+    public R<List<UserStatisticsVo>> userStatistics() {
         List<UserStatisticsVo> list = userService.statisticsUserRegisterForHome();
         return R.ok(list);
     }
 
+    /**
+     * 医院订单数
+     */
+    @ApiOperation("医院订单数")
+    @GetMapping("/hospital-order-statistics")
+    public R<List<HospitalStatisticsVo>> hospitalOrderStatistics() {
+        return R.ok(orderService.queryHospitalOrderStatistics());
+    }
+
+    /**
+     * 服务分类下服务分布
+     */
+    @ApiOperation("服务分类下服务分布")
+    @GetMapping("/service-categorize-statistics")
+    public R<List<ServiceCategorizeStatisticsVo>> serviceCategorizeStatistics() {
+        return R.ok(serviceProductService.queryServiceCategorizeStatistics());
+    }
+
 }

+ 37 - 0
ruoyi-info/src/main/java/com/ruoyi/info/hospital/domain/vo/HospitalStatisticsVo.java

@@ -0,0 +1,37 @@
+package com.ruoyi.info.hospital.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+ * 医院信息视图对象 tb_hospital
+ *
+ * @author baifc
+ * @date 2025-09-20
+ */
+@Data
+@ApiModel("医院信息视图对象")
+@ExcelIgnoreUnannotated
+public class HospitalStatisticsVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("ID")
+    @ExcelProperty(value = "ID")
+    private Long hospitalId;
+    /**
+     * 医院名称
+     */
+    @ExcelProperty(value = "医院名称")
+    @ApiModelProperty("医院名称")
+    private String name;
+
+    @ApiModelProperty("订单数")
+    private Integer orderNum;
+}

+ 2 - 0
ruoyi-info/src/main/java/com/ruoyi/info/hospital/service/IHospitalService.java

@@ -94,4 +94,6 @@ public interface IHospitalService {
     void updateQrCodeUrl(Long hospitalId, String qrCodeUrl);
 
     String queryNameById(Long id);
+
+    Integer querySumForHome();
 }

+ 6 - 0
ruoyi-info/src/main/java/com/ruoyi/info/hospital/service/impl/HospitalServiceImpl.java

@@ -223,4 +223,10 @@ public class HospitalServiceImpl implements IHospitalService {
         return baseMapper.queryNameById(id);
     }
 
+    @Override
+    public Integer querySumForHome() {
+        Long count = baseMapper.selectCount(new LambdaQueryWrapper<Hospital>());
+        return count.intValue();
+    }
+
 }

+ 2 - 1
ruoyi-info/src/main/java/com/ruoyi/info/order/mapper/OrderMapper.java

@@ -1,8 +1,8 @@
 package com.ruoyi.info.order.mapper;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.domain.PageQuery;
 import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.info.hospital.domain.vo.HospitalStatisticsVo;
 import com.ruoyi.info.order.domain.Order;
 import com.ruoyi.info.order.domain.bo.OrderBo;
 import com.ruoyi.info.order.domain.vo.OrderVo;
@@ -22,4 +22,5 @@ public interface OrderMapper extends BaseMapperPlus<OrderMapper, Order, OrderVo>
 
     List<OrderVo> queryAllList(@Param("bo") OrderBo bo);
 
+    List<HospitalStatisticsVo> queryHospitalOrderStatistics();
 }

+ 5 - 0
ruoyi-info/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.HospitalStatisticsVo;
 import com.ruoyi.info.order.domain.Order;
 import com.ruoyi.info.order.domain.bo.OrderBo;
 import com.ruoyi.info.order.domain.vo.OrderVo;
@@ -79,4 +80,8 @@ public interface IOrderService {
     TableDataInfo<OrderVo> queryAllPageList(OrderBo bo, PageQuery pageQuery);
 
     List<OrderVo> queryAllList(OrderBo bo);
+
+    Integer querySumForHome();
+
+    List<HospitalStatisticsVo> queryHospitalOrderStatistics();
 }

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

@@ -11,6 +11,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.BeanCopyUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.info.hospital.domain.vo.HospitalStatisticsVo;
 import com.ruoyi.info.hospital.service.IHospitalDepartmentService;
 import com.ruoyi.info.hospital.service.IHospitalService;
 import com.ruoyi.info.order.domain.Order;
@@ -249,6 +250,22 @@ public class OrderServiceImpl implements IOrderService {
         return convertAllList(baseMapper.queryAllList(bo));
     }
 
+    @Override
+    public Integer querySumForHome() {
+        Long count = baseMapper.selectCount(new LambdaQueryWrapper<Order>());
+        return count.intValue();
+    }
+
+    @Override
+    public List<HospitalStatisticsVo> queryHospitalOrderStatistics() {
+        //按医院分组 订单数top10
+        List<HospitalStatisticsVo> hospitalStatistics = baseMapper.queryHospitalOrderStatistics();
+        return hospitalStatistics.stream().map(h -> {
+            h.setName(hospitalService.queryNameById(h.getHospitalId()));
+            return h;
+        }).collect(Collectors.toList());
+    }
+
     private List<OrderVo> convertAllList(List<OrderVo> list) {
         return list.stream().map(o -> {
             o.setHospitalName(hospitalService.queryNameById(o.getHospitalId()));

+ 43 - 0
ruoyi-info/src/main/java/com/ruoyi/info/service/domain/vo/ServiceCategorizeStatisticsVo.java

@@ -0,0 +1,43 @@
+package com.ruoyi.info.service.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 服务分类视图对象 tb_service_categorize
+ *
+ * @author ruoyi
+ * @date 2025-09-20
+ */
+@Data
+@ApiModel("服务分类视图对象")
+@ExcelIgnoreUnannotated
+public class ServiceCategorizeStatisticsVo {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ExcelProperty(value = "ID")
+    @ApiModelProperty("ID")
+    private Long serviceCategorizeId;
+
+    /**
+     * 分类名称
+     */
+    @ExcelProperty(value = "分类名称")
+    @ApiModelProperty("分类名称")
+    private String name;
+
+    /**
+     * 服务产品数
+     */
+    @ApiModelProperty("服务产品数")
+    private Integer serviceProductNum;
+
+}

+ 5 - 0
ruoyi-info/src/main/java/com/ruoyi/info/service/mapper/ServiceProductMapper.java

@@ -1,9 +1,12 @@
 package com.ruoyi.info.service.mapper;
 
 import com.ruoyi.info.service.domain.ServiceProduct;
+import com.ruoyi.info.service.domain.vo.ServiceCategorizeStatisticsVo;
 import com.ruoyi.info.service.domain.vo.ServiceProductVo;
 import com.ruoyi.common.core.mapper.BaseMapperPlus;
 
+import java.util.List;
+
 /**
  * 服务Mapper接口
  *
@@ -13,4 +16,6 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus;
 public interface ServiceProductMapper extends BaseMapperPlus<ServiceProductMapper, ServiceProduct, ServiceProductVo> {
 
     ServiceProductVo queryDelById(Long id);
+
+    List<ServiceCategorizeStatisticsVo> queryServiceCategorizeStatistics();
 }

+ 3 - 0
ruoyi-info/src/main/java/com/ruoyi/info/service/service/IServiceProductService.java

@@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.PageQuery;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.info.service.domain.ServiceProduct;
 import com.ruoyi.info.service.domain.bo.ServiceProductBo;
+import com.ruoyi.info.service.domain.vo.ServiceCategorizeStatisticsVo;
 import com.ruoyi.info.service.domain.vo.ServiceProductVo;
 
 import java.util.Collection;
@@ -77,4 +78,6 @@ public interface IServiceProductService {
     boolean setStatus(Long id);
 
     ServiceProductVo queryDelById(Long id);
+
+    List<ServiceCategorizeStatisticsVo> queryServiceCategorizeStatistics();
 }

+ 10 - 1
ruoyi-info/src/main/java/com/ruoyi/info/service/service/impl/ServiceProductServiceImpl.java

@@ -14,8 +14,8 @@ import com.ruoyi.common.utils.BeanCopyUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.info.service.domain.ServiceProduct;
 import com.ruoyi.info.service.domain.bo.ServiceProductBo;
+import com.ruoyi.info.service.domain.vo.ServiceCategorizeStatisticsVo;
 import com.ruoyi.info.service.domain.vo.ServiceProductVo;
-import com.ruoyi.info.service.enums.ServiceUnit;
 import com.ruoyi.info.service.exception.ServiceProductExceptionEnum;
 import com.ruoyi.info.service.mapper.ServiceProductMapper;
 import com.ruoyi.info.service.service.IServiceCategorizeService;
@@ -205,4 +205,13 @@ public class ServiceProductServiceImpl implements IServiceProductService {
         return baseMapper.queryDelById(id);
     }
 
+    @Override
+    public List<ServiceCategorizeStatisticsVo> queryServiceCategorizeStatistics() {
+        List<ServiceCategorizeStatisticsVo> list = baseMapper.queryServiceCategorizeStatistics();
+        return list.stream().map(s -> {
+            s.setName(serviceCategorizeService.queryNameById(s.getServiceCategorizeId()));
+            return s;
+        }).collect(Collectors.toList());
+    }
+
 }

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

@@ -36,6 +36,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="queryList"/>
     </select>
 
+    <select id="queryHospitalOrderStatistics"
+            resultType="com.ruoyi.info.hospital.domain.vo.HospitalStatisticsVo">
+        select o.hospital_id, count(o.id) as orderNum from tb_order o
+        group by o.hospital_id
+        order by orderNum desc
+        limit 10
+    </select>
+
     <sql id="queryList">
         select o.*, u.mobile as userMobile, sp.name as serviceName from tb_order o
         left join tb_user u on u.id = o.user_id

+ 10 - 0
ruoyi-info/src/main/resources/mapper/service/ServiceProductMapper.xml

@@ -28,5 +28,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select * from tb_service_product where id = #{id}
     </select>
 
+    <select id="queryServiceCategorizeStatistics"
+            resultType="com.ruoyi.info.service.domain.vo.ServiceCategorizeStatisticsVo">
+        select
+        service_categorize_id as serviceCategorizeId,
+        count(1) as serviceProductNum
+        from tb_service_product
+        where del_flag = 0
+        group by service_categorize_id
+    </select>
+
 
 </mapper>