From 270f724b990f5ee26b0238ceb3f89095552611fc Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 16 十二月 2024 19:54:15 +0800
Subject: [PATCH] 小型微波设备管理接口

---
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDepartmentServiceImpl.java           |   52 +-
 medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwMicroEquipmentRecordDTO.java            |   30 +
 medicalWaste-system/src/main/resources/mapper/system/SysDepartmentMapper.xml                             |    3 
 medicalWaste-system/src/main/java/com/sinata/system/service/MwMicroEquipmentService.java                 |    9 
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwCollectRecordServiceImpl.java         |   26 -
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysUserServiceImpl.java                 |   11 
 medicalWaste-system/src/main/resources/mapper/system/MwMicroEquipmentRecordMapper.xml                    |   86 +++++
 medicalWaste-system/src/main/java/com/sinata/system/mapper/MwMicroEquipmentMapper.java                   |    2 
 medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwMicroEquipmentRecordController.java |   80 ++++
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentStaticsVO.java             |   21 +
 medicalWaste-system/src/main/java/com/sinata/system/enums/MicroEquipmentStatusEnum.java                  |   24 +
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentServiceImpl.java        |   51 +-
 medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentStaticsQuery.java       |   37 ++
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwStagingRoomServiceImpl.java           |   62 --
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentStaticsTitleVO.java        |   18 +
 medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java                                 |   64 +++
 medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwMicroEquipmentController.java       |   14 
 medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentRecordQuery.java        |   14 
 medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentQuery.java              |    3 
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java  |  237 ++++++++++++-
 medicalWaste-system/src/main/java/com/sinata/system/mapper/MwMicroEquipmentRecordMapper.java             |   36 ++
 medicalWaste-system/src/main/resources/mapper/system/MwMicroEquipmentMapper.xml                          |    3 
 medicalWaste-system/src/main/java/com/sinata/system/service/SysDepartmentService.java                    |    8 
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentRecordVO.java              |   31 +
 medicalWaste-system/src/main/java/com/sinata/system/mapper/SysDepartmentMapper.java                      |    2 
 medicalWaste-system/src/main/java/com/sinata/system/service/MwMicroEquipmentRecordService.java           |   56 +++
 medicalWaste-system/src/main/java/com/sinata/system/domain/MwMicroEquipmentRecord.java                   |    5 
 27 files changed, 843 insertions(+), 142 deletions(-)

diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwMicroEquipmentController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwMicroEquipmentController.java
index a6f2a8e..361c185 100644
--- a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwMicroEquipmentController.java
+++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwMicroEquipmentController.java
@@ -14,6 +14,7 @@
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.DeleteMapping;
+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;
@@ -21,6 +22,7 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * <p>
@@ -100,5 +102,15 @@
     public R<PageDTO<MwMedicalWasteBoxVO>> storedMedicalWastePage(@Valid @RequestBody StorageRecordQuery query) {
         return R.ok(mwMicroEquipmentService.storedMedicalWastePage(query));
     }
- 
+
+    /**
+     * 微型设备列表
+     *
+     * @return
+     */
+    @GetMapping("/list")
+    @ApiOperation("微型设备列表")
+    public R<List<MwMicroEquipmentVO>> getList() {
+        return R.ok(mwMicroEquipmentService.getList());
+    }
 }
diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwMicroEquipmentRecordController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwMicroEquipmentRecordController.java
index 2cb7734..c7cbbfa 100644
--- a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwMicroEquipmentRecordController.java
+++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwMicroEquipmentRecordController.java
@@ -2,19 +2,26 @@
 
 import com.sinata.common.core.domain.R;
 import com.sinata.common.entity.PageDTO;
+import com.sinata.system.domain.dto.MwMicroEquipmentRecordDTO;
 import com.sinata.system.domain.query.MwMicroEquipmentRecordQuery;
+import com.sinata.system.domain.query.MwMicroEquipmentStaticsQuery;
 import com.sinata.system.domain.vo.MwMicroEquipmentRecordVO;
+import com.sinata.system.domain.vo.MwMicroEquipmentStaticsTitleVO;
 import com.sinata.system.service.MwMicroEquipmentRecordService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
 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 javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
 
 /**
  * <p>
@@ -32,9 +39,82 @@
 public class MwMicroEquipmentRecordController {
     private final MwMicroEquipmentRecordService mwMicroEquipmentRecordService;
 
+    /**
+     * 设备使用记录分页列表
+     *
+     * @param query
+     * @return
+     */
     @PostMapping("/page")
     @ApiOperation("设备使用记录分页列表")
     public R<PageDTO<MwMicroEquipmentRecordVO>> pageList(@Valid @RequestBody MwMicroEquipmentRecordQuery query) {
         return R.ok(mwMicroEquipmentRecordService.pageList(query));
     }
