Parcourir la source

Merge remote-tracking branch 'origin/test' into test

785834757 il y a 1 an
Parent
commit
fa3177e624

+ 26 - 13
src/main/java/com/ydtech/modules/admin/service/impl/SysPartnerServiceImpl.java

@@ -685,15 +685,19 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
                     .in(SysPremiumDetails::getUserId, userIdList)
                     .between(StringUtils.isNotEmpty(partnerGradeInfo.getBeginTime()) && StringUtils.isNotEmpty(partnerGradeInfo.getEndTime()),
                             SysPremiumDetails::getCreateTime, partnerGradeInfo.getBeginTime(), partnerGradeInfo.getEndTime())
+                    .eq(SysPremiumDetails::getStatus, 1)
                     .eq(partnerGradeInfo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, partnerGradeInfo.getIndustrySector()));
             BigDecimal sumPremium = sysPremiumDetails.stream().map(SysPremiumDetails::getSumpremium).reduce(BigDecimal.ZERO, BigDecimal::add);
             appPartnerInfo.setSumPremium(sumPremium);
 
             List<SysUserAccountHistory> sysUserAccountHistories = sysUserAccountHistoryMapper.selectList(new LambdaQueryWrapper<SysUserAccountHistory>()
                     .in(SysUserAccountHistory::getUserId, userIdList).eq(SysUserAccountHistory::getProperty, 3));
-
-            BigDecimal extractFee = sysUserAccountHistories.stream().map(SysUserAccountHistory::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-            appPartnerInfo.setExtractFee(extractFee);
+            if ( CollectionUtil.isNotEmpty(sysUserAccountHistories)) {
+                BigDecimal extractFee = sysUserAccountHistories.stream().map(SysUserAccountHistory::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                appPartnerInfo.setExtractFee(extractFee);
+            }else {
+                appPartnerInfo.setExtractFee(BigDecimal.ZERO);
+            }
 
             appPartnerInfoList.add(appPartnerInfo);
         }
@@ -709,15 +713,19 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
                 .in(SysPremiumDetails::getUserId, ids)
                 .between(StringUtils.isNotEmpty(partnerGradeInfo.getBeginTime()) && StringUtils.isNotEmpty(partnerGradeInfo.getEndTime()),
                         SysPremiumDetails::getCreateTime, partnerGradeInfo.getBeginTime(), partnerGradeInfo.getEndTime())
+                .eq(SysPremiumDetails::getStatus, 1)
                 .eq(partnerGradeInfo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, partnerGradeInfo.getIndustrySector()));
         BigDecimal sumPremium = sysPremiumDetails.stream().map(SysPremiumDetails::getSumpremium).reduce(BigDecimal.ZERO, BigDecimal::add);
         appPartnerInfoFreeVo.setSumPremium(sumPremium);
 
         List<SysUserAccountHistory> sysUserAccountHistories = sysUserAccountHistoryMapper.selectList(new LambdaQueryWrapper<SysUserAccountHistory>()
                 .in(SysUserAccountHistory::getUserId, ids).eq(SysUserAccountHistory::getProperty, 3));
