From fc5cda9c324a91948dd964e91960623b41baf293 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期四, 02 一月 2025 10:55:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysAgreementServiceImpl.java             |   34 +
 medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java          |   41 +
 medicalWaste-admin/src/main/java/com/sinata/web/controller/screen/ScreenController.java                   |   77 ++++
 medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java                       |   12 
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/TotalCollectWeightByTypeVO.java             |   27 +
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwTransitCarCollectPointServiceImpl.java |   20 +
 medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysRoleController.java          |    5 
 medicalWaste-system/src/main/java/com/sinata/system/mapper/MwCollectRecordMapper.java                     |    9 
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwCollectRecordServiceImpl.java          |   17 +
 medicalWaste-system/src/main/resources/mapper/system/MwCollectRecordMapper.xml                            |   43 ++
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysRoleServiceImpl.java                  |    6 
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/SysRoleVO.java                              |    3 
 medicalWaste-system/src/main/java/com/sinata/system/service/MwCollectRecordService.java                   |    9 
 medicalWaste-system/src/main/resources/mapper/system/SysRoleMapper.xml                                    |    4 
 medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java                                  |  136 ++++++++
 medicalWaste-system/src/main/java/com/sinata/system/service/MwTransitCarCollectPointService.java          |   16 +
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/SysAgreementVO.java                         |   23 +
 medicalWaste-system/src/main/java/com/sinata/system/domain/SysAgreement.java                              |    2 
 medicalWaste-system/src/main/java/com/sinata/system/domain/dto/SysAgreementDTO.java                       |    4 
 medicalWaste-system/src/main/java/com/sinata/system/mapper/xml/MwTransitCarCollectPointMapper.xml         |   23 +
 medicalWaste-system/src/main/java/com/sinata/system/domain/MwTransitCarCollectPoint.java                  |   62 +++
 medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/StaticsController.java                 |   23 -
 medicalWaste-system/src/main/java/com/sinata/system/mapper/MwTransitCarCollectPointMapper.java            |   18 +
 medicalWaste-common/src/main/java/com/sinata/common/core/domain/entity/SysRole.java                       |   18 +
 medicalWaste-system/src/main/java/com/sinata/system/service/SysAgreementService.java                      |    9 
 medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java                        |  163 ++++++++++
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwWarningRecordVO.java                      |    5 
 medicalWaste-admin/src/test/java/MybatisPlusGeneraotr.java                                                |    2 
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/TodayMedicalWastePieVO.java                 |   25 +
 medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysAgreementController.java     |   18 +
 medicalWaste-system/src/main/java/com/sinata/system/domain/MedicalWasteStaticsVO.java                     |   36 ++
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/ScreenDepartmentVO.java                     |   30 +
 32 files changed, 859 insertions(+), 61 deletions(-)

diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/StaticsController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/StaticsController.java
index b0c17ea..4586b82 100644
--- a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/StaticsController.java
+++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/StaticsController.java
@@ -1,8 +1,6 @@
 package com.sinata.web.controller.backend;
 
 import com.sinata.common.core.domain.R;
-import com.sinata.system.domain.MedicalWasteStaticsVO;
-import com.sinata.system.domain.SysDepartment;
 import com.sinata.system.domain.query.DisposalReportQuery;
 import com.sinata.system.domain.query.HospitalReportQuery;
 import com.sinata.system.domain.query.TransformQuery;
@@ -10,10 +8,7 @@
 import com.sinata.system.service.biz.StaticsService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
-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;
@@ -21,7 +16,6 @@
 
 import javax.validation.Valid;
 import java.io.IOException;
-import java.util.List;
 
 /**
  * @author mitao
@@ -34,23 +28,6 @@
 public class StaticsController {
     private final StaticsService staticsService;
 
-    /**
-     * 机构分布-获取机构列表
-     *
-     * @param type 1:全部 2:医院 3:处置单位
-     * @return
-     */
-    //@ApiOperation("机构分布-获取机构列表 1:全部 2:医院 3:处置单位")
-    @GetMapping(value = "/departmentList/{type}")
-    public R<List<SysDepartment>> departmentList(@ApiParam(name = "type", value = "机构类型", required = true) @PathVariable(value = "type") Integer type) {
-        return R.ok(staticsService.departmentList(type));
-    }
-
-    //@ApiOperation("医疗监管-医废统计")
-    @GetMapping("/medicalWaste")
-    public R<MedicalWasteStaticsVO> medicalWaste() {
-        return R.ok(staticsService.medicalWaste());
-    }
 
     /**
      * 医院报表
diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysAgreementController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysAgreementController.java
index 0a54c4a..76c25ca 100644
--- a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysAgreementController.java
+++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysAgreementController.java
@@ -2,10 +2,14 @@
 
 import com.sinata.common.core.domain.R;
 import com.sinata.system.domain.dto.SysAgreementDTO;
+import com.sinata.system.domain.vo.SysAgreementVO;
 import com.sinata.system.service.SysAgreementService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
+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;
@@ -29,14 +33,26 @@
     private final SysAgreementService sysAgreementService;
 
     /**
+     * 根据类型获取协议内容
+     *
+     * @param type
+     * @return
+     */
+    @ApiOperation("根据类型获取协议内容")
+    @GetMapping("/{type}")
+    public R<SysAgreementVO> getAgreementByType(@ApiParam(name = "type", value = "协议类型 1:用户注册协议;2:用户隐私协议") @PathVariable("type") Integer type) {
+        return R.ok(sysAgreementService.getAgreementByType(type));
+    }
+    /**
      * 保存用户注册协议
      * @param dto
      * @return
      */
-    @ApiOperation("保存用户注册协议")
+    @ApiOperation("保存协议")
     @PostMapping("/save")
     public R<?> save(@Valid @RequestBody SysAgreementDTO dto){
         sysAgreementService.saveAgreement(dto);
         return R.ok();
     }
+
 }
diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java
index a0663ce..1356fee 100644
--- a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java
+++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java
@@ -24,6 +24,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -47,24 +48,34 @@
         if (menus.size() == 0) {
             return AjaxResult.success(new ArrayList<>());
         }