+
+    /**
+     * 导出设备使用记录
+     *
+     * @param query
+     */
+    @PostMapping("/export")
+    @ApiOperation("导出设备使用记录")
+    public void export(@RequestBody MwMicroEquipmentRecordQuery query, HttpServletResponse response) {
+        try {
+            mwMicroEquipmentRecordService.export(query, response);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 新增使用记录
+     *
+     * @param dto
+     * @return
+     */
+    @PostMapping("/add")
+    @ApiOperation("新增使用记录")
+    public R<?> add(@Valid @RequestBody MwMicroEquipmentRecordDTO dto) {
+        mwMicroEquipmentRecordService.add(dto);
+        return R.ok();
+    }
+
+    /**
+     * 处置分析表头
+     *
+     * @return
+     */
+    @GetMapping("/statics/title")
+    @ApiOperation("处置分析表头")
+    public R<List<MwMicroEquipmentStaticsTitleVO>> staticsTitle() {
+        return R.ok(mwMicroEquipmentRecordService.staticsTitle());
+    }
+
+    /**
+     * 处置分析数据
+     *
+     * @param query
+     * @return
+     */
+    @PostMapping("/statics/data")
+    @ApiOperation("处置分析数据")
+    public R<List<List<String>>> staticsData(@Valid @RequestBody MwMicroEquipmentStaticsQuery query) {
+        return R.ok(mwMicroEquipmentRecordService.getStaticsData(query));
+    }
+
+    /**
+     * 处置分析导出
+     *
+     * @param query
+     * @param response
+     */
+    @PostMapping("/statics/export")
+    @ApiOperation("处置分析导出")
+    public void export(@Valid @RequestBody MwMicroEquipmentStaticsQuery query, HttpServletResponse response) {
+        try {
+            mwMicroEquipmentRecordService.staticsExport(query, response);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }
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 916ca79..84c3047 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
@@ -1,5 +1,7 @@
 package com.sinata.common.utils;
 
+import org.apache.commons.lang3.time.DateFormatUtils;
+
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -8,8 +10,10 @@
 import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
-import org.apache.commons.lang3.time.DateFormatUtils;
+import java.util.List;
 
 /**
  * 时间工具类
@@ -188,4 +192,62 @@
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+    /**
+     * 获取两个时间节点之间的月份列表
+     *
+     * @param minDate
+     * @param maxDate
+     * @param type    1 = 日 2 = 月 3 = 年
+     * @return
+     */
+    public static List<String> getDayBetween(Date minDate, Date maxDate, Integer type) {
+        List<String> result = new ArrayList<String>();
+        if (type == 3) {//年
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy");//格式化为年
+
+            Calendar min = Calendar.getInstance();
+            Calendar max = Calendar.getInstance();
+            min.setTime(minDate);
+            max.setTime(maxDate);
+
+            Calendar curr = min;
+            max.add(Calendar.YEAR, 1);
+            while (curr.before(max)) {
+                result.add(sdf.format(curr.getTime()));
+                curr.add(Calendar.YEAR, 1);
+            }
+        } else if (type == 2) {//月
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月
+
+            Calendar min = Calendar.getInstance();
+            Calendar max = Calendar.getInstance();
+            min.setTime(minDate);
+            max.setTime(maxDate);
+
+            Calendar curr = min;
+            max.add(Calendar.MONTH, 1);
+            while (curr.before(max)) {
+                result.add(sdf.format(curr.getTime()));
+                curr.add(Calendar.MONTH, 1);
+            }
+
+        } else {//日
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化为年月日
+
+            Calendar min = Calendar.getInstance();
+            Calendar max = Calendar.getInstance();
+            min.setTime(minDate);
+            max.setTime(maxDate);
+            Calendar curr = min;
+            max.add(Calendar.DATE, 1);
+            while (curr.before(max)) {
+                result.add(sdf.format(curr.getTime()));
+                curr.add(Calendar.DATE, 1);
+            }
+
+        }
+        return result;
+    }
+
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/MwMicroEquipmentRecord.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/MwMicroEquipmentRecord.java
index 34d6746..181019e 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/domain/MwMicroEquipmentRecord.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/MwMicroEquipmentRecord.java
@@ -11,6 +11,7 @@
 import lombok.Setter;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * <p>
@@ -56,5 +57,9 @@
     @TableField("REMARK")
     private String remark;
 
+    @ApiModelProperty("使用时间")
+    @TableField("USE_TIME")
+    private Date useTime;
+
 
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwMicroEquipmentRecordDTO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwMicroEquipmentRecordDTO.java
new file mode 100644
index 0000000..1e0cbe1
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwMicroEquipmentRecordDTO.java
@@ -0,0 +1,30 @@
+package com.sinata.system.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @author mitao
+ * @date 2024/12/16
+ */
+@Data
+@ApiModel("小型微波设备使用记录数据传输对象")
+public class MwMicroEquipmentRecordDTO {
+
+    @ApiModelProperty("转运箱id")
+    @NotEmpty(message = "转运箱id不能为空")
+    private List<Long> ids;
+
+    @ApiModelProperty("设备id")
+    @NotNull(message = "设备id不能为空")
+    private Long equipmentId;
+
+    @ApiModelProperty("备注")
+    private String remark;
+}
+
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentQuery.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentQuery.java
index 46d06a5..d36fe45 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentQuery.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentQuery.java
@@ -23,6 +23,9 @@
     @ApiModelProperty("设备名称")
     private String equipmentName;
 
+    @ApiModelProperty("设备编号")
+    private String equipmentNumber;
+
     @ApiModelProperty("设备状态 1:正常 2:丢失 3:损坏")
     private Integer status;
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentRecordQuery.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentRecordQuery.java
index 1846fc0..3240a08 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentRecordQuery.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentRecordQuery.java
@@ -1,8 +1,12 @@
 package com.sinata.system.domain.query;
 
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * @author mitao
@@ -12,5 +16,15 @@
 @EqualsAndHashCode(callSuper = true)
 @ApiModel("设备使用记录查询数据传输对象")
 public class MwMicroEquipmentRecordQuery extends MwMicroEquipmentQuery {
+    
     private static final long serialVersionUID = 9039697918354490906L;
+
+    @ApiModelProperty("使用时间-开始")
+    private Date useTimeStart;
+
+    @ApiModelProperty("使用时间-结束")
+    private Date useTimeEnd;
+
+    @ApiModelProperty("设备使用记录id列表")
+    private List<Long> ids;
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentStaticsQuery.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentStaticsQuery.java
new file mode 100644
index 0000000..86d6af4
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwMicroEquipmentStaticsQuery.java
@@ -0,0 +1,37 @@
+package com.sinata.system.domain.query;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * @author mitao
+ * @date 2024/12/16
+ */
+@Data
+@ApiModel("处置分析查询数据传输对象")
+public class MwMicroEquipmentStaticsQuery {
+
+    @ApiModelProperty("医院id")
+    @NotNull(message = "医院id不能为空")
+    private Long departmentId;
+
+    @ApiModelProperty("设备id")
+    @NotNull(message = "设备id不能为空")
+    private Long equipmentId;
+
+    @ApiModelProperty("统计方式(1=日期统计,2=月度统计,3=年度统计)")
+    @NotNull(message = "统计方式不能为空")
+    private Integer dateType;
+
+    @ApiModelProperty("开始时间")
+    @NotNull(message = "开始时间不能为空")
+    private Date startTime;
+
+    @ApiModelProperty("结束时间")
+    @NotNull(message = "结束时间不能为空")
+    private Date endTime;
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentRecordVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentRecordVO.java
index 197fe1f..480a3d4 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentRecordVO.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentRecordVO.java
@@ -1,7 +1,11 @@
 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.Date;
 
 /**
  * @author mitao
@@ -10,4 +14,31 @@
 @Data
 @ApiModel("设备使用记录视图对象")
 public class MwMicroEquipmentRecordVO {
+
+    @ApiModelProperty("设备使用记录id")
+    private Long id;
+
+    @ApiModelProperty("医院名称")
+    private String hospitalName;
+
+    @ApiModelProperty("设备名称")
+    private String equipmentName;
+
+    @ApiModelProperty("使用时间")
+    private Date useTime;
+
+    @ApiModelProperty("处理箱数")
+    private Integer boxNum;
+
+    @ApiModelProperty("处理袋数")
+    private Integer bagNum;
+
+    @ApiModelProperty("处理重量")
+    private BigDecimal totalWeight;
+
+    @ApiModelProperty("操作人员")
+    private String nickName;
+
+    @ApiModelProperty("备注")
+    private String remark;
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentStaticsTitleVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentStaticsTitleVO.java
new file mode 100644
index 0000000..f6eae68
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentStaticsTitleVO.java
@@ -0,0 +1,18 @@
+package com.sinata.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mitao
+ * @date 2024/12/16
+ */
+@Data
+@ApiModel("处置分析视图对象")
+public class MwMicroEquipmentStaticsTitleVO {
+    private String title;
+    private String dataIndex = "name";
+    private List<MwMicroEquipmentStaticsTitleVO> children;
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentStaticsVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentStaticsVO.java
new file mode 100644
index 0000000..8784934
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMicroEquipmentStaticsVO.java
@@ -0,0 +1,21 @@
+package com.sinata.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author mitao
+ * @date 2024/12/16
+ */
+@Data
+@ApiModel("处置分析视图对象")
+public class MwMicroEquipmentStaticsVO {
+    private Integer bagNum;
+    private BigDecimal totalWeight;
+    private BigDecimal weight;
+    private Date useTime;
+    private Long wasteType;
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/enums/MicroEquipmentStatusEnum.java b/medicalWaste-system/src/main/java/com/sinata/system/enums/MicroEquipmentStatusEnum.java
new file mode 100644
index 0000000..b6587b8
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/enums/MicroEquipmentStatusEnum.java
@@ -0,0 +1,24 @@
+package com.sinata.system.enums;
+
+import lombok.Getter;
+import lombok.AllArgsConstructor;
+
+@Getter
+@AllArgsConstructor
+public enum MicroEquipmentStatusEnum {
+    NORMAL(1, "正常"),
+    LOST(2, "丢失"),
+    DAMAGE(3, "损坏");
+
+    private final Integer code;
+    private final String desc;
+
+    public static MicroEquipmentStatusEnum getEnumByCode(Integer code) {
+        for (MicroEquipmentStatusEnum e : MicroEquipmentStatusEnum.values()) {
+            if (e.code.equals(code)) {
+                return e;
+            }
+        }
+        return null;
+    }
+} 
\ No newline at end of file
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwMicroEquipmentMapper.java b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwMicroEquipmentMapper.java
index 70097ea..dfa06ab 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwMicroEquipmentMapper.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwMicroEquipmentMapper.java
@@ -28,7 +28,7 @@
      * @param treeCode
      * @return
      */
-    Page<MwMicroEquipmentVO> pageList(Page<MwMicroEquipmentVO> page, @Param("equipmentName") String equipmentName, @Param("status") Integer status, @Param("treeCode") String treeCode);
+    Page<MwMicroEquipmentVO> pageList(Page<MwMicroEquipmentVO> page, @Param("equipmentName") String equipmentName, @Param("status") Integer status, @Param("equipmentNumber") String equipmentNumber, @Param("treeCode") String treeCode);
 
     /**
      * 待处理的医废列表
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwMicroEquipmentRecordMapper.java b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwMicroEquipmentRecordMapper.java
index ff8b85e..f49059f 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwMicroEquipmentRecordMapper.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwMicroEquipmentRecordMapper.java
@@ -1,8 +1,16 @@
 package com.sinata.system.mapper;
 
-import com.sinata.system.domain.MwMicroEquipmentRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sinata.system.domain.MwMicroEquipmentRecord;
+import com.sinata.system.domain.query.MwMicroEquipmentRecordQuery;
+import com.sinata.system.domain.query.MwMicroEquipmentStaticsQuery;
+import com.sinata.system.domain.vo.MwMicroEquipmentRecordVO;
+import com.sinata.system.domain.vo.MwMicroEquipmentStaticsVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -14,5 +22,31 @@
  */
 @Mapper
 public interface MwMicroEquipmentRecordMapper extends BaseMapper<MwMicroEquipmentRecord> {
+    /**
+     * 设备使用记录分页列表
+     *
+     * @param page
+     * @param query
+     * @param treeCode
+     * @return
+     */
+    Page<MwMicroEquipmentRecordVO> pageList(Page<MwMicroEquipmentRecordVO> page, @Param("query") MwMicroEquipmentRecordQuery query, @Param("treeCode") String treeCode);
 
+    /**
+     * 设备使用记录列表
+     *
+     * @param query
+     * @param treeCode
+     * @return
+     */
+    List<MwMicroEquipmentRecordVO> getList(@Param("query") MwMicroEquipmentRecordQuery query, @Param("treeCode") String treeCode);
+
+    /**
+     * 查询统计数据
+     *
+     * @param query
+     * @param treeCode
+     * @return
+     */
+    List<MwMicroEquipmentStaticsVO> getStaticsData(@Param("query") MwMicroEquipmentStaticsQuery query, @Param("treeCode") String treeCode);
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/mapper/SysDepartmentMapper.java b/medicalWaste-system/src/main/java/com/sinata/system/mapper/SysDepartmentMapper.java
index 56bdac4..047336f 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/mapper/SysDepartmentMapper.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/mapper/SysDepartmentMapper.java
@@ -37,7 +37,7 @@
      * @param treeCode
      * @return
      */
-    Page<MedicalInstitutionVO> pageMedicalList(Page<MedicalInstitutionVO> medicalInstitutionVOPage, @Param("departmentId") Long departmentId, @Param("departmentName") String departmentName, @Param("contactPerson") String contactPerson, @Param("contactPhone") String contactPhone, @Param("treeCode") String treeCode);
+    Page<MedicalInstitutionVO> pageMedicalList(Page<MedicalInstitutionVO> medicalInstitutionVOPage, @Param("departmentName") String departmentName, @Param("contactPerson") String contactPerson, @Param("contactPhone") String contactPhone, @Param("treeCode") String treeCode);
 
     /**
      * 查询医疗机构详情
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/MwMicroEquipmentRecordService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/MwMicroEquipmentRecordService.java
index a720343..2a6aa4e 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/MwMicroEquipmentRecordService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/MwMicroEquipmentRecordService.java
@@ -1,10 +1,17 @@
 package com.sinata.system.service;
 
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.sinata.common.entity.PageDTO;
 import com.sinata.system.domain.MwMicroEquipmentRecord;
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.sinata.system.domain.dto.MwMicroEquipmentRecordDTO;
 import com.sinata.system.domain.query.MwMicroEquipmentRecordQuery;
+import com.sinata.system.domain.query.MwMicroEquipmentStaticsQuery;
 import com.sinata.system.domain.vo.MwMicroEquipmentRecordVO;
+import com.sinata.system.domain.vo.MwMicroEquipmentStaticsTitleVO;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
 
 /**
  * <p>
@@ -15,6 +22,51 @@
  * @since 2024-12-02
  */
 public interface MwMicroEquipmentRecordService extends IService<MwMicroEquipmentRecord> {
-
+    /**
+     * 设备使用记录分页列表
+     *
+     * @param query
+     * @return
+     */
     PageDTO<MwMicroEquipmentRecordVO> pageList(MwMicroEquipmentRecordQuery query);
+
+    /**
+     * 导出设备使用记录
+     *
+     * @param query
+     * @param response
+     */
+    void export(MwMicroEquipmentRecordQuery query, HttpServletResponse response) throws IOException;
+
+    /**
+     * 新增使用记录
+     *
+     * @param dto
+     * @return
+     */
+    void add(MwMicroEquipmentRecordDTO dto);
+
+    /**
+     * 处置分析表头
+     *
+     * @param query
+     * @return
+     */
+    List<MwMicroEquipmentStaticsTitleVO> staticsTitle();
+
+    /**
+     * 处置分析数据
+     *
+     * @param query
+     * @return
+     */
+    List<List<String>> getStaticsData(MwMicroEquipmentStaticsQuery query);
+
+    /**
+     * 处置分析导出
+     *
+     * @param query
+     * @param response
+     */
+    void staticsExport(MwMicroEquipmentStaticsQuery query, HttpServletResponse response) throws IOException;
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/MwMicroEquipmentService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/MwMicroEquipmentService.java
index 10f66d4..c65f2c4 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/MwMicroEquipmentService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/MwMicroEquipmentService.java
@@ -9,6 +9,8 @@
 import com.sinata.system.domain.vo.MwMedicalWasteBoxVO;
 import com.sinata.system.domain.vo.MwMicroEquipmentVO;
 
+import java.util.List;
+
 /**
  * <p>
  * 小型微波设备表 服务类
@@ -49,4 +51,11 @@
      * @return
      */
     PageDTO<MwMedicalWasteBoxVO> storedMedicalWastePage(StorageRecordQuery query);
+
+    /**
+     * 微型设备列表
+     *
+     * @return
+     */
+    List<MwMicroEquipmentVO> getList();
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/SysDepartmentService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/SysDepartmentService.java
index fdab3b1..296524b 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/SysDepartmentService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/SysDepartmentService.java
@@ -214,4 +214,12 @@
      * @param id
      */
     void deleteRegulatoryUnit(Long id);
+
+    /**
+     * 根据部门id获取树编码,如果为空则获取当前登录用户所在区域树编码
+     *
+     * @param departmentId
+     * @return
+     */
+    String getTreeCodeByDepartmentId(Long departmentId);
 }
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 fd187a1..3f5fe6f 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
@@ -4,8 +4,8 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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.MwCollectRecord;
-import com.sinata.system.domain.SysDepartment;
 import com.sinata.system.domain.dto.MwCollectRecordDTO;
 import com.sinata.system.domain.query.MwCollectRecordQuery;
 import com.sinata.system.domain.vo.MedicalWasteProcessVO;
@@ -43,15 +43,9 @@
      */
     @Override
     public PageDTO<MwCollectRecordVO> pageList(MwCollectRecordQuery query) {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId())) {
-            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return PageDTO.empty(0L, 0L);
-            }
-            treeCode = myDepartment.getTreeCode();
-        } else {
-            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return PageDTO.empty(0L, 0L);
         }
         Page<MwCollectRecordVO> page = baseMapper.pageList(new Page<>(query.getPageCurr(), query.getPageSize()), query, treeCode);
         return PageDTO.of(page);
@@ -95,15 +89,9 @@
 
     @Override
     public void export(MwCollectRecordQuery query, HttpServletResponse response) throws IOException {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId())) {
-            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return;
-            }
-            treeCode = myDepartment.getTreeCode();
-        } else {
-            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return;
         }
         List<MwCollectRecordVO> vo = baseMapper.getExportList(query, treeCode);
         // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java
index 652312f..a5f1a3d 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java
@@ -1,18 +1,46 @@
 package com.sinata.system.service.impl;
 
-import com.sinata.common.entity.PageDTO;
-import com.sinata.system.domain.MwMicroEquipmentRecord;
-import com.sinata.system.domain.SysDepartment;
-import com.sinata.system.domain.query.MwMicroEquipmentRecordQuery;
-import com.sinata.system.domain.vo.MwMicroEquipmentRecordVO;
-import com.sinata.system.mapper.MwMicroEquipmentRecordMapper;
-import com.sinata.system.service.MwMicroEquipmentRecordService;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import com.sinata.common.core.domain.entity.SysDictData;
+import com.sinata.common.entity.PageDTO;
+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.system.domain.MwCollectRecord;
+import com.sinata.system.domain.MwMicroEquipmentRecord;
+import com.sinata.system.domain.MwMicroEquipmentRecordItem;
+import com.sinata.system.domain.dto.MwMicroEquipmentRecordDTO;
+import com.sinata.system.domain.query.MwMicroEquipmentRecordQuery;
+import com.sinata.system.domain.query.MwMicroEquipmentStaticsQuery;
+import com.sinata.system.domain.vo.MwCollectRecordVO;
+import com.sinata.system.domain.vo.MwMicroEquipmentRecordVO;
+import com.sinata.system.domain.vo.MwMicroEquipmentStaticsTitleVO;
+import com.sinata.system.domain.vo.MwMicroEquipmentStaticsVO;
+import com.sinata.system.enums.MedicalWasteStatusEnum;
+import com.sinata.system.mapper.MwMicroEquipmentRecordMapper;
+import com.sinata.system.service.ISysDictDataService;
+import com.sinata.system.service.MwCollectRecordService;
+import com.sinata.system.service.MwMicroEquipmentRecordItemService;
+import com.sinata.system.service.MwMicroEquipmentRecordService;
 import com.sinata.system.service.SysDepartmentService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Objects;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -26,19 +54,192 @@
 @RequiredArgsConstructor
 public class MwMicroEquipmentRecordServiceImpl extends ServiceImpl<MwMicroEquipmentRecordMapper, MwMicroEquipmentRecord> implements MwMicroEquipmentRecordService {
     private final SysDepartmentService sysDepartmentService;
+    private final MwCollectRecordService mwCollectRecordService;
+    private final MwMicroEquipmentRecordItemService mwMicroEquipmentRecordItemService;
+    private final ISysDictDataService sysDictDataService;
 
+    /**
+     * 设备使用记录分页列表
+     *
+     * @param query
+     * @return
+     */
     @Override
     public PageDTO<MwMicroEquipmentRecordVO> pageList(MwMicroEquipmentRecordQuery query) {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId())) {
-            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return PageDTO.empty(0L, 0L);
-            }
-            treeCode = myDepartment.getTreeCode();
-        } else {
-            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return PageDTO.empty(0L, 0L);
         }
-        return null;
+        return PageDTO.of(baseMapper.pageList(new Page<>(query.getPageCurr(), query.getPageSize()), query, treeCode));
+    }
+
+    /**
+     * 导出设备使用记录
+     *
+     * @param query
+     * @param response
+     */
+    @Override
+    public void export(MwMicroEquipmentRecordQuery query, HttpServletResponse response) throws IOException {
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return;
+        }
+        List<MwMicroEquipmentRecordVO> list = baseMapper.getList(query, treeCode);
+        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
+        String fileName = URLEncoder.encode("微波设备使用记录", "UTF-8").replaceAll("\\+", "%20");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+        EasyExcel.write(response.getOutputStream(), MwCollectRecordVO.class).sheet("微波设备使用记录").doWrite(list);
+    }
+
+    /**
+     * 新增使用记录
+     *
+     * @param dto
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void add(MwMicroEquipmentRecordDTO dto) {
+        List<MwCollectRecord> collectRecordList = mwCollectRecordService.lambdaQuery().in(MwCollectRecord::getBoxId, dto.getIds())
+                .eq(MwCollectRecord::getStatus, MedicalWasteStatusEnum.TEMPORARILY_STORED.getCode()).list();
+        if (CollUtils.isNotEmpty(collectRecordList)) {
+            MwMicroEquipmentRecord record = new MwMicroEquipmentRecord();
+            record.setEquipmentId(dto.getEquipmentId());
+            record.setOperatorId(SecurityUtils.getUserId());
+            record.setRemark(dto.getRemark());
+            record.setUseTime(new Date());
+            record.setBoxNum(dto.getIds().size());
+            record.setBagNum(collectRecordList.size());
+            record.setTotalWeight(collectRecordList.stream().map(MwCollectRecord::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
+            save(record);
+            List<MwMicroEquipmentRecordItem> itemList = new ArrayList<>();
+            collectRecordList.forEach(collectRecord -> {
+                //封装设备使用记录项
+                MwMicroEquipmentRecordItem item = new MwMicroEquipmentRecordItem();
+                item.setEquipmentRecordId(record.getId());
+                item.setCollectRecordId(collectRecord.getId());
+                itemList.add(item);
+                //修改状态
+                collectRecord.setStatus(MedicalWasteStatusEnum.DISPOSED.getCode());
+            });
+            //更新状态为已处置
+            mwCollectRecordService.updateBatchById(collectRecordList);
+            //批量新增设备使用记录项
+            mwMicroEquipmentRecordItemService.saveBatch(itemList);
+        }
+    }
+
+    /**
+     * 处置分析表头
+     *
+     * @return
+     */
+    @Override
+    public List<MwMicroEquipmentStaticsTitleVO> staticsTitle() {
+        List<SysDictData> medicalWasteTypeList = sysDictDataService.lambdaQuery().eq(SysDictData::getDictType, "medical_waste_type").list();
+
+        List<MwMicroEquipmentStaticsTitleVO> titles = new ArrayList<>();
+        medicalWasteTypeList.forEach(item -> {
+            MwMicroEquipmentStaticsTitleVO vo = new MwMicroEquipmentStaticsTitleVO();
+            vo.setTitle(item.getDictLabel());
+            MwMicroEquipmentStaticsTitleVO child1 = new MwMicroEquipmentStaticsTitleVO();
+            child1.setTitle("总重量(KG)");
+            MwMicroEquipmentStaticsTitleVO child2 = new MwMicroEquipmentStaticsTitleVO();
+            child2.setTitle("总数量");
+            vo.setChildren(Lists.newArrayList(child1, child2));
+            titles.add(vo);
+        });
+
+        MwMicroEquipmentStaticsTitleVO total = new MwMicroEquipmentStaticsTitleVO();
+        total.setTitle("小计");
+        MwMicroEquipmentStaticsTitleVO child1 = new MwMicroEquipmentStaticsTitleVO();
+        child1.setTitle("总重量(KG)");
+        MwMicroEquipmentStaticsTitleVO child2 = new MwMicroEquipmentStaticsTitleVO();
+        child2.setTitle("总数量");
+        total.setChildren(Lists.newArrayList(child1, child2));
+        titles.add(total);
+        return titles;
+    }
+
+    /**
+     * 处置分析数据
+     *
+     * @param query
+     * @return
+     */
+    @Override
+    public List<List<String>> getStaticsData(MwMicroEquipmentStaticsQuery query) {
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        List<SysDictData> medicalWasteTypeList = sysDictDataService.lambdaQuery().eq(SysDictData::getDictType, "medical_waste_type").list();
+        List<MwMicroEquipmentStaticsVO> staticsData = baseMapper.getStaticsData(query, treeCode);
+        SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD_HH_MM_SS);
+        switch (query.getDateType()) {
+            case 1:
+                sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD);
+            case 2:
+                sdf = new SimpleDateFormat(DateUtils.YYYY_MM);
+            case 3:
+                sdf = new SimpleDateFormat(DateUtils.YYYY);
+        }
+        List<String> dateList = DateUtils.getDayBetween(query.getStartTime(), query.getEndTime(), query.getDateType());
+        List<List<String>> result = new ArrayList<>();
+        if (CollUtils.isNotEmpty(staticsData)) {
+            for (String date : dateList) {
+                List<String> list = new ArrayList<>();
+                list.add(date);
+                SimpleDateFormat finalSdf = sdf;
+                for (SysDictData sysDictData : medicalWasteTypeList) {
+                    BigDecimal weight = staticsData.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode())
+                            && finalSdf.format(e.getUseTime()).equals(date)
+                    ).map(MwMicroEquipmentStaticsVO::getWeight).reduce(BigDecimal::add).orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP);
+                    long count = staticsData.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode())
+                            && finalSdf.format(e.getUseTime()).equals(date)).count();
+                    list.add(weight.toString());
+                    list.add(String.valueOf(count));
+                }
+                staticsData.stream().filter(e -> finalSdf.format(e.getUseTime()).equals(date)).findFirst().ifPresent(item -> {
+                    list.add(item.getTotalWeight().toString());
+                    list.add(String.valueOf(item.getBagNum()));
+                });
+                result.add(list);
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public void staticsExport(MwMicroEquipmentStaticsQuery query, HttpServletResponse response) throws IOException {
+
+        List<List<String>> head = head();
+        System.out.println(JSONObject.toJSONString(head));
+        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
+        String fileName = URLEncoder.encode("处置分析报表", "UTF-8").replaceAll("\\+", "%20");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+        // 这里需要设置不关闭流
+        EasyExcel.write(response.getOutputStream())
+                .head(head)
+                .autoCloseStream(Boolean.TRUE)
+                .sheet("处置分析报表")
+                .doWrite(getStaticsData(query));
+    }
+
+    private List<List<String>> head() {
+        List<SysDictData> medicalWasteTypeList = sysDictDataService.lambdaQuery().eq(SysDictData::getDictType, "medical_waste_type").list();
+        List<List<String>> headTitles = Lists.newArrayList();
+        headTitles.add(Lists.newArrayList("日期"));
+        medicalWasteTypeList.forEach(item -> {
+            headTitles.add(Lists.newArrayList(item.getDictLabel(), "总重量(KG)"));
+            headTitles.add(Lists.newArrayList(item.getDictLabel(), "总数量"));
+        });
+        headTitles.add(Lists.newArrayList("小计", "总重量(KG)"));
+        headTitles.add(Lists.newArrayList("小计", "总数量"));
+        return headTitles;
     }
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentServiceImpl.java
index e0b13db..d9f095d 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentServiceImpl.java
@@ -3,7 +3,10 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sinata.common.entity.PageDTO;
+import com.sinata.common.exception.ServiceException;
 import com.sinata.common.utils.BeanUtils;