-
-        BigDecimal extractFee = sysUserAccountHistories.stream().map(SysUserAccountHistory::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-        appPartnerInfoFreeVo.setExtractFee(extractFee);
+        if (CollectionUtil.isNotEmpty(sysUserAccountHistories)) {
+            BigDecimal extractFee = sysUserAccountHistories.stream().map(SysUserAccountHistory::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            appPartnerInfoFreeVo.setExtractFee(extractFee);
+        }else {
+            appPartnerInfoFreeVo.setExtractFee(BigDecimal.ZERO);
+        }
 
         int sum = appPartnerInfoList.stream().mapToInt(APPPartnerInfo::getTeamManNum).sum();
         appPartnerInfoFreeVo.setTeamManNum(sum);
@@ -1415,10 +1423,12 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         List<SysUserAccountHistory> sysUserAccountHistories = sysUserAccountHistoryMapper.selectList(new LambdaQueryWrapper<SysUserAccountHistory>()
                 .in(SysUserAccountHistory::getUserId, userIds).eq(SysUserAccountHistory::getProperty, 3)
                 .eq(teamUserInfosDto.getIndustrySector() != null, SysUserAccountHistory::getBusinessSegmentsType, teamUserInfosDto.getIndustrySector()));
-
-        BigDecimal extractFee = sysUserAccountHistories.stream().map(SysUserAccountHistory::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-        teamUserInfosFreeVo.setExtractFee(extractFee);
-
+        if (CollectionUtil.isNotEmpty(sysUserAccountHistories)) {
+            BigDecimal extractFee = sysUserAccountHistories.stream().map(SysUserAccountHistory::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            teamUserInfosFreeVo.setExtractFee(extractFee);
+        }else {
+            teamUserInfosFreeVo.setExtractFee(BigDecimal.ZERO);
+        }
 
         List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
                 .ne(SysUser::getStatus, 0).in(SysUser::getId, teamUserInfosDto.getUserIds()));
@@ -1445,9 +1455,12 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
             List<SysUserAccountHistory> sysUserAccountHistorie = sysUserAccountHistoryMapper.selectList(new LambdaQueryWrapper<SysUserAccountHistory>()
                     .in(SysUserAccountHistory::getUserId, sysUser.getId()).eq(SysUserAccountHistory::getProperty, 3)
                     .eq(teamUserInfosDto.getIndustrySector() != null, SysUserAccountHistory::getBusinessSegmentsType, teamUserInfosDto.getIndustrySector()));
-
-            BigDecimal extractFee1 = sysUserAccountHistorie.stream().map(SysUserAccountHistory::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-            teamUserInfosVo.setExtractFee(extractFee1);
+            if (CollectionUtil.isNotEmpty(sysUserAccountHistorie)) {
+                BigDecimal extractFee1 = sysUserAccountHistorie.stream().map(SysUserAccountHistory::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                teamUserInfosVo.setExtractFee(extractFee1);
+            }else {
+                teamUserInfosVo.setExtractFee(BigDecimal.ZERO);
+            }
 
             userInfosVoList.add(teamUserInfosVo);
         }

+ 8 - 2
src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java

@@ -484,8 +484,14 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
         taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
         TaskStatisticsDto result = this.insAreaCompanyMapper.getCountBusinessData(taskStatisticsVo);
-
-
+        TaskStatisticsDto userNumberdto = this.insAreaCompanyMapper.getUserNumber(taskStatisticsVo);
+        if(ObjectUtils.isNotEmpty(userNumberdto)){
+            BigDecimal userNumber = userNumberdto.getUserNumber();
+            BigDecimal totalPremium = new BigDecimal(result.getTotalPremium());
+            BigDecimal resultDivided = userNumber.divide(totalPremium, 2, RoundingMode.HALF_UP); //人均产能
+            result.setPerCapitaAmount(resultDivided);
+            result.setUserNumber(userNumberdto.getUserNumber());
+        }
         return result;
     }
 

+ 8 - 0
src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyMapper.java

@@ -406,6 +406,14 @@ public interface InsAreaCompanyMapper extends BaseMapper<InsAreaCompany> {
      *  @Description:  获取时间范围内的已承保的订单数据
      */
     List<InsAreaCompany> findListByDate(@Param("benginDate") String benginDate, @Param("endDate") String endDate);
+
+    /**
+     *
+     * @param taskStatisticsVo
+     * @return  出单人数
+     */
+    TaskStatisticsDto getUserNumber(@Param("vo") TaskStatisticsVo taskStatisticsVo);
+
 }
 
 

+ 146 - 45
src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml

@@ -1827,10 +1827,6 @@
                 and ifa.audittime =#{taskStatisticsVo.audittime}
             </if>
 
-             <if test="taskStatisticsVo.companyId !=null  and  taskStatisticsVo.companyId !=''">
-                and iac.company_id =#{taskStatisticsVo.companyId}
-            </if>
-
             <if test="taskStatisticsVo.createtimeStart !=null and taskStatisticsVo.createtimeStart != '' and taskStatisticsVo.createtimeEnd !=null and taskStatisticsVo.createtimeEnd != ''">
                 AND   DATE_FORMAT( ifa.audittime, '%Y-%m-%d')  BETWEEN  DATE_FORMAT( #{taskStatisticsVo.createtimeStart}, '%Y-%m-%d')   AND  DATE_FORMAT( #{taskStatisticsVo.createtimeEnd}, '%Y-%m-%d')
             </if>
@@ -2305,10 +2301,12 @@
         ins_area_company iac
         LEFT JOIN ptl_agreement agree ON iac.agreement_id = agree.id
         LEFT JOIN ins_orders  io  on  io.orderno  = iac.orderno
+        LEFT JOIN  ins_fee_audit ifa  ON ifa.orderno = io.orderno
         LEFT JOIN esm_ins_company ins ON agree.partner_companies_id = ins.id
         WHERE
         agree.id IS NOT NULL
         and  iac.orderstatus = '3'
+        and  ifa.auditstatus != '2'
         <if test="vo.companyId  != null  and  vo.companyId!='' ">
             and  agree.insurance_company_id = #{vo.companyId}
         </if>
@@ -2373,25 +2371,25 @@
         select
             sum(a.totalPremium) as "totalPremium",
             sum(a.qutationInsureCount) as "qutationInsureCount",
-            sum(ROUND(a.averagePremium, 2))  as "averagePremium",
+            ROUND(sum( a.totalPremium ) / sum( a.qutationInsureCount ),2) AS "averagePremium",
             sum(a.userNumber) as "userNumber",
             count(DISTINCT a.insuranceCompanyName) as "insuranceCompanyNumber",
-            sum(ROUND(a.perCapitaAmount, 2)) as "perCapitaAmount"
+            ROUND(sum(a.totalPremium)/sum(a.userNumber),0) as "perCapitaAmount"
         from  (
         SELECT
         agree.insurance_company AS "insuranceCompanyName",
         IFNULL(sum(iac.jqpremium),0) + IFNULL(sum(iac.sypremium),0) +IFNULL(sum(iac.jypremium),0) as "totalPremium",
         COUNT(0 ) AS "qutationInsureCount",
-        (IFNULL(sum(iac.jqpremium),0) + IFNULL(sum(iac.sypremium),0) +IFNULL(sum(iac.jypremium),0)) / COUNT(0 )  AS "averagePremium",
-        COUNT(DISTINCT io.userId) AS "userNumber",
-        (IFNULL(sum(iac.jqpremium),0) + IFNULL(sum(iac.sypremium),0) +IFNULL(sum(iac.jypremium),0)) / COUNT(DISTINCT io.userId)  as "perCapitaAmount"
+        COUNT(DISTINCT io.userId) AS "userNumber"
         FROM
         ins_area_company iac
         LEFT JOIN ptl_agreement agree ON iac.agreement_id = agree.id
         LEFT JOIN ins_orders  io  on  io.orderno  = iac.orderno
+        LEFT JOIN  ins_fee_audit ifa  ON ifa.orderno = io.orderno
         WHERE
         agree.id IS NOT NULL
         and  iac.orderstatus = '3'
+        and  ifa.auditstatus != '2'
         <if test="vo.companyId  != null  and  vo.companyId!='' ">
             and  agree.insurance_company_id = #{vo.companyId}
         </if>
@@ -2434,6 +2432,57 @@
     </select>
 
 
+    <select id="getUserNumber" resultType="com.ydtech.modules.admin.model.dto.TaskStatisticsDto">
+        SELECT
+        COUNT(DISTINCT io.userId) AS "userNumber"
+        FROM
+        ins_area_company iac
+        LEFT JOIN ptl_agreement agree ON iac.agreement_id = agree.id
+        LEFT JOIN ins_orders  io  on  io.orderno  = iac.orderno
+        LEFT JOIN  ins_fee_audit ifa  ON ifa.orderno = io.orderno
+        WHERE
+        agree.id IS NOT NULL
+        and  iac.orderstatus = '3'
+        and  ifa.auditstatus != '2'
+        <if test="vo.companyId  != null  and  vo.companyId!='' ">
+            and  agree.insurance_company_id = #{vo.companyId}
+        </if>
+        <if test="vo.parterCompanyId  != null  and  vo.parterCompanyId!='' ">
+            and agree.partner_companies_id = #{vo.parterCompanyId}
+        </if>
+        <if test="vo.createtimeStart  != null  and  vo.createtimeStart!=''  and vo.createtimeEnd  != null  and  vo.createtimeEnd!=''">
+            AND   DATE_FORMAT( iac.signing_time, '%Y-%m-%d')   BETWEEN DATE_FORMAT( #{vo.createtimeStart}, '%Y-%m-%d')  AND DATE_FORMAT( #{vo.createtimeEnd}, '%Y-%m-%d')
+        </if>
+        <if test="vo.provinceId != null and vo.provinceId != '' and  vo.cityId == null and vo.countyId == null  and vo.houseId == null ">
+            and io.deptid like "${vo.provinceId}%"
+        </if>
+        <if test="vo.cityId != null and vo.cityId != '' and vo.countyId ==null and  vo.houseId ==null">
+            and io.deptid like "${vo.cityId}%"
+        </if>
+        <if test="vo.countyId != null and vo.countyId != '' and  vo.houseId  ==null">
+            and io.deptid like "${vo.countyId}%"
+        </if>
+        <if test="vo.houseId != null and vo.houseId != ''">
+            and io.deptid like "${vo.houseId}%"
+        </if>
+        <if test="vo.deptIds != null and vo.deptIds != '' and vo.deptIds.size() > 0">
+            AND io.deptid  in
+            <foreach collection="vo.deptIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+
+        <if test="vo.userIds != null and vo.userIds != '' and vo.userIds.size() > 0">
+            AND io.userid  in
+            <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+
+
+    </select>
+
+
     <select id="getDistribution" resultType="com.ydtech.modules.admin.model.dto.TaskStatisticsDto">
         SELECT
         agree.insurance_company_id AS "companyId",
@@ -2450,8 +2499,10 @@
         LEFT JOIN ptl_agreement agree ON iac.agreement_id = agree.id
         LEFT JOIN ins_orders  io  on  io.orderno  = iac.orderno
         LEFT JOIN esm_ins_company ins ON agree.partner_companies_id = ins.id
+        LEFT JOIN  ins_fee_audit ifa  ON ifa.orderno = io.orderno
         WHERE
         agree.id IS NOT NULL
+        and  ifa.auditstatus != '2'
         <if test="vo.companyId  != null  and  vo.companyId!='' ">
           and  agree.insurance_company_id = #{vo.companyId}
         </if>
@@ -2775,21 +2826,30 @@
         sd.NAME AS "deptName",
         io.userid AS "userId",
         sd.parent_id as "deptId",
-        COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) AS qutationCount,
-        COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) AS underwritingCount,
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) AS qutationInsureCount,
-        COUNT( CASE WHEN iac.orderstatus = 4 THEN 1 END ) AS underwritingReturn,
-        (COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) / COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END )) * 100 AS "passingRate",
-        (COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) /  COUNT( iac.orderstatus )) * 100 AS "closeRate",
-        ((COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )  +  COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ))/ COUNT( iac.orderstatus )) * 100 AS "contributionRate",
-        (COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) / COUNT( iac.orderstatus )) * 100 AS "quotationRate",
-        COUNT( CASE WHEN iac.orderstatus = 1 THEN 1 END ) AS "auditOrder"
+        sd.management_source as "managementSource",
+        COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS qutationCount,
+        COUNT( CASE WHEN iot.order_status ='2' THEN 1 END ) AS underwritingCount,
+        COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) AS qutationInsureCount,
+        COUNT( CASE WHEN iot.order_status = '4' THEN 1 END ) AS underwritingReturn,
+        COUNT( CASE WHEN iot.order_status ='2' THEN 1 END ) / COUNT( CASE WHEN iot.order_status ='0' THEN 1 END ) AS "passingRate",
+        COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) /  COUNT(  CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END ) AS "closeRate",
+        (COUNT( CASE WHEN iot.order_status = '3' THEN 1 END )  +  COUNT( CASE WHEN iot.order_status = '2' THEN 1 END ))/ COUNT(CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END) AS "contributionRate",
+        COUNT( CASE WHEN iot.order_status  = '0' THEN 1 END ) / COUNT(CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END  ) AS "quotationRate",
+        COUNT(CASE WHEN io.order_source = 0  and iot.order_status ='0' THEN 1 END) as "pcOrderSource",
+        COUNT(CASE WHEN io.order_source = 1  and iot.order_status ='0' THEN 1 END) as "appOrderSource",
+        COUNT( CASE WHEN iot.order_status = '1' THEN 1 END ) AS "auditOrder"
         FROM
