zhaops 5 лет назад
Родитель
Сommit
1484bb14a2

+ 28 - 3
src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java

@@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -45,15 +46,29 @@ public class ResultStatisticsAggregate {
 
     @DataProvider("getResult")
     public List<ResultDetailDTO> getResult(@InvokeParameter("filterVO") FilterVO filterVO) {
-        List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics(filterVO);
+        List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics2(filterVO);
+
         if (ListUtil.isNotEmpty(results)) {
+            int totle = results
+                    .stream()
+                    .map(ResultDetailDTO::getNum)
+                    .reduce(0, Integer::sum);
+            List<ResultDetailDTO> retResutls = Lists.newLinkedList();
             results.forEach(result -> {
+                Double percent = BigDecimal.valueOf(result.getNum())
+                        .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                result.setPercent(percent);
                 DecimalFormat df = new DecimalFormat("#0.00");
                 String percentStr
                         = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
                 result.setPercentStr(percentStr);
+                if (retResutls.size() < 10) {
+                    retResutls.add(result);
+                }
+
             });
-            return results;
+            return retResutls;
         }
 
         return null;
@@ -61,8 +76,18 @@ public class ResultStatisticsAggregate {
 
     @DataProvider("getResultDept")
     public List<ResultDetailDTO> getResultDept(@InvokeParameter("filterVO") FilterVO filterVO) {
-        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept(filterVO);
+        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept2(filterVO);
         if (ListUtil.isNotEmpty(results2)) {
+            int totle = results2
+                    .stream()
+                    .map(ResultDetailDTO::getNum)
+                    .reduce(0, Integer::sum);
+            results2.forEach(result -> {
+                Double percent = BigDecimal.valueOf(result.getNum())
+                        .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                result.setPercent(percent);
+            });
             List<ResultDetailDTO> retResults = Lists.newLinkedList();
             if (results2.size() <= 6) {
                 retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);

+ 4 - 3
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -157,9 +158,9 @@ public class ConsoleFacade {
         String startDate = getStartDateStr(filterVO.getType());
         filterVO.setStartDate(startDate);
         filterVO.setHospitalId(hospitalId);
-        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
+        /*if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
             filterVO.setLimitCount(10);
-        }
+        }*/
         //        List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics(filterVO);
         //        if (ListUtil.isNotEmpty(results)) {
         //            results.forEach(result -> {
@@ -303,7 +304,7 @@ public class ConsoleFacade {
                 }
             }
             averageValue = BigDecimal.valueOf(totleValue)
-                    .divide(BigDecimal.valueOf(num), 2)
+                    .divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP)
                     .doubleValue();
             AverageStatisticsDTO retAverageStatistics = new AverageStatisticsDTO();
             retAverageStatistics.setDeptName("其他");

+ 25 - 1
src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java

@@ -42,6 +42,30 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      */
     public List<ResultDetailDTO> resultStatisticsByDept(FilterVO filterVO);
 
+    /**
+     * 缺陷排行列表统计-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<ResultDetailDTO> resultStatistics2(FilterVO filterVO);
+
+    /**
+     * 各科室缺陷占比-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<ResultDetailDTO> resultStatisticsByDept2(FilterVO filterVO);
+
+    /**
+     * 缺陷总数
+     *
+     * @param filterVO
+     * @return
+     */
+    public int getTotleResultNum(FilterVO filterVO);
+
 
     public List<BehospitalInfo> getNoGrade();
-}
+}

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

@@ -42,6 +42,30 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      */
     public List<ResultDetailDTO> resultStatisticsByDept(FilterVO filterVO);
 
+    /**
+     * 缺陷排行列表统计-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<ResultDetailDTO> resultStatistics2(FilterVO filterVO);
+
+    /**
+     * 各科室缺陷占比-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<ResultDetailDTO> resultStatisticsByDept2(FilterVO filterVO);
+
+    /**
+     * 缺陷总数
+     *
+     * @param filterVO
+     * @return
+     */
+    public int getTotleResultNum(FilterVO filterVO);
+
 
     public List<BehospitalInfo> getNoGrade();
 }

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

@@ -58,6 +58,39 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
         return baseMapper.resultStatisticsByDept(filterVO);
     }
 
+    /**
+     * 缺陷排行列表统计-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<ResultDetailDTO> resultStatistics2(FilterVO filterVO) {
+        return baseMapper.resultStatistics2(filterVO);
+    }
+
+    /**
+     * 各科室缺陷占比-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<ResultDetailDTO> resultStatisticsByDept2(FilterVO filterVO) {
+        return baseMapper.resultStatisticsByDept2(filterVO);
+    }
+
+    /**
+     * 缺陷总数
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public int getTotleResultNum(FilterVO filterVO) {
+        return baseMapper.getTotleResultNum(filterVO);
+    }
+
     @Override
     public List<BehospitalInfo> getNoGrade() {
         return baseMapper.getNoGrade();

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

@@ -210,6 +210,93 @@
         )
     </select>
 
+    <!-- 缺陷排行列表 -->
+    <select id="resultStatistics2"  parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.ResultDetailDTO">
+        SELECT
+        c.msg as name,
+        count(*) AS num
+        FROM
+        med_behospital_info a,
+        med_qcresult_info b,
+        med_qcresult_detail c
+        WHERE
+        a.behospital_code = b.behospital_code
+        AND a.hospital_id = b.hospital_id
+        AND b.behospital_code = c.behospital_code
+        AND b.hospital_id = c.hospital_id
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
+        </if>
+        GROUP BY
+        c.msg
+        ORDER BY
+        count(*) DESC
+        <if test="limitCount != null and limitCount != ''">
+            limit 0,#{limitCount}
+        </if>
+    </select>
+
+    <!-- 各科室缺陷占比 -->
+    <select id="resultStatisticsByDept2"  parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.ResultDetailDTO">
+        SELECT
+        a.beh_dept_id,
+        a.beh_dept_name as name,
+        count(*) AS num
+        FROM
+        med_behospital_info a,
+        med_qcresult_info b,
+        med_qcresult_detail c
+        WHERE
+        a.behospital_code = b.behospital_code
+        AND a.hospital_id = b.hospital_id
+        AND b.behospital_code = c.behospital_code
+        AND b.hospital_id = c.hospital_id
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ORDER BY
+        count(*) DESC
+    </select>
+
+    <!-- 缺陷总数查询-->
+    <select id="getTotleResultNum"  parameterType="com.diagbot.vo.FilterVO" resultType="int">
+        SELECT
+        count(*) AS totle
+        FROM
+        med_behospital_info a,
+        med_qcresult_info b,
+        med_qcresult_detail c
+        WHERE
+        a.behospital_code = b.behospital_code
+        AND a.hospital_id = b.hospital_id
+        AND b.behospital_code = c.behospital_code
+        AND b.hospital_id = c.hospital_id
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
+        </if>
+    </select>
+
 
     <select id="getNoGrade" resultMap="BaseResultMap">
          select * from med_behospital_info a