From 6a3bb2d68efeaf0e6609a14e29412c3805730ce8 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期四, 12 十二月 2024 18:41:09 +0800
Subject: [PATCH] 转运箱管理

---
 medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwStagingRoomDTO.java            |   32 +
 medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwBoxPageQuery.java            |   39 +
 medicalWaste-system/src/main/java/com/sinata/system/service/MwBoxService.java                   |   37 +
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwBoxVO.java                      |   34 +
 medicalWaste-system/src/main/java/com/sinata/system/service/MwStagingRoomService.java           |   44 ++
 medicalWaste-system/src/main/java/com/sinata/system/domain/query/StorageRecordQuery.java        |   39 +
 medicalWaste-system/src/main/resources/mapper/system/MwStagingRoomMapper.xml                    |   27 +
 medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwStagingRoomController.java |   98 ++++
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwBoxServiceImpl.java          |  107 +++++
 medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwBoxController.java         |   91 ++++
 medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwStagingRoomQuery.java        |   22 +
 medicalWaste-system/src/main/java/com/sinata/system/domain/MwBox.java                           |   42 +
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwStagingRoomVO.java              |   38 +
 medicalWaste-system/src/main/java/com/sinata/system/domain/vo/BoxStatisticsVO.java              |   32 +
 medicalWaste-common/src/main/java/com/sinata/common/enums/BoxProcessEnum.java                   |   25 +
 medicalWaste-common/src/main/java/com/sinata/common/enums/BoxStatusEnum.java                    |   24 +
 medicalWaste-system/src/main/java/com/sinata/system/mapper/MwStagingRoomMapper.java             |   13 
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwStagingRoomServiceImpl.java  |   89 ++++
 medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwBoxDTO.java                    |   28 +
 medicalWaste-admin/src/main/resources/sql-error-codes.xml                                       |  311 +++++++++++++++
 20 files changed, 1,166 insertions(+), 6 deletions(-)

diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwBoxController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwBoxController.java
index d377d12..c3f093d 100644
--- a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwBoxController.java
+++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwBoxController.java
@@ -1,7 +1,29 @@
 package com.sinata.web.controller.backend;
 
+import com.sinata.common.core.domain.R;
+import com.sinata.common.entity.PageDTO;
+import com.sinata.system.domain.dto.MwBoxDTO;
+import com.sinata.system.domain.query.MwBoxPageQuery;
+import com.sinata.system.domain.vo.BoxStatisticsVO;
+import com.sinata.system.domain.vo.MwBoxVO;
+import com.sinata.system.service.MwBoxService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+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.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
 
 /**
  * <p>
@@ -11,8 +33,77 @@
  * @author mitao
  * @since 2024-12-02
  */
+@Api(tags = {"转运箱管理相关接口"})
+@Validated
 @RestController