-        ins_area_company iac
+        (
+        select iot.suborder,iot.order_status from `ins_orders_track` iot
+        GROUP BY iot.suborder ,iot.order_status
+        ) iot
+        left join ins_area_company  iac ON iac.id = iot.suborder
         LEFT JOIN ins_orders io ON io.orderno = iac.orderno
         LEFT JOIN sys_dept sd ON sd.id = io.deptid
         <where>
-            1=1
+            <if test="taskStatisticsVo.managementSource  != null  and  taskStatisticsVo.managementSource!=''">
+                AND  sd.management_source  =#{taskStatisticsVo.managementSource}
+            </if>
             <if test="taskStatisticsVo.provinceId != null and taskStatisticsVo.provinceId != ''">
                 and io.deptid like "${taskStatisticsVo.provinceId}%"
             </if>
@@ -2803,18 +2863,28 @@
                 and io.deptid like "${taskStatisticsVo.houseId}%"
             </if>
 
+            <if test="taskStatisticsVo.userId != null and taskStatisticsVo.userId != ''">
+                and io.userid =#{taskStatisticsVo.userId}
+            </if>
+
             <if test="taskStatisticsVo.createtimeStart !=null and taskStatisticsVo.createtimeStart != '' and taskStatisticsVo.createtimeEnd !=null and taskStatisticsVo.createtimeEnd != ''">
                 AND   DATE_FORMAT( io.createtime, '%Y-%m-%d')   BETWEEN #{taskStatisticsVo.createtimeStart} AND #{taskStatisticsVo.createtimeEnd}
             </if>
             <if test="taskStatisticsVo.beginDate !=null and taskStatisticsVo.beginDate != '' and taskStatisticsVo.endDate !=null and taskStatisticsVo.endDate != ''">