+import com.sinata.common.utils.CollUtils;
+import com.sinata.common.utils.StringUtils;
 import com.sinata.system.domain.MwMicroEquipment;
 import com.sinata.system.domain.SysDepartment;
 import com.sinata.system.domain.dto.MwMicroEquipmentDTO;
@@ -11,12 +14,15 @@
 import com.sinata.system.domain.query.StorageRecordQuery;
 import com.sinata.system.domain.vo.MwMedicalWasteBoxVO;
 import com.sinata.system.domain.vo.MwMicroEquipmentVO;
+import com.sinata.system.enums.DepartmentEnum;
+import com.sinata.system.enums.MicroEquipmentStatusEnum;
 import com.sinata.system.mapper.MwMicroEquipmentMapper;
 import com.sinata.system.service.MwMicroEquipmentService;
 import com.sinata.system.service.SysDepartmentService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -40,17 +46,11 @@
      */
     @Override
     public PageDTO<MwMicroEquipmentVO> pageList(MwMicroEquipmentQuery query) {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId())) {
-            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return PageDTO.empty(0L, 0L);
-            }
-            treeCode = myDepartment.getTreeCode();
-        } else {
-            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return PageDTO.empty(0L, 0L);
         }
-        Page<MwMicroEquipmentVO> page = baseMapper.pageList(new Page<>(query.getPageCurr(), query.getPageSize()), query.getEquipmentName(), query.getStatus(), treeCode);
+        Page<MwMicroEquipmentVO> page = baseMapper.pageList(new Page<>(query.getPageCurr(), query.getPageSize()), query.getEquipmentName(), query.getStatus(), query.getEquipmentNumber(), treeCode);
         return PageDTO.of(page);
     }
 
