zhaops пре 4 година
родитељ
комит
9de4f78bb3

+ 7 - 0
pom.xml

@@ -165,6 +165,13 @@
             <version>${druid.version}</version>
         </dependency>
 
+        <!-- https://mvnrepository.com/artifact/cglib/cglib -->
+        <dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib</artifactId>
+            <version>2.2.2</version>
+        </dependency>
+
         <!-- springboot整合mybatis(核心就这一个) -->
         <!-- 注意顺序,这个一定要放在最下面 -->
         <dependency>

+ 18 - 0
src/main/java/com/diagbot/dto/ColumnDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/7/13 17:37
+ */
+@Getter
+@Setter
+public class ColumnDTO {
+    private String name;
+    private String field;
+    private Integer orderNo;
+    private String fieldType;
+}

+ 19 - 0
src/main/java/com/diagbot/dto/UnModifyMRDTO.java

@@ -0,0 +1,19 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/7/13 16:57
+ */
+@Getter
+@Setter
+public class UnModifyMRDTO {
+    private String deptId;
+    private String deptName;
+    private Long casesEntryId;
+    private String casesEntryName;
+    private Integer casesEntryNum;
+}

+ 74 - 0
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1,11 +1,13 @@
 package com.diagbot.facade;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.aggregate.AverageStatisticsAggregate;
 import com.diagbot.aggregate.MrStatisticsAggregate;
 import com.diagbot.aggregate.ResultStatisticsAggregate;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.AverageStatisticsFeeDTO;
+import com.diagbot.dto.ColumnDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.EntryNumDTO;
 import com.diagbot.dto.EntryNumGroupDTO;
@@ -17,14 +19,19 @@ import com.diagbot.dto.LevelStatisticsTZDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.dto.QcResultShortDTO;
+import com.diagbot.dto.UnModifyMRDTO;
+import com.diagbot.entity.SysHospitalSet;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.util.ClassUtil;
+import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.EntryStatisticsVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByAverageVO;
 import com.diagbot.vo.FilterPageVO;
+import com.diagbot.vo.FilterUnModifyMRVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcResultShortPageVO;
 import com.google.common.collect.Lists;
@@ -35,6 +42,7 @@ import org.springframework.stereotype.Component;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -65,6 +73,8 @@ public class ConsoleFacade {
     private HomePageFacade homePageFacade;
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private SysHospitalSetFacade sysHospitalSetFacade;
 
     //region-----------------------聚合接口开始-------------------------------
 
@@ -961,4 +971,68 @@ public class ConsoleFacade {
         item.setImproveToFullPercentStr(improveToFullPercentStr);
         return item;
     }
+
+    /**
+     * 未整改病历统计
+     *
+     * @param filterUnModifyMRVO
+     * @return
+     */
+    public List<Object> unModifyMRStatistics(FilterUnModifyMRVO filterUnModifyMRVO) {
+        filterFacade.filterUnModifyMRVOSet(filterUnModifyMRVO);
+
+        //colums
+        QueryWrapper<SysHospitalSet> hospitalSetQueryWrapper = new QueryWrapper<>();
+        hospitalSetQueryWrapper.eq("is_deleted", 'N')
+                .eq("hospital_id", filterUnModifyMRVO.getHospitalId())
+                .eq("code", "unmodify_mr_entry_cx");
+        SysHospitalSet hospitalSet = sysHospitalSetFacade.getOne(hospitalSetQueryWrapper);
+        if (hospitalSet == null || StringUtil.isBlank(hospitalSet.getValue())) {
+            return null;
+        }
+
+        List<String> columnSet = Arrays.asList(hospitalSet.getValue().split(",||,"));
+        List<ColumnDTO> columns = Lists.newLinkedList();
+        Integer orderNo = 1;
+        for (String valueStr : columnSet) {
+            String[] keyValue = valueStr.split("||");
+            if (keyValue != null || keyValue.length > 1) {
+                ColumnDTO column = new ColumnDTO();
+                column.setOrderNo(orderNo);
+                column.setField("field_" + keyValue[0]);
+                column.setName(keyValue[1]);
+                columns.add(column);
+                orderNo++;
+            }
+        }
+
+        //字段名称
+        List<String> fields = columns.stream().map(item -> item.getField()).collect(Collectors.toList());
+
+        List<UnModifyMRDTO> records = behospitalInfoFacade.unModifyMRStatistics(filterUnModifyMRVO);
+        Map<String, List<UnModifyMRDTO>> deptMap = EntityUtil.makeEntityListMap(records, "deptId");
+        Map<String, Map<Long, List<UnModifyMRDTO>>> deptEntryMap = new LinkedHashMap<>();
+        for (Map.Entry<String, List<UnModifyMRDTO>> entry : deptMap.entrySet()) {
+            Map<Long, List<UnModifyMRDTO>> entryMap = EntityUtil.makeEntityListMap(entry.getValue(), "casesEntryId");
+            deptEntryMap.put(entry.getKey(), entryMap);
+        }
+        List<Object> retLists = Lists.newLinkedList();
+
+        try {
+            Object obj = new Object();
+            HashMap addMap = new HashMap();
+            HashMap addValMap = new HashMap();
+            for (String fieldName : fields) {
+                addMap.put(fieldName, Class.forName("java.lang.Integer"));
+                addValMap.put("fieldName", "");
+            }
+            Object obj2 = new ClassUtil().dynamicClass(obj, addMap, addValMap);
+
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
 }

+ 13 - 0
src/main/java/com/diagbot/facade/FilterFacade.java

@@ -10,6 +10,7 @@ import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByAverageVO;
 import com.diagbot.vo.FilterPageByDeptVO;
 import com.diagbot.vo.FilterPageVO;
+import com.diagbot.vo.FilterUnModifyMRVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcResultShortPageVO;
 import org.springframework.stereotype.Component;
@@ -265,4 +266,16 @@ public class FilterFacade {
         /*long interval = entryStatisticsVO.getEndDate().getTime() + 1000;
         entryStatisticsVO.setEndDate(new Date(Long.valueOf(interval)));*/
     }
+
+    /**
+     * 未整改病历统计入参拼接
+     *
+     * @param filterUnModifyMRVO
+     */
+    public void filterUnModifyMRVOSet(FilterUnModifyMRVO filterUnModifyMRVO) {
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        filterUnModifyMRVO.setHospitalId(hospitalId);
+        filterUnModifyMRVO.setUserId(Long.valueOf(userId));
+    }
 }

+ 10 - 0
src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java

@@ -13,6 +13,7 @@ import com.diagbot.dto.LevelStatisticsTZDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultShortDTO;
+import com.diagbot.dto.UnModifyMRDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeVO;
@@ -23,6 +24,7 @@ import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByDeptVO;
 import com.diagbot.vo.FilterPageVO;
+import com.diagbot.vo.FilterUnModifyMRVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcResultShortPageVO;
 import com.diagbot.vo.TaskVO;
@@ -327,4 +329,12 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @return
      */
     public List<ExportExcelDTO> qcResultShortPageExport(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);
+
+    /**
+     * 未整改病历统计
+     *
+     * @param filterUnModifyMRVO
+     * @return
+     */
+    public List<UnModifyMRDTO> unModifyMRStatistics(FilterUnModifyMRVO filterUnModifyMRVO);
 }

+ 10 - 0
src/main/java/com/diagbot/service/BehospitalInfoService.java

@@ -13,6 +13,7 @@ import com.diagbot.dto.LevelStatisticsTZDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultShortDTO;
+import com.diagbot.dto.UnModifyMRDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeVO;
@@ -23,6 +24,7 @@ import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByDeptVO;
 import com.diagbot.vo.FilterPageVO;
+import com.diagbot.vo.FilterUnModifyMRVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcResultShortPageVO;
 import com.diagbot.vo.TaskVO;
@@ -320,4 +322,12 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @return
      */
     public List<ExportExcelDTO> qcResultShortPageExport(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);
+
+    /**
+     * 未整改病历统计
+     *
+     * @param filterUnModifyMRVO
+     * @return
+     */
+    public List<UnModifyMRDTO> unModifyMRStatistics(FilterUnModifyMRVO filterUnModifyMRVO);
 }

+ 12 - 0
src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java

@@ -13,6 +13,7 @@ import com.diagbot.dto.LevelStatisticsTZDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultShortDTO;
+import com.diagbot.dto.UnModifyMRDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.mapper.BehospitalInfoMapper;
 import com.diagbot.service.BehospitalInfoService;
@@ -25,6 +26,7 @@ import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByDeptVO;
 import com.diagbot.vo.FilterPageVO;
+import com.diagbot.vo.FilterUnModifyMRVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcResultShortPageVO;
 import com.diagbot.vo.TaskVO;
@@ -436,4 +438,14 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
     public List<ExportExcelDTO> qcResultShortPageExport(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO) {
         return baseMapper.qcResultShortPageExport(qcResultShortPageVO);
     }
+
+    /**
+     * 未整改病历统计
+     *
+     * @param filterUnModifyMRVO
+     * @return
+     */
+    public List<UnModifyMRDTO> unModifyMRStatistics(FilterUnModifyMRVO filterUnModifyMRVO){
+        return baseMapper.unModifyMRStatistics(filterUnModifyMRVO);
+    }
 }

+ 57 - 0
src/main/java/com/diagbot/util/ClassUtil.java

@@ -0,0 +1,57 @@
+package com.diagbot.util;
+
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/7/13 16:56
+ */
+public class ClassUtil {
+    /**
+     * @param object    旧的对象带值
+     * @param addMap    动态需要添加的属性和属性类型
+     * @param addValMap 动态需要添加的属性和属性值
+     * @return 新的对象
+     * @throws Exception
+     */
+    public Object dynamicClass(Object object, HashMap addMap, HashMap addValMap) throws Exception {
+        HashMap returnMap = new HashMap();
+        HashMap typeMap = new HashMap();
+
+
+        Class<?> type = object.getClass();
+        BeanInfo beanInfo = Introspector.getBeanInfo(type);
+        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+        for (int i = 0; i < propertyDescriptors.length; i++) {
+            PropertyDescriptor descriptor = propertyDescriptors[i];
+            String propertyName = descriptor.getName();
+            if (!propertyName.equals("class")) {
+                Method readMethod = descriptor.getReadMethod();
+                Object result = readMethod.invoke(object);
+                //可以判断为 NULL不赋值
+                returnMap.put(propertyName, result);
+                typeMap.put(propertyName, descriptor.getPropertyType());
+            }
+        }
+
+        returnMap.putAll(addValMap);
+        typeMap.putAll(addMap);
+        //map转换成实体对象
+        DynamicBean bean = new DynamicBean(typeMap);
+        //赋值
+        Set keys = typeMap.keySet();
+        for (Iterator it = keys.iterator(); it.hasNext(); ) {
+            String key = (String) it.next();
+            bean.setValue(key, returnMap.get(key));
+        }
+        Object obj = bean.getObject();
+        return obj;
+    }
+}

+ 70 - 0
src/main/java/com/diagbot/util/DynamicBean.java

@@ -0,0 +1,70 @@
+package com.diagbot.util;
+
+import net.sf.cglib.beans.BeanGenerator;
+import net.sf.cglib.beans.BeanMap;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/7/13 16:55
+ */
+public class DynamicBean {
+    private Object object = null; //动态生成的类
+    private BeanMap beanMap = null; //存放属性名称以及属性的类型
+
+    public DynamicBean() {
+        super();
+    }
+
+    public DynamicBean(Map propertyMap) {
+        this.object = generateBean(propertyMap);
+        this.beanMap = BeanMap.create(this.object);
+    }
+
+    /**
+     * @param propertyMap
+     * @return
+     */
+    private Object generateBean(Map propertyMap) {
+        BeanGenerator generator = new BeanGenerator();
+        Set keySet = propertyMap.keySet();
+        for (Iterator i = keySet.iterator(); i.hasNext(); ) {
+            String key = (String) i.next();
+            generator.addProperty(key, (Class) propertyMap.get(key));
+        }
+        return generator.create();
+    }
+
+    /**
+     * 给bean属性赋值
+     *
+     * @param property 属性名
+     * @param value    值
+     */
+    public void setValue(Object property, Object value) {
+        beanMap.put(property, value);
+    }
+
+    /**
+     * 通过属性名得到属性值
+     *
+     * @param property 属性名
+     * @return 值
+     */
+    public Object getValue(String property) {
+        return beanMap.get(property);
+    }
+
+    /**
+     * 得到该实体bean对象
+     *
+     * @return
+     */
+    public Object getObject() {
+        return this.object;
+    }
+}

+ 59 - 0
src/main/java/com/diagbot/vo/FilterUnModifyMRVO.java

@@ -0,0 +1,59 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/7/13 17:06
+ */
+@Getter
+@Setter
+public class FilterUnModifyMRVO {
+    /**
+     * 起始时间
+     */
+    @NotNull(message = "请输入起始时间")
+    private Date startDate;
+    /**
+     * 结束时间
+     */
+    @NotNull(message = "请输入结束时间")
+    private Date endDate;
+    /**
+     * 医院id
+     */
+    @ApiModelProperty(hidden = true)
+    private String hospitalId;
+    /**
+     * 医生id
+     */
+    @ApiModelProperty(hidden = true)
+    private Long userId;
+    /**
+     * 关键条目id
+     */
+    @ApiModelProperty(hidden = true)
+    private List<Long> casesEntryIds;
+
+    /**
+     * 科室名称
+     */
+    private String name;
+
+    /**
+     * 排序(升序)
+     */
+    private String asc;
+
+    /**
+     * 排序(降序)
+     */
+    private String desc;
+}

+ 50 - 0
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -5087,4 +5087,54 @@
         f1.behDeptId = f2.behDeptId
         AND f1.behDeptName = f2.behDeptName
     </select>
+
+    <!-- 未整改病历统计-->
+    <select id="unModifyMRStatistics" resultType="com.diagbot.dto.UnModifyMRDTO" parameterType="com.diagbot.vo.FilterUnModifyMRVO">
+        SELECT
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        d.id AS casesEntryId,
+        d.NAME AS casesEntryName,
+        count(*) AS casesEntryNum
+        FROM
+        med_behospital_info a,
+        med_qcresult_info 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_entry_id = d.id
+        AND a.qc_type_id != 0
+        AND a.is_placefile = '1'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ AND a.leave_hospital_date >= #{startDate}]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[ AND a.leave_hospital_date <= #{endDate}]]>
+        </if>
+        <if test="name != null and name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{name}, '%')
+        </if>
+        <if test="casesEntryIds != null and casesEntryIds.size()>0">
+            AND c.cases_entry_id IN
+            <foreach collection="casesEntryIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name,
+        c.cases_entry_id,
+        d.NAME
+    </select>
 </mapper>