-        // 第三级
-        List<SysMenu> s3 = menus.stream().filter(e -> e.getMenuType().equals("F")).collect(Collectors.toList());
-        // 第二级
-        List<SysMenu> s2 = menus.stream().filter(e -> e.getMenuType().equals("C")).collect(Collectors.toList());
         // 第一级
-        List<SysMenu> s1 = menus.stream().filter(e -> e.getMenuType().equals("M")).collect(Collectors.toList());
-
-        for (SysMenu menu : s2) {
-            List<SysMenu> collect = s3.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList());
-            menu.setChildren(collect);
-        }
-        for (SysMenu menu : s1) {
-            List<SysMenu> collect = s2.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList());
-            menu.setChildren(collect);
-        }
-
+        List<SysMenu> s1 = menus.stream().filter(e -> e.getMenuType().equals("M") && e.getParentId().equals(0L)).collect(Collectors.toList());
+        // 构建以 parentId 为键的 Map
+        Map<Long, List<SysMenu>> menuMap = menus.stream()
+                .collect(Collectors.groupingBy(SysMenu::getParentId));
+        // 构建树形结构
+        buildMenuTree(menuMap, s1);
         return AjaxResult.success(s1);
     }
+
+    /**
+     * 封装树形层级
+     *
+     * @param menuMap
+     * @param s1
+     */
+    public void buildMenuTree(Map<Long, List<SysMenu>> menuMap, List<SysMenu> s1) {
+        for (SysMenu sysMenu : s1) {
+            // 获取当前菜单的子级
+            List<SysMenu> children = menuMap.getOrDefault(sysMenu.getMenuId(), new ArrayList<>());
+            sysMenu.setChildren(children);
+            //移除当前菜单
+            menuMap.remove(sysMenu.getMenuId());
+            // 递归设置子级菜单
+            buildMenuTree(menuMap, children);
+        }
+    }
+
     /**
      * 获取菜单列表
      */
diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysRoleController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysRoleController.java
index 801d6f8..b2d52c4 100644
--- a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysRoleController.java
+++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysRoleController.java
@@ -139,6 +139,11 @@
         return R.ok(roleService.getManageRoleList(getLoginUser()));
     }
 