-                AND   DATE_FORMAT( iac.createtime, '%Y-%m-%d')   BETWEEN  DATE_FORMAT( #{taskStatisticsVo.beginDate}, '%Y-%m-%d') AND  DATE_FORMAT( #{taskStatisticsVo.endDate}, '%Y-%m-%d')
-            </if>
-            <if test="taskStatisticsVo.days !=null  and taskStatisticsVo.days !='' ">
-                and iac.createtime >= DATE_SUB(NOW(), INTERVAL #{taskStatisticsVo.days} DAY)
+                AND   DATE_FORMAT( iac.signing_time, '%Y-%m-%d')   BETWEEN  DATE_FORMAT( #{taskStatisticsVo.beginDate}, '%Y-%m-%d') AND  DATE_FORMAT( #{taskStatisticsVo.endDate}, '%Y-%m-%d')
             </if>
-            <if test="taskStatisticsVo.managementSource!=null  and  taskStatisticsVo.managementSource!=''">
-                and  sd.management_source=#{taskStatisticsVo.managementSource}
 
+            <if test="taskStatisticsVo.deptIds != null and taskStatisticsVo.deptIds != '' and taskStatisticsVo.deptIds.size() > 0">
+                AND sd.id  in
+                <foreach collection="taskStatisticsVo.deptIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="taskStatisticsVo.userIds != null and taskStatisticsVo.userIds != '' and taskStatisticsVo.userIds.size() > 0">
+                AND io.userid  in
+                <foreach collection="taskStatisticsVo.userIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
             </if>
 
             <if test="taskStatisticsVo.days !=null  and taskStatisticsVo.days !='' ">
@@ -2836,13 +2906,28 @@
         GROUP BY
         io.userid,
         sd.NAME,
-        sd.id
+        sd.id,
+        sd.management_source
         ) a
+        left  join  sys_user su  on su.id =a.userId
+        LEFT JOIN  ins_upload_files   inf on  su.head_sculpture  =inf.id
+        LEFT JOIN sys_user_info  sui  on  sui .id =su.id
+        LEFT JOIN  sys_user  su2  on su2.id =su.leader_id
+        <where>
+            <if test='taskStatisticsVo.userName !=null and taskStatisticsVo.userName!="" '>
+                and su.name like concat('%',#{taskStatisticsVo.userName},'%')
+            </if>
+            <if test='taskStatisticsVo.leaderId !=null and taskStatisticsVo.leaderId!="" '>
+                and su.leader_id  =#{taskStatisticsVo.leaderId}
+            </if>
+            <if test='taskStatisticsVo.userId !=null and taskStatisticsVo.userId!="" '>
+                and su.id =#{taskStatisticsVo.userId}
+            </if>
+        </where>
     </select>
 
 
     <select id="insuranceCompanyExcel" resultType="com.ydtech.modules.admin.model.dto.InsuranceCompanyExcel">
-
         SELECT
         a.*,
         ( SELECT eic.namesimple FROM esm_ins_company eic WHERE eic.id = a.partner_companies_id ) AS "partnerCompaniesName"
@@ -2852,32 +2937,40 @@
         pa.insurance_company_id,
         pa.partner_companies_id,
         pa.insurance_company AS "insuranceCompanyName",
-        COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) AS qutationCount,
-        COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) AS underwritingCountRate,
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) AS qutationInsureCount,
-        COUNT( CASE WHEN iac.orderstatus = 4 THEN 1 END ) AS underwritingReturn,
-        COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) / COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) AS "passingRate",
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) / COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) AS "closeRate",
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) / COUNT( iac.orderstatus ) AS "contributionRate",
-        COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) / COUNT( iac.orderstatus ) AS "quotationRate",
-        COUNT( CASE WHEN iac.orderstatus = 1 THEN 1 END ) AS "auditOrder"
+        COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS qutationCount,
+        COUNT( CASE WHEN iot.order_status  = '1' THEN 1 END ) AS "auditOrder",
+        COUNT( CASE WHEN iot.order_status  = '2' THEN 1 END ) AS underwritingCount,
+        COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) AS qutationInsureCount,
+        COUNT( CASE WHEN iot.order_status = '4' THEN 1 END ) AS underwritingReturn,
+        COUNT( CASE WHEN iot.order_status  ='2' THEN 1 END ) / COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS "passingRate",
+        COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) / COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS "closeRate",
+        (COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) + COUNT( CASE WHEN iot.order_status = '2' THEN 1 END )) / COUNT( iot.order_status ) AS "contributionRate",
+        COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) / COUNT( iot.order_status ) AS "quotationRate"
         FROM
