浏览代码

Merge branch 'dev/20200513end_1.2.0' into debug

# Conflicts:
#	src/test/java/com/diagbot/CodeGeneration.java
gaodm 5 年之前
父节点
当前提交
e00501ea38

+ 95 - 0
src/main/java/com/diagbot/dto/QcAbnormalDTO.java

@@ -0,0 +1,95 @@
+package com.diagbot.dto;
+
+import com.diagbot.enums.AbnormalStatusEnum;
+import com.diagbot.enums.AbnormalTypeEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/5/15 9:27
+ */
+@Getter
+@Setter
+public class QcAbnormalDTO {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 病人住院ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 异常类型(1:数据模块 2:质控类型 3:XML结构)
+     */
+    private Integer type;
+
+    /**
+     * 异常类型名称(1:数据模块 2:质控类型 3:XML结构)
+     */
+    private String typeName;
+
+    public String getTypeName() {
+        return AbnormalTypeEnum.getName(this.type);
+    }
+
+    /**
+     * 异常描述
+     */
+    private String description;
+
+    /**
+     * 状态(0:未处理,1:已处理)
+     */
+    private Integer status;
+
+    /**
+     * 状态名称(0:未处理,1:已处理)
+     */
+    private String statusName;
+
+    public String getStatusName() {
+        return AbnormalStatusEnum.getName(this.status);
+    }
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 2 - 1
src/main/java/com/diagbot/dto/QcCasesDTO.java

@@ -5,6 +5,7 @@ import lombok.Setter;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.util.Date;
 
 
 /**
 /**
  * @Description:
  * @Description:
@@ -27,7 +28,7 @@ public class QcCasesDTO {
     /**
     /**
      * 记录修改时间,如果时间是1970年则表示纪录未修改
      * 记录修改时间,如果时间是1970年则表示纪录未修改
      */
      */
-    private LocalDateTime gmtModified;
+    private Date gmtModified;
 
 
     /**
     /**
      * 模块名称
      * 模块名称

+ 195 - 0
src/main/java/com/diagbot/entity/QcAbnormal.java

@@ -0,0 +1,195 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 异常数据监控信息
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-15
+ */
+public class QcAbnormal implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 病人住院ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 异常类型(1:数据模块 2:质控类型 3:XML结构)
+     */
+    private Integer type;
+
+    /**
+     * 异常描述
+     */
+    private String description;
+
+    /**
+     * 状态(0:未处理,1:已处理)
+     */
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+
+    public String getBehospitalCode() {
+        return behospitalCode;
+    }
+
+    public void setBehospitalCode(String behospitalCode) {
+        this.behospitalCode = behospitalCode;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "QcAbnormal{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", hospitalId=" + hospitalId +
+                ", behospitalCode=" + behospitalCode +
+                ", type=" + type +
+                ", description=" + description +
+                ", status=" + status +
+                ", remark=" + remark +
+                "}";
+    }
+}

+ 50 - 0
src/main/java/com/diagbot/enums/AbnormalStatusEnum.java

@@ -0,0 +1,50 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2018年11月21日 下午2:31:42
+ */
+public enum AbnormalStatusEnum implements KeyedNamed {
+    NOT_HANDLED(0, "未处理"),
+    HAS_HANDLED(1, "已处理");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    AbnormalStatusEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static AbnormalStatusEnum getEnum(int key) {
+        for (AbnormalStatusEnum item : AbnormalStatusEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        AbnormalStatusEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}
+

+ 51 - 0
src/main/java/com/diagbot/enums/AbnormalTypeEnum.java

@@ -0,0 +1,51 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2018年11月21日 下午2:31:42
+ */
+public enum AbnormalTypeEnum implements KeyedNamed {
+    DATA_MODEL(1, "数据模块"),
+    QC_TYPE(2, "质控类型"),
+    XML(3, "XML结构");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    AbnormalTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static AbnormalTypeEnum getEnum(int key) {
+        for (AbnormalTypeEnum item : AbnormalTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        AbnormalTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}
+

+ 117 - 1
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1,5 +1,6 @@
 package com.diagbot.facade;
 package com.diagbot.facade;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.aggregate.AverageStatisticsAggregate;
 import com.diagbot.aggregate.AverageStatisticsAggregate;
 import com.diagbot.aggregate.MrStatisticsAggregate;
 import com.diagbot.aggregate.MrStatisticsAggregate;
 import com.diagbot.aggregate.ResultStatisticsAggregate;
 import com.diagbot.aggregate.ResultStatisticsAggregate;
@@ -8,13 +9,23 @@ import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.exception.CommonException;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.QcresultFilterVO;
+import com.google.common.collect.Lists;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.List;
@@ -38,6 +49,10 @@ public class ConsoleFacade {
     private MrStatisticsAggregate mrStatisticsAggregate;
     private MrStatisticsAggregate mrStatisticsAggregate;
     @Autowired
     @Autowired
     private ResultStatisticsAggregate resultStatisticsAggregate;
     private ResultStatisticsAggregate resultStatisticsAggregate;
+    @Autowired
+    private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private QcCasesFacade qcCasesFacade;
 
 
     //-----------------------聚合接口开始-------------------------------
     //-----------------------聚合接口开始-------------------------------
 
 
@@ -128,6 +143,7 @@ public class ConsoleFacade {
     //-----------------------聚合接口结束-------------------------------
     //-----------------------聚合接口结束-------------------------------
 
 
     //-----------------------单独接口开始-------------------------------
     //-----------------------单独接口开始-------------------------------
+
     /**
     /**
      * 平均住院天数
      * 平均住院天数
      *
      *
@@ -272,7 +288,7 @@ public class ConsoleFacade {
         return retMap;
         return retMap;
     }
     }
 
 
-    private void filterVOSet(FilterVO filterVO){
+    private void filterVOSet(FilterVO filterVO) {
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
         String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
         String endDate = filterFacade.getEndDateStr(filterVO.getType(), null);
         String endDate = filterFacade.getEndDateStr(filterVO.getType(), null);
@@ -284,4 +300,104 @@ public class ConsoleFacade {
         }
         }
     }
     }
     //-----------------------单独接口结束-------------------------------
     //-----------------------单独接口结束-------------------------------
+
+    //_______________________分页接口开始-------------------------------
+
+    private void filterPageVOSet(FilterPageVO filterPageVO) {
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String startDate = filterFacade.getStartDateStr(filterPageVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterPageVO.getType(), null);
+        filterPageVO.setStartDate(startDate);
+        filterPageVO.setEndDate(endDate);
+        filterPageVO.setHospitalId(hospitalId);
+    }
+
+    /**
+     * 各模块缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByCasePage(FilterPageVO filterPageVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        filterPageVOSet(filterPageVO);
+        long current = filterPageVO.getCurrent();
+        long size = filterPageVO.getSize();
+        filterPageVO.setCurrent(0);
+        filterPageVO.setSize(filterPageVO.getTotal());
+        IPage<NumDTO> page = qcresultInfoFacade.entryCountGroupByCasePage(filterPageVO);
+        List<NumDTO> caseList = page.getRecords();
+        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
+        BeanUtil.copyProperties(filterPageVO, qcresultFilterVO);
+        int mrNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
+        List<NumDTO> standardCaseList = qcCasesFacade.entryGroupByCase();
+        if (ListUtil.isEmpty(standardCaseList)) {
+            return null;
+        }
+        Map<String, NumDTO> standardCaseMap
+                = EntityUtil.makeEntityMap(standardCaseList, "name");
+        if (ListUtil.isNotEmpty(caseList)) {
+            caseList.forEach(item -> {
+                if (!standardCaseMap.containsKey(item.getName())) {
+                    item.setTotleNum(0);
+                    item.setPercent(0d);
+                    item.setPercentStr("0%");
+                } else {
+                    Integer totleNum = standardCaseMap.get(item.getName()).getNum() * mrNum;
+                    item.setTotleNum(totleNum);
+                    Double percent = BigDecimal.valueOf(item.getNum())
+                            .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                            .doubleValue();
+                    String percentStr
+                            = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                    item.setPercent(percent);
+                    item.setPercentStr(percentStr);
+                }
+            });
+            //降序排序
+            Collections.sort(caseList, new Comparator<NumDTO>() {
+                @Override
+                public int compare(NumDTO o1, NumDTO o2) {
+                    return o2.getPercent().compareTo(o1.getPercent());
+                }
+            });
+        }
+        List<NumDTO> retList = Lists.newLinkedList();
+        if (current * size + size > caseList.size()) {
+            retList = caseList.subList(Long.valueOf(current * size).intValue(), caseList.size());
+        } else {
+            retList = caseList.subList(Long.valueOf(current * size).intValue(), Long.valueOf(current * size + size).intValue());
+        }
+        page.setCurrent(current);
+        page.setSize(size);
+        page.setRecords(retList);
+        return page;
+    }
+
+    /**
+     * 条目缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByEntryPage(FilterPageVO filterPageVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        filterPageVOSet(filterPageVO);
+        IPage<NumDTO> page = qcresultInfoFacade.entryCountGroupByEntryPage(filterPageVO);
+        List<NumDTO> records = page.getRecords();
+        if (ListUtil.isNotEmpty(records)) {
+            records.forEach(item -> {
+                Double percent = BigDecimal.valueOf(item.getNum())
+                        .divide(BigDecimal.valueOf(item.getTotleNum()), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                item.setPercent(percent);
+                String percentStr
+                        = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                item.setPercentStr(percentStr);
+            });
+        }
+        page.setRecords(records);
+        return page;
+    }
+    //-----------------------分页接口结束-------------------------------
 }
 }

+ 51 - 0
src/main/java/com/diagbot/facade/QcAbnormalFacade.java

@@ -0,0 +1,51 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QcAbnormalDTO;
+import com.diagbot.entity.QcAbnormal;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.QcAbnormalServiceImpl;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.QcAbnormalSaveVO;
+import com.diagbot.vo.QcAbnormalVO;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/5/15 9:26
+ */
+@Component
+public class QcAbnormalFacade extends QcAbnormalServiceImpl {
+
+    /**
+     * 查询异常数据监控信息
+     *
+     * @param qcAbnormalVO 异常数据监控信息查询参数
+     * @return 异常数据监控信息
+     */
+    public IPage<QcAbnormalDTO> getQcAnnormalFac(QcAbnormalVO qcAbnormalVO) {
+        qcAbnormalVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        return this.getQcAnnormal(qcAbnormalVO);
+    }
+
+    /**
+     * 更新异常数据监控信息
+     *
+     * @param qcAbnormalSaveVO 异常数据监控信息更新参数
+     * @return 是否成功
+     */
+    public Boolean saveQcAnnormal(QcAbnormalSaveVO qcAbnormalSaveVO) {
+        return this.update(new UpdateWrapper<QcAbnormal>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", SysUserUtils.getCurrentHospitalID())
+                .eq("id", qcAbnormalSaveVO.getId())
+                .set("status", qcAbnormalSaveVO.getStatus())
+                .set("remark", qcAbnormalSaveVO.getRemark())
+                .set("gmt_modified", DateUtil.now())
+                .set("modifier", SysUserUtils.getCurrentPrincipleID())
+        );
+    }
+}

+ 19 - 0
src/main/java/com/diagbot/mapper/QcAbnormalMapper.java

@@ -0,0 +1,19 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QcAbnormalDTO;
+import com.diagbot.entity.QcAbnormal;
+import com.diagbot.vo.QcAbnormalVO;
+
+/**
+ * <p>
+ * 异常数据监控信息 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-15
+ */
+public interface QcAbnormalMapper extends BaseMapper<QcAbnormal> {
+    IPage<QcAbnormalDTO> getQcAnnormal(QcAbnormalVO qcAbnormalVO);
+}

+ 19 - 0
src/main/java/com/diagbot/mapper/QcresultInfoMapper.java

@@ -1,15 +1,18 @@
 package com.diagbot.mapper;
 package com.diagbot.mapper;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.vo.FilterByDeptVO;
 import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcresultFilterByDeptVO;
 import com.diagbot.vo.QcresultFilterByDeptVO;
 import com.diagbot.vo.QcresultFilterVO;
 import com.diagbot.vo.QcresultFilterVO;
+import org.apache.ibatis.annotations.Param;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -95,4 +98,20 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
      * @return
      * @return
      */
      */
     public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO);
     public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO);
+
+    /**
+     * 各模块缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByCasePage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 条目缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO);
 }
 }

+ 19 - 0
src/main/java/com/diagbot/service/QcAbnormalService.java

@@ -0,0 +1,19 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QcAbnormalDTO;
+import com.diagbot.entity.QcAbnormal;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.QcAbnormalVO;
+
+/**
+ * <p>
+ * 异常数据监控信息 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-15
+ */
+public interface QcAbnormalService extends IService<QcAbnormal> {
+    IPage<QcAbnormalDTO> getQcAnnormal(QcAbnormalVO qcAbnormalVO);
+}

+ 19 - 0
src/main/java/com/diagbot/service/QcresultInfoService.java

@@ -1,5 +1,6 @@
 package com.diagbot.service;
 package com.diagbot.service;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.DeptNumDTO;
@@ -7,9 +8,11 @@ import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.vo.FilterByDeptVO;
 import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcresultFilterByDeptVO;
 import com.diagbot.vo.QcresultFilterByDeptVO;
 import com.diagbot.vo.QcresultFilterVO;
 import com.diagbot.vo.QcresultFilterVO;
+import org.apache.ibatis.annotations.Param;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -96,4 +99,20 @@ public interface QcresultInfoService extends IService<QcresultInfo> {
      * @return
      * @return
      */
      */
     public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO);
     public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO);
+
+    /**
+     * 各模块缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByCasePage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 条目缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO);
 }
 }

+ 25 - 0
src/main/java/com/diagbot/service/impl/QcAbnormalServiceImpl.java

@@ -0,0 +1,25 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QcAbnormalDTO;
+import com.diagbot.entity.QcAbnormal;
+import com.diagbot.mapper.QcAbnormalMapper;
+import com.diagbot.service.QcAbnormalService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.QcAbnormalVO;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 异常数据监控信息 服务实现类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-15
+ */
+@Service
+public class QcAbnormalServiceImpl extends ServiceImpl<QcAbnormalMapper, QcAbnormal> implements QcAbnormalService {
+    public IPage<QcAbnormalDTO> getQcAnnormal(QcAbnormalVO qcAbnormalVO){
+        return baseMapper.getQcAnnormal(qcAbnormalVO);
+    }
+}

+ 24 - 0
src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java

@@ -1,5 +1,6 @@
 package com.diagbot.service.impl;
 package com.diagbot.service.impl;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.DeptNumDTO;
@@ -9,9 +10,11 @@ import com.diagbot.entity.QcresultInfo;
 import com.diagbot.mapper.QcresultInfoMapper;
 import com.diagbot.mapper.QcresultInfoMapper;
 import com.diagbot.service.QcresultInfoService;
 import com.diagbot.service.QcresultInfoService;
 import com.diagbot.vo.FilterByDeptVO;
 import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcresultFilterByDeptVO;
 import com.diagbot.vo.QcresultFilterByDeptVO;
 import com.diagbot.vo.QcresultFilterVO;
 import com.diagbot.vo.QcresultFilterVO;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.List;
 import java.util.List;
@@ -127,4 +130,25 @@ public class QcresultInfoServiceImpl extends ServiceImpl<QcresultInfoMapper, Qcr
     public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO) {
     public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO) {
         return baseMapper.entryCountGroupByEntryAndDept(filterByDeptVO);
         return baseMapper.entryCountGroupByEntryAndDept(filterByDeptVO);
     }
     }
+
+    /**
+     * 各模块缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @Override
+    public IPage<NumDTO> entryCountGroupByCasePage(@Param("filterPageVO") FilterPageVO filterPageVO) {
+        return baseMapper.entryCountGroupByCasePage(filterPageVO);
+    }
+
+    /**
+     * 条目缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO) {
+        return baseMapper.entryCountGroupByEntryPage(filterPageVO);
+    }
 }
 }

+ 37 - 0
src/main/java/com/diagbot/vo/FilterPageVO.java

@@ -0,0 +1,37 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/14 14:57
+ */
+@Getter
+@Setter
+public class FilterPageVO extends Page {
+    /**
+     * 统计维度 1-本月,2-本年
+     */
+    private Integer type;
+    /**
+     * 起始时间
+     */
+    @ApiModelProperty(hidden = true)
+    private String startDate;
+    /**
+     * 结束时间
+     */
+    @ApiModelProperty(hidden = true)
+    private String endDate;
+    /**
+     * 医院id
+     */
+    @ApiModelProperty(hidden = true)
+    private String hospitalId;
+
+    private String name;
+}

+ 32 - 0
src/main/java/com/diagbot/vo/QcAbnormalSaveVO.java

@@ -0,0 +1,32 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/5/15 10:16
+ */
+@Getter
+@Setter
+public class QcAbnormalSaveVO {
+    /**
+     * 主键
+     */
+    @NotNull(message = "请输入异常数据监控ID")
+    private Long id;
+
+    /**
+     * 状态(0:未处理,1:已处理)
+     */
+    @NotNull(message = "请输入处理状态")
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 34 - 0
src/main/java/com/diagbot/vo/QcAbnormalVO.java

@@ -0,0 +1,34 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/5/15 10:16
+ */
+@Getter
+@Setter
+public class QcAbnormalVO extends Page {
+    /**
+     * 病人住院ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 异常类型(1:数据模块 2:质控类型 3:XML结构)
+     */
+    private Integer type;
+
+    /**
+     * 状态(0:未处理,1:已处理)
+     */
+    private Integer status;
+
+    //医院ID
+    @ApiModelProperty(hidden = true)
+    private Long hospitalId;
+}

+ 34 - 0
src/main/java/com/diagbot/web/ConsoleController.java

@@ -1,8 +1,11 @@
 package com.diagbot.web;
 package com.diagbot.web;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.ConsoleFacade;
 import com.diagbot.facade.ConsoleFacade;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.FilterVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
@@ -189,4 +192,35 @@ public class ConsoleController {
         return RespDTO.onSuc(consoleFacade.entryByDept(filterVO));
         return RespDTO.onSuc(consoleFacade.entryByDept(filterVO));
     }
     }
     //-----------------------单独接口结束-------------------------------
     //-----------------------单独接口结束-------------------------------
+
+    //-----------------------分页接口开始-------------------------------
+
+    /**
+     * 各模块缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @ApiOperation(value = "各模块缺陷占比(分页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
+    @PostMapping("/entryCountGroupByCasePage")
+    @SysLogger("entryCountGroupByCasePage")
+    public RespDTO<IPage<NumDTO>> entryCountGroupByCasePage(@RequestBody FilterPageVO filterPageVO) {
+        return RespDTO.onSuc(consoleFacade.entryCountGroupByCasePage(filterPageVO));
+    }
+
+    /**
+     * 各模块缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @ApiOperation(value = "条目缺陷占比(分页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
+    @PostMapping("/entryCountGroupByEntryPage")
+    @SysLogger("entryCountGroupByEntryPage")
+    public RespDTO<IPage<NumDTO>> entryCountGroupByEntryPage(@RequestBody FilterPageVO filterPageVO) {
+        return RespDTO.onSuc(consoleFacade.entryCountGroupByEntryPage(filterPageVO));
+    }
+    //-----------------------分页接口结束-------------------------------
 }
 }

+ 54 - 0
src/main/java/com/diagbot/web/QcAbnormalController.java

@@ -0,0 +1,54 @@
+package com.diagbot.web;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.QcAbnormalDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.QcAbnormalFacade;
+import com.diagbot.vo.QcAbnormalSaveVO;
+import com.diagbot.vo.QcAbnormalVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+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>
+ * 异常数据监控信息 前端控制器
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-15
+ */
+@RequestMapping("/qc/abnormal")
+@RestController
+@Api(value = "异常数据监控相关API", tags = { "异常数据监控相关API" })
+@SuppressWarnings("unchecked")
+public class QcAbnormalController {
+    @Autowired
+    private QcAbnormalFacade qcAbnormalFacade;
+
+    @ApiOperation(value = "查询异常数据监控信息[by:gaodm]",
+            notes = "")
+    @PostMapping("/getQcAnnormal")
+    @SysLogger("getQcAnnormal")
+    public RespDTO<IPage<QcAbnormalDTO>> getQcAnnormal(@RequestBody QcAbnormalVO qcAbnormalVO) {
+        return RespDTO.onSuc(qcAbnormalFacade.getQcAnnormalFac(qcAbnormalVO));
+    }
+
+    @ApiOperation(value = "更新异常数据监控信息[by:gaodm]",
+            notes = "")
+    @PostMapping("/saveQcAnnormal")
+    @SysLogger("saveQcAnnormal")
+    @Transactional
+    public RespDTO<Boolean> saveQcAnnormal(@RequestBody @Valid QcAbnormalSaveVO qcAbnormalSaveVO) {
+        return RespDTO.onSuc(qcAbnormalFacade.saveQcAnnormal(qcAbnormalSaveVO));
+    }
+}

+ 41 - 0
src/main/resources/mapper/QcAbnormalMapper.xml

@@ -0,0 +1,41 @@
+<?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.diagbot.mapper.QcAbnormalMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.QcAbnormal">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="behospital_code" property="behospitalCode" />
+        <result column="type" property="type" />
+        <result column="description" property="description" />
+        <result column="status" property="status" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <select id="getQcAnnormal" resultType="com.diagbot.dto.QcAbnormalDTO" parameterType="com.diagbot.vo.QcAbnormalVO">
+        SELECT
+        t1.*
+        FROM
+        `qc_abnormal` t1
+        WHERE
+        t1.is_deleted = 'N'
+        <if test="hospitalId != null">
+            and t1.hospital_id = #{hospitalId}
+        </if>
+        <if test="type != null">
+            and t1.type = #{type}
+        </if>
+        <if test="status != null">
+            and t1.status = #{status}
+        </if>
+        <if test="behospitalCode != null and behospitalCode != ''">
+            and t1.behospital_code like CONCAT('%',#{behospitalCode},'%')
+        </if>
+    </select>
+</mapper>

+ 130 - 0
src/main/resources/mapper/QcresultInfoMapper.xml

@@ -385,4 +385,134 @@
         a.beh_dept_id,
         a.beh_dept_id,
         a.beh_dept_name
         a.beh_dept_name
     </select>
     </select>
+
+    <!-- 按模块统计质控缺陷数(分页) -->
+    <select id="entryCountGroupByCasePage"  resultType="com.diagbot.dto.NumDTO">
+        SELECT
+        d.cases_id AS id,
+        e.NAME AS name,
+        count(*) AS num
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail d,
+        qc_cases e,
+        qc_cases_entry f
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND e.is_deleted = 'N'
+        AND f.is_deleted = 'N'
+        AND a.hospital_id = b.hospital_id
+        AND a.hospital_id = c.hospital_id
+        AND a.hospital_id = d.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.behospital_code = c.behospital_code
+        AND a.behospital_code = d.behospital_code
+        AND d.cases_id = e.id
+        AND d.cases_entry_id = f.id
+        AND e.id = f.cases_id
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageVO.hospitalId}
+        </if>
+        <if test="filterPageVO.startDate != null and filterPageVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageVO.startDate})]]>
+        </if>
+        <if test="filterPageVO.endDate != null and filterPageVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageVO.endDate})]]>
+        </if>
+        <if test="filterPageVO.name != null and filterPageVO.name != ''">
+            AND e.name like CONCAT('%', #{filterPageVO.name},'%')
+        </if>
+        GROUP BY
+        d.cases_id,
+        e.`name`
+    </select>
+
+    <!-- 条目缺陷分组统计(分页) -->
+    <select id="entryCountGroupByEntryPage"  resultType="com.diagbot.dto.NumDTO">
+        SELECT t.*
+        FROM
+        (SELECT
+        t1.id,
+        t1.NAME,
+        count(*) AS num,
+        t2.totleNum
+        FROM
+        (
+        SELECT
+        d.id AS id,
+        d.NAME AS NAME
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_detail c,
+        qc_cases_entry d
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND a.hospital_id = b.hospital_id
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.behospital_code = c.behospital_code
+        AND c.cases_id = d.cases_id
+        AND c.cases_entry_id = d.id
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageVO.hospitalId}
+        </if>
+        <if test="filterPageVO.startDate != null and filterPageVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageVO.startDate})]]>
+        </if>
+        <if test="filterPageVO.endDate != null and filterPageVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageVO.endDate})]]>
+        </if>
+        <if test="filterPageVO.name != null and filterPageVO.name != ''">
+            AND d.name like CONCAT('%', #{filterPageVO.name},'%')
+        </if>
+        ) t1,(
+        SELECT
+        count(*) AS totleNum
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_detail c,
+        qc_cases_entry d
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND a.hospital_id = b.hospital_id
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.behospital_code = c.behospital_code
+        AND c.cases_id = d.cases_id
+        AND c.cases_entry_id = d.id
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageVO.hospitalId}
+        </if>
+        <if test="filterPageVO.startDate != null and filterPageVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageVO.startDate})]]>
+        </if>
+        <if test="filterPageVO.endDate != null and filterPageVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageVO.endDate})]]>
+        </if>
+        <if test="filterPageVO.name != null and filterPageVO.name != ''">
+            AND d.name like CONCAT('%', #{filterPageVO.name},'%')
+        </if>
+        ) t2
+        GROUP BY
+        t1.id,
+        t1.NAME
+        ORDER BY
+        count(*) DESC)t
+    </select>
 </mapper>
 </mapper>