+    /**
+     * 角色列表
+     *
+     * @return
+     */
     @ApiOperation("角色列表")
     @GetMapping("/list")
     public R<List<SysRoleVO>> queryList() {
diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/screen/ScreenController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/screen/ScreenController.java
new file mode 100644
index 0000000..306537f
--- /dev/null
+++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/screen/ScreenController.java
@@ -0,0 +1,77 @@
+package com.sinata.web.controller.screen;
+
+import com.sinata.common.core.domain.R;
+import com.sinata.system.domain.MedicalWasteStaticsVO;
+import com.sinata.system.domain.vo.ScreenDepartmentVO;
+import com.sinata.system.domain.vo.TodayMedicalWastePieVO;
+import com.sinata.system.domain.vo.TotalCollectWeightByTypeVO;
+import com.sinata.system.service.biz.ScreenService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author mitao
+ * @date 2025/1/1
+ */
+@Validated
+@Api(tags = {"数据大屏相关接口"})
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/screen")
+public class ScreenController {
+    private final ScreenService screenService;
+
+    /**
+     * 获取单位列表
+     *
+     * @return
+     */
+    @ApiOperation(value = "获取单位列表", notes = "展示单位分布")
+    @GetMapping(value = "/departmentList")
+    public R<List<ScreenDepartmentVO>> departmentList() {
+        return R.ok(screenService.departmentList());
+    }
+
+    /**
+     * 预警数据统计
+     *
+     * @return
+     */
+    @ApiOperation("预警数据统计")
+    @GetMapping("/medicalWaste")
+    public R<MedicalWasteStaticsVO> medicalWasteStatics() {
+        return R.ok(screenService.medicalWasteStatics());
+    }
+
+    /**
+     * 今日医废类型占比
+     *
+     * @return
+     */
+    @ApiOperation("今日医废类型统计占比")
+    @GetMapping("/todayMedicalWastePie")
+    public R<List<TodayMedicalWastePieVO>> todayMedicalWastePie() {
+        return R.ok(screenService.todayMedicalWastePie());
+    }
+
+    /**
+     * 各类型医废收集总量
+     *
+     * @param type
+     * @return
+     */
+    @ApiOperation("各类型医废收集总量")
+    @GetMapping("/totalCollectWeightByType/{type}")
+    public R<TotalCollectWeightByTypeVO> totalCollectWeightByType(@ApiParam(name = "type", value = "统计类型 1:按周统计 2:按月统计") @PathVariable("type") Integer type) {
+        return R.ok(screenService.totalCollectWeightByType(type));
+    }
+}
diff --git a/medicalWaste-admin/src/test/java/MybatisPlusGeneraotr.java b/medicalWaste-admin/src/test/java/MybatisPlusGeneraotr.java
index 6c7c670..360f0fc 100644
--- a/medicalWaste-admin/src/test/java/MybatisPlusGeneraotr.java
+++ b/medicalWaste-admin/src/test/java/MybatisPlusGeneraotr.java
@@ -48,7 +48,7 @@
                             builder
                                     // 在这里添加数据库表名
                                     //.addInclude("MW_BOX")
-                                    .addInclude("MW_DISPOSAL_HANDLE_RECORD_ITEM")// 设置需要生成的表名,多个表之间可以用逗号隔开
+                                    .addInclude("MW_TRANSIT_CAR_COLLECT_POINT")// 设置需要生成的表名,多个表之间可以用逗号隔开
                                     // .addExclude("BBZQ_USER","BBZQ_USER_LOG")
                                     .controllerBuilder().enableRestStyle()         // controller配置策略
                                     .serviceBuilder().formatServiceFileName("%sService")            // service配置策略
diff --git a/medicalWaste-common/src/main/java/com/sinata/common/core/domain/entity/SysRole.java b/medicalWaste-common/src/main/java/com/sinata/common/core/domain/entity/SysRole.java
index 38895b6..333fc80 100644
--- a/medicalWaste-common/src/main/java/com/sinata/common/core/domain/entity/SysRole.java
+++ b/medicalWaste-common/src/main/java/com/sinata/common/core/domain/entity/SysRole.java
@@ -72,14 +72,30 @@
     /** 角色菜单权限 */
     @TableField(exist = false)
     private Set<String> permissions;
-
+    /**
+     * 可管理角色id
+     */
     @TableField("MANAGE_ROLE_ID_STR")
     private String manageRoleIdStr;
+    /**
+     * 小程序角色标志
+     */
+    @TableField("APPLET_FLAG")
+    private Integer appletFlag;
+
     public SysRole()
     {
 
     }
 
+    public Integer getAppletFlag() {
+        return appletFlag;
+    }
+
+    public void setAppletFlag(Integer appletFlag) {
+        this.appletFlag = appletFlag;
+    }
+
     public String getManageRoleIdStr() {
         return manageRoleIdStr;
     }
diff --git a/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java b/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java
index 544c615..4b09a69 100644
--- a/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java
+++ b/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java
@@ -5,11 +5,14 @@
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -36,6 +39,7 @@
             "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", 
             "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
             "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
+    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 
     /**
      * 获取当前Date型日期
@@ -279,4 +283,136 @@
         return result;
     }
 
+    // 获得本周一0点时间
+    public static Date getTimesWeekmorning() {
+        Calendar cal = Calendar.getInstance();
+        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+        return cal.getTime();
+    }
+
+    // 获得本周日24点时间
+    public static Date getTimesWeeknight() {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(getTimesWeekmorning());
+        cal.add(Calendar.DAY_OF_WEEK, 7);
+        return cal.getTime();
+    }
+
+    // 获得本月第一天0点时间
+    public static Date getTimesMonthmorning() {
+        Calendar cal = Calendar.getInstance();
+        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
+        return cal.getTime();
+    }
+
+    // 获得本月最后一天24点时间
+    public static Date getTimesMonthnight() {
+        Calendar cal = Calendar.getInstance();
+        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+        cal.set(Calendar.HOUR_OF_DAY, 24);
+        return cal.getTime();
+    }
+
+    /**
+     * 获取本月所有日期字符串列表
+     *
+     * @param format 日期格式,例如 "yyyy-MM-dd"
+     * @return 本月所有日期的字符串列表
+     */
+    public static List<String> getAllDatesOfCurrentMonth(String format) {
+        // 当前日期
+        LocalDate now = LocalDate.now();
+        // 本月的第一天
+        LocalDate firstDayOfMonth = now.withDayOfMonth(1);
+        // 本月的最后一天
+        LocalDate lastDayOfMonth = now.withDayOfMonth(now.lengthOfMonth());
+
+        // 日期格式化器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+
+        // 结果列表
+        List<String> dates = new ArrayList<>();
+
+        // 从第一天开始循环到最后一天
+        LocalDate currentDate = firstDayOfMonth;
+        while (!currentDate.isAfter(lastDayOfMonth)) {
+            dates.add(currentDate.format(formatter)); // 格式化为字符串并添加到列表
+            currentDate = currentDate.plusDays(1);   // 日期加一天
+        }
+
+        return dates;
+    }
+
+    /**
+     * 获取本周所有日期字符串列表
+     *
+     * @param format 日期格式,例如 "yyyy-MM-dd"
+     * @return 本周所有日期的字符串列表
+     */
+    public static List<String> getAllDatesOfCurrentWeek(String format) {
+        // 当前日期
+        LocalDate now = LocalDate.now();
+
+        // 本周的星期一(获取当前日期所在周的第一天)
+        LocalDate firstDayOfWeek = now.with(TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY));
+        // 本周的星期日(获取当前日期所在周的最后一天)
+        LocalDate lastDayOfWeek = firstDayOfWeek.plusDays(6);
+
+        // 日期格式化器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+
+        // 结果列表
+        List<String> dates = new ArrayList<>();
+
+        // 从星期一到星期日循环
+        LocalDate currentDate = firstDayOfWeek;
+        while (!currentDate.isAfter(lastDayOfWeek)) {
+            dates.add(currentDate.format(formatter)); // 格式化为字符串并添加到列表
+            currentDate = currentDate.plusDays(1);   // 日期加一天
+        }
+
+        return dates;
+    }
+
+    /**
+     * 获取本月月初第一天0点时间,并返回 Date 类型
+     *
+     * @return 本月月初第一天0点时间(Date 类型)
+     */
+    public static Date getFirstDayOfCurrentMonthAtMidnight() {
+        // 获取当前日期
+        LocalDate now = LocalDate.now();
+
+        // 获取本月的第一天
+        LocalDate firstDayOfMonth = now.withDayOfMonth(1);
+
+        // 将第一天与0点时间合并
+        LocalDateTime firstDayAtMidnight = firstDayOfMonth.atTime(LocalTime.MIDNIGHT);
+
+        // 将 LocalDateTime 转换为 Date
+        return Date.from(firstDayAtMidnight.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
+    /**
+     * 获取本周初第一天(周一)0点时间,并返回 Date 类型
+     *
+     * @return 本周初第一天0点时间(Date 类型)
+     */
+    public static Date getFirstDayOfCurrentWeekAtMidnight() {
+        // 获取当前日期
+        LocalDate now = LocalDate.now();
+
+        // 获取本周的第一天(星期一)
+        LocalDate firstDayOfWeek = now.with(DayOfWeek.MONDAY);
+
+        // 将星期一与0点时间合并
+        LocalDateTime firstDayAtMidnight = firstDayOfWeek.atTime(LocalTime.MIDNIGHT);
+
+        // 将 LocalDateTime 转换为 Date
+        return Date.from(firstDayAtMidnight.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/MedicalWasteStaticsVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/MedicalWasteStaticsVO.java
index 7749740..194d111 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/domain/MedicalWasteStaticsVO.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/MedicalWasteStaticsVO.java
@@ -20,4 +20,40 @@
     @ApiModelProperty("今日收集-袋数")
     private Integer todayCollectBagNum;
 
+    @ApiModelProperty("今日出库-重量")
+    private BigDecimal todayCheckoutWeight;
+
+    @ApiModelProperty("今日出库-袋数")
+    private Integer todayCheckoutBagNum;
+
+    @ApiModelProperty("待转运-重量")
+    private BigDecimal toBeTransportedWeight;
+
+    @ApiModelProperty("待转运-袋数")
+    private Integer toBeTransportedBagNum;
+
+    @ApiModelProperty("待转运-重量")
+    private BigDecimal inTransitWeight;
+
+    @ApiModelProperty("待转运-袋数")
+    private Integer inTransitBagNum;
+
+    @ApiModelProperty("已入场-重量")
+    private BigDecimal enteredAlreadyWeight;
+
+    @ApiModelProperty("已入场-袋数")
+    private Integer enteredAlreadyBagNum;
+
+    @ApiModelProperty("待处置-重量")
+    private BigDecimal toBeDisposedOfWeight;
+
+    @ApiModelProperty("待处置-袋数")
+    private Integer toBeDisposedOfBagNum;
+
+    @ApiModelProperty("已处置-重量")
+    private BigDecimal disposedWeight;
+
+    @ApiModelProperty("已处置-袋数")
+    private Integer disposedBagNum;
+
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/MwTransitCarCollectPoint.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/MwTransitCarCollectPoint.java
new file mode 100644
index 0000000..b6190ab
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/MwTransitCarCollectPoint.java
@@ -0,0 +1,62 @@
+package com.sinata.system.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 转运车辆已收集路线
+ * </p>
+ *
+ * @author mitao
+ * @since 2025-01-01
+ */
+@Getter
+@Setter
+@TableName("MW_TRANSIT_CAR_COLLECT_POINT")
+@ApiModel(value = "MwTransitCarCollectPoint对象", description = "转运车辆已收集路线")
+public class MwTransitCarCollectPoint implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键id")
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("车辆ID")
+    @TableField("CAR_ID")
+    private Long carId;
+
+    @ApiModelProperty("线路ID")
+    @TableField("ROUTE_ID")
+    private Long routeId;
+
+    @ApiModelProperty("线路列表 存储单位ID[1,2,3]")
+    @TableField("POINT_LIST")
+    private String pointList;
+
+    @ApiModelProperty("运输日期")
+    @TableField("TRANSIT_DATE")
+    private Date transitDate;
+
+    @ApiModelProperty(value = "记录创建时间,前端忽略")
+    @TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
+    private Date createTime;
+
+    @ApiModelProperty(value = "记录修改时间,前端忽略")
+    @TableField(value = "UPDATE_TIME", fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+
+
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/SysAgreement.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/SysAgreement.java
index 140706d..41aeec2 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/domain/SysAgreement.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/SysAgreement.java
@@ -37,7 +37,7 @@
     @TableField("CONTENT")
     private String content;
 
-    @ApiModelProperty("协议类型(1:注册协议)")
+    @ApiModelProperty("协议类型(1:注册协议2:隐私协议)")
     @TableField("TYPE")
     private Integer type;
 
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/SysAgreementDTO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/SysAgreementDTO.java
index 6af7881..9864b39 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/SysAgreementDTO.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/SysAgreementDTO.java
@@ -12,8 +12,8 @@
 @ApiModel("协议数据传输对象")
 public class SysAgreementDTO {
 
-    @ApiModelProperty("主键")
-    private Long id;
+    @ApiModelProperty("协议类型 1:用户注册协议;2:用户隐私协议")
+    private Integer type;
 
     @ApiModelProperty("内容")
     private String content;
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwWarningRecordVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwWarningRecordVO.java
index fc352ea..d169aaa 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwWarningRecordVO.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwWarningRecordVO.java
@@ -1,5 +1,6 @@
 package com.sinata.system.domain.vo;
 
+import cn.idev.excel.annotation.ExcelIgnore;
 import cn.idev.excel.annotation.ExcelProperty;
 import com.sinata.system.annotation.FastExcel;
 import com.sinata.system.conveter.EConverter;
@@ -20,6 +21,7 @@
 public class MwWarningRecordVO {
 
     @ApiModelProperty("预警记录id")
+    @ExcelIgnore
     private Long id;
 
     @ApiModelProperty("预警时间")
@@ -27,6 +29,7 @@
     private Date warnTime;
 
     @ApiModelProperty("预警对象id")
+    @ExcelIgnore
     private Long warningTargetId;
 
     @ApiModelProperty("预警对象")
@@ -48,9 +51,11 @@
     private Integer status;
 
     @ApiModelProperty("单位id")
+    @ExcelIgnore
     private Long departmentId;
 
     @ApiModelProperty("单位名称")
+    @ExcelIgnore
     private String departmentName;
 
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/ScreenDepartmentVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/ScreenDepartmentVO.java
new file mode 100644
index 0000000..94ae843
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/ScreenDepartmentVO.java
@@ -0,0 +1,30 @@
+package com.sinata.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2025/1/1
+ */
+@Data
+@ApiModel("大屏单位视图对象")
+public class ScreenDepartmentVO {
+
+    @ApiModelProperty("区域id")
+    private Long id;
+
+    @ApiModelProperty("区域名称")
+    private String departmentName;
+
+    @ApiModelProperty("机构类型 1:区域 2:医疗机构 3:处置单位 4:监管单位")
+    private Integer orgType;
+
+    @ApiModelProperty("经度")
+    private Double longitude;
+
+    @ApiModelProperty("纬度")
+    private Double latitude;
+
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/SysAgreementVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/SysAgreementVO.java
new file mode 100644
index 0000000..d7d2bd9
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/SysAgreementVO.java
@@ -0,0 +1,23 @@
+package com.sinata.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2025/1/1
+ */
+@Data
+@ApiModel("用户协议视图对象")
+public class SysAgreementVO {
+    
+    @ApiModelProperty("主键")
+    private Long id;
+
+    @ApiModelProperty("协议类型 1:用户注册协议;2:用户隐私协议")
+    private Integer type;
+
+    @ApiModelProperty("内容")
+    private String content;
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/SysRoleVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/SysRoleVO.java
index a50b42b..4ebe65f 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/SysRoleVO.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/SysRoleVO.java
@@ -38,4 +38,7 @@
     
     @ApiModelProperty("菜单id列表")
     private List<Long> menuIds;
+
+    @ApiModelProperty("小程序角色标志")
+    private Integer appletFlag;
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/TodayMedicalWastePieVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/TodayMedicalWastePieVO.java
new file mode 100644
index 0000000..201cbff
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/TodayMedicalWastePieVO.java
@@ -0,0 +1,25 @@
+package com.sinata.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author mitao
+ * @date 2025/1/1
+ */
+@Data
+@ApiModel("今日医废类型统计占比视图对象")
+public class TodayMedicalWastePieVO {
+    
+    @ApiModelProperty("医废类型名称")
+    private String medicalWasteStr;
+
+    @ApiModelProperty("数量")
+    private Integer count;
+
+    @ApiModelProperty("比例")
+    private BigDecimal proportion;
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/TotalCollectWeightByTypeVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/TotalCollectWeightByTypeVO.java
new file mode 100644
index 0000000..c976e20
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/TotalCollectWeightByTypeVO.java
@@ -0,0 +1,27 @@
+package com.sinata.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author mitao
+ * @date 2025/1/1
+ */
+@Data
+@ApiModel("各类型医废收集总量视图对象")
+public class TotalCollectWeightByTypeVO {
+
+    @ApiModelProperty("日期列表")
+    private List<String> dateList;
+
+    @ApiModelProperty("医废类型列表")
+    private List<String> wasteTypeList = new ArrayList<>();
+
+    @ApiModelProperty("各日期各类型医废收集总量列表")
+    private List<List<BigDecimal>> totalCollectWeightList = new ArrayList<>();
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwCollectRecordMapper.java b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwCollectRecordMapper.java
index fbab335..27dd07e 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwCollectRecordMapper.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwCollectRecordMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sinata.system.domain.MedicalWasteStaticsVO;
 import com.sinata.system.domain.MwCollectRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sinata.system.domain.dto.CollectCarTotalUpDto;
@@ -94,4 +95,12 @@
      * @return
      */
     List<MwCollectRecordWarningVO> queryListGroupByDepartment();
+
+    /**
+     * 预警数据统计
+     *
+     * @param id
+     * @return
+     */
+    MedicalWasteStaticsVO queryMedicalWasteStatics(String treeCode);
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwTransitCarCollectPointMapper.java b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwTransitCarCollectPointMapper.java
new file mode 100644
index 0000000..47a6643
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwTransitCarCollectPointMapper.java
@@ -0,0 +1,18 @@
+package com.sinata.system.mapper;
+
+import com.sinata.system.domain.MwTransitCarCollectPoint;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 转运车辆已收集路线 Mapper 接口
+ * </p>
+ *
+ * @author mitao
+ * @since 2025-01-01
+ */
+@Mapper
+public interface MwTransitCarCollectPointMapper extends BaseMapper<MwTransitCarCollectPoint> {
+
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/mapper/xml/MwTransitCarCollectPointMapper.xml b/medicalWaste-system/src/main/java/com/sinata/system/mapper/xml/MwTransitCarCollectPointMapper.xml
new file mode 100644
index 0000000..bd6ed4e
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/mapper/xml/MwTransitCarCollectPointMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sinata.system.mapper.MwTransitCarCollectPointMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.sinata.system.domain.MwTransitCarCollectPoint">
+        <id column="ID" property="id" />
+        <result column="CREATE_TIME" property="createTime" />
+        <result column="UPDATE_TIME" property="updateTime" />
+        <result column="CAR_ID" property="carId" />
+        <result column="ROUTE_ID" property="routeId" />
+        <result column="POINT_LIST" property="pointList" />
+        <result column="TRANSIT_DATE" property="transitDate" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        CREATE_TIME,
+        UPDATE_TIME,
+        ID, CAR_ID, ROUTE_ID, POINT_LIST, TRANSIT_DATE
+    </sql>
+
+</mapper>
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/MwCollectRecordService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/MwCollectRecordService.java
index 92026af..f92765c 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/MwCollectRecordService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/MwCollectRecordService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.sinata.common.entity.PageDTO;
+import com.sinata.system.domain.MedicalWasteStaticsVO;
 import com.sinata.system.domain.MwCollectRecord;
 import com.sinata.system.domain.dto.CollectCarTotalUpDto;
 import com.sinata.system.domain.dto.CollectDto;
@@ -103,4 +104,12 @@
      * @return
      */
     List<MwCollectRecordWarningVO> queryListGroupByDepartment();
+
+    /**
+     * 预警数据统计
+     *
+     * @param id
+     * @return
+     */
+    MedicalWasteStaticsVO queryMedicalWasteStatics(String treeCode);
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/MwTransitCarCollectPointService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/MwTransitCarCollectPointService.java
new file mode 100644
index 0000000..2c71c67
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/MwTransitCarCollectPointService.java
@@ -0,0 +1,16 @@
+package com.sinata.system.service;
+
+import com.sinata.system.domain.MwTransitCarCollectPoint;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 转运车辆已收集路线 服务类
+ * </p>
+ *
+ * @author mitao
+ * @since 2025-01-01
+ */
+public interface MwTransitCarCollectPointService extends IService<MwTransitCarCollectPoint> {
+
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/SysAgreementService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/SysAgreementService.java
index 6d18c62..6c49662 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/SysAgreementService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/SysAgreementService.java
@@ -3,6 +3,7 @@
 import com.sinata.system.domain.SysAgreement;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.sinata.system.domain.dto.SysAgreementDTO;
+import com.sinata.system.domain.vo.SysAgreementVO;
 
 /**
  * <p>
@@ -18,4 +19,12 @@
      * @param dto
      */
     void saveAgreement(SysAgreementDTO dto);
+
+    /**
+     * 根据类型获取协议内容
+     *
+     * @param type
+     * @return
+     */
+    SysAgreementVO getAgreementByType(Integer type);
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java
new file mode 100644
index 0000000..970b29e
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java
@@ -0,0 +1,163 @@
+package com.sinata.system.service.biz;
+
+import cn.hutool.core.date.DateUtil;
+import com.sinata.common.exception.ServiceException;
+import com.sinata.common.utils.BeanUtils;
+import com.sinata.common.utils.CollUtils;
+import com.sinata.common.utils.DateUtils;
+import com.sinata.system.domain.MedicalWasteStaticsVO;
+import com.sinata.system.domain.MwCollectRecord;
+import com.sinata.system.domain.SysDepartment;
+import com.sinata.system.domain.vo.ScreenDepartmentVO;
+import com.sinata.system.domain.vo.SysDictDataVO;
+import com.sinata.system.domain.vo.TodayMedicalWastePieVO;
+import com.sinata.system.domain.vo.TotalCollectWeightByTypeVO;
+import com.sinata.system.enums.DepartmentEnum;
+import com.sinata.system.service.ISysDictDataService;
+import com.sinata.system.service.MwCollectRecordService;
+import com.sinata.system.service.SysDepartmentService;
+import lombok.RequiredArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @author mitao
+ * @date 2025/1/1
+ */
+@Service
+@RequiredArgsConstructor
+public class ScreenService {
+    private final SysDepartmentService sysDepartmentService;
+    private final MwCollectRecordService mwCollectRecordService;
+    private final ISysDictDataService sysDictDataService;
+
+    /**
+     * 机构分布-获取机构列表
+     *
+     * @return
+     */
+    public List<ScreenDepartmentVO> departmentList() {
+        SysDepartment department = getNanNingDepartment();
+        List<SysDepartment> list = sysDepartmentService.lambdaQuery().likeRight(SysDepartment::getTreeCode, department.getTreeCode()).in(SysDepartment::getOrgType, DepartmentEnum.MEDICAL_INSTITUTION.getCode(), DepartmentEnum.DISPOSAL_UNIT.getCode()).list();
+        return BeanUtils.copyToList(list, ScreenDepartmentVO.class);
+    }
+
+    /**
+     * 预警数据统计
+     *
+     * @return
+     */
+    public MedicalWasteStaticsVO medicalWasteStatics() {
+        SysDepartment department = getNanNingDepartment();
+        return mwCollectRecordService.queryMedicalWasteStatics(department.getTreeCode());
+    }
+
+    /**
+     * 查询南宁市
+     *
+     * @return
+     */
+    @NotNull
+    private SysDepartment getNanNingDepartment() {
+        SysDepartment department = sysDepartmentService.lambdaQuery().eq(SysDepartment::getDepartmentName, "南宁市").one();
+        if (Objects.isNull(department)) {
+            throw new ServiceException("南宁市不存在!");
+        }
+        return department;
+    }
+
+    /**
+     * 今日医废类型统计占比
+     *
+     * @return
+     */
+    public List<TodayMedicalWastePieVO> todayMedicalWastePie() {
+        SysDepartment nanNingDepartment = getNanNingDepartment();
+        //查询南宁市下面的医疗机构
+        List<SysDepartment> list = sysDepartmentService.lambdaQuery().likeRight(SysDepartment::getTreeCode, nanNingDepartment.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.MEDICAL_INSTITUTION.getCode()).list();
+        List<Long> departmentIdList = list.stream().map(SysDepartment::getId).collect(Collectors.toList());
+        List<TodayMedicalWastePieVO> todayMedicalWastePieVOList = new ArrayList<>();
+        if (CollUtils.isEmpty(departmentIdList)) {
+            return todayMedicalWastePieVOList;
+        }
+        //查询收集记录
+        List<MwCollectRecord> collectRecordList = mwCollectRecordService.lambdaQuery()
+                .in(MwCollectRecord::getDepartmentId, departmentIdList).list();
+        if (CollUtils.isEmpty(collectRecordList)) {
+            return todayMedicalWastePieVOList;
+        }
+        int total = collectRecordList.size();
+        // 分组并统计每个 wasteTypeStr 对应的记录数
+        Map<String, Long> resultMap = collectRecordList.stream()
+                .collect(Collectors.groupingBy(MwCollectRecord::getWasteTypeStr, Collectors.counting()));
+
+        todayMedicalWastePieVOList = resultMap.entrySet().stream().map(entry -> {
+            TodayMedicalWastePieVO todayMedicalWastePieVO = new TodayMedicalWastePieVO();
+            todayMedicalWastePieVO.setMedicalWasteStr(entry.getKey());
+            todayMedicalWastePieVO.setCount(entry.getValue().intValue());
+            todayMedicalWastePieVO.setProportion(BigDecimal.valueOf(entry.getValue()).divide(BigDecimal.valueOf(total), RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
+            return todayMedicalWastePieVO;
+        }).collect(Collectors.toList());
+
+        return todayMedicalWastePieVOList;
+    }
+
+    /**
+     * 各类型医废收集总量
+     *
+     * @param type
+     * @return
+     */
+    public TotalCollectWeightByTypeVO totalCollectWeightByType(Integer type) {
+        SysDepartment nanNingDepartment = getNanNingDepartment();
+        TotalCollectWeightByTypeVO vo = new TotalCollectWeightByTypeVO();
+        Date startTime = DateUtils.getNowDate();
+        Date endTime = DateUtils.getNowDate();
+        if (type.equals(1)) {
+            //获取最本周的日期
+            vo.setDateList(DateUtils.getAllDatesOfCurrentWeek("MM-dd"));
+            startTime = DateUtils.getFirstDayOfCurrentWeekAtMidnight();
+        } else {
+            //最近一个月的日期
+            vo.setDateList(DateUtils.getAllDatesOfCurrentMonth("MM-dd"));
+            startTime = DateUtils.getFirstDayOfCurrentMonthAtMidnight();
+        }
+        //查询医废类型
+        List<SysDictDataVO> medicalWasteTypeList = sysDictDataService.medicalWasteTypeList();
+
+        //查询南宁市下面的医疗机构
+        List<SysDepartment> list = sysDepartmentService.lambdaQuery()
+                .likeRight(SysDepartment::getTreeCode, nanNingDepartment.getTreeCode())
+                .eq(SysDepartment::getOrgType, DepartmentEnum.MEDICAL_INSTITUTION.getCode()).list();
+        List<Long> departmentIdList = list.stream().map(SysDepartment::getId).collect(Collectors.toList());
+        if (CollUtils.isEmpty(departmentIdList)) {
+            return vo;
+        }
+        //查询医废收集记录
+        List<MwCollectRecord> collectRecordList = mwCollectRecordService.lambdaQuery()
+                .in(MwCollectRecord::getDepartmentId, departmentIdList).between(MwCollectRecord::getCollectTime, startTime, endTime).list();
+        if (CollUtils.isEmpty(collectRecordList)) {
+            return vo;
+        }
+        //封装数据
+        for (SysDictDataVO sysDictDataVO : medicalWasteTypeList) {
+            List<BigDecimal> totalCollectWeightList = new ArrayList<>();
+            for (String date : vo.getDateList()) {
+                BigDecimal totalWeight = collectRecordList.stream().filter(record -> DateUtil.format(record.getCollectTime(), "MM-dd").equals(date)
+                        && record.getWasteType().equals(sysDictDataVO.getDictCode())).map(MwCollectRecord::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
+                totalCollectWeightList.add(totalWeight);
+            }
+            vo.getTotalCollectWeightList().add(totalCollectWeightList);
+        }
+        return vo;
+    }
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java
index 368c4fc..39f6517 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java
@@ -61,19 +61,7 @@
     private final MwDisposalRecordService mwDisposalRecordService;
     private final MwDisposalHandleRecordService mwDisposalHandleRecordService;
 
-    /**
-     * 机构分布-获取机构列表
-     *
-     * @param type 1:全部 2:医院 3:处置单位
-     * @return
-     */
-    public List<SysDepartment> departmentList(Integer type) {
-        return sysDepartmentService.lambdaQuery().eq(type != 1, SysDepartment::getOrgType, type).list();
-    }
 
-    public MedicalWasteStaticsVO medicalWaste() {
-        return null;
-    }
 
     /**
      * 医院报表
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwCollectRecordServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwCollectRecordServiceImpl.java
index 00ddb23..9561f73 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwCollectRecordServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwCollectRecordServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sinata.common.entity.PageDTO;
 import com.sinata.common.utils.StringUtils;
+import com.sinata.system.domain.MedicalWasteStaticsVO;
 import com.sinata.system.domain.MwCollectRecord;
 import com.sinata.system.domain.dto.CollectCarTotalUpDto;
 import com.sinata.system.domain.dto.CollectDto;
@@ -174,8 +175,24 @@
         return baseMapper.queryListTimeType(2);
     }
 
+    /**
+     * 医疗机构存储量预警
+     *
+     * @return
+     */
     @Override
     public List<MwCollectRecordWarningVO> queryListGroupByDepartment() {
         return baseMapper.queryListGroupByDepartment();
     }
+
+    /**
+     * 预警数据统计
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public MedicalWasteStaticsVO queryMedicalWasteStatics(String treeCode) {
+        return baseMapper.queryMedicalWasteStatics(treeCode);
+    }
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwTransitCarCollectPointServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwTransitCarCollectPointServiceImpl.java
new file mode 100644
index 0000000..34cac05
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwTransitCarCollectPointServiceImpl.java
@@ -0,0 +1,20 @@
+package com.sinata.system.service.impl;
+
+import com.sinata.system.domain.MwTransitCarCollectPoint;
+import com.sinata.system.mapper.MwTransitCarCollectPointMapper;
+import com.sinata.system.service.MwTransitCarCollectPointService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 转运车辆已收集路线 服务实现类
+ * </p>
+ *
+ * @author mitao
+ * @since 2025-01-01
+ */
+@Service
+public class MwTransitCarCollectPointServiceImpl extends ServiceImpl<MwTransitCarCollectPointMapper, MwTransitCarCollectPoint> implements MwTransitCarCollectPointService {
+    
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysAgreementServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysAgreementServiceImpl.java
index e70b00b..b00a180 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysAgreementServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysAgreementServiceImpl.java
@@ -1,12 +1,16 @@
 package com.sinata.system.service.impl;
 
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sinata.common.utils.BeanUtils;
 import com.sinata.system.domain.SysAgreement;
 import com.sinata.system.domain.dto.SysAgreementDTO;
+import com.sinata.system.domain.vo.SysAgreementVO;
 import com.sinata.system.mapper.SysAgreementMapper;
 import com.sinata.system.service.SysAgreementService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Optional;
 
 /**
  * <p>
@@ -18,12 +22,34 @@
  */
 @Service
 public class SysAgreementServiceImpl extends ServiceImpl<SysAgreementMapper, SysAgreement> implements SysAgreementService {
+    /**
+     * @param type
+     * @return
+     */
+    @Override
+    public SysAgreementVO getAgreementByType(Integer type) {
+        Optional<SysAgreement> sysAgreement = lambdaQuery().eq(SysAgreement::getType, type).oneOpt();
+        SysAgreementVO sysAgreementVO = null;
+        if (sysAgreement.isPresent()) {
+            SysAgreement item = sysAgreement.get();
+            sysAgreementVO = BeanUtils.copyBean(item, SysAgreementVO.class);
+            return sysAgreementVO;
+        }
+        return sysAgreementVO;
+    }
+
+    /**
+     * 保存协议
+     *
+     * @param dto
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void saveAgreement(SysAgreementDTO dto) {
-        SysAgreement sysAgreement = lambdaQuery().eq(SysAgreement::getType, 1).oneOpt().orElse(new SysAgreement());
-        sysAgreement.setContent(dto.getContent());
-        sysAgreement.setType(1);
+        SysAgreement sysAgreement = BeanUtils.copyBean(dto, SysAgreement.class);
+        lambdaQuery().eq(SysAgreement::getType, dto.getType()).oneOpt().ifPresent(item -> sysAgreement.setId(item.getId()));
         saveOrUpdate(sysAgreement);
     }
+
+
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysRoleServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysRoleServiceImpl.java
index c7194ea..a531559 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysRoleServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysRoleServiceImpl.java
@@ -13,6 +13,7 @@
 import com.sinata.common.exception.ServiceException;
 import com.sinata.common.utils.BeanUtils;
 import com.sinata.common.utils.CollUtils;
+import com.sinata.common.utils.DateUtils;
 import com.sinata.common.utils.SecurityUtils;
 import com.sinata.common.utils.StringUtils;
 import com.sinata.common.utils.spring.SpringUtils;
@@ -466,14 +467,19 @@
     @Override
     public void saveRole(SysRoleDTO dto) {
         SysRole sysRole = BeanUtils.copyBean(dto, SysRole.class);
+
         if (!this.checkRoleNameUnique(sysRole)) {
             throw new ServiceException("保存角色'" + sysRole.getRoleName() + "'失败,角色名称已存在");
         }
         if (Objects.isNull(sysRole.getRoleId())) {
+            sysRole.setCreateBy(SecurityUtils.getUserId().toString());
+            sysRole.setCreateTime(DateUtils.getNowDate());
             baseMapper.insert(sysRole);
         } else {
             // 删除角色与菜单关联
             roleMenuMapper.deleteRoleMenuByRoleId(sysRole.getRoleId());
+            sysRole.setUpdateBy(SecurityUtils.getUserId().toString());
+            sysRole.setUpdateTime(DateUtils.getNowDate());
             baseMapper.updateById(sysRole);
         }
         insertRoleMenu(sysRole);
diff --git a/medicalWaste-system/src/main/resources/mapper/system/MwCollectRecordMapper.xml b/medicalWaste-system/src/main/resources/mapper/system/MwCollectRecordMapper.xml
index b517682..d51ff7d 100644
--- a/medicalWaste-system/src/main/resources/mapper/system/MwCollectRecordMapper.xml
+++ b/medicalWaste-system/src/main/resources/mapper/system/MwCollectRecordMapper.xml
@@ -404,5 +404,48 @@
         </where>
         GROUP BY MCR.DEPARTMENT_ID
     </select>
+    <select id="queryMedicalWasteStatics" resultType="com.sinata.system.domain.MedicalWasteStaticsVO"
+            parameterType="java.lang.Long">
+        SELECT
+        -- 今日收集
+        COALESCE(SUM(CASE WHEN TRUNC(MCR.COLLECT_TIME) = TRUNC(SYSDATE) THEN MCR.WEIGHT ELSE 0 END), 0) AS
+        todayCollectWeight,
+        COALESCE(COUNT(CASE WHEN TRUNC(MCR.COLLECT_TIME) = TRUNC(SYSDATE) THEN MCR.ID ELSE NULL END), 0) AS
+        todayCollectBagNum,
+
+        -- 今日出库
+        COALESCE(SUM(CASE WHEN TRUNC(MCR.CHECKOUT_TIME) = TRUNC(SYSDATE) THEN MCR.WEIGHT ELSE 0 END), 0) AS
+        todayCheckoutWeight,
+        COALESCE(COUNT(CASE WHEN TRUNC(MCR.CHECKOUT_TIME) = TRUNC(SYSDATE) THEN MCR.ID ELSE NULL END), 0) AS
+        todayCheckoutBagNum,
+
+        -- 待转运(状态为 1 暂存中)
+        COALESCE(SUM(CASE WHEN MCR.STATUS = 1 THEN MCR.WEIGHT ELSE 0 END), 0) AS toBeTransportedWeight,
+        COALESCE(COUNT(CASE WHEN MCR.STATUS = 1 THEN MCR.ID ELSE NULL END), 0) AS toBeTransportedBagNum,
+
+        -- 运输中(状态为 2 运输中)
+        COALESCE(SUM(CASE WHEN MCR.STATUS = 2 THEN MCR.WEIGHT ELSE 0 END), 0) AS inTransitWeight,
+        COALESCE(COUNT(CASE WHEN MCR.STATUS = 2 THEN MCR.ID ELSE NULL END), 0) AS inTransitBagNum,
+
+        -- 已入场(状态为 3 已接收)
+        COALESCE(SUM(CASE WHEN MCR.STATUS = 3 THEN MCR.WEIGHT ELSE 0 END), 0) AS enteredAlreadyWeight,
+        COALESCE(COUNT(CASE WHEN MCR.STATUS = 3 THEN MCR.ID ELSE NULL END), 0) AS enteredAlreadyBagNum,
+
+        -- 待处置(状态为 4 待处置)
+        COALESCE(SUM(CASE WHEN MCR.STATUS = 4 THEN MCR.WEIGHT ELSE 0 END), 0) AS toBeDisposedOfWeight,
+        COALESCE(COUNT(CASE WHEN MCR.STATUS = 4 THEN MCR.ID ELSE NULL END), 0) AS toBeDisposedOfBagNum,
+
+        -- 已处置(状态为 5 已处置)
+        COALESCE(SUM(CASE WHEN MCR.STATUS = 5 THEN MCR.WEIGHT ELSE 0 END), 0) AS disposedWeight,
+        COALESCE(COUNT(CASE WHEN MCR.STATUS = 5 THEN MCR.ID ELSE NULL END), 0) AS disposedBagNum
+        FROM
+        MW_COLLECT_RECORD MCR LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MCR.DEPARTMENT_ID
+        <where>
+            MCR.DEL_FLAG = 0
+            <if test="treeCode != null and treeCode != ''">
+                AND SD.TREE_CODE LIKE CONCAT(#{treeCode},'%')
+            </if>
+        </where>
+    </select>
 
 </mapper>
diff --git a/medicalWaste-system/src/main/resources/mapper/system/SysRoleMapper.xml b/medicalWaste-system/src/main/resources/mapper/system/SysRoleMapper.xml
index 98006a7..7c8fbf2 100644
--- a/medicalWaste-system/src/main/resources/mapper/system/SysRoleMapper.xml
+++ b/medicalWaste-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -27,7 +27,8 @@
 						r.del_flag,
 						r.create_time,
 						r.remark,
-						r.manage_role_id_str
+						r.manage_role_id_str,
+						r.applet_flag
         from sys_role r
 	        left join sys_user_role ur on ur.role_id = r.role_id
 	        left join sys_user u on u.user_id = ur.user_id
@@ -118,6 +119,7 @@
 		SYS_ROLE r2 ON INSTR(r.MANAGE_ROLE_ID_STR, TO_CHAR(r2.ROLE_ID)) > 0
 		LEFT JOIN SYS_USER u ON r.CREATE_BY = u.USER_ID
 		<where>
+			r.DEL_FLAG =0 AND r.APPLET_FLAG = 0
 			<if test="keyword != null and keyword != ''">
 				AND r.ROLE_NAME LIKE CONCAT('%', #{keyword}, '%')
 			</if>

--
Gitblit v1.7.1