-        ins_area_company iac
+        (
+        select iot.suborder,iot.order_status from `ins_orders_track` iot
+        GROUP BY iot.suborder ,iot.order_status
+        ) iot
+        LEFT JOIN ins_area_company iac ON iac.id = iot.suborder
         LEFT JOIN ins_fee_audit ifa ON ifa.ins_order_no = iac.id
         LEFT JOIN ptl_agreement pa ON pa.id = iac.agreement_id
+        LEFT JOIN ins_orders io ON io.orderno = iac.orderno
         <where>
             pa.insurance_company_id IS NOT NULL
             <if test="taskStatisticsVo.provinceId != null and taskStatisticsVo.provinceId != ''">
-                and io.deptid like "${taskStatisticsVo.provinceId}%"
+                and io.deptid like concat('%', #{taskStatisticsVo.provinceId}, '%')
+
             </if>
             <if test="taskStatisticsVo.cityId != null and taskStatisticsVo.cityId != ''">
-                and io.deptid like "${taskStatisticsVo.cityId}%"
+                and io.deptid like concat('%', #{taskStatisticsVo.cityId}, '%')
+
             </if>
             <if test="taskStatisticsVo.countyId != null and taskStatisticsVo.countyId != ''">
-                and io.deptid like "${taskStatisticsVo.countyId}%"
+                and io.deptid like concat('%', #{taskStatisticsVo.countyId}, '%')
+
             </if>
             <if test="taskStatisticsVo.houseId != null and taskStatisticsVo.houseId != ''">
-                and io.deptid like "${taskStatisticsVo.houseId}%"
+                and io.deptid like concat('%', #{taskStatisticsVo.houseId}, '%')
             </if>
             <if test="taskStatisticsVo.createtimeStart !=null and taskStatisticsVo.createtimeStart != '' and taskStatisticsVo.createtimeEnd !=null and taskStatisticsVo.createtimeEnd != ''">
                 AND   DATE_FORMAT( iac.createtime, '%Y-%m-%d')   BETWEEN DATE_FORMAT(#{taskStatisticsVo.createtimeStart},'%Y-%m-%d') AND DATE_FORMAT( #{taskStatisticsVo.createtimeEnd}, '%Y-%m-%d')
@@ -2890,8 +2983,17 @@
                 AND  iac.company_id =#{taskStatisticsVo.companyId}
             </if>
 
-            <if test="taskStatisticsVo.days !=null  and taskStatisticsVo.days !='' ">
-                and iac.createtime >= DATE_SUB(NOW(), INTERVAL #{taskStatisticsVo.days} DAY)
+            <if test="taskStatisticsVo.deptIds != null and taskStatisticsVo.deptIds != '' and taskStatisticsVo.deptIds.size() > 0">
+                AND io.deptid  in
+                <foreach collection="taskStatisticsVo.deptIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="taskStatisticsVo.userIds != null and taskStatisticsVo.userIds != '' and taskStatisticsVo.userIds.size() > 0">
+                AND io.userid  in
+                <foreach collection="taskStatisticsVo.userIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
             </if>
         </where>
         GROUP BY
@@ -2900,7 +3002,6 @@
         pa.insurance_company
         ) a
 
-
     </select>