medicalWaste-admin/src/main/java/com/sinata/web/controller/applet/MwDisposalHandleRecordController.java
New file @@ -0,0 +1,18 @@ package com.sinata.web.controller.applet; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * 前端控制器 * </p> * * @author mitao * @since 2024-12-27 */ @RestController @RequestMapping("/applet/mwDisposalHandleRecord") public class MwDisposalHandleRecordController { } medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/MwWarningConfigController.java
@@ -1,7 +1,22 @@ package com.sinata.web.controller.backend; import com.sinata.common.core.domain.R; import com.sinata.system.domain.dto.MwWarningConfigDTO; import com.sinata.system.domain.vo.MwWarningConfigVO; import com.sinata.system.service.MwWarningConfigService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.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 +26,36 @@ * @author mitao * @since 2024-12-02 */ @Validated @RestController @Api(tags = {"预警配置相关接口"}) @RequiredArgsConstructor @RequestMapping("/backend/mwWarningConfig") public class MwWarningConfigController { private final MwWarningConfigService mwWarningConfigService; /** * 保存设置 * * @param dto * @return */ @ApiOperation("保存设置") @PostMapping("/save") public R<?> save(@Valid @RequestBody MwWarningConfigDTO dto) { mwWarningConfigService.saveConfig(dto); return R.ok(); } /** * 根据类型获取配置信息 * * @param type * @return */ @ApiOperation("根据类型获取配置信息") @GetMapping("/{type}") public R<MwWarningConfigVO> getByType(@ApiParam(name = "type", value = "配置类型", required = true) @PathVariable("type") Integer type) { return R.ok(mwWarningConfigService.getByType(type)); } } medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/StaticsController.java
New file @@ -0,0 +1,142 @@ package com.sinata.web.controller.backend; import com.sinata.common.core.domain.R; import com.sinata.system.domain.MedicalWasteStaticsVO; import com.sinata.system.domain.SysDepartment; import com.sinata.system.domain.query.DisposalReportQuery; import com.sinata.system.domain.query.HospitalReportQuery; import com.sinata.system.domain.query.TransformQuery; import com.sinata.system.domain.vo.DepartmentReportVO; import com.sinata.system.service.biz.StaticsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.io.IOException; import java.util.List; /** * @author mitao * @date 2024/12/25 */ @RestController @Api(tags = {"统计分析相关接口"}) @RequiredArgsConstructor @RequestMapping("/statics") public class StaticsController { private final StaticsService staticsService; /** * 机构分布-获取机构列表 * * @param type 1:全部 2:医院 3:处置单位 * @return */ //@ApiOperation("机构分布-获取机构列表 1:全部 2:医院 3:处置单位") @GetMapping(value = "/departmentList/{type}") public R<List<SysDepartment>> departmentList(@ApiParam(name = "type", value = "机构类型", required = true) @PathVariable(value = "type") Integer type) { return R.ok(staticsService.departmentList(type)); } //@ApiOperation("医疗监管-医废统计") @GetMapping("/medicalWaste") public R<MedicalWasteStaticsVO> medicalWaste() { return R.ok(staticsService.medicalWaste()); } /** * 医院报表 * * @param query * @return */ @ApiOperation("医院报表") @PostMapping("/hospitalReport") public R<DepartmentReportVO> hospitalReport(@Valid @RequestBody HospitalReportQuery query) { return R.ok(staticsService.hospitalReport(query)); } /** * 医院报表-导出 * * @param query */ @ApiOperation("医院报表-导出") @PostMapping("/hospitalReportExport") public void hospitalReportExport(@Valid @RequestBody HospitalReportQuery query) { try { staticsService.hospitalReportExport(query); } catch (IOException e) { throw new RuntimeException(e); } } /** * 转运联单 * * @param query * @return */ @ApiOperation("转运联单") @PostMapping("/transformList") public R<DepartmentReportVO> transformList(@Valid @RequestBody TransformQuery query) { return R.ok(staticsService.transformList(query)); } /** * 转运联单导出 * * @param query */ @ApiOperation("转运联单导出") @PostMapping("/transformListExport") public void transformListExport(@Valid @RequestBody TransformQuery query) { try { staticsService.transformListExport(query); } catch (IOException e) { throw new RuntimeException(e); } } /** * 处置报表 * * @param query * @return */ @ApiOperation("处置报表") @PostMapping("/disposalReport") public R<DepartmentReportVO> disposalReport(@Valid @RequestBody DisposalReportQuery query) { return R.ok(staticsService.disposalReport(query)); } /** * 处置报表导出 * * @param query * @return */ @ApiOperation("处置报表导出") @PostMapping("/disposalReportExport") public void disposalReportExport(@Valid @RequestBody DisposalReportQuery query) { try { staticsService.disposalReportExport(query); } catch (IOException e) { throw new RuntimeException(e); } } @ApiOperation("监管报表") @PostMapping("/regulationReport") public R<DepartmentReportVO> regulationReport(@Valid @RequestBody DisposalReportQuery query) { return R.ok(staticsService.regulationReport(query)); } } medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysDictDataController.java
@@ -88,6 +88,50 @@ dictDataService.removeById(dictCode); return R.ok(); } /** * 医废类型列表 * * @return */ @ApiOperation("医废类型列表") @GetMapping("/medicalWasteTypeList") public R<List<SysDictDataVO>> medicalWasteTypeList() { return R.ok(dictDataService.medicalWasteTypeList()); } /** * 器具类型列表 * * @return */ @ApiOperation("器具类型列表") @GetMapping("/equipmentTypeList") public R<List<SysDictDataVO>> equipmentTypeList() { return R.ok(dictDataService.equipmentTypeList()); } /** * 规章制度类型列表 * * @return */ @ApiOperation("规章制度类型列表") @GetMapping("/regulationsTypeList") public R<List<SysDictDataVO>> regulationsTypeList() { return R.ok(dictDataService.regulationsTypeList()); } /** * 作业类型 * * @return */ @ApiOperation("作业类型") @GetMapping("/workTypeList") public R<List<SysDictDataVO>> workTypeList() { return R.ok(dictDataService.workTypeList()); } @PreAuthorize("@ss.hasPermi('system:dict:list')") @GetMapping("/list") public TableDataInfo list(SysDictData dictData) medicalWaste-admin/src/test/java/MybatisPlusGeneraotr.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine; import com.sinata.common.entity.BaseModel; import org.junit.jupiter.api.Test; public class MybatisPlusGeneraotr { @@ -47,7 +48,7 @@ builder // 在这里添加数据库表名 //.addInclude("MW_BOX") .addInclude("SYS_AGREEMENT")// 设置需要生成的表名,多个表之间可以用逗号隔开 .addInclude("MW_DISPOSAL_HANDLE_RECORD")// 设置需要生成的表名,多个表之间可以用逗号隔开 // .addExclude("BBZQ_USER","BBZQ_USER_LOG") .controllerBuilder().enableRestStyle() // controller配置策略 .serviceBuilder().formatServiceFileName("%sService") // service配置策略 @@ -56,7 +57,7 @@ //.logicDeleteColumnName("del_flag") // 逻辑删除字段名 .naming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略,下划线转驼峰 .columnNaming(NamingStrategy.underline_to_camel) // 数据库表字段映射的命名策略,下划线转驼峰 //.superClass(BaseModel.class) .superClass(BaseModel.class) //.addTableFills( // 添加表字段填充,"create_time"自动填充为插入时间,"update_time"自动填充为修改时间 // new Column("create_time", FieldFill.INSERT), // new Column("create_by", FieldFill.INSERT), medicalWaste-system/src/main/java/com/sinata/system/domain/MedicalWasteStaticsVO.java
New file @@ -0,0 +1,23 @@ package com.sinata.system.domain; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @author mitao * @date 2024/12/25 */ @Data @ApiModel("医废统计视图对象") public class MedicalWasteStaticsVO { @ApiModelProperty("今日收集-重量") private BigDecimal todayCollectWeight; @ApiModelProperty("今日收集-袋数") private Integer todayCollectBagNum; } medicalWaste-system/src/main/java/com/sinata/system/domain/MwCollectRecord.java
@@ -59,7 +59,7 @@ @ApiModelProperty("医废类型(数据字典id)") @TableField("WASTE_TYPE") private Integer wasteType; private Long wasteType; @ApiModelProperty("医废类型名称(冗余)") @TableField("WASTE_TYPE_STR") @@ -93,5 +93,9 @@ @TableField("COLLECT_TIME") private Date collectTime; @ApiModelProperty("处置记录id") @TableField("DISPOSAL_HANDLE_RECORD_ID") private Long disposalHandleRecordId; } medicalWaste-system/src/main/java/com/sinata/system/domain/MwDisposalHandleRecord.java
New file @@ -0,0 +1,56 @@ package com.sinata.system.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.sinata.common.entity.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.util.Date; /** * <p> * * </p> * * @author mitao * @since 2024-12-27 */ @Getter @Setter @TableName("MW_DISPOSAL_HANDLE_RECORD") @ApiModel(value = "MwDisposalHandleRecord对象", description = "处置记录") public class MwDisposalHandleRecord extends BaseModel { private static final long serialVersionUID = 1L; @ApiModelProperty("主键ID") @TableId(value = "ID", type = IdType.AUTO) private Long id; @ApiModelProperty("区域ID(处置单位ID)") @TableField("DEPARTMENT_ID") private Long departmentId; @ApiModelProperty("处置单位名称") @TableField("DISPOSAL_UNIT_NAME") private String disposalUnitName; @ApiModelProperty("处置时间") @TableField("DISPOSAL_TIME") private Date disposalTime; @ApiModelProperty("处置用户ID") @TableField("DISPOSAL_USER_ID") private Long disposalUserId; @ApiModelProperty("处置接收记录ID") @TableField("DISPOSAL_RECORD_ID") private Long disposalRecordId; } medicalWaste-system/src/main/java/com/sinata/system/domain/MwDisposalRecordItem.java
@@ -9,6 +9,8 @@ import lombok.Getter; import lombok.Setter; import java.util.Date; /** * <p> * 处置接收记录项 @@ -35,5 +37,17 @@ @TableField("DISPOSAL_RECORD_ID") private Long disposalRecordId; @ApiModelProperty("是否处置 1:是 0:否") @TableField("DISPOSAL_FLAG") private Integer disposalFlag; @ApiModelProperty("处置时间") @TableField("DISPOSAL_TIME") private Date disposalTime; @ApiModelProperty("处置人id") @TableField("DISPOSAL_USER_ID") private Long disposalUserId; } medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwWarningConfigDTO.java
New file @@ -0,0 +1,38 @@ package com.sinata.system.domain.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; import java.util.List; /** * @author mitao * @date 2024/12/25 */ @Data @ApiModel("预警配置数据传输对象") public class MwWarningConfigDTO { @ApiModelProperty("预警配置id") private Long id; @ApiModelProperty("预警类型 1:医疗废物预警 2:合同预警 3:人员预警 4:职业防护预警 5:入库暂存间存储容量预警") @NotNull(message = "预警类型不能为空") private Integer type; @ApiModelProperty("配置值") private String value; @ApiModelProperty("人员是否需要健康证明 1:是 0:否") private Integer healthFlag; @ApiModelProperty("人员是否需要疫苗记录证明 1:是 0:否") private Integer vaccineFlag; @ApiModelProperty("防护器具使用预警 1:是 0:否") private Integer protectionFlag; @ApiModelProperty(value = "预警配置列表", notes = "医疗废物预警、入库暂存间存储容量预警") private List<MwWarningConfigItemDTO> warningConfigItemList; } medicalWaste-system/src/main/java/com/sinata/system/domain/dto/MwWarningConfigItemDTO.java
New file @@ -0,0 +1,29 @@ package com.sinata.system.domain.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author mitao * @date 2024/12/25 */ @Data @ApiModel("预警配置项数据传输对象") public class MwWarningConfigItemDTO { @ApiModelProperty("预警配置项id") private Long id; @ApiModelProperty("预警配置id") private Long configId; @ApiModelProperty("医废类型") private Long wasteType; @ApiModelProperty("预警值") private Integer value; @ApiModelProperty("提示内容") private String promptContent; } medicalWaste-system/src/main/java/com/sinata/system/domain/query/DisposalReportQuery.java
New file @@ -0,0 +1,38 @@ 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; import java.util.List; /** * @author mitao * @date 2024/12/26 */ @Data @ApiModel("处置报表查询数据传输对象") public class DisposalReportQuery { @ApiModelProperty("部门id") @NotNull(message = "部门id不能为空") private Long departmentId; @ApiModelProperty("统计方式(1=日期统计,2=月度统计,3=年度统计)") @NotNull(message = "统计方式不能为空") private Integer dateType; @ApiModelProperty("开始时间") @NotNull(message = "开始时间不能为空") private Date startTime; @ApiModelProperty("结束时间") @NotNull(message = "结束时间不能为空") private Date endTime; @ApiModelProperty(value = "医废类型id列表") @NotNull(message = "医废类型id列表不能为空") private List<Long> wasteTypeCodeList; } medicalWaste-system/src/main/java/com/sinata/system/domain/query/HospitalReportQuery.java
New file @@ -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/25 */ @Data @ApiModel("医院报表查询数据传输对象") public class HospitalReportQuery { @ApiModelProperty("医院id") @NotNull(message = "医院id不能为空") private Long departmentId; @ApiModelProperty("统计方式(1=日期统计,2=月度统计,3=年度统计)") @NotNull(message = "统计方式不能为空") private Integer dateType; @ApiModelProperty("开始时间") @NotNull(message = "开始时间不能为空") private Date startTime; @ApiModelProperty("结束时间") @NotNull(message = "结束时间不能为空") private Date endTime; @ApiModelProperty("统计环节 1:入库 2:出库") @NotNull(message = "统计环节不能为空") private Integer reportType; } medicalWaste-system/src/main/java/com/sinata/system/domain/query/MwBusinessDeviceQuery.java
@@ -23,7 +23,6 @@ @ApiModelProperty("设备编号") private String deviceNumber; @ApiModelProperty("设备名称") private String deviceName; medicalWaste-system/src/main/java/com/sinata/system/domain/query/TransformQuery.java
New file @@ -0,0 +1,34 @@ 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; import java.util.List; /** * @author mitao * @date 2024/12/25 */ @Data @ApiModel("转运联单查询数据传输对象") public class TransformQuery { @ApiModelProperty("处置单位id") @NotNull(message = "处置单位id不能为空") private Long departmentId; @ApiModelProperty("开始时间") @NotNull(message = "开始时间不能为空") private Date startTime; @ApiModelProperty("结束时间") @NotNull(message = "结束时间不能为空") private Date endTime; @ApiModelProperty(value = "医废类型id列表") @NotNull(message = "医废类型id列表不能为空") private List<Long> wasteTypeCodeList; } medicalWaste-system/src/main/java/com/sinata/system/domain/vo/DepartmentReportItemVO.java
New file @@ -0,0 +1,35 @@ 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; import java.util.List; @Data @ApiModel public class DepartmentReportItemVO { private Integer key; @ApiModelProperty("名称") private String name; @ApiModelProperty("数据") private List<BigDecimal> data; @ApiModelProperty("是否超时") private String overTimeFlag; @ApiModelProperty("机构人员签字") private String hospitalSignature; @ApiModelProperty("运输人员签字") private String driverName; @ApiModelProperty("交接时间") private Date handoverTime; } medicalWaste-system/src/main/java/com/sinata/system/domain/vo/DepartmentReportVO.java
New file @@ -0,0 +1,19 @@ package com.sinata.system.domain.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel("医院报表视图对象") public class DepartmentReportVO { @ApiModelProperty("类别") private List<String> legend; @ApiModelProperty("列表") private List<DepartmentReportItemVO> list; } medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwCollectRecordVO.java
@@ -41,7 +41,7 @@ private String boxNumber; @ApiModelProperty("医废类型(数据字典id)") private Integer wasteType; private Long wasteType; @ApiModelProperty("医废类型名称") @ExcelProperty(value = "医废类型", index = 5) medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwDisposalRecordItemVO.java
@@ -13,6 +13,7 @@ @Data @ApiModel("处置详情视图对象") public class MwDisposalRecordItemVO { @ApiModelProperty("箱号") private String boxNumber; medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwDisposalRecordReportVO.java
New file @@ -0,0 +1,37 @@ 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 * @date 2024/12/26 */ @Data @ApiModel("处置报表视图对象") public class MwDisposalRecordReportVO { @ApiModelProperty("医废收集记录id") private Long id; @ApiModelProperty("接收时间") private Date receiveTime; @ApiModelProperty("处置时间") private Date disposalTime; @ApiModelProperty("医废类型") private Long wasteType; @ApiModelProperty("重量") private BigDecimal weight; @ApiModelProperty("医废状态 1:暂存中 2:运输中 3:已接收 4:已处置") private Integer status; } medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwMedicalWasteBoxVO.java
@@ -26,6 +26,9 @@ @ApiModelProperty("暂存间名称") private String roomName; @ApiModelProperty("医废类型") private Long wasteType; @ApiModelProperty("医废类型名称") private String wasteTypeStr; medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwWarningConfigItemVO.java
New file @@ -0,0 +1,26 @@ package com.sinata.system.domain.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author mitao * @date 2024/12/25 */ @Data @ApiModel("预警配置项视图对象") public class MwWarningConfigItemVO { @ApiModelProperty("预警配置项id") private Long id; @ApiModelProperty("医废类型") private Long wasteType; @ApiModelProperty("预警值") private Integer value; @ApiModelProperty("提示内容") private String promptContent; } medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwWarningConfigVO.java
New file @@ -0,0 +1,37 @@ package com.sinata.system.domain.vo; import com.sinata.system.domain.dto.MwWarningConfigItemDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author mitao * @date 2024/12/25 */ @Data @ApiModel("预警配置视图对象") public class MwWarningConfigVO { @ApiModelProperty("预警配置id") private Long id; @ApiModelProperty("预警类型 1:医疗废物预警 2:合同预警 3:人员预警 4:职业防护预警 5:入库暂存间存储容量预警") private Integer type; @ApiModelProperty("配置值") private String value; @ApiModelProperty("人员是否需要健康证明 1:是 0:否") private Integer healthFlag; @ApiModelProperty("人员是否需要疫苗记录证明 1:是 0:否") private Integer vaccineFlag; @ApiModelProperty("防护器具使用预警 1:是 0:否") private Integer protectionFlag; @ApiModelProperty("预警配置列表") private List<MwWarningConfigItemVO> warningConfigItemList; } medicalWaste-system/src/main/java/com/sinata/system/domain/vo/TransformVO.java
New file @@ -0,0 +1,39 @@ package com.sinata.system.domain.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; import java.util.List; /** * @author mitao * @date 2024/12/26 */ @Data @ApiModel("转移联单视图对象") public class TransformVO { @ApiModelProperty("记录id") private Long id; @ApiModelProperty("医院名称") private String hospitalName; @ApiModelProperty("区域id(医院)") private Long departmentId; @ApiModelProperty("医院签名") private String hospitalSignature; @ApiModelProperty("司机姓名") private String driverName; @ApiModelProperty("交接时间") private Date checkoutTime; @ApiModelProperty("收集记录列表") private List<MwMedicalWasteBoxVO> collectRecordList; } medicalWaste-system/src/main/java/com/sinata/system/enums/WarningConfigTypeEnum.java
New file @@ -0,0 +1,26 @@ package com.sinata.system.enums; import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor public enum WarningConfigTypeEnum { MEDICAL_WASTE(1, "医疗废物预警"), CONTRACT(2, "合同预警"), STAFF(3, "人员预警"), PROTECTION_PERSONNEL(4, "职业防护预警"), STAGING_ROOM_CAPACITY(5, "入库暂存间存储容量预警"); private final Integer code; private final String desc; public static WarningConfigTypeEnum getEnumByCode(Integer code) { for (WarningConfigTypeEnum e : WarningConfigTypeEnum.values()) { if (e.code.equals(code)) { return e; } } return null; } } medicalWaste-system/src/main/java/com/sinata/system/mapper/MwCheckoutRecordMapper.java
@@ -1,13 +1,17 @@ package com.sinata.system.mapper; 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.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.vo.MwCheckoutRecordVO; import com.sinata.system.domain.vo.MwCollectRecordVO; import com.sinata.system.domain.vo.MwMedicalWasteBoxVO; import com.sinata.system.domain.vo.MwTransitRecordVO; import com.sinata.system.domain.vo.TransformVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -84,4 +88,22 @@ * @param treeCode */ List<MwCheckoutRecordVO> hospitalTransitList(@Param("query") CheckoutRecordQuery query, @Param("treeCode") String treeCode); /** * 转移联单数据 * * @param query * @param treeCode * @return */ List<TransformVO> getCheckoutRecordList(@Param("query") TransformQuery query, @Param("treeCode") String treeCode); /** * 监管报表医疗废物转移列表 * * @param query * @param treeCode * @return */ List<MwCollectRecordVO> getRegulationReportList(@Param("query") DisposalReportQuery query, @Param("treeCode") String treeCode); } medicalWaste-system/src/main/java/com/sinata/system/mapper/MwCollectRecordMapper.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.sinata.system.domain.MwCollectRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sinata.system.domain.query.DisposalReportQuery; import com.sinata.system.domain.query.MwCollectRecordQuery; import com.sinata.system.domain.vo.MedicalWasteProcessVO; import com.sinata.system.domain.vo.MwCollectRecordVO; @@ -52,4 +53,13 @@ * @return */ List<MwCollectRecordVO> getExportList(@Param("query") MwCollectRecordQuery query, @Param("treeCode") String treeCode); /** * 监管报表医疗废物产生列表 * * @param query * @param treeCode * @return */ List<MwCollectRecordVO> getRegulationReportList(@Param("query") DisposalReportQuery query, @Param("treeCode") String treeCode); } medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalHandleRecordMapper.java
New file @@ -0,0 +1,18 @@ package com.sinata.system.mapper; import com.sinata.system.domain.MwDisposalHandleRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; /** * <p> * Mapper 接口 * </p> * * @author mitao * @since 2024-12-27 */ @Mapper public interface MwDisposalHandleRecordMapper extends BaseMapper<MwDisposalHandleRecord> { } medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java
@@ -3,8 +3,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.sinata.system.domain.MwDisposalRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sinata.system.domain.query.DisposalReportQuery; import com.sinata.system.domain.query.MwDisposalRecordQuery; import com.sinata.system.domain.vo.MwCollectRecordVO; import com.sinata.system.domain.vo.MwDisposalRecordItemVO; import com.sinata.system.domain.vo.MwDisposalRecordReportVO; import com.sinata.system.domain.vo.MwDisposalRecordVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -48,4 +51,23 @@ * @return */ Page<MwDisposalRecordItemVO> pageDetail(Page<MwDisposalRecordItemVO> page, @Param("disposalRecordId") Long disposalRecordId); /** * 处置报表 * * @param query * @param type * @return */ List<MwDisposalRecordReportVO> disposalReportByType(@Param("query") DisposalReportQuery query, @Param("type") Integer type); /** * 监管报表医疗废物处置列表 * * @param query * @param treeCode * @return */ List<MwCollectRecordVO> getRegulationReportList(@Param("query") DisposalReportQuery query, @Param("treeCode") String treeCode); } medicalWaste-system/src/main/java/com/sinata/system/service/ISysDictDataService.java
@@ -72,4 +72,33 @@ * @param dto */ void save(SysDictDataDTO dto); /** * 医废类型列表 * * @return */ List<SysDictDataVO> medicalWasteTypeList(); /** * 器具类型列表 * * @return */ List<SysDictDataVO> equipmentTypeList(); /** * 规章制度类型列表 * * @return */ List<SysDictDataVO> regulationsTypeList(); /** * 作业类型 * * @return */ List<SysDictDataVO> workTypeList(); } medicalWaste-system/src/main/java/com/sinata/system/service/MwCheckoutRecordService.java
@@ -4,14 +4,19 @@ import com.sinata.common.entity.PageDTO; import com.sinata.system.domain.MwCheckoutRecord; import com.sinata.system.domain.query.CheckoutRecordQuery; import com.sinata.system.domain.query.DisposalReportQuery; 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.vo.MwCheckoutRecordVO; import com.sinata.system.domain.vo.MwCollectRecordVO; import com.sinata.system.domain.vo.MwMedicalWasteBoxVO; import com.sinata.system.domain.vo.MwTransitRecordVO; import com.sinata.system.domain.vo.TransformVO; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; /** * <p> @@ -77,4 +82,21 @@ * @param response */ void checkoutRecordExport(CheckoutRecordQuery query, HttpServletResponse response) throws IOException; /** * 转移联单数据 * * @param query * @param treeCode * @return */ List<TransformVO> getCheckoutRecordList(TransformQuery query, String treeCode); /** * 监管报表医疗废物转移列表 * * @param query * @return */ List<MwCollectRecordVO> getRegulationReportList(DisposalReportQuery query); } medicalWaste-system/src/main/java/com/sinata/system/service/MwCollectRecordService.java
@@ -4,12 +4,14 @@ import com.sinata.common.entity.PageDTO; import com.sinata.system.domain.MwCollectRecord; import com.sinata.system.domain.dto.MwCollectRecordDTO; import com.sinata.system.domain.query.DisposalReportQuery; import com.sinata.system.domain.query.MwCollectRecordQuery; import com.sinata.system.domain.vo.MedicalWasteProcessVO; import com.sinata.system.domain.vo.MwCollectRecordVO; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; /** * <p> @@ -51,5 +53,20 @@ */ MedicalWasteProcessVO getProcess(Long id); /** * 导出 * * @param query * @param response * @throws IOException */ void export(MwCollectRecordQuery query, HttpServletResponse response) throws IOException; /** * 监管报表医疗废物产生列表 * * @param query * @return */ List<MwCollectRecordVO> getRegulationReportList(DisposalReportQuery query); } medicalWaste-system/src/main/java/com/sinata/system/service/MwDisposalHandleRecordService.java
New file @@ -0,0 +1,16 @@ package com.sinata.system.service; import com.sinata.system.domain.MwDisposalHandleRecord; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 处置记录服务类 * </p> * * @author mitao * @since 2024-12-27 */ public interface MwDisposalHandleRecordService extends IService<MwDisposalHandleRecord> { } medicalWaste-system/src/main/java/com/sinata/system/service/MwDisposalRecordService.java
@@ -3,11 +3,16 @@ import com.sinata.common.entity.PageDTO; import com.sinata.system.domain.MwDisposalRecord; import com.baomidou.mybatisplus.extension.service.IService; import com.sinata.system.domain.query.DisposalReportQuery; import com.sinata.system.domain.query.MwDisposalRecordItemQuery; import com.sinata.system.domain.query.MwDisposalRecordQuery; import com.sinata.system.domain.vo.DisposalRecordStaticsVO; import com.sinata.system.domain.vo.MwCollectRecordVO; import com.sinata.system.domain.vo.MwDisposalRecordItemVO; import com.sinata.system.domain.vo.MwDisposalRecordReportVO; import com.sinata.system.domain.vo.MwDisposalRecordVO; import java.util.List; /** * <p> @@ -41,4 +46,21 @@ * @return */ PageDTO<MwDisposalRecordItemVO> detail(MwDisposalRecordItemQuery query); /** * 处置报表 * * @param query * @param type 1:接收 2:处置 * @return */ List<MwDisposalRecordReportVO> disposalReportByType(DisposalReportQuery query, Integer type); /** * 监管报表医疗废物处置列表 * * @param query * @return */ List<MwCollectRecordVO> getRegulationReportList(DisposalReportQuery query); } medicalWaste-system/src/main/java/com/sinata/system/service/MwWarningConfigService.java
@@ -2,6 +2,8 @@ import com.sinata.system.domain.MwWarningConfig; import com.baomidou.mybatisplus.extension.service.IService; import com.sinata.system.domain.dto.MwWarningConfigDTO; import com.sinata.system.domain.vo.MwWarningConfigVO; /** * <p> @@ -12,5 +14,19 @@ * @since 2024-12-02 */ public interface MwWarningConfigService extends IService<MwWarningConfig> { /** * 保存设置 * * @param dto * @return */ void saveConfig(MwWarningConfigDTO dto); /** * 根据类型获取配置信息 * * @param type * @return */ MwWarningConfigVO getByType(Integer type); } medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java
New file @@ -0,0 +1,495 @@ package com.sinata.system.service.biz; import cn.idev.excel.FastExcel; import com.alibaba.fastjson2.JSONObject; import com.google.common.collect.Lists; import com.sinata.common.core.domain.entity.SysDictData; import com.sinata.common.utils.CollUtils; import com.sinata.common.utils.DateUtils; import com.sinata.system.domain.MedicalWasteStaticsVO; import com.sinata.system.domain.MwCollectRecord; import com.sinata.system.domain.MwWarningRecord; import com.sinata.system.domain.SysDepartment; import com.sinata.system.domain.query.DisposalReportQuery; import com.sinata.system.domain.query.HospitalReportQuery; import com.sinata.system.domain.query.TransformQuery; import com.sinata.system.domain.vo.DepartmentReportItemVO; import com.sinata.system.domain.vo.DepartmentReportVO; import com.sinata.system.domain.vo.MwCollectRecordVO; import com.sinata.system.domain.vo.MwDisposalRecordReportVO; import com.sinata.system.domain.vo.MwMedicalWasteBoxVO; import com.sinata.system.domain.vo.SysDictDataVO; import com.sinata.system.domain.vo.TransformVO; import com.sinata.system.enums.DepartmentEnum; import com.sinata.system.enums.MedicalWasteStatusEnum; import com.sinata.system.service.ISysDictDataService; import com.sinata.system.service.MwCheckoutRecordService; import com.sinata.system.service.MwCollectRecordService; import com.sinata.system.service.MwDisposalRecordService; import com.sinata.system.service.MwWarningRecordService; import com.sinata.system.service.SysDepartmentService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @author mitao * @date 2024/12/25 */ @Service @RequiredArgsConstructor public class StaticsService { private final SysDepartmentService sysDepartmentService; private final MwCollectRecordService mwCollectRecordService; private final MwCheckoutRecordService mwCheckoutRecordService; private final ISysDictDataService sysDictDataService; private final MwWarningRecordService mwWarningRecordService; private final HttpServletResponse response; private final MwDisposalRecordService mwDisposalRecordService; /** * 机构分布-获取机构列表 * * @param type 1:全部 2:医院 3:处置单位 * @return */ public List<SysDepartment> departmentList(Integer type) { return sysDepartmentService.lambdaQuery().eq(type != 1, SysDepartment::getOrgType, type).list(); } public MedicalWasteStaticsVO medicalWaste() { return null; } /** * 医院报表 * * @param query * @return */ public DepartmentReportVO hospitalReport(HospitalReportQuery query) { DepartmentReportVO vo = new DepartmentReportVO(); List<SysDictDataVO> wasteTypeList = sysDictDataService.medicalWasteTypeList(); if (CollUtils.isEmpty(wasteTypeList)) { return vo; } vo.setLegend(wasteTypeList.stream().map(SysDictDataVO::getDictLabel).collect(Collectors.toList())); vo.getLegend().add("小计"); List<MwCollectRecord> collectRecordList = mwCollectRecordService.lambdaQuery().eq(query.getReportType().equals(1), MwCollectRecord::getStatus, MedicalWasteStatusEnum.TEMPORARILY_STORED.getCode()) .ne(query.getReportType().equals(2), MwCollectRecord::getStatus, MedicalWasteStatusEnum.TEMPORARILY_STORED.getCode()) .eq(MwCollectRecord::getDepartmentId, query.getDepartmentId()) .between(query.getReportType().equals(1), MwCollectRecord::getCollectTime, query.getStartTime(), query.getEndTime()) .between(query.getReportType().equals(2), MwCollectRecord::getCheckoutTime, query.getStartTime(), query.getEndTime()) .orderByDesc(MwCollectRecord::getCollectTime).list(); SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD_HH_MM_SS); switch (query.getDateType()) { case 1: sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD); break; case 2: sdf = new SimpleDateFormat(DateUtils.YYYY_MM); break; case 3: sdf = new SimpleDateFormat(DateUtils.YYYY); break; } List<String> dateList = DateUtils.getDayBetween(query.getStartTime(), query.getEndTime(), query.getDateType()); List<DepartmentReportItemVO> list = new ArrayList<>(); for (String date : dateList) { DepartmentReportItemVO itemVO = new DepartmentReportItemVO(); itemVO.setName(date); itemVO.setData(new ArrayList<>()); BigDecimal totalCount = BigDecimal.ZERO; BigDecimal totalWeight = BigDecimal.ZERO; SimpleDateFormat finalSdf = sdf; for (SysDictDataVO sysDictData : wasteTypeList) { BigDecimal weight = BigDecimal.ZERO; BigDecimal currentCount = BigDecimal.ZERO; if (query.getReportType().equals(1)) { weight = collectRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(e.getCollectTime()).equals(date)).map(MwCollectRecord::getWeight).reduce(BigDecimal::add).orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP); long count = collectRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(e.getCollectTime()).equals(date)).count(); currentCount = BigDecimal.valueOf(count); } else { weight = collectRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(e.getCheckoutTime()).equals(date)).map(MwCollectRecord::getWeight).reduce(BigDecimal::add).orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP); long count = collectRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(e.getCheckoutTime()).equals(date)).count(); currentCount = BigDecimal.valueOf(count); } itemVO.getData().add(currentCount); itemVO.getData().add(weight); totalCount = totalCount.add(currentCount); totalWeight = totalWeight.add(weight); } //查询预警记录判断是否超时 if (query.getDateType().equals(1)) { itemVO.setOverTimeFlag("否"); List<Long> collectIdList = collectRecordList.stream().filter(e -> finalSdf.format(e.getCollectTime()).equals(date)).map(MwCollectRecord::getId).collect(Collectors.toList()); List<MwWarningRecord> warningRecordList = mwWarningRecordService.lambdaQuery().in(MwWarningRecord::getWarningTargetId, collectIdList).list(); if (CollUtils.isNotEmpty(warningRecordList)) { itemVO.setOverTimeFlag("是"); } } list.add(itemVO); } vo.setList(list); return vo; } /** * 医院报表-导出 * * @param query * @return */ public void hospitalReportExport(HospitalReportQuery query) throws IOException { List<List<String>> head = hospitalReportHead(); 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"); // 这里需要设置不关闭流 FastExcel.write(response.getOutputStream()) .head(head) .autoCloseStream(Boolean.TRUE) .sheet("医院报表") .doWrite(getHospitalReportStaticsData(query)); } /** * 封装Excel导出数据 * * @param query * @return */ private List<List<Object>> getHospitalReportStaticsData(HospitalReportQuery query) { DepartmentReportVO vo = hospitalReport(query); if (CollUtils.isNotEmpty(vo.getList())) { List<List<Object>> result = new ArrayList<>(); for (DepartmentReportItemVO departmentReportItemVO : vo.getList()) { List<Object> data = new ArrayList<>(); data.add(departmentReportItemVO.getName()); data.addAll(departmentReportItemVO.getData()); if (query.getDateType().equals(1)) { data.add(departmentReportItemVO.getOverTimeFlag()); } result.add(data); } return result; } return CollUtils.emptyList(); } /** * 医院报表表头 * * @return */ private List<List<String>> hospitalReportHead() { List<SysDictDataVO> wasteTypeList = sysDictDataService.medicalWasteTypeList(); List<List<String>> headTitles = Lists.newArrayList(); headTitles.add(Lists.newArrayList("日期", "日期")); wasteTypeList.forEach(item -> { headTitles.add(Lists.newArrayList(item.getDictLabel(), "数量")); headTitles.add(Lists.newArrayList(item.getDictLabel(), "重量(KG)")); }); headTitles.add(Lists.newArrayList("小计", "数量")); headTitles.add(Lists.newArrayList("小计", "重量(KG)")); return headTitles; } /** * 转移联单 * * @param query * @return */ public DepartmentReportVO transformList(TransformQuery query) { DepartmentReportVO vo = new DepartmentReportVO(); SysDepartment department = sysDepartmentService.getById(query.getDepartmentId()); SysDepartment region = sysDepartmentService.getDepartmentByParentId(department.getParentId()); List<SysDepartment> hospitalList = sysDepartmentService.lambdaQuery().likeRight(SysDepartment::getTreeCode, region.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.MEDICAL_INSTITUTION.getCode()).list(); if (CollUtils.isNotEmpty(hospitalList)) { List<TransformVO> checkoutRecordVOList = mwCheckoutRecordService.getCheckoutRecordList(query, region.getTreeCode()); if (CollUtils.isNotEmpty(checkoutRecordVOList)) { //查询医废类型 List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList()).list(); if (CollUtils.isNotEmpty(wasteTypeList)) { vo.setLegend(wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList())); vo.getLegend().add("小计"); for (TransformVO transformVO : checkoutRecordVOList) { BigDecimal totalCount = BigDecimal.ZERO; BigDecimal totalWeight = BigDecimal.ZERO; DepartmentReportItemVO departmentReportItemVO = new DepartmentReportItemVO(); departmentReportItemVO.setName(transformVO.getHospitalName()); departmentReportItemVO.setData(new ArrayList<>()); departmentReportItemVO.setDriverName(transformVO.getDriverName()); departmentReportItemVO.setHospitalSignature(transformVO.getHospitalSignature()); departmentReportItemVO.setHandoverTime(transformVO.getCheckoutTime()); for (SysDictData sysDictData : wasteTypeList) { BigDecimal count = BigDecimal.valueOf(transformVO.getCollectRecordList().stream().filter(item -> item.getWasteType().equals(sysDictData.getDictCode())).count()); BigDecimal weight = transformVO.getCollectRecordList().stream().filter(item -> item.getWasteType().equals(sysDictData.getDictCode())).map(MwMedicalWasteBoxVO::getTotalWeight).reduce(BigDecimal.ZERO, BigDecimal::add); departmentReportItemVO.getData().add(count); departmentReportItemVO.getData().add(weight); totalCount = totalCount.add(count); totalWeight = totalWeight.add(weight); } departmentReportItemVO.getData().add(totalCount); departmentReportItemVO.getData().add(totalWeight); } } } } return vo; } public void transformListExport(TransformQuery query) throws IOException { List<List<String>> head = transformReportHead(query.getWasteTypeCodeList()); 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"); // 这里需要设置不关闭流 FastExcel.write(response.getOutputStream()) .head(head) .autoCloseStream(Boolean.TRUE) .sheet("转运联单") .doWrite(getTransformReportStaticsData(query)); } /** * 转运联单导出数据 * * @param query * @return * @throws MalformedURLException */ private List<List<Object>> getTransformReportStaticsData(TransformQuery query) throws MalformedURLException { DepartmentReportVO vo = transformList(query); List<DepartmentReportItemVO> list = vo.getList(); if (CollUtils.isNotEmpty(list)) { List<List<Object>> result = new ArrayList<>(); for (DepartmentReportItemVO departmentReportItemVO : list) { List<Object> data = new ArrayList<>(); data.add(departmentReportItemVO.getName()); data.addAll(departmentReportItemVO.getData()); data.add(new URL(departmentReportItemVO.getHospitalSignature())); data.add(departmentReportItemVO.getDriverName()); data.add(departmentReportItemVO.getHandoverTime()); result.add(data); } return result; } return CollUtils.emptyList(); } /** * 转运联单导出表头 * * @param wasteTypeCodeList * @return */ private List<List<String>> transformReportHead(List<Long> wasteTypeCodeList) { //查询医废类型 List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList).list(); List<List<String>> headTitles = Lists.newArrayList(); headTitles.add(Lists.newArrayList("医院名称", "医院名称")); wasteTypeList.forEach(item -> { headTitles.add(Lists.newArrayList(item.getDictLabel(), "数量")); headTitles.add(Lists.newArrayList(item.getDictLabel(), "重量(KG)")); }); headTitles.add(Lists.newArrayList("小计", "数量")); headTitles.add(Lists.newArrayList("小计", "重量(KG)")); headTitles.add(Lists.newArrayList("机构人员签字", "机构人员签字")); headTitles.add(Lists.newArrayList("运输人员签字", "运输人员签字")); headTitles.add(Lists.newArrayList("交接时间", "交接时间")); return headTitles; } /** * 处置报表 * * @param query * @return */ public DepartmentReportVO disposalReport(DisposalReportQuery query) { DepartmentReportVO vo = new DepartmentReportVO(); //已接收 List<MwDisposalRecordReportVO> receivedList = mwDisposalRecordService.disposalReportByType(query, 1); //已处置 List<MwDisposalRecordReportVO> disposaledList = mwDisposalRecordService.disposalReportByType(query, 2); SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD_HH_MM_SS); switch (query.getDateType()) { case 1: sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD); break; case 2: sdf = new SimpleDateFormat(DateUtils.YYYY_MM); break; case 3: sdf = new SimpleDateFormat(DateUtils.YYYY); break; } List<String> dateList = DateUtils.getDayBetween(query.getStartTime(), query.getEndTime(), query.getDateType()); //查询医废类型 List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList()).list(); if (CollUtils.isNotEmpty(wasteTypeList)) { List<String> legend = wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList()); vo.setLegend(legend); List<DepartmentReportItemVO> list = new ArrayList<>(); for (String date : dateList) { DepartmentReportItemVO departmentReportItemVO = new DepartmentReportItemVO(); departmentReportItemVO.setName(date); departmentReportItemVO.setData(new ArrayList<>()); SimpleDateFormat finalSdf = sdf; //接收 for (SysDictData sysDictData : wasteTypeList) { departmentReportItemVO.getData().add(BigDecimal.ZERO); if (CollUtils.isNotEmpty(receivedList)) { BigDecimal totalWeight = receivedList.stream().filter(item -> item.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(item.getReceiveTime()).equals(date)).map(MwDisposalRecordReportVO::getWeight) .reduce(BigDecimal.ZERO, BigDecimal::add); departmentReportItemVO.getData().add(totalWeight); } } //处置 for (SysDictData sysDictData : wasteTypeList) { departmentReportItemVO.getData().add(BigDecimal.ZERO); if (CollUtils.isNotEmpty(disposaledList)) { BigDecimal totalWeight = disposaledList.stream().filter(item -> item.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(item.getReceiveTime()).equals(date)).map(MwDisposalRecordReportVO::getWeight) .reduce(BigDecimal.ZERO, BigDecimal::add); departmentReportItemVO.getData().add(totalWeight); } } list.add(departmentReportItemVO); } vo.setList(list); } return vo; } /** * 处置报表导出 * * @param query * @throws IOException */ public void disposalReportExport(DisposalReportQuery query) throws IOException { List<List<String>> head = disposalReportHead(query.getWasteTypeCodeList()); 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"); // 这里需要设置不关闭流 FastExcel.write(response.getOutputStream()) .head(head) .autoCloseStream(Boolean.TRUE) .sheet("处置报表") .doWrite(getDisposalReportStaticsData(query)); } /** * 处置报表统计数据 * * @param query * @return */ private List<List<Object>> getDisposalReportStaticsData(DisposalReportQuery query) { DepartmentReportVO vo = disposalReport(query); List<DepartmentReportItemVO> list = vo.getList(); if (CollUtils.isNotEmpty(list)) { List<List<Object>> result = new ArrayList<>(); for (DepartmentReportItemVO departmentReportItemVO : list) { List<Object> data = new ArrayList<>(); data.add(departmentReportItemVO.getName()); data.addAll(departmentReportItemVO.getData()); result.add(data); } return result; } return CollUtils.emptyList(); } /** * 处置报表表头 * * @param wasteTypeCodeList * @return */ private List<List<String>> disposalReportHead(List<Long> wasteTypeCodeList) { //查询医废类型 List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList).list(); List<List<String>> headTitles = Lists.newArrayList(); headTitles.add(Lists.newArrayList("日期")); wasteTypeList.forEach(item -> { headTitles.add(Lists.newArrayList("医疗废物接收量(kg)", item.getDictLabel())); headTitles.add(Lists.newArrayList("医疗废物接收量(kg)", item.getDictLabel())); }); wasteTypeList.forEach(item -> { headTitles.add(Lists.newArrayList("医疗废物处置量(kg)", item.getDictLabel())); headTitles.add(Lists.newArrayList("医疗废物处置量(kg)", item.getDictLabel())); }); return headTitles; } public DepartmentReportVO regulationReport(DisposalReportQuery query) { DepartmentReportVO vo = new DepartmentReportVO(); //医废产生量 List<MwCollectRecordVO> collectRecordList = mwCollectRecordService.getRegulationReportList(query); //医废转移量 List<MwCollectRecordVO> checkoutRecordList = mwCheckoutRecordService.getRegulationReportList(query); //医废处置量 List<MwCollectRecordVO> disposalRecordList = mwDisposalRecordService.getRegulationReportList(query); SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD_HH_MM_SS); switch (query.getDateType()) { case 1: sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD); break; case 2: sdf = new SimpleDateFormat(DateUtils.YYYY_MM); break; case 3: sdf = new SimpleDateFormat(DateUtils.YYYY); break; } List<String> dateList = DateUtils.getDayBetween(query.getStartTime(), query.getEndTime(), query.getDateType()); //查询医废类型 List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList()).list(); if (CollUtils.isNotEmpty(wasteTypeList)) { vo.setLegend(wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList())); vo.setList(new ArrayList<>()); for (String date : dateList) { DepartmentReportItemVO departmentReportItemVO = new DepartmentReportItemVO(); departmentReportItemVO.setName(date); SimpleDateFormat finalSdf = sdf; for (SysDictData sysDictData : wasteTypeList) { collectRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(e.getCollectTime()).equals(date)).map(MwCollectRecordVO::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add); } } } return null; } } medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwCheckoutRecordServiceImpl.java
@@ -8,12 +8,16 @@ import com.sinata.common.utils.StringUtils; import com.sinata.system.domain.MwCheckoutRecord; import com.sinata.system.domain.query.CheckoutRecordQuery; import com.sinata.system.domain.query.DisposalReportQuery; 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.vo.MwCheckoutRecordExcelVO; import com.sinata.system.domain.vo.MwCheckoutRecordVO; import com.sinata.system.domain.vo.MwCollectRecordVO; import com.sinata.system.domain.vo.MwMedicalWasteBoxVO; import com.sinata.system.domain.vo.MwTransitRecordVO; import com.sinata.system.domain.vo.TransformVO; import com.sinata.system.mapper.MwCheckoutRecordMapper; import com.sinata.system.service.MwCheckoutRecordService; import com.sinata.system.service.SysDepartmentService; @@ -138,4 +142,28 @@ Page<MwMedicalWasteBoxVO> page = baseMapper.transitDetailPageList(new Page<>(query.getPageCurr(), query.getPageSize()), query.getId()); return PageDTO.of(page); } /** * 转移联单数据 * * @param query * @param treeCode * @return */ @Override public List<TransformVO> getCheckoutRecordList(TransformQuery query, String treeCode) { return baseMapper.getCheckoutRecordList(query, treeCode); } /** * 监管报表医疗废物转移列表 * * @param query * @return */ @Override public List<MwCollectRecordVO> getRegulationReportList(DisposalReportQuery query) { String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId()); return baseMapper.getRegulationReportList(query, treeCode); } } medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwCollectRecordServiceImpl.java
@@ -7,6 +7,7 @@ import com.sinata.common.utils.StringUtils; import com.sinata.system.domain.MwCollectRecord; import com.sinata.system.domain.dto.MwCollectRecordDTO; import com.sinata.system.domain.query.DisposalReportQuery; import com.sinata.system.domain.query.MwCollectRecordQuery; import com.sinata.system.domain.vo.MedicalWasteProcessVO; import com.sinata.system.domain.vo.MwCollectRecordVO; @@ -102,4 +103,16 @@ response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); FastExcel.write(response.getOutputStream(), MwCollectRecordVO.class).sheet("医废收集记录").doWrite(vo); } /** * 监管报表医疗废物产生列表 * * @param query * @return */ @Override public List<MwCollectRecordVO> getRegulationReportList(DisposalReportQuery query) { String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId()); return baseMapper.getRegulationReportList(query, treeCode); } } medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalHandleRecordServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.sinata.system.service.impl; import com.sinata.system.domain.MwDisposalHandleRecord; import com.sinata.system.mapper.MwDisposalHandleRecordMapper; import com.sinata.system.service.MwDisposalHandleRecordService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * 处置记录服务实现类 * </p> * * @author mitao * @since 2024-12-27 */ @Service public class MwDisposalHandleRecordServiceImpl extends ServiceImpl<MwDisposalHandleRecordMapper, MwDisposalHandleRecord> implements MwDisposalHandleRecordService { } medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java
@@ -6,10 +6,13 @@ import com.sinata.common.utils.CollUtils; import com.sinata.common.utils.StringUtils; import com.sinata.system.domain.MwDisposalRecord; import com.sinata.system.domain.query.DisposalReportQuery; import com.sinata.system.domain.query.MwDisposalRecordItemQuery; import com.sinata.system.domain.query.MwDisposalRecordQuery; import com.sinata.system.domain.vo.DisposalRecordStaticsVO; import com.sinata.system.domain.vo.MwCollectRecordVO; import com.sinata.system.domain.vo.MwDisposalRecordItemVO; import com.sinata.system.domain.vo.MwDisposalRecordReportVO; import com.sinata.system.domain.vo.MwDisposalRecordVO; import com.sinata.system.mapper.MwDisposalRecordMapper; import com.sinata.system.service.MwDisposalRecordService; @@ -84,4 +87,28 @@ Page<MwDisposalRecordItemVO> page = baseMapper.pageDetail(new Page<>(query.getPageCurr(), query.getPageSize()), query.getDisposalRecordId()); return PageDTO.of(page); } /** * 处置报表 * * @param query * @param type * @return */ @Override public List<MwDisposalRecordReportVO> disposalReportByType(DisposalReportQuery query, Integer type) { return baseMapper.disposalReportByType(query, type); } /** * 监管报表医疗废物处置列表 * * @param query * @return */ @Override public List<MwCollectRecordVO> getRegulationReportList(DisposalReportQuery query) { String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId()); return baseMapper.getRegulationReportList(query, treeCode); } } medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java
@@ -180,10 +180,13 @@ switch (query.getDateType()) { case 1: sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD); break; case 2: sdf = new SimpleDateFormat(DateUtils.YYYY_MM); break; case 3: sdf = new SimpleDateFormat(DateUtils.YYYY); break; } List<String> dateList = DateUtils.getDayBetween(query.getStartTime(), query.getEndTime(), query.getDateType()); List<List<String>> result = new ArrayList<>(); medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwWarningConfigServiceImpl.java
@@ -1,10 +1,25 @@ package com.sinata.system.service.impl; import com.sinata.system.domain.MwWarningConfig; import com.sinata.system.mapper.MwWarningConfigMapper; import com.sinata.system.service.MwWarningConfigService; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sinata.common.exception.ServiceException; import com.sinata.common.utils.CollUtils; import com.sinata.system.domain.MwWarningConfig; import com.sinata.system.domain.MwWarningConfigItem; import com.sinata.system.domain.dto.MwWarningConfigDTO; import com.sinata.system.domain.vo.MwWarningConfigItemVO; import com.sinata.system.domain.vo.MwWarningConfigVO; import com.sinata.system.enums.WarningConfigTypeEnum; import com.sinata.system.mapper.MwWarningConfigMapper; import com.sinata.system.service.MwWarningConfigItemService; import com.sinata.system.service.MwWarningConfigService; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Objects; /** * <p> @@ -15,6 +30,51 @@ * @since 2024-12-02 */ @Service @RequiredArgsConstructor public class MwWarningConfigServiceImpl extends ServiceImpl<MwWarningConfigMapper, MwWarningConfig> implements MwWarningConfigService { private final MwWarningConfigItemService mwWarningConfigItemService; /** * 保存设置 * * @param dto * @return */ @Override @Transactional(rollbackFor = Exception.class) public void saveConfig(MwWarningConfigDTO dto) { MwWarningConfig mwWarningConfig = lambdaQuery().eq(MwWarningConfig::getType, dto.getType()).last("limit 1").oneOpt().orElse(new MwWarningConfig()); BeanUtils.copyProperties(dto, mwWarningConfig); saveOrUpdate(mwWarningConfig); if (dto.getType().equals(WarningConfigTypeEnum.MEDICAL_WASTE.getCode()) || dto.getType().equals(WarningConfigTypeEnum.STAGING_ROOM_CAPACITY.getCode())) { if (CollUtils.isEmpty(dto.getWarningConfigItemList())) { throw new ServiceException("预警配置项不能为空"); } //清空配置项 mwWarningConfigItemService.lambdaUpdate().eq(MwWarningConfigItem::getConfigId, mwWarningConfig.getId()).remove(); List<MwWarningConfigItem> mwWarningConfigItems = BeanUtil.copyToList(dto.getWarningConfigItemList(), MwWarningConfigItem.class); mwWarningConfigItems.forEach(item -> item.setConfigId(mwWarningConfig.getId())); mwWarningConfigItemService.saveBatch(mwWarningConfigItems); } } /** * 根据类型获取配置信息 * * @param type * @return */ @Override public MwWarningConfigVO getByType(Integer type) { MwWarningConfig mwWarningConfig = lambdaQuery().eq(MwWarningConfig::getType, type).last("limit 1").one(); MwWarningConfigVO mwWarningConfigVO = null; if (Objects.nonNull(mwWarningConfig)) { mwWarningConfigVO = BeanUtil.copyProperties(mwWarningConfig, MwWarningConfigVO.class); if (type.equals(WarningConfigTypeEnum.MEDICAL_WASTE.getCode()) || type.equals(WarningConfigTypeEnum.STAGING_ROOM_CAPACITY.getCode())) { List<MwWarningConfigItem> mwWarningConfigItems = mwWarningConfigItemService.lambdaQuery().eq(MwWarningConfigItem::getConfigId, mwWarningConfig.getId()).list(); mwWarningConfigVO.setWarningConfigItemList(BeanUtil.copyToList(mwWarningConfigItems, MwWarningConfigItemVO.class)); } } return mwWarningConfigVO; } } medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDictDataServiceImpl.java
@@ -14,6 +14,7 @@ import com.sinata.system.mapper.SysDictDataMapper; import com.sinata.system.mapper.SysDictTypeMapper; import com.sinata.system.service.ISysDictDataService; import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -22,7 +23,7 @@ /** * 字典 业务层处理 * * * @author ruoyi */ @Service @@ -35,7 +36,7 @@ /** * 根据条件分页查询字典数据 * * * @param dictData 字典数据信息 * @return 字典数据集合信息 */ @@ -47,7 +48,7 @@ /** * 根据字典类型和字典键值查询字典数据信息 * * * @param dictType 字典类型 * @param dictValue 字典键值 * @return 字典标签 @@ -60,7 +61,7 @@ /** * 根据字典数据ID查询信息 * * * @param dictCode 字典数据ID * @return 字典数据 */ @@ -72,7 +73,7 @@ /** * 批量删除字典数据信息 * * * @param dictCodes 需要删除的字典数据ID */ @Override @@ -89,7 +90,7 @@ /** * 新增保存字典数据信息 * * * @param data 字典数据信息 * @return 结果 */ @@ -107,7 +108,7 @@ /** * 修改保存字典数据信息 * * * @param data 字典数据信息 * @return 结果 */ @@ -142,4 +143,45 @@ baseMapper.insert(sysDictData); } } @Override public List<SysDictDataVO> medicalWasteTypeList() { return getSysDictDataVOListByType("medical_waste_type"); } @Nullable private List<SysDictDataVO> getSysDictDataVOListByType(String dictType) { List<SysDictData> medicalWasteTypeList = lambdaQuery().eq(SysDictData::getDictType, dictType).list(); return BeanUtils.copyToList(medicalWasteTypeList, SysDictDataVO.class); } /** * 器具类型列表 * * @return */ @Override public List<SysDictDataVO> equipmentTypeList() { return getSysDictDataVOListByType("protection_equipment_type"); } /** * 规章制度类型列表 * * @return */ @Override public List<SysDictDataVO> regulationsTypeList() { return getSysDictDataVOListByType("protection_regulation_type"); } /** * 作业类型 * * @return */ @Override public List<SysDictDataVO> workTypeList() { return getSysDictDataVOListByType("protective_work_type"); } } medicalWaste-system/src/main/resources/mapper/system/MwCheckoutRecordMapper.xml
@@ -18,7 +18,21 @@ <result column="DRIVER_ID" property="driverId" /> <result column="CAR_ID" property="carId" /> </resultMap> <resultMap id="TransformVOMap" type="com.sinata.system.domain.vo.TransformVO"> <id column="ID" property="id"/> <result column="CHECKOUT_TIME" property="checkoutTime"/> <result column="HOSPITAL_NAME" property="hospitalName"/> <result column="DEPARTMENT_ID" property="departmentId"/> <result column="HOSPITAL_SIGNATURE" property="hospitalSignature"/> <result column="driverName" property="driverName"/> <collection property="collectRecordList" javaType="java.util.List" ofType="com.sinata.system.domain.vo.MwMedicalWasteBoxVO"> <result column="WASTE_TYPE_STR" property="wasteTypeStr"/> <result column="WASTE_TYPE" property="wasteType"/> <result column="bagNum" property="bagNum"/> <result column="totalWeight" property="totalWeight"/> </collection> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> DEL_FLAG, @@ -54,6 +68,7 @@ </if> </where> GROUP BY mcr.DEPARTMENT_ID ORDER BY mcr.CHECKOUT_TIME DESC </select> <select id="hospitalDetail" resultType="com.sinata.system.domain.vo.MwCheckoutRecordVO"> SELECT mcr.ID, @@ -209,5 +224,64 @@ </where> GROUP BY mcr.DEPARTMENT_ID </select> <select id="getCheckoutRecordList" resultMap="TransformVOMap"> SELECT MCR.ID, MCR.CHECKOUT_TIME, MCR.DEPARTMENT_ID, MCR.HOSPITAL_NAME, MCR.STAGING_ROOM_ID, MCR.HOSPITAL_SIGNATURE, SU.NICK_NAME AS driverName, COUNT(MCR2.ID) AS bagNum, SUM(MCR2.WEIGHT) AS totalWeight, MCR2.WASTE_TYPE, MCR2.WASTE_TYPE_STR FROM MW_CHECKOUT_RECORD MCR LEFT JOIN MW_CHECKOUT_RECORD_ITEM MCRI ON MCRI.CHECKOUT_RECORD_ID = MCR.ID LEFT JOIN MW_COLLECT_RECORD MCR2 ON MCR2.ID = MCRI.COLLECT_RECORD_ID LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MCR.DEPARTMENT_ID LEFT JOIN SYS_USER SU ON SU.USER_ID = MCR.DRIVER_ID <where> <if test="treeCode != null and treeCode != ''"> AND SD.TREE_CODE LIKE CONCAT(#{treeCode},'%') </if> <if test="query.startTime != null and query.endTime != null"> AND MCR.CHECKOUT_TIME BETWEEN #{query.startTime} AND #{query.endTime} </if> <if test="query.wasteTypeList != null and query.wasteTypeList.size()>0"> AND MCR2.WASTE_TYPE IN <foreach collection="query.wasteTypeList" item="wasteType" separator="," open="(" close=")"> #{wasteType} </foreach> </if> </where> GROUP BY MCR2.BOX_NUMBER </select> <select id="getRegulationReportList" resultType="com.sinata.system.domain.vo.MwCollectRecordVO"> SELECT MCR2.ID, MCR2.WASTE_TYPE, MCR2.WASTE_TYPE_STR, MCR2.WEIGHT, MCR.CHECKOUT_TIME FROM MW_CHECKOUT_RECORD MCR LEFT JOIN MW_CHECKOUT_RECORD_ITEM MCRI ON MCRI.CHECKOUT_RECORD_ID = MCR.ID LEFT JOIN MW_COLLECT_RECORD MCR2 ON MCR2.ID = MCRI.COLLECT_RECORD_ID LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MCR.DEPARTMENT_ID <where> MCR.DEL_FLAG = 0 <if test="treeCode != null and treeCode !=''"> AND SD.TREE_CODE LIKE CONCAT(#{treeCode},'%') </if> <if test="query.startTime != null and query.endTime != null"> AND MCR.CHECKOUT_TIME BETWEEN #{query.startTime} AND #{query.endTime} </if> <if test="query.wasteTypeList != null and query.wasteTypeList.size()>0"> AND MCR2.WASTE_TYPE IN <foreach collection="query.wasteTypeList" item="wasteType" separator="," open="(" close=")"> #{wasteType} </foreach> </if> </where> </select> </mapper> medicalWaste-system/src/main/resources/mapper/system/MwCollectRecordMapper.xml
@@ -207,5 +207,45 @@ </where> ORDER BY mcr.CREATE_TIME DESC </select> <select id="getRegulationReportList" resultType="com.sinata.system.domain.vo.MwCollectRecordVO"> SELECT MCR.ID, MCR.DEPARTMENT_ID, MCR.HOSPITAL_NAME, MCR.STAGING_ROOM_ID, MCR.MEDICAL_WASTE_NUMBER, MCR.BOX_ID, MCR.BOX_NUMBER, MCR.WASTE_TYPE, MCR.WASTE_TYPE_STR, MCR.WEIGHT, MCR.CHECKOUT_USER_ID, MCR.CHECKOUT_TIME, MCR.STATUS, MCR.BOX_TIME, MCR.DEL_FLAG, MCR.CREATE_BY, MCR.CREATE_TIME, MCR.UPDATE_BY, MCR.UPDATE_TIME, MCR.COLLECT_USER_ID, MCR.COLLECT_TIME FROM MW_COLLECT_RECORD MCR LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MCR.DEPARTMENT_ID <where> MCR.DEL_FLAG = 0 <if test="treeCode != null and treeCode != ''"> and SD.TREE_CODE = #{treeCode} </if> <if test="query.startTime != null and query.endTime != null"> and MCR.COLLECT_TIME between #{query.startTime} and #{query.endTime} </if> <if test="query.wasteTypeCodeList != null and query.wasteTypeCodeList.size() > 0"> and MCR.WASTE_TYPE in <foreach collection="query.wasteTypeCodeList" item="code" open="(" separator="," close=")"> #{code} </foreach> </if> </where> </select> </mapper> medicalWaste-system/src/main/resources/mapper/system/MwDisposalHandleRecordMapper.xml
New file @@ -0,0 +1,30 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.sinata.system.mapper.MwDisposalHandleRecordMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.sinata.system.domain.MwDisposalHandleRecord"> <id column="ID" property="id" /> <result column="DEL_FLAG" property="delFlag" /> <result column="CREATE_BY" property="createBy" /> <result column="CREATE_TIME" property="createTime" /> <result column="UPDATE_BY" property="updateBy" /> <result column="UPDATE_TIME" property="updateTime" /> <result column="DEPARTMENT_ID" property="departmentId" /> <result column="DISPOSAL_UNIT_NAME" property="disposalUnitName" /> <result column="DISPOSAL_TIME" property="disposalTime" /> <result column="DISPOSAL_USER_ID" property="disposalUserId" /> <result column="DISPOSAL_RECORD_ID" property="disposalRecordId" /> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> DEL_FLAG, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, ID, DEPARTMENT_ID, DISPOSAL_UNIT_NAME, DISPOSAL_TIME, DISPOSAL_USER_ID, DISPOSAL_RECORD_ID </sql> </mapper> medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml
@@ -79,5 +79,66 @@ </where> GROUP BY MCR.BOX_ID </select> <select id="disposalReportByType" resultType="com.sinata.system.domain.vo.MwDisposalRecordReportVO"> SELECT MCR.ID, MDR.RECEIVE_TIME, MDR.DISPOSAL_TIME, MCR.WASTE_TYPE, MCR.WEIGHT, MCR.STATUS FROM MW_DISPOSAL_RECORD MDR LEFT JOIN MW_DISPOSAL_RECORD_ITEM MDRI ON MDRI.DISPOSAL_RECORD_ID = MDR.ID LEFT JOIN MW_COLLECT_RECORD MCR ON MCR.ID = MDRI.COLLECT_RECORD_ID <where> <if test="query.departmentId != null"> AND MDR.DEPARTMENT_ID = #{query.departmentId} </if> <!-- 判断 type 为 1 或 2 的状态条件 --> <choose> <when test="type == 1"> AND MCR.STATUS = 3 </when> <when test="type == 2"> AND MCR.STATUS = 4 </when> </choose> <if test="query.startTime != null and query.endTime != null"> <choose> <when test="type == 1"> AND MDR.RECEIVE_TIME BETWEEN #{query.startTime} AND #{query.endTime} </when> <when test="type == 2"> AND MDR.DISPOSAL_TIME BETWEEN #{query.startTime} AND #{query.endTime} </when> </choose> </if> <if test="query.wasteTypeCodeList != null and query.wasteTypeCodeList.size()>0"> AND MCR.WASTE_TYPE IN <foreach collection="query.wasteTypeCodeList" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> </where> </select> <select id="getRegulationReportList" resultType="com.sinata.system.domain.vo.MwCollectRecordVO"> SELECT MCR.ID, MCR.WASTE_TYPE, MCR.WEIGHT, MDR.DISPOSAL_TIME AS collectTime FROM MW_DISPOSAL_RECORD MDR LEFT JOIN MW_DISPOSAL_RECORD_ITEM MDRI ON MDRI.DISPOSAL_RECORD_ID = MDR.ID LEFT JOIN MW_COLLECT_RECORD MCR ON MCR.ID = MDRI.COLLECT_RECORD_ID LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MCR.DEPARTMENT_ID <where> MDR.DEL_FLAG = 0 <if test="treeCode != null and treeCode != ''"> AND SD.TREE_CODE LIKE CONCAT(#{treeCode}, '%') </if> <if test="query.startTime != null and query.endTime != null"> AND MDR.DISPOSAL_TIME BETWEEN #{query.startTime} AND #{query.endTime} </if> <if test="query.wasteTypeList != null and query.wasteTypeList.size()>0"> AND MCR.WASTE_TYPE IN <foreach collection="query.wasteTypeList" item="wasteType" separator="," open="(" close=")"> #{wasteType} </foreach> </if> </where> </select> </mapper> medicalWaste-system/src/main/resources/mapper/system/SysAgreementMapper.xml
medicalWaste-system/src/main/resources/mapper/system/SysDepartmentMapper.xml
@@ -219,6 +219,7 @@ <where> SD.ORG_TYPE = 2 AND MTRP.ID = #{id} </where> ORDER BY MTRP.SORT_ORDER ASC </select>