5 Commits

Author SHA1 Message Date
7311ab5e2a 保存进度! 2023-11-01 18:22:01 +08:00
0650227861 Merge branch 'develop' into feature-ui 2023-11-01 15:42:07 +08:00
75a9c46c2e 保存进度! 2023-11-01 15:41:49 +08:00
02ac5274e0 保存进度! 2023-10-30 23:44:54 +08:00
6f303eec03 保存进度! 2023-10-30 23:44:37 +08:00
11 changed files with 388 additions and 39 deletions

View File

@@ -31,6 +31,24 @@ interface ImportBIReportResponse
importedCount: number,
}
// BI坐席渗透率报表记录
interface BITelsalerAttachingRateReportRecord
{
departmentName: string;
telsalerName: string;
motoPremium: number;
nomotoPremium: number;
attachingRatePresentMonth: number;
attachingRateChange: number;
}
interface QueryBITelsalerAttachingRateReportResponse
{
success: boolean,
message: string,
records: BITelsalerAttachingRateReportRecord[];
}
type ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error?: any ) => void;
/**
@@ -75,5 +93,7 @@ export {
type ImportBIReportRequest,
type ImportBIReportResponse,
type ImportBIReportResponseHandler,
type BITelsalerAttachingRateReportRecord,
type QueryBITelsalerAttachingRateReportResponse,
importBIReport
};

View File

@@ -9,36 +9,12 @@
-->
<template>
<div class="data_management_wrapper">
<!-- <div class="telsaler-dataupload-wrapper">
<el-upload
v-model="ui.fileList"
drag
action="http://localhost:8080/desktop_archievement_backend/file/file-upload.do"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-success="handleUploadSuccess"
:before-remove="beforeRemove"
:limit="1"
:on-exceed="handleExceed"
:data="ui.uploadData"
name="files"
>
<el-button type="primary">
上传
</el-button>
<template #tip>
<div class="el-upload__tip">
文件不能大于100MB
</div>
</template>
</el-upload>
</div> -->
<el-tabs>
<el-tab-pane label="坐席车非渗透率">
<TelsalerAttachingRateView />
</el-tab-pane>
<el-tab-pane label="坐席续保率">
坐席车非渗透率
<TelsalerRenewalRateView />
</el-tab-pane>
<el-tab-pane label="机构">
坐席车非渗透率
@@ -50,9 +26,10 @@
import { ref, reactive } from "vue";
import { ElMessage, ElMessageBox, type UploadFile, type UploadFiles, type UploadProps, type UploadUserFile } from "element-plus";
import TelsalerAttachingRateView from "@/views/data/bi/TelsalerAttachingRateView.vue";
import TelsalerRenewalRateView from "@/views/data/bi/TelsalerRenewalRateView.vue";
export default {
name: "DataManagement",
components: { TelsalerAttachingRateView, },
components: { TelsalerAttachingRateView, TelsalerRenewalRateView, },
setup()
{
const ui = reactive({

View File

@@ -62,7 +62,7 @@
</div>
</template>
<script lang="ts">
import { reactive, ref } from "vue";
import { reactive, ref, onBeforeMount } from "vue";
import {
type BIReportType,
type ImportBIReportRequest,
@@ -92,10 +92,10 @@ export default {
reportType: {
type: Number,
require: true,
default: (): number => -9999,
default: (): number => 0,
},
},
setup()
setup( props )
{
const ui: UI = reactive({
showUI: false,
@@ -214,6 +214,11 @@ export default {
}
};
onBeforeMount((): void =>
{
ui.selectedReportType = props.reportType;
});
return {
ui,
onUploadSuccess,

View File

@@ -81,7 +81,7 @@
:close-on-press-escape="false"
:show-close="true"
>
<BiDataUploadView />
<BiDataUploadView :report-type="0" />
</el-dialog>
</div>
</div>

View File

@@ -1,30 +1,136 @@
src/views/data/bi/TelsalerAttachingRateView.vue<!--
<!--
* @Author: Kane
* @Date: 2023-10-17 14:41:39
* @Date: 2023-10-17 23:31:19
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/TelsalerAttachingRateView.vue
* @FilePath: /task_schedule/src/views/data/bi/TelsalerRenewalRateView.vue
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<template>
<div class="wrapper" />
<div class="wrapper">
<el-row :gutter="10">
<el-col :span="24">
<el-button
type="warning"
icon="Upload"
@click="showUploadFileDialog"
>
上传
</el-button>
</el-col>
</el-row>
<el-table
border
stripe
style="width:100%;"
>
<el-table-column
type="selection"
align="center"
/>
<el-table-column
label="部门"
align="center"
/>
<el-table-column
label="责任人"
align="center"
/>
<el-table-column
label="到期数-全月"
align="center"
/>
<el-table-column
label="个车续保率(序时)(%)"
align="center"
/>
<el-table-column
label="个车续保率(全月)(%)"
align="center"
/>
</el-table>
<div class="pagination_wrapper">
<el-pagination
v-model="ui.tableCurrentPageIndex"
class="pull_left"
size="small"
background
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="0"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
<div
class="upload-dialog-wrapper"
>
<el-dialog
v-model="ui.showUploadDialog"
title="上传报表"
width="600px"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="true"
>
<BiDataUploadView :report-type="1" />
</el-dialog>
</div>
</div>
</template>
<script lang="ts">
import { reactive } from "vue";
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
export default {
name: "TelsalerAttachingRateView",
components: { BiDataUploadView, },
setup()
{
const ui = reactive({
showUI: true,
showUploadDialog: false,
tableCurrentPageIndex: 1,
tablePageSize: 10,
});
const showUploadFileDialog = (): void =>
{
ui.showUploadDialog = true;
};
const onCurrentPageIndexChange = ( index: number ): void =>
{
ui.tableCurrentPageIndex = index;
};
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.tablePageSize = pageSize;
};
return {
ui,
showUploadFileDialog,
onCurrentPageIndexChange,
onTablePageSizeChange,
};
},
};
</script>
<style lang="scss" scoped>
.wrapper {
margin: 10px;
>*+* {
margin-top: 10px;
}
}
.pagination_wrapper {
display: flex;
justify-content: flex-end;
}
</style>

View File

@@ -0,0 +1,21 @@
/*
* @Author: Kane
* @Date: 2023-11-01 15:50:40
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/QueryBIArchievementDataMapper.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.mapper;
import java.util.ArrayList;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
public interface QueryBIArchievementDataMapper
{
public ArrayList<BITelsalerAttachingRateRecord> queryBITelsalerAttachingRate();
public ArrayList<BITelsalerRenewalRateRecord> queryBITesalerRenewalRate();
}

View File

@@ -47,19 +47,19 @@ public class BITelsalerAttachingRateRecord
private double attachingRateChange;
// 当月客户渗透率
@JsonProperty( "customerHandleRateCell" )
@JsonProperty( "customerHandleRate" )
private double customerHandleRate;
// 客户渗透率环比上月
@JsonProperty( "customerHandleRateChangeCell" )
@JsonProperty( "customerHandleRateChange" )
private double customerHandleRateChange;
// 当月车非客均保费
@JsonProperty( "noMotoPremiumPerCustomerCell" )
@JsonProperty( "noMotoPremiumPerCustomer" )
private double noMotoPremiumPerCustomer;
// 客均保费环比上月
@JsonProperty( "noMotoPremiumPerCustomerChangeCell" )
@JsonProperty( "noMotoPremiumPerCustomerChange" )
private double noMotoPremiumPerCustomerChange;
public BITelsalerAttachingRateRecord( String departmentName, LocalDate summaryDate,

View File

@@ -0,0 +1,74 @@
/*
* @Author: Kane
* @Date: 2023-11-01 16:48:56
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/BIReportController.java
* @Description: BI报表相关的controller
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.ibatis.exceptions.PersistenceException;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.cpic.xim.mybatis.mapper.QueryBIArchievementDataMapper;
import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.mybatis.utils.MybatisUtils;
@Controller
@RequestMapping( method = RequestMethod.POST, path = "/archievement" )
public class BIReportController
{
private static Logger logger = LoggerFactory.getLogger( BIReportController.class );
@PostMapping( path = "/bi_telsaler_attachingrate.do" )
@ResponseBody
QueryTelsalerAttachingRateReportResponse queryTelsalerAttachingRateRepor()
{
QueryTelsalerAttachingRateReportResponse response =
new QueryTelsalerAttachingRateReportResponse();
SqlSession session = null;
QueryBIArchievementDataMapper mapper = null;
try
{
session = MybatisUtils.getSqlSession();
mapper = session.getMapper( QueryBIArchievementDataMapper.class );
ArrayList<BITelsalerAttachingRateRecord> records =
mapper.queryBITelsalerAttachingRate();
response.setSuccess( true );
response.setMessage( "查询成功" );
response.setRecords( records );
}
catch ( IOException error )
{
logger.error("查询BI坐席渗透率报表出现IOException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
catch ( PersistenceException error )
{
logger.error("查询BI坐席渗透率报表出现PersistenceException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
return response;
}
}

View File

@@ -0,0 +1,82 @@
/*
* @Author: Kane
* @Date: 2023-11-01 16:51:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.util.ArrayList;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.web.controllers.QueryResponse;
import com.fasterxml.jackson.annotation.JsonProperty;
public class QueryTelsalerAttachingRateReportResponse extends QueryResponse
{
@JsonProperty("records")
ArrayList<BITelsalerAttachingRateRecord> records;
public QueryTelsalerAttachingRateReportResponse( boolean success, String message,
ArrayList<BITelsalerAttachingRateRecord> records )
{
super( success, message );
this.records = records;
}
public QueryTelsalerAttachingRateReportResponse()
{
super( false, "" );
this.records = null;
}
public ArrayList<BITelsalerAttachingRateRecord> getRecords()
{
return records;
}
public void setRecords( ArrayList<BITelsalerAttachingRateRecord> records )
{
this.records = records;
}
@Override
public String toString()
{
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((records == null) ? 0 : records.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( !super.equals( obj ) )
return false;
if ( getClass() != obj.getClass() )
return false;
QueryTelsalerAttachingRateReportResponse other =
(QueryTelsalerAttachingRateReportResponse) obj;
if ( records == null )
{
if ( other.records != null )
return false;
}
else if ( !records.equals( other.records ) )
return false;
return true;
}
}

View File

@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.QueryBIArchievementDataMapper">
<!-- 查询坐席车非渗透率报表 -->
<select id="queryBITelsalerAttachingRate" resultMap="BITelsalerAttachingRate">
SELECT t.部门,
t.经办,
t."车险保费(万)" as 车险保费,
t.车险保费占比,
t."非车保费(万)" as 非车保费,
t.当月保费渗透率,
t.保费渗透率环比上月,
t.当月客户渗透率,
t.客户渗透率环比上月,
t.当月车非客均保费,
t.客均保费环比上月
FROM BI电销坐席车非渗透率跟踪表 t
ORDER BY t.部门
</select>
<!-- 坐席车非渗透率报表记录 -->
<resultMap id="BITelsalerAttachingRate" type="com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord">
<result property="departmentName" column="部门" javaType="String" jdbcType="VARCHAR" />
<result property="telsalerName" column="经办" javaType="String" jdbcType="VARCHAR" />
<result property="motoPremium" column="车险保费" javaType="double" jdbcType="DOUBLE" />
<result property="motoPremiumProportion" column="车险保费占比" javaType="double" jdbcType="DOUBLE" />
<result property="nomotoPremium" column="非车保费" javaType="double" jdbcType="DOUBLE" />
<result property="attachingRate" column="当月保费渗透率" javaType="double" jdbcType="DOUBLE" />
<result property="attachingRateChange" column="保费渗透率环比上月" javaType="double" jdbcType="DOUBLE" />
<result property="customerHandleRate" column="当月客户渗透率" javaType="double" jdbcType="DOUBLE" />
<result property="customerHandleRateChange" column="客户渗透率环比上月" javaType="double" jdbcType="DOUBLE" />
<result property="noMotoPremiumPerCustomer" column="当月车非客均保费" javaType="double" jdbcType="DOUBLE" />
<result property="noMotoPremiumPerCustomerChange" column="客均保费环比上月" javaType="double" jdbcType="DOUBLE" />
</resultMap>
<select id="queryBITesalerRenewalRate" resultMap="BITelsalerRenewalRate">
select t.责任部门,
t.责任人,
t."机构目标值1(%)" as 机构目标值,
t."到期数-全月" as 到期数全月,
t."序时到期数占比(%)" as 序时到期数占比,
t."个车续保率(序时)(%)" as 个车续保率序时,
t."个车续保率(全月)(%)" as 个车续保率全月,
t."环比昨日(%)" as 环比昨日,
t."环比上月(%)" as 环比上月,
t.平均提前签单天数,
t.环比
from BI电销坐席续保率跟踪表 t
</select>
<resultMap id="BITelsalerRenewalRate" type="com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord">
<result property="责任部门" column="责任部门" javaType="String" jdbcType="VARCHAR" />
<result property="责任人" column="责任人" javaType="String" jdbcType="VARCHAR" />
<result property="机构目标值" column="机构目标值" javaType="double" jdbcType="DOUBLE" />
<result property="到期数全月" column="到期数全月" javaType="double" jdbcType="DOUBLE" />
<result property="序时到期数占比" column="序时到期数占比" javaType="double" jdbcType="DOUBLE" />
<result property="个车续保率序时" column="个车续保率序时" javaType="double" jdbcType="DOUBLE" />
<result property="个车续保率全月" column="个车续保率全月" javaType="double" jdbcType="DOUBLE" />
<result property="环比昨日" column="环比昨日" javaType="double" jdbcType="DOUBLE" />
<result property="环比上月" column="环比上月" javaType="double" jdbcType="DOUBLE" />
<result property="平均提前签单天数" column="平均提前签单天数" javaType="int" jdbcType="DOUBLE" />
<result property="环比" column="环比" javaType="int" jdbcType="DOUBLE" />
</resultMap>
</mapper>

View File

@@ -26,6 +26,7 @@
<mapper resource="mybatis/mapper/ArchievementMapper.xml" />
<mapper resource="mybatis/mapper/RankingListMapper.xml" />
<mapper resource="mybatis/mapper/RewardsMapper.xml" />
<mapper resource="mybatis/mapper/ImportBIArchievementDataMapper.xml" />
<mapper resource="mybatis/mapper/ImportBIArchievementDataMapper.xml" />
<mapper resource="mybatis/mapper/QueryBIArchievementDataMapper.xml" />
</mappers>
</configuration>