mitao
2025-03-25 f78619365d64d816c8b95997ad89e2bdb8942f26
bug修改
14个文件已修改
1个文件已添加
306 ■■■■■ 已修改文件
medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwCheckoutRecordController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/domain/query/TransitRecordQuery.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMedicalWasteBoxVO.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwTransitRecordVO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/mapper/MwCheckoutRecordMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/MwCheckoutRecordService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwCheckoutRecordServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDepartmentServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDictDataServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/resources/mapper/system/MwApplicationMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/resources/mapper/system/MwCheckoutRecordMapper.xml 163 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/resources/mapper/system/SysRoleMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwCheckoutRecordController.java
@@ -5,6 +5,7 @@
import com.sinata.system.domain.query.CheckoutRecordQuery;
import com.sinata.system.domain.query.MwCheckoutRecordItemQuery;
import com.sinata.system.domain.query.MwTransitRecordQuery;
import com.sinata.system.domain.query.TransitRecordQuery;
import com.sinata.system.domain.vo.MwCheckoutRecordVO;
import com.sinata.system.domain.vo.MwMedicalWasteBoxVO;
import com.sinata.system.domain.vo.MwTransitRecordVO;
@@ -111,9 +112,9 @@
     * @return
     */
    @ApiOperation("运输记录详情")
    @GetMapping("/transit/detail/{id}")
    public R<MwTransitRecordVO> transitDetail(@ApiParam(name = "id", value = "运输记录id", required = true) @PathVariable("id") Long id) {
        return R.ok(mwCheckoutRecordService.transitDetail(id));
    @PostMapping("/transit/detail")
    public R<MwTransitRecordVO> transitDetail(@RequestBody TransitRecordQuery query) {
        return R.ok(mwCheckoutRecordService.transitDetail(query));
    }
    /**
@@ -124,7 +125,7 @@
     */
    @ApiOperation("运输记录详情分页列表")
    @PostMapping("/transit/detailPage")
    public R<PageDTO<MwMedicalWasteBoxVO>> transitDetailPage(@Valid @RequestBody MwTransitRecordQuery query) {
    public R<PageDTO<MwMedicalWasteBoxVO>> transitDetailPage(@Valid @RequestBody TransitRecordQuery query) {
        return R.ok(mwCheckoutRecordService.transitDetailPageList(query));
    }
}
medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java
@@ -245,7 +245,7 @@
            max.setTime(maxDate);
            Calendar curr = min;
            max.add(Calendar.YEAR, 1);
            //max.add(Calendar.YEAR, 1);
            while (curr.before(max)) {
                result.add(sdf.format(curr.getTime()));
                curr.add(Calendar.YEAR, 1);
@@ -259,7 +259,7 @@
            max.setTime(maxDate);
            Calendar curr = min;
            max.add(Calendar.MONTH, 1);
            //max.add(Calendar.MONTH, 1);
            while (curr.before(max)) {
                result.add(sdf.format(curr.getTime()));
                curr.add(Calendar.MONTH, 1);
@@ -273,7 +273,7 @@
            min.setTime(minDate);
            max.setTime(maxDate);
            Calendar curr = min;
            max.add(Calendar.DATE, 1);
            //max.add(Calendar.DATE, 1);
            while (curr.before(max)) {
                result.add(sdf.format(curr.getTime()));
                curr.add(Calendar.DATE, 1);
medicalWaste-system/src/main/java/com/sinata/system/domain/query/TransitRecordQuery.java
New file
@@ -0,0 +1,29 @@
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 org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * @author mitao
 * @date 2025/3/25
 */
@ApiModel("运输记录查询对象")
@Data
public class TransitRecordQuery extends BasePage {
    private static final long serialVersionUID = 710402334522546900L;
    @ApiModelProperty(value = "路线id")
    private Long id;
    @ApiModelProperty(value = "车辆id")
    private Long carId;
    @ApiModelProperty(value = "运输日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date transitDate;
}
medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMedicalWasteBoxVO.java
@@ -1,8 +1,10 @@
package com.sinata.system.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
@@ -48,4 +50,9 @@
    @ApiModelProperty("最后封箱时间")
    private Date boxTime;
    @ApiModelProperty(value = "运输日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date transitDate;
}
medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwTransitRecordVO.java
@@ -1,8 +1,10 @@
package com.sinata.system.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
@@ -17,6 +19,9 @@
    @ApiModelProperty("路线id")
    private Long id;
    @ApiModelProperty("路线id")
    private Long carId;
    @ApiModelProperty("单位名称")
    private String departmentName;
@@ -41,4 +46,9 @@
    @ApiModelProperty("状态 1:暂存中; 2:运输中; 3:已接收; 4:已处置;")
    private Integer status;
    @ApiModelProperty(value = "运输日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date transitDate;
}
medicalWaste-system/src/main/java/com/sinata/system/mapper/MwCheckoutRecordMapper.java
@@ -3,12 +3,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sinata.system.domain.MwCheckoutRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sinata.system.domain.dto.CollectTotalUpDto;
import com.sinata.system.domain.query.CheckoutRecordQuery;
import com.sinata.system.domain.query.DisposalReportQuery;
import com.sinata.system.domain.query.MwTransitRecordQuery;
import com.sinata.system.domain.query.TransformQuery;
import com.sinata.system.domain.query.TransitRecordQuery;
import com.sinata.system.domain.vo.MwCheckoutRecordVO;
import com.sinata.system.domain.vo.MwCollectRecordVO;
import com.sinata.system.domain.vo.MwMedicalWasteBoxVO;
@@ -71,10 +71,9 @@
    /**
     * 运输记录详情
     *
     * @param id
     * @return
     * @param query@return
     */
    MwTransitRecordVO transitDetail(Long id);
    MwTransitRecordVO transitDetail(@Param("query") TransitRecordQuery query);
    /**
     * 运输记录详情分页列表
@@ -83,7 +82,7 @@
     * @param id
     * @return
     */
    Page<MwMedicalWasteBoxVO> transitDetailPageList(Page<MwMedicalWasteBoxVO> page, @Param("id") Long id);
    Page<MwMedicalWasteBoxVO> transitDetailPageList(Page<MwMedicalWasteBoxVO> page, @Param("query") TransitRecordQuery query);
    /**
     * 转运记录导出
medicalWaste-system/src/main/java/com/sinata/system/service/MwCheckoutRecordService.java
@@ -9,6 +9,7 @@
import com.sinata.system.domain.query.MwCheckoutRecordItemQuery;
import com.sinata.system.domain.query.MwTransitRecordQuery;
import com.sinata.system.domain.query.TransformQuery;
import com.sinata.system.domain.query.TransitRecordQuery;
import com.sinata.system.domain.vo.MwCheckoutRecordVO;
import com.sinata.system.domain.vo.MwCollectRecordVO;
import com.sinata.system.domain.vo.MwMedicalWasteBoxVO;
@@ -19,7 +20,6 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDate;
import java.util.List;
import java.util.List;
/**
@@ -67,9 +67,10 @@
     * 运输记录详情
     *
     * @param id
     * @param query
     * @return
     */
    MwTransitRecordVO transitDetail(Long id);
    MwTransitRecordVO transitDetail(TransitRecordQuery query);
    /**
     * 运输记录详情分页列表
@@ -77,7 +78,7 @@
     * @param query
     * @return
     */
    PageDTO<MwMedicalWasteBoxVO> transitDetailPageList(MwTransitRecordQuery query);
    PageDTO<MwMedicalWasteBoxVO> transitDetailPageList(TransitRecordQuery query);
    /**
     * 转运记录导出
medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java
@@ -230,7 +230,7 @@
            List<TransformVO> checkoutRecordVOList = mwCheckoutRecordService.getCheckoutRecordList(query, region.getTreeCode());
            if (CollUtils.isNotEmpty(checkoutRecordVOList)) {
                //查询医废类型
                List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList()).list();
                List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList()).orderByDesc(SysDictData::getDictCode).list();
                if (CollUtils.isNotEmpty(wasteTypeList)) {
                    vo.setLegend(wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList()));
                    vo.getLegend().add("小计");
medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwCheckoutRecordServiceImpl.java
@@ -16,6 +16,7 @@
import com.sinata.system.domain.query.MwCheckoutRecordItemQuery;
import com.sinata.system.domain.query.MwTransitRecordQuery;
import com.sinata.system.domain.query.TransformQuery;
import com.sinata.system.domain.query.TransitRecordQuery;
import com.sinata.system.domain.vo.MwCheckoutRecordExcelVO;
import com.sinata.system.domain.vo.MwCheckoutRecordVO;
import com.sinata.system.domain.vo.MwCollectRecordVO;
@@ -33,7 +34,6 @@
import java.io.IOException;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.util.Collections;
import java.util.List;
/**
@@ -171,8 +171,8 @@
     * @return
     */
    @Override
    public MwTransitRecordVO transitDetail(Long id) {
        return baseMapper.transitDetail(id);
    public MwTransitRecordVO transitDetail(TransitRecordQuery query) {
        return baseMapper.transitDetail(query);
    }
    /**
@@ -182,8 +182,8 @@
     * @return
     */
    @Override
    public PageDTO<MwMedicalWasteBoxVO> transitDetailPageList(MwTransitRecordQuery query) {
        Page<MwMedicalWasteBoxVO> page = baseMapper.transitDetailPageList(new Page<>(query.getPageCurr(), query.getPageSize()), query.getId());
    public PageDTO<MwMedicalWasteBoxVO> transitDetailPageList(TransitRecordQuery query) {
        Page<MwMedicalWasteBoxVO> page = baseMapper.transitDetailPageList(new Page<>(query.getPageCurr(), query.getPageSize()), query);
        return PageDTO.of(page);
    }
medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java
@@ -214,7 +214,7 @@
        vo.setLegend(wasteTypeList.stream().map(SysDictDataVO::getDictLabel).collect(Collectors.toList()));
        vo.getLegend().add("小计");
        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
        List<SysDictData> medicalWasteTypeList = sysDictDataService.lambdaQuery().eq(SysDictData::getDictType, "medical_waste_type").list();
        List<SysDictData> medicalWasteTypeList = sysDictDataService.lambdaQuery().eq(SysDictData::getDictType, "medical_waste_type").orderByDesc(SysDictData::getDictCode).list();
        List<MwMicroEquipmentStaticsVO> staticsData = baseMapper.getStaticsData(query, treeCode);
        SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD_HH_MM_SS);
@@ -230,32 +230,30 @@
                break;
        }
        List<String> dateList = DateUtils.getDayBetween(query.getStartTime(), query.getEndTime(), query.getDateType());
        if (CollUtils.isNotEmpty(staticsData)) {
            List<DepartmentReportItemVO> result = new ArrayList<>();
            for (String date : dateList) {
                DepartmentReportItemVO departmentReportItemVO = new DepartmentReportItemVO();
                departmentReportItemVO.setName(date);
                departmentReportItemVO.setData(new ArrayList<>());
                SimpleDateFormat finalSdf = sdf;
                BigDecimal totalWeight = BigDecimal.ZERO;
                BigDecimal totalCount = BigDecimal.ZERO;
                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.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
                    long count = staticsData.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode())
                            && finalSdf.format(e.getUseTime()).equals(date)).count();
                    departmentReportItemVO.getData().add(weight);
                    departmentReportItemVO.getData().add(BigDecimal.valueOf(count));
                    totalWeight = totalWeight.add(weight);
                    totalCount = totalCount.add(BigDecimal.valueOf(count));
                }
                departmentReportItemVO.getData().add(totalWeight);
                departmentReportItemVO.getData().add(totalCount);
                result.add(departmentReportItemVO);
        List<DepartmentReportItemVO> result = new ArrayList<>();
        for (String date : dateList) {
            DepartmentReportItemVO departmentReportItemVO = new DepartmentReportItemVO();
            departmentReportItemVO.setName(date);
            departmentReportItemVO.setData(new ArrayList<>());
            SimpleDateFormat finalSdf = sdf;
            BigDecimal totalWeight = BigDecimal.ZERO;
            BigDecimal totalCount = BigDecimal.ZERO;
            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.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
                long count = staticsData.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode())
                        && finalSdf.format(e.getUseTime()).equals(date)).count();
                departmentReportItemVO.getData().add(weight);
                departmentReportItemVO.getData().add(BigDecimal.valueOf(count));
                totalWeight = totalWeight.add(weight);
                totalCount = totalCount.add(BigDecimal.valueOf(count));
            }
            vo.setList(result);
            departmentReportItemVO.getData().add(totalWeight);
            departmentReportItemVO.getData().add(totalCount);
            result.add(departmentReportItemVO);
        }
        vo.setList(result);
        return vo;
    }
medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDepartmentServiceImpl.java
@@ -783,6 +783,7 @@
                .like(StringUtils.isNotBlank(query.getContactPerson()), SysDepartment::getContactPerson, query.getContactPerson())
                .like(StringUtils.isNotBlank(query.getContactPhone()), SysDepartment::getContactPhone, query.getContactPhone())
                .eq(SysDepartment::getOrgType, DepartmentEnum.REGULATORY_UNIT.getCode())
                .orderByDesc(SysDepartment::getCreateTime)
                .page(new Page<>(query.getPageCurr(), query.getPageSize()));
        return PageDTO.of(page, RegulatoryUnitVO.class);
    }
medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDictDataServiceImpl.java
@@ -171,7 +171,7 @@
    @Nullable
    private List<SysDictDataVO> getSysDictDataVOListByType(String dictType) {
        List<SysDictData> medicalWasteTypeList = lambdaQuery().eq(SysDictData::getDictType, dictType).list();
        List<SysDictData> medicalWasteTypeList = lambdaQuery().eq(SysDictData::getDictType, dictType).orderByDesc(SysDictData::getDictCode).list();
        return BeanUtils.copyToList(medicalWasteTypeList, SysDictDataVO.class);
    }
medicalWaste-system/src/main/resources/mapper/system/MwApplicationMapper.xml
@@ -68,6 +68,7 @@
                AND MA.PHONE LIKE CONCAT('%',#{query.phone},'%')
            </if>
        </where>
        ORDER BY MA.CREATE_TIME DESC
    </select>
    <select id="detail" resultType="com.sinata.system.domain.vo.MwApplicationVO">
        SELECT MA.ID,
medicalWaste-system/src/main/resources/mapper/system/MwCheckoutRecordMapper.xml
@@ -117,86 +117,156 @@
        ORDER BY mcr2.CREATE_TIME DESC
    </select>
    <select id="transitPageList" resultType="com.sinata.system.domain.vo.MwTransitRecordVO">
        SELECT
        MTRC.ROUTE_ID AS id,
        SELECT ID,
        CAR_ID,
        DEPARTMENT_NAME,
        LICENSE_PLATE_NUMBER,
        NICK_NAME,
        SUM(WEIGHT) AS weight,
        COUNT(COLLECT_RECORD_ID) AS bagNum,
        RECEIVE_TIME AS endTime,
        transitDate,
        STATUS,
        DEL_FLAG,
        MIN(BOX_TIME) AS startTime,
        COUNT(DISTINCT BOX_NUMBER) AS boxNum
        FROM (SELECT DISTINCT MTR.ID,
        MCR2.CAR_ID,
        SD.DEPARTMENT_NAME,
        MTC.LICENSE_PLATE_NUMBER,
        SU.NICK_NAME,
        SUM(MCR.BOX_NUM) AS boxNum,
        SUM(MCR.TOTAL_WEIGHT) AS weight,
        MIN(MCR2.BOX_TIME) AS startTime,
        MDR.RECEIVE_TIME AS endTime,
        MCR2.STATUS
        FROM MW_CHECKOUT_RECORD MCR
        LEFT JOIN MW_CHECKOUT_RECORD_ITEM MCRI ON MCRI.CHECKOUT_RECORD_ID = MCR.ID
        MCR2.BOX_NUM,
        MCR.BOX_TIME,
        MCR2.TOTAL_WEIGHT,
        MDR.RECEIVE_TIME,
        MCR.STATUS,
        TRUNC(MCR2.CHECKOUT_TIME) AS transitDate,
        SD.TREE_CODE,
        MCR.ID AS COLLECT_RECORD_ID,
        MCR.WEIGHT,
        MCR2.DEL_FLAG,
        MCR.BOX_NUMBER
        FROM MW_CHECKOUT_RECORD MCR2
        LEFT JOIN MW_CHECKOUT_RECORD_ITEM MCRI
        ON MCRI.CHECKOUT_RECORD_ID = MCR2.ID
        LEFT JOIN MW_COLLECT_RECORD MCR
        ON MCR.ID = MCRI.COLLECT_RECORD_ID
        LEFT JOIN MW_DISPOSAL_RECORD_ITEM MDRI ON MDRI.COLLECT_RECORD_ID = MCRI.COLLECT_RECORD_ID
        LEFT JOIN MW_DISPOSAL_RECORD MDR ON MDR.ID = MDRI.DISPOSAL_RECORD_ID
        LEFT JOIN MW_COLLECT_RECORD MCR2 ON MCRI.COLLECT_RECORD_ID = MCR2.ID
        LEFT JOIN MW_TRANSIT_CAR MTC ON MCR.CAR_ID = MTC.ID
        LEFT JOIN SYS_USER SU ON MCR.DRIVER_ID = SU.USER_ID
        LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MDR.DEPARTMENT_ID
        LEFT JOIN MW_TRANSIT_ROUTE_CAR MTRC ON MTRC.CAR_ID = MCR.CAR_ID
        LEFT JOIN (SELECT * FROM MW_TRANSIT_ROUTE GROUP BY DEPARTMENT_ID) MTR
        ON MTR.DEPARTMENT_ID = MDR.DEPARTMENT_ID) AS T
        <where>
            MCR.DEL_FLAG = 0
            T.DEL_FLAG = 0
            <if test="treeCode != null and treeCode != null">
                AND SD.TREE_CODE LIKE CONCAT(#{treeCode},'%')
                AND T.TREE_CODE LIKE CONCAT(#{treeCode},'%')
            </if>
            <if test="query.licensePlateNumber != null and query.licensePlateNumber != ''">
                AND MTC.LICENSE_PLATE_NUMBER LIKE CONCAT('%',#{query.licensePlateNumber},'%')
                AND T.LICENSE_PLATE_NUMBER LIKE CONCAT('%',#{query.licensePlateNumber},'%')
            </if>
            <if test="query.status != null">
                AND MCR2.STATUS = #{query.status}
            <if test="query.status != null and (query.status == 3 or query.status == 4)">
                AND T.STATUS in(3,4)
            </if>
            <if test="query.startTimeStart != null and query.startTimeEnd != null">
                AND MCR2.BOX_TIME BETWEEN #{query.startTimeStart} AND #{query.startTimeEnd}
                AND T.BOX_TIME BETWEEN #{query.startTimeStart} AND #{query.startTimeEnd}
            </if>
            <if test="query.endTimeStart != null and query.endTimeEnd != null">
                AND MDR.RECEIVE_TIME BETWEEN #{query.endTimeStart} AND #{query.endTimeEnd}
                AND T.RECEIVE_TIME BETWEEN #{query.endTimeStart} AND #{query.endTimeEnd}
            </if>
        </where>
        GROUP BY MTRC.ROUTE_ID
        ORDER BY startTime DESC
        GROUP BY T.transitDate, T.ID, T.CAR_ID, T.NICK_NAME
        ORDER BY T.transitDate DESC
    </select>
    <select id="transitDetail" resultType="com.sinata.system.domain.vo.MwTransitRecordVO">
        SELECT
        MTRC.ROUTE_ID AS id,
        MDR.DISPOSAL_UNIT_NAME AS departmentName,
        SELECT ID,
        CAR_ID,
        DEPARTMENT_NAME,
        LICENSE_PLATE_NUMBER,
        NICK_NAME,
        SUM(WEIGHT) AS weight,
        COUNT(COLLECT_RECORD_ID) AS bagNum,
        RECEIVE_TIME AS endTime,
        transitDate,
        STATUS
        FROM (SELECT DISTINCT MTR.ID,
        MCR2.CAR_ID,
        SD.DEPARTMENT_NAME,
        MTC.LICENSE_PLATE_NUMBER,
        SU.NICK_NAME,
        SUM(MCR.BOX_NUM) AS boxNum,
        SUM(MCR2.WEIGHT) AS weight,
        MIN(MCR2.BOX_TIME) AS startTime,
        MDR.RECEIVE_TIME AS endTime
        FROM MW_CHECKOUT_RECORD MCR
        LEFT JOIN MW_CHECKOUT_RECORD_ITEM MCRI ON MCRI.CHECKOUT_RECORD_ID = MCR.ID
        MCR2.BOX_NUM,
        MCR.BOX_TIME,
        MCR2.TOTAL_WEIGHT,
        MDR.RECEIVE_TIME,
        MCR.STATUS,
        TRUNC(MCR2.CHECKOUT_TIME) AS transitDate,
        SD.TREE_CODE,
        MCR.ID AS COLLECT_RECORD_ID,
        MCR.WEIGHT
        FROM MW_CHECKOUT_RECORD MCR2
        LEFT JOIN MW_CHECKOUT_RECORD_ITEM MCRI
        ON MCRI.CHECKOUT_RECORD_ID = MCR2.ID
        LEFT JOIN MW_COLLECT_RECORD MCR
        ON MCR.ID = MCRI.COLLECT_RECORD_ID
        LEFT JOIN MW_DISPOSAL_RECORD_ITEM MDRI ON MDRI.COLLECT_RECORD_ID = MCRI.COLLECT_RECORD_ID
        LEFT JOIN MW_DISPOSAL_RECORD MDR ON MDR.ID = MDRI.DISPOSAL_RECORD_ID
        LEFT JOIN MW_COLLECT_RECORD MCR2 ON MCRI.COLLECT_RECORD_ID = MCR2.ID
        LEFT JOIN MW_TRANSIT_CAR MTC ON MCR.CAR_ID = MTC.ID
        LEFT JOIN SYS_USER SU ON MCR.DRIVER_ID = SU.USER_ID
        LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MDR.DEPARTMENT_ID
        LEFT JOIN MW_TRANSIT_ROUTE_CAR MTRC ON MTRC.CAR_ID = MCR.CAR_ID
        LEFT JOIN (SELECT * FROM MW_TRANSIT_ROUTE GROUP BY DEPARTMENT_ID) MTR
        ON MTR.DEPARTMENT_ID = MDR.DEPARTMENT_ID) AS T
        <where>
            MCR.DEL_FLAG = 0 AND MTRC.ROUTE_ID = #{id}
            T.ID = #{query.id} AND T.CAR_ID = #{query.carId} AND T.transitDate = #{query.transitDate}
        </where>
        GROUP BY MTRC.ROUTE_ID
    </select>
    <select id="transitDetailPageList" resultType="com.sinata.system.domain.vo.MwMedicalWasteBoxVO">
        SELECT MCR2.HOSPITAL_NAME,
               MCR2.BOX_NUMBER,
               MCR2.WASTE_TYPE_STR,
               COUNT(MCR2.ID)         AS bagNum,
               SUM(MCR2.WEIGHT)       AS totalWeight,
               MAX(MCR.CHECKOUT_TIME) AS latestCheckoutTime
        FROM MW_TRANSIT_ROUTE_CAR MTRC
        INNER JOIN MW_CHECKOUT_RECORD MCR on MTRC.CAR_ID = MCR.CAR_ID
                 LEFT JOIN MW_CHECKOUT_RECORD_ITEM MCRI on MCR.ID = MCRI.CHECKOUT_RECORD_ID
                 LEFT JOIN MW_COLLECT_RECORD MCR2 ON MCR2.ID = MCRI.COLLECT_RECORD_ID
        SELECT ID,
        CAR_ID,
        DEPARTMENT_NAME,
        LICENSE_PLATE_NUMBER,
        NICK_NAME,
        COUNT(COLLECT_RECORD_ID) AS bagNum,
        SUM(WEIGHT) AS totalWeight,
        RECEIVE_TIME AS endTime,
        transitDate,
        STATUS,CHECK_OUT_ID,
        HOSPITAL_NAME,
        BOX_NUMBER,
        WASTE_TYPE_STR
        FROM (SELECT DISTINCT MTR.ID,
        MCR2.CAR_ID,
        SD.DEPARTMENT_NAME,
        MTC.LICENSE_PLATE_NUMBER,
        SU.NICK_NAME,
        MCR.BOX_TIME,
        MDR.RECEIVE_TIME,
        MCR.STATUS,
        TRUNC(MCR2.CHECKOUT_TIME) AS transitDate,
        SD.TREE_CODE,
        MCR2.ID AS CHECK_OUT_ID,
        MCR.ID AS COLLECT_RECORD_ID,
        MCR.WEIGHT,
        MCR.HOSPITAL_NAME,
        MCR.BOX_NUMBER,
        MCR.WASTE_TYPE_STR
        FROM MW_CHECKOUT_RECORD MCR2
        LEFT JOIN MW_CHECKOUT_RECORD_ITEM MCRI
        ON MCRI.CHECKOUT_RECORD_ID = MCR2.ID
        LEFT JOIN MW_COLLECT_RECORD MCR
        ON MCR.ID = MCRI.COLLECT_RECORD_ID
        LEFT JOIN MW_DISPOSAL_RECORD_ITEM MDRI ON MDRI.COLLECT_RECORD_ID = MCRI.COLLECT_RECORD_ID
        LEFT JOIN MW_DISPOSAL_RECORD MDR ON MDR.ID = MDRI.DISPOSAL_RECORD_ID
        LEFT JOIN MW_TRANSIT_CAR MTC ON MCR.CAR_ID = MTC.ID
        LEFT JOIN SYS_USER SU ON MCR.DRIVER_ID = SU.USER_ID
        LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MDR.DEPARTMENT_ID
        LEFT JOIN (SELECT * FROM MW_TRANSIT_ROUTE GROUP BY DEPARTMENT_ID) MTR
        ON MTR.DEPARTMENT_ID = MDR.DEPARTMENT_ID) AS T
        <where>
            MTRC.ROUTE_ID = #{id}
            T.ID = #{query.id}
            AND T.CAR_ID = #{query.carId}
            AND T.transitDate = #{query.transitDate}
        </where>
        GROUP BY MCR2.BOX_ID
        ORDER BY latestCheckoutTime DESC
    </select>
    <select id="hospitalTransitList" resultType="com.sinata.system.domain.vo.MwCheckoutRecordVO">
        SELECT mcr.ID,
@@ -330,6 +400,7 @@
            </if>
        </where>
        GROUP BY MCR2.BOX_NUMBER
        ORDER BY MCR.CHECKOUT_TIME
    </select>
    <select id="getRegulationReportList" resultType="com.sinata.system.domain.vo.MwCollectRecordVO">
        SELECT MCR2.ID,
medicalWaste-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -127,7 +127,7 @@
        GROUP BY
        r.ROLE_ID, r.ROLE_NAME, r.ROLE_KEY, r.ROLE_SORT, r.STATUS, r.DEL_FLAG, r.CREATE_BY, r.CREATE_TIME, r.UPDATE_BY,
        r.UPDATE_TIME, r.REMARK, r.MANAGE_ROLE_ID_STR
        ORDER BY r.CREATE_TIME DESC
        ORDER BY r.ROLE_ID DESC
    </select>
    <insert id="insertRole" parameterType="SysRole" useGeneratedKeys="true" keyProperty="roleId">