瀏覽代碼

质量监控分析报表

wangliang 9 月之前
父節點
當前提交
2f0cb1aef8

+ 41 - 4
sop-api/src/main/java/com/qmth/sop/server/api/QualityAnalyseReportController.java

@@ -5,9 +5,11 @@ import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.sop.business.bean.report.QualityAnalyseReportBean;
 import com.qmth.sop.business.service.QualityAnalyseReportService;
 import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.enums.QualityProblemReasonEnum;
 import com.qmth.sop.common.util.Result;
 import com.qmth.sop.common.util.ResultUtil;
 import io.swagger.annotations.*;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -15,9 +17,8 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Api(tags = "质量监控分析Controller")
 @RestController
@@ -40,6 +41,8 @@ public class QualityAnalyseReportController {
 
     public static final String IN_FLUENCE_DEGREE_D_RATE_TOTAL = "influenceDegreeDRateTotal";
 
+    public static final String REASON_RATE_TOTAL = "reasonRateTotal";
+
     @Resource
     QualityAnalyseReportService qualityAnalyseReportService;
 
@@ -61,7 +64,41 @@ public class QualityAnalyseReportController {
     @RequestMapping(value = "/type/report", method = RequestMethod.POST)
     @ApiResponses({ @ApiResponse(code = 200, message = "质量监控分析报表", response = QualityAnalyseReportBean.class) })
     public Result typeReport(@ApiParam(value = "服务单元id", required = true) @RequestParam Long serviceId) {
-        return ResultUtil.ok();
+        List<QualityAnalyseReportBean> qualityAnalyseReportBeanList = qualityAnalyseReportService.reasonQualityReport(
+                serviceId);
+        Integer total = qualityAnalyseReportBeanList.stream().mapToInt(s -> s.getReasonSum()).sum();
+        if (!CollectionUtils.isEmpty(qualityAnalyseReportBeanList)) {
+            Set<QualityProblemReasonEnum> qualityAnalyseReportBeanAddSet = new LinkedHashSet<>();
+            QualityProblemReasonEnum[] qualityProblemReasonEnums = QualityProblemReasonEnum.values();
+            for (QualityProblemReasonEnum q : qualityProblemReasonEnums) {
+                List<QualityAnalyseReportBean> tempList = qualityAnalyseReportBeanList.stream()
+                        .filter(x -> q == x.getReason()).collect(Collectors.toList());
+                if (CollectionUtils.isEmpty(tempList)) {
+                    qualityAnalyseReportBeanAddSet.add(q);
+                }
+            }
+            qualityAnalyseReportBeanList.stream().peek(s -> {
+                s.setNull();
+                for (QualityProblemReasonEnum q : qualityProblemReasonEnums) {
+                    if (q == s.getReason()) {
+                        BigDecimal reasonRate = new BigDecimal(s.getReasonSum());
+                        reasonRate = reasonRate.divide(new BigDecimal(total), 2, BigDecimal.ROUND_HALF_UP)
+                                .multiply(SystemConstant.RATE).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        s.setReasonRate(reasonRate);
+                        break;
+                    }
+                }
+            }).collect(Collectors.toList());
+            qualityAnalyseReportBeanAddSet.stream()
+                    .peek(s -> qualityAnalyseReportBeanList.add(new QualityAnalyseReportBean(s)))
+                    .collect(Collectors.toList());
+        }
+        Double reasonRateTotal = qualityAnalyseReportBeanList.stream().mapToDouble(s -> s.getReasonRate().doubleValue())
+                .sum();
+        return ResultUtil.ok(
+                new ImmutableMap.Builder<String, Object>().put(ResourceSecurityReportController.TOTAL, total)
+                        .put(REASON_RATE_TOTAL, new BigDecimal(reasonRateTotal))
+                        .put(ResourceSecurityReportController.RECORDS, qualityAnalyseReportBeanList).build());
     }
 
     /**

+ 31 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/report/QualityAnalyseReportBean.java

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.Objects;
 
 /**
  * @Description: 质量监控分析报表bean
@@ -62,12 +63,34 @@ public class QualityAnalyseReportBean implements Serializable {
     @ApiModelProperty(value = "问题原因")
     QualityProblemReasonEnum reason;
 
+    @ApiModelProperty(value = "问题原因str")
+    String reasonStr;
+
     @ApiModelProperty(value = "问题原因总数")
     Integer reasonSum;
 
     @ApiModelProperty(value = "问题原因比率")
     BigDecimal reasonRate;
 
+    public QualityAnalyseReportBean() {
+
+    }
+
+    public QualityAnalyseReportBean(QualityProblemReasonEnum qualityProblemReasonEnum) {
+        this.setNull();
+        this.setReason(qualityProblemReasonEnum);
+        this.setReasonStr(this.getReason().getTitle());
+        this.setReasonSum(0);
+        this.setReasonRate(new BigDecimal(0));
+    }
+
+    public void setNull() {
+        this.setInfluenceDegreeATitle(null);
+        this.setInfluenceDegreeBTitle(null);
+        this.setInfluenceDegreeCTitle(null);
+        this.setInfluenceDegreeDTitle(null);
+    }
+
     public String getInfluenceDegreeATitle() {
         return influenceDegreeATitle;
     }
@@ -203,4 +226,12 @@ public class QualityAnalyseReportBean implements Serializable {
     public void setInfluenceDegreeD(Integer influenceDegreeD) {
         this.influenceDegreeD = influenceDegreeD;
     }
+
+    public String getReasonStr() {
+        return Objects.nonNull(reason) ? reason.getTitle() : reasonStr;
+    }
+
+    public void setReasonStr(String reasonStr) {
+        this.reasonStr = reasonStr;
+    }
 }

+ 8 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/QualityAnalyseReportMapper.java

@@ -31,4 +31,12 @@ public interface QualityAnalyseReportMapper extends BaseMapper<TBService> {
      * @return
      */
     List<QualityAnalyseReportBean> humanSupplierQualityReport(@Param("serviceId") Long serviceId);
+
+    /**
+     * 质量问题原因分类统计
+     *
+     * @param serviceId
+     * @return
+     */
+    List<QualityAnalyseReportBean> reasonQualityReport(@Param("serviceId") Long serviceId);
 }

+ 8 - 0
sop-business/src/main/java/com/qmth/sop/business/service/QualityAnalyseReportService.java

@@ -30,4 +30,12 @@ public interface QualityAnalyseReportService extends IService<TBService> {
      * @return
      */
     List<QualityAnalyseReportBean> humanSupplierQualityReport(Long serviceId);
+
+    /**
+     * 质量问题原因分类统计
+     *
+     * @param serviceId
+     * @return
+     */
+    List<QualityAnalyseReportBean> reasonQualityReport(Long serviceId);
 }

+ 11 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/QualityAnalyseReportServiceImpl.java

@@ -41,4 +41,15 @@ public class QualityAnalyseReportServiceImpl extends ServiceImpl<QualityAnalyseR
     public List<QualityAnalyseReportBean> humanSupplierQualityReport(Long serviceId) {
         return this.baseMapper.humanSupplierQualityReport(serviceId);
     }
+
+    /**
+     * 质量问题原因分类统计
+     *
+     * @param serviceId
+     * @return
+     */
+    @Override
+    public List<QualityAnalyseReportBean> reasonQualityReport(Long serviceId) {
+        return this.baseMapper.reasonQualityReport(serviceId);
+    }
 }