+@RequiredArgsConstructor
 @RequestMapping("/backend/mwBox")
 public class MwBoxController {
+    private final MwBoxService boxService;
+
+    /**
+     * 转运箱数据统计
+     *
+     * @return
+     */
+    @GetMapping("/statistics")
+    @ApiOperation("转运箱数据统计")
+    public R<BoxStatisticsVO> getBoxStatistics() {
+        return R.ok(boxService.getBoxStatistics());
+    }
+
+    /**
+     * 转运箱分页列表
+     *
+     * @param query
+     * @return
+     */
+    @PostMapping("/page")
+    @ApiOperation("转运箱分页列表")
+    public R<PageDTO<MwBoxVO>> pageList(@Valid @RequestBody MwBoxPageQuery query) {
+        return R.ok(boxService.pageList(query));
+    }
+
+    /**
+     * 新增转运箱
+     *
+     * @param boxNumberStart
+     * @param boxNumberEnd
+     * @return
+     */
+    @PostMapping("/add")
+    @ApiOperation("新增转运箱")
+    @ApiImplicitParams({@ApiImplicitParam(name = "boxNumberStart", value = "转运箱编号开始", required = true),
+            @ApiImplicitParam(name = "boxNumberEnd", value = "转运箱编号结束", required = true)})
+    public R<?> add(@RequestParam String boxNumberStart, @RequestParam String boxNumberEnd) {
+        boxService.add(boxNumberStart, boxNumberEnd);
+        return R.ok();
+    }
+
+    /**
+     * 编辑转运箱状态
+     *
+     * @param dtoList
+     * @return
+     */
+    @PostMapping("/editBatch")
+    @ApiOperation("批量修改转运箱状态")
+    public R<?> editBatch(@Valid @RequestBody List<MwBoxDTO> dtoList) {
+        boxService.editBatch(dtoList);
+        return R.ok();
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param idList
+     * @return
+     */
+    @PostMapping("/delBatch")
+    @ApiOperation("批量删除")
+    public R<?> delBatch(@ApiParam(name = "idList", value = "转运箱id列表", required = true, allowMultiple = true) @NotEmpty(message = "转运箱列表不能为空") @RequestBody List<Long> idList) {
+        boxService.removeByIds(idList);
+        return R.ok();
+    }
 
 }
diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwStagingRoomController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwStagingRoomController.java
index 35d4d47..1c2ba42 100644
--- a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwStagingRoomController.java
+++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwStagingRoomController.java
@@ -1,7 +1,27 @@
 package com.sinata.web.controller.backend;
 
+import com.sinata.common.core.domain.R;
+import com.sinata.common.entity.PageDTO;
+import com.sinata.system.domain.dto.MwStagingRoomDTO;
+import com.sinata.system.domain.query.MwStagingRoomQuery;
+import com.sinata.system.domain.query.StorageRecordQuery;
+import com.sinata.system.domain.vo.MwCollectRecordVO;
+import com.sinata.system.domain.vo.MwStagingRoomVO;
+import com.sinata.system.service.MwStagingRoomService;
+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.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;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
 
 /**
  * <p>
@@ -11,8 +31,86 @@
  * @author mitao
  * @since 2024-12-02
  */
+@Api(tags = {"暂存间管理相关接口"})
+@Validated
 @RestController
+@RequiredArgsConstructor
 @RequestMapping("/backend/mwStagingRoom")
 public class MwStagingRoomController {
+    private final MwStagingRoomService mwStagingRoomService;
 
+    /**
+     * 暂存间分页列表
+     *
+     * @param query
+     * @return
+     */
+    @PostMapping("/page")
+    @ApiOperation("暂存间分页列表")
+    public R<PageDTO<MwStagingRoomVO>> pageList(@Valid @RequestBody MwStagingRoomQuery query) {
+        return R.ok(mwStagingRoomService.pageList(query));
+    }
+
+    /**
+     * 新增暂存间
+     *
+     * @param dto
+     * @return
+     */
+    @PostMapping("/add")
+    @ApiOperation("新增暂存间")
+    public R<?> add(@Valid @RequestBody MwStagingRoomDTO dto) {
+        mwStagingRoomService.add(dto);
+        return R.ok();
+    }
+
+    /**
+     * 编辑暂存间
+     *
+     * @param dto
+     * @return
+     */
+    @PostMapping("/edit")
+    @ApiOperation("编辑暂存间")
+    public R<?> edit(@Valid @RequestBody MwStagingRoomDTO dto) {
+        mwStagingRoomService.edit(dto);
+        return R.ok();
+    }
+
+    /**
+     * 删除暂存间
+     *
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/{id}")
+    @ApiOperation("删除暂存间")
+    public R<?> delete(@ApiParam(name = "id", value = "暂存间id", required = true) @PathVariable("id") Long id) {
+        mwStagingRoomService.removeById(id);
+        return R.ok();
+    }
+
+    /**
+     * 根据医院id查询暂存间
+     *
+     * @param departmentId
+     * @return
+     */
+    @GetMapping("/getByHospitalId/{departmentId}")
+    @ApiOperation(value = "根据医院id查询暂存间", notes = "入库、出库记录暂存间筛选级联数据")
+    public R<MwStagingRoomVO> getByHospitalId(@ApiParam(name = "departmentId", value = "医院id", required = true) @PathVariable("departmentId") Long departmentId) {
+        return R.ok(mwStagingRoomService.getByHospitalId(departmentId));
+    }
+
+    /**
+     * 暂存间入库记录
+     *
+     * @param query
+     * @return
+     */
+    @PostMapping("/storageRecord")
+    @ApiOperation("暂存间入库记录")
+    public R<PageDTO<MwCollectRecordVO>> storageRecord(@Valid @RequestBody StorageRecordQuery query) {
+        return R.ok(mwStagingRoomService.storageRecord(query));
+    }
 }
diff --git a/medicalWaste-admin/src/main/resources/sql-error-codes.xml b/medicalWaste-admin/src/main/resources/sql-error-codes.xml
new file mode 100644
index 0000000..c7599d1
--- /dev/null
+++ b/medicalWaste-admin/src/main/resources/sql-error-codes.xml
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "https://www.springframework.org/dtd/spring-beans-2.0.dtd">
+
+<!--
+	- Default SQL error codes for well-known databases.
+	- Can be overridden by definitions in a "sql-error-codes.xml" file
+	- in the root of the class path.
+	-
+	- If the Database Product Name contains characters that are invalid
+	- to use in the id attribute (like a space) then we need to add a property
+	- named "databaseProductName"/"databaseProductNames" that holds this value.
+	- If this property is present, then it will be used instead of the id for
+	- looking up the error codes based on the current database.
+	-->
+<beans>
+
+    <bean id="DB2" name="Db2" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="databaseProductName">
+            <value>DB2*</value>
+        </property>
+        <property name="badSqlGrammarCodes">
+            <value>-007,-029,-097,-104,-109,-115,-128,-199,-204,-206,-301,-408,-441,-491</value>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>-803</value>
+        </property>
+        <property name="dataIntegrityViolationCodes">
+            <value>-407,-530,-531,-532,-543,-544,-545,-603,-667</value>
+        </property>
+        <property name="dataAccessResourceFailureCodes">
+            <value>-904,-971</value>
+        </property>
+        <property name="transientDataAccessResourceCodes">
+            <value>-1035,-1218,-30080,-30081</value>
+        </property>
+        <property name="deadlockLoserCodes">
+            <value>-911,-913</value>
+        </property>
+    </bean>
+
+    <bean id="Derby" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="databaseProductName">
+            <value>Apache Derby</value>
+        </property>
+        <property name="useSqlStateForTranslation">
+            <value>true</value>
+        </property>
+        <property name="badSqlGrammarCodes">
+            <value>42802,42821,42X01,42X02,42X03,42X04,42X05,42X06,42X07,42X08</value>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>23505</value>
+        </property>
+        <property name="dataIntegrityViolationCodes">
+            <value>22001,22005,23502,23503,23513,X0Y32</value>
+        </property>
+        <property name="dataAccessResourceFailureCodes">
+            <value>04501,08004,42Y07</value>
+        </property>
+        <property name="cannotAcquireLockCodes">
+            <value>40XL1</value>
+        </property>
+        <property name="deadlockLoserCodes">
+            <value>40001</value>
+        </property>
+    </bean>
+
+    <bean id="H2" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="badSqlGrammarCodes">
+            <value>42000,42001,42101,42102,42111,42112,42121,42122,42132</value>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>23001,23505</value>
+        </property>
+        <property name="dataIntegrityViolationCodes">
+            <value>22001,22003,22012,22018,22025,23000,23002,23003,23502,23503,23506,23507,23513</value>
+        </property>
+        <property name="dataAccessResourceFailureCodes">
+            <value>90046,90100,90117,90121,90126</value>
+        </property>
+        <property name="cannotAcquireLockCodes">
+            <value>50200</value>
+        </property>
+    </bean>
+
+    <!-- https://help.sap.com/saphelp_hanaplatform/helpdata/en/20/a78d3275191014b41bae7c4a46d835/content.htm -->
+    <bean id="HDB" name="Hana" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="databaseProductNames">
+            <list>
+                <value>SAP HANA</value>
+                <value>SAP DB</value>
+            </list>
+        </property>
+        <property name="badSqlGrammarCodes">
+            <value>
+                257,259,260,261,262,263,264,267,268,269,270,271,272,273,275,276,277,278,
+                278,279,280,281,282,283,284,285,286,288,289,290,294,295,296,297,299,308,309,
+                313,315,316,318,319,320,321,322,323,324,328,329,330,333,335,336,337,338,340,
+                343,350,351,352,362,368
+            </value>
+        </property>
+        <property name="permissionDeniedCodes">
+            <value>10,258</value>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>301</value>
+        </property>
+        <property name="dataIntegrityViolationCodes">
+            <value>461,462</value>
+        </property>
+        <property name="dataAccessResourceFailureCodes">
+            <value>-813,-709,-708,1024,1025,1026,1027,1029,1030,1031</value>
+        </property>
+        <property name="invalidResultSetAccessCodes">
+            <value>-11210,582,587,588,594</value>
+        </property>
+        <property name="cannotAcquireLockCodes">
+            <value>131</value>
+        </property>
+        <property name="cannotSerializeTransactionCodes">
+            <value>138,143</value>
+        </property>
+        <property name="deadlockLoserCodes">
+            <value>133</value>
+        </property>
+    </bean>
+
+    <bean id="HSQL" name="Hsql" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="databaseProductName">
+            <value>HSQL Database Engine</value>
+        </property>
+        <property name="badSqlGrammarCodes">
+            <value>-22,-28</value>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>-104</value>
+        </property>
+        <property name="dataIntegrityViolationCodes">
+            <value>-9</value>
+        </property>
+        <property name="dataAccessResourceFailureCodes">
+            <value>-80</value>
+        </property>
+    </bean>
+
+    <bean id="Informix" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="databaseProductName">
+            <value>Informix Dynamic Server</value>
+        </property>
+        <property name="badSqlGrammarCodes">
+            <value>-201,-217,-696</value>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>-239,-268,-6017</value>
+        </property>
+        <property name="dataIntegrityViolationCodes">
+            <value>-692,-11030</value>
+        </property>
+    </bean>
+
+    <bean id="MS-SQL" name="SqlServer" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="databaseProductName">
+            <value>Microsoft SQL Server</value>
+        </property>
+        <property name="badSqlGrammarCodes">
+            <value>156,170,207,208,209</value>
+        </property>
+        <property name="permissionDeniedCodes">
+            <value>229</value>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>2601,2627</value>
+        </property>
+        <property name="dataIntegrityViolationCodes">
+            <value>544,2628,8114,8115</value>
+        </property>
+        <property name="dataAccessResourceFailureCodes">
+            <value>4060</value>
+        </property>
+        <property name="cannotAcquireLockCodes">
+            <value>1222</value>
+        </property>
+        <property name="deadlockLoserCodes">
+            <value>1205</value>
+        </property>
+    </bean>
+
+    <bean id="MySQL" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="databaseProductNames">
+            <list>
+                <value>MySQL</value>
+                <value>MariaDB</value>
+            </list>
+        </property>
+        <property name="badSqlGrammarCodes">
+            <value>1054,1064,1146</value>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>1062</value>
+        </property>
+        <property name="dataIntegrityViolationCodes">
+            <value>630,839,840,893,1169,1215,1216,1217,1364,1451,1452,1557</value>
+        </property>
+        <property name="dataAccessResourceFailureCodes">
+            <value>1</value>
+        </property>
+        <property name="cannotAcquireLockCodes">
+            <value>1205,3572</value>
+        </property>
+        <property name="deadlockLoserCodes">
+            <value>1213</value>
+        </property>
+    </bean>
+
+    <bean id="Oracle" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="badSqlGrammarCodes">
+            <value>900,903,904,917,936,942,17006,6550</value>
+        </property>
+        <property name="invalidResultSetAccessCodes">
+            <value>17003</value>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>1</value>
+        </property>
+        <property name="dataIntegrityViolationCodes">
+            <value>1400,1722,2291,2292</value>
+        </property>
+        <property name="dataAccessResourceFailureCodes">
+            <value>17002,17447</value>
+        </property>
+        <property name="cannotAcquireLockCodes">
+            <value>54,30006</value>
+        </property>
+        <property name="cannotSerializeTransactionCodes">
+            <value>8177</value>
+        </property>
+        <property name="deadlockLoserCodes">
+            <value>60</value>
+        </property>
+    </bean>
+
+    <bean id="PostgreSQL" name="Postgres" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="useSqlStateForTranslation">
+            <value>true</value>
+        </property>
+        <property name="badSqlGrammarCodes">
+            <value>03000,42000,42601,42602,42622,42804,42P01</value>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>21000,23505</value>
+        </property>
+        <property name="dataIntegrityViolationCodes">
+            <value>23000,23502,23503,23514</value>
+        </property>
+        <property name="dataAccessResourceFailureCodes">
+            <value>53000,53100,53200,53300</value>
+        </property>
+        <property name="cannotAcquireLockCodes">
+            <value>55P03</value>
+        </property>
+        <property name="cannotSerializeTransactionCodes">
+            <value>40001</value>
+        </property>
+        <property name="deadlockLoserCodes">
+            <value>40P01</value>
+        </property>
+    </bean>
+
+    <bean id="Sybase" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="databaseProductNames">
+            <list>
+                <value>Sybase SQL Server</value>
+                <value>Adaptive Server Enterprise</value>
+                <value>ASE</value>  <!-- name as returned by jTDS driver -->
+                <value>SQL Server</value>
+                <value>sql server</value>  <!-- name as returned by jTDS driver -->
+            </list>
+        </property>
+        <property name="badSqlGrammarCodes">
+            <value>101,102,103,104,105,106,107,108,109,110,111,112,113,116,120,121,123,207,208,213,257,512</value>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>2601,2615,2626</value>
+        </property>
+        <property name="dataIntegrityViolationCodes">
+            <value>233,511,515,530,546,547,2615,2714</value>
+        </property>
+        <property name="transientDataAccessResourceCodes">
+            <value>921,1105</value>
+        </property>
+        <property name="cannotAcquireLockCodes">
+            <value>12205</value>
+        </property>
+        <property name="deadlockLoserCodes">
+            <value>1205</value>
+        </property>
+    </bean>
+
+    <!-- 支持达梦数据库错误码-->
+    <bean id="DM" class="org.springframework.jdbc.support.SQLErrorCodes">
+        <property name="databaseProductNames">
+            <list>
+                <!-- 数据源名称存在空格不能像Oracle一样直接作为beanId -->
+                <value>DM DBMS</value>
+            </list>
+        </property>
+        <property name="duplicateKeyCodes">
+            <value>-6602</value>
+        </property>
+    </bean>
+</beans>
diff --git a/medicalWaste-common/src/main/java/com/sinata/common/enums/BoxProcessEnum.java b/medicalWaste-common/src/main/java/com/sinata/common/enums/BoxProcessEnum.java
new file mode 100644
index 0000000..c728d71
--- /dev/null
+++ b/medicalWaste-common/src/main/java/com/sinata/common/enums/BoxProcessEnum.java
@@ -0,0 +1,25 @@
+package com.sinata.common.enums;
+
+import lombok.Getter;
+import lombok.AllArgsConstructor;
+
+@Getter
+@AllArgsConstructor
+public enum BoxProcessEnum {
+    HOSPITAL_USING(1, "医院在用"),
+    TRANSITING(2, "医疗废物车载"),
+    READY_TO_DISPOSAL(3, "待处置"),
+    DISPOSAL(4, "处置消毒");
+
+    private final Integer code;
+    private final String desc;
+
+    public static BoxProcessEnum getEnumByCode(Integer code) {
+        for (BoxProcessEnum e : BoxProcessEnum.values()) {
+            if (e.code.equals(code)) {
+                return e;
+            }
+        }
+        return null;
+    }
+} 
\ No newline at end of file
diff --git a/medicalWaste-common/src/main/java/com/sinata/common/enums/BoxStatusEnum.java b/medicalWaste-common/src/main/java/com/sinata/common/enums/BoxStatusEnum.java
new file mode 100644
index 0000000..defbb65
--- /dev/null
+++ b/medicalWaste-common/src/main/java/com/sinata/common/enums/BoxStatusEnum.java
@@ -0,0 +1,24 @@
+package com.sinata.common.enums;
+
+import lombok.Getter;
+import lombok.AllArgsConstructor;
+
+@Getter
+@AllArgsConstructor
+public enum BoxStatusEnum {
+    NORMAL(1, "正常"),
+    LOST(2, "丢失"),
+    BROKEN(3, "破坏");
+
+    private final Integer code;
+    private final String desc;
+
+    public static BoxStatusEnum getEnumByCode(Integer code) {
+        for (BoxStatusEnum e : BoxStatusEnum.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/domain/MwBox.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/MwBox.java
index eb8fc4c..5b98b38 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/domain/MwBox.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/MwBox.java
@@ -1,15 +1,17 @@
 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.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.sinata.common.entity.BaseModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.io.Serializable;
 import java.util.Date;
 
 /**
@@ -24,7 +26,7 @@
 @Setter
 @TableName("MW_BOX")
 @ApiModel(value = "MwBox对象", description = "转运箱")
-public class MwBox extends BaseModel {
+public class MwBox implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
@@ -36,7 +38,7 @@
     @TableField("BOX_NUMBER")
     private String boxNumber;
 
-    @ApiModelProperty("转运箱状态 1:正常 2:丢失 3:破坏 4:正常")
+    @ApiModelProperty("转运箱状态 1:正常 2:丢失 3:破坏")
     @TableField("STATUS")
     private Integer status;
 
@@ -52,5 +54,39 @@
     @TableField("LINK")
     private Integer link;
 
+    /**
+     * 创建者
+     */
+    @ApiModelProperty(value = "记录创建人,前端忽略")
+    @TableField(value = "create_by", fill = FieldFill.INSERT)
+    private Long createBy;
 
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "记录创建时间,前端忽略")
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /**
+     * 更新者
+     */
+    @ApiModelProperty(value = "记录修改人,前端忽略")
+    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(value = "记录修改时间,前端忽略")
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    /**
+     * 是否删除 0未删除 1已删除
+     */
+    @TableField("del_flag")
+    @ApiModelProperty(value = "是否删除 0未删除 1已删除")
+    @TableLogic(value = "0", delval = "NULL")
+    private Integer delFlag;
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwBoxDTO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwBoxDTO.java
new file mode 100644
index 0000000..0ff04a5
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwBoxDTO.java
@@ -0,0 +1,28 @@
+package com.sinata.system.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author mitao
+ * @date 2024/12/12
+ */
+@Data
+@ApiModel("转运箱数据传输对象")
+public class MwBoxDTO {
+
+    @ApiModelProperty("转运箱id")
+    @NotNull(message = "转运箱id不能为空")
+    private Long id;
+
+    @ApiModelProperty("转运箱状态 1:正常 2:丢失 3:破坏")
+    @NotNull(message = "转运箱状态不能为空")
+    private Integer status;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwStagingRoomDTO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwStagingRoomDTO.java
new file mode 100644
index 0000000..84b07cc
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwStagingRoomDTO.java
@@ -0,0 +1,32 @@
+package com.sinata.system.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author mitao
+ * @date 2024/12/12
+ */
+@Data
+@ApiOperation("暂存间数据传输对象")
+public class MwStagingRoomDTO {
+
+    @ApiModelProperty("暂存间id")
+    private Long id;
+
+    @ApiModelProperty("区域id(医院id)")
+    @NotNull(message = "医院id不能为空")
+    private Long departmentId;
+
+    @ApiModelProperty("暂存间名称")
+    @NotBlank(message = "暂存间名称不能为空")
+    private String roomName;
+
+    @ApiModelProperty("最大容量(箱)")
+    @NotNull(message = "最大容量不能为空")
+    private Integer maxCapacity;
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwBoxPageQuery.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwBoxPageQuery.java
new file mode 100644
index 0000000..5d4e42a
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwBoxPageQuery.java
@@ -0,0 +1,39 @@
+package com.sinata.system.domain.query;
+
+import com.sinata.common.entity.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * @author mitao
+ * @date 2024/12/12
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("转运箱查询数据传输对象")
+public class MwBoxPageQuery extends BasePage {
+
+    private static final long serialVersionUID = -5341744240105838832L;
+    @ApiModelProperty("编号-开始")
+    private String boxNumberStart;
+
+    @ApiModelProperty("编号-结束")
+    private String boxNumberEnd;
+
+    @ApiModelProperty("转运箱状态 1:正常 2:丢失 3:破坏")
+    private Integer status;
+
+    @ApiModelProperty("转运箱环节 1:医院在用 2:医疗废物车载 3:待处置 4:处置消毒")
+    private Integer link;
+    
+    @ApiModelProperty("最后使用时间-开始")
+    private Date lastUseTimeStart;
+
+    @ApiModelProperty("最后使用时间-结束")
+    private Date lastUseTimeEnd;
+
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwStagingRoomQuery.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwStagingRoomQuery.java
new file mode 100644
index 0000000..c5f8e82
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwStagingRoomQuery.java
@@ -0,0 +1,22 @@
+package com.sinata.system.domain.query;
+
+import com.sinata.common.entity.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author mitao
+ * @date 2024/12/12
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("暂存间查询数据传输对象")
+public class MwStagingRoomQuery extends BasePage {
+
+    private static final long serialVersionUID = -4437483386027508070L;
+
+    @ApiModelProperty("医院id")
+    private Long departmentId;
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/query/StorageRecordQuery.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/StorageRecordQuery.java
new file mode 100644
index 0000000..1893024
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/query/StorageRecordQuery.java
@@ -0,0 +1,39 @@
+package com.sinata.system.domain.query;
+
+import com.sinata.common.entity.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * @author mitao
+ * @date 2024/12/12
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("暂存间入库记录查询数据传输对象")
+public class StorageRecordQuery extends BasePage {
+
+    private static final long serialVersionUID = 3037481981686862175L;
+
+    @ApiModelProperty("机构id")
+    private Long departmentId;
+
+    @ApiModelProperty("暂存间id")
+    private Long stagingRoomId;
+
+    @ApiModelProperty("医废编号")
+    private String medicalWasteNumber;
+
+    @ApiModelProperty("箱子编号")
+    private String boxNumber;
+
+    @ApiModelProperty("医废类型")
+    private Integer wasteType;
+
+    @ApiModelProperty("入库时间")
+    private Date collectTime;
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/BoxStatisticsVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/BoxStatisticsVO.java
new file mode 100644
index 0000000..5859442
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/BoxStatisticsVO.java
@@ -0,0 +1,32 @@
+package com.sinata.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/12/11
+ */
+@Data
+@ApiModel("转运箱统计视图对象")
+public class BoxStatisticsVO {
+
+    @ApiModelProperty("转运箱总数")
+    private Integer total = 0;
+
+    @ApiModelProperty("转运箱破坏总数")
+    private Long brokenCount = 0L;
+
+    @ApiModelProperty("转运箱丢失总数")
+    private Long lostCount = 0L;
+
+    @ApiModelProperty("处置消毒转运箱总数")
+    private Long disposeCount = 0L;
+
+    @ApiModelProperty("医院在用转运箱总数")
+    private Long hospitalUsingCount = 0L;
+
+    @ApiModelProperty("医疗废物车载转运箱总数")
+    private Long transitingCount = 0L;
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwBoxVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwBoxVO.java
new file mode 100644
index 0000000..abb80e3
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwBoxVO.java
@@ -0,0 +1,34 @@
+package com.sinata.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author mitao
+ * @date 2024/12/12
+ */
+@Data
+@ApiModel("转运箱视图对象")
+public class MwBoxVO {
+    
+    @ApiModelProperty("转运箱id")
+    private Long id;
+
+    @ApiModelProperty("转运箱编号")
+    private String boxNumber;
+
+    @ApiModelProperty("转运箱状态 1:正常 2:丢失 3:破坏")
+    private Integer status;
+
+    @ApiModelProperty("最后使用时间")
+    private Date lastUseTime;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("转运箱环节 1:医院在用 2:医疗废物车载 3:待处置 4:处置消毒")
+    private Integer link;
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwStagingRoomVO.java b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwStagingRoomVO.java
new file mode 100644
index 0000000..b761679
--- /dev/null
+++ b/medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwStagingRoomVO.java
@@ -0,0 +1,38 @@
+package com.sinata.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/12/12
+ */
+@Data
+@ApiModel("暂存间视图对象")
+public class MwStagingRoomVO {
+
+    @ApiModelProperty("暂存间id")
+    private Long id;
+
+    @ApiModelProperty("区域id(医院id)")
+    private Long departmentId;
+
+    @ApiModelProperty("医院名称")
+    private String hospitalName;
+
+    @ApiModelProperty("暂存间名称")
+    private String roomName;
+
+    @ApiModelProperty("最大容量(箱)")
+    private Integer maxCapacity;
+
+    @ApiModelProperty("已使用数量")
+    private Integer usedNum;
+
+    @ApiModelProperty("未使用数量")
+    private Integer unused;
+
+    @ApiModelProperty("添加时间")
+    private String createTime;
+}
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwStagingRoomMapper.java b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwStagingRoomMapper.java
index 67c0f75..4866822 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwStagingRoomMapper.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwStagingRoomMapper.java
@@ -1,8 +1,11 @@
 package com.sinata.system.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.sinata.system.domain.MwStagingRoom;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sinata.system.domain.vo.MwStagingRoomVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -14,5 +17,13 @@
  */
 @Mapper
 public interface MwStagingRoomMapper extends BaseMapper<MwStagingRoom> {
-
+    /**
+     * 暂存间分页列表
+     *
+     * @param objectPage
+     * @param departmentId
+     * @param treeCode
+     * @return
+     */
+    Page<MwStagingRoomVO> pagelist(Page<Object> objectPage, @Param("departmentId") Long departmentId, @Param("treeCode") String treeCode);
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/MwBoxService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/MwBoxService.java
index b4fc2dc..9160a56 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/MwBoxService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/MwBoxService.java
@@ -1,7 +1,14 @@
 package com.sinata.system.service;
 
+import com.sinata.common.entity.PageDTO;
 import com.sinata.system.domain.MwBox;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.sinata.system.domain.dto.MwBoxDTO;
+import com.sinata.system.domain.query.MwBoxPageQuery;
+import com.sinata.system.domain.vo.BoxStatisticsVO;
+import com.sinata.system.domain.vo.MwBoxVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +19,35 @@
  * @since 2024-12-02
  */
 public interface MwBoxService extends IService<MwBox> {
+    /**
+     * 转运箱数据统计
+     *
+     * @return
+     */
+    BoxStatisticsVO getBoxStatistics();
 
+    /**
+     * 转运箱分页列表
+     *
+     * @param query
+     * @return
+     */
+    PageDTO<MwBoxVO> pageList(MwBoxPageQuery query);
+
+    /**
+     * 新增转运箱
+     *
+     * @param boxNumberStart
+     * @param boxNumberEnd
+     * @return
+     */
+    void add(String boxNumberStart, String boxNumberEnd);
+
+    /**
+     * 编辑转运箱状态
+     *
+     * @param dtoList
+     * @return
+     */
+    void editBatch(List<MwBoxDTO> dtoList);
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/MwStagingRoomService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/MwStagingRoomService.java
index 69619bc..b305589 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/MwStagingRoomService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/MwStagingRoomService.java
@@ -1,7 +1,13 @@
 package com.sinata.system.service;
 
+import com.sinata.common.entity.PageDTO;
 import com.sinata.system.domain.MwStagingRoom;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.sinata.system.domain.dto.MwStagingRoomDTO;
+import com.sinata.system.domain.query.MwStagingRoomQuery;
+import com.sinata.system.domain.query.StorageRecordQuery;
+import com.sinata.system.domain.vo.MwCollectRecordVO;
+import com.sinata.system.domain.vo.MwStagingRoomVO;
 
 /**
  * <p>
@@ -12,5 +18,43 @@
  * @since 2024-12-02
  */
 public interface MwStagingRoomService extends IService<MwStagingRoom> {
+    /**
+     * 暂存间分页列表
+     *
+     * @param query
+     * @return
+     */
+    PageDTO<MwStagingRoomVO> pageList(MwStagingRoomQuery query);
 
+    /**
+     * 新增暂存间
+     *
+     * @param dto
+     * @return
+     */
+    void add(MwStagingRoomDTO dto);
+
+    /**
+     * 编辑暂存间
+     *
+     * @param dto
+     * @return
+     */
+    void edit(MwStagingRoomDTO dto);
+
+    /**
+     * 根据医院id查询暂存间
+     *
+     * @param departmentId
+     * @return
+     */
+    MwStagingRoomVO getByHospitalId(Long departmentId);
+
+    /**
+     * 暂存间入库记录
+     *
+     * @param query
+     * @return
+     */
+    PageDTO<MwCollectRecordVO> storageRecord(StorageRecordQuery query);
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwBoxServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwBoxServiceImpl.java
index c2ea591..8706682 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwBoxServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwBoxServiceImpl.java
@@ -1,10 +1,29 @@
 package com.sinata.system.service.impl;
 
+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.enums.BoxProcessEnum;
+import com.sinata.common.enums.BoxStatusEnum;
+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.MwBox;
+import com.sinata.system.domain.dto.MwBoxDTO;
+import com.sinata.system.domain.query.MwBoxPageQuery;
+import com.sinata.system.domain.vo.BoxStatisticsVO;
+import com.sinata.system.domain.vo.MwBoxVO;
 import com.sinata.system.mapper.MwBoxMapper;
 import com.sinata.system.service.MwBoxService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * <p>
@@ -16,5 +35,91 @@
  */
 @Service
 public class MwBoxServiceImpl extends ServiceImpl<MwBoxMapper, MwBox> implements MwBoxService {
+    /**
+     * 转运箱数据统计
+     *
+     * @return
+     */
+    @Override
+    public BoxStatisticsVO getBoxStatistics() {
+        BoxStatisticsVO boxStatisticsVO = new BoxStatisticsVO();
+        List<MwBox> boxList = this.list();
+        if (CollUtils.isNotEmpty(boxList)) {
+            boxStatisticsVO.setTotal(boxList.size());
+            boxStatisticsVO.setBrokenCount(boxList.stream().filter(box -> BoxStatusEnum.BROKEN.getCode().equals(box.getStatus())).count());
+            boxStatisticsVO.setLostCount(boxList.stream().filter(box -> BoxStatusEnum.LOST.getCode().equals(box.getStatus())).count());
+            boxStatisticsVO.setDisposeCount(boxList.stream().filter(box -> BoxProcessEnum.DISPOSAL.getCode().equals(box.getStatus())).count());
+            boxStatisticsVO.setHospitalUsingCount(boxList.stream().filter(box -> BoxProcessEnum.HOSPITAL_USING.getCode().equals(box.getStatus())).count());
+            boxStatisticsVO.setTransitingCount(boxList.stream().filter(box -> BoxProcessEnum.TRANSITING.getCode().equals(box.getStatus())).count());
+        }
+        return boxStatisticsVO;
+    }
 
+    /**
+     * 转运箱分页列表
+     *
+     * @param query
+     * @return
+     */
+    @Override
+    public PageDTO<MwBoxVO> pageList(MwBoxPageQuery query) {
+        Page<MwBox> page = this.lambdaQuery()
+                .between(StringUtils.isNotBlank(query.getBoxNumberStart())
+                                && StringUtils.isNotBlank(query.getBoxNumberEnd()),
+                        MwBox::getBoxNumber, query.getBoxNumberStart(), query.getBoxNumberEnd())
+                .eq(Objects.nonNull(query.getStatus()), MwBox::getStatus, query.getStatus())
+                .eq(Objects.nonNull(query.getLink()), MwBox::getLink, query.getLink())
+                .between(Objects.nonNull(query.getLastUseTimeStart())
+                                && Objects.nonNull(query.getLastUseTimeEnd()),
+                        MwBox::getLastUseTime, query.getLastUseTimeStart(), query.getLastUseTimeEnd())
+                .orderByDesc(MwBox::getBoxNumber)
+                .page(new Page<>(query.getPageCurr(), query.getPageSize()));
+        return PageDTO.of(page, MwBoxVO.class);
+    }
+
+    /**
+     * 新增转运箱
+     *
+     * @param boxNumberStart
+     * @param boxNumberEnd
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void add(String boxNumberStart, String boxNumberEnd) {
+        String regx = "\\d+";
+        if (boxNumberStart.length() != 11 || boxNumberEnd.length() != 11 || !boxNumberStart.matches(regx) || !boxNumberEnd.matches(regx)) {
+            throw new ServiceException("请输入有效的11位数字编号!");
+        }
+        BigDecimal start = new BigDecimal(boxNumberStart);
+        BigDecimal end = new BigDecimal(boxNumberEnd);
+        if (start.compareTo(end) > 0) {
+            throw new ServiceException("开始编号不能大于结束编号");
+        }
+        List<MwBox> boxList = new ArrayList<>();
+        for (BigDecimal i = start; i.compareTo(end) <= 0; i = i.add(BigDecimal.ONE)) {
+            MwBox mwBox = new MwBox();
+            mwBox.setBoxNumber(i.toString());
+            mwBox.setStatus(BoxStatusEnum.NORMAL.getCode());
+            boxList.add(mwBox);
+        }
+        try {
+            this.saveBatch(boxList);
+        } catch (DuplicateKeyException e) {
+            throw new ServiceException("转运箱编号重复");
+        }
+    }
+
+    /**
+     * 编辑转运箱状态
+     *
+     * @param dto
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void editBatch(List<MwBoxDTO> dtoList) {
+        List<MwBox> mwBoxes = BeanUtils.copyToList(dtoList, MwBox.class);
+        this.updateBatchById(mwBoxes);
+    }
 }
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 9644ef3..f687b10 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
@@ -1,10 +1,24 @@
 package com.sinata.system.service.impl;
 
+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.system.domain.MwStagingRoom;
+import com.sinata.system.domain.SysDepartment;
+import com.sinata.system.domain.dto.MwStagingRoomDTO;
+import com.sinata.system.domain.query.MwStagingRoomQuery;
+import com.sinata.system.domain.query.StorageRecordQuery;
+import com.sinata.system.domain.vo.MwCollectRecordVO;
+import com.sinata.system.domain.vo.MwStagingRoomVO;
 import com.sinata.system.mapper.MwStagingRoomMapper;
 import com.sinata.system.service.MwStagingRoomService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sinata.system.service.SysDepartmentService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+
+import java.util.Objects;
 
 /**
  * <p>
@@ -15,6 +29,79 @@
  * @since 2024-12-02
  */
 @Service
+@RequiredArgsConstructor
 public class MwStagingRoomServiceImpl extends ServiceImpl<MwStagingRoomMapper, MwStagingRoom> implements MwStagingRoomService {
+    private final SysDepartmentService sysDepartmentService;
 
+    /**
+     * 暂存间分页列表
+     *
+     * @param query
+     * @return
+     */
+    @Override
+    public PageDTO<MwStagingRoomVO> pageList(MwStagingRoomQuery query) {
+        String treeCode = "";
+        if (Objects.nonNull(query.getDepartmentId())) {
+            SysDepartment department = sysDepartmentService.getById(query.getDepartmentId());
+            if (Objects.isNull(department)) {
+                return PageDTO.empty(0L, 0L);
+            }
+            treeCode = department.getTreeCode();
+        }
+        Page<MwStagingRoomVO> page = baseMapper.pagelist(new Page<>(query.getPageCurr(), query.getPageSize()), query.getDepartmentId(), treeCode);
+        return PageDTO.of(page);
+    }
+
+    /**
+     * 新增暂存间
+     *
+     * @param dto
+     * @return
+     */
+    @Override
+    public void add(MwStagingRoomDTO dto) {
+        MwStagingRoom mwStagingRoom = BeanUtils.copyBean(dto, MwStagingRoom.class);
+        Long count = this.lambdaQuery().eq(MwStagingRoom::getDepartmentId, mwStagingRoom.getDepartmentId()).count();
+        if (count > 0) {
+            throw new ServiceException("当前医院已存在暂存间,请勿重复添加");
+        }
+        save(mwStagingRoom);
+    }
+
+    /**
+     * 编辑暂存间
+     *
+     * @param dto
+     * @return
+     */
+    @Override
+    public void edit(MwStagingRoomDTO dto) {
+        if (Objects.isNull(dto.getId())) {
+            throw new ServiceException("暂存间id不能为空");
+        }
+    }
+
+    /**
+     * 根据医院id查询暂存间
+     *
+     * @param departmentId
+     * @return
+     */
+    @Override
+    public MwStagingRoomVO getByHospitalId(Long departmentId) {
+        MwStagingRoom one = this.lambdaQuery().eq(MwStagingRoom::getDepartmentId, departmentId).one();
+        return BeanUtils.copyBean(one, MwStagingRoomVO.class);
+    }
+
+    /**
+     * 暂存间入库记录
+     *
+     * @param query
+     * @return
+     */
+    @Override
+    public PageDTO<MwCollectRecordVO> storageRecord(StorageRecordQuery query) {
+        return null;
+    }
 }
diff --git a/medicalWaste-system/src/main/resources/mapper/system/MwStagingRoomMapper.xml b/medicalWaste-system/src/main/resources/mapper/system/MwStagingRoomMapper.xml
index 2175a80..d260d75 100644
--- a/medicalWaste-system/src/main/resources/mapper/system/MwStagingRoomMapper.xml
+++ b/medicalWaste-system/src/main/resources/mapper/system/MwStagingRoomMapper.xml
@@ -24,5 +24,32 @@
         UPDATE_TIME,
         ID, DEPARTMENT_ID, ROOM_NAME, MAX_CAPACITY
     </sql>
+    <select id="pagelist" resultType="com.sinata.system.domain.vo.MwStagingRoomVO">
+        SELECT msr.ID,
+        msr.DEPARTMENT_ID,
+        msr.ROOM_NAME,
+        msr.MAX_CAPACITY,
+        msr.CREATE_TIME,
+        COUNT(mr.ID) AS usedNum,
+        (msr.MAX_CAPACITY - COUNT(mr.ID)) AS unUsedNum,
+        sd.DEPARTMENT_NAME AS hospitalName
+        FROM MW_STAGING_ROOM msr
+        LEFT JOIN (SELECT ID,
+        BOX_ID,
+        STAGING_ROOM_ID
+        FROM MW_COLLECT_RECORD
+        WHERE STATUS != 4
+        GROUP BY BOX_ID) mr
+        ON msr.ID = mr.STAGING_ROOM_ID
+        LEFT JOIN SYS_DEPARTMENT sd ON msr.DEPARTMENT_ID = sd.ID
+        <where>
+            <if test="departmentId != null and departmentId != ''">
+                msr.DEPARTMENT_ID = #{departmentId}
+            </if>
+            <if test="treeCode != null and treeCode != ''">
+                sd.TREE_CODE LIKE CONCAT('%', #{tree})
+            </if>
+        </where>
+    </select>
 
 </mapper>

--
Gitblit v1.7.1