@@ -89,17 +89,30 @@
      */
     @Override
     public PageDTO<MwMedicalWasteBoxVO> storedMedicalWastePage(StorageRecordQuery query) {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId())) {
-            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return PageDTO.empty(0L, 0L);
-            }
-            treeCode = myDepartment.getTreeCode();
-        } else {
-            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return PageDTO.empty(0L, 0L);
         }
         Page<MwMedicalWasteBoxVO> page = baseMapper.storedMedicalWastePage(new Page<>(query.getPageCurr(), query.getPageSize()), query, treeCode);
         return PageDTO.of(page);
     }
+
+    /**
+     * 微型设备列表
+     *
+     * @return
+     */
+    @Override
+    public List<MwMicroEquipmentVO> getList() {
+        SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
+        if (Objects.nonNull(myDepartment)) {
+            if (myDepartment.getOrgType().equals(DepartmentEnum.MEDICAL_INSTITUTION.getCode())) {
+                List<MwMicroEquipment> list = this.lambdaQuery()
+                        .eq(MwMicroEquipment::getStatus, MicroEquipmentStatusEnum.NORMAL.getCode())
+                        .eq(MwMicroEquipment::getDepartmentId, myDepartment.getId()).list();
+                return BeanUtils.copyList(list, MwMicroEquipmentVO.class);
+            }
+        }
+        return CollUtils.emptyList();
+    }
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwStagingRoomServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwStagingRoomServiceImpl.java
index 9676585..38e1d62 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwStagingRoomServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwStagingRoomServiceImpl.java
@@ -6,8 +6,8 @@
 import com.sinata.common.entity.PageDTO;
 import com.sinata.common.exception.ServiceException;
 import com.sinata.common.utils.BeanUtils;
+import com.sinata.common.utils.StringUtils;
 import com.sinata.system.domain.MwStagingRoom;
-import com.sinata.system.domain.SysDepartment;
 import com.sinata.system.domain.dto.MwStagingRoomDTO;
 import com.sinata.system.domain.query.CheckoutRecordQuery;
 import com.sinata.system.domain.query.MwStagingRoomQuery;
@@ -48,15 +48,9 @@
      */
     @Override
     public PageDTO<MwStagingRoomVO> pageList(MwStagingRoomQuery query) {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId())) {
-            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return PageDTO.empty(0L, 0L);
-            }
-            treeCode = myDepartment.getTreeCode();
-        } else if (Objects.nonNull(query.getDepartmentId())) {
-            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return PageDTO.empty(0L, 0L);
         }
         Page<MwStagingRoomVO> page = baseMapper.pagelist(new Page<>(query.getPageCurr(), query.getPageSize()), treeCode);
         return PageDTO.of(page);
@@ -111,15 +105,9 @@
      */
     @Override
     public PageDTO<MwStorageRecordVO> storageRecord(StorageRecordQuery query) {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
-            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return PageDTO.empty(0L, 0L);
-            }
-            treeCode = myDepartment.getTreeCode();
-        } else if (Objects.nonNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
-            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return PageDTO.empty(0L, 0L);
         }
         Page<MwStorageRecordVO> page = baseMapper.storageRecordPage(new Page<>(query.getPageCurr(), query.getPageSize()), query, treeCode);
         return PageDTO.of(page);
@@ -133,15 +121,9 @@
      */
     @Override
     public void storageRecordExport(StorageRecordQuery query, HttpServletResponse response) throws IOException {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
-            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return;
-            }
-            treeCode = myDepartment.getTreeCode();
-        } else if (Objects.nonNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
-            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return;
         }
         List<MwStorageRecordVO> list = baseMapper.storageRecordList(query, treeCode);
         // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
@@ -161,15 +143,9 @@
      */
     @Override
     public PageDTO<MwCheckoutRecordVO> checkoutRecord(CheckoutRecordQuery query) {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
-            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return PageDTO.empty(0L, 0L);
-            }
-            treeCode = myDepartment.getTreeCode();
-        } else if (Objects.nonNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
-            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return PageDTO.empty(0L, 0L);
         }
         Page<MwCheckoutRecordVO> page = baseMapper.checkoutRecordPage(new Page<>(query.getPageCurr(), query.getPageSize()), query, treeCode);
         return PageDTO.of(page);
@@ -183,15 +159,9 @@
      */
     @Override
     public void checkoutRecordExport(CheckoutRecordQuery query, HttpServletResponse response) throws IOException {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
-            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return;
-            }
-            treeCode = myDepartment.getTreeCode();
-        } else if (Objects.nonNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
-            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return;
         }
         List<MwCheckoutRecordVO> list = baseMapper.checkoutRecordList(query, treeCode);
         // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDepartmentServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDepartmentServiceImpl.java
index ce7095b..d5eb7ec 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDepartmentServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDepartmentServiceImpl.java
@@ -363,15 +363,11 @@
      */
     @Override
     public PageDTO<MedicalInstitutionVO> pageMedicalList(DepartmentQuery query) {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId())) {
-            SysDepartment myDepartment = getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return PageDTO.empty(0L, 0L);
-            }
-            treeCode = myDepartment.getTreeCode();
+        String treeCode = getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return PageDTO.empty(0L, 0L);
         }
-        Page<MedicalInstitutionVO> page = baseMapper.pageMedicalList(new Page<>(query.getPageCurr(), query.getPageSize()), query.getDepartmentId(), query.getDepartmentName(), query.getContactPerson(), query.getContactPhone(), treeCode);
+        Page<MedicalInstitutionVO> page = baseMapper.pageMedicalList(new Page<>(query.getPageCurr(), query.getPageSize()), query.getDepartmentName(), query.getContactPerson(), query.getContactPhone(), treeCode);
         return PageDTO.of(page);
     }
 
@@ -524,13 +520,9 @@
      */
     @Override
     public PageDTO<DisposalUnitVO> pageDisposalUnitList(DepartmentQuery query) {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId())) {
-            SysDepartment myDepartment = getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return PageDTO.empty(0L, 0L);
-            }
-            treeCode = myDepartment.getTreeCode();
+        String treeCode = getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return PageDTO.empty(0L, 0L);
         }
         Page<DisposalUnitVO> page = baseMapper.pageRegulatoryUnitList(new Page<>(query.getPageCurr(), query.getPageSize()), query.getDepartmentId(), query.getDepartmentName(), query.getContactPerson(), query.getContactPhone(), treeCode);
         return PageDTO.of(page);
@@ -650,13 +642,9 @@
      */
     @Override
     public PageDTO<RegulatoryUnitVO> pageRegulatoryUnitList(DepartmentQuery query) {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId())) {
-            SysDepartment myDepartment = getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return PageDTO.empty(0L, 0L);
-            }
-            treeCode = myDepartment.getTreeCode();
+        String treeCode = getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return PageDTO.empty(0L, 0L);
         }
         Page<SysDepartment> page = this.lambdaQuery().eq(Objects.nonNull(query.getDepartmentId()), SysDepartment::getParentId, query.getDepartmentId())
                 .likeRight(StringUtils.isNotBlank(treeCode), SysDepartment::getTreeCode, treeCode)
@@ -772,4 +760,24 @@
         }
         removeById(id);
     }
+
+    /**
+     * 根据部门id获取树编码,如果为空则获取当前登录用户所在区域树编码
+     *
+     * @param departmentId
+     * @return
+     */
+    @Override
+    public String getTreeCodeByDepartmentId(Long departmentId) {
+        SysDepartment department;
+        if (Objects.isNull(departmentId)) {
+            department = getMyDepartment();
+        } else {
+            department = getById(departmentId);
+        }
+        if (Objects.nonNull(department)) {
+            return department.getTreeCode();
+        }
+        return null;
+    }
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysUserServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysUserServiceImpl.java
index a201651..c08b533 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysUserServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysUserServiceImpl.java
@@ -15,7 +15,6 @@
 import com.sinata.common.utils.StringUtils;
 import com.sinata.common.utils.bean.BeanValidators;
 import com.sinata.common.utils.spring.SpringUtils;
-import com.sinata.system.domain.SysDepartment;
 import com.sinata.system.domain.SysPost;
 import com.sinata.system.domain.SysUserPost;
 import com.sinata.system.domain.SysUserRole;
@@ -573,13 +572,9 @@
      */
     @Override
     public PageDTO<SysUserVO> pageList(SysUserQuery query) {
-        String treeCode = "";
-        if (Objects.isNull(query.getDepartmentId())) {
-            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
-            if (Objects.isNull(myDepartment)) {
-                return PageDTO.empty(0L, 0L);
-            }
-            treeCode = myDepartment.getTreeCode();
+        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        if (StringUtils.isBlank(treeCode)) {
+            return PageDTO.empty(0L, 0L);
         }
         Page<SysUserVO> page = baseMapper.pageList(new Page<>(query.getPageCurr(), query.getPageSize()), query.getDepartmentId(), query.getNickName(), query.getRoleId(), treeCode);
         return PageDTO.of(page);
diff --git a/medicalWaste-system/src/main/resources/mapper/system/MwMicroEquipmentMapper.xml b/medicalWaste-system/src/main/resources/mapper/system/MwMicroEquipmentMapper.xml
index 18761ce..bca9536 100644
--- a/medicalWaste-system/src/main/resources/mapper/system/MwMicroEquipmentMapper.xml
+++ b/medicalWaste-system/src/main/resources/mapper/system/MwMicroEquipmentMapper.xml
@@ -43,6 +43,9 @@
             <if test="equipmentName != null and equipmentName != ''">
                 AND mme.EQUIPMENT_NAME LIKE concat('%',#{equipmentName},'%')
             </if>
+            <if test="equipmentNumber != null and equipmentNumber != ''">
+                AND mme.EQUIPMENT_NUMBER LIKE concat('%',#{equipmentNumber},'%')
+            </if>
             <if test="status!= null">
                 AND mme.STATUS = #{status}
             </if>
diff --git a/medicalWaste-system/src/main/resources/mapper/system/MwMicroEquipmentRecordMapper.xml b/medicalWaste-system/src/main/resources/mapper/system/MwMicroEquipmentRecordMapper.xml
index 5798da5..e9640b6 100644
--- a/medicalWaste-system/src/main/resources/mapper/system/MwMicroEquipmentRecordMapper.xml
+++ b/medicalWaste-system/src/main/resources/mapper/system/MwMicroEquipmentRecordMapper.xml
@@ -23,5 +23,91 @@
         UPDATE_TIME,
         ID, EQUIPMENT_ID, REMARK
     </sql>
+    <select id="pageList" resultType="com.sinata.system.domain.vo.MwMicroEquipmentRecordVO">
+        SELECT mmer.ID,
+        mmer.EQUIPMENT_ID,
+        mmer.REMARK,
+        mmer.BOX_NUM,
+        mmer.BAG_NUM,
+        mmer.TOTAL_WEIGHT,
+        mmer.USE_TIME,
+        mme.EQUIPMENT_NAME,
+        sd.DEPARTMENT_NAME AS hospitalName,
+        su.NICK_NAME
+        FROM MW_MICRO_EQUIPMENT_RECORD mmer
+        LEFT JOIN MW_MICRO_EQUIPMENT mme ON mmer.EQUIPMENT_ID = mme.ID
+        LEFT JOIN SYS_DEPARTMENT sd ON mme.DEPARTMENT_ID = sd.ID
+        LEFT JOIN SYS_USER su ON mmer.OPERATOR_ID = su.USER_ID
+        <where>
+            <if test="treeCode !=null and treeCode != ''">
+                AND sd.TREE_CODE like concat(#{treeCode},'%')
+            </if>
+            <if test="query.equipmentName != null and query.equipmentName !=''">
+                AND mme.EQUIPMENT_NAME like concat('%',#{query.equipmentName},'%')
+            </if>
+            <if test="query.equipmentNumber != null and query.equipmentNumber != ''">
+                AND mme.EQUIPMENT_NUMBER like concat('%',#{query.equipmentNumber},'%')
+            </if>
+            <if test="query.useTimeStart != null and query.useTimeEnd != null">
+                AND mmer.USE_TIME BETWEEN #{query.useTimeStart} AND #{query.useTimeEnd}
+            </if>
+        </where>
+    </select>
+    <select id="getList" resultType="com.sinata.system.domain.vo.MwMicroEquipmentRecordVO">
+        SELECT mmer.ID,
+        mmer.EQUIPMENT_ID,
+        mmer.REMARK,
+        mmer.BOX_NUM,
+        mmer.BAG_NUM,
+        mmer.TOTAL_WEIGHT,
+        mmer.USE_TIME,
+        mme.EQUIPMENT_NAME,
+        sd.DEPARTMENT_NAME AS hospitalName,
+        su.NICK_NAME
+        FROM MW_MICRO_EQUIPMENT_RECORD mmer
+        LEFT JOIN MW_MICRO_EQUIPMENT mme ON mmer.EQUIPMENT_ID = mme.ID
+        LEFT JOIN SYS_DEPARTMENT sd ON mme.DEPARTMENT_ID = sd.ID
+        LEFT JOIN SYS_USER su ON mmer.OPERATOR_ID = su.USER_ID
+        <where>
+            <if test="treeCode !=null and treeCode != ''">
+                AND sd.TREE_CODE like concat(#{treeCode},'%')
+            </if>
+            <if test="query.equipmentName != null and query.equipmentName !=''">
+                AND mme.EQUIPMENT_NAME like concat('%',#{query.equipmentName},'%')
+            </if>
+            <if test="query.equipmentNumber != null and query.equipmentNumber != ''">
+                AND mme.EQUIPMENT_NUMBER like concat('%',#{query.equipmentNumber},'%')
+            </if>
+            <if test="query.useTimeStart != null and query.useTimeEnd != null">
+                AND mmer.USE_TIME BETWEEN #{query.useTimeStart} AND #{query.useTimeEnd}
+            </if>
+            <if test="query.ids != null and query.ids.size()>0">
+                AND mmer.ID IN
+                <foreach collection="query.ids" item="id" separator="," open="(" close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </select>
+    <select id="getStaticsData" resultType="com.sinata.system.domain.vo.MwMicroEquipmentStaticsVO">
+        SELECT mmer.BAG_NUM, mmer.TOTAL_WEIGHT, mmer.USE_TIME, mcr.WEIGHT, mcr.WASTE_TYPE
+        FROM MW_MICRO_EQUIPMENT_RECORD mmer
+        LEFT JOIN MW_MICRO_EQUIPMENT_RECORD_ITEM mmeri
+        ON mmer.ID = mmeri.EQUIPMENT_RECORD_ID
+        LEFT JOIN MW_COLLECT_RECORD mcr on mcr.ID = mmeri.COLLECT_RECORD_ID
+        LEFT JOIN MW_MICRO_EQUIPMENT mme ON mme.ID = mmer.EQUIPMENT_ID
+        LEFT JOIN SYS_DEPARTMENT sd ON sd.ID = mme.DEPARTMENT_ID
+        <where>
+            <if test="treeCode != null and treeCode != ''">
+                AND sd.TREE_CODE like concat(#{treeCode},'%')
+            </if>
+            <if test="query.equipmentId != null">
+                AND mmer.EQUIPMENT_ID = #{query.equipmentId}
+            </if>
+            <if test="query.startTime !=null and query.endTime != null">
+                AND mmer.USE_TIME BETWEEN #{query.startTime} AND #{query.endTime}
+            </if>
+        </where>
+    </select>
 
 </mapper>
diff --git a/medicalWaste-system/src/main/resources/mapper/system/SysDepartmentMapper.xml b/medicalWaste-system/src/main/resources/mapper/system/SysDepartmentMapper.xml
index 4159266..08f61ec 100644
--- a/medicalWaste-system/src/main/resources/mapper/system/SysDepartmentMapper.xml
+++ b/medicalWaste-system/src/main/resources/mapper/system/SysDepartmentMapper.xml
@@ -66,9 +66,6 @@
         ON sdi.INSTITUTION_TYPE = sdd2.DICT_CODE
         <where>
             sd.ORG_TYPE = 2
-            <if test="departmentId != null">
-                AND sd.PARENT_ID = #{departmentId}
-            </if>
             <if test="departmentName != null and departmentName != ''">
                 AND sd.DEPARTMENT_NAME LIKE CONCAT('%', #{departmentName}, '%')
             </if>

--
Gitblit v1.7.1