+ 22 - 3
sop-business/src/main/resources/mapper/QualityAnalyseReportMapper.xml

@@ -30,7 +30,12 @@
     </select>
 
     <select id="humanSupplierQualityReport" resultType="com.qmth.sop.business.bean.report.QualityAnalyseReportBean">
-        select distinct IFNULL(ss.name, '启明') as name,
+        select temp.*,
+           ROUND(temp.influenceDegreeA / sum,2) * 100 as influenceDegreeARate,
+           ROUND(temp.influenceDegreeB / sum,2) * 100 as influenceDegreeBRate,
+           ROUND(temp.influenceDegreeC / sum,2) * 100 as influenceDegreeCRate,
+           ROUND(temp.influenceDegreeD / sum,2) * 100 as influenceDegreeDRate
+        from(select distinct IFNULL(ss.name, '启明') as name,
         sum(t.sum) as sum,
         sum(t.influenceDegreeA) as influenceDegreeA,
         sum(t.influenceDegreeB) as influenceDegreeB,
@@ -55,7 +60,21 @@
         left join t_b_user_archives tbua on tbua.mobile_number = t.mobileNumber
         left join t_b_user_archives_supplier tbuas on tbuas.user_archives_id = tbua.id
         left join sys_supplier ss on ss.id = tbuas.supplier_id
-        group by ss.name
-        order by sum(t.sum) desc
+        group by ss.name) temp
+        order by temp.sum desc
+    </select>
+
+    <select id="reasonQualityReport" resultType="com.qmth.sop.business.bean.report.QualityAnalyseReportBean">
+        select t.* from(select tbqpa.reason,
+        count(distinct tbqpa.id) as reasonSum
+        from t_b_quality_problem_apply tbqpa
+        join t_b_service tbs on tbs.id = tbqpa.service_id
+        join t_f_custom_flow_entity tfcfe on tfcfe.code = tbqpa.problem_no
+        join t_f_flow_approve tffa on tffa.flow_id = tfcfe.flow_id
+        where tbqpa.service_id = #{serviceId}
+        and tbs.status <![CDATA[ <> ]]> 'CANCEL'
+        and tffa.status <![CDATA[ <> ]]> 'END'
+        and tbqpa.reason is not null
+        group by tbqpa.reason) t order by t.reasonSum desc
     </select>
 </mapper>