Compare commits

..

No commits in common. "develop" and "feature-login" have entirely different histories.

179 changed files with 20552 additions and 32208 deletions

5
.gitignore vendored
View File

@ -78,7 +78,6 @@ build/Release
# Dependency directories
node_modules/
node_modules_bak/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
@ -725,7 +724,3 @@ local.properties
target
target/*
# oracle
*.~pck
*.~sql

View File

@ -19,12 +19,4 @@
# 坐席主机配置
需要安装插件,插件目录 AppData\Local\Programs\Lively Wallpaper\Plugins。
datacenter.dc_yzh_cfqd2023表
车非渗透率 车非融合保费 / 车险个人客户保费, 为月初至当日的总量。
需要安装插件,插件目录 AppData\Local\Programs\Lively Wallpaper\Plugins。

View File

@ -1,18 +0,0 @@
SELECT *
FROM BI部门渗透率续保率统计表;
SELECT *
FROM BI电销坐席车非渗透统计表;
SELECT *
FROM BI坐席续保率统计表;
/*
truncate table BI电销坐席车非渗透统计表;
BEGIN
telsale_bi_utils.BI电销坐席车非渗透统计表;
telsale_bi_utils.BI电销坐席续保率统计表;
telsale_bi_utils.BI部门业绩统计表;
END;
*/

View File

@ -1,765 +0,0 @@
grant select on datacenter.ANJIAN to public;
grant select on datacenter.ANJIAN1 to public;
grant select on datacenter.ANJIAN_BAOAN to public;
grant select on datacenter.ANJIAN_BAOANJIEAN to public;
grant select on datacenter.ANJIAN_JIEAN to public;
grant select on datacenter.ANJIAN_LIAN to public;
grant select on datacenter.BAODAN_XIANZHONG to public;
grant select on datacenter.BC_A4CODE to public;
grant select on datacenter.BC_BMFHUZ to public;
grant select on datacenter.BC_CFRH_FUZHU to public;
grant select on datacenter.BC_CHULI to public;
grant select on datacenter.BC_CHULI_BF to public;
grant select on datacenter.BC_CHULI_PK to public;
grant select on datacenter.BC_CHULI_QCWD to public;
grant select on datacenter.BC_CHULI_QCWJ to public;
grant select on datacenter.BC_CHULI_QMWD to public;
grant select on datacenter.BC_CHULI_QMWJ to public;
grant select on datacenter.BC_CHULI_ZHU to public;
grant select on datacenter.BC_C_LONG to public;
grant select on datacenter.BC_DATAMATCH_1 to public;
grant select on datacenter.BC_DATAMATCH_2 to public;
grant select on datacenter.BC_DDBM to public;
grant select on datacenter.BC_FCBAH to public;
grant select on datacenter.BC_FC_HYX to public;
grant select on datacenter.BC_FC_HYXQD to public;
grant select on datacenter.BC_FUZHU to public;
grant select on datacenter.BC_FZ to public;
grant select on datacenter.BC_FZ_HZFA to public;
grant select on datacenter.BC_GDMUB to public;
grant select on datacenter.BC_GFCBC to public;
grant select on datacenter.BC_GK_FUZHU to public;
grant select on datacenter.BC_GK_QUD to public;
grant select on datacenter.BC_GXDLD_FUZHU to public;
grant select on datacenter.BC_GXGX to public;
grant select on datacenter.BC_JCMUB to public;
grant select on datacenter.BC_JGCOR to public;
grant select on datacenter.BC_JGYB to public;
grant select on datacenter.BC_LIFEPERSONNEW to public;
grant select on datacenter.BC_NEWCAR to public;
grant select on datacenter.BC_NKL to public;
grant select on datacenter.BC_NOTONLINE to public;
grant select on datacenter.BC_SHIDIAN to public;
grant select on datacenter.BC_SHRI to public;
grant select on datacenter.BC_SXXBR to public;
grant select on datacenter.BC_SXXBR1 to public;
grant select on datacenter.DAILYREPORT to public;
grant select on datacenter.DANGYUEBAOANJIEANLV to public;
grant select on datacenter.DC_ACC_PK_ALL to public;
grant select on datacenter.DC_ACC_PK_SIMPLE to public;
grant select on datacenter.DC_ALL_PK2 to public;
grant select on datacenter.DC_ALL_PK_ONLY1 to public;
grant select on datacenter.DC_ALL_PK_SIMPLE to public;
grant select on datacenter.DC_AUTO_GARAGE to public;
grant select on datacenter.DC_BM_CBL to public;
grant select on datacenter.DC_CS_CODE_TEST to public;
grant select on datacenter.DC_CS_GARAGE to public;
grant select on datacenter.DC_CW_CXFQD to public;
grant select on datacenter.DC_CW_CXFQD_HS to public;
grant select on datacenter.DC_CW_FYTABLE to public;
grant select on datacenter.DC_CW_HDOTABLE to public;
grant select on datacenter.DC_CW_XZHTABLE to public;
grant select on datacenter.DC_CX_CSGROUP to public;
grant select on datacenter.DC_CX_CSTEAM to public;
grant select on datacenter.DC_CX_CSTEAM_2018 to public;
grant select on datacenter.DC_CX_CSTEAM_UPDATE to public;
grant select on datacenter.DC_CX_CSTEAM_YAN to public;
grant select on datacenter.DC_CX_CSTEAM_YAN_CHH to public;
grant select on datacenter.DC_CX_XBCH2017 to public;
grant select on datacenter.DC_CX_XBGAMEF to public;
grant select on datacenter.DC_CX_YXTEAM to public;
grant select on datacenter.DC_C_QD_20_2106 to public;
grant select on datacenter.DC_C_RZ_20_2106 to public;
grant select on datacenter.DC_DX_FCX880 to public;
grant select on datacenter.DC_FCX_PERSONOFCHARGE to public;
grant select on datacenter.DC_FCX_PERSONOFCHARGE_NEW to public;
grant select on datacenter.DC_FCX_PERSONOFCHARGE_TMP_1 to public;
grant select on datacenter.DC_FCX_XUBAO to public;
grant select on datacenter.DC_FCX_XUBAO1 to public;
grant select on datacenter.DC_F_QD_20_2106 to public;
grant select on datacenter.DC_F_RZ_20_2106 to public;
grant select on datacenter.DC_GF_CIBSHY to public;
grant select on datacenter.DC_JC_CURRENCY to public;
grant select on datacenter.DC_JC_C_TAG to public;
grant select on datacenter.DC_JC_C_TAG_002 to public;
grant select on datacenter.DC_JC_C_TAG_01 to public;
grant select on datacenter.DC_JC_C_TAG_CS to public;
grant select on datacenter.DC_JC_F_TAG_CS to public;
grant select on datacenter.DC_KF_CS to public;
grant select on datacenter.DC_LP_AUTO_GARAGE to public;
grant select on datacenter.DC_LP_CANZHICHE to public;
grant select on datacenter.DC_LP_COOPERATIVEGARAGE to public;
grant select on datacenter.DC_LP_KSTEAMPERSON to public;
grant select on datacenter.DC_LP_KSTEAMPERSON_GSD to public;
grant select on datacenter.DC_LP_LIWAIZHIFU to public;
grant select on datacenter.DC_LP_LIWAIZHIFU_2018 to public;
grant select on datacenter.TABLE_TMP to public;
grant select on datacenter.TARGETVARIABLE to public;
grant select on datacenter.TASK1 to public;
grant select on datacenter.TASK2 to public;
grant select on datacenter.TASK3 to public;
grant select on datacenter.TASK_LOSSAUDIT1 to public;
grant select on datacenter.TASK_LOSSAUDIT2 to public;
grant select on datacenter.TASK_LOSSAUDIT3 to public;
grant select on datacenter.TASK_LOSSAUDIT4 to public;
grant select on datacenter.TASK_VEHICLELOSSAUDIT1 to public;
grant select on datacenter.TASK_VEHICLELOSSAUDIT2 to public;
grant select on datacenter.TASK_VEHICLELOSSAUDIT3 to public;
grant select on datacenter.TASK_VEHICLELOSSAUDIT4 to public;
grant select on datacenter.TB_ANN to public;
grant select on datacenter.TB_ANN_2020 to public;
grant select on datacenter.TB_CKK_JX to public;
grant select on datacenter.TB_CLAUSE_TO_XB to public;
grant select on datacenter.TB_CW_F_GSCZL to public;
grant select on datacenter.TB_CW_GSCZL to public;
grant select on datacenter.TB_CW_JC_NO_CLAIMNO to public;
grant select on datacenter.TB_C_BDNYBG_HZ_365_M2 to public;
grant select on datacenter.TB_DC_LP_CXGSCZL to public;
grant select on datacenter.TB_FR_LP_001_001 to public;
grant select on datacenter.TB_GJC_LIST to public;
grant select on datacenter.TB_HXB_BM to public;
grant select on datacenter.TB_HXB_QD to public;
grant select on datacenter.TB_HXB_RY to public;
grant select on datacenter.TB_JC_ADDITIONALTYPE to public;
grant select on datacenter.TB_JC_APPLY_ATTRIBUTE to public;
grant select on datacenter.TB_JC_ASSESSMENTSTATUS to public;
grant select on datacenter.TB_JC_BM_XLC_QD to public;
grant select on datacenter.TB_JC_CLAIMNO_PERSON to public;
grant select on datacenter.TB_JC_CLAIMNO_PERSON_GSD to public;
grant select on datacenter.TB_JC_CS_4S_HS to public;
grant select on datacenter.TB_JC_CS_4S_HS_20531 to public;
grant select on datacenter.TB_JC_CS_4S_TEAM to public;
grant select on datacenter.TB_JC_CS_4S_TJ to public;
grant select on datacenter.TB_JC_CS_4S_TJ_20531 to public;
grant select on datacenter.TB_JC_CS_BRAND to public;
grant select on datacenter.TB_JC_CS_RD_CS to public;
grant select on datacenter.TB_JC_C_TAG_230104 to public;
grant select on datacenter.TB_JC_DK_TS_QD to public;
grant select on datacenter.TB_JC_FEESTATUS to public;
grant select on datacenter.TB_JC_FEETYPE to public;
grant select on datacenter.TB_JC_F_LAH_PERSON to public;
grant select on datacenter.TB_JC_GSD_KETEAMPERSON to public;
grant select on datacenter.TB_JC_HSD_XLC_CS_JG to public;
grant select on datacenter.TB_JC_LOSSTYPE to public;
grant select on datacenter.TB_JC_LP_RS_ZBB to public;
grant select on datacenter.TB_JC_LP_TASK_LC to public;
grant select on datacenter.TB_JC_LP_TASK_ZT to public;
grant select on datacenter.TB_JC_LP_TEAM to public;
grant select on datacenter.TB_JC_LP_TP_ZBB to public;
grant select on datacenter.TB_JC_LP_ZP_TEAM to public;
grant select on datacenter.TB_JC_NOTIFICATIONNO_PERSON to public;
grant select on datacenter.TB_JC_PAYMENTNATURE to public;
grant select on datacenter.TB_JC_PROC_DEF_KEY to public;
grant select on datacenter.TB_JC_QD_RD_CS to public;
grant select on datacenter.TB_JC_QD_XLC_CS to public;
grant select on datacenter.TB_JC_QD_XLC_CS_0403 to public;
grant select on datacenter.TB_JC_QD_XLC_GH to public;
grant select on datacenter.TB_JC_RESPONSIBILITYTYPE to public;
grant select on datacenter.TB_JC_SC_BRANDNAME to public;
grant select on datacenter.TB_JC_SMZ_DY to public;
grant select on datacenter.TB_JC_TASK_DEF_KEY to public;
grant select on datacenter.TB_JC_TB to public;
grant select on datacenter.TB_JC_TEST to public;
grant select on datacenter.TB_JC_TIAOKUAN to public;
grant select on datacenter.TB_JC_TP_CLAIMNO_PERSON to public;
grant select on datacenter.TB_JC_USAGE_TYPE to public;
grant select on datacenter.TB_JC_VEHICLELOSSAUDITSTATUS to public;
grant select on datacenter.TB_JC_VEHICLEPRICEAUDITSTATUS to public;
grant select on datacenter.TB_JC_VEHICLE_BRAND to public;
grant select on datacenter.TB_JC_YBG_TEAM to public;
grant select on datacenter.TB_JC_ZB_GAFW to public;
grant select on datacenter.TB_JC_ZB_SFX to public;
grant select on datacenter.TB_KHJ_HL_RY to public;
grant select on datacenter.TB_KPI_CW_BF to public;
grant select on datacenter.TB_KPI_CW_BF_DN to public;
grant select on datacenter.TB_KPI_CW_BF_GE_LV to public;
grant select on datacenter.TB_KPI_CW_BF_QD_LV to public;
grant select on datacenter.TB_KPI_FGS_JG_NEW to public;
grant select on datacenter.TB_KPI_JG_NAME to public;
grant select on datacenter.TB_KX_BI_CLP_TEAM_WJ to public;
grant select on datacenter.TB_KX_CLP_BAJA to public;
grant select on datacenter.TB_KX_CLP_WJGS to public;
grant select on datacenter.TB_KX_CLP_XZSC to public;
grant select on datacenter.TB_KX_C_BDNYBG_HZ to public;
grant select on datacenter.TB_KX_C_CS_KS to public;
grant select on datacenter.TB_KX_C_CS_NTF_STATUS to public;
grant select on datacenter.TB_KX_C_CXNYBG_TIME to public;
grant select on datacenter.TB_KX_C_LNZYBG_HZ to public;
grant select on datacenter.TB_KX_C_WJ to public;
grant select on datacenter.TB_KX_ENUM to public;
grant select on datacenter.TB_KX_ENUM_ADJUSTREASON to public;
grant select on datacenter.TB_KX_F_TAG_POLICYNO to public;
grant select on datacenter.TB_KX_JC_XBB_GH to public;
grant select on datacenter.TB_KX_LNZ_TIME to public;
grant select on datacenter.TB_KX_LNZ_XZ to public;
grant select on datacenter.TB_KX_LP_GSD_HS_A1W to public;
grant select on datacenter.TB_KX_LP_GSD_HS_I1W to public;
grant select on datacenter.TB_KX_LP_GSD_ZJ to public;
grant select on datacenter.TB_KX_LP_GSD_ZJ_BL to public;
grant select on datacenter.TB_KX_LP_REH_DR to public;
grant select on datacenter.TB_KX_LP_REH_HS to public;
grant select on datacenter.TB_KX_LP_XCCK to public;
grant select on datacenter.TB_KX_LP_XCCK_23 to public;
grant select on datacenter.TB_KX_RS_KB_1231 to public;
grant select on datacenter.TB_KX_RS_KB_RY to public;
grant select on datacenter.TB_KX_RS_WJ_211231 to public;
grant select on datacenter.TB_KX_TEST to public;
grant select on datacenter.TB_KX_WX_MESSAGE_QD to public;
grant select on datacenter.TB_KX_XZ_DL to public;
grant select on datacenter.TB_KX_YBG_TIME to public;
grant select on datacenter.TB_LP_PERSON_WJ to public;
grant select on datacenter.TB_LP_TC_TBR to public;
grant select on datacenter.TB_M6_USAGE_TYPE to public;
grant select on datacenter.TB_M6_VEHICLEVARIETY to public;
grant select on datacenter.BC_T to public;
grant select on datacenter.BC_TEMP to public;
grant select on datacenter.BC_TEMP1 to public;
grant select on datacenter.BC_TUAN_XU to public;
grant select on datacenter.BC_XLCCODE to public;
grant select on datacenter.BC_XLC_FHZHU to public;
grant select on datacenter.BC_XZHCAT to public;
grant select on datacenter.BC_XZH_ZB to public;
grant select on datacenter.BC_YINGXU to public;
grant select on datacenter.BC_YIXU to public;
grant select on datacenter.BC_YSBF to public;
grant select on datacenter.BC_YSBM to public;
grant select on datacenter.BC_YXBF to public;
grant select on datacenter.BC_ZRRTIME to public;
grant select on datacenter.BC_ZRRTIME_WATER to public;
grant select on datacenter.BC_ZXGROUP to public;
grant select on datacenter.BC_ZXGROUP_NEW to public;
grant select on datacenter.BC_ZXGROUP_NO to public;
grant select on datacenter.BF_C_RZ_2001_2111_QD to public;
grant select on datacenter.BF_F_RZ_2001_2111_QD to public;
grant select on datacenter.DC_YANGG_2020666_BDDX to public;
grant select on datacenter.DC_YANGG_2020666_DLD to public;
grant select on datacenter.DC_YANGG_2020666_RY to public;
grant select on datacenter.DC_YANGG_BAODAI_CXQD to public;
grant select on datacenter.DC_YANGG_BASECODE_COIL to public;
grant select on datacenter.DC_YANGG_BASECODE_CSGROUP to public;
grant select on datacenter.DC_YANGG_BASECODE_CXLIST to public;
grant select on datacenter.DC_YANGG_BASECODE_TEAMS to public;
grant select on datacenter.DC_YANGG_BASECODE_XZH to public;
grant select on datacenter.DC_YANGG_BIGBM to public;
grant select on datacenter.DC_YANGG_CHSXLCCODE to public;
grant select on datacenter.DC_YANGG_CPICBIRDAY to public;
grant select on datacenter.DC_YANGG_CSTEAM2016 to public;
grant select on datacenter.DC_YANGG_CW_G_YS to public;
grant select on datacenter.DC_YANGG_CW_ZJGX to public;
grant select on datacenter.DC_YANGG_CW_ZJGX1 to public;
grant select on datacenter.DC_YANGG_CXCH_QD to public;
grant select on datacenter.DC_YANGG_CXCH_YG to public;
grant select on datacenter.DC_YANGG_CXCSVIEW_XB to public;
grant select on datacenter.DC_YANGG_CXCSVIEW_XTHJ to public;
grant select on datacenter.DC_YANGG_CXQD_2020 to public;
grant select on datacenter.DC_YANGG_CXRZ_2020 to public;
grant select on datacenter.DC_YANGG_CXXB_2020 to public;
grant select on datacenter.DC_YANGG_CXYQQD to public;
grant select on datacenter.DC_YANGG_CX_CSJT to public;
grant select on datacenter.DC_YANGG_CX_DIANXIAODOUDI to public;
grant select on datacenter.DC_YANGG_CX_DXTEAM to public;
grant select on datacenter.DC_YANGG_CX_SCTG to public;
grant select on datacenter.DC_YANGG_CX_TC_KF to public;
grant select on datacenter.DC_YANGG_CX_XU_SHENZ to public;
grant select on datacenter.DC_YANGG_CX_ZG2020QD to public;
grant select on datacenter.DC_YANGG_DLD_SHOT to public;
grant select on datacenter.DC_YANGG_DXB_XBRP to public;
grant select on datacenter.DC_YANGG_DXSTAFFDIY to public;
grant select on datacenter.DC_YANGG_DX_P_ONE to public;
grant select on datacenter.DC_YANGG_DX_P_ONE_CODENAME to public;
grant select on datacenter.DC_YANGG_DX_P_SIX to public;
grant select on datacenter.DC_YANGG_DX_P_TWO to public;
grant select on datacenter.DC_YANGG_DX_TRACE to public;
grant select on datacenter.DC_YANGG_DX_TRACE_ZR to public;
grant select on datacenter.DC_YANGG_DX_WHQ_QDCX to public;
grant select on datacenter.DC_YANGG_EKFPP to public;
grant select on datacenter.DC_YANGG_FCQD_2020 to public;
grant select on datacenter.DC_YANGG_FCXFSX to public;
grant select on datacenter.DC_YANGG_FCXWJQD to public;
grant select on datacenter.DC_YANGG_FCXWJWRONGLIST to public;
grant select on datacenter.DC_YANGG_FCX_FARENKH to public;
grant select on datacenter.DC_YANGG_FCX_HYXY to public;
grant select on datacenter.DC_YANGG_FCX_WJZRR to public;
grant select on datacenter.DC_YANGG_FGSTEAM2020 to public;
grant select on datacenter.DC_YANGG_FGS_BM_TEAM to public;
grant select on datacenter.DC_YANGG_FRAPPUSER to public;
grant select on datacenter.DC_YANGG_FRLIST_BM to public;
grant select on datacenter.DC_YANGG_FRLIST_NTR to public;
grant select on datacenter.DC_YANGG_FRLIST_XUKIND to public;
grant select on datacenter.DC_YANGG_F_XF to public;
grant select on datacenter.DC_YANGG_GKXZH to public;
grant select on datacenter.DC_YANGG_GKXZH_XB to public;
grant select on datacenter.DC_YANGG_GK_BBXZH to public;
grant select on datacenter.DC_YANGG_HX_CFRH to public;
grant select on datacenter.DC_YANGG_HYR_COST to public;
grant select on datacenter.DC_YANGG_HYR_FENXI to public;
grant select on datacenter.DC_YANGG_HY_MON_SHARE to public;
grant select on datacenter.DC_YANGG_IDZONE to public;
grant select on datacenter.DC_YANGG_JZ_BI_CBDNYB to public;
grant select on datacenter.DC_YANGG_JZ_BI_CCXNYB to public;
grant select on datacenter.DC_YANGG_JZ_BI_CXQDFX to public;
grant select on datacenter.DC_YANGG_JZ_BI_CXRZFX to public;
grant select on datacenter.DC_YANGG_JZ_BI_CXUB to public;
grant select on datacenter.DC_YANGG_JZ_BI_DAYLI to public;
grant select on datacenter.DC_YANGG_JZ_BI_FCQDFX to public;
grant select on datacenter.DC_YANGG_JZ_BI_FCRZFX to public;
grant select on datacenter.DC_YANGG_JZ_CFRHQDRP to public;
grant select on datacenter.DC_YANGG_JZ_CFRHQDRP_DAY to public;
grant select on datacenter.DC_YANGG_JZ_CFRHQDRP_M to public;
grant select on datacenter.DC_YANGG_JZ_CFRHRP to public;
grant select on datacenter.DC_YANGG_JZ_CSTEAM to public;
grant select on datacenter.DC_YANGG_JZ_CSTEAM_XUB to public;
grant select on datacenter.DC_YANGG_JZ_DQXUB to public;
grant select on datacenter.QD_GARAGE_20190508 to public;
grant select on datacenter.QRTZ_BLOB_TRIGGERS to public;
grant select on datacenter.QRTZ_CALENDARS to public;
grant select on datacenter.QRTZ_CRON_TRIGGERS to public;
grant select on datacenter.QRTZ_FIRED_TRIGGERS to public;
grant select on datacenter.QRTZ_JOB_DETAILS to public;
grant select on datacenter.QRTZ_LOCKS to public;
grant select on datacenter.QRTZ_PAUSED_TRIGGER_GRPS to public;
grant select on datacenter.QRTZ_SCHEDULER_STATE to public;
grant select on datacenter.QRTZ_SIMPLE_TRIGGERS to public;
grant select on datacenter.QRTZ_SIMPROP_TRIGGERS to public;
grant select on datacenter.QRTZ_TRIGGERS to public;
grant select on datacenter.QUOTATION to public;
grant select on datacenter.RENYUAN to public;
grant select on datacenter.VEHICLE_LOSS_CYW to public;
grant select on datacenter.FCXLIAN to public;
grant select on datacenter.FINE_CONF_CLASSNAME to public;
grant select on datacenter.FINE_CONF_ENTITY to public;
grant select on datacenter.FINE_CONF_XMLENTITY to public;
grant select on datacenter.FINE_SWIFT_COL_IDX_CONF to public;
grant select on datacenter.FINE_SWIFT_CONFIG_ENTITY to public;
grant select on datacenter.FINE_SWIFT_METADATA to public;
grant select on datacenter.FINE_SWIFT_SEGMENTS to public;
grant select on datacenter.FINE_SWIFT_SEG_LOCATION to public;
grant select on datacenter.FINE_SWIFT_SERVICE_INFO to public;
grant select on datacenter.FINE_SWIFT_TABLE_PATH to public;
grant select on datacenter.FINE_SWIFT_TAB_IDX_CONF to public;
grant select on datacenter.HSQD to public;
grant select on datacenter.JIESUANCHAYI to public;
grant select on datacenter.KX_BI_JC_GL_QD to public;
grant select on datacenter.LIANJIEANLV to public;
grant select on datacenter.LLSS_T to public;
grant select on datacenter.LPSC to public;
grant select on datacenter.LS_T to public;
grant select on datacenter.LZX_CK5820_QD to public;
grant select on datacenter.MOUSHIDIAN_ANJIAN to public;
grant select on datacenter.PBCATCOL to public;
grant select on datacenter.PBCATEDT to public;
grant select on datacenter.PBCATFMT to public;
grant select on datacenter.PBCATTBL to public;
grant select on datacenter.PBCATVLD to public;
grant select on datacenter.TB_MG_CLAIMNO_RIWJ to public;
grant select on datacenter.TB_MG_CLAIMNO_WJ to public;
grant select on datacenter.TB_MG_F_CLAIMNO_WJ to public;
grant select on datacenter.TB_MG_IDS_CLAIMNO_WJ to public;
grant select on datacenter.TB_MG_TEST to public;
grant select on datacenter.TB_POL to public;
grant select on datacenter.TB_POLICYNO to public;
grant select on datacenter.TB_REOPEN to public;
grant select on datacenter.TB_TCB_CS_GARAGE_JE to public;
grant select on datacenter.TB_TCB_GARAGE_CS to public;
grant select on datacenter.TB_TCB_GARAGE_JE to public;
grant select on datacenter.TB_TCB_LLC_CS_GARAGE to public;
grant select on datacenter.TB_TEST to public;
grant select on datacenter.TB_WKX_T to public;
grant select on datacenter.TB_ZSB_CS_1_1 to public;
grant select on datacenter.TEMP1 to public;
grant select on datacenter.TEMP2 to public;
grant select on datacenter.TEMP3 to public;
grant select on datacenter.TEMP4 to public;
grant select on datacenter.TEMP5 to public;
grant select on datacenter.TEMP6 to public;
grant select on datacenter.TEMP_IF_SSX to public;
grant select on datacenter.TEMP_IF_SSX_EP to public;
grant select on datacenter.TEMP_M6_POLICY to public;
grant select on datacenter.TEMP_PART to public;
grant select on datacenter.TEST_20210616 to public;
grant select on datacenter.TEST_20210618 to public;
grant select on datacenter.TEST_FG to public;
grant select on datacenter.TEXT_IMPORT_CYW to public;
grant select on datacenter.TIQU2017BAODAN to public;
grant select on datacenter.TIQUBAODAN to public;
grant select on datacenter.TIQUVIN to public;
grant select on datacenter.TIQUXUBAOBAODAN to public;
grant select on datacenter.TMP to public;
grant select on datacenter.TMP1 to public;
grant select on datacenter.TMP_LPA_20170522_02 to public;
grant select on datacenter.TMP_LPA_20170522_02_1 to public;
grant select on datacenter.TMP_LPA_20170522_02_2 to public;
grant select on datacenter.TMP_LPA_20170522_02_3 to public;
grant select on datacenter.TMP_LPA_20170522_02_4 to public;
grant select on datacenter.TMP_LPA_20170522_03 to public;
grant select on datacenter.TMP_LPA_20170522_04 to public;
grant select on datacenter.TMP_LPA_20170522_05 to public;
grant select on datacenter.TMP_LPA_20170522_06 to public;
grant select on datacenter.TMP_LPA_20170522_07 to public;
grant select on datacenter.TMP_LPA_20170522_08 to public;
grant select on datacenter.TMP_LPA_20170522_08_1 to public;
grant select on datacenter.TMP_LPA_20170522_09 to public;
grant select on datacenter.TMP_LPA_20170522_10 to public;
grant select on datacenter.TMP_LPA_20170522_11 to public;
grant select on datacenter.TMP_LPA_20170522_12 to public;
grant select on datacenter.TMP_LPA_20170522_12A to public;
grant select on datacenter.TMP_LPA_20170522_13 to public;
grant select on datacenter.TMP_LPA_20170522_13_1 to public;
grant select on datacenter.TMP_LPA_20170522_14 to public;
grant select on datacenter.TMP_LPA_20170522_14_1 to public;
grant select on datacenter.TMP_LPA_20170522_15 to public;
grant select on datacenter.TMP_LPA_20170522_15_1 to public;
grant select on datacenter.TMP_LPA_20170522_16 to public;
grant select on datacenter.TMP_LPA_20170522_16_1 to public;
grant select on datacenter.TMP_QC_20170524_1 to public;
grant select on datacenter.TMP_QC_20170524_1A to public;
grant select on datacenter.TMP_QC_20170524_1B to public;
grant select on datacenter.TMP_QC_20170524_1C to public;
grant select on datacenter.TMP_QC_20170524_1C1 to public;
grant select on datacenter.TMP_QC_20170524_2 to public;
grant select on datacenter.TMP_QC_20170524_2A to public;
grant select on datacenter.TMP_QC_20170524_2B to public;
grant select on datacenter.TMP_QC_20170524_3 to public;
grant select on datacenter.TMP_QC_20170524_3A to public;
grant select on datacenter.TMP_QC_20170531_ALL to public;
grant select on datacenter.USEKIND to public;
grant select on datacenter.DC_LP_PEIAN to public;
grant select on datacenter.DC_LP_PERSONINCHARGE to public;
grant select on datacenter.DC_LP_PERSONINCHARGE_DAAN to public;
grant select on datacenter.DC_LP_PERSONINCHARGE_NEW to public;
grant select on datacenter.DC_LP_PERSONINCHARGE_TMP_1 to public;
grant select on datacenter.DC_LP_PERSONINCHARGE_TMP_2 to public;
grant select on datacenter.DC_LP_PERSONINCHARGE_TPDAAN to public;
grant select on datacenter.DC_LP_PERSONOFTEAM to public;
grant select on datacenter.DC_LP_WEIJUE to public;
grant select on datacenter.DC_LP_WEIJUE_M6 to public;
grant select on datacenter.DC_LP_YIJUE to public;
grant select on datacenter.DC_LP_YIJUE_YUE to public;
grant select on datacenter.DC_LSJ_BDCBL to public;
grant select on datacenter.DC_LSJ_BMTZ to public;
grant select on datacenter.DC_LSJ_BPD to public;
grant select on datacenter.DC_LSJ_CF_FT to public;
grant select on datacenter.DC_LSJ_CHXB to public;
grant select on datacenter.DC_LSJ_CP to public;
grant select on datacenter.DC_LSJ_CS to public;
grant select on datacenter.DC_LSJ_CSPB to public;
grant select on datacenter.DC_LSJ_CXNYBG to public;
grant select on datacenter.DC_LSJ_CXXLC to public;
grant select on datacenter.DC_LSJ_DMXB to public;
grant select on datacenter.DC_LSJ_DYCXNYBG to public;
grant select on datacenter.DC_LSJ_EW_OY to public;
grant select on datacenter.DC_LSJ_GDPP to public;
grant select on datacenter.DC_LSJ_HXLXB to public;
grant select on datacenter.DC_LSJ_LIPEIZC_CH to public;
grant select on datacenter.DC_LSJ_LIPEIZC_GP to public;
grant select on datacenter.DC_LSJ_LIPEIZC_TC to public;
grant select on datacenter.DC_LSJ_LIPEIZC_XLC to public;
grant select on datacenter.DC_LSJ_LKXC to public;
grant select on datacenter.DC_LSJ_MM to public;
grant select on datacenter.DC_LSJ_OYJHXB to public;
grant select on datacenter.DC_LSJ_OYJHXB_TB to public;
grant select on datacenter.DC_LSJ_PIAO to public;
grant select on datacenter.DC_LSJ_QJH_DLD to public;
grant select on datacenter.DC_LSJ_QJH_TEAM to public;
grant select on datacenter.DC_LSJ_QJH_WQ to public;
grant select on datacenter.DC_LSJ_QJH_YQ to public;
grant select on datacenter.DC_LSJ_SCDM to public;
grant select on datacenter.DC_LSJ_TABLEA to public;
grant select on datacenter.DC_LSJ_TABLEB to public;
grant select on datacenter.DC_LSJ_TABLEC to public;
grant select on datacenter.DC_LSJ_TEAM_XS to public;
grant select on datacenter.DC_LSJ_TEST to public;
grant select on datacenter.DC_LSJ_THY_GH to public;
grant select on datacenter.DC_LSJ_THY_JC to public;
grant select on datacenter.DC_LSJ_THY_JL to public;
grant select on datacenter.DC_LSJ_TQ to public;
grant select on datacenter.DC_LSJ_XB_HMD to public;
grant select on datacenter.DC_LSJ_XB_MB to public;
grant select on datacenter.DC_LSJ_XZTC_FC to public;
grant select on datacenter.DC_LSJ_YWZBJ to public;
grant select on datacenter.DC_LSJ_ZXCODE to public;
grant select on datacenter.DC_LSJ_ZXGROUP to public;
grant select on datacenter.DC_LSJ_ZX_HC to public;
grant select on datacenter.DC_LSJ_ZX_TEAM to public;
grant select on datacenter.DC_LSJ_ZYFS to public;
grant select on datacenter.DC_MSN_YR to public;
grant select on datacenter.DC_POLICYNO_JG_TEST to public;
grant select on datacenter.DC_POL_PK_SIMPLE to public;
grant select on datacenter.DC_PP_1BBR to public;
grant select on datacenter.DC_PP_1CASENO to public;
grant select on datacenter.DC_PP_1POLICYNO to public;
grant select on datacenter.DC_PROVINCE_CITY_CODE to public;
grant select on datacenter.DC_SRFY to public;
grant select on datacenter.DC_SYS_PARAMETERS to public;
grant select on datacenter.DC_TB_JC_C_TAG to public;
grant select on datacenter.DC_TB_JC_F_CASENO_PERSON to public;
grant select on datacenter.DC_TB_JC_F_TAG to public;
grant select on datacenter.DC_TB_JC_GD_AGENT_CODE to public;
grant select on datacenter.DC_TB_JC_JG_RB to public;
grant select on datacenter.DC_TB_TEST to public;
grant select on datacenter.DC_TEMPTT to public;
grant select on datacenter.DC_TEMP_CX1615 to public;
grant select on datacenter.DC_TEMP_CX_CASE to public;
grant select on datacenter.DC_TEMP_FCX1614 to public;
grant select on datacenter.DC_TEMP_GR to public;
grant select on datacenter.DC_TEMP_P1 to public;
grant select on datacenter.DC_TEMP_P2 to public;
grant select on datacenter.DC_TEMP_P3 to public;
grant select on datacenter.DC_TEMP_P4 to public;
grant select on datacenter.DC_TEMP_P5 to public;
grant select on datacenter.DC_TEMP_P9 to public;
grant select on datacenter.DC_TEMP_PP2 to public;
grant select on datacenter.DC_TEMP_TAX to public;
grant select on datacenter.DC_WAIHUI to public;
grant select on datacenter.DC_WEEK to public;
grant select on datacenter.DC_WKX_ACTUALID to public;
grant select on datacenter.DC_WKX_TEST to public;
grant select on datacenter.DC_WKX_TEST_01 to public;
grant select on datacenter.DC_XIE to public;
grant select on datacenter.BI_KX_C_QF_QD to public;
grant select on datacenter.CHEZHUBAOBAODAN to public;
grant select on datacenter.CHUXIAN to public;
grant select on datacenter.CHUXIAN1 to public;
grant select on datacenter.CHUXIAN2 to public;
grant select on datacenter.DC_YANGG_JZ_FCX_BDNYBG to public;
grant select on datacenter.DC_YANGG_JZ_FGS_NBF to public;
grant select on datacenter.DC_YANGG_JZ_FGS_NQD to public;
grant select on datacenter.DC_YANGG_JZ_FGS_QDBASE to public;
grant select on datacenter.DC_YANGG_JZ_FGS_RZBASE to public;
grant select on datacenter.DC_YANGG_JZ_FSXRP to public;
grant select on datacenter.DC_YANGG_JZ_PZ_FCX to public;
grant select on datacenter.DC_YANGG_JZ_QBYQ to public;
grant select on datacenter.DC_YANGG_JZ_QDYQ to public;
grant select on datacenter.DC_YANGG_JZ_QDYQ_YEAR to public;
grant select on datacenter.DC_YANGG_JZ_YCBDCBL to public;
grant select on datacenter.DC_YANGG_JZ_YCBDCBL_KS to public;
grant select on datacenter.DC_YANGG_JZ_YCBDCBL_LEIJI to public;
grant select on datacenter.DC_YANGG_JZ_YC_YUQI to public;
grant select on datacenter.DC_YANGG_KFRATE to public;
grant select on datacenter.DC_YANGG_KF_AOTU_BASE to public;
grant select on datacenter.DC_YANGG_KF_AOTU_DO to public;
grant select on datacenter.DC_YANGG_KF_FCXZH to public;
grant select on datacenter.DC_YANGG_KF_KJEWM to public;
grant select on datacenter.DC_YANGG_KF_WXCUS to public;
grant select on datacenter.DC_YANGG_KF_WX_DQKF to public;
grant select on datacenter.DC_YANGG_KF_XW_P1IN to public;
grant select on datacenter.DC_YANGG_KF_XW_PIN to public;
grant select on datacenter.DC_YANGG_KYB_BALL to public;
grant select on datacenter.DC_YANGG_M6D_CS2016 to public;
grant select on datacenter.DC_YANGG_MSN_RY to public;
grant select on datacenter.DC_YANGG_NEW_QD_ALL to public;
grant select on datacenter.DC_YANGG_NEW_QD_DAY to public;
grant select on datacenter.DC_YANGG_NEW_RZ_ALL to public;
grant select on datacenter.DC_YANGG_NQBM to public;
grant select on datacenter.DC_YANGG_QDCODE to public;
grant select on datacenter.DC_YANGG_RS_CHN to public;
grant select on datacenter.DC_YANGG_RS_YXYYS to public;
grant select on datacenter.DC_YANGG_RYYS to public;
grant select on datacenter.DC_YANGG_SXJBRCX to public;
grant select on datacenter.DC_YANGG_SXJBR_HDL to public;
grant select on datacenter.DC_YANGG_TEAM to public;
grant select on datacenter.DC_YANGG_TUANDAN to public;
grant select on datacenter.DC_YANGG_VIP to public;
grant select on datacenter.DC_YANGG_XB_BASE_CHUKE to public;
grant select on datacenter.DC_YANGG_XB_BASE_LIPEI to public;
grant select on datacenter.DC_YANGG_XM100 to public;
grant select on datacenter.DC_YANGG_XMRY to public;
grant select on datacenter.DC_YANGG_XMRYWB to public;
grant select on datacenter.DC_YANGG_YS to public;
grant select on datacenter.DC_YANGG_YS_2019BIG30 to public;
grant select on datacenter.DC_YANGG_YS_ALL to public;
grant select on datacenter.DC_YANGG_YXJBR to public;
grant select on datacenter.DC_YANGG_ZBXZH to public;
grant select on datacenter.DC_YANGG_ZLQ_CLZL to public;
grant select on datacenter.DC_YANGG_ZLQ_JGQD to public;
grant select on datacenter.DC_YJX_PERSONINCHARGE to public;
grant select on datacenter.DC_YZH_CJQD to public;
grant select on datacenter.DC_YZH_CXYLB to public;
grant select on datacenter.DC_YZH_JHPP to public;
grant select on datacenter.DC_YZH_QLB to public;
grant select on datacenter.DC_YZH_SCKB_QB to public;
grant select on datacenter.DC_YZH_TEST to public;
grant select on datacenter.DC_YZH_ZXYS to public;
grant select on datacenter.DIMIAN_T to public;
grant select on datacenter.WANGQIANJIAN to public;
grant select on datacenter.WANGQIANJIAN1 to public;
grant select on datacenter.WANGQIQINGLILV to public;
grant select on datacenter.WEIJUEGUSUN to public;
grant select on datacenter.WEIJUEGUSUNTONGJI to public;
grant select on datacenter.WEIXIU to public;
grant select on datacenter.WKX_2019 to public;
grant select on datacenter.WKX_BPM_CLAIM to public;
grant select on datacenter.WKX_BPM_TASK to public;
grant select on datacenter.XX_TEMP_P1 to public;
grant select on datacenter.YANGG_ITRP_TEST1 to public;
grant select on datacenter.YANGG_IT_ABCDEFG to public;
grant select on datacenter.YANGG_IT_ABCD_VINBRAND to public;
grant select on datacenter.YANGG_IT_ABCD_VINPLATE to public;
grant select on datacenter.YANGG_IT_BASECODE_CSGROUP to public;
grant select on datacenter.YANGG_IT_BASECODE_IDZONE to public;
grant select on datacenter.YANGG_IT_BASECODE_USTB to public;
grant select on datacenter.YANGG_IT_CW_YS to public;
grant select on datacenter.YANGG_IT_CXCSVIEW_QD to public;
grant select on datacenter.YANGG_IT_CXCSVIEW_XB to public;
grant select on datacenter.YANGG_IT_CXCSVIEW_XTHJ to public;
grant select on datacenter.YANGG_IT_CX_QDCBL_ALLLIST to public;
grant select on datacenter.YANGG_IT_CX_QDCBL_DWX to public;
grant select on datacenter.YANGG_IT_CX_QDCBL_GD to public;
grant select on datacenter.YANGG_IT_CX_QDCBL_TC to public;
grant select on datacenter.YANGG_IT_CX_QDCBL_TCTEMP to public;
grant select on datacenter.YANGG_IT_CX_XBBABC to public;
grant select on datacenter.YANGG_IT_CX_XB_CSBMKS to public;
grant select on datacenter.YANGG_IT_CX_XB_CSBMKS_TMP0926 to public;
grant select on datacenter.YANGG_IT_CX_XB_DEFAULTZRR to public;
grant select on datacenter.YANGG_IT_CX_XB_XLCBMKS to public;
grant select on datacenter.YANGG_IT_CX_XZH to public;
grant select on datacenter.YANGG_IT_FCX_XBXZH to public;
grant select on datacenter.YANGG_IT_FK_CORP_VISIT to public;
grant select on datacenter.YANGG_IT_FK_CORP_VISIT_UPDATE to public;
grant select on datacenter.YANGG_IT_FK_MARKET_DQLIST to public;
grant select on datacenter.YANGG_IT_FK_MARKET_PROJECT to public;
grant select on datacenter.YANGG_IT_FK_MARKET_PROJECTBOSS to public;
grant select on datacenter.YANGG_IT_FK_MARKET_PROJECTNOTE to public;
grant select on datacenter.YANGG_IT_FK_MARKET_PROJECTNS to public;
grant select on datacenter.YANGG_IT_FK_MARKET_PROJECTPLAN to public;
grant select on datacenter.YANGG_IT_FK_MARKET_QDXBCHECK to public;
grant select on datacenter.YANGG_IT_GK_DL_RRECORD to public;
grant select on datacenter.YANGG_IT_GK_DL_RRNOTE to public;
grant select on datacenter.YANGG_IT_GK_DL_TEAMQX to public;
grant select on datacenter.YANGG_IT_GK_DL_TEAMRY to public;
grant select on datacenter.YANGG_IT_JG_JM_CUSGZ to public;
grant select on datacenter.YANGG_IT_JG_JM_CUSVW to public;
grant select on datacenter.YANGG_IT_JG_JM_WJGZ to public;
grant select on datacenter.YANGG_IT_KFPH_ALL to public;
grant select on datacenter.YANGG_IT_KFWEDDID to public;
grant select on datacenter.YANGG_IT_ONLINE_MGOAL to public;
grant select on datacenter.YANGG_IT_ONLINE_MRULE to public;
grant select on datacenter.YANGG_IT_ONLINE_ZXNAME to public;
grant select on datacenter.YANGG_IT_OPENID to public;
grant select on datacenter.YANGG_IT_PW to public;
grant select on datacenter.YANGG_IT_RSMNEY_CXDUAN_2023 to public;
grant select on datacenter.YANGG_IT_RSMNEY_CXLIST to public;
grant select on datacenter.YANGG_IT_RSMNEY_FCR to public;
grant select on datacenter.YANGG_IT_RSMNEY_FCR_2022 to public;
grant select on datacenter.YANGG_IT_RSMNEY_GUHUA_CX to public;
grant select on datacenter.YANGG_IT_RSMNEY_GUHUA_FCX to public;
grant select on datacenter.YANGG_IT_RS_JYX to public;
grant select on datacenter.YANGG_IT_TEMP_2 to public;
grant select on datacenter.YANGG_IT_TEMP_4 to public;
grant select on datacenter.YANGG_IT_TEMP_5 to public;
grant select on datacenter.YANGG_IT_ZC2022 to public;
grant select on datacenter.YANGG_IT_ZX2022 to public;
grant select on datacenter.YANGG_LPDL_CSDIFF to public;
grant select on datacenter.YANGG_TEMP_LYE_ZXTXLIST to public;
grant select on datacenter.YANGG_TK_QK_CUSLIST to public;
grant select on datacenter.YIJUEANJIAN_YUE to public;
grant select on datacenter.YIJUECHONGZULV to public;
grant select on datacenter.YIJUECHONGZULVPIANCHALV to public;
grant select on datacenter.YIJUEPEIKUAN to public;
grant select on datacenter.YIJUEPEIKUANTONGJI to public;
grant select on datacenter.YZH_JBYS to public;
grant select on datacenter.YZH_TEST to public;
grant select on datacenter.ZHIFULV to public;
grant select on datacenter.ZHOUQI to public;
grant select on datacenter.ZHOUQI_INJURYONEONONEFIRSTER to public;
grant select on datacenter.ZHOUQI_P17 to public;
grant select on datacenter.ZONGCHAYI to public;
grant select on datacenter.ZYJ_GD_XXYSY to public;
grant select on datacenter.ZYJ_SX_ZGDE to public;
grant select on datacenter.ZYJ_SYXZ to public;
grant select on datacenter.ZYJ_TC_XYS to public;
grant select on datacenter.ZYJ_TC_YS to public;
grant select on datacenter.ZYJ_TEST to public;
grant select on datacenter.dc_pk to public;
grant select on datacenter.PREMIUM_2 to public;
grant select on datacenter.PREMIUM_ALL to public;
grant select on datacenter.PREMIUM_ALL_V2 to public;
grant select on datacenter.PREMIUM_TEMP to public;
grant select on datacenter.PREMIUM_TEMP3 to public;
grant select on datacenter.PREMIUM_TEMP38 to public;
grant select on datacenter.PREMIUM_TEMP_NONVEHICLE to public;
grant select on datacenter.PREMIUM_TEMP_NONVEHICLE_SZ to public;
grant select on datacenter.PREMIUM_TEMP_TEST to public;
grant select on datacenter.PT358 to public;
grant select on datacenter.TMP_TEST to public;
grant select on datacenter.TMP_A to public;
grant select on datacenter.HT_FINE_PROCESS_MESSAGE to public;
grant select on datacenter.HT_FINE_SYSTEM_MESSAGE to public;
grant select on datacenter.HT_FINE_BASE_OUTPUT to public;
grant select on datacenter.HT_FINE_OUTPUT_PRINT to public;
grant select on datacenter.HT_FINE_OUTPUT_MOUNT to public;
grant select on datacenter.HT_FINE_OUTPUT_CLASS to public;
grant select on datacenter.HT_FINE_OUTPUT_CLIENT_NOTICE to public;
grant select on datacenter.HT_FINE_MOBILE_PUSH_MESSAGE to public;
grant select on datacenter.HT_FINE_BASE_MESSAGE to public;
grant select on datacenter.HT_FINE_OUTPUT_EMAIL to public;
grant select on datacenter.HT_FINE_OUTPUT_SMS to public;
grant select on datacenter.HT_FINE_OUTPUT_FTP to public;
grant select on datacenter.HT_FINE_OUTPUT_PLATFORM_MSG to public;
grant select on datacenter.TEST to public;
grant select on datacenter.YZB_02 to public;
grant select on datacenter.TB_MG_CLAIMNO to public;
grant select on datacenter.TB_MG_ASSESSMENTNO to public;
grant select on datacenter.YANGG_IT_GK_DL_RRECORD_TMP to public;
grant select on datacenter.DC_CYW_M6_NOFAULTPAYMENT to public;
grant select on datacenter.TB_YZH_XBL_BM_NF to public;
grant select on datacenter.YANGG_T_CAA to public;
grant select on datacenter.TMP_SHH_20211108_01 to public;
grant select on datacenter.DC_CYW_M6_INSUREDOBJECT to public;
grant select on datacenter.DC_CYW_M6_OUTSTANDINGRESERVE_1 to public;
grant select on datacenter.YZB_03 to public;
grant select on datacenter.TB_CW_F_GSCZL_QD to public;
grant select on datacenter.DC_CYW_M6_OUTSTANDINGRESERVE to public;
grant select on datacenter.TB_MG_NOTIFICATIONNO to public;
grant select on datacenter.PREMIUM_ALL_CYW to public;
grant select on datacenter.TB_KX_F_RZ_HZ to public;
grant select on datacenter.BC_C_BDNYB to public;
grant select on datacenter.DC_CYW_M6_ADJUSTMENTINFO_1 to public;
grant select on datacenter.DC_CYW_M6_INSUREDOBJECT_3 to public;
grant select on datacenter.TB_CW_GSCZL_QD to public;
grant select on datacenter.KX_BI_C_CXN_QD to public;
grant select on datacenter.DC_TB_HZ_C_CXNYBG to public;
grant select on datacenter.TEMP_DX_TRACE_ONE to public;
grant select on datacenter.TB_MG_GSCZL_TEAM to public;
grant select on datacenter.DC_CYW_M6_INSUREDOBJECT_1 to public;
grant select on datacenter.DC_CYW_M6_NOFAULTPAYMENT_002 to public;
grant select on datacenter.DC_CYW_M6_CLAIM to public;
grant select on datacenter.DC_HZ_F_RZ to public;
grant select on datacenter.DC_YANGG_SXJBR to public;
grant select on datacenter.DC_CYW_M6_TAX_DETAIL to public;
grant select on datacenter.DC_ALL_PK_CYW_0806 to public;
grant select on datacenter.DC_CYW_M6_NOFAULTPAYMENT_001 to public;
grant select on datacenter.DC_CYW_M6_TAX_DETAIL_1 to public;
grant select on datacenter.TB_MG_CLAIMNO_PERSON to public;
grant select on datacenter.DC_ACC_PK_ALL_2 to public;
grant select on datacenter.DC_ALL_PK_CYW to public;
grant select on datacenter.DC_YANGG_DX_TRACE_END to public;
grant select on datacenter.YANGG_T_FAA to public;
grant select on datacenter.BC_FC_BDN_XZ to public;
grant select on datacenter.TB_YZH_XBL_BM to public;
grant select on datacenter.TB_CXGSCZLQD to public;
grant select on datacenter.DC_CYW_M6_INSUREDOBJECT_2 to public;
grant select on datacenter.YANGG_T_FBB to public;
grant select on datacenter.DC_PK to public;
grant select on datacenter.TB_YZH_XBL_QD to public;
grant select on datacenter.DC_ALL_PK_CYW_0818 to public;
grant select on datacenter.YZB_01 to public;
grant select on datacenter.BC_C_CXNYB to public;
grant select on datacenter.TB_MG_GSCZL_QD to public;
grant select on datacenter.PREMIUM_ALL_V3 to public;
grant select on datacenter.TB_MG_F_CLAIMNO to public;
grant select on datacenter.DC_CYW_M6_CASEFOLDER to public;
grant select on datacenter.DX_TRACE_T to public;
grant select on datacenter.BC_FC_BDN_GT to public;
grant select on datacenter.DC_HZ_F_QF to public;
grant select on datacenter.TB_F_CLAIMNO to public;
grant select on datacenter.DC_CYW_G_OSCLEAR to public;
grant select on datacenter.TB_KX_C_QF_HZ to public;
grant select on datacenter.YANGG_IT_FK_MARKET_DQ_TMP to public;
grant select on datacenter.TB_KX_C_RZ_HZ to public;
grant select on datacenter.BC_JGYB1 to public;
grant select on datacenter.TB_MG_POLICYNO to public;
grant select on datacenter.DC_CYW_M6_ADJUSTMENTINFO to public;
grant select on datacenter.BC_FC_BDN_XZGT to public;
grant select on datacenter.BC_F_BDNYB to public;
grant select on datacenter.BC_BFRELA to public;

View File

@ -1,315 +0,0 @@
CREATE OR REPLACE PACKAGE telsale_archievement_pkg IS
-- Author : WANGWEI-202
-- Created : 2023/3/10 15:13:34
-- Purpose : 桌面霸屏项目基础数据生成包
TYPE cur_type IS REF CURSOR;
-- 异常
DEPARTMENTCODE_EXCEPTION_CODE CONSTANT INTEGER := -20000;
DEPARTMENTCODE_EXCEPTION_MSG CONSTANT VARCHAR2(100) := '部门代码无效。';
CALLERCODE_EXCEPTION_CODE CONSTANT INTEGER := -20001;
CALLERCODE_EXCEPTION_MSG CONSTANT VARCHAR2(100) := '坐席工号无效。';
PROCEDURE department_archievement
(
a_department_code IN VARCHAR2,
a_attaching_rate OUT VARCHAR2,
a_renewal_rate OUT VARCHAR2,
a_total OUT INTEGER,
a_mensual_cur OUT cur_type
);
PROCEDURE caller_archievement
(
a_caller_code IN VARCHAR2,
a_attaching_rate OUT VARCHAR2,
a_renewal_rate OUT VARCHAR2,
a_total OUT INTEGER,
a_present_month OUT NUMBER,
a_mensual_cur OUT cur_type
);
PROCEDURE caller_arch_ranking_list
(
a_department_code IN VARCHAR2,
a_year IN VARCHAR2,
a_month IN VARCHAR2,
a_attaching_ranking_list OUT cur_type,
a_renewal_ranking_list OUT cur_type
);
END telsale_archievement_pkg;
/
CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
-- 部门业绩
PROCEDURE DEPARTMENT_ARCHIEVEMENT
(
A_DEPARTMENT_CODE IN VARCHAR2,
A_ATTACHING_RATE OUT VARCHAR2,
A_RENEWAL_RATE OUT VARCHAR2,
A_TOTAL OUT INTEGER,
A_MENSUAL_CUR OUT CUR_TYPE
) IS
--L_THIS_MONTH VARCHAR2(4);
--L_THIS_YEAR VARCHAR2(4);
L_FIRSTDAY DATE;
L_DEPARTMENT_NAME VARCHAR2(100);
BEGIN
/*L_THIS_MONTH := TO_CHAR(SYSDATE,
'mm');
L_THIS_YEAR := TO_CHAR(SYSDATE,
'yyyy');*/
L_FIRSTDAY := TO_DATE(TO_CHAR(SYSDATE,
'yyyy') || '-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss');
-- 获取部门名称
BEGIN
SELECT DEPARTMENT_NAME
INTO L_DEPARTMENT_NAME
FROM IDST0.BM_T BM
WHERE BM.DEPARTMENT_CODE = A_DEPARTMENT_CODE;
EXCEPTION
-- 如果没有找到部门名称,说明代码错误,抛出异常
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(DEPARTMENTCODE_EXCEPTION_CODE,
DEPARTMENTCODE_EXCEPTION_MSG);
END;
--车非渗透率
/*SELECT DECODE(SUM(CF.车险个人客户保费),
0,
0,
ROUND((SUM(CF.车非融合保费) / SUM(CF.车险个人客户保费) * 100),
2))
INTO A_ATTACHING_RATE
FROM 坐席车非每日保费 CF
WHERE CF.月份 = L_THIS_MONTH
AND CF.年份 = L_THIS_YEAR
AND 部门代码 = A_DEPARTMENT_CODE;*/
SELECT round(dept.当月保费渗透率,
2)
INTO A_ATTACHING_RATE
FROM desktop_archievement_admin.BI机构渗透率跟踪表 dept
WHERE dept.部门 = L_DEPARTMENT_NAME;
--续保率
/*SELECT DECODE(SUM(到期数),
0,
0,
ROUND(SUM(已续保累计) / SUM(到期数) * 100,
2))
INTO A_RENEWAL_RATE
FROM 坐席续保统计
WHERE 部门 = L_DEPARTMENT_NAME;*/
SELECT round(t."个车续保率(全月)(%)",
2)
INTO A_RENEWAL_RATE
FROM BI机构当月个车续保率跟踪表 t
WHERE t.责任部门 = L_DEPARTMENT_NAME;
--总业绩
SELECT ROUND(NVL(SUM(CF.车险个人客户保费 + CF.车非融合保费),
0),
0)
INTO A_TOTAL
FROM 坐席车非每日保费 CF
WHERE 部门代码 = A_DEPARTMENT_CODE
AND 签单日期 >= L_FIRSTDAY
AND 签单日期 <= SYSDATE;
--每月业绩
OPEN A_MENSUAL_CUR FOR
SELECT CF.月份 MM,
ROUND(NVL(SUM(CF.车险个人客户保费 + CF.车非融合保费) / 10000,
0),
0) BF
FROM 坐席车非每日保费 CF
WHERE 部门代码 = A_DEPARTMENT_CODE
AND 签单日期 >= TO_DATE(TO_CHAR(SYSDATE,
'yyyy') || '-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND 签单日期 < TO_DATE(TO_CHAR(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY CF.月份
ORDER BY CF.月份;
END;
/*******************************************************/
-- 坐席业绩
PROCEDURE caller_archievement
(
a_caller_code IN VARCHAR2,
a_attaching_rate OUT VARCHAR2,
a_renewal_rate OUT VARCHAR2,
a_total OUT INTEGER,
a_present_month OUT NUMBER,
a_mensual_cur OUT cur_type
) IS
l_caller_name VARCHAR2(100);
l_department_name VARCHAR2(100);
--l_this_month VARCHAR2(4);
l_this_year VARCHAR2(4);
--l_firstday DATE;
l_rownum INTEGER;
BEGIN
--查询坐席名称,和部门名称,验证代码
BEGIN
SELECT zx.saler_name,
bm.department_name
INTO l_caller_name,
l_department_name
FROM tele_saler zx,
tele_saler_team team,
idst0.bm_t bm
WHERE zx.saler_code = a_caller_code
AND zx.team_code = team.team_code
AND team.department_code = bm.department_code;
/* SELECT saler_name
INTO l_caller_name
FROM tele_saler
WHERE saler_code = a_caller_code;*/
EXCEPTION
-- 如果没有查询到坐席名称,说明代码有误,抛出异常
WHEN no_data_found THEN
raise_application_error(CALLERCODE_EXCEPTION_CODE,
CALLERCODE_EXCEPTION_MSG);
END;
--l_this_month := to_char(SYSDATE,
-- 'mm');
l_this_year := to_char(SYSDATE,
'yyyy');
--l_firstday := to_date(l_this_year || '-01-01 00:00:00',
-- 'yyyy-mm-dd hh24:mi:ss');
--总车险保费
SELECT round(nvl(SUM(cf.车险个人客户保费),
0),
2) bf
INTO a_total
FROM 坐席车非每日保费 cf
WHERE cf.坐席名称 = l_caller_name
AND cf.部门 = l_department_name
AND cf.年份 = l_this_year;
--渗透率
SELECT rownum,
round(nvl(t.当月保费渗透率,
0),
2),
round(nvl(t."车险保费(万)" * 10000,
0),
2)
INTO l_rownum,
a_attaching_rate,
a_present_month
FROM BI电销坐席车非渗透率跟踪表 t
WHERE t.经办 = l_caller_name
AND rownum = 1;
--续保率
SELECT rownum,
round(nvl(t."个车续保率(全月)(%)",
0),
2)
INTO l_rownum,
a_renewal_rate
FROM BI电销坐席续保率跟踪表 t
WHERE t.责任人 = l_caller_name
AND rownum = 1;
--每月业绩
OPEN A_MENSUAL_CUR FOR
SELECT CF.月份 MM,
ROUND(NVL(SUM(CF.车险个人客户保费),
0),
0) BF
FROM 坐席车非每日保费 CF
WHERE cf.坐席名称 = l_caller_name
AND cf.部门 = l_department_name
AND 签单日期 >= TO_DATE(TO_CHAR(SYSDATE,
'yyyy') || '-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND 签单日期 <= SYSDATE
GROUP BY CF.月份
ORDER BY CF.月份;
END;
/*******************************************************/
-- 坐席排行榜
PROCEDURE CALLER_ARCH_RANKING_LIST
(
A_DEPARTMENT_CODE IN VARCHAR2,
A_YEAR IN VARCHAR2,
A_MONTH IN VARCHAR2,
A_ATTACHING_RANKING_LIST OUT CUR_TYPE,
A_RENEWAL_RANKING_LIST OUT CUR_TYPE
) IS
L_DEPARTMENT_NAME VARCHAR2(100);
BEGIN
-- 获取部门名称
BEGIN
SELECT DEPARTMENT_NAME
INTO L_DEPARTMENT_NAME
FROM IDST0.BM_T BM
WHERE BM.DEPARTMENT_CODE = A_DEPARTMENT_CODE;
EXCEPTION
-- 如果没有找到部门名称,说明代码错误,抛出异常
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(DEPARTMENTCODE_EXCEPTION_CODE,
DEPARTMENTCODE_EXCEPTION_MSG);
END;
-- 车非融合率排行榜
OPEN A_ATTACHING_RANKING_LIST FOR
SELECT rownum,
paihang.经办 AS caller_name,
paihang.attaching_rate
FROM (SELECT DISTINCT *
FROM (SELECT t.经办,
round(t.当月保费渗透率,
2) attaching_rate,
zuoxi.department_name
FROM BI电销坐席车非渗透率跟踪表 t,
(SELECT DISTINCT t.saler_code,
t.saler_name,
t.team_code,
team.team,
bm.department_name
FROM tele_saler t,
tele_saler_team team,
idst0.bm_t bm
WHERE t.team_code = team.team_code
AND team.department_code = bm.department_code
AND bm.department_name = L_DEPARTMENT_NAME) zuoxi
WHERE t.经办 = zuoxi.saler_name) st
ORDER BY st.department_name,
st.attaching_rate DESC) paihang;
-- 续保率排行榜
OPEN A_RENEWAL_RANKING_LIST FOR
SELECT rownum,
paihang.责任人 AS CALLER_NAME,
paihang.xbl AS RENEWAL_RATE
FROM (SELECT DISTINCT *
FROM (SELECT t.责任人,
round(t."个车续保率(全月)(%)",
2) xbl,
zuoxi.department_name
FROM BI电销坐席续保率跟踪表 t,
(SELECT DISTINCT t.saler_code,
t.saler_name,
t.team_code,
team.team,
bm.department_name
FROM tele_saler t,
tele_saler_team team,
idst0.bm_t bm
WHERE t.team_code = team.team_code
AND team.department_code = bm.department_code
AND bm.department_name = L_DEPARTMENT_NAME) zuoxi
WHERE t.责任人 = zuoxi.saler_name) xb
ORDER BY xb.department_name,
xb.xbl DESC) paihang;
END;
BEGIN
NULL;
END TELSALE_ARCHIEVEMENT_PKG;
/

View File

@ -1,43 +0,0 @@
CREATE OR REPLACE PACKAGE telsale_bi_utils IS
-- Author : WANGWEI-202
-- Created : 2023/10/12 15:31:13
-- Purpose : bi数据报表相关的工具
PROCEDURE 清理BI电销坐席车非渗透率跟踪表;
PROCEDURE 清理BI电销坐席续保率跟踪表;
PROCEDURE 清理BI部门渗透率跟踪表;
PROCEDURE 清理BI部门续保率跟踪表;
END telsale_bi_utils;
/
CREATE OR REPLACE PACKAGE BODY telsale_bi_utils IS
PROCEDURE 清理BI电销坐席车非渗透率跟踪表 IS
BEGIN
EXECUTE IMMEDIATE 'truncate table BI电销坐席车非渗透率跟踪表';
END;
PROCEDURE 清理BI电销坐席续保率跟踪表 IS
BEGIN
EXECUTE IMMEDIATE 'truncate table BI电销坐席续保率跟踪表';
END;
PROCEDURE 清理BI部门渗透率跟踪表 IS
BEGIN
EXECUTE IMMEDIATE 'truncate table BI机构渗透率跟踪表';
END;
PROCEDURE 清理BI部门续保率跟踪表 IS
BEGIN
EXECUTE IMMEDIATE 'truncate table BI机构当月个车续保率跟踪表';
END;
BEGIN
-- Initialization
NULL;
END telsale_bi_utils;
/

View File

@ -1,918 +0,0 @@
CREATE OR REPLACE PACKAGE telsale_pkg IS
-- Author : WANGWEI-202
-- Created : 2023/3/10 15:13:34
-- Purpose : 桌面霸屏项目基础数据生成包
PROCEDURE 车非基础数据
(
a_start_date IN DATE,
a_end_date IN DATE
);
PROCEDURE gen_车非临时数据
(
a_start_date IN DATE,
a_end_date IN DATE
);
PROCEDURE 续保基本数据;
PROCEDURE chefei_daily_job;
PROCEDURE xubao_daily_job;
END telsale_pkg;
/
CREATE OR REPLACE PACKAGE BODY telsale_pkg IS
PROCEDURE 车非基础数据
(
a_start_date IN DATE,
a_end_date IN DATE
) IS
--l_count INTEGER; --已有记录的数量
BEGIN
--产生临时数据
gen_车非临时数据(a_start_date,
a_end_date);
FOR caller_record IN (SELECT *
FROM desktop_archievement_admin.坐席车非每日保费_t)
LOOP
BEGIN
DELETE desktop_archievement_admin.坐席车非每日保费 cf
WHERE cf.签单日期 = caller_record.签单日期
AND cf.部门 = caller_record.部门
AND cf.经办人n = caller_record.经办人n
AND cf.坐席工号 = caller_record.坐席工号;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line(caller_record.签单日期 || '无重复数据');
END;
INSERT INTO desktop_archievement_admin.坐席车非每日保费
VALUES caller_record;
END LOOP;
COMMIT;
/*EXCEPTION
WHEN OTHERS THEN
NULL;*/
END;
/**********************************************************************/
PROCEDURE gen_车非临时数据
(
a_start_date IN DATE,
a_end_date IN DATE
) IS
BEGIN
desktop_archievement_admin.clean_temp_data;
INSERT INTO desktop_archievement_admin.坐席车非每日保费_t
WITH aa AS
(SELECT to_char(t.signature_date,
'yyyy-mm-dd') 签单日期,
(to_char(T.signature_date,
'yyyy')) the_year,
(to_char(T.signature_date,
'mm')) the_month,
t.policy_no bdh,
t.endorsement_no pdh,
qt.t_cre tid,
QT.B_CRE BTID, -----添加字段
e.inception_date qbsj,
e.planned_end_date zzsj,
pt.premium_amount - nvl(pt.tax_amount,
0) bf
--,qt.qdbf - nvl(qt.qdbf_tax_amount,0) bf
,
nt.ecompensation_rate * (pt.premium_amount - nvl(pt.tax_amount,
0)) fxbf,
z.department_name bm,
z.department_code bmdm,
CASE
WHEN (et.telpartnercode LIKE '%HC%' OR
zx.workerno IN (SELECT code
FROM datacenter.dc_lsj_zx_hc)) THEN
'海沧丰骏'
ELSE
''
END 是否丰骏,
nvl(zx.workerno,
et.telpartnercode) 坐席工号,
(CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%建发凯迪%' THEN
'林伟华'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%建发凯迪%' THEN
'其他'
ELSE
to_char(ys.坐席姓名)
END) 坐席名称,
YS.团队 坐席团队,
nvl(YS.团队,
y.section_office_name) 科室N,
nvl((CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%建发凯迪%' THEN
'林伟华'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%建发凯迪%' THEN
'其他'
ELSE
to_char(ys.坐席姓名)
END),
xx.staff_name) 经办人N
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no
LEFT JOIN idst0.motorised_vehicle_t v
ON v.policy_no = e.policy_no
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = t.policy_no
AND pt.endorsement_no = t.endorsement_no
LEFT JOIN ywglxt.w_dxbd_i i
ON e.policy_no = i.bdh
LEFT JOIN idst0.rydm_t xx
ON xx.staff_code = nvl(i.zhjywy,
e.operator_code)
LEFT JOIN idst0.ks_t y
ON y.section_office_code = nvl(xx.section_office_code,
e.section_office_code)
LEFT JOIN idst0.bm_t z
ON z.department_code = nvl(xx.department_code,
e.department_code)
--left join datacenter.dc_cx_csteam ct on ct.jbrcode = xx.staff_code
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = t.policy_no
AND nt.endorsement_no = t.endorsement_no
--left join ywglxt.q_auto_agreement_extend_t qe on qe.policy_no = e.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qt
ON qt.policy_no = e.policy_no
LEFT JOIN datacenter.dc_yangg_qdcode qd
ON qd.code = e.selling_channel_type
LEFT JOIN datacenter.dc_tb_jc_c_tag cl
ON cl.保单号 = e.policy_no
LEFT JOIN datacenter.dc_yangg_basecode_teams fg
ON fg.bm = z.department_name
AND fg.ks = y.section_office_name
--left join idst0.t_sell_policy_autobase_t zx on zx.policy_no=e.policy_no
--left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
LEFT JOIN idst0.auto_agreement_extend_t et
ON et.policy_no = e.policy_no
LEFT JOIN idst0.t_sell_policy_autobase_t zx
ON zx.policy_no = e.policy_no
LEFT JOIN datacenter.dc_YZH_ZXYS YS
ON YS.坐席工号 = nvl(zx.workerno,
et.telpartnercode)
--left join v_lsj_dimian dm on dm.vin=v.vin and e.selling_channel_type='25' and dm.MEMO like'%地面续保%'
--left join datacenter.dc_lsj_zx_team zt on zt.name=coalesce(zc.name,zc1.name,bc.name,dm.JBRMC)
WHERE t.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND t.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
--and t.endorsement_no = '无'
AND e.policy_status = '1' --条件:保单有效
AND qt.tflag = '0' --条件:类型为个人
AND qt.usage_xm = '家庭自用车'
--条件:单程提车、摩托车、拖拉机
--and e.policy_no in ('AXIMC90Y1419B038594J','AXIMC90CTP19B039593R','AXIMC04CTP19B013473X')
AND e.planned_end_date - e.inception_date >= 360
--条件:保单周期
)
-----添加字段
,
dd2 AS
(SELECT 签单日期,
the_year,
the_month,
bm,
bmdm,
坐席工号,
坐席名称,
坐席团队,
科室N,
经办人N,
CASE
WHEN pdh = '无' THEN
tid
END tid,
to_number('1') 客户数,
COUNT(DISTINCT CASE
WHEN pdh = '无' THEN
bdh
END) 保单数,
SUM(bf) 保费
FROM (SELECT DISTINCT *
FROM aa) aa
GROUP BY bm,
bmdm,
CASE
WHEN pdh = '无' THEN
tid
END,
the_year,
the_month,
BTID,
坐席工号,
坐席名称,
坐席团队,
签单日期,
科室N,
经办人N
UNION
SELECT 签单日期,
the_year,
the_month,
bm,
bmdm,
坐席工号,
坐席名称,
坐席团队,
科室N,
经办人N,
CASE
WHEN btid = tid THEN
''
ELSE
btid
END btid,
to_number('0') 客户数,
to_number('0') 保单数,
to_number('0') 保费
FROM (SELECT DISTINCT *
FROM aa) aa),
DD AS
(SELECT *
FROM DD2
WHERE TID IS NOT NULL)
--select * from dd
,
bb AS
(SELECT DISTINCT q.policy_no bdh,
q.endorsement_no pdh,
qna.t_cre tid,
to_number(to_char(q.signature_date,
'yyyy')) || '年' nf,
(to_char(q.signature_date,
'mm')) mm_f,
to_char(q.signature_date,
'dd') || '日' dd,
q.signature_date sj,
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) bf,
z.department_name bm
FROM idst0.nonauto_agreement_request_t q
LEFT JOIN idst0.nonauto_agreement_t e
ON e.policy_no = q.policy_no
LEFT JOIN idst0.nonauto_premium_t pt
ON pt.endorsement_no = q.endorsement_no
AND pt.policy_no = q.policy_no
LEFT JOIN idst0.reinsurance_t r
ON r.reinsurance_policy_no = e.policy_no
LEFT JOIN idst0.exrate_month_t c
ON pt.currency_code = c.bzh
AND to_char(q.signature_date,
'YYYY') = c.theyear
AND to_char(q.signature_date,
'fmmm') = c.themonth
LEFT JOIN idst0.rydm_t x
ON x.staff_code = e.operator_code
LEFT JOIN idst0.ks_t y
ON y.section_office_code = x.section_office_code
LEFT JOIN idst0.bm_t z
ON z.department_code = x.department_code
LEFT JOIN ywglxt.q_nonauto_agreement_t qna
ON qna.policy_no = q.policy_no
LEFT JOIN datacenter.dc_yangg_gkxzh gk
ON gk.product_code = e.product_code --分散型险种
--left join datacenter.dc_yangg_zbxzh zb on zb.product_code = e.product_code --政保险种
LEFT JOIN dd
ON dd.tid = qna.t_cre
WHERE qna.tflag = '0'
AND (CASE
WHEN q.endorsement_no != '无' AND
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) != 0 THEN
'是'
END) IS NULL
--and q.endorsement_no = '无'
AND e.policy_status = '1'
AND gk.product_code IS NOT NULL
AND (e.product_code LIKE '2%' OR e.product_code LIKE '1106%' --意健 --责任
OR e.product_code LIKE '1107%' OR e.product_code LIKE '1108%' OR e.product_code LIKE '1307%' OR e.product_code LIKE '1304A400%' --家财
)
--and e.product_code not in ('22KC9800')
AND q.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND q.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND e.planned_end_date - e.inception_date >= 90
AND dd.tid IS NOT NULL
--车险个人客户)
)
--SELECT * FROM BB
,
cc AS
(SELECT mm_f,
tid 融合证件,
COUNT(DISTINCT bdh) 融合保数,
SUM(bf) 融合保费
FROM bb
GROUP BY tid,
mm_f),
ff AS
(SELECT dd.*,
cc.*
FROM dd
LEFT JOIN cc
ON cc.融合证件 = dd.tid
AND cc.mm_f = dd.the_month) --OR cc.融合证件 = dd.btid
--select * from ff
SELECT to_date(签单日期,
'yyyy-mm-dd') 签单日期,
the_year 年份,
the_month 月份,
bm 部门,
bmdm 部门代码,
科室N,
经办人N,
坐席工号,
坐席名称,
坐席团队,
nvl(SUM(保费),
0) 车险个人客户保费,
nvl(SUM(融合保费),
0) 车非融合保费
FROM ff
WHERE to_date(ff.签单日期,
'yyyy-mm-dd') >= a_start_date
AND to_date(ff.签单日期,
'yyyy-mm-dd') < a_end_date
AND bm IN ('续保业务部',
'湖里支公司')
GROUP BY 签单日期,
the_year,
the_month,
bm,
bmdm,
坐席工号,
坐席名称,
坐席团队,
科室N,
经办人N
ORDER BY 部门,
坐席名称;
COMMIT;
END;
/**********************************************************************/
PROCEDURE 续保基本数据 IS
BEGIN
--清理旧数据
desktop_archievement_admin.clean_mensual_renewal;
--生成新数据
INSERT INTO desktop_archievement_admin.坐席续保统计
WITH cc AS
(SELECT pt.policy_no policy_no,
SUM(pt.premium_amount) premium_amount,
SUM(pt.tax_amount) tax_amount
FROM idst0.auto_premium_t pt
GROUP BY pt.policy_no)
,
bb AS
(SELECT t.policy_no 保单号,
(CASE
WHEN e.product_code LIKE '1102%' AND
e.product_code NOT LIKE '110224%' AND
e.product_code != '11026000' THEN
'机动车险保险'
WHEN e.product_code LIKE '1101%' OR
e.product_code LIKE '1301%' OR
e.product_code LIKE '11110000%' THEN
'财产险'
WHEN e.product_code LIKE '1107%' OR
e.product_code LIKE '1307%' OR
e.product_code LIKE '1304A400%' THEN
'责任险'
WHEN e.product_code LIKE '1106%' OR
e.product_code LIKE '51015700' THEN
'家财险'
WHEN (e.product_code LIKE '1104%' OR e.product_code LIKE '1204%' OR e.product_code LIKE '13040000%') AND
e.product_code NOT LIKE '120404%' THEN
'货运险'
WHEN e.product_code LIKE '1203%' OR
e.product_code LIKE '1103%' OR
e.product_code LIKE '120404%' THEN
'船舶险'
WHEN e.product_code LIKE '1305%' THEN
'工程险'
WHEN e.product_code LIKE '111%' AND
e.product_code NOT LIKE '11110000%' THEN
'农业险'
WHEN e.product_code LIKE '1109%' OR
e.product_code LIKE '1309%' THEN
'保证保险'
WHEN e.product_code LIKE '1312%' THEN
'特殊风险'
WHEN e.product_code LIKE '1308%' THEN
'信用险'
WHEN e.product_code LIKE '23%' THEN
'意外险'
WHEN e.product_code LIKE '22%' THEN
'健康险'
WHEN e.product_code LIKE '110224%' OR
e.product_code = '11026000' THEN
'交强险'
ELSE
'未分配'
END) AS 险种大类
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no)
,
aa1 AS
(SELECT a.policy_no 旧保单,
a.selling_shop_code 车商代码,
a.planned_end_date 到期时间,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'个车专业化销售一科'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'个车专业化销售一科'
ELSE
nvl(dt.科室名称,
z.section_office_name)
END 科室,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.部门,
y.department_name) NOT LIKE '湖里支公司' andcd.memo LIKE '%深圳%' OR
cd.memo LIKE '%地面%' and v.vehicle_brand IN ('特斯拉',
'蔚来',
'理想',
'小鹏',
'极氪',
'极狐',
'AITO',
'ARCFOX极狐',
'特斯拉(中国)',
'特斯拉(中国)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'新能源车事业发展中心厦门分中心'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END) = '湖里支公司' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
WHEN cd.memo LIKE '%地面%' OR
cd.memo LIKE '%深圳%' THEN
'续保业务部'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'同安支公司'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
END) 责任部门,
qa.USAGE_XM 使用性质,
decode(qa.bd_type,
'1',
'单交强',
'2',
'单商业',
'3',
'交商共保',
'其它') 保单类型,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
'是'
END) 高预赔,
x.staff_name AS 经办,
bb.险种大类,
cc.signature_date 新保单签发时间,
(SELECT hmd.管控类型
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin) 管控类型
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb.保单号 = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = '无'
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.险种大类
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb.保单号 = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = '无'
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = '无'
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc.险种大类 = bb.险种大类)
AND cc.inception_date > a.planned_end_date - 30 --时间限制放宽为30天
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt.保单号 = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')),
aa2 AS
(SELECT a.policy_no 旧保单,
a.selling_shop_code 车商代码,
a.planned_end_date 到期时间,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'个车专业化销售一科'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'个车专业化销售一科'
ELSE
nvl(dt.科室名称,
z.section_office_name)
END 科室,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.部门,
y.department_name) NOT LIKE '湖里支公司' andcd.memo LIKE '%深圳%' OR
cd.memo LIKE '%地面%' and v.vehicle_brand IN ('特斯拉',
'蔚来',
'理想',
'小鹏',
'极氪',
'极狐',
'AITO',
'ARCFOX极狐',
'特斯拉(中国)',
'特斯拉(中国)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'新能源车事业发展中心厦门分中心'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END) = '湖里支公司' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
WHEN cd.memo LIKE '%地面%' OR
cd.memo LIKE '%深圳%' THEN
'续保业务部'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'同安支公司'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
END) 责任部门,
qa.USAGE_XM 使用性质,
decode(qa.bd_type,
'1',
'单交强',
'2',
'单商业',
'3',
'交商共保',
'其它') 保单类型,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
'是'
END) 高预赔,
x.staff_name AS 经办,
bb.险种大类,
cc.signature_date 新保单签发时间,
(SELECT hmd.管控类型
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin) 管控类型
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb.保单号 = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = '无'
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.险种大类
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb.保单号 = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = '无'
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = '无'
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc.险种大类 = bb.险种大类)
AND cc.inception_date > a.planned_end_date - 30 --时间限制放宽为30天
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt.保单号 = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2024-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss'))
,
aa3 AS
(SELECT DISTINCT *
FROM aa1
UNION ALL (SELECT DISTINCT *
FROM aa2))
,
AA AS
(SELECT AA3.*,
nvlzx.workerno,
et.telpartnercode) 坐席工号,
(CASE WHEN nvlzx.workerno,
et.telpartnercode) =
'DX001' AND aa3.经办 LIKE
'%建发凯迪%' THEN
'林伟华' WHEN nvlzx.workerno,
et.telpartnercode) =
'DX001' AND aa3.经办 NOT LIKE
'%建发凯迪%' THEN
'其他' ELSE to_char
(ys.坐席姓名) END) 坐席名称,
YS.团队 坐席团队 FROM AA3 LEFT JOIN idst0.auto_agreement_extend_t et ON et.policy_no = AA3.旧保单 LEFT JOIN idst0.t_sell_policy_autobase_t zx ON zx.policy_no = AA3.旧保单 LEFT JOIN dc_YZH_ZXYS YS ON YS.坐席工号 = nvlzx.workerno,
et.telpartnercode))
,
yxb AS
(
---已续保
SELECT aa.责任部门 部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号,
--(case when a.标识='非首续'and A.责任部门='续保业务部' then '续保业务部' else A.部门 end) 部门,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END) 已续保累计
FROM aa
WHERE aa.使用性质 IN ('家庭自用车',
'企业客车')
AND aa.高预赔 IS NULL
AND aa.管控类型 IS NULL
AND aa.保单类型 IN '交商共保', '单交强'
AND aa.到期时间 >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.到期时间 < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND aa.新保单签发时间 <= to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.责任部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号)
--个车续保率=已续数-累计/到期数-累计
,
dqs AS
(
---到期数
SELECT aa.责任部门 部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END) 到期数
FROM aa
WHERE aa.使用性质 IN ('家庭自用车',
'企业客车')
AND aa.高预赔 IS NULL
AND aa.管控类型 IS NULL
AND aa.保单类型 IN '交商共保', '单交强'
AND aa.到期时间 >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.到期时间 < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.责任部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号)
SELECT dqs.部门,
dqs.科室,
dqs.经办,
dqs.坐席团队,
dqs.坐席名称,
dqs.坐席工号,
yxb.已续保累计,
dqs.到期数
FROM yxb,
dqs --,sdqs,syxs,cyxs,cdqs
WHERE dqs.部门 = yxb.部门
AND dqs.经办 = yxb.经办
AND dqs.科室 = yxb.科室
AND dqs.坐席名称 = yxb.坐席名称
AND dqs.坐席工号 = yxb.坐席工号;
COMMIT;
END;
PROCEDURE chefei_daily_job IS
BEGIN
车非基础数据(SYSDATE - 3,
SYSDATE);
END;
PROCEDURE xubao_daily_job IS
BEGIN
续保基本数据;
END;
BEGIN
NULL;
END telsale_pkg;
/

View File

@ -1,918 +0,0 @@
CREATE OR REPLACE PACKAGE telsale_pkg IS
-- Author : WANGWEI-202
-- Created : 2023/3/10 15:13:34
-- Purpose : 桌面霸屏项目基础数据生成包
PROCEDURE 车非基础数据
(
a_start_date IN DATE,
a_end_date IN DATE
);
PROCEDURE gen_车非临时数据
(
a_start_date IN DATE,
a_end_date IN DATE
);
PROCEDURE 续保基本数据;
PROCEDURE chefei_daily_job;
PROCEDURE xubao_daily_job;
END telsale_pkg;
/
CREATE OR REPLACE PACKAGE BODY telsale_pkg IS
PROCEDURE 车非基础数据
(
a_start_date IN DATE,
a_end_date IN DATE
) IS
--l_count INTEGER; --已有记录的数量
BEGIN
--产生临时数据
gen_车非临时数据(a_start_date,
a_end_date);
FOR caller_record IN (SELECT *
FROM desktop_archievement_admin.坐席车非每日保费_t)
LOOP
BEGIN
DELETE desktop_archievement_admin.坐席车非每日保费 cf
WHERE cf.签单日期 = caller_record.签单日期
AND cf.部门 = caller_record.部门
AND cf.经办人n = caller_record.经办人n
AND cf.坐席工号 = caller_record.坐席工号;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line(caller_record.签单日期 || '无重复数据');
END;
INSERT INTO desktop_archievement_admin.坐席车非每日保费
VALUES caller_record;
END LOOP;
COMMIT;
/*EXCEPTION
WHEN OTHERS THEN
NULL;*/
END;
/**********************************************************************/
PROCEDURE gen_车非临时数据
(
a_start_date IN DATE,
a_end_date IN DATE
) IS
BEGIN
desktop_archievement_admin.clean_temp_data;
INSERT INTO desktop_archievement_admin.坐席车非每日保费_t
WITH aa AS
(SELECT to_char(t.signature_date,
'yyyy-mm-dd') 签单日期,
(to_char(T.signature_date,
'yyyy')) the_year,
(to_char(T.signature_date,
'mm')) the_month,
t.policy_no bdh,
t.endorsement_no pdh,
qt.t_cre tid,
QT.B_CRE BTID, -----添加字段
e.inception_date qbsj,
e.planned_end_date zzsj,
pt.premium_amount - nvl(pt.tax_amount,
0) bf
--,qt.qdbf - nvl(qt.qdbf_tax_amount,0) bf
,
nt.ecompensation_rate * (pt.premium_amount - nvl(pt.tax_amount,
0)) fxbf,
z.department_name bm,
z.department_code bmdm,
CASE
WHEN (et.telpartnercode LIKE '%HC%' OR
zx.workerno IN (SELECT code
FROM datacenter.dc_lsj_zx_hc)) THEN
'海沧丰骏'
ELSE
''
END 是否丰骏,
nvl(zx.workerno,
et.telpartnercode) 坐席工号,
(CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%建发凯迪%' THEN
'林伟华'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%建发凯迪%' THEN
'其他'
ELSE
to_char(ys.坐席姓名)
END) 坐席名称,
YS.团队 坐席团队,
nvl(YS.团队,
y.section_office_name) 科室N,
nvl((CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%建发凯迪%' THEN
'林伟华'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%建发凯迪%' THEN
'其他'
ELSE
to_char(ys.坐席姓名)
END),
xx.staff_name) 经办人N
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no
LEFT JOIN idst0.motorised_vehicle_t v
ON v.policy_no = e.policy_no
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = t.policy_no
AND pt.endorsement_no = t.endorsement_no
LEFT JOIN ywglxt.w_dxbd_i i
ON e.policy_no = i.bdh
LEFT JOIN idst0.rydm_t xx
ON xx.staff_code = nvl(i.zhjywy,
e.operator_code)
LEFT JOIN idst0.ks_t y
ON y.section_office_code = nvl(xx.section_office_code,
e.section_office_code)
LEFT JOIN idst0.bm_t z
ON z.department_code = nvl(xx.department_code,
e.department_code)
--left join datacenter.dc_cx_csteam ct on ct.jbrcode = xx.staff_code
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = t.policy_no
AND nt.endorsement_no = t.endorsement_no
--left join ywglxt.q_auto_agreement_extend_t qe on qe.policy_no = e.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qt
ON qt.policy_no = e.policy_no
LEFT JOIN datacenter.dc_yangg_qdcode qd
ON qd.code = e.selling_channel_type
LEFT JOIN datacenter.dc_tb_jc_c_tag cl
ON cl.保单号 = e.policy_no
LEFT JOIN datacenter.dc_yangg_basecode_teams fg
ON fg.bm = z.department_name
AND fg.ks = y.section_office_name
--left join idst0.t_sell_policy_autobase_t zx on zx.policy_no=e.policy_no
--left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
LEFT JOIN idst0.auto_agreement_extend_t et
ON et.policy_no = e.policy_no
LEFT JOIN idst0.t_sell_policy_autobase_t zx
ON zx.policy_no = e.policy_no
LEFT JOIN datacenter.dc_YZH_ZXYS YS
ON YS.坐席工号 = nvl(zx.workerno,
et.telpartnercode)
--left join v_lsj_dimian dm on dm.vin=v.vin and e.selling_channel_type='25' and dm.MEMO like'%地面续保%'
--left join datacenter.dc_lsj_zx_team zt on zt.name=coalesce(zc.name,zc1.name,bc.name,dm.JBRMC)
WHERE t.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND t.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
--and t.endorsement_no = '无'
AND e.policy_status = '1' --条件:保单有效
AND qt.tflag = '0' --条件:类型为个人
AND qt.usage_xm = '家庭自用车'
--条件:单程提车、摩托车、拖拉机
--and e.policy_no in ('AXIMC90Y1419B038594J','AXIMC90CTP19B039593R','AXIMC04CTP19B013473X')
AND e.planned_end_date - e.inception_date >= 360
--条件:保单周期
)
-----添加字段
,
dd2 AS
(SELECT 签单日期,
the_year,
the_month,
bm,
bmdm,
坐席工号,
坐席名称,
坐席团队,
科室N,
经办人N,
CASE
WHEN pdh = '无' THEN
tid
END tid,
to_number('1') 客户数,
COUNT(DISTINCT CASE
WHEN pdh = '无' THEN
bdh
END) 保单数,
SUM(bf) 保费
FROM (SELECT DISTINCT *
FROM aa) aa
GROUP BY bm,
bmdm,
CASE
WHEN pdh = '无' THEN
tid
END,
the_year,
the_month,
BTID,
坐席工号,
坐席名称,
坐席团队,
签单日期,
科室N,
经办人N
UNION
SELECT 签单日期,
the_year,
the_month,
bm,
bmdm,
坐席工号,
坐席名称,
坐席团队,
科室N,
经办人N,
CASE
WHEN btid = tid THEN
''
ELSE
btid
END btid,
to_number('0') 客户数,
to_number('0') 保单数,
to_number('0') 保费
FROM (SELECT DISTINCT *
FROM aa) aa),
DD AS
(SELECT *
FROM DD2
WHERE TID IS NOT NULL)
--select * from dd
,
bb AS
(SELECT DISTINCT q.policy_no bdh,
q.endorsement_no pdh,
qna.t_cre tid,
to_number(to_char(q.signature_date,
'yyyy')) || '年' nf,
(to_char(q.signature_date,
'mm')) mm_f,
to_char(q.signature_date,
'dd') || '日' dd,
q.signature_date sj,
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) bf,
z.department_name bm
FROM idst0.nonauto_agreement_request_t q
LEFT JOIN idst0.nonauto_agreement_t e
ON e.policy_no = q.policy_no
LEFT JOIN idst0.nonauto_premium_t pt
ON pt.endorsement_no = q.endorsement_no
AND pt.policy_no = q.policy_no
LEFT JOIN idst0.reinsurance_t r
ON r.reinsurance_policy_no = e.policy_no
LEFT JOIN idst0.exrate_month_t c
ON pt.currency_code = c.bzh
AND to_char(q.signature_date,
'YYYY') = c.theyear
AND to_char(q.signature_date,
'fmmm') = c.themonth
LEFT JOIN idst0.rydm_t x
ON x.staff_code = e.operator_code
LEFT JOIN idst0.ks_t y
ON y.section_office_code = x.section_office_code
LEFT JOIN idst0.bm_t z
ON z.department_code = x.department_code
LEFT JOIN ywglxt.q_nonauto_agreement_t qna
ON qna.policy_no = q.policy_no
LEFT JOIN datacenter.dc_yangg_gkxzh gk
ON gk.product_code = e.product_code --分散型险种
--left join datacenter.dc_yangg_zbxzh zb on zb.product_code = e.product_code --政保险种
LEFT JOIN dd
ON dd.tid = qna.t_cre
WHERE qna.tflag = '0'
AND (CASE
WHEN q.endorsement_no != '无' AND
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) != 0 THEN
'是'
END) IS NULL
--and q.endorsement_no = '无'
AND e.policy_status = '1'
AND gk.product_code IS NOT NULL
AND (e.product_code LIKE '2%' OR e.product_code LIKE '1106%' --意健 --责任
OR e.product_code LIKE '1107%' OR e.product_code LIKE '1108%' OR e.product_code LIKE '1307%' OR e.product_code LIKE '1304A400%' --家财
)
--and e.product_code not in ('22KC9800')
AND q.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND q.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND e.planned_end_date - e.inception_date >= 90
AND dd.tid IS NOT NULL
--车险个人客户)
)
--SELECT * FROM BB
,
cc AS
(SELECT mm_f,
tid 融合证件,
COUNT(DISTINCT bdh) 融合保数,
SUM(bf) 融合保费
FROM bb
GROUP BY tid,
mm_f),
ff AS
(SELECT dd.*,
cc.*
FROM dd
LEFT JOIN cc
ON cc.融合证件 = dd.tid
AND cc.mm_f = dd.the_month) --OR cc.融合证件 = dd.btid
--select * from ff
SELECT to_date(签单日期,
'yyyy-mm-dd') 签单日期,
the_year 年份,
the_month 月份,
bm 部门,
bmdm 部门代码,
科室N,
经办人N,
坐席工号,
坐席名称,
坐席团队,
nvl(SUM(保费),
0) 车险个人客户保费,
nvl(SUM(融合保费),
0) 车非融合保费
FROM ff
WHERE to_date(ff.签单日期,
'yyyy-mm-dd') >= a_start_date
AND to_date(ff.签单日期,
'yyyy-mm-dd') < a_end_date
AND bm IN ('续保业务部',
'湖里支公司')
GROUP BY 签单日期,
the_year,
the_month,
bm,
bmdm,
坐席工号,
坐席名称,
坐席团队,
科室N,
经办人N
ORDER BY 部门,
坐席名称;
COMMIT;
END;
/**********************************************************************/
PROCEDURE 续保基本数据 IS
BEGIN
--清理旧数据
desktop_archievement_admin.clean_mensual_renewal;
--生成新数据
INSERT INTO desktop_archievement_admin.坐席续保统计
WITH cc AS
(SELECT pt.policy_no policy_no,
SUM(pt.premium_amount) premium_amount,
SUM(pt.tax_amount) tax_amount
FROM idst0.auto_premium_t pt
GROUP BY pt.policy_no)
,
bb AS
(SELECT t.policy_no 保单号,
(CASE
WHEN e.product_code LIKE '1102%' AND
e.product_code NOT LIKE '110224%' AND
e.product_code != '11026000' THEN
'机动车险保险'
WHEN e.product_code LIKE '1101%' OR
e.product_code LIKE '1301%' OR
e.product_code LIKE '11110000%' THEN
'财产险'
WHEN e.product_code LIKE '1107%' OR
e.product_code LIKE '1307%' OR
e.product_code LIKE '1304A400%' THEN
'责任险'
WHEN e.product_code LIKE '1106%' OR
e.product_code LIKE '51015700' THEN
'家财险'
WHEN (e.product_code LIKE '1104%' OR e.product_code LIKE '1204%' OR e.product_code LIKE '13040000%') AND
e.product_code NOT LIKE '120404%' THEN
'货运险'
WHEN e.product_code LIKE '1203%' OR
e.product_code LIKE '1103%' OR
e.product_code LIKE '120404%' THEN
'船舶险'
WHEN e.product_code LIKE '1305%' THEN
'工程险'
WHEN e.product_code LIKE '111%' AND
e.product_code NOT LIKE '11110000%' THEN
'农业险'
WHEN e.product_code LIKE '1109%' OR
e.product_code LIKE '1309%' THEN
'保证保险'
WHEN e.product_code LIKE '1312%' THEN
'特殊风险'
WHEN e.product_code LIKE '1308%' THEN
'信用险'
WHEN e.product_code LIKE '23%' THEN
'意外险'
WHEN e.product_code LIKE '22%' THEN
'健康险'
WHEN e.product_code LIKE '110224%' OR
e.product_code = '11026000' THEN
'交强险'
ELSE
'未分配'
END) AS 险种大类
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no)
,
aa1 AS
(SELECT a.policy_no 旧保单,
a.selling_shop_code 车商代码,
a.planned_end_date 到期时间,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'个车专业化销售一科'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'个车专业化销售一科'
ELSE
nvl(dt.科室名称,
z.section_office_name)
END 科室,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.部门,
y.department_name) NOT LIKE '湖里支公司' andcd.memo LIKE '%深圳%' OR
cd.memo LIKE '%地面%' and v.vehicle_brand IN ('特斯拉',
'蔚来',
'理想',
'小鹏',
'极氪',
'极狐',
'AITO',
'ARCFOX极狐',
'特斯拉(中国)',
'特斯拉(中国)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'新能源车事业发展中心厦门分中心'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END) = '湖里支公司' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
WHEN cd.memo LIKE '%地面%' OR
cd.memo LIKE '%深圳%' THEN
'续保业务部'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'同安支公司'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
END) 责任部门,
qa.USAGE_XM 使用性质,
decode(qa.bd_type,
'1',
'单交强',
'2',
'单商业',
'3',
'交商共保',
'其它') 保单类型,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
'是'
END) 高预赔,
x.staff_name AS 经办,
bb.险种大类,
cc.signature_date 新保单签发时间,
(SELECT hmd.管控类型
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin) 管控类型
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb.保单号 = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = '无'
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.险种大类
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb.保单号 = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = '无'
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = '无'
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc.险种大类 = bb.险种大类)
AND cc.inception_date > a.planned_end_date - 30 --时间限制放宽为30天
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt.保单号 = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')),
aa2 AS
(SELECT a.policy_no 旧保单,
a.selling_shop_code 车商代码,
a.planned_end_date 到期时间,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'个车专业化销售一科'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'个车专业化销售一科'
ELSE
nvl(dt.科室名称,
z.section_office_name)
END 科室,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.部门,
y.department_name) NOT LIKE '湖里支公司' andcd.memo LIKE '%深圳%' OR
cd.memo LIKE '%地面%' and v.vehicle_brand IN ('特斯拉',
'蔚来',
'理想',
'小鹏',
'极氪',
'极狐',
'AITO',
'ARCFOX极狐',
'特斯拉(中国)',
'特斯拉(中国)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'新能源车事业发展中心厦门分中心'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END) = '湖里支公司' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
WHEN cd.memo LIKE '%地面%' OR
cd.memo LIKE '%深圳%' THEN
'续保业务部'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'同安支公司'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
END) 责任部门,
qa.USAGE_XM 使用性质,
decode(qa.bd_type,
'1',
'单交强',
'2',
'单商业',
'3',
'交商共保',
'其它') 保单类型,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
'是'
END) 高预赔,
x.staff_name AS 经办,
bb.险种大类,
cc.signature_date 新保单签发时间,
(SELECT hmd.管控类型
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin) 管控类型
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb.保单号 = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = '无'
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.险种大类
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb.保单号 = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = '无'
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = '无'
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc.险种大类 = bb.险种大类)
AND cc.inception_date > a.planned_end_date - 30 --时间限制放宽为30天
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt.保单号 = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2024-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss'))
,
aa3 AS
(SELECT DISTINCT *
FROM aa1
UNION ALL (SELECT DISTINCT *
FROM aa2))
,
AA AS
(SELECT AA3.*,
nvlzx.workerno,
et.telpartnercode) 坐席工号,
(CASE WHEN nvlzx.workerno,
et.telpartnercode) =
'DX001' AND aa3.经办 LIKE
'%建发凯迪%' THEN
'林伟华' WHEN nvlzx.workerno,
et.telpartnercode) =
'DX001' AND aa3.经办 NOT LIKE
'%建发凯迪%' THEN
'其他' ELSE to_char
(ys.坐席姓名) END) 坐席名称,
YS.团队 坐席团队 FROM AA3 LEFT JOIN idst0.auto_agreement_extend_t et ON et.policy_no = AA3.旧保单 LEFT JOIN idst0.t_sell_policy_autobase_t zx ON zx.policy_no = AA3.旧保单 LEFT JOIN dc_YZH_ZXYS YS ON YS.坐席工号 = nvlzx.workerno,
et.telpartnercode))
,
yxb AS
(
---已续保
SELECT aa.责任部门 部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号,
--(case when a.标识='非首续'and A.责任部门='续保业务部' then '续保业务部' else A.部门 end) 部门,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END) 已续保累计
FROM aa
WHERE aa.使用性质 IN ('家庭自用车',
'企业客车')
AND aa.高预赔 IS NULL
AND aa.管控类型 IS NULL
AND aa.保单类型 IN '交商共保', '单交强'
AND aa.到期时间 >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.到期时间 < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND aa.新保单签发时间 <= to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.责任部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号)
--个车续保率=已续数-累计/到期数-累计
,
dqs AS
(
---到期数
SELECT aa.责任部门 部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END) 到期数
FROM aa
WHERE aa.使用性质 IN ('家庭自用车',
'企业客车')
AND aa.高预赔 IS NULL
AND aa.管控类型 IS NULL
AND aa.保单类型 IN '交商共保', '单交强'
AND aa.到期时间 >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.到期时间 < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.责任部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号)
SELECT dqs.部门,
dqs.科室,
dqs.经办,
dqs.坐席团队,
dqs.坐席名称,
dqs.坐席工号,
yxb.已续保累计,
dqs.到期数
FROM yxb,
dqs --,sdqs,syxs,cyxs,cdqs
WHERE dqs.部门 = yxb.部门
AND dqs.经办 = yxb.经办
AND dqs.科室 = yxb.科室
AND dqs.坐席名称 = yxb.坐席名称
AND dqs.坐席工号 = yxb.坐席工号;
COMMIT;
END;
PROCEDURE chefei_daily_job IS
BEGIN
车非基础数据(SYSDATE - 3,
SYSDATE);
END;
PROCEDURE xubao_daily_job IS
BEGIN
续保基本数据;
END;
BEGIN
NULL;
END telsale_pkg;
/

View File

@ -1,99 +0,0 @@
CREATE OR REPLACE PACKAGE telsaler_reward_pkg IS
-- Author : WANGWEI-202
-- Created : 2023/9/13 10:05:43
-- Purpose : 坐席奖励相关的包
PROCEDURE add_telsaler_reward
(
a_reward_index VARCHAR2,
a_telsaler_name VARCHAR2
);
PROCEDURE update_telsaler_reward
(
a_rec_id INTEGER,
a_telsaler_name VARCHAR2,
a_reward_index VARCHAR2
);
PROCEDURE delete_telsaler_reward(a_rec_id INTEGER);
END telsaler_reward_pkg;
/
CREATE OR REPLACE PACKAGE BODY telsaler_reward_pkg IS
PROCEDURE add_telsaler_reward
(
a_reward_index VARCHAR2,
a_telsaler_name VARCHAR2
) IS
BEGIN
BEGIN
INSERT INTO telsaler_reward
(reward_index,
telsaler_name)
VALUES
(a_reward_index,
a_telsaler_name);
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -00001
THEN
raise_application_error(-20001,
'值重复');
END IF;
END;
COMMIT;
END;
PROCEDURE update_telsaler_reward
(
a_rec_id INTEGER,
a_telsaler_name VARCHAR2,
a_reward_index VARCHAR2
) IS
BEGIN
/*MERGE INTO telsaler_reward r
USING (SELECT COUNT(*) COUNT
FROM telsaler_reward
WHERE rec_id = a_rec_id) a
ON (a.count > 0)
WHEN MATCHED THEN
UPDATE
SET r.reward_index = a_reward_index,
r.telsaler_name = a_telsaler_name
WHERE r.rec_id = a_rec_id
WHEN NOT MATCHED THEN
INSERT
(reward_index,
telsaler_name)
VALUES
(a_reward_index,
a_telsaler_name);*/
BEGIN
UPDATE telsaler_reward r
SET r.reward_index = a_reward_index,
r.telsaler_name = a_telsaler_name
WHERE r.rec_id = a_rec_id;
EXCEPTION
WHEN no_data_found THEN
raise_application_error(-20002,
'无此记录!');
END;
COMMIT;
END;
PROCEDURE delete_telsaler_reward(a_rec_id INTEGER) IS
BEGIN
DELETE telsaler_reward
WHERE rec_id = a_rec_id;
COMMIT;
END;
BEGIN
NULL;
END telsaler_reward_pkg;
/

View File

@ -1,18 +0,0 @@
-- Create table
create table TELE_SALER_TEAM
(
team VARCHAR2(30 CHAR),
team_code VARCHAR2(20),
department_code VARCHAR2(20)
)
tablespace DESKTOP_ARCHIEVEMENT;
-- Add comments to the table
comment on table TELE_SALER_TEAM
is '×øϯÍŶӱí';
-- Add comments to the columns
comment on column TELE_SALER_TEAM.team
is 'ÍŶÓÃû³Æ';
comment on column TELE_SALER_TEAM.team_code
is 'ÍŶӴúÂë';
comment on column TELE_SALER_TEAM.department_code
is '²¿ÃÅ´úÂë';

View File

@ -1,6 +0,0 @@
--drop table reward_projects
create table reward_projects
(
reward_index integer,
reward_name varchar2(100 char)
);

View File

@ -1,104 +0,0 @@
SELECT *
FROM reward_gainers
FOR UPDATE;
SELECT b.reward_name,
a.*
FROM reward_gainers a,
reward_projects b
WHERE a.reward_index = b.reward_index;
--
SELECT DISTINCT s.saler_code,
s.saler_name,
t.team_code,
t.team,
bm.department_code,
bm.department_name
FROM tele_saler s,
tele_saler_team t,
idst0.bm_t bm
WHERE s.team_code = t.team_code
AND t.department_code = bm.department_code
AND s.saler_code = '61136';
SELECT *
FROM tele_saler_team t
WHERE t.team_code = '107077'
SELECT *
FROM
ORDER BY ,
;
SELECT ,
SUM() ,
SUM() ,
round((SUM() / SUM()) * 100,
0) || '%'
FROM
GROUP BY ;
--
SELECT ,
,
,
SUM(),
SUM(),
round(SUM() / SUM() * 100,
2)
FROM
GROUP BY ,
,
HAVING = '10月'
ORDER BY ,
DESC;
SELECT ,
round(SUM() / SUM() * 100,
2)
FROM
WHERE = 'QDI'
AND = '10'
AND = '2023'
GROUP BY
ORDER BY DESC;
--
SELECT ,
round(nvl(SUM() / SUM() * 100,
0),
2)
FROM xb
WHERE xb. = '续保业务部'
GROUP BY
ORDER BY DESC;
-------------------------------------
SELECT zx.saler_name,
bm.department_name
FROM tele_saler zx,
tele_saler_team team,
idst0.bm_t bm
WHERE zx.saler_name = '张楚沂'
AND zx.team_code = team.team_code
AND team.department_code = bm.department_code;
----------------------------------------
/*
truncate table BI机构渗透率跟踪表;
*/
SELECT *
FROM BI电销坐席车非渗透率跟踪表 t
WHERE t. = '张楚沂';
SELECT *
FROM BI电销坐席续保率跟踪表
WHERE = '张楚沂';
SELECT *
FROM BI机构渗透率跟踪表;
SELECT *
FROM BI机构当月个车续保率跟踪表;

View File

@ -1,14 +0,0 @@
drop table BI机构当月个车续保率跟踪表;
create table BI机构当月个车续保率跟踪表
(
"责任部门" varchar2(100),
"机构目标值1(%)" number,
"到期数-全月" integer,
"序时到期数占比(%)" number,
"个车续保率(序时)(%)" number,
"个车续保率(全月)(%)" number,
"环比昨日(%)" number,
"环比上月(%)" number,
"平均提前签单天数" integer,
"环比" number
);

View File

@ -1,15 +0,0 @@
drop table BI电销坐席续保率跟踪表;
create table BI电销坐席续保率跟踪表
(
"责任部门" varchar2(100),
"责任人" varchar2(30),
"机构目标值1(%)" number default 0,
"到期数-全月" integer default 0,
"序时到期数占比(%)" number default 0,
"个车续保率(序时)(%)" number default 0,
"个车续保率(全月)(%)" number default 0,
"环比昨日(%)" number default 0,
"环比上月(%)" number default 0,
"平均提前签单天数" integer default 0,
"环比" number
)

View File

@ -1,14 +0,0 @@
--drop table BI坐席续保率统计表;
create table BI坐席续保率统计表
(
summary_date date default sysdate not null,
varchar2(20) not null,
NUMBER default 0 not null,
NUMBER default 0 not null,
NUMBER default 0 not null,
NUMBER default 0 not null,
NUMBER default 0 not null,
NUMBER default 0 not null,
NUMBER default 0 not null
);
comment on table BI坐席续保率统计表 is '用于存放BI导出电销坐席全月续保率数据。';

View File

@ -1,14 +0,0 @@
create table BI电销坐席车非渗透率跟踪表
(
"部门" varchar2(100),
"经办" varchar2(100) not null,
"车险保费(万)" number default 0,
"车险保费占比" number default 0,
"非车保费(万)" number default 0,
"当月保费渗透率" number default 0,
"保费渗透率环比上月" number default 0,
"当月客户渗透率" number default 0,
"客户渗透率环比上月" number default 0,
"当月车非客均保费" number default 0,
"客均保费环比上月" number default 0
);

View File

@ -1,17 +0,0 @@
drop table BI部门渗透率续保率统计表;
create table BI部门渗透率续保率统计表
(
varchar2(100) not null,
"目标值-机构" number default 0 not null,
number default 0 not null,
"车险保费" number default 0 not null,
number default 0 not null,
"非车保费" number default 0 not null,
number default 0 not null,
number default 0 not null,
number default 0 not null,
number default 0 not null,
number default 0 not null,
number default 0 not null
);
comment on table BI部门渗透率续保率统计表 is '存放BI系统导出部门渗透率续保率';

View File

@ -1,17 +0,0 @@
drop table telsaler_reward;
create table telsaler_reward
(
rec_id integer not null,
reward_index integer not null,
telsaler_name varchar2(100) not null,
telsaler_code varchar2(20)
);
CREATE OR REPLACE TRIGGER telsaler_reward_id
BEFORE INSERT ON telsaler_reward
FOR EACH ROW
BEGIN
SELECT desktop_archievement_seq.nextval
INTO :new.rec_id
FROM dual;
END;

View File

@ -1,28 +0,0 @@
drop table ;
create table
(
DATE not null,
VARCHAR2(10) not null,
VARCHAR2(100) not null,
varchar2(10) not null,
n VARCHAR2(100) not null,
n VARCHAR2(100),
VARCHAR2(20),
VARCHAR2(30),
VARCHAR2(100),
NUMBER(16,2),
NUMBER(16,2)
)
tablespace DESKTOP_ARCHIEVEMENT
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select, insert, delete on to DATACENTER;

View File

@ -1,18 +0,0 @@
drop table _T;
create global temporary table _T
(
DATE not null,
VARCHAR2(10) not null,
VARCHAR2(100) not null,
varchar2(100) not null,
n VARCHAR2(100) not null,
n VARCHAR2(100),
VARCHAR2(20),
VARCHAR2(30),
VARCHAR2(100),
NUMBER(16,2),
NUMBER(16,2)
)
on commit preserve rows;
-- Grant/Revoke object privileges
grant select, insert, delete, alter on _T to DATACENTER;

View File

@ -1,183 +0,0 @@
with cc as(
select pt.policy_no policy_no,sum(pt.premium_amount )premium_amount,sum(pt.tax_amount) tax_amount from idst0.auto_premium_t pt group by pt.policy_no
)
,bb as (select
t.policy_no ,
(case
when e.product_code like '1102%' and e.product_code not like '110224%' and e.product_code !='11026000'then '机动车险保险'
when e.product_code like '1101%' or e.product_code like '1301%' or e.product_code like '11110000%' then '财产险'
when e.product_code like '1107%' or e.product_code like '1307%' or e.product_code like '1304A400%' then '责任险'
when e.product_code like '1106%' or e.product_code like '51015700' then '家财险'
when (e.product_code like '1104%' or e.product_code like '1204%' or e.product_code like '13040000%') and e.product_code not like '120404%' then '货运险'
when e.product_code like '1203%' or e.product_code like '1103%' or e.product_code like '120404%' then '船舶险'
when e.product_code like '1305%' then '工程险'
when e.product_code like '111%' and e.product_code not like '11110000%' then '农业险'
when e.product_code like '1109%' or e.product_code like '1309%' then '保证保险'
when e.product_code like '1312%' then '特殊风险'
when e.product_code like '1308%' then '信用险'
when e.product_code like '23%' then '意外险'
when e.product_code like '22%' then '健康险'
when e.product_code like '110224%'or e.product_code='11026000' then '交强险'
else '未分配' end) as
from
idst0.auto_agreement_request_t t
left join idst0.auto_agreement_t e on e.policy_no = t.policy_no
)
, aa1 as (select
a.policy_no
,a.selling_shop_code
,a.planned_end_date
,case when to_number(to_char(a.planned_end_date,'yyyy'))='2022' and a.selling_shop_code||a.tel_sale_4s_code='00GK' then '个车专业化销售一科'
when a.planned_end_date > to_date('2023-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and (a.selling_shop_code||a.tel_sale_4s_code IN ('00EA','00F1','00G9')) then '个车专业化销售一科'
else nvl(dt.,z.section_office_name) end
,(case when to_number(to_char(a.planned_end_date,'yyyy'))='2023' and nvl(dt.,y.department_name) not like '湖里支公司' andcd.memo like '%深圳%' or cd.memo like '%地面%' and v.vehicle_brand in ('特斯拉','蔚来','理想','小鹏','极氪','极狐','AITO','ARCFOX极狐', '特斯拉(中国)', '特斯拉(中国)') AND v.vin not in ('LJ1E6A2UXL7744108','LW433B10XL1001411','LJ1E6A3U2L7742089','L1NSPGHB0MA002652') THEN '新能源车事业发展中心厦门分中心'
when (case when to_number(to_char(a.planned_end_date,'yyyy'))='2022' and a.selling_shop_code||a.tel_sale_4s_code='00GK' then '集美支公司' else nvl(dt.,y.department_name) end)='湖里支公司'
then (case when to_number(to_char(a.planned_end_date,'yyyy'))='2022' and a.selling_shop_code||a.tel_sale_4s_code='00GK' then '集美支公司' else nvl(dt.,y.department_name) end )
when cd.memo like '%地面%'or cd.memo like '%深圳%' then '续保业务部'
when a.planned_end_date > to_date('2023-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and (a.selling_shop_code||a.tel_sale_4s_code IN ('00EA','00F1','00G9')) then '同安支公司'
else (case when to_number(to_char(a.planned_end_date,'yyyy'))='2022' and a.selling_shop_code||a.tel_sale_4s_code='00GK' then '集美支公司' else nvl(dt.,y.department_name) end) end)
,qa.USAGE_XM 使
,decode(qa.bd_type,'1','单交强','2','单商业','3','交商共保','其它')
,(case when (qa.bd_type='1' and nt.ecompensation_rate>1) then '' end )
,x.staff_name as
,bb.
,cc.signature_date
,(select hmd. from (select distinct * from dc_lsj_xb_hmd) hmd where hmd.vin=v.vin)
from
idst0.auto_agreement_t a
left join bb on bb.=a.policy_no
left join ywglxt.w_dxbd_i i on a.policy_no = i.bdh
left join idst0.motorised_vehicle_t v on a.policy_no=v.policy_no
left join ywglxt.q_auto_agreement_t qa on qa.policy_no=a.policy_no
left join idst0.auto_new_product_info_t nt on nt.policy_no=a.policy_no and nt.endorsement_no=''
left join idst0.rydm_t x on x.staff_code = nvl(upper(i.zhjywy),a.operator_code)
left join idst0.bm_t y on x.department_code = y.department_code
left join idst0.ks_t z on x.section_office_code = z.section_office_code
left join cc pt on pt.policy_no=a.policy_no
left join
(select distinct aa.policy_no,
vv.vin,aa.inception_date,t.signature_date,(pt.premium_amount - nvl(pt.tax_amount,0)) qdbf,
(case when aa.inception_date - aa.issue_date >= '30' then vv.vin end) if30 ,bb.
from idst0.auto_agreement_t aa
left join bb on bb.=aa.policy_no
left join idst0.motorised_vehicle_t vv on vv.policy_no = aa.policy_no
left join idst0.auto_agreement_request_t t on t.policy_no = aa.policy_no and t.endorsement_no = ''
left join idst0.auto_premium_t pt on pt.policy_no = aa.policy_no and pt.endorsement_no = ''
where aa.policy_no=vv.policy_no and aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
and aa.branch_company_code = '3080100'and (pt.premium_amount - nvl(pt.tax_amount,0))>100
and aa.inception_date >= to_date('2022-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and aa.inception_date < to_date('2023-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and aa.branch_company_code = vv.branch_company_code
) cc on (cc.vin = v.vin and cc.=bb.) and cc.inception_date > a.planned_end_date-30 --30
left join dc_yangg_cx_dianxiaodoudi cd on cd.policy_no = a.policy_no
left join dc_tb_jc_c_tag dt on dt.=a.policy_no
left join idst0.auto_agreement_t aa on aa.policy_no= cc.policy_no
left join cc pt1 on pt1.policy_no=aa.policy_no
where a.policy_status = '1' and a.planned_end_date-a.inception_date>270 and
a.planned_end_date >= to_date('2023-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and a.planned_end_date < to_date('2023-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss'))
, aa2 as (select
a.policy_no
,a.selling_shop_code
,a.planned_end_date
,case when to_number(to_char(a.planned_end_date,'yyyy'))='2022' and a.selling_shop_code||a.tel_sale_4s_code='00GK' then '个车专业化销售一科'
when a.planned_end_date > to_date('2023-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and (a.selling_shop_code||a.tel_sale_4s_code IN ('00EA','00F1','00G9')) then '个车专业化销售一科'
else nvl(dt.,z.section_office_name) end
,(case when to_number(to_char(a.planned_end_date,'yyyy'))='2023' and nvl(dt.,y.department_name) not like '湖里支公司' andcd.memo like '%深圳%' or cd.memo like '%地面%' and v.vehicle_brand in ('特斯拉','蔚来','理想','小鹏','极氪','极狐','AITO','ARCFOX极狐', '特斯拉(中国)', '特斯拉(中国)') AND v.vin not in ('LJ1E6A2UXL7744108','LW433B10XL1001411','LJ1E6A3U2L7742089','L1NSPGHB0MA002652') THEN '新能源车事业发展中心厦门分中心'
when (case when to_number(to_char(a.planned_end_date,'yyyy'))='2022' and a.selling_shop_code||a.tel_sale_4s_code='00GK' then '集美支公司' else nvl(dt.,y.department_name) end)='湖里支公司'
then (case when to_number(to_char(a.planned_end_date,'yyyy'))='2022' and a.selling_shop_code||a.tel_sale_4s_code='00GK' then '集美支公司' else nvl(dt.,y.department_name) end )
when cd.memo like '%地面%'or cd.memo like '%深圳%' then '续保业务部'
when a.planned_end_date > to_date('2023-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and (a.selling_shop_code||a.tel_sale_4s_code IN ('00EA','00F1','00G9')) then '同安支公司'
else (case when to_number(to_char(a.planned_end_date,'yyyy'))='2022' and a.selling_shop_code||a.tel_sale_4s_code='00GK' then '集美支公司' else nvl(dt.,y.department_name) end) end)
,qa.USAGE_XM 使
,decode(qa.bd_type,'1','单交强','2','单商业','3','交商共保','其它')
,(case when (qa.bd_type='1' and nt.ecompensation_rate>1) then '' end )
,x.staff_name as
,bb.
,cc.signature_date
,(select hmd. from (select distinct * from dc_lsj_xb_hmd) hmd where hmd.vin=v.vin)
from
idst0.auto_agreement_t a
left join bb on bb.=a.policy_no
left join ywglxt.w_dxbd_i i on a.policy_no = i.bdh
left join idst0.motorised_vehicle_t v on a.policy_no=v.policy_no
left join ywglxt.q_auto_agreement_t qa on qa.policy_no=a.policy_no
left join idst0.auto_new_product_info_t nt on nt.policy_no=a.policy_no and nt.endorsement_no=''
left join idst0.rydm_t x on x.staff_code = nvl(upper(i.zhjywy),a.operator_code)
left join idst0.bm_t y on x.department_code = y.department_code
left join idst0.ks_t z on x.section_office_code = z.section_office_code
left join cc pt on pt.policy_no=a.policy_no
left join
(select distinct aa.policy_no,
vv.vin,aa.inception_date,t.signature_date,(pt.premium_amount - nvl(pt.tax_amount,0)) qdbf,
(case when aa.inception_date - aa.issue_date >= '30' then vv.vin end) if30 ,bb.
from idst0.auto_agreement_t aa
left join bb on bb.=aa.policy_no
left join idst0.motorised_vehicle_t vv on vv.policy_no = aa.policy_no
left join idst0.auto_agreement_request_t t on t.policy_no = aa.policy_no and t.endorsement_no = ''
left join idst0.auto_premium_t pt on pt.policy_no = aa.policy_no and pt.endorsement_no = ''
where aa.policy_no=vv.policy_no and aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
and aa.branch_company_code = '3080100'and (pt.premium_amount - nvl(pt.tax_amount,0))>100
and aa.inception_date >= to_date('2022-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and aa.inception_date < to_date('2023-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and aa.branch_company_code = vv.branch_company_code
) cc on (cc.vin = v.vin and cc.=bb.) and cc.inception_date > a.planned_end_date-30 --30
left join dc_yangg_cx_dianxiaodoudi cd on cd.policy_no = a.policy_no
left join dc_tb_jc_c_tag dt on dt.=a.policy_no
left join idst0.auto_agreement_t aa on aa.policy_no= cc.policy_no
left join cc pt1 on pt1.policy_no=aa.policy_no
where a.policy_status = '1' and a.planned_end_date-a.inception_date>270 and
a.planned_end_date >= to_date('2023-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and a.planned_end_date < to_date('2024-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss'))
,aa3 as (select distinct * from aa1
union all
(select distinct * from aa2) )
,AA AS (SELECT AA3.*
,nvlzx.workerno,et.telpartnercode)
,(case when nvlzx.workerno,et.telpartnercode) = 'DX001' and aa3. like '%建发凯迪%' then '林伟华'
when nvlzx.workerno,et.telpartnercode) = 'DX001' and aa3. not like '%建发凯迪%' then '其他'
else to_char(ys.) END)
,YS.
FROM AA3
left join idst0.auto_agreement_extend_t et on et.policy_no = AA3.
left join idst0.t_sell_policy_autobase_t zx on zx.policy_no = AA3.
left join dc_YZH_ZXYS YS ON YS.= nvlzx.workerno,et.telpartnercode))
, yxb as(
---
select
aa.
,aa.,aa.,aa.,aa.,
--(case when a.='非首续'and A.='续保业务部' then '续保业务部' else A. end) ,
(case when count(1) is null then 0 else count(1) end)
from aa
where
aa.使 in ('家庭自用车','企业客车') and aa. is null and aa. is null and aa. in '交商共保','单交强'
and aa. >=to_date('2023-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND aa.<to_date(to_char(sysdate-1,'yyyy-mm-dd')||' 23:59:59','yyyy-mm-dd hh24:mi:ss')
AND aa.<=to_date(to_char(sysdate-1,'yyyy-mm-dd')||' 23:59:59','yyyy-mm-dd hh24:mi:ss')
group by aa.,aa.,aa.,aa.,aa.)
--=-/-
,dqs AS(
---
select
aa.
,aa.,aa.,aa.,aa.,
(case when count(1) is null then 0 else count(1) end)
from aa
where
aa.使 in ('家庭自用车','企业客车') and aa. is null and aa. is null and aa. in '交商共保','单交强'
and aa. >=to_date('2023-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND aa.<to_date(to_char(sysdate-1,'yyyy-mm-dd')||' 23:59:59','yyyy-mm-dd hh24:mi:ss')
group by aa.,aa.,aa.,aa.,aa.
)
select dqs.,dqs.,dqs.,dqs.,dqs.,yxb.,dqs.
from yxb,
dqs--,sdqs,syxs,cyxs,cdqs
where dqs.= yxb. AND dqs.= yxb. AND dqs.= yxb. AND dqs.= yxb.

View File

@ -1,512 +0,0 @@
--execute clean_mensual_renewal;
INSERT INTO desktop_archievement_admin.
WITH cc AS
(SELECT pt.policy_no policy_no,
SUM(pt.premium_amount) premium_amount,
SUM(pt.tax_amount) tax_amount
FROM idst0.auto_premium_t pt
GROUP BY pt.policy_no)
,
bb AS
(SELECT t.policy_no ,
(CASE
WHEN e.product_code LIKE '1102%' AND
e.product_code NOT LIKE '110224%' AND
e.product_code != '11026000' THEN
'机动车险保险'
WHEN e.product_code LIKE '1101%' OR
e.product_code LIKE '1301%' OR
e.product_code LIKE '11110000%' THEN
'财产险'
WHEN e.product_code LIKE '1107%' OR
e.product_code LIKE '1307%' OR
e.product_code LIKE '1304A400%' THEN
'责任险'
WHEN e.product_code LIKE '1106%' OR
e.product_code LIKE '51015700' THEN
'家财险'
WHEN (e.product_code LIKE '1104%' OR e.product_code LIKE '1204%' OR e.product_code LIKE '13040000%') AND
e.product_code NOT LIKE '120404%' THEN
'货运险'
WHEN e.product_code LIKE '1203%' OR
e.product_code LIKE '1103%' OR
e.product_code LIKE '120404%' THEN
'船舶险'
WHEN e.product_code LIKE '1305%' THEN
'工程险'
WHEN e.product_code LIKE '111%' AND
e.product_code NOT LIKE '11110000%' THEN
'农业险'
WHEN e.product_code LIKE '1109%' OR
e.product_code LIKE '1309%' THEN
'保证保险'
WHEN e.product_code LIKE '1312%' THEN
'特殊风险'
WHEN e.product_code LIKE '1308%' THEN
'信用险'
WHEN e.product_code LIKE '23%' THEN
'意外险'
WHEN e.product_code LIKE '22%' THEN
'健康险'
WHEN e.product_code LIKE '110224%' OR
e.product_code = '11026000' THEN
'交强险'
ELSE
'未分配'
END) AS
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no)
,
aa1 AS
(SELECT a.policy_no ,
a.selling_shop_code ,
a.planned_end_date ,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'个车专业化销售一科'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'个车专业化销售一科'
ELSE
nvl(dt.,
z.section_office_name)
END ,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.,
y.department_name) NOT LIKE '湖里支公司' andcd.memo LIKE '%深圳%' OR
cd.memo LIKE '%地面%' and v.vehicle_brand IN ('特斯拉',
'蔚来',
'理想',
'小鹏',
'极氪',
'极狐',
'AITO',
'ARCFOX极狐',
'特斯拉(中国)',
'特斯拉(中国)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'新能源车事业发展中心厦门分中心'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.,
y.department_name)
END) = '湖里支公司' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.,
y.department_name)
END)
WHEN cd.memo LIKE '%地面%' OR
cd.memo LIKE '%深圳%' THEN
'续保业务部'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'同安支公司'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.,
y.department_name)
END)
END) ,
qa.USAGE_XM 使,
decode(qa.bd_type,
'1',
'单交强',
'2',
'单商业',
'3',
'交商共保',
'其它') ,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
''
END) ,
x.staff_name AS ,
bb.,
cc.signature_date ,
(SELECT hmd.
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin)
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb. = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = ''
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb. = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = ''
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = ''
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc. = bb.)
AND cc.inception_date > a.planned_end_date - 30 --30
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt. = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')),
aa2 AS
(SELECT a.policy_no ,
a.selling_shop_code ,
a.planned_end_date ,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'个车专业化销售一科'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'个车专业化销售一科'
ELSE
nvl(dt.,
z.section_office_name)
END ,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.,
y.department_name) NOT LIKE '湖里支公司' andcd.memo LIKE '%深圳%' OR
cd.memo LIKE '%地面%' and v.vehicle_brand IN ('特斯拉',
'蔚来',
'理想',
'小鹏',
'极氪',
'极狐',
'AITO',
'ARCFOX极狐',
'特斯拉(中国)',
'特斯拉(中国)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'新能源车事业发展中心厦门分中心'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.,
y.department_name)
END) = '湖里支公司' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.,
y.department_name)
END)
WHEN cd.memo LIKE '%地面%' OR
cd.memo LIKE '%深圳%' THEN
'续保业务部'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'同安支公司'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.,
y.department_name)
END)
END) ,
qa.USAGE_XM 使,
decode(qa.bd_type,
'1',
'单交强',
'2',
'单商业',
'3',
'交商共保',
'其它') ,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
''
END) ,
x.staff_name AS ,
bb.,
cc.signature_date ,
(SELECT hmd.
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin)
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb. = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = ''
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb. = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = ''
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = ''
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc. = bb.)
AND cc.inception_date > a.planned_end_date - 30 --30
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt. = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2024-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss'))
,
aa3 AS
(SELECT DISTINCT *
FROM aa1
UNION ALL (SELECT DISTINCT *
FROM aa2))
,
AA AS
(SELECT AA3.*,
nvlzx.workerno,
et.telpartnercode) ,
(CASE WHEN nvlzx.workerno,
et.telpartnercode) =
'DX001' AND aa3. LIKE
'%建发凯迪%' THEN
'林伟华' WHEN nvlzx.workerno,
et.telpartnercode) =
'DX001' AND aa3. NOT LIKE
'%建发凯迪%' THEN
'其他' ELSE to_char
(ys.) END) ,
YS. FROM AA3 LEFT JOIN idst0.auto_agreement_extend_t et ON et.policy_no = AA3. LEFT JOIN idst0.t_sell_policy_autobase_t zx ON zx.policy_no = AA3. LEFT JOIN dc_YZH_ZXYS YS ON YS. = nvlzx.workerno,
et.telpartnercode))
,
yxb AS
(
---
SELECT aa. ,
aa.,
aa.,
aa.,
aa.,
aa.,
--(case when a.='非首续'and A.='续保业务部' then '续保业务部' else A. end) ,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END)
FROM aa
WHERE aa.使 IN ('家庭自用车',
'企业客车')
AND aa. IS NULL
AND aa. IS NULL
AND aa. IN '交商共保', '单交强'
AND aa. >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa. < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND aa. <= to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.,
aa.,
aa.,
aa.,
aa.,
aa.)
--=-/-
,
dqs AS
(
---
SELECT aa. ,
aa.,
aa.,
aa.,
aa.,
aa.,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END)
FROM aa
WHERE aa.使 IN ('家庭自用车',
'企业客车')
AND aa. IS NULL
AND aa. IS NULL
AND aa. IN '交商共保', '单交强'
AND aa. >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa. < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.,
aa.,
aa.,
aa.,
aa.,
aa.)
SELECT dqs.,
dqs.,
dqs.,
dqs.,
dqs.,
dqs.,
yxb.,
dqs.
FROM yxb,
dqs --,sdqs,syxs,cyxs,cdqs
WHERE dqs. = yxb.
AND dqs. = yxb.
AND dqs. = yxb.
AND dqs. = yxb.
AND dqs. = yxb.;
COMMIT;

View File

@ -1,4 +0,0 @@
SELECT 'grant select on datacenter.' || table_name || ' to public;'
FROM dba_tables t
WHERE t.owner = 'DATACENTER';

View File

@ -1,21 +0,0 @@
-- drop table REWARD_GAINERS
create table REWARD_GAINERS
(
award_date VARCHAR2(20),
reward_index INTEGER,
gainer_name VARCHAR2(100),
gainer_code VARCHAR2(100)
)
tablespace DESKTOP_ARCHIEVEMENT;
-- Add comments to the table
comment on table REWARD_GAINERS
is '获奖人员表';
-- Add comments to the columns
comment on column REWARD_GAINERS.award_date
is '获奖日期';
comment on column REWARD_GAINERS.reward_index
is '奖项索引';
comment on column REWARD_GAINERS.gainer_name
is '获奖者名称';
comment on column REWARD_GAINERS.gainer_code
is '获奖者工号';

View File

@ -1,310 +0,0 @@
--INSERT INTO desktop_archievement_admin.
WITH aa AS
(SELECT to_char(t.signature_date,
'yyyy-mm-dd') ,
(to_char(T.signature_date,
'yyyy')) the_year,
(to_char(T.signature_date,
'mm')) the_month,
t.policy_no bdh,
t.endorsement_no pdh,
qt.t_cre tid,
QT.B_CRE BTID, -----
e.inception_date qbsj,
e.planned_end_date zzsj,
pt.premium_amount - nvl(pt.tax_amount,
0) bf
--,qt.qdbf - nvl(qt.qdbf_tax_amount,0) bf
,
nt.ecompensation_rate * (pt.premium_amount - nvl(pt.tax_amount,
0)) fxbf,
z.department_name bm,
z.department_code bmdm,
CASE
WHEN (et.telpartnercode LIKE '%HC%' OR zx.workerno IN (SELECT code
FROM datacenter.dc_lsj_zx_hc)) THEN
'海沧丰骏'
ELSE
''
END ,
nvl(zx.workerno,
et.telpartnercode) ,
(CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%建发凯迪%' THEN
'林伟华'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%建发凯迪%' THEN
'其他'
ELSE
to_char(ys.)
END) ,
YS. ,
nvl(YS.,
y.section_office_name) N,
nvl((CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%建发凯迪%' THEN
'林伟华'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%建发凯迪%' THEN
'其他'
ELSE
to_char(ys.)
END),
xx.staff_name) N
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no
LEFT JOIN idst0.motorised_vehicle_t v
ON v.policy_no = e.policy_no
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = t.policy_no
AND pt.endorsement_no = t.endorsement_no
LEFT JOIN ywglxt.w_dxbd_i i
ON e.policy_no = i.bdh
LEFT JOIN idst0.rydm_t xx
ON xx.staff_code = nvl(i.zhjywy,
e.operator_code)
LEFT JOIN idst0.ks_t y
ON y.section_office_code = nvl(xx.section_office_code,
e.section_office_code)
LEFT JOIN idst0.bm_t z
ON z.department_code = nvl(xx.department_code,
e.department_code)
--left join datacenter.dc_cx_csteam ct on ct.jbrcode = xx.staff_code
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = t.policy_no
AND nt.endorsement_no = t.endorsement_no
--left join ywglxt.q_auto_agreement_extend_t qe on qe.policy_no = e.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qt
ON qt.policy_no = e.policy_no
LEFT JOIN datacenter.dc_yangg_qdcode qd
ON qd.code = e.selling_channel_type
LEFT JOIN datacenter.dc_tb_jc_c_tag cl
ON cl. = e.policy_no
LEFT JOIN datacenter.dc_yangg_basecode_teams fg
ON fg.bm = z.department_name
AND fg.ks = y.section_office_name
--left join idst0.t_sell_policy_autobase_t zx on zx.policy_no=e.policy_no
--left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
LEFT JOIN idst0.auto_agreement_extend_t et
ON et.policy_no = e.policy_no
LEFT JOIN idst0.t_sell_policy_autobase_t zx
ON zx.policy_no = e.policy_no
LEFT JOIN datacenter.dc_YZH_ZXYS YS
ON YS. = nvl(zx.workerno,
et.telpartnercode)
--left join v_lsj_dimian dm on dm.vin=v.vin and e.selling_channel_type='25' and dm.MEMO like'%地面续保%'
--left join datacenter.dc_lsj_zx_team zt on zt.name=coalesce(zc.name,zc1.name,bc.name,dm.JBRMC)
WHERE t.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND t.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
--and t.endorsement_no = ''
AND e.policy_status = '1' --
AND qt.tflag = '0' --
AND qt.usage_xm = '家庭自用车'
--
--and e.policy_no in ('AXIMC90Y1419B038594J','AXIMC90CTP19B039593R','AXIMC04CTP19B013473X')
AND e.planned_end_date - e.inception_date >= 360
--
)
-----
,
dd2 AS
(SELECT ,
the_year,
the_month,
bm,
bmdm,
,
,
,
N,
N,
CASE
WHEN pdh = '' THEN
tid
END tid,
to_number('1') ,
COUNT(DISTINCT CASE
WHEN pdh = '' THEN
bdh
END) ,
SUM(bf)
FROM (SELECT DISTINCT *
FROM aa) aa
GROUP BY bm,
bmdm,
CASE
WHEN pdh = '' THEN
tid
END,
the_year,
the_month,
BTID,
,
,
,
,
N,
N
UNION
SELECT ,
the_year,
the_month,
bm,
bmdm,
,
,
,
N,
N,
CASE
WHEN btid = tid THEN
''
ELSE
btid
END btid,
to_number('0') ,
to_number('0') ,
to_number('0')
FROM (SELECT DISTINCT *
FROM aa) aa),
DD AS
(SELECT *
FROM DD2
WHERE TID IS NOT NULL)
--select * from dd
,
bb AS
(SELECT DISTINCT q.policy_no bdh,
q.endorsement_no pdh,
qna.t_cre tid,
to_number(to_char(q.signature_date,
'yyyy')) || '' nf,
(to_char(q.signature_date,
'mm')) mm_f,
to_char(q.signature_date,
'dd') || '' dd,
q.signature_date sj,
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) bf,
z.department_name bm
FROM idst0.nonauto_agreement_request_t q
LEFT JOIN idst0.nonauto_agreement_t e
ON e.policy_no = q.policy_no
LEFT JOIN idst0.nonauto_premium_t pt
ON pt.endorsement_no = q.endorsement_no
AND pt.policy_no = q.policy_no
LEFT JOIN idst0.reinsurance_t r
ON r.reinsurance_policy_no = e.policy_no
LEFT JOIN idst0.exrate_month_t c
ON pt.currency_code = c.bzh
AND to_char(q.signature_date,
'YYYY') = c.theyear
AND to_char(q.signature_date,
'fmmm') = c.themonth
LEFT JOIN idst0.rydm_t x
ON x.staff_code = e.operator_code
LEFT JOIN idst0.ks_t y
ON y.section_office_code = x.section_office_code
LEFT JOIN idst0.bm_t z
ON z.department_code = x.department_code
LEFT JOIN ywglxt.q_nonauto_agreement_t qna
ON qna.policy_no = q.policy_no
LEFT JOIN datacenter.dc_yangg_gkxzh gk
ON gk.product_code = e.product_code --
--left join datacenter.dc_yangg_zbxzh zb on zb.product_code = e.product_code --
LEFT JOIN dd
ON dd.tid = qna.t_cre
WHERE qna.tflag = '0'
AND (CASE
WHEN q.endorsement_no != '' AND
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) != 0 THEN
''
END) IS NULL
--and q.endorsement_no = ''
AND e.policy_status = '1'
AND gk.product_code IS NOT NULL
AND (e.product_code LIKE '2%' OR e.product_code LIKE '1106%' -- --
OR e.product_code LIKE '1107%' OR e.product_code LIKE '1108%' OR e.product_code LIKE '1307%' OR e.product_code LIKE '1304A400%' --
)
--and e.product_code not in ('22KC9800')
AND q.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND q.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND e.planned_end_date - e.inception_date >= 90
AND dd.tid IS NOT NULL
--)
)
--SELECT * FROM BB
,
cc AS
(SELECT mm_f,
tid ,
COUNT(DISTINCT bdh) ,
SUM(bf)
FROM bb
GROUP BY tid,
mm_f),
ff AS
(SELECT dd.*,
cc.*
FROM dd
LEFT JOIN cc
ON cc. = dd.tid
AND cc.mm_f = dd.the_month) --OR cc. = dd.btid
--select * from ff
SELECT to_date(,
'yyyy-mm-dd') ,
the_year ,
the_month ,
bm ,
bmdm ,
N,
N,
,
,
,
nvl(SUM(),
0) ,
nvl(SUM(),
0)
FROM ff
WHERE to_date(ff.,
'yyyy-mm-dd') >= DATE '2023-06-01'
AND to_date(ff.,
'yyyy-mm-dd') < DATE '2023-07-01'
AND bm IN ('续保业务部',
'湖里支公司')
GROUP BY ,
the_year,
the_month,
bm,
bmdm,
,
,
,
N,
N
ORDER BY ,
;
/*
SELECT *
FROM desktop_archievement_admin.;
*/

View File

@ -1,259 +0,0 @@
with aa1 as (select
to_char(t.signature_date,'yyyy-mm-dd') 签发日期
,t.policy_no 保单号_车险
,qt.t_cre TID
,qt.b_cre BTID
,V.PLATE_NUMBER 车牌号
from
idst0.auto_agreement_request_t t
left join idst0.auto_agreement_t e on e.policy_no = t.policy_no
left join idst0.motorised_vehicle_t v on v.policy_no = e.policy_no
left join idst0.auto_premium_t pt on pt.policy_no = t.policy_no and pt.endorsement_no = t.endorsement_no
left join ywglxt.w_dxbd_i i on e.policy_no = i.bdh
left join idst0.rydm_t xx on xx.staff_code = nvl(i.zhjywy,e.operator_code)
left join idst0.ks_t y on y.section_office_code = nvl(xx.section_office_code,e.section_office_code)
left join idst0.bm_t z on z.department_code = nvl(xx.department_code,e.department_code)
--left join ywglxt.q_auto_agreement _extend_t qe on qe.policy_no = e.policy_no
left join ywglxt.q_auto_agreement_t qt on qt.policy_no = e.policy_no
left join dc_tb_jc_c_tag cl on cl.保单号 = e.policy_no
--left join dc_yangg_basecode_teams fg on fg.bm = z.department_name and fg.ks = y.section_office_name
left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
left join idst0.t_sell_policy_autobase_t zx on zx.policy_no = e.policy_no
left join dc_YZH_ZXYS YS ON YS.坐席工号= nvlzx.workerno,et.telpartnercode)
where
t.signature_date >= sysdate-365
AND t.signature_date < sysdate+90
and e.policy_status = '1' --条件:保单有效
--AND V.PLATE_NUMBER='LVHRM1810F5024561'
and qt.tflag = '0' --条件:类型为个人
--AND qt.t_cre='440881198901110216'
and t.endorsement_no='无'
and qt.usage_xm = '家庭自用车'
and e.planned_end_date - e.inception_date >= 360 --条件:保单周期
and et.LICENSEOWNERCERTIFICATETYPE not in ('17','15','13')
)
,DD2 AS
(SELECT AA1.签发日期,AA1.TID 证件号,AA1.保单号_车险 FROM AA1
union
SELECT AA1.签发日期,AA1.BTID 证件号,AA1.保单号_车险 FROM AA1 )
--select * from dd2
,dd3 AS (SELECT DISTINCT DD2.证件号,dd2.保单号_车险,
case when DD2.证件号 is not null then row_number() over (partition by DD2.证件号 order by DD2.签发日期 desc) else 1 end Crow_no1 FROM DD2 )
,dd4 AS (SELECT DISTINCT AA1.车牌号,AA1.保单号_车险,
case when AA1.车牌号 is not null then row_number() over (partition by AA1.车牌号 order by AA1.签发日期 desc) else 1 end Crow_no2 FROM aa1 )
--,dd as (
--select dd2.*
--,case when DD2.TID is not null then row_number() over (partition by DD2.TID order by DD2.签单日期 desc) else 1 end Crow_no
--from dd2)
,dd5 AS (SELECT DD3.证件号,dd3.保单号_车险 from dd3 where dd3.Crow_no1='1')
,dd6 AS (SELECT DD4.车牌号,dd4.保单号_车险 from dd4 where dd4.Crow_no2='1')
,bb as (
select
'非车' 条线名称
,to_char(q.signature_date,'yyyy-mm-dd') 签发日期
,nvl(dd5.保单号_车险,dd6.保单号_车险) 保单号_车险
,q.policy_no 保单号_非车
--,q.endorsement_no pdh
,qna.t_cre tid
,qna.B_cre Btid
,(case when nvl(dd5.保单号_车险,dd6.保单号_车险)IS NOT NULL THEN '是' else '' end )是否分公司融合
--,'' 客户数_分公司
--,qna.tbrmc 投保人名称
,JYX.LICENSE_PLATE_NO 车牌号
,round((pt.premium_amount-nvl(pt.taxamount,0))*c.rate/100,2) 车险签发保费
,x.staff_name 经办姓名
,X.STAFF_CODE 经办代码
,y.section_office_name 科室名称
,z.department_name 部门
,(case when nvlzx.workerno,et.telpartnercode) = 'DX001' and x.staff_name like '%建发凯迪%' then '林伟华'
when nvlzx.workerno,et.telpartnercode) = 'DX001' and x.staff_name not like '%建发凯迪%' then '其他'
when x.staff_name like '%建发汽车续保%' then '林伟华'
when x.staff_name like '%建发凯通泰成续保%' and e.planned_end_date < to_date('2023-09-30 00:00:00', 'yyyy-mm-dd hh24:mi:ss') then '李定定'
when x.staff_name like '%建发凯通泰成续保%' then '周阳'
else to_char(ys.坐席姓名) END) 坐席名称
,nvlzx.workerno,et.telpartnercode) 坐席代码
,YS.团队 坐席团队
,cl.管理渠道21版 管理渠道
,cl.新转续 ntr
,(select AUTO_NAME from idst0.auto_store_t where auto_code = qna.AGENT_CODE) dldmc
,(case when gk.product_name like '%驾乘%' or gk.product_code in'23XZ9800','23YZ9800') THEN '1' ELSE '' END) 是否驾乘
,'' 车商代码
,'' 品牌
,qna.life_salesperson 寿险代码
,nvl(ca.plan_name,ra.plan_name) 产品方案名称
,E.INCEPTION_DATE 起保日期
--,QNA.PRODUCT_CODE 险种代码
FROM
idst0.nonauto_agreement_request_t q
left join idst0.nonauto_agreement_t e on e.policy_no = q.policy_no
left join idst0.nonauto_premium_t pt on pt.endorsement_no = q.endorsement_no and pt.policy_no = q.policy_no
--left join idst0.reinsurance_t r on r.reinsurance_policy_no = e.policy_no
left join idst0.exrate_month_t c on pt.currency_code = c.bzh
and to_char(q.signature_date,'YYYY') = c.theyear and to_char(q.signature_date,'fmmm') = c.themonth
left join idst0.rydm_t x on x.staff_code = e.operator_code
left join idst0.ks_t y on y.section_office_code = x.section_office_code
left join idst0.bm_t z on z.department_code = x.department_code
left join ywglxt.q_nonauto_agreement_t qna on qna.policy_no = q.policy_no
left join dc_yangg_gkxzh gk on gk.product_code = e.product_code --分散型险种
left join dd5 on dd5.证件号 = qna.t_cre
left join IDst0.nonauto_vehicle_info_t JYX ON JYX.POLICY_NO=q.policy_no
left join dd6 on dd6.车牌号 = JYX.LICENSE_PLATE_NO
left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
left join idst0.T_SELL_POLICY_PROPERTY_INFO_T zx on zx.policy_no = e.policy_no
left join dc_YZH_ZXYS YS ON YS.坐席工号= nvlzx.workerno,et.telpartnercode)
left join dc_tb_jc_c_tag cl on cl.保单号 = nvl(dd5.保单号_车险,dd6.保单号_车险)
left join idst0.ryx_agreement_t ra on ra.policy_no = e.policy_no
left join idst0.cibs_agreement_t ca on ca.policy_no = e.policy_no
--left join (SELECT CX.POLICY_NO,CX.LIFE_SALESPERSON,CX.VEHICLE_BRAND FROM ywglxt.q_Auto_Agreement_t CX) cx on cx.policy_no=rmi.保单号_车险
--left join ywglxt.v_xzh xzh on xzh.product_code = e.product_code
--left join ywglxt.q_auto_agreement_t qtt on qtt.plate_number = JYX.LICENSE_PLATE_NO 剔除车非不是家用车
where
qna.tflag = '0'
and (case when q.endorsement_no !='无' and round((pt.premium_amount-nvl(pt.taxamount,0))*c.rate/100,2) !=0 then '是' end) is null
--and q.endorsement_no = '无'
and nvl(dd5.证件号,dd6.车牌号) is not null
and q.signature_date >= sysdate-5
AND q.signature_date < sysdate
--AND qna.t_cre='350623198706075199'
--and (case when JYX.LICENSE_PLATE_NO is not null and qtt.usage_xm='家庭自用车' then '是' when JYX.LICENSE_PLATE_NO is null then '是' end )IS NOT NULL 剔除车非不是家用车
and e.policy_status = '1'
and gk.product_code is not null
and (e.product_code like '2%' or e.product_code like '1106%' --意健 --责任
or e.product_code like '1107%' or e.product_code like '1108%' or e.product_code like '1307%' or e.product_code like '1304A400%' --家财
)
--AND qna.policy_no='AXIMQDI30V23FP0062SH'
)
,BB3 AS (SELECT bb.tid ,COUNT(*) 次数 from bb group by bb.tid )
,bb2 as (
select bb.*
,case when bb.是否驾乘 ='1' then row_number() over (partition by bb.tid,bb.是否驾乘 order by bb.签发日期 desc) else 1 end JCrow_no
,case when bb.tid IS not NULL then row_number() over (partition by bb.tid order by bb.签发日期 desc) else 1 end CFrow_no
,BB3.次数
from BB
LEFT JOIN BB3 ON BB3.tid =bb.tid
)
,BB4 AS(select bb2.*
,(CASE when bb2.次数='1' THEN '1'
WHEN bb2.次数 = '2' and BB2.是否驾乘 ='1' and jcROW_NO ='1' then '1'
-- WHEN bb2.次数 = '2' and BB2.是否驾乘 is null and CFROW_NO ='2' then '0'
WHEN bb2.次数 = '2' and BB2.是否驾乘 is null and CFROW_NO ='1' then '1'
WHEN bb2.次数 > '2' AND cfROW_NO ='1' then '1' --BB2.是否驾乘 ='1' and
-- WHEN bb2.次数 > '2' AND BB2.是否驾乘 IS NULL THEN '1'--AND CFROW_NO ='1'
ELSE '0' END ) 客户数
from bb2
/*,ff AS(
SELECT
to_char(rmi.签发日期,'yyyy-mm-dd') 签发日期
,RMI.保单号_车险
,rmi.保单号_非车
,rmi.车险签发保费
,RMI.条线名称
,RMI.是否分公司融合
,RMI.客户数_分公司
,cl.经办姓名
,CL.科室名称
,CL.部门
,(case when nvlzx.workerno,et.telpartnercode) = 'DX001' and cl.经办姓名 like '%建发凯迪%' then '林伟华'
when nvl(zx.workerno,et.telpartnercode) = 'DX001' and cl.经办姓名 not like '%建发凯迪%' then '其他'
else to_char(ys.坐席姓名) END) 坐席名称
,YS.团队 坐席团队
,cl.管理渠道21版 管理渠道
,cl.新转续 ntr
,(select AUTO_NAME from idst0.auto_store_t where auto_code = nvl(e.selling_shop_code,e.tel_sale_4s_code)) dldmc
FROM DC_CF_RMI rmi
left join idst0.auto_agreement_t e on e.policy_no = rmi.保单号_车险
left join dc_tb_jc_c_tag cl on cl.保单号 = e.policy_no
--left join dc_yangg_basecode_teams fg on fg.bm = z.department_name and fg.ks = y.section_office_name
left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
left join idst0.t_sell_policy_autobase_t zx on zx.policy_no = e.policy_no
left join dc_YZH_ZXYS YS ON YS.坐席工号= nvlzx.workerno,et.telpartnercode))*/
,aa as (select
'车险' 条线名称
,to_char(t.signature_date,'yyyy-mm-dd') 签发日期
,t.policy_no 保单号_车险
--,t.endorsement_no pdh
,'' 保单号_非车
,'' 是否分公司融合
,(case when qt.bd_type in ('1','2') THEN '1'
when qt.bd_type = '3' and qt.xzh_xm='商业险' then '1' ELSE '0'END )客户数_分公司
--,decode(qT.bd_type,'1','单交强','2','单商业','3','交商共保','其它') 保单类型
,qt.t_cre TID
,qt.b_cre BTID
--,QT.TBRMC 投保人名称
,V.PLATE_NUMBER 车牌号
,pt.premium_amount - nvl(pt.tax_amount,0) 车险签发保费
,xx.staff_name 经办姓名
,XX.STAFF_CODE 经办代码
,y.section_office_name 科室名称
,z.department_name 部门
,(case when nvlzx.workerno,et.telpartnercode) = 'DX001' and xx.staff_name like '%建发凯迪%' then '林伟华'
when nvl(zx.workerno,et.telpartnercode) = 'DX001' and xx.staff_name not like '%建发凯迪%' then '其他'
when xx.staff_name like '%建发汽车续保%' then '林伟华'
when xx.staff_name like '%建发凯通泰成续保%' and e.planned_end_date < to_date('2023-09-30 00:00:00', 'yyyy-mm-dd hh24:mi:ss') then '李定定'
when xx.staff_name like '%建发凯通泰成续保%' then '周阳'
else to_char(ys.坐席姓名) END) 坐席名称
,nvl(zx.workerno,et.telpartnercode) 坐席代码
,YS.团队 坐席团队
,cl.管理渠道21版 管理渠道
,cl.新转续 ntr
,(select AUTO_NAME from idst0.auto_store_t where auto_code = nvl(e.selling_shop_code,e.tel_sale_4s_code)) dldmc
,e.selling_shop_code 车商代码
,qt.life_salesperson 寿险代码
,QT.VEHICLE_BRAND 品牌
,'' 产品方案名称
,E.INCEPTION_DATE 起保日期
--,QT.PRODUCT_CODE 险种代码
from
idst0.auto_agreement_request_t t
left join idst0.auto_agreement_t e on e.policy_no = t.policy_no
left join idst0.motorised_vehicle_t v on v.policy_no = e.policy_no
left join idst0.auto_premium_t pt on pt.policy_no = t.policy_no and pt.endorsement_no = t.endorsement_no
left join ywglxt.w_dxbd_i i on e.policy_no = i.bdh
left join idst0.rydm_t xx on xx.staff_code = nvl(i.zhjywy,e.operator_code)
left join idst0.ks_t y on y.section_office_code = nvl(xx.section_office_code,e.section_office_code)
left join idst0.bm_t z on z.department_code = nvl(xx.department_code,e.department_code)
--left join ywglxt.q_auto_agreement _extend_t qe on qe.policy_no = e.policy_no
left join ywglxt.q_auto_agreement_t qt on qt.policy_no = e.policy_no
left join dc_tb_jc_c_tag cl on cl.保单号 = e.policy_no
--left join dc_yangg_basecode_teams fg on fg.bm = z.department_name and fg.ks = y.section_office_name
left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
left join idst0.t_sell_policy_autobase_t zx on zx.policy_no = e.policy_no
left join dc_YZH_ZXYS YS ON YS.坐席工号= nvlzx.workerno,et.telpartnercode)
where
t.signature_date >= sysdate-5
AND t.signature_date < sysdate
AND e.policy_status = '1' --条件:保单有效
--AND qt.t_cre='350623198706075199'
and qt.tflag = '0' --条件:类型为个人
and t.endorsement_no='无'
and qt.usage_xm = '家庭自用车'
and e.planned_end_date - e.inception_date >= 360 --条件:保单周期
and et.LICENSEOWNERCERTIFICATETYPE not in ('17','15','13')
--AND e.policy_no='AXIMC01Y2023B015820W'
)
select "签发日期","保单号_车险","保单号_非车","条线名称","是否分公司融合","客户数","车险签发保费","经办姓名","经办代码","科室名称","部门","坐席名称","坐席代码","坐席团队","管理渠道","NTR","DLDMC","车商代码","寿险代码","品牌","产品方案名称","起保日期","车牌号"
from bb4
UNION
select "签发日期","保单号_车险","保单号_非车","条线名称","是否分公司融合","客户数_分公司","车险签发保费","经办姓名","经办代码","科室名称","部门","坐席名称","坐席代码","坐席团队","管理渠道","NTR","DLDMC","车商代码","寿险代码","品牌","产品方案名称","起保日期","车牌号"
from AA
--UNION
--Select "签发日期","保单号_车险","保单号_非车","条线名称","是否分公司融合","客户数_分公司","车险签发保费","经办姓名","科室名称","部门","坐席名称","坐席团队","管理渠道","NTR","DLDMC"
--from ff

View File

@ -1,13 +1,3 @@
###
# @Author: Kane
# @Date: 2023-03-14 23:46:12
# @LastEditors: Kane
# @FilePath: /task_schedule/.env.development
# @Description:
#
# Copyright (c) ${2022} by Kane, All Rights Reserved.
###
NODE_ENV = 'development'
VITE_URL_VALIDATE_ACCOUNT="http://222.76.244.118:11101/desktop_archievement_backend/account/query_staff_info.do"
VITE_URL_LOGIN = "http://222.76.244.118:11101/admin-system/account/p13_account_check"
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do"
VITE_URL_VALIDATE_ACCOUNT="http://222.76.244.118:11001/desktop_archievement_backend/account/query_staff_info.do"
VITE_URL_LOGIN = "http://222.76.244.118:11001/admin-system/account/p13_account_check"

View File

@ -1,201 +1,101 @@
/*
* @Author: Kane
* @Date: 2023-03-14 09:19:21
* @Date: 2022-12-14 15:12:46
* @LastEditors: Kane
* @LastEditTime: 2023-03-05 21:35:01
* @FilePath: /task_schedule/.eslintrc.cjs
* @Description: eslint 配置文件
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
module.exports = {
root: true,
env: { // 需要在env中指定运行的环境这些环境其实就是一组预定义的全局变量让 ESLint 知道当前环境存在这些全局变量
node: true,
browser: true,
es2021: true,
},
parser:"espree",
parserOptions:{
sourceType: "module",
ecmaVersion: 2021,
},
extends:["eslint:recommended",],
rules:{
indent: ["warn", 4,],
// 圆括号中的空格,为空不加空格,紧跟花括号、方括号、圆括号时也不加入空格
"space-in-parens": ["error", "always", { exceptions: ["{}", "[]", "()", "empty",], },],
root: true,
env: { //需要在 env 中指定运行的环境,这些环境其实就是一组预定义的全局变量,让 ESLint 知道当前环境存在这些全局变量
node: true,
browser: true,
es2021: true,
},
extends: [
"plugin:vue/vue3-essential",
"eslint:recommended",
],
// parser: "@babel/eslint-parser",
parserOptions: {
ecmaVersion: 2021,
sourceType: "module",
parser: "@babel/eslint-parser",
requireConfigFile: false,
},
rules: {
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-unused-vars": "warn",
"semi": ["error", "always",], //控制行尾部分号
"quotes": ["error", "double",],
"comma-dangle": ["error", {
"arrays": "always",
"objects": "always",
"imports": "never",
"exports": "never",
"functions": "never",
},], //数组和对象键值对最后一个逗号
"comma-style": ["error", "last",], //逗号在行位
"array-bracket-spacing": ["error", "never",],
"no-undef-init": "error",
"no-invalid-this": "error",
"no-use-before-define": "error",
"no-shadow-restricted-names": "error", //禁止对一些关键字或者保留字进行赋值操作比如NaN、Infinity、undefined、eval、arguments等
"comma-spacing": ["error", { "before": false, "after": true, },],
"brace-style": ["error", "allman", { "allowSingleLine": true, },],
"prefer-const": "warn",
},
overrides: [
{
files: ["*.ts",],
parser: "@typescript-eslint/parser",
parserOptions: {
project: "./tsconfig.json",
},
plugins: ["@typescript-eslint",],
extends: [
"standard-with-typescript",
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
],
rules: {
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-unused-vars": "warn",
semi: ["error", "always",], // 控制行尾部分号
quotes: ["error", "double",],
"comma-dangle": ["error", {
arrays: "always",
objects: "always",
imports: "never",
exports: "never",
functions: "never",
},], // 数组和对象键值对最后一个逗号
"comma-style": ["error", "last",], // 逗号在行位
"@typescript-eslint/indent": ["error", 4,],
"@typescript-eslint/no-extra-semi": "off",
"@typescript-eslint/no-inferrable-types": "off",
"@typescript-eslint/no-unused-vars": "warn",
"@typescript-eslint/ban-ts-comment": "warn",
"@typescript-eslint/member-delimiter-style": "off",
"@typescript-eslint/semi": ["error", "always",], //控制行尾部分号
"@typescript-eslint/brace-style": ["error", "allman", { "allowSingleLine": true, },],
"@typescript-eslint/comma-dangle": ["error", {
"arrays": "always",
"objects": "always",
"imports": "never",
"exports": "never",
"functions": "never",
},], //数组和对象键值对最后一个逗号
"@typescript-eslint/quotes": ["error", "double",],
"@typescript-eslint/space-before-function-paren": "off",
"@typescript-eslint/strict-boolean-expressions": ["error", {
"allowString": false,
},],
"comma-style": ["error", "last",], //逗号在行位
"array-bracket-spacing": ["error", "never",],
"no-undef-init": "error",
"no-invalid-this": "error",
"no-use-before-define": "error",
"no-shadow-restricted-names": "error", // 禁止对一些关键字或者保留字进行赋值操作比如NaN、Infinity、undefined、eval、arguments等
"comma-spacing": ["error", { before: false, after: true, },],
"array-bracket-spacing": ["error", "never", {
singleValue: false,
objectsInArrays: false,
arraysInArrays: false,
},],
"brace-style": ["error", "allman", { allowSingleLine: true, },],
"no-shadow-restricted-names": "error", //禁止对一些关键字或者保留字进行赋值操作比如NaN、Infinity、undefined、eval、arguments等
"prefer-const": "warn",
"space-before-function-paren": ["error", {
anonymous: "always",
named: "never",
asyncArrow: "always",
},],
"spaced-comment": "error",
"space-before-function-paren": "off",
},
},
overrides: [
{
files: ["*.vue",],
parser: "vue-eslint-parser",
parserOptions: {
ecmaVersion: 2021,
sourceType: "module",
parser: { // <script>标签中的lang属性配置不同的parser
ts: "@typescript-eslint/parser",
js: "espree",
"<template>": "espree",
},
project: "./tsconfig.json",
extraFileExtensions: [".vue",],
},
plugins: ["eslint-plugin-vue",],
extends: [
"plugin:vue/vue3-essential",
"plugin:vue/recommended",
"eslint:recommended",
"standard-with-typescript",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
],
rules: {
indent: ["warn", 4,],
"no-trailing-spaces": ["error", {"ignoreComments": true,},],
// 圆括号中的空格,为空不加空格,紧跟花括号、方括号、圆括号时也不加入空格
"space-in-parens": ["error", "always", { exceptions: ["{}", "[]", "()", "empty",], },],
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-unused-vars": "warn",
"semi-spacing": ["error", {"before": false, "after": true,},], // 控制行尾部分号
"quotes": ["error", "double",],
"comma-dangle": ["error", {
arrays: "always",
objects: "always",
imports: "never",
exports: "never",
functions: "never",
},], // 数组和对象键值对最后一个逗号
"comma-style": ["error", "last",], // 逗号在行位
"no-undef-init": "error",
"no-invalid-this": "error",
"no-use-before-define": "error",
"no-shadow-restricted-names": "error", // 禁止对一些关键字或者保留字进行赋值操作比如NaN、Infinity、undefined、eval、arguments等
"brace-style": ["error", "allman", { allowSingleLine: true, },],
"prefer-const": "warn",
"space-before-function-paren": ["error", {
anonymous: "always",
named: "never",
asyncArrow: "always",
},],
// vue
"vue/html-indent": ["error", 4,],
// typescript
"@typescript-eslint/indent": ["warn", 4,],
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/no-extra-semi": "off",
"@typescript-eslint/no-inferrable-types": "off",
"@typescript-eslint/no-unused-vars": "warn",
"@typescript-eslint/ban-ts-comment": "warn",
"@typescript-eslint/member-delimiter-style": "off",
"@typescript-eslint/semi": ["error", "always",], // 控制行尾部分号
"@typescript-eslint/brace-style": ["error", "allman", { allowSingleLine: true, },],
"@typescript-eslint/comma-dangle": ["error", {
arrays: "always",
objects: "always",
imports: "never",
exports: "never",
functions: "never",
},], // 数组和对象键值对最后一个逗号
"@typescript-eslint/quotes": ["error", "double",],
"@typescript-eslint/space-before-function-paren": "off",
// 方括号的空格问题
"comma-spacing": ["error", { before: false, after: true, },],
"@typescript-eslint/comma-spacing": ["off", { before: false, after: true, },], // 使用eslint的不用ts的
"array-bracket-spacing": ["error", "never", {
singleValue: false,
objectsInArrays: false,
arraysInArrays: false,
},],
},
},
{
files: ["*.ts",],
parser: "@typescript-eslint/parser",
parserOptions: {
project: "./tsconfig.json",
},
plugins: ["@typescript-eslint",],
extends: [
"eslint:recommended",
"standard-with-typescript",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
],
rules: {
"no-trailing-spaces": ["error", {"ignoreComments": true,},],
// 圆括号中的空格,为空不加空格,紧跟花括号、方括号、圆括号时也不加入空格
"space-in-parens": ["error", "always", { exceptions: ["{}", "[]", "()", "empty",], },],
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/indent": ["error", 4,],
"@typescript-eslint/no-extra-semi": "off",
"@typescript-eslint/no-inferrable-types": "off",
"@typescript-eslint/no-unused-vars": "warn",
"@typescript-eslint/ban-ts-comment": "warn",
"@typescript-eslint/member-delimiter-style": "off",
"@typescript-eslint/semi": ["error", "always",], // 控制行尾部分号
"@typescript-eslint/brace-style": ["error", "allman", { allowSingleLine: true, },],
"@typescript-eslint/comma-dangle": ["error", {
arrays: "always",
objects: "always",
imports: "never",
exports: "never",
functions: "never",
},], // 数组和对象键值对最后一个逗号
"@typescript-eslint/quotes": ["error", "double",],
"@typescript-eslint/space-before-function-paren": "off",
"@typescript-eslint/strict-boolean-expressions": ["error", {
allowString: false,
},],
"comma-style": ["error", "last",], // 逗号在行位
"comma-spacing": ["error", { before: false, after: true, },],
"@typescript-eslint/comma-spacing": ["off", { before: false, after: true, },], // 使用eslint的不用ts的
"array-bracket-spacing": ["error", "never", {
singleValue: false,
objectsInArrays: false,
arraysInArrays: false,
},],
"no-undef-init": "error",
"no-invalid-this": "error",
"no-use-before-define": "error",
"no-shadow-restricted-names": "error", // 禁止对一些关键字或者保留字进行赋值操作比如NaN、Infinity、undefined、eval、arguments等
"prefer-const": "warn",
"spaced-comment": "error",
"space-before-function-paren": "off",
"semi-spacing": ["error", {"before": false, "after": true,},],
},
},
],
],
};

File diff suppressed because it is too large Load Diff

View File

@ -1,40 +1,37 @@
{
"name": "task_schedule",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@element-plus/icons-vue": "^2.1.0",
"echarts": "^5.4.3",
"element-plus": "^2.4.1",
"mitt": "^3.0.1",
"moment": "^2.29.4",
"sass-loader": "^13.3.2",
"vue": "^3.3.6",
"vue-router": "^4.2.5",
"vuex": "^4.1.0"
},
"devDependencies": {
"@babel/eslint-parser": "^7.22.15",
"@rushstack/eslint-patch": "^1.5.1",
"@typescript-eslint/eslint-plugin": "^6.8.0",
"@vitejs/plugin-vue": "^4.4.0",
"@vue/cli-plugin-eslint": "^5.0.8",
"@vue/eslint-config-typescript": "^12.0.0",
"axios": "^1.5.1",
"babel": "^6.23.0",
"eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^39.1.1",
"eslint-plugin-vue": "^9.17.0",
"node-sass": "^9.0.0",
"sass": "^1.69.4",
"style-loader": "^3.3.3",
"ts-node": "^10.9.1",
"vue-eslint-parser": "^9.3.2"
}
"name": "task_schedule",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@babel/eslint-parser": "^7.19.1",
"@element-plus/icons-vue": "^2.0.10",
"@typescript-eslint/eslint-plugin": "^5.54.0",
"@typescript-eslint/parser": "^5.54.0",
"axios": "^1.3.4",
"babel": "^6.23.0",
"echarts": "^5.4.1",
"element-plus": "^2.2.30",
"moment": "^2.29.4",
"typescript": "^4.9.5",
"vue": "^3.2.45",
"vue-router": "^4.1.6",
"vuex": "^4.1.0"
},
"devDependencies": {
"@babel/eslint-parser": "^7.19.1",
"@vitejs/plugin-vue": "^4.0.0",
"@vue/cli-plugin-eslint": "^5.0.8",
"eslint": "^8.35.0",
"eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^34.0.0",
"eslint-plugin-vue": "^9.9.0",
"sass": "^1.58.3",
"vite": "^4.1.0"
}
}

10
code/web/task_schedule/sfc.d.ts vendored Normal file
View File

@ -0,0 +1,10 @@
/*
* @Author: Kane
* @Date: 2023-03-04 17:21:37
* @LastEditors: Kane
* @FilePath: /task_schedule/sfc.d.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/

View File

@ -3,13 +3,12 @@
* @Date: 2023-03-04 17:23:02
* @LastEditors: Kane
* @FilePath: /task_schedule/shims-vue.d.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
declare module "*.vue"
{
import { type ComponentOptions } from "vue";
declare module '*.vue' {
import { ComponentOptions } from 'vue';
const componentOptions: ComponentOptions;
export default componentOptions;
}
}

View File

@ -2,33 +2,34 @@
* @Author: Kane
* @Date: 2023-02-15 09:25:52
* @LastEditors: Kane
* @LastEditTime: 2023-08-25 10:53:30
* @LastEditTime: 2023-03-03 10:00:54
* @FilePath: /task_schedule/src/App.vue
* @Description:
* @Description:
* 应用的框架
* 1配置el-config-provider配置为中文
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
* 1配置el-config-provider配置为中文
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<el-config-provider :locale="locale">
<router-view />
</el-config-provider>
<el-config-provider :locale="locale">
<router-view></router-view>
</el-config-provider>
</template>
<script lang="ts">
import zhCn from "element-plus/es/locale/lang/zh-cn"; // element-plus
import zhCn from "element-plus/lib/locale/lang/zh-cn"; //element-plus
export default {
name: "App",
components: {},
setup()
{
const locale = zhCn;
name: "App",
components: {},
setup()
{
const locale = zhCn;
return { locale, };
},
return { locale, };
},
};
</script>
<style scoped></style>

View File

@ -1,56 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-02-24 09:36:08
* @LastEditors: Kane
* @LastEditTime: 2023-06-15 15:50:00
* @FilePath: /task_schedule/src/assets/css/public/_public.scss
* @Description: 公共变量
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
//背景色
$wrap-bg-color:#fff;
$span-font-color:#5f5f5f;
//阴影
$box-shadow:0px 0px 20px -10px rgb(14 18 22 / 25%);
$box-shadow-hover:0px 0px 20px -10px rgb(14 18 22 / 50%);
//文字大小
$font-size-normal:14px;
//查询框
@mixin query-box-wrap {
padding: 0px 10px;
span {
font-weight: normal;
display: block;
text-align: right;
font-size: $font-size-normal;
color: $span-font-color;
}
:deep(.el-row) {
display: flex;
align-items: center;
justify-content: left;
}
.el-row+.el-row {
margin-top: 10px;
}
.button-wrapper-right {
display: flex;
justify-content: right;
align-items: center;
}
.button-wrapper-left {
display: flex;
justify-content: left;
align-items: center;
}
}

View File

@ -0,0 +1,9 @@
$color-bg-01: #fecb96;
$color-bg-02: #f7954e;
$color-bg-03: #f27620;
$color-bg-04: #da3703;
$color-bg-05: #ba1800;
$color-charts-bg:#ffffff9f;
$color-honorlist-bg: rgba(255, 255, 255, 0.3);

View File

@ -1,21 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-02-28 19:25:30
* @LastEditors: Kane
* @FilePath: /task_schedule/src/assets/css/public/global.scss
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
@mixin no-select {
-webkit-touch-callout: none;
-moz-user-select: none;
/*火狐*/
-webkit-user-select: none;
/*webkit浏览器*/
-ms-user-select: none;
/*IE10*/
-khtml-user-select: none;
/*早期浏览器*/
user-select: none;
}

View File

@ -17,373 +17,343 @@
* 2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15;
/* 1 */
-webkit-text-size-adjust: 100%;
/* 2 */
text-size-adjust: 100%;
}
/* Sections
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
text-size-adjust: 100%;
}
/* Sections
========================================================================== */
/**
/**
* Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
body {
margin: 0;
}
/**
* Render the `main` element consistently in IE.
*/
main {
display: block;
}
/**
main {
display: block;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
========================================================================== */
/**
/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/
hr {
box-sizing: content-box;
/* 1 */
height: 0;
/* 1 */
overflow: visible;
/* 2 */
}
/**
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
pre {
font-family: monospace, monospace;
/* 1 */
font-size: 1em;
/* 2 */
}
/* Text-level semantics
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics
========================================================================== */
/**
/**
* Remove the gray background on active links in IE 10.
*/
a {
background-color: transparent;
}
/**
a {
background-color: transparent;
}
/**
* 1. Remove the bottom border in Chrome 57-
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none;
/* 1 */
text-decoration: underline;
/* 2 */
text-decoration: underline dotted;
/* 2 */
}
/**
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
b,
strong {
font-weight: bolder;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp {
font-family: monospace, monospace;
/* 1 */
font-size: 1em;
/* 2 */
}
/**
code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
========================================================================== */
/**
/**
* Remove the border on images inside links in IE 10.
*/
img {
border-style: none;
}
/* Forms
img {
border-style: none;
}
/* Forms
========================================================================== */
/**
/**
* 1. Change the font styles in all browsers.
* 2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit;
/* 1 */
font-size: 100%;
/* 1 */
line-height: 1.15;
/* 1 */
margin: 0;
/* 2 */
}
/**
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
button,
input {
/* 1 */
overflow: visible;
}
/**
button,
input { /* 1 */
overflow: visible;
}
/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/
button,
select {
/* 1 */
text-transform: none;
}
/**
button,
select { /* 1 */
text-transform: none;
}
/**
* Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
/**
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
/**
* Remove the inner border and padding in Firefox.
*/
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Correct the padding in Firefox.
*/
fieldset {
padding: 0.35em 0.75em 0.625em;
}
/**
fieldset {
padding: 0.35em 0.75em 0.625em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box;
/* 1 */
color: inherit;
/* 2 */
display: table;
/* 1 */
max-width: 100%;
/* 1 */
padding: 0;
/* 3 */
white-space: normal;
/* 1 */
}
/**
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
vertical-align: baseline;
}
/**
progress {
vertical-align: baseline;
}
/**
* Remove the default vertical scrollbar in IE 10+.
*/
textarea {
overflow: auto;
}
/**
textarea {
overflow: auto;
}
/**
* 1. Add the correct box sizing in IE 10.
* 2. Remove the padding in IE 10.
*/
[type="checkbox"],
[type="radio"] {
box-sizing: border-box;
/* 1 */
padding: 0;
/* 2 */
}
/**
[type="checkbox"],
[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type="search"] {
-webkit-appearance: textfield;
/* 1 */
outline-offset: -2px;
/* 2 */
}
/**
[type="search"] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding in Chrome and Safari on macOS.
*/
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button;
/* 1 */
font: inherit;
/* 2 */
}
/* Interactive
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
========================================================================== */
/*
/*
* Add the correct display in Edge, IE 10+, and Firefox.
*/
details {
display: block;
}
/*
details {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Misc
summary {
display: list-item;
}
/* Misc
========================================================================== */
/**
/**
* Add the correct display in IE 10+.
*/
template {
display: none;
}
/**
template {
display: none;
}
/**
* Add the correct display in IE 10.
*/
[hidden] {
display: none;
}
[hidden] {
display: none;
}

View File

@ -1,31 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-02-28 19:25:30
* @LastEditors: Kane
* @FilePath: /task_schedule/src/assets/css/public/variables.scss
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
// color
/*
$color-bg-01: #fecb96;
$color-bg-02: #f7954e;
$color-bg-03: #f27620;
$color-bg-04: #da3703;
$color-bg-05: #ba1800;
*/
$color-bg-01: #00b2f8;
$color-bg-02: #00b0fb;
$color-bg-03: #0279ea;
$color-bg-04: #046ed6;
$color-bg-05: #033eb6;
$color-title-font: #046ed6;
$color-charts-bg: #ffffff9f;
$color-honorlist-bg: rgba(255, 255, 255, 0.3);
$banner-background-color: #1d74b2;

View File

@ -4,12 +4,12 @@
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/ArchievementChartComponent.vue
* @Description: 业绩图表组件
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="archievement-wrapper">
<div id="chartWrapper" />
<div id="chartWrapper"></div>
</div>
</template>
@ -20,24 +20,23 @@ import * as echarts from "echarts";
export default {
name: "ArchievementChartComponent",
props: {
chartData: {
chart_data: {
type: Array,
require: true,
default: () => [],
},
},
setup( props )
setup(props)
{
const ui = reactive({
mensualList: [],
chart_data: props.chart_data,
});
//
const initCharts = (): void =>
//
const initCharts = () =>
{
console.log( "每月业绩", props.chartData );
const chartDom = document.getElementById( "chartWrapper" );
const myChart = echarts.init( chartDom as HTMLDivElement );
const chartDom = document.getElementById("chartWrapper");
//@ts-ignore
const myChart = echarts.init((chartDom));
const option = {
xAxis: {
type: "category",
@ -45,21 +44,21 @@ export default {
},
yAxis: {
type: "value",
data: [400, 600, 800, 1000, 1200,],
data: [200, 400, 600, 800, 1000,],
},
series: [
{
data: props.chartData,
data: props.chart_data,
type: "line",
},
],
};
myChart.setOption( option );
option && myChart.setOption(option);
window.onresize = function ()
window.onresize = function ()
{
//
//
myChart.resize();
};
};
@ -69,7 +68,7 @@ export default {
initCharts();
});
return { ui, initCharts, props, };
return { ui, initCharts, };
},
};
</script>
@ -106,4 +105,4 @@ export default {
border-radius: 5px;
}
}
</style>
</style>

View File

@ -4,17 +4,13 @@
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/ArchievementCompleteRateComponent.vue
* @Description: 业绩完成率组件
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="complete-rate-wrapper">
<el-progress
type="circle"
:percentage="ui.percentage"
status="success"
>
<template #default>
<el-progress type="circle" :percentage="ui.percentage">
<template #default="{ percentage }">
<span class="percentage-label">{{ ui.indicator }}</span>
<span class="percentage-value">{{ percentage }}%</span>
</template>
@ -30,19 +26,18 @@ export default {
percentage: {
type: String,
require: true,
default: () => "0",
},
indicator: {
type: String,
default: "",
},
},
setup( props )
setup(props)
{
const percentage = Number( props.percentage ).valueOf();
const percentage = Number(props.percentage).valueOf();
const ui = reactive({
percentage,
percentage: percentage,
indicator: props.indicator,
});
@ -80,5 +75,6 @@ export default {
font-size: 12px;
}
}
</style>
</style>

View File

@ -1,166 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-08-30 14:08:57
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/CallerArchievementComponent.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="caller-archievment-wrapper">
<h1>{{ CallerName }}</h1>
<table>
<tr>
<th>当月保费</th><td>{{ PresentMonthPremium }}&nbsp;万元</td>
</tr>
<tr>
<th>车非渗透率</th><td>{{ props.attachingRate }}%</td>
</tr>
<tr>
<th>续保率</th><td>{{ props.renewalRate }}%</td>
</tr>
</table>
</div>
</template>
<script lang="ts">
import { computed } from "vue";
interface CallerArchievementComponentUI
{
callerName: string,
thisMonthPremium: number,
attachingRate: string,
renewalRate: string,
}
export default {
name: "CallerArchievementComponent",
props: {
callerName: {
type: String,
require: true,
default: (): string => "",
},
thisMonthPremium: {
type: Number,
require: true,
default: (): number => 0,
},
attachingRate: {
type: String,
require: true,
default: (): string => "0.0",
},
renewalRate: {
type: String,
require: true,
default: (): string => "0.0",
},
},
setup( props )
{
const ui: CallerArchievementComponentUI = {
callerName: "",
thisMonthPremium: 0,
attachingRate: "0.0",
renewalRate: "0.0",
};
const PresentMonthPremium = computed((): string =>
{
return ( props.thisMonthPremium / 10000 ).toFixed( 2 );
});
const CallerName = computed((): string =>
{
return props.callerName;
});
return {
CallerName,
PresentMonthPremium,
ui,
props,
};
},
};
</script>
<style scoped lang="scss">
.caller-archievment-wrapper
{
width: 300px;
height: 120px;
border-radius: 5px;
margin-bottom: 30px;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
background-color: #fff;
color: #4f4f4f;
font-size: 15px;
h1 {
background-color: #fecb96;
width: 100%;
text-align: center;
border-radius: 5px 5px 0px 0px;
margin: 0px;
padding: 5px 0px;
color: #da3703;
font: {
size: 1.2rem;
weight: 100;
family: "FZ-ZHUOHEI";
}
}
table {
border-collapse: collapse;
border-radius: 0px 0px 5px 5px;
width: 100%;
margin-top: 5px;
background-color: #ffffff;
font: {
size: 14px;
}
th,td {
padding: 9px;
border-bottom: 1.5px solid #ebeef5;
}
th {
width: 5.2rem;
text-align: right;
}
th.caller-name {
text-align: center;
background-color: yellow;
}
td {
text-align: left;
}
tr:nth-child(even) {
background-color: #f5f6f7;
}
tr:last-child td,th {
border-bottom: none;
}
}
}
</style>

View File

@ -3,25 +3,19 @@
* @Date: 2023-03-08 18:32:13
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/DishonorListComponent.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="dishonorlist-wrapper">
<div class="banner-wrapper">
<img
src="@/assets/img/ranking/stop.png"
alt=""
>
<img src="@/assets/img/ranking/stop.png" alt="">
<div class="title-wrapper">
<span> 8 6 突围战</span>
<span>指标落后入营坐席</span>
<span>"消7灭6"突围战</span>
<span>二月入营坐席</span>
</div>
</div>
<div class="telsaler-list-wrapper">
<span>开发中</span>
</div>
</div>
</template>
@ -32,25 +26,18 @@ export default {
month: {
type: String,
require: true,
default: () => "本",
},
dishonorPersons: {
type: Array,
require: true,
default: () => [],
},
},
setup( props )
{
return { props, };
},
setup() { },
};
</script>
<style scoped lang="scss">
.dishonorlist-wrapper {
display: flex;
flex-direction: column;
height: 240px;
width: 360px;
border-radius: 5px;
@ -60,16 +47,10 @@ export default {
padding: 10px;
>*+* {
margin-top: 10px;
}
.banner-wrapper {
display: flex;
justify-content: center;
align-items: stretch;
height: 65px;
flex-grow: 0;
img {
// width: 70px;
@ -91,24 +72,4 @@ export default {
}
}
}
.telsaler-list-wrapper {
flex-grow: 1;
display: flex;
justify-content: center;
align-items: center;
span {
display: block;
text-align: center;
color: rgb(101, 140, 194);
margin-top: 0px;
font: {
size: 2rem;
family: "FZ-ZHUOHEI";
weight: 100;
}
}
}
</style>
</style>

View File

@ -4,64 +4,55 @@
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/HonorListComponent.vue
* @Description: 光荣榜组件
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="honorlist-wrapper">
<div class="banner-wrapper">
<img
src="@/assets/img/ranking/medal.png"
alt=""
>
<div class="title-wrapper">
<span>90俱乐部标杆坐席</span>
<span class="title">90俱乐部{{ $props.month }}月入围坐席</span>
<div class="reward-wrapper">
<div class="leading-reward-wrapper">
<div class="banner-wrapper">
<img src="@/assets/img/ranking/medal.png" alt="领跑奖">
<span>领跑奖</span>
</div>
</div>
<div class="advance-reward-wrapper">
<div class="banner-wrapper">
<img src="@/assets/img/ranking/copper_medal.png" alt="飞跃奖">
<span>飞跃奖</span>
</div>
</div>
</div>
<div class="telsaler-list-wrapper">
<span>开发中</span>
</div>
</div>
</template>
<script lang="ts">
import { reactive } from "vue";
export default {
name: "HonorListComponent",
props: {
month: {
type: String,
require: true,
default: () => "本",
},
leadingReward: {
type: Array,
type: String,
require: true,
default: () => ["",],
},
advanceReward: {
type: Array,
type: String,
require: true,
default: () => ["",],
},
},
setup( props )
setup(props)
{
const ui = reactive({
leadingReward: props.leadingReward as string[],
advanceReward: props.advanceReward as string[],
});
console.log( props );
return { ui, };
return {};
},
};
</script>
<style scoped lang="scss">
.honorlist-wrapper {
display: flex;
flex-direction: column;
height: 240px;
width: 360px;
border-radius: 5px;
@ -74,54 +65,64 @@ export default {
>*+* {
margin-top: 10px;
}
}
.banner-wrapper {
display: flex;
justify-content: center;
align-items: center;
height: 65px;
flex-grow: 0;
.title {
display: block;
text-align: center;
img {
width: 65px;
height: 65px;
font: {
family: "FZ-ZHUOHEI";
size: 1.4rem;
}
color: goldenrod;
}
.title-wrapper {
.reward-wrapper {
width: 100%;
span {
display: block;
text-align: center;
color: rgb(245, 178, 11);
margin-top: 0px;
display: flex;
justify-content: center;
align-items: stretch;
font: {
size: 1.65rem;
family: "FZ-ZHUOHEI";
weight: 100;
>*+* {
margin-left: 10px;
}
.leading-reward-wrapper {
width: 165px;
height: 100%;
}
.advance-reward-wrapper {
width: 165px;
height: 100%;
}
.banner-wrapper {
display: flex;
justify-content: center;
align-items: center;
img {
width: 30px;
height: 30px;
}
span {
display: inline-block;
text-align: center;
color: #fff;
font: {
size: 1.5rem;
family: "FZ-ZHUOHEI";
weight: 100;
}
}
}
}
}
.telsaler-list-wrapper {
flex-grow: 1;
display: flex;
justify-content: center;
align-items: center;
span {
display: block;
text-align: center;
color: rgb(101, 140, 194);
margin-top: 0px;
font: {
size: 2rem;
family: "FZ-ZHUOHEI";
weight: 100;
}
}
}
</style>
</style>

View File

@ -1,166 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-06-06 11:01:01
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/RankingListComponent.vue
* @Description: 排行榜组件
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="rankinglist-wrapper">
<div class="rankinglist-title">
<span>{{ props.title }}</span>
</div>
<el-table
:data="topFive"
stripe
style="width:100%;"
:header-cell-style="{background:'#fecb96'}"
>
<el-table-column
label="名次"
width="60"
align="center"
>
<template #default="ranking">
<span class="rankinglist-index">{{ ranking.row.index }}</span>
</template>
</el-table-column>
<el-table-column
label="名称"
width="160"
align="center"
>
<template #default="ranking">
<span class="rankinglist-index">{{ ranking.row.callerName }}</span>
</template>
</el-table-column>
<el-table-column
label="指标"
width="80"
align="center"
>
<template #default="ranking">
<span class="rankinglist-index">{{ ranking.row.appraiseValue }}%</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script lang="ts">
/* eslint-disable */
import { computed } from "vue";
interface RankingListItem
{
index: number;
callerName: string;
appraiseValue: string;
}
export default {
name: "RankingListComponent",
props: {
title: {
type: String,
require: true,
default: () => "",
},
rankingList: {
type: Array,
require: true,
default: () => [],
},
},
/**
* setup函数
* @param props 组件的props属性
*/
setup(props)
{
/**
* 计算对象用于获取top5.
*/
const topFive = computed(() =>
{
const rankingList = props.rankingList; // eslint-disable-line
rankingList.sort((a, b) =>
{
// @ts-ignore
return a.index - b.index;
});
return rankingList.slice(0, 5);
});
return { props, topFive, };
},
};
</script>
<style lang="scss" scoped>
.rankinglist-wrapper {
// border: 1px solid red;
border-radius: 5px;
width: 300px;
height: 270px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-bottom: 15px;
}
.rankinglist-index {
display: block;
text-align: center;
}
:deep(.el-table)
{
border-radius: 0px 0px 5px 5px;
}
:deep(.el-table__header-wrapper) {
thead {
th{
div{
// font-family: "FZ-ZHUOHEI";
font-weight: 500;
font-size: 15px;
color: #da3703;
}
}
}
}
.rankinglist-title {
color: #da3703;
background-color: #fecc96;
width: 100%;
border-radius: 5px 5px 0px 0px;
height: 1.5rem;
display: flex;
justify-content: center;
align-items: center;
padding-top: 10px;
padding-bottom: 0px;
span {
font: {
size: 1rem;
weight: 700;
}
}
}
</style>

View File

@ -34,7 +34,7 @@ class StaffInfo
return this._stuffCode;
}
public set stuffCode( stuffCode: string )
public set stuffCode(stuffCode: string)
{
this._stuffCode = stuffCode;
}
@ -44,7 +44,7 @@ class StaffInfo
return this._stuffName;
}
public set stuffName( stuffName: string )
public set stuffName(stuffName: string)
{
this._stuffName = stuffName;
}
@ -54,12 +54,12 @@ class StaffInfo
return this._p13uid;
}
public set P13UID( p13uid: string )
public set P13UID(p13uid: string)
{
this._p13uid = p13uid;
}
public set departmentCode( departmentCode: string )
public set departmentCode(departmentCode: string)
{
this._departmentCode = departmentCode;
}
@ -69,7 +69,7 @@ class StaffInfo
return this._departmentCode;
}
public set departmentName( departmentName: string )
public set departmentName(departmentName: string)
{
this._departmentName = departmentName;
}

View File

@ -1,86 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-03-23 15:07:31
* @LastEditors: Kane
* @FilePath: /task_schedule/src/layout/Index.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<el-container class="layout-container">
<el-header class="layout-header">
<LayoutHeader />
</el-header>
<el-container class="layout-container-down">
<el-aside class="layout-aside">
<LayoutAside />
</el-aside>
<el-main class="layout-main">
<LayoutMain />
</el-main>
</el-container>
</el-container>
</template>
<script lang="ts">
//
import LayoutHeader from "./components/Header.vue";
import LayoutAside from "./components/Aside.vue";
import LayoutMain from "./components/Main.vue";
export default {
name: "MainFrame",
components: {
LayoutHeader,
LayoutAside,
LayoutMain,
},
setup()
{
return {};
},
};
</script>
<style lang="scss" scoped>
@media screen {
.layout-container {
height: 100vh;
width: 100vw;
max-height: 100vh;
max-width: 100vw;
.layout-header {
height: 50px;
width: 100vw;
max-height: 50px;
max-width: 100vw;
padding: 0px;
}
.layout-container-down {
height: calc(100vh - 50px);
max-height: calc(100vh - 50px);
width: 100vw;
max-width: 100vw;
.layout-aside {
height: calc(100vh - 50px);
max-height: calc(100vh - 50px);
min-height: calc(100vh - 50px);
width: 200px;
overflow-x: hidden;
background-color: #2f4156;
}
.layout-main {
padding: 0px;
height: calc(100vh - 50px);
width: calc(100vw - 200px);
}
}
}
}
</style>

View File

@ -1,157 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-03-23 15:40:08
* @LastEditors: Kane
* @FilePath: /task_schedule/src/layout/components/Aside.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<el-scrollbar class="sidebar-wrapper">
<el-menu
class="side-bar"
router
:default-active="currentPath"
background-color="#2f4156"
text-color="#fff"
active-text-color="#ffd04b"
>
<template v-for="route in routes">
<template v-if="!route.hidden">
<template v-if="hasOnlyChild(route.children)">
<!-- 当只有一个子路由时将这个子路由作为顶级菜单项 -->
<el-menu-item
:key="route.children[0].path"
:index="route.children[0].path"
class="sidebar-submenu"
>
<component
:is="route.children[0] && route.children[0].meta.icon"
class="icons"
/>
<template #title>
{{ route.children[0].meta && route.children[0].meta.title }}
</template>
</el-menu-item>
</template>
<template v-else>
<!-- 不止一个子路由可能是咩有子s路由或者有多个子路由 -->
<!-- 如果没有子路由就不渲染 -->
<el-sub-menu
v-if="route.children && route.children.length"
:key="route.path"
:index="route.path"
class="sidebar-submenu"
>
<template #title>
<component
:is="route.meta && route.meta.icon"
class="icons"
/>
<span>{{ route.meta && route.meta.title }}</span>
</template>
<template v-for="child in route.children">
<el-menu-item
v-if="!child.hidden"
:key="child.path"
:index="child.path"
class="sidebar-item"
>
<component
:is="child.meta && child.meta.icon"
class="icons"
/>
<template #title>
{{ child.meta && child.meta.title }}
</template>
</el-menu-item>
</template>
</el-sub-menu>
</template>
</template>
</template>
</el-menu>
</el-scrollbar>
</template>
<script lang="js">
// @ts-expect-error
import { hasOnlyChild } from "@/router/index.js";
import { useRoute, useRouter } from "vue-router";
// import { useRoute, useRouter, type RouteRecordNormalized, type _RouteRecordBase } from "vue-router";
import { computed } from "vue";
// declare interface SideBarRouteRecordNormalized extends RouteRecordNormalized
// {
// hidden?: boolean;
// }
// declare interface SideBarRouteRecordSingleView extends _RouteRecordBase
// {
// }
export default {
name: "LayoutAside",
setup()
{
const router = useRouter();
const routes = router.getRoutes();// as SideBarRouteRecordNormalized[];
const currentPath = computed(() =>
{
return useRoute().path;
});
return { routes, currentPath, hasOnlyChild, };
},
};
</script>
<style lang="scss" scoped>
.sidebar-wrapper {
@include no-select;
height: 100%;
width: 100%;
}
:deep(.el-menu) {
border-right: none;
/* border-left: 5px solid #1d74b2; */
overflow: auto;
.el-menu-item {
font-weight: normal;
}
.el-sub-menu {
font-weight: normal;
}
.el-menu-item.is-active {
// background-color: #ffffff1f !important;
font-weight: 1000;
font-size: 15px;
color: #ffd04b;
}
}
.sidebar-submenu {
background-color: #2f4156 !important;
}
.sidebar-item {
background-color: #223142 !important;
}
/* .is-opened {
border-left: 5px solid #1d74b2;
} */
.icons {
width: 1em;
height: 1em;
margin-right: 8px;
}
</style>

View File

@ -1,120 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-03-23 15:12:07
* @LastEditors: Kane
* @FilePath: /task_schedule/src/layout/components/Header.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="header-wrapper">
<span class="company-name">CPIC</span>
<div class="version-wrapper">
<span>桌面霸屏后台管理</span>
<span>Build-20230915</span>
</div>
<div class="buttons-wrapper">
<component
:is="'SwitchButton'"
class="icons"
@click="Logout"
/>
</div>
</div>
</template>
<script lang="ts">
import { ElMessageBox } from "element-plus";
import { logout } from "@/utils/account.js";
export default {
name: "LayoutHeader",
setup()
{
/**
* 退出登录
*/
const Logout = (): void =>
{
ElMessageBox.confirm(
"是否要退出系统?",
"",
{
confirmButtonText: "是",
cancelButtonText: "否",
type: "warning",
}
)
.then((): void =>
{
// debugger;
logout();
})
.catch((): void => {});
};
return { Logout, };
},
};
</script>
<style lang="scss" scoped>
.header-wrapper {
@include no-select;
height: 50px;
max-height: 50px;
padding: 0px 15px;
// position: relative;
display: flex;
justify-content: start;
align-items: center;
color: #fff;
background-color: $banner-background-color;
span {
text-align: left;
}
>*+* {
margin-left: 10px;
}
.version-wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: start;
font: {
size: 0.75rem;
}
>*+* {
margin-top: 1px;
}
}
.company-name {
font-size: 2rem;
}
.buttons-wrapper {
margin-left: auto;
padding-top: 5px;
// border: 1px solid salmon;
}
.icons {
width: 25px;
height: 25px;
// margin-right: 8px;
cursor: pointer;
}
}
</style>

View File

@ -1,42 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-03-23 15:44:52
* @LastEditors: Kane
* @FilePath: /task_schedule/src/layout/components/Main.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<!--
* @Author: Kane
* @Date: 2023-01-04 11:40:03
* @LastEditors: Kane
* @LastEditTime: 2023-09-27 11:19:05
* @FilePath: /it-console/src/layout/components/Main.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<el-scrollbar>
<router-view />
</el-scrollbar>
</template>
<script lang="ts">
export default {
name: "LayoutMain",
setup()
{
return {};
},
};
</script>
<style scoped>
.el-scrollbar {
height: 100%;
width: 100%;
/* background-color: #ecf2f9; */
}
</style>

View File

@ -2,36 +2,37 @@
* @Author: Kane
* @Date: 2023-02-15 09:25:52
* @LastEditors: Kane
* @LastEditTime: 2023-04-04 08:57:51
* @LastEditTime: 2023-03-03 15:50:08
* @FilePath: /task_schedule/src/main.js
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { createApp } from "vue";
import { createApp } from 'vue';
import { router } from "./router/index";
import store from "@/store/index";
import App from "./App.vue";
import App from './App.vue';
// css
import "./style.scss";
//css
import './style.css';
import "./assets/css/index.scss";
import("element-plus/dist/index.css");
// element-plus
//element-plus
import ElementPlus from "element-plus";
import * as ElementPlusIconsVue from "@element-plus/icons-vue";
import( "element-plus/dist/index.css" );
const app = createApp( App );
const app = createApp(App);
// 注册element-plus的图标
for ( const [key, component,] of Object.entries( ElementPlusIconsVue ))
//注册element-plus的图标
for (const [key, component,] of Object.entries(ElementPlusIconsVue))
{
app.component( key, component );
app.component(key, component);
}
app.use( ElementPlus );
app.use( router );
app.use( store );
app.mount( "#app" );
app.use(ElementPlus);
app.use(router);
app.use(store);
app.mount('#app');

View File

@ -1,20 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-03-26 23:30:16
* @LastEditors: Kane
* @FilePath: /task_schedule/src/router/index.d.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { type RouteRecordNormalized, type RouteRecordRaw } from "vue-router";
export declare interface SideBarRouteRecordNormalized extends RouteRecordNormalized
{
hidden?: boolean;
}
export declare let route: SideBarRouteRecordNormalized;
// export declare interface SideBarRouteRecordRaw extends RouteRecordRaw
// {}

View File

@ -3,9 +3,9 @@
* @Date: 2023-02-28 01:22:48
* @LastEditors: Kane
* @FilePath: /task_schedule/src/router/index.js
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { createRouter, createWebHashHistory } from "vue-router";
@ -21,74 +21,19 @@ const routes = [
path: "/login",
name: "Login",
hidden: true,
component: async () => await import( "@/views/Login.vue" ),
component: () => import("@/views/Login.vue"),
},
{
path: "/public",
name: "Public",
hidden: true,
component: () => import("@/views/Public.vue"),
},
// 桌面霸屏
{
path: "/desktop_archievement",
name: "DesktopArchievement",
hidden: true,
component: async () => await import( "@/views/DesktopArchievement.vue" ),
},
// 工作台
{
path:"/console",
name:"Console",
meta: {
title: "总览",
icon: "house",
},
component: ()=> import( "../layout/Index.vue" ),
children:[
{
path:"/desktop",
name:"Desktop",
meta: {
title:"工作台",
icon: "house",
},
component: ()=> import( "../views/Desktop.vue" ),
},
],
},
//数据管理
{
path:"/data",
name:"Data",
meta:{
title:"数据管理",
icon: "document",
},
component: ()=> import( "../layout/Index.vue" ),
children:[
{
path:"/telsaler_data",
name:"TelsalerManagement",
meta: {
title:"坐席管理",
icon: "user",
},
component: ()=> import( "../views/telsaler/TelsalerManagementView.vue" ),
},
{
path: "/data_management",
name: "DataManagement",
meta: {
title: "数据管理",
icon: "document",
},
component: ()=> import( "../views/data/DataManagement.vue" ),
},
{
path:"/reward_management",
name:"RewardManagement",
meta: {
title:"奖励管理",
icon: "document",
},
component: ()=> import( "../views/RewardManagement.vue" ),
},
],
component: () => import("@/views/DesktopArchievement.vue"),
},
];
@ -99,31 +44,10 @@ const router = createRouter(
}
);
// 路由守卫
//路由守卫
// router.beforeEach((to) =>
// {
// });
// 工具函数
function hasOnlyChild( children )
{
if ( !children )
{
return false;
}
const routes = children.filter(( item )=>
{
return !item.hidden;
});
if ( routes.length === 1 )
{
return true;
}
return false;
}
export { router, hasOnlyChild };
export { router };

View File

@ -1,8 +1,8 @@
/* html {
html {
background-image: url("@/assets/img/bg/bg_01.jpg");
background-attachment: fixed;
background-size: contain;
} */
}
body {
width: 100vw;
@ -10,6 +10,4 @@ body {
padding: 0px;
margin: 0px;
overflow: hidden;
@include no-select;
}
}

View File

@ -1,6 +1,6 @@
/*
* @Author: Kane
* @Date: 2023-04-27 15:29:10
* @Date: 2023-03-02 15:48:44
* @LastEditors: Kane
* @FilePath: /task_schedule/src/test/test.ts
* @Description:
@ -8,11 +8,21 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
// import { testRankingListRequest } from "./testRankingListRequest.js";
import { type LoginInfo, login } from "../utils/account.js";
// testRankingListRequest();
const loginInfo: LoginInfo = {
p13account: "wangwei-202",
password: "Kane@1983",
};
const arr: string[] = [];
login(loginInfo)
.then((response: any) =>
{
const data = response.data ?? {};
console.log( "test" );
console.log( "检查instanceof", arr instanceof String );
console.log(data);
})
.catch((error: any) =>
{
console.log(error);
});

View File

@ -14,12 +14,13 @@
"target": "ESNext",
"module": "ESNext",
// "module": "CommonJS",
"moduleResolution": "node",
// "moduleResolution": "node",
"moduleResolution": "nodenext",
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"esModuleInterop": false,
"baseUrl": "./", // paths
"paths": { //
"@/*": [
@ -45,8 +46,5 @@
],
"exclude": [
"./node_modules",
],
"ts-node": {
"esm": true
},
]
}

View File

@ -1,17 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-05-09 22:03:26
* @LastEditors: Kane
* @FilePath: /task_schedule/src/data/cpicxim/Department.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
interface Department
{
departmentName: string;
departmentCode: string;
}
export { type Department };

View File

@ -1,18 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-06-06 17:44:48
* @LastEditors: Kane
* @FilePath: /task_schedule/src/types/cpicxim/RankingListItem.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
interface RankingListItem
{
index: number;
callerName: string;
appraiseValue: string;
}
export { type RankingListItem };

View File

@ -1,21 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-05-09 22:18:04
* @LastEditors: Kane
* @FilePath: /task_schedule/src/types/cpicxim/TelSaler.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
interface TelSaler
{
telSalerCode: string;
telSalerName: string;
teamCode: string;
teamName: string;
departmentCode: string;
departmentName: string;
}
export { type TelSaler };

View File

@ -1,79 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-10-17 11:18:19
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/BIReport.ts
* @Description: BI报表相关的代码
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
import { service as instance } from "./api/request.js";
import { API_URL } from "./api/config.js";
import { type AxiosResponse } from "axios";
interface BIReportType
{
reportTypeCode: number;
reportTypeName: string;
}
interface ImportBIReportRequest
{
filePath: string,
reportType: number,
firstRow: number,
sheetIndex: number,
}
interface ImportBIReportResponse
{
success: boolean,
message: string,
importedCount: number,
}
type ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error?: any ) => void;
/**
*
* @param request
* @param handler
*/
function importBIReport( request: ImportBIReportRequest, handler: any ): void
{
const importResponse: ImportBIReportResponse = {
success: false,
message: "",
importedCount: 0,
};
instance.request({
url: API_URL.URL_IMPORT_REPORT,
method: "post",
data: request,
})
.then(( response: AxiosResponse<any, any> ): any =>
{
const data: ImportBIReportResponse = response.data;
importResponse.success = data.success ?? false;
importResponse.message = data.message ?? "";
importResponse.importedCount = data.importedCount ?? 0;
handler( importResponse, null );
})
.catch(( error: any ): any =>
{
importResponse.message = "请求导入报表错误,请查看控制台!";
console.log( error );
handler( importResponse, error );
});
}
export {
type BIReportType,
type ImportBIReportRequest,
type ImportBIReportResponse,
type ImportBIReportResponseHandler,
importBIReport
};

View File

@ -7,89 +7,25 @@
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { type AxiosResponse } from "axios";
import { service as instance } from "./api/request.js";
import { API_URL } from "./api/config.js";
import { cleanStaffInfo, clearCallerInfo } from "./api/localStorage.js";
// @ts-expect-error 之后再补充类型文件
import { router } from "../router/index.js";
// declare const require: any;
// const { router, } = require( "../router/index.js" );
interface LoginInfo
{
p13account: string;
password: string;
}
interface LoginCallerInfo
{
telsaler_code: string;
}
interface RequestResult
{
success: boolean;
message: string;
}
interface LoginCallerResult extends RequestResult
{
tel_saler_code: string;
tel_saler_name: string;
team_code: string;
team_name: string;
department_code: string;
department_name: string;
}
/**
*
* @param data
* @returns Promise对象
*/
async function login( data: LoginInfo ): Promise<AxiosResponse<any, any>>
async function login(data: LoginInfo): Promise<AxiosResponse<any, any>>
{
return await instance.request(
{
method: "post",
url: API_URL.URL_LOGIN,
data,
});
}
);
}
/**
*
* @param data
* @returns Promise对象
*/
async function loginCaller( data: LoginCallerInfo ): Promise<AxiosResponse<any, any>>
{
return await instance.request(
{
method: "post",
url: API_URL.URL_LOGIN_CALLER,
data,
});
}
/**
* 退
*/
function logout(): void
{
cleanStaffInfo();
clearCallerInfo();
void router.push( "/login" );
}
export {
type LoginInfo,
type LoginCallerInfo,
type LoginCallerResult,
login,
loginCaller,
logout
};
export { type LoginInfo, login };

View File

@ -1,12 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-09-14 00:22:04
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/api/eventBus.ts
* @Description: 线
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import mitt from "mitt";
export default mitt();

View File

@ -7,49 +7,7 @@
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
const API_URL = {
export const API_URL = {
// URL_LOGIN: import.meta.env.VITE_URL_LOGIN,
// URL_LOGIN: "http://222.76.244.118:11101/admin-system/account/p13_account_check",
URL_LOGIN: "http://10.39.0.41:8081/admin-system/account/p13_account_check",
// URL_LOGIN_CALLER: "http://localhost:8080/desktop_archievement_backend/account/query_telsaler_info.do",
// URL_LOGIN_CALLER: "http://222.76.244.118:11101/desktop_archievement_backend/account/query_telsaler_info.do",
URL_LOGIN_CALLER: "http://10.39.0.41:8081/desktop_archievement_backend/account/query_telsaler_info.do",
// URL_DEPARTMENT_ARCHIEVEMENT: import.meta.env.VITE_URL_DEPARTMENT_ARCHIEVEMENT,
// URL_DEPARTMENT_ARCHIEVEMENT: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do",
URL_DEPARTMENT_ARCHIEVEMENT: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_department_archievement.do",
// URL_RANKINGLIST: "http://localhost:8080/desktop_archievement_backend/archievement/query_ranking_list.do",
// URL_RANKINGLIST: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_ranking_list.do",
URL_RANKINGLIST: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_ranking_list.do",
// 坐席业绩查询
// URL_CALLER_ARCHIEVEMENT: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_caller_archievement.do",
URL_CALLER_ARCHIEVEMENT: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_caller_archievement.do",
/** 奖项相关 **/
// 查询奖励项目
// URL_RWARD_PROJECTS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_projects.do",
URL_RWARD_PROJECTS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_projects.do",
// 查询获奖人员
URL_REWARD_GAINERS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_gainers.do",
// URL_REWARD_GAINERS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_gainers.do",
// 添加获奖人员
URL_ADD_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/add_telsaler_reward.do",
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/add_telsaler_reward.do",
// 更新获奖人员
URL_UPDATE_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/update_telsaler_reward.do",
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/update_telsaler_reward.do",
// 删除获奖人员
URL_DEL_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/delete_telsaler_reward.do",
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/delete_telsaler_reward.do",
// 上传文件
URL_UPLOAD_FILE: "http://10.39.0.41:8081/desktop_archievement_backend/file/file-upload.do",
// URL_UPLOAD_FILE: "http://222.76.244.118:11101/desktop_archievement_backend/file/file-upload.do",
// 导入报表
URL_IMPORT_REPORT: "http://10.39.0.41:8081/desktop_archievement_backend/import_bi_data/excel.do",
// URL_IMPORT_REPORT: "http://222.76.244.118:11101/desktop_archievement_backend/import_bi_data/excel.do",
URL_LOGIN: "http://222.76.244.118:11001/admin-system/account/p13_account_check",
};
export { API_URL };

View File

@ -7,12 +7,9 @@
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { StaffInfo } from "../../types/cpicxim/StaffInfo.js";
import { type TelSaler } from "@/types/cpicxim/TelSaler.js";
import { StaffInfo } from "@/data/cpicxim/StaffInfo.js";
const STUFF_ITEM = "stuff_info";
const CALLER_ITEM = "call_info";
const USER_TYPE_ITEM = "user_type";
function loadStaffInfo(): StaffInfo
{
@ -20,9 +17,9 @@ function loadStaffInfo(): StaffInfo
try
{
obj = JSON.parse( window.localStorage.getItem( STUFF_ITEM ) ?? "{}" );
obj = JSON.parse(window.localStorage.getItem(STUFF_ITEM) ?? "{}");
}
catch ( error )
catch (error)
{
obj = {};
}
@ -34,82 +31,16 @@ function loadStaffInfo(): StaffInfo
obj._department_code ?? "",
obj._department_name ?? "",
obj._section_office_code ?? "",
obj._section_office_name ?? "" );
obj._section_office_name ?? "");
return stuff;
}
function saveStaffInfo( stuff: StaffInfo ): void
function saveStaffInfo(stuff: StaffInfo): void
{
const json = JSON.stringify( stuff );
const json = JSON.stringify(stuff);
window.localStorage.setItem( STUFF_ITEM, json );
}
function cleanStaffInfo(): void
{
window.localStorage.removeItem( STUFF_ITEM );
}
function saveUserType( userType: string ): void
{
window.localStorage.setItem( USER_TYPE_ITEM, userType );
}
function getUserType(): string
{
const userType = window.localStorage.getItem( USER_TYPE_ITEM ) ?? "";
return userType;
}
function saveCallerInfo( callerInfo: TelSaler ): void
{
const json = JSON.stringify( callerInfo );
window.localStorage.setItem( CALLER_ITEM, json );
}
function getCallerInfo(): TelSaler
{
const json = window.localStorage.getItem( CALLER_ITEM ) ?? "";
let storeCallerInfo = null;
try
{
storeCallerInfo = JSON.parse( json );
}
catch ( error )
{
storeCallerInfo = {};
}
const callInfo: TelSaler = {
telSalerCode: storeCallerInfo.telSalerCode ?? "",
telSalerName: storeCallerInfo.telSalerName ?? "",
teamCode: storeCallerInfo.teamCode ?? "",
teamName: storeCallerInfo.teamName ?? "",
departmentCode: storeCallerInfo.departmentCode ?? "",
departmentName: storeCallerInfo.departmentName ?? "",
};
return callInfo;
}
function clearCallerInfo(): void
{
window.localStorage.removeItem( CALLER_ITEM );
}
export
{
loadStaffInfo,
saveStaffInfo,
cleanStaffInfo,
saveUserType,
getUserType,
saveCallerInfo,
getCallerInfo,
clearCallerInfo
window.localStorage.setItem(STUFF_ITEM, json);
};
export { loadStaffInfo, saveStaffInfo };

View File

@ -1,64 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-06-12 14:48:55
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/api/loginRequest.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import axios, { type AxiosInstance } from "axios";
const loginInstance: AxiosInstance = axios.create(
{
baseURL: "",
timeout: 10000,
}
);
// 拦截器
// 登录用的请求不需要加上token。
loginInstance.interceptors.request.use(
/**
*
* token
* @param config axios传递的配置对象
* @returns axios的配置对象
*/
( config ) =>
{
return config;
},
/**
*
* @param reason axios
* @returns Promise对象
*/
async ( reason ) =>
{
return await Promise.reject( reason );
});
// 响应拦截器
loginInstance.interceptors.response.use(
/**
*
* @param response axios传递的响应结果
* @returns
*/
( response ) =>
{
return response;
},
/**
* 2xx时被调用
* @param error axios传递的错误内容
* @returns
*/
async ( error ) =>
{
return await Promise.reject( error );
});
export { loginInstance as instance };

View File

@ -8,9 +8,9 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import axios, { type AxiosInstance } from "axios";
import axios from "axios";
const service: AxiosInstance = axios.create(
const service = axios.create(
{
baseURL: "",
timeout: 10000,
@ -19,34 +19,27 @@ const service: AxiosInstance = axios.create(
// 请求拦截
service.interceptors.request.use(
/**
* token
* @param config ,token
* @returns
*/
( config ) =>
(config) =>
{
config.headers.token = "123";
return config;
},
async ( error ) =>
async (error) =>
{
console.log( error );
console.log(error);
return await Promise.reject( error );
return await Promise.reject(error);
}
);
// 响应拦截
service.interceptors.response.use(
( response ) =>
(response) =>
{
return response;
},
async ( error ) =>
async (error) =>
{
return await Promise.reject( error );
return await Promise.reject(error);
}
);

View File

@ -15,15 +15,15 @@ type stringkey = Record<string, string>;
* @param url 访url
* @returns
*/
function getURLParams( url: string ): Record<string, string>
function getURLParams(url: string): Record<string, string>
{
const arr = url.split( "?" );
const params = arr[1].split( "&" );
const arr = url.split("?");
const params = arr[1].split("&");
const obj: stringkey = {};
for ( let i = 0; i < params.length; i++ )
for (let i = 0; i < params.length; i++)
{
const param = params[i].split( "=" );
const param = params[i].split("=");
obj[param[0]] = param[1];
}
@ -36,44 +36,44 @@ function getURLParams( url: string ): Record<string, string>
* @param url url字符串
* @returns url中参数作为keyvalue的对象
*/
function getParamsFromURL( url: string ): stringkey
function getParamsFromURL(url: string): stringkey
{
const indexOfQuestionMark: number = url.indexOf( "?" );
const indexOfSharp: number = url.indexOf( "#" );
const indexOfQuestionMark: number = url.indexOf("?");
const indexOfSharp: number = url.indexOf("#");
const paramObj: stringkey = {};
let paramString;
// url中没有问号说明没有参数
if ( indexOfQuestionMark < 0 )
if (indexOfQuestionMark < 0)
{
return paramObj;
}
// 检查是否有#号
if ( indexOfSharp < 0 )
if (indexOfSharp < 0)
{
// 没有#号,可以直接截取参数字符串
paramString = url.substring( indexOfQuestionMark );
// 没有#号,可以直接截取参数字符串
paramString = url.substring(indexOfQuestionMark);
}
else
{
// 有#号,截取?和#之间的字符串
// 有#号,截取?和#之间的字符串
const end: number = indexOfQuestionMark < indexOfSharp ? indexOfSharp : url.length;
paramString = url.substring( indexOfQuestionMark + 1, end );
paramString = url.substring(indexOfQuestionMark + 1, end);
}
// 拆分属性
const paramArray: string[] = paramString.split( "&" );
const paramArray: string[] = paramString.split("&");
paramArray.forEach(( item ) =>
paramArray.forEach((item) =>
{
if ( item.length === 0 )
if (item.length === 0)
{
return;
}
const param = item.split( "=" );
const param = item.split("=");
paramObj[param[0]] = param[1] ?? "";
});

View File

@ -1,253 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-03-17 15:17:44
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/archievement.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { service as instance } from "./api/request.js";
import { API_URL } from "./api/config.js";
import { type Department } from "../types/cpicxim/Department.js";
import { type TelSaler } from "../types/cpicxim/TelSaler.js";
import { type AxiosResponse } from "axios";
interface DepartmentArchievement // 定义业绩对象的结构
{
success: boolean;
message: string;
total_archievement: number;
mensual_archievement_list: number[];
insurance_renewal_rate: string;
attaching_rate: string;
leading_reward_gainers: string[];
advance_reward_gainers: string[];
backward_list: string[];
}
interface CallerArchievement // 坐席业绩对象
{
success: boolean;
message: string;
total_archievement: number;
moto_premium_present_month: number;
mensual_archievement_list: number[];
insurance_renewal_rate: string;
attaching_rate: string;
}
interface MenusalArchievementItem // 每月业绩清单的项目
{
month: number;
premium: string;
}
/**
*
* @param departmentInfo
* @param render DepartmentArchievement对象调用
*/
function queryDepartmentArchievement( departmentInfo: Department, render: any ): void
{
// 默认的部门业绩对象
const archievement: DepartmentArchievement = {
success: false,
message: "",
total_archievement: 0,
mensual_archievement_list: [],
insurance_renewal_rate: "",
attaching_rate: "",
leading_reward_gainers: [],
advance_reward_gainers: [],
backward_list: [],
};
instance.request({
method: "post",
url: API_URL.URL_DEPARTMENT_ARCHIEVEMENT,
data: departmentInfo,
})
// 请求结束,将请求的结果写入业绩对象,然后调用功能渲染函数。
.then(( response ) =>
{
const data = response.data ?? {};
archievement.success = data.success ?? false;
archievement.message = data.message ?? "服务器没有返回调用结果消息,请检查日志!";
archievement.total_archievement = data.total_archievement;
archievement.mensual_archievement_list = [];
archievement.insurance_renewal_rate = data.insurance_renewal_rate ?? "0.0";
archievement.attaching_rate = data.attaching_rate ?? "0.0";
archievement.leading_reward_gainers = data.leading_reward_gainers ?? [];
archievement.advance_reward_gainers = data.advance_reward_gainers ?? [];
archievement.backward_list = data.backward_list ?? [];
// 转换每月业绩数据用month排序以后保留premium。
data.mensual_archievement_list.sort(( a: any, b: any ) => a.month - b.month );
data.mensual_archievement_list.forEach(( item: any ) =>
{
archievement.mensual_archievement_list.push( item.premium );
});
console.log( "每月业绩", archievement );
// 调用渲染函数
if ( render !== undefined )
{
render( archievement );
}
})
// 请求失败,将失败原因写入业绩对象,调用渲染函数
.catch(( error ) =>
{
archievement.success = false;
archievement.message = String( error );
// 调用渲染函数
if ( render !== undefined )
{
render( archievement );
}
console.log( `queryDepartmentArchievement:查询部门${departmentInfo.departmentCode}业绩失败,原因${error}` );
});
}
/**
* .
* 1
* 2012
* 3
* 4使message写入业绩对象
* @param callerInfo
* @param render CallerArchievement作为参数
*/
function queryCallerArchievement( callerInfo: TelSaler, render: any ): void
{
const caller = {
callerCode: callerInfo.telSalerCode,
callName: callerInfo.telSalerName,
};
// 默认的业绩对象
const callArchievement: CallerArchievement = {
success: false,
message: "",
total_archievement: 0,
moto_premium_present_month: 0,
mensual_archievement_list: [],
insurance_renewal_rate: "0.0",
attaching_rate: "0.0",
};
// 发送请求
instance.request({
method: "post",
url: API_URL.URL_CALLER_ARCHIEVEMENT,
data: caller,
})
// 请求完成时
.then(( response: AxiosResponse<any, any> ) =>
{
const data = response.data ?? {};
console.log( "个人业绩数据", data );
callArchievement.success = data.success ?? false;
callArchievement.message = data.message ?? "服务器没有返回调用结果消息,请检查日志!";
callArchievement.total_archievement = data.total_archievement ?? 0;
callArchievement.moto_premium_present_month = data.motoPremiumPresentMonth ?? 0;
callArchievement.mensual_archievement_list = [];
callArchievement.insurance_renewal_rate = data.insurance_renewal_rate ?? "0.0";
callArchievement.attaching_rate = data.attaching_rate ?? "0.0";
// 检查业绩清单有没有缺漏缺漏的用0补上
const checkedList = checkMensualArchievement( data.mensual_archievement_list );
// 排序一下
checkedList.sort(( a: MenusalArchievementItem, b: MenusalArchievementItem ): number =>
{
return a.month - b.month;
});
// 将排序后的每月业绩写到业绩对象中
checkedList.forEach(( item: MenusalArchievementItem ): void =>
{
const premium = Number( item.premium );
callArchievement.mensual_archievement_list.push( premium );
});
// 调用渲染函数
if ( render !== undefined )
{
render( callArchievement );
}
console.log( `queryCallerArchievement查询结果${data}` );
})
// 请求失败将失败的原因保存到message属性调用渲染函数
.catch(( error: any ) =>
{
callArchievement.success = false;
callArchievement.message = String( error );
// 调用渲染函数
if ( render !== undefined )
{
render( callArchievement );
}
console.log( `queryCallerArchievement:查询坐席${callerInfo.telSalerCode}业绩失败,原因${error}` );
});
}
/**
* 0
* 12
* @param mensualArchievementList MenusalArchievementItem类型的数组
* @returns MenusalArchievementItem数组
*/
function checkMensualArchievement( mensualArchievementList: MenusalArchievementItem[]): MenusalArchievementItem[]
{
const checkedList: MenusalArchievementItem[] = [];
const itemMap = new Map();
itemMap.set( 1, "0" );
itemMap.set( 2, "0" );
itemMap.set( 3, "0" );
itemMap.set( 4, "0" );
itemMap.set( 5, "0" );
itemMap.set( 6, "0" );
itemMap.set( 7, "0" );
itemMap.set( 8, "0" );
itemMap.set( 9, "0" );
itemMap.set( 10, "0" );
itemMap.set( 11, "0" );
itemMap.set( 12, "0" );
mensualArchievementList.forEach(( item: MenusalArchievementItem ): void =>
{
itemMap.set( item.month, item.premium );
});
itemMap.forEach(( value, key, map ) =>
{
const item: MenusalArchievementItem = {
month: key,
premium: value,
};
checkedList.push( item );
});
return checkedList;
}
export {
queryDepartmentArchievement,
queryCallerArchievement,
type DepartmentArchievement,
type CallerArchievement
};

View File

@ -1,20 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-09-27 14:13:47
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/fileUpload.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
interface FileUploadResponse
{
success: boolean;
message: string;
fileList: string[];
}
export {
type FileUploadResponse
};

View File

@ -1,116 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-06-06 17:40:31
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/ranking.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { service as instance } from "./api/request.js";
import { API_URL } from "./api/config.js";
import { type RankingListItem } from "../types/cpicxim/RankingListItem.js";
/**
*
*/
interface RankingListRequest
{
departmentCode: string;
year: string;
month: string;
}
interface RankingListResponse
{
success: boolean;
message: string;
departmentCode: string;
year: string;
month: string;
attachingRateRankingList: RankingListItem[];
renewalRateRankingList: RankingListItem[];
}
// 判断用的正则表达式
const regexMonth = "(0[1-9])|(1[0-2])";
/**
*
* @param reqParam
* @param rander
* @returns RankingListResponse对象
*/
function requestRankingList( reqParam: RankingListRequest, rander: any ): void // eslint-disable-line
{
// let attachingRankingList: RankingListItem[];
// let renewalRankintList: RankingListItem[];
const rankingListResponse: RankingListResponse = {
success: false,
message: "",
departmentCode: reqParam.departmentCode,
year: reqParam.year,
month: reqParam.month,
attachingRateRankingList: [],
renewalRateRankingList: [],
};
// 检查请求参数
// TODO: 这里要加一个对month的正则表达式验证。
instance.request(
{
method: "post",
url: API_URL.URL_RANKINGLIST,
data: reqParam,
})
.then(( response ) =>
{
const data: RankingListResponse = response.data as RankingListResponse;
rankingListResponse.success = data.success ?? false;
rankingListResponse.message = data.message ?? "";
rankingListResponse.departmentCode = data.departmentCode ?? "";
rankingListResponse.year = data.year ?? "";
rankingListResponse.month = data.month ?? "";
// 遍历排行榜元素
for ( const item of ( data.attachingRateRankingList ?? [] )) // eslint-disable-line
{
const index: number = item.index ?? -1;
if ( index === -1 )
{
continue;
}
rankingListResponse.attachingRateRankingList.push( item );
}
for ( const item of ( data.renewalRateRankingList ?? [] )) // eslint-disable-line
{
const index: number = item.index ?? -1;
if ( index === -1 )
{
continue;
}
rankingListResponse.renewalRateRankingList.push( item );
}
// 调用回调函数保存数据
rander( rankingListResponse );
})
.catch(( error ) =>
{
console.log( error );
});
}
export {
type RankingListRequest,
type RankingListResponse,
requestRankingList
};

View File

@ -1,346 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-09-11 09:59:00
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/reward.ts
* @Description: API
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { type AxiosResponse } from "axios";
import { service as instance } from "./api/request.js";
import { API_URL } from "./api/config.js";
interface RewardProject
{
rewardCode: number;
rewardName: string;
}
interface RewardProjectResponse
{
success: boolean;
message: string;
rewardList: RewardProject[] | null;
}
interface RewardGainer
{
recID: number;
callerName: string;
callerCode: string;
rewardProjectCode: string;
rewardProjectName: string;
}
interface RewardGainerResponse
{
success: boolean;
message: string;
gainerList: RewardGainer[] | null;
}
interface AddRewardTelsalerRequest
{
telsalerName: string;
rewardIndex: number;
}
interface AddRewardTelsalerResponse
{
success: boolean;
message: string;
}
interface UpdateRewardTelsalerRequest
{
recordID: number,
telsalerName: string;
rewardIndex: number;
}
interface UpdateRewardTelsalerResponse
{
success: boolean;
message: string;
}
interface DeleteRewardTelsalerRequest
{
recordID: number[];
}
interface DeleteRewardTelsalerResponse
{
success: boolean;
message: string;
}
/**
*
* @param handler
*/
function requestRewardPorjectsList( handler: any ): void
{
if ( handler === undefined || handler === null )
{
return;
}
const rewardResponse: RewardProjectResponse = {
success: false,
message: "",
rewardList: [],
};
instance.request({
url: API_URL.URL_RWARD_PROJECTS,
method: "post",
})
// 请求成功,检查服务器返回结果
.then(( response: AxiosResponse<any, any> ): void =>
{
const data = response.data ?? {};
rewardResponse.success = data.success ?? false;
rewardResponse.message = data.message ?? "";
rewardResponse.rewardList = checkRewardProjects( data.rewardList ?? []);
handler( rewardResponse, null );
})
.catch(( error: any ): void =>
{
console.log( error );
rewardResponse.success = false;
handler( rewardResponse, error );
});
}
/**
*
* @param handler
*/
function requestRewardGainers( handler: any ): void
{
if ( handler === undefined || handler === null )
{
return;
}
const rewardResponse: RewardGainerResponse = {
success: false,
message: "",
gainerList: [],
};
instance.request({
url: API_URL.URL_REWARD_GAINERS,
method: "post",
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data = response.data ?? {};
rewardResponse.success = data.success;
rewardResponse.message = data.message;
rewardResponse.gainerList = checkRewardGainers( data.gainerList );
handler( rewardResponse, null );
})
.catch(( error: any ): void =>
{
console.log( error );
rewardResponse.success = false;
handler( rewardResponse, error );
});
}
function addRewardTelsaler( data: AddRewardTelsalerRequest, handler: any ): void
{
if ( handler === undefined || handler === null )
{
return;
}
const addResponse: AddRewardTelsalerResponse = {
success: false,
message: "",
};
instance.request({
method: "post",
url: API_URL.URL_ADD_REWARD_TELSALER,
data,
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data: AddRewardTelsalerResponse = response.data ?? {};
addResponse.success = data.success ?? false;
addResponse.message = data.message ?? "";
handler( addResponse );
})
.catch(( error ): void =>
{
console.log( error );
addResponse.success = false;
addResponse.message = "请求添加获奖坐席失败,请查看控制台!";
handler( addResponse, error );
});
}
/**
* handler函数
* @param data
* @param handler
*/
function updateTelsalerReward( data: UpdateRewardTelsalerRequest, handler: any ): void
{
if ( handler === undefined || handler === null )
{
return;
}
const updateResponse: UpdateRewardTelsalerResponse = {
success: false,
message: "",
};
instance.request({
method: "post",
url: API_URL.URL_UPDATE_REWARD_TELSALER,
data,
})
.then(( response: AxiosResponse<any, any> ): any =>
{
const data: UpdateRewardTelsalerResponse = response.data ?? {};
updateResponse.success = data.success ?? false;
updateResponse.message = data.message ?? "";
handler( updateResponse );
})
.catch(( error: any ): void =>
{
updateResponse.success = false;
updateResponse.message = "请求更新获奖坐席失败,请查看控制台!";
console.log( error );
handler( updateResponse, error );
});
}
/**
*
* @param data
* @param handler
*/
function deleteRewardTelsaler( data: DeleteRewardTelsalerRequest, handler: any ): void
{
if ( handler === undefined || handler === null )
{
return;
}
const deleteResponse: DeleteRewardTelsalerResponse = {
success: false,
message: "",
};
instance.request({
method: "post",
url: API_URL.URL_DEL_REWARD_TELSALER,
data,
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data: DeleteRewardTelsalerResponse = response.data ?? {};
deleteResponse.success = data.success ?? false;
deleteResponse.message = data.message ?? "";
handler( deleteResponse );
})
.catch(( error: any ): void =>
{
deleteResponse.message = "请求删除获奖坐席失败,请检查日志!";
deleteResponse.success = false;
console.log( error );
handler( deleteResponse, error );
});
}
// **功能函数 **********************************/
function checkRewardProjects( data: any[]): RewardProject[] | null
{
const rewardList: RewardProject[] = [];
// 检查一下参数的类型,如果不是数组返回 null
if ( !( data instanceof Array ))
{
return null;
}
data.forEach(( item: any ) =>
{
const reward = {
rewardCode: item.rewardCode ?? "",
rewardName: item.rewardName ?? "",
};
rewardList.push( reward );
});
return rewardList;
}
function checkRewardGainers( gainers: any[]): RewardGainer[] | null
{
const gainerList: RewardGainer[] = [];
if ( !( gainers instanceof Array ))
{
return null;
}
gainers.forEach(( item: RewardGainer ): void =>
{
const gainer: RewardGainer = {
recID: item.recID ?? "",
callerName: item.callerName ?? "",
callerCode: item.callerCode ?? "",
rewardProjectCode: item.rewardProjectCode ?? "",
rewardProjectName: item.rewardProjectName ?? "",
};
gainerList.push( gainer );
});
return gainerList;
}
export {
type RewardProject,
type RewardGainer,
type RewardProjectResponse,
type RewardGainerResponse,
type DeleteRewardTelsalerRequest,
type DeleteRewardTelsalerResponse,
type AddRewardTelsalerRequest,
type AddRewardTelsalerResponse,
type UpdateRewardTelsalerRequest,
type UpdateRewardTelsalerResponse,
requestRewardPorjectsList,
requestRewardGainers,
addRewardTelsaler,
updateTelsalerReward,
deleteRewardTelsaler
};

View File

@ -1,32 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-03-23 16:05:08
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/Desktop.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="view-wrapper">
工作台
</div>
</template>
<script lang="ts">
export default {
name: "DeskTop",
setup()
{
return {};
},
};
</script>
<style lang="scss" scoped>
.view-wrapper
{
height: 2000px;
width: 2000px;
// background-color: aquamarine;
padding: 0px;
}
</style>

View File

@ -3,117 +3,47 @@
* @Date: 2023-03-03 14:38:07
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/DesktopArchievement.vue
* @Description: 桌面霸屏的主组件
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
* @Description: 显示在桌面上展示任务量与业绩的view
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div
v-if="ui.showUI"
class="view-wrapper"
tabindex="0"
@keyup.esc="logoutDesktopArchievement()"
>
<div class="view-wrapper">
<div class="center-wrapper">
<span class="slogan">对标先进&nbsp;比学赶超</span>
<div class="total-archievement-wrapper">
<span>我的车险业绩</span>
<span>总业绩</span>
<span>{{ getTotalArchievement }}</span>
</div>
<div class="archievement-wrapper">
<div class="total-archievement-rate-wrapper">
<ArchievementCompleteRateComponent
indicator="续保完成率"
:percentage="ui.insurance_renewal_rate"
/>
<ArchievementCompleteRateComponent
indicator="车非渗透率"
:percentage="ui.attaching_rate"
/>
<ArchievementCompleteRateComponent indicator="续保完成率" percentage=95 />
<ArchievementCompleteRateComponent indicator="车非完成率" percentage=95 />
</div>
<div class="total-archievement-charts-wrapper">
<ArchievementChart :chart-data="ui.chartData" />
<ArchievementChart total_archievement="435220" :chart_data="ui.chartData" />
</div>
</div>
<div class="reward-wrapper">
<HonorListComponent
:month="ui.currentMonth"
:leading-reward="ui.leading_reward_gainers"
:advance-reward="ui.advance_reward_gainers"
/>
<DishonorListComponent
:month="ui.currentMonth"
:dishonor-persons="ui.dishonorPersons"
/>
<HonorListComponent month="二" leading-reward="王炜" advance-reward="王炜" />
<DishonorListComponent month="二" :dishonorPersons="ui.dishonorPersons" />
</div>
</div>
<div class="right-wrapper">
<CallerArchievementComponent
:caller-name="callerInfo.telSalerName"
:this-month-premium="ui.callerPersentMonthPremium"
:attaching-rate="ui.callerAttachingRate"
:renewal-rate="ui.callerRenewalRate"
/>
<RankingListComponent
title="渗透率"
:ranking-list="ui.attachingRankingList"
/>
<RankingListComponent
title="续保率"
:ranking-list="ui.renewalRankingList"
/>
</div>
</div>
</template>
<script lang="ts">
import { computed, reactive, onBeforeMount, onUnmounted } from "vue";
import { computed, reactive } from "vue";
import { useRouter } from "vue-router";
import { getCallerInfo } from "@/utils/api/localStorage.js";
import { loadStaffInfo } from "@/utils/api/localStorage.js";
import { ElMessage } from "element-plus";
import
{
type DepartmentArchievement,
type CallerArchievement,
queryDepartmentArchievement,
queryCallerArchievement
} from "@/utils/archievement.js";
import { type RankingListItem } from "@/types/cpicxim/RankingListItem.js";
import
{
type RankingListRequest,
type RankingListResponse,
requestRankingList
} from "@/utils/ranking.js";
import { type Department } from "@/types/cpicxim/Department";
import ArchievementChart from "@/components/ArchievementChartComponent.vue";
import ArchievementCompleteRateComponent from "@/components/ArchievementCompleteRateComponent.vue";
import HonorListComponent from "@/components/HonorListComponent.vue";
import DishonorListComponent from "@/components/DishonorListComponent.vue";
import RankingListComponent from "@/components/RankingListComponent.vue";
import CallerArchievementComponent from "@/components/CallerArchievementComponent.vue";
import { logout } from "@/utils/account.js";
import { type TelSaler } from "@/types/cpicxim/TelSaler";
interface ui
{
currentMonth: string;
chartData: number[];
totalArchievement: number;
attaching_rate: string;
insurance_renewal_rate: string; //
leading_reward_gainers: string[]; //
advance_reward_gainers: string[]; //
dishonorPersons: string[];
showUI: boolean; //
attachingRankingList: RankingListItem[]; //
renewalRankingList: RankingListItem[];
callerAttachingRate: string;
callerRenewalRate: string;
callerPersentMonthPremium: number;
}
export default {
name: "DesktopArchievement",
@ -122,162 +52,32 @@ export default {
ArchievementCompleteRateComponent,
HonorListComponent,
DishonorListComponent,
RankingListComponent,
CallerArchievementComponent,
},
setup()
{
const monthIndex = new Date();
const thisMonth: number = monthIndex.getMonth(); // getMonth0
const thisMonthString = thisMonth > 10 ? String( thisMonth ) : "0" + String( thisMonth );
const thisYear: number = monthIndex.getFullYear();
const thisYearString: string = String( thisYear );
const numInChinese = [
"一",
"二",
"三",
"四",
"五",
"六",
"七",
"八",
"九",
"十",
"十一",
"十二",
];
const router = useRouter();
const callerInfo: TelSaler = getCallerInfo();
const ui: ui = reactive({
currentMonth: numInChinese[monthIndex.getMonth() - 1],
chartData: [0,], //
totalArchievement: 0, //
attaching_rate: "", //
insurance_renewal_rate: "", //
leading_reward_gainers: ["",], //
advance_reward_gainers: ["",], //
dishonorPersons: ["",],
showUI: true, //
attachingRankingList: [], //
renewalRankingList: [], //
callerAttachingRate: "0.0",
callerRenewalRate: "0.0",
callerPersentMonthPremium: 0,
const staffInfo = loadStaffInfo();
const ui = reactive({
chartData: [200, 230, 224, 218, 135, 147, 260, 800,],
totalArchievement: 120000000,
dishonorPersons: ["张三", "李四",],
});
let timerHandler = 0;
const getTotalArchievement = computed((): string =>
const getTotalArchievement = computed(() =>
{
const cnyFormat = new Intl.NumberFormat( "zh-cn", {
style: "currency",
currency: "CNY",
minimumFractionDigits: 0,
});
const archievement = cnyFormat.format( ui.totalArchievement );
const cnyFormat = new Intl.NumberFormat("zh-cn",
{
style: "currency",
currency: "CNY",
minimumFractionDigits: 0,
});
const archievement = cnyFormat.format(ui.totalArchievement);
return archievement;
});
/**
* 将请求函数获取的部门业绩数据渲染到页面上
* @param data DepartmentArchievementl类型的部门业绩数据对象
*/
const applyDepartmentArchievementData = ( data: DepartmentArchievement ): void =>
{
// console.log( "", data );
//
if ( !data.success )
{
// 退
ElMessage({
message: data.message,
type: "error",
});
return;
}
// ui.chartData = data.mensual_archievement_list;
// ui.totalArchievement = data.total_archievement;
ui.attaching_rate = data.attaching_rate;
ui.insurance_renewal_rate = data.insurance_renewal_rate;
ui.leading_reward_gainers = data.leading_reward_gainers;
ui.advance_reward_gainers = data.advance_reward_gainers;
ui.dishonorPersons = data.backward_list;
// UI
// vue
ui.showUI = false;
setTimeout(() =>
{
ui.showUI = true;
}, 0 );
};
/**
* 将请求的坐席业绩数据渲染到页面
* @param data
*/
const applyCallerArchievementData = ( data: CallerArchievement ): void =>
{
//
if ( !data.success )
{
// 退
ElMessage({
message: data.message,
type: "error",
});
return;
}
ui.chartData = data.mensual_archievement_list.slice( 0, thisMonth );
ui.totalArchievement = data.total_archievement;
ui.callerAttachingRate = data.attaching_rate;
ui.callerRenewalRate = data.insurance_renewal_rate;
ui.callerPersentMonthPremium = data.moto_premium_present_month;
// ui.callerPersentMonthPremium = data.mensual_archievement_list[thisMonth];
console.log( "业绩清单", data );
ui.showUI = false;
setTimeout(() =>
{
ui.showUI = true;
}, 0 );
};
const applyRankingListData = ( data: RankingListResponse ): void =>
{
ui.attachingRankingList = data.attachingRateRankingList;
ui.renewalRankingList = data.renewalRateRankingList;
// UI
// vue
ui.showUI = false;
console.log( "获取排行榜后的ui:", data );
setTimeout(() =>
{
ui.showUI = true;
}, 0 );
};
// 退
const logoutDesktopArchievement = (): void =>
{
console.log( "111" );
logout();
// router.push("/login");
};
//
if ( callerInfo.telSalerCode === "" )
//
if (staffInfo.P13UID == "")
{
ElMessage({
message: "登录信息失效,请重新登录!",
@ -285,61 +85,10 @@ export default {
center: true,
});
router.push( "/login" ).then(() => {}).catch(() => {});
router.push("/login");
}
/**
* 用于定时对页面进行刷新其中会请求最新的业绩数据
*/
const refresh = (): void =>
{
const deparmentInfo: Department = {
departmentCode: callerInfo.departmentCode,
departmentName: callerInfo.departmentName,
};
const rankinglistRequest: RankingListRequest = {
departmentCode: callerInfo.departmentCode,
year: thisYearString,
month: thisMonthString,
};
console.log( "refresh", rankinglistRequest );
queryDepartmentArchievement( deparmentInfo, applyDepartmentArchievementData );
queryCallerArchievement( callerInfo, applyCallerArchievementData );
requestRankingList( rankinglistRequest, applyRankingListData );
};
/**
* 加载前
*/
onBeforeMount(() =>
{
// 10
timerHandler = setInterval( refresh, 600 * 1000 );
refresh();
});
/**
* 页面卸载前
*/
onUnmounted((): void =>
{
// 退
clearInterval( timerHandler );
});
return {
ui,
callerInfo,
timerHandler,
getTotalArchievement,
renderData: applyDepartmentArchievementData,
refresh,
logoutDesktopArchievement,
};
return { ui, getTotalArchievement, };
},
};
</script>
@ -353,7 +102,7 @@ export default {
width: 100vw;
padding: 5mm;
display: flex;
justify-content: flex-end;
justify-content: end;
align-items: stretch;
}
@ -364,7 +113,6 @@ export default {
.center-wrapper {
//
width: 50%;
min-width: 780px;
display: flex;
flex-direction: column;
align-items: stretch;
@ -384,7 +132,7 @@ export default {
size: 90px;
}
color: $color-title-font;
color: $color-bg-04;
text-shadow: #feebb1 0px 0px,
#feebb1 5px 0px,
#feebb1 -5px -0px,
@ -461,44 +209,8 @@ export default {
}
.right-wrapper {
min-width: 300px;
min-width: 400px;
width: 25%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
// >*+* {
// margin-top: 15px;
// }
>h1 {
font: {
family: "FZ-ZHUOHEI";
weight: 100;
size: 30px;
}
color: $color-bg-04;
text-align: center;
width: 300px;
}
.carousel-item {
//
display: block;
height: 260px;
width: 300px;
}
// >div {
// //
// display: block;
// height: 260px;
// width: 300px;
// }
}
</style>
<style lang="scss">
@ -509,11 +221,11 @@ body {
$color-bg-03,
$color-bg-04,
$color-bg-05,
$color-bg-05 );
$color-bg-05);
}
div {
// border: 1px solid red;
box-sizing: border-box;
}
</style>
</style>

View File

@ -3,80 +3,51 @@
* @Date: 2023-02-28 00:57:21
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/Login.vue
* @Description:
* @Description:
* 登录页面路由默认指向这个页面
* 1判断url中的参数取得用户信息根据用户的部门改变路由
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="page-wrapper">
<div class="login-wrapper">
<h1>&nbsp;</h1>
<ul class="menu-tab">
<li
v-for="item in ui.tabMenu"
:key="item.type"
:class="{ 'current': ui.currentMenu === item.type }"
@click="onToggleMenu(item.type)"
>
{{ item.label }}
</li>
</ul>
<el-form ref="loginForm">
<el-form-item>
<label class="form-label">用户名</label>
<el-input
v-if="ui.currentMenu === ui.tabMenu[0].type"
v-model.trim.lazy="ui.account"
type="text"
placeholder="请输入P13账号或P09工号"
/>
<el-input
v-else
v-model.trim.lazy="ui.account"
type="text"
placeholder="请输入坐席工号"
/>
</el-form-item>
<el-form-item v-show="ui.currentMenu === ui.tabMenu[0].type">
<label class="form-label">密码</label>
<el-input
v-model.trim.lazy="ui.password"
type="password"
placeholder="请输入P13密码"
/>
<el-input type="text" v-model.trim.lazy="ui.account" placeholder="请输入P13账号或P09工号"></el-input>
</el-form-item>
<el-form-item>
<el-button
type="primary"
class="el-button-block"
@click="onLogin"
>
<label class="form-label">密码</label>
<el-input type="password" v-model.trim.lazy="ui.password" placeholder="请输入P13密码"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" class="el-button-block" @click="onLogin">
登录
</el-button>
</el-form-item>
</el-form>
</div>
<!-- <div>
<div>
<span>{{ ui.tips }}</span>
</div> -->
</div>
</div>
</template>
<script lang="ts">
import { reactive, onBeforeMount } from "vue";
import { useRouter } from "vue-router";
import { saveStaffInfo, getUserType, saveUserType, getCallerInfo, saveCallerInfo } from "@/utils/api/localStorage";
import { login, loginCaller, type LoginCallerInfo, type LoginCallerResult } from "@/utils/account";
import { loadStaffInfo, saveStaffInfo } from "@/utils/api/localStorage";
import { login } from "@/utils/account";
import { ElMessage } from "element-plus";
import { StaffInfo } from "@/types/cpicxim/StaffInfo";
import { type TelSaler } from "@/types/cpicxim/TelSaler";
import { StaffInfo } from "@/data/cpicxim/StaffInfo";
export default {
name: "LoginPage",
setup()
{
const router = useRouter();
const ui = reactive({
@ -85,188 +56,91 @@ export default {
tips: "",
showNeedAccountTip: false,
showAccountErrorTip: false,
tabMenu: [
{ type: "cpicxim_staff", label: "内勤", },
{ type: "tele_saler", label: "坐席", },
],
currentMenu: "",
});
/**
* 保存p13账号
*/
const savedP13uid = (): void =>
const savedP13uid = () =>
{
window.localStorage.setItem( "stuff_account", ui.account );
window.localStorage.setItem("stuff_account", ui.account);
};
/**
* 登录函数根据ui.currentMenu判断登录的是坐席还是员工
*/
const onLogin = (): void =>
const onLogin = () =>
{
//
saveUserType( ui.currentMenu );
const info = {
p13account: ui.account,
password: ui.password,
};
//
if ( ui.currentMenu === "cpicxim_staff" )
{
//
const info = {
p13account: ui.account,
password: ui.password,
};
login(info)
.then((response) =>
{
const data = response.data || { success: false, };
login( info )
//
.then(( response ) =>
if (data.success == true)
{
const data = response.data ?? { success: false, };
if ( data.success === true )
{
// localStorage
ElMessage({
message: data.message,
type: "success",
center: true,
});
const staffInfo = new StaffInfo(
data.staff_info.p13uid ?? "",
data.staff_info.code ?? "",
data.staff_info.name ?? "",
data.staff_info.department_code ?? "",
data.staff_info.department_name ?? "",
data.staff_info.section_office_code ?? "",
data.staff_info.p13section_office_nameuid ?? ""
);
saveStaffInfo( staffInfo );
//
router.push( "/desktop" ).then(() => {}).catch(() => {});
}
else
{
ElMessage({
message: data.message,
type: "error",
center: true,
});
}
console.log( data );
})
//
.catch(( error ) =>
{
// debugger;
console.log( `登录失败,返回信息:${error}` );
});
}
else if ( ui.currentMenu === "tele_saler" )
{
//
const loginInfo: LoginCallerInfo = {
telsaler_code: ui.account,
};
//
loginCaller( loginInfo )
//
.then(( response ) =>
{
const data: LoginCallerResult = response.data ?? { success: false, };
// debugger;
//
if ( data.success )
{
//
ElMessage({
message: `验证成功,登录用户 ${data.tel_saler_name}`,
type: "success",
});
const telsaler: TelSaler = {
telSalerCode: data.tel_saler_code,
telSalerName: data.tel_saler_name,
teamCode: data.team_code,
teamName: data.team_name,
departmentCode: data.department_code,
departmentName: data.department_name,
};
saveCallerInfo( telsaler );
router.push( "/desktop_archievement" ).then(() => {}).catch(() => {});
}
else
{
//
ElMessage({
message: "验证失败,请检查输入的工号。",
type: "error",
});
}
})
//
.catch(( error ) =>
{
const message = `登录失败,返回信息:${error}`;
console.log( message );
//localStorage
ElMessage({
message,
type: "error",
message: data.message,
type: "success",
center: true,
});
});
}
const staffInfo = new StaffInfo(
data.staff_info.p13uid || "",
data.staff_info.code || "",
data.staff_info.name || "",
data.staff_info.department_code || "",
data.staff_info.department_name || "",
data.staff_info.section_office_code || "",
data.staff_info.p13section_office_nameuid || ""
);
saveStaffInfo(staffInfo);
//
router.push("/desktop_archievement");
}
else
{
ElMessage({
message: data.message,
type: "error",
center: true,
});
}
console.log(data);
})
.catch((error) =>
{
debugger;
console.log(`登录失败,返回信息:${error}`);
});
};
onBeforeMount(() =>
{
//
//
//
const staffType = getUserType();
const staffInfo = loadStaffInfo();
if ( staffType === "tele_saler" )
//P13
if (staffInfo.P13UID != "")
{
//
const callInfo = getCallerInfo();
ElMessage({
message: `已登录账号:${staffInfo.stuffName}`,
type: "success",
center: true,
});
//
if ( callInfo.telSalerCode.length !== 0 )
{
ElMessage({
message: `已登录账号:${callInfo.telSalerName}`,
type: "success",
center: true,
});
//
router.push( "/desktop_archievement" ).then(() => {}).catch(() => {});
}
}
else if ( staffType === "cpicxim_staff" )
{
//
//
router.push("/desktop_archievement");
}
});
const onToggleMenu = ( type: string ): void =>
{
ui.currentMenu = type;
};
// setInterval(() =>
// {
// window.location.reload();
// }, 5000);
//
ui.currentMenu = ui.tabMenu[1].type;
return { ui, savedP13uid, onLogin, onToggleMenu, };
return { ui, savedP13uid, onLogin, };
},
};
</script>
@ -274,20 +148,14 @@ export default {
<style scoped lang="scss">
.page-wrapper {
box-sizing: border-box;
// height: calc(100vh - 10mm);
// width: calc(100vw - 10mm);
height: 100vh;
width: 100vw;
height: calc(100vh - 10mm);
width: calc(100vw - 10mm);
// border: 1px solid red;
display: flex;
flex-direction: column;
justify-content: start;
align-items: center;
background-image: url("@/assets/img/bg/bg_01.jpg");
background-attachment: fixed;
background-size: contain;
span {
font-size: 30px;
color: red;
@ -305,6 +173,7 @@ export default {
border-radius: 5px;
// backdrop-filter: ;
h1 {
font-family: "FZ-ZHUOHEI";
font-size: 70px;
@ -325,28 +194,6 @@ export default {
}
}
.menu-tab {
text-align: center;
margin-bottom: 15px;
margin-top: 25px;
li {
display: inline-block;
padding: 10px 24px;
margin: 0 10px;
// background-color: #fff;
color: #1d6ddc;
font-size: 16px;
border-radius: 5px;
cursor: pointer;
&.current {
background-color: #1d6ddc;
color: #fff;
}
}
}
.form-label {
display: block;
/* color: #fff; */

View File

@ -3,22 +3,22 @@
* @Date: 2023-02-28 19:10:54
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/Public.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div>公共</div>
公共页面
</template>
<script lang="ts">
export default {
name: "PublicPage",
setup()
setup()
{
return {};
},
};
</script>
<style lang="scss"></style>
<style lang="scss"></style>

View File

@ -1,393 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-03-23 16:05:08
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/RewardManagement.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div
v-if="ui.showUI"
class="wrapper"
>
<div class="reward-wrapper">
<div class="reward-gainer-wrapper">
<el-divider content-position="left">
90俱乐部 & 消7灭6包围战
</el-divider>
<div class="toolbutton-wrapper">
<el-button
type="primary"
icon="documentAdd"
@click="onAddRewardGainer"
>
新增
</el-button>
<el-button
type="danger"
icon="delete"
@click="onDeleteRewardGainer"
>
删除
</el-button>
<el-button
type="warning"
icon="Refresh"
@click="refresh"
>
刷新
</el-button>
</div>
<el-table
ref="rewardTelsalerTable"
border
stripe
style="width:100%;"
:data="rewardGainerData"
>
<el-table-column type="selection" />
<el-table-column
label="坐席名称"
align="center"
>
<template #default="rewardGainer">
<span
class="reward-gainer-td"
@dblclick="onEditRewardGainer(rewardGainer.row.recID, rewardGainer.row.callerName, rewardGainer.row.rewardProjectCode)"
>{{ rewardGainer.row.callerName }}</span>
</template>
</el-table-column>
<el-table-column
label="奖项名称"
align="center"
>
<template #default="rewardGainer">
<span
class="reward-gainer-td"
@dblclick="onEditRewardGainer( rewardGainer.row.recID, rewardGainer.row.callerName, rewardGainer.row.rewardProjectCode)"
>{{ rewardGainer.row.rewardProjectName }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination-wrapper">
<el-pagination
v-model="ui.tablePageIndex"
class="pull_left"
size="small"
background
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="(ui.rewardGainerList ?? []).length"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
</div>
</div>
<div
v-if="ui.showEditRewardGainerDialog"
class="dialog-wrapper"
>
<el-dialog
v-model="ui.showEditRewardGainerDialog"
title="编辑获奖人员"
width="400px"
>
<RewardGainerDialog
:selected-rec-id="(ui.selectedRecID ?? -9999)"
:selected-reward-project-code="ui.selectedRewardProjectCode"
:selected-telsaler-name="ui.selectedTelsalerName"
/>
</el-dialog>
</div>
</div>
</template>
<script lang="ts">
import { reactive, computed, onBeforeMount, ref } from "vue";
import { type RewardGainer, type RewardGainerResponse, requestRewardGainers, type DeleteRewardTelsalerResponse, deleteRewardTelsaler, type DeleteRewardTelsalerRequest } from "@/utils/reward.js";
import eventBus from "@/utils/api/EventBus.js";
import { ElMessage, ElMessageBox, type ElTable } from "element-plus";
import RewardGainerDialog from "@/views/reward/RewardTelsaler.vue";
interface UI
{
showUI: boolean;
showEditRewardGainerDialog: boolean;
rewardGainerList: RewardGainer[] | null;
tablePageIndex: number;
tablePageSize: number;
selectedRecID: number | null;
selectedTelsalerName: string;
selectedRewardProjectCode: number;
}
export default {
name: "RewardManagement",
components: { RewardGainerDialog, },
setup()
{
const ui: UI = reactive({
showUI: true,
showEditRewardGainerDialog: false,
rewardGainerList: null,
tablePageIndex: 1,
tablePageSize: 10,
selectedRecID: null,
selectedTelsalerName: "",
selectedRewardProjectCode: -999,
});
const rewardTelsalerTable = ref<InstanceType<typeof ElTable>>();
/** 请求数据相关 ***************************/
const requestRewardTelsalerListHandler = ( response: RewardGainerResponse, error: any ): void =>
{
if ( !response.success )
{
console.log( error );
ElMessageBox({
message: "请求获奖人列表失败,请查看日志!",
type: "error",
center: true,
})
.then((): void => {})
.catch((): void => {});
return;
}
ui.rewardGainerList = response.gainerList;
console.log( "请求获奖人员列表", ui.rewardGainerList );
refreshUI();
};
/** 表格相关 ***************************/
const tableHeight = computed((): number =>
{
return ( ui.tablePageSize + 1 ) * 40;
});
/**
* 用于根据分页组件的参数生成表格用的数据
*/
const rewardGainerData = computed((): RewardGainer[] =>
{
//
if ( ui.rewardGainerList === null )
{
return [];
}
const startIndex = ui.tablePageSize * ( ui.tablePageIndex - 1 );
const endIndex = startIndex + ui.tablePageSize;
const data = ui.rewardGainerList.slice( startIndex, endIndex );
console.log( ui.tablePageSize, ui.tablePageIndex );
console.log( "表格数据:", data );
return data;
});
const onCurrentPageIndexChange = ( pageIndex: number ): void =>
{
ui.tablePageIndex = pageIndex;
};
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.tablePageSize = pageSize;
};
/** 功能按钮相关 *******************************/
/**
* 添加获奖坐席
*/
const onAddRewardGainer = (): void =>
{
ui.selectedRecID = -1;
ui.selectedRewardProjectCode = 3;
ui.selectedTelsalerName = "";
ui.showEditRewardGainerDialog = true;
};
/**
* 响应用户在表格中的双击
* @param telsalerName
* @param rewardProjectName
*/
const onEditRewardGainer = ( recID: number, telsalerName: string, rewardProjectCode: number ): void =>
{
console.log( "编辑获奖清单", recID, telsalerName, rewardProjectCode );
ui.selectedRecID = recID;
ui.selectedTelsalerName = telsalerName;
ui.selectedRewardProjectCode = rewardProjectCode;
ui.showEditRewardGainerDialog = true;
};
/**
* 响应点击删除按钮
*/
const onDeleteRewardGainer = (): void =>
{
const selectedRecord: RewardGainer[] = rewardTelsalerTable.value?.getSelectionRows();
const deleteRequest: DeleteRewardTelsalerRequest = {
recordID: [],
};
if ( selectedRecord !== undefined )
{
selectedRecord.forEach(( item: RewardGainer ): void =>
{
deleteRequest.recordID.push( item.recID );
});
}
deleteRewardTelsaler( deleteRequest, deleteTelsalerRewardHandler );
};
/** 回调函数 ************************/
const deleteTelsalerRewardHandler = ( response: DeleteRewardTelsalerResponse, error: any ): void =>
{
if ( response.success )
{
ElMessage({
message: response.message,
type: "success",
});
}
else
{
ElMessageBox({
message: response.message,
type: "error",
})
.then(() => {})
.catch(() => {});
}
refresh();
};
/** 事件相关 ***************/
/** 订阅新增和保存修改获奖者事件 */
eventBus.on( "onSavedRewardTelsaler", (): void =>
{
//
ui.showEditRewardGainerDialog = false;
refresh();
});
/**
* 用于刷新页面
*/
const refresh = (): void =>
{
requestRewardGainers( requestRewardTelsalerListHandler );
};
const refreshUI = (): void =>
{
ui.showUI = false;
setTimeout(() =>
{
ui.showUI = true;
}, 0 );
};
onBeforeMount((): void =>
{
refresh();
});
return {
ui,
tableHeight,
rewardGainerData,
rewardTelsalerTable,
onCurrentPageIndexChange,
onTablePageSizeChange,
onEditRewardGainer,
refresh,
onAddRewardGainer,
onDeleteRewardGainer,
};
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/public/_public.scss";
.wrapper {
margin: 10px;
// padding: 10px;
// background-color: #fff;
// border-radius: 5px;
// box-shadow: $box-shadow;
// &:hover {
// box-shadow: $box-shadow-hover;
// }
min-width: 800px;
>*+* {
margin-top: 10px;
}
}
.reward-wrapper {
display: flex;
justify-content: center;
align-items: center;
>div {
background-color: #fff;
border-radius: 5px;
box-shadow: $box-shadow;
padding: 10px;
&:hover {
box-shadow: $box-shadow-hover;
}
}
>*+* {
margin-left: 10px;
}
}
.reward-gainer-wrapper {
flex-grow: 1;
}
.dishonor-wrapper {
flex-grow: 1;
}
.toolbutton-wrapper {
text-align: left;
margin-bottom: 10px;
>*+* {
margin-left: 15px;
}
}
.pagination-wrapper {
margin-top: 10px;
display: flex;
justify-content: flex-end;
}
.reward-gainer-td {
cursor: pointer;
display: block;
}
</style>

View File

@ -1,115 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-09-25 09:48:25
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/DataManagement.vue
* @Description: 数据管理view
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<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="坐席续保率">
坐席车非渗透率
</el-tab-pane>
<el-tab-pane label="机构">
坐席车非渗透率
</el-tab-pane>
</el-tabs>
</div>
</template>
<script lang="ts">
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";
export default {
name: "DataManagement",
components: { TelsalerAttachingRateView, },
setup()
{
const ui = reactive({
showUI: false,
fileList: ref<UploadUserFile[]>([]),
uploadData: {
"task-name": "1234",
},
});
const handleRemove: UploadProps["onRemove"] = ( file, uploadFile ) =>
{
console.log( file, uploadFile );
};
const handlePreview: UploadProps["onPreview"] = ( uploadFile ) =>
{
console.log( uploadFile );
};
const handleExceed: UploadProps["onExceed"] = ( files, uploadFiles ) =>
{
ElMessage.warning( "一次只能上传三个文件!" );
};
const beforeRemove: UploadProps["beforeRemove"] = async ( uploadFile, uploadFiles ) =>
{
return await ElMessageBox.confirm(
`放弃上传${uploadFile.name}`
)
.then(() => true, () => false );
};
const handleUploadSuccess = ( response: any, uploadFile: UploadFile, uploadFiles: UploadFiles ): void =>
{
console.log( response );
};
return {
ui,
handleRemove,
handlePreview,
handleExceed,
beforeRemove,
handleUploadSuccess,
};
},
};
</script>
<style lang="scss">
.data_management_wrapper {
margin: 10px;
min-width: 800px;
>*+* {
margin-top: 10px;
}
}
</style>

View File

@ -1,238 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-10-17 10:56:43
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/bi/BiDataUploadView.vue
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<template>
<div class="bi-dataupload-wrapper">
<div class="query-box-wrapper">
<el-row :gutter="10">
<el-col :span="4">
<span>报表类型</span>
</el-col>
<el-col :span="9">
<el-select v-model="ui.selectedReportType">
<el-option
v-for="item in ui.reportType"
:key="item.reportTypeCode"
:label="item.reportTypeName"
:value="item.reportTypeCode"
width="100%"
/>
</el-select>
</el-col>
<el-col :span="4">
<span>sheet编号</span>
</el-col>
<el-col :span="6">
<el-input v-model.lazy.number="ui.sheetIndex" />
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="4">
<span>起始行</span>
</el-col>
<el-col :span="9">
<el-input v-model.lazy.number="ui.firstRow" />
</el-col>
<el-col :span="11">
<span style="text-align:left;color:red;">*从0开始计数</span>
</el-col>
</el-row>
</div>
<el-upload
drag
action="http://222.76.244.118:11101/desktop_archievement_backend/file/file-upload.do"
name="files"
:show-file-list="false"
:data="ui.uploadParameters"
:on-success="onUploadSuccess"
>
<el-icon class="el-icon--upload">
<upload-filled />
</el-icon>
<div class="el-upload__text">
将文件拖到此处<em>点击上传</em>
</div>
</el-upload>
</div>
</template>
<script lang="ts">
import { reactive, ref } from "vue";
import {
type BIReportType,
type ImportBIReportRequest,
type ImportBIReportResponse,
type ImportBIReportResponseHandler,
importBIReport
} from "@/utils/BIReport.js";
import { type FileUploadResponse } from "@/utils/fileUpload.js";
// import { UploadFilled } from "@element-plus/icons-vue";
import { type UploadProps, type UploadFile, type UploadFiles, ElMessage, ElMessageBox } from "element-plus";
interface UI
{
showUI: boolean,
selectedReportType: number,
reportType: BIReportType[],
sheetIndex: number,
firstRow: number,
hasCaption: boolean,
uploadParameters: any,
showFileList: boolean,
}
export default {
name: "BiDataUploadView",
props: {
reportType: {
type: Number,
require: true,
default: (): number => -9999,
},
},
setup()
{
const ui: UI = reactive({
showUI: false,
selectedReportType: 0,
reportType: [
{
reportTypeCode: 0,
reportTypeName: "坐席车非渗透率",
},
{
reportTypeCode: 1,
reportTypeName: "坐席续保率",
},
{
reportTypeCode: 2,
reportTypeName: "部门车非渗透率",
},
{
reportTypeCode: 3,
reportTypeName: "当月个车续保率跟踪报表【机构】",
},],
sheetIndex: 0,
firstRow: 2,
hasCaption: true,
uploadParameters: {
"task-name": "1234",
},
showFileList: false,
});
/**
* 文件上传成功响应函数
* @param response 响应结果参数
* @param uploadFile
* @param uploadFiles
*/
const onUploadSuccess: UploadProps["onSuccess"] = ( response: FileUploadResponse, uploadFile: UploadFile, uploadFiles: UploadFiles ): void =>
{
//
if ( response.success )
{
//
if ( response.fileList.length === 0 )
{
//
ElMessageBox.confirm(
"上传文件的保存路径有误,请联系开发人员。",
"上传文件错误",
{
confirmButtonText: "确定",
type: "warning",
center: true,
}
)
.then((): void => {})
.catch((): void => {});
}
const request: ImportBIReportRequest = {
filePath: response.fileList[0],
reportType: ui.selectedReportType,
firstRow: ui.firstRow,
sheetIndex: ui.sheetIndex,
};
console.log( "请求参数", request );
//
importBIReport( request, importResponseHandler );
}
else
{
//
ElMessageBox.confirm(
response.message,
"上传文件错误",
{
confirmButtonText: "确定",
type: "warning",
center: true,
}
)
.then((): void => {})
.catch((): void => {});
}
};
/**
* handler函数
* @param response
* @param error
*/
const importResponseHandler: ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error?: any ): void =>
{
if ( response.success )
{
ElMessage({
type: "success",
message: response.message,
});
}
else
{
ElMessageBox.confirm(
response.message,
"导入错误",
{
confirmButtonText: "确定",
type: "warning",
center: true,
}
)
.then((): void => {})
.catch((): void => {});
console.log( error );
}
};
return {
ui,
onUploadSuccess,
};
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/public/_public.scss";
.bi-dataupload-wrapper {
// max-width: 600px;
width: 100%;
>*+* {
margin-top: 10px;
}
}
.query-box-wrapper {
@include query-box-wrap;
}
</style>

View File

@ -1,31 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-10-17 14:53:17
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/bi/DepartmentArchievementView.vue
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<template>
<div class="wrapper" />
</template>
<script lang="ts">
import { reactive } from "vue";
export default {
name: "DepartmentArchievementView",
setup()
{
const ui = reactive({
showUI: true,
});
},
};
</script>
<style lang="scss" scoped>
.wrapper {
margin: 10px;
}
</style>

View File

@ -1,142 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-10-17 14:41:39
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/bi/TelsalerAttachingRateView.vue
* @Description: BI坐席车非渗透率数据管理界面
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<template>
<div class="wrapper">
<el-row :gutter="10">
<el-col :span="8">
<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"
width="200"
/>
<el-table-column
label="名称"
align="center"
width="200"
/>
<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 />
</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

@ -1,30 +0,0 @@
src/views/data/bi/TelsalerAttachingRateView.vue<!--
* @Author: Kane
* @Date: 2023-10-17 14:41:39
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/TelsalerAttachingRateView.vue
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<template>
<div class="wrapper" />
</template>
<script lang="ts">
import { reactive } from "vue";
export default {
name: "TelsalerAttachingRateView",
setup()
{
const ui = reactive({
showUI: true,
});
},
};
</script>
<style lang="scss" scoped>
.wrapper {
margin: 10px;
}
</style>

View File

@ -1,239 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-09-12 10:43:39
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/reward/RewardTelsaler.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div
v-if="ui.showUI"
class="reward-gainer-wrapper"
>
<el-row :gutter="10">
<el-col :span="8">
<span>奖励类型</span>
</el-col>
<el-col :span="16">
<el-select
v-model="ui.selectedRewardProjectCode"
value-key="rewardCode"
>
<el-option
v-for="item in ui.rewardProjectList"
:key="item.rewardCode"
:label="item.rewardName"
:value="item.rewardCode"
/>
</el-select>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<span>坐席名称</span>
</el-col>
<el-col :span="16">
<el-input v-model.trim.lazy="ui.selectedRewardTelsalerName" />
</el-col>
</el-row>
<div class="tool-button-wrapper">
<el-button
type="primary"
icon="select"
@click="onSaveRewardTelsaler"
>
保存
</el-button>
<el-button
type="danger"
icon="Close"
>
放弃
</el-button>
</div>
</div>
</template>
<script lang="ts">
import { reactive, onBeforeMount } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import {
type RewardProject,
type RewardProjectResponse,
type AddRewardTelsalerRequest,
type AddRewardTelsalerResponse,
type UpdateRewardTelsalerRequest,
type UpdateRewardTelsalerResponse,
requestRewardPorjectsList,
addRewardTelsaler,
updateTelsalerReward
} from "@/utils/reward.js";
import eventBus from "@/utils/api/EventBus.js";
interface RewardGainerUI
{
showUI: boolean;
showEditRewardGainerDialog: boolean;
rewardProjectList: RewardProject[] | null;
selectedRewardProjectCode: number | undefined;
selectedRewardTelsalerName: string;
selectedRecID: number;
}
export default {
name: "RewardTelsaler",
props: {
selectedRecId: {
type: Number,
require: true,
default: (): number => -9999,
},
selectedRewardProjectCode: {
type: Number,
require: true,
default: (): number => -999,
},
selectedTelsalerName: {
type: String,
require: true,
default: (): string => "",
},
},
setup( props )
{
const ui: RewardGainerUI = reactive({
showUI: true,
showEditRewardGainerDialog: false,
rewardProjectList: [],
selectedRewardProjectCode: 1,
selectedRewardTelsalerName: "",
selectedRecID: 0,
});
/**
* 请求奖项清单的回调函数用于处理请求结果
* @param response 请求奖项清单的响应对象
* @param error 请求失败时的错误对象
*/
const applyRewardProjectsData = ( response: RewardProjectResponse, error: any ): void =>
{
if ( !response.success )
{
ElMessageBox({
message: "请求奖励项目失败,请查看日志!",
type: "error",
})
.then((): void => {})
.catch((): void => {});
return;
}
ui.rewardProjectList = response.rewardList;
};
const refresh = (): void =>
{
requestRewardPorjectsList( applyRewardProjectsData );
};
onBeforeMount((): void =>
{
ui.selectedRewardProjectCode = props.selectedRewardProjectCode;
ui.selectedRewardTelsalerName = props.selectedTelsalerName;
ui.selectedRecID = props.selectedRecId;
refresh();
});
const onSaveRewardTelsaler = (): void =>
{
if ( props.selectedRecId === -1 )
{
//
const addRequest: AddRewardTelsalerRequest = {
rewardIndex: ui.selectedRewardProjectCode as number,
telsalerName: ui.selectedRewardTelsalerName,
};
addRewardTelsaler( addRequest, addRewardTelsalerHandler );
}
else
{
//
const updateRequest: UpdateRewardTelsalerRequest = {
recordID: ui.selectedRecID,
telsalerName: ui.selectedRewardTelsalerName,
rewardIndex: ui.selectedRewardProjectCode as number,
};
updateTelsalerReward( updateRequest, updateTelsalerRewardHandler );
}
};
const addRewardTelsalerHandler = ( data: AddRewardTelsalerResponse, error: any ): void =>
{
if ( data.success )
{
ElMessage({
message: data.message,
type: "success",
});
}
else
{
ElMessage({
message: data.message,
type: "error",
});
}
eventBus.emit( "onSavedRewardTelsaler" );
};
const updateTelsalerRewardHandler = ( data: UpdateRewardTelsalerResponse, error: any ): void =>
{
if ( data.success )
{
ElMessage({
message: data.message,
type: "success",
});
}
else
{
ElMessage({
message: data.message,
type: "error",
});
}
eventBus.emit( "onSavedRewardTelsaler" );
};
// onBeforeUpdate((): void =>
// {
// refresh();
// });
return { ui, onSaveRewardTelsaler, };
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/public/_public.scss";
.reward-gainer-wrapper {
width: 300px;
@include query-box-wrap;
}
.tool-button-wrapper {
display: flex;
justify-content: flex-end;
margin-top: 15px;
}
</style>

View File

@ -1,185 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-03-23 16:05:08
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/telsaler/TelsalerManagement.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="wrapper">
<div class="query_wrapper">
<el-row :gutter="10">
<el-col :span="2">
<span>工号</span>
</el-col>
<el-col :span="4">
<el-input v-model.trim.lazy="ui.caller_code" />
</el-col>
<el-col :span="2">
<span>姓名</span>
</el-col>
<el-col :span="4">
<el-input />
</el-col>
<el-col :span="2">
<span>部门代码</span>
</el-col>
<el-col :span="4">
<el-input />
</el-col>
<el-col :span="2">
<span>部门名称</span>
</el-col>
<el-col :span="4">
<el-input />
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="2">
<span>团队</span>
</el-col>
<el-col :span="10">
<el-input />
</el-col>
<el-col :span="12">
<div class="query-button">
<el-button
type="primary"
icon="search"
>
查询
</el-button>
<el-button icon="refresh">
重置
</el-button>
</div>
</el-col>
</el-row>
</div>
<el-table
border
stripe
style="width:100%;"
:height="tableHeight"
>
<el-table-column
type="selection"
align="center"
/>
<el-table-column
label="工号"
align="center"
width="120"
/>
<el-table-column
label="名称"
align="center"
width="200"
/>
<el-table-column
label="团队名称"
align="center"
/>
<el-table-column
label="部门"
align="center"
width="300"
/>
</el-table>
<div class="pagination_wrapper">
<el-pagination
v-model="ui.table_current_page_index"
class="pull_left"
size="small"
background
:page-size="ui.table_page_size"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="ui.callers.length"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
</div>
</template>
<script lang="ts">
import { reactive, computed } from "vue";
export default {
name: "TelsalerManagement",
setup()
{
const ui = reactive({
caller_code: "",
caller_name: "",
section_office_code: "",
section_office_name: "",
table_current_page_index: 1,
table_page_size: 50,
callers: [],
});
const onCurrentPageIndexChange = ( pageIndex: number ): void =>
{
ui.table_current_page_index = pageIndex;
};
/**
* 设置表格每页显示记录的数量
* @param pageSize 表格页记录数量
*/
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.table_page_size = pageSize;
};
/**
* 表格高度
*/
const tableHeight = computed(() =>
{
return 10 * 50 + 40;
});
return { ui, onCurrentPageIndexChange, onTablePageSizeChange, tableHeight, };
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/public/_public.scss";
.wrapper {
padding: 10px;
background-color: #fff;
min-width: 800px;
> *+* {
margin-top: 10px;
}
}
.query_wrapper {
// display: flex;
border-radius: 5px;
padding: 15px;
@include query-box-wrap;
.query-button {
display: flex;
justify-content: flex-end;
align-items: center;
}
}
.pagination_wrapper
{
display: flex;
justify-content: flex-end;
}
</style>

View File

@ -1,69 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-09-27 10:13:31
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/telsaler/TelsalerManagementView.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div
v-if="ui.showUI"
class="telsaler-management-view-wrapper"
>
<el-tabs type="border-card">
<el-tab-pane>
<template #label>
<el-icon><User /></el-icon>
<span>坐席管理</span>
</template>
<TelsalerManagement />
</el-tab-pane>
<el-tab-pane>
<template #label>
<el-icon><Document /></el-icon>
<span>导入导出</span>
</template>
导入导出
</el-tab-pane>
</el-tabs>
</div>
</template>
<script lang="ts">
import { ref, reactive } from "vue";
// import { User } from "@element-plus/icons-vue";
import TelsalerManagement from "@/views/telsaler/TelsalerManagement.vue";
export default {
name: "TelsalerManagementView",
components: { TelsalerManagement, },
setup()
{
const ui = reactive({
showUI: true,
});
return {
ui,
};
},
};
</script>
<style scoped lang="scss">
.telsaler-management-view-wrapper {
margin: 10px 10px;
min-width: 800px;
>*+* {
margin-top: 10px;
}
span {
margin-left: 4px;
vertical-align: middle;
}
}
</style>

View File

@ -11,15 +11,14 @@
"compilerOptions": {
"forceConsistentCasingInFileNames": true,
"useDefineForClassFields": true,
"target": "ES2015",
"module": "ES2015",
"target": "ESNext",
"module": "CommonJS",
"moduleResolution": "node",
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": false,
"isolatedModules": true,
"baseUrl": "./", // paths
"paths": { //
"@/*": [
@ -27,7 +26,7 @@
],
},
"lib": [
"ES2015",
"ESNext",
"DOM"
],
"types": [
@ -35,12 +34,12 @@
]
},
"include": [
"src/**/*",
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue",
"*.d.ts",
"src/router/index.d.ts",
"src/router/index.js",
"src/router/index.js",
],
"exclude": [
"./node_modules",

View File

@ -2,7 +2,7 @@
* @Author: Kane
* @Date: 2023-02-15 09:25:52
* @LastEditors: Kane
* @LastEditTime: 2023-06-25 09:51:13
* @LastEditTime: 2023-03-03 15:52:58
* @FilePath: /task_schedule/vite.config.js
* @Description:
*
@ -13,36 +13,35 @@ import vue from "@vitejs/plugin-vue";
import path from "path";
// https://vitejs.dev/config/
export default defineConfig(( command, mode ) =>
export default defineConfig((command, mode) =>
{
const env = loadEnv( mode, process.cwd(), "" );
const env = loadEnv(mode, process.cwd(), "");
return {
server:{ host: "localhost", port: 5173, },
plugins: [vue(),],
base: "./",
resolve: {
//配置别名
alias: [
{
find: /^~/,
replacement: "",
},
{
find: "@",
replacement: path.resolve( __dirname, "src" ),
},
],
return {
plugins: [vue(),],
base: "./",
resolve: {
//配置别名
alias: [
{
find: /^~/,
replacement: "",
},
define: {
__APP_ENV__: env.APP_ENV,
{
find: "@",
replacement: path.resolve(__dirname, "src"),
},
css: {
preprocessorOptions: {
scss: {
additionalData: "@import \"./src/assets/css/public/variables.scss\",\"./src/assets/css/public/mixin.scss\";",
},
},
],
},
define: {
__APP_ENV__: env.APP_ENV,
},
css: {
preprocessorOptions: {
scss: {
additionalData: "@import \"./src/assets/css/public/color.scss\";",
},
};
},
},
};
});

File diff suppressed because it is too large Load Diff

View File

@ -1,29 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-03-26 21:08:27
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/.prettierrc.js
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
module.exports = {
printWidth: 80, //单行长度
tabWidth: 4, //缩进长度
useTabs: false, //使用空格代替tab缩进
semi: true, //句末使用分号
singleQuote: false, //使用单引号
quoteProps: 'as-needed', //仅在必需时为对象的key添加引号
jsxSingleQuote: true, // jsx中使用单引号
trailingComma: 'all', //多行时尽可能打印尾随逗号
bracketSpacing: true, //在对象前后添加空格-eg: { foo: bar }
jsxBracketSameLine: true, //多属性html标签的>’折行放置
arrowParens: 'always', //单参数箭头函数参数周围使用圆括号-eg: (x) => x
requirePragma: false, //无需顶部注释即可格式化
insertPragma: false, //在已被preitter格式化的文件顶部加上标注
proseWrap: 'preserve', //不知道怎么翻译
htmlWhitespaceSensitivity: 'ignore', //对HTML全局空白不敏感
vueIndentScriptAndStyle: false, //不对vue中的script及style标签缩进
endOfLine: 'lf', //结束行形式
embeddedLanguageFormatting: 'auto', //对引用代码进行格式化
};

View File

@ -1,14 +0,0 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Current File",
"request": "launch",
"mainClass": "${file}"
}
]
}

View File

@ -1,8 +1,4 @@
{
"java.configuration.updateBuildConfiguration": "automatic",
"java.compile.nullAnalysis.mode": "automatic",
"vue.codeActions.enabled": false,
"java.debug.settings.onBuildFailureProceed": true,
"java.checkstyle.version": "10.12.4",
"java.checkstyle.configuration": "/D:/DevTools/vscode/代码格式化/eclipse-java-google-style.xml"
"java.compile.nullAnalysis.mode": "automatic"
}

View File

@ -1,6 +0,0 @@
{
"name": "desktop_archievement_backend",
"lockfileVersion": 3,
"requires": true,
"packages": {}
}

View File

@ -11,19 +11,16 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.3.24</spring.version>
<log4j2.version>2.20.0</log4j2.version>
<!-- <spring.version>6.0.11</spring.version> -->
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
@ -31,12 +28,7 @@
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
@ -88,81 +80,19 @@
<version>2.13.4</version>
</dependency>
<!-- <dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0.0</version>
</dependency> -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc10</artifactId>
<version>19.19.0.0</version>
</dependency>
<dependency>
<groupId>com.oracle.database.nls</groupId>
<artifactId>orai18n</artifactId>
<version>23.2.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j2-impl -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>2.20.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.20.0</version>
</dependency>
<!-- POI -->
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
</dependencies>
<build>
<finalName>desktop_archievement_backend</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
<configuration></configuration>
<version>3.2.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@ -172,16 +102,6 @@
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,19 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-07-27 11:05:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/ArchievementMapper.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.mapper;
import java.util.HashMap;
public interface ArchievementMapper
{
public void getDepartmentArchievement( HashMap<String, Object> params );
public void getCallerArchievement( HashMap<String, Object> params );
}

View File

@ -1,34 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-10-11 16:47:59
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/ImportBIArchievementDataMapper.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.mapper;
import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
public interface ImportBIArchievementDataMapper
{
public void insertTelsalerAttachingRateDataToDB( BITelsalerAttachingRateRecord record);
public void insertTelsalerRenewalRateDataToDB( BITelsalerRenewalRateRecord record );
public void insertDepartmentAttachingRateDataToDB(BIDepartmentAttachingRateRecord record);
public void insertDepartmentRenewalRateDataToDB(BIDepartmentRenewalRateRecord record);
public void cleanTelsalerAttachingRateData();
public void cleanTelsalerRenewalRateData();
public void cleanDepartmentAttachingRateData();
public void cleanDepartmentRenewalRateData();
}

View File

@ -1,17 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-07-29 22:59:09
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/RankingListMapper.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.mapper;
import java.util.HashMap;
public interface RankingListMapper
{
public void getRankingList( HashMap<String, Object> params );
}

View File

@ -1,29 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-09-06 11:17:44
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/RewardsMapper.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.mapper;
import java.util.ArrayList;
import java.util.HashMap;
import com.cpic.xim.mybatis.pojo.RewardGainer;
import com.cpic.xim.mybatis.pojo.RewardProject;
public interface RewardsMapper
{
public ArrayList<RewardProject> queryRewardProjects();
public ArrayList<RewardGainer> queryRewardTelsaler();
public void addRewardTelSaler( HashMap<String, Object> params );
public void updateRewardTelSaler( HashMap<String, Object> params );
public void deleteRewardTelSaler( HashMap<String, Object> params );
}

View File

@ -1,296 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-10-10 14:50:55
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentAttachingRateRecord.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.pojo;
public class BIDepartmentAttachingRateRecord
{
// 部门
private String departmentName;
// 目标值-机构
private double departmentObject;
// 目标差距
private double objectGap;
// 车险保费()
private double motoPremium;
// 车险保费占比
private double motoPremiumProPortion;
// 非车保费()
private double nomotoPremium;
// 当月保费渗透率
private double attachingRate;
// 保费渗透率环比上月
private double attachingRateChange;
// 车险客户数
private int motoInsuranceCustomerCount;
// 当月客户渗透率
private double customerHandleRate;
// 客户渗透率环比上月
private double customerHandleRateChange;
// 当月车非客均保费
private double premiumPerCustomer;
// 客均保费环比上月
private double premiumPerCustomerChange;
public BIDepartmentAttachingRateRecord( String departmentName, double departmentObject,
double objectGap, double motoPremium, double motoPremiumProPortion,
double nomotoPremium, double attachingRate, double attachingRateChange,
int motoInsuranceCustomerCount, double customerHandleRate,
double customerHandleRateChange, double premiumPerCustomer,
double premiumPerCustomerChange )
{
this.departmentName = departmentName;
this.departmentObject = departmentObject;
this.objectGap = objectGap;
this.motoPremium = motoPremium;
this.motoPremiumProPortion = motoPremiumProPortion;
this.nomotoPremium = nomotoPremium;
this.attachingRate = attachingRate;
this.attachingRateChange = attachingRateChange;
this.motoInsuranceCustomerCount = motoInsuranceCustomerCount;
this.customerHandleRate = customerHandleRate;
this.customerHandleRateChange = customerHandleRateChange;
this.premiumPerCustomer = premiumPerCustomer;
this.premiumPerCustomerChange = premiumPerCustomerChange;
}
public int getMotoInsuranceCustomerCount()
{
return motoInsuranceCustomerCount;
}
public void setMotoInsuranceCustomerCount( int motoInsuranceCustomerCount )
{
this.motoInsuranceCustomerCount = motoInsuranceCustomerCount;
}
@Override
public String toString()
{
return "BIDepartmentAttachingRateRecord [departmentName=" + departmentName
+ ", departmentObject=" + departmentObject + ", objectGap=" + objectGap
+ ", motoPremium=" + motoPremium + ", motoPremiumProPortion="
+ motoPremiumProPortion + ", nomotoPremium=" + nomotoPremium + ", attachingRate="
+ attachingRate + ", attachingRateChange=" + attachingRateChange
+ ", motoInsuranceCustomerCount=" + motoInsuranceCustomerCount
+ ", customerHandleRate=" + customerHandleRate + ", customerHandleRateChange="
+ customerHandleRateChange + ", premiumPerCustomer=" + premiumPerCustomer
+ ", premiumPerCustomerChange=" + premiumPerCustomerChange + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((departmentName == null) ? 0 : departmentName.hashCode());
long temp;
temp = Double.doubleToLongBits( departmentObject );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( objectGap );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( motoPremium );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( motoPremiumProPortion );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( nomotoPremium );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( attachingRate );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( attachingRateChange );
result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + motoInsuranceCustomerCount;
temp = Double.doubleToLongBits( customerHandleRate );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( customerHandleRateChange );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( premiumPerCustomer );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( premiumPerCustomerChange );
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
BIDepartmentAttachingRateRecord other = (BIDepartmentAttachingRateRecord) obj;
if ( departmentName == null )
{
if ( other.departmentName != null )
return false;
}
else if ( !departmentName.equals( other.departmentName ) )
return false;
if ( Double.doubleToLongBits( departmentObject ) != Double
.doubleToLongBits( other.departmentObject ) )
return false;
if ( Double.doubleToLongBits( objectGap ) != Double.doubleToLongBits( other.objectGap ) )
return false;
if ( Double.doubleToLongBits( motoPremium ) != Double
.doubleToLongBits( other.motoPremium ) )
return false;
if ( Double.doubleToLongBits( motoPremiumProPortion ) != Double
.doubleToLongBits( other.motoPremiumProPortion ) )
return false;
if ( Double.doubleToLongBits( nomotoPremium ) != Double
.doubleToLongBits( other.nomotoPremium ) )
return false;
if ( Double.doubleToLongBits( attachingRate ) != Double
.doubleToLongBits( other.attachingRate ) )
return false;
if ( Double.doubleToLongBits( attachingRateChange ) != Double
.doubleToLongBits( other.attachingRateChange ) )
return false;
if ( motoInsuranceCustomerCount != other.motoInsuranceCustomerCount )
return false;
if ( Double.doubleToLongBits( customerHandleRate ) != Double
.doubleToLongBits( other.customerHandleRate ) )
return false;
if ( Double.doubleToLongBits( customerHandleRateChange ) != Double
.doubleToLongBits( other.customerHandleRateChange ) )
return false;
if ( Double.doubleToLongBits( premiumPerCustomer ) != Double
.doubleToLongBits( other.premiumPerCustomer ) )
return false;
if ( Double.doubleToLongBits( premiumPerCustomerChange ) != Double
.doubleToLongBits( other.premiumPerCustomerChange ) )
return false;
return true;
}
public String getDepartmentName()
{
return departmentName;
}
public void setDepartmentName( String departmentName )
{
this.departmentName = departmentName;
}
public double getDepartmentObject()
{
return departmentObject;
}
public void setDepartmentObject( double departmentObject )
{
this.departmentObject = departmentObject;
}
public double getObjectGap()
{
return objectGap;
}
public void setObjectGap( double objectGap )
{
this.objectGap = objectGap;
}
public double getMotoPremium()
{
return motoPremium;
}
public void setMotoPremium( double motoPremium )
{
this.motoPremium = motoPremium;
}
public double getMotoPremiumProPortion()
{
return motoPremiumProPortion;
}
public void setMotoPremiumProPortion( double motoPremiumProPortion )
{
this.motoPremiumProPortion = motoPremiumProPortion;
}
public double getNomotoPremium()
{
return nomotoPremium;
}
public void setNomotoPremium( double nomotoPremium )
{
this.nomotoPremium = nomotoPremium;
}
public double getAttachingRate()
{
return attachingRate;
}
public void setAttachingRate( double attachingRate )
{
this.attachingRate = attachingRate;
}
public double getAttachingRateChange()
{
return attachingRateChange;
}
public void setAttachingRateChange( double attachingRateChange )
{
this.attachingRateChange = attachingRateChange;
}
public double getCustomerHandleRate()
{
return customerHandleRate;
}
public void setCustomerHandleRate( double customerHandleRate )
{
this.customerHandleRate = customerHandleRate;
}
public double getCustomerHandleRateChange()
{
return customerHandleRateChange;
}
public void setCustomerHandleRateChange( double customerHandleRateChange )
{
this.customerHandleRateChange = customerHandleRateChange;
}
public double getPremiumPerCustomer()
{
return premiumPerCustomer;
}
public void setPremiumPerCustomer( double premiumPerCustomer )
{
this.premiumPerCustomer = premiumPerCustomer;
}
public double getPremiumPerCustomerChange()
{
return premiumPerCustomerChange;
}
public void setPremiumPerCustomerChange( double premiumPerCustomerChange )
{
this.premiumPerCustomerChange = premiumPerCustomerChange;
}
}

View File

@ -1,214 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-10-24 11:06:29
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentRenewalRateRecord.java
* @Description: BI机构当月个车续保率跟踪表记录对象
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.pojo;
public class BIDepartmentRenewalRateRecord
{
private String 责任部门;
private double 机构目标值;
private int 到期数全月;
private double 序时到期数占比;
private double 个车续保率序时;
private double 个车续保率全月;
private double 环比昨日;
private double 环比上月;
private int 平均提前签单天数;
private double 环比;
public BIDepartmentRenewalRateRecord() {}
public BIDepartmentRenewalRateRecord( String 责任部门, double 机构目标值, int 到期数全月, double 序时到期数占比,
double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月, int 平均提前签单天数, double 环比 )
{
this.责任部门 = 责任部门;
this.机构目标值 = 机构目标值;
this.到期数全月 = 到期数全月;
this.序时到期数占比 = 序时到期数占比;
this.个车续保率序时 = 个车续保率序时;
this.个车续保率全月 = 个车续保率全月;
this.环比昨日 = 环比昨日;
this.环比上月 = 环比上月;
this.平均提前签单天数 = 平均提前签单天数;
this.环比 = 环比;
}
public String get责任部门()
{
return 责任部门;
}
public void set责任部门( String 责任部门 )
{
this.责任部门 = 责任部门;
}
public double get机构目标值()
{
return 机构目标值;
}
public void set机构目标值( double 机构目标值 )
{
this.机构目标值 = 机构目标值;
}
public int get到期数全月()
{
return 到期数全月;
}
public void set到期数全月( int 到期数全月 )
{
this.到期数全月 = 到期数全月;
}
public double get序时到期数占比()
{
return 序时到期数占比;
}
public void set序时到期数占比( double 序时到期数占比 )
{
this.序时到期数占比 = 序时到期数占比;
}
public double get个车续保率序时()
{
return 个车续保率序时;
}
public void set个车续保率序时( double 个车续保率序时 )
{
this.个车续保率序时 = 个车续保率序时;
}
public double get个车续保率全月()
{
return 个车续保率全月;
}
public void set个车续保率全月( double 个车续保率全月 )
{
this.个车续保率全月 = 个车续保率全月;
}
public double get环比昨日()
{
return 环比昨日;
}
public void set环比昨日( double 环比昨日 )
{
this.环比昨日 = 环比昨日;
}
public double get环比上月()
{
return 环比上月;
}
public void set环比上月( double 环比上月 )
{
this.环比上月 = 环比上月;
}
public int get平均提前签单天数()
{
return 平均提前签单天数;
}
public void set平均提前签单天数( int 平均提前签单天数 )
{
this.平均提前签单天数 = 平均提前签单天数;
}
public double get环比()
{
return 环比;
}
public void set环比( double 环比 )
{
this.环比 = 环比;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((责任部门 == null) ? 0 : 责任部门.hashCode());
long temp;
temp = Double.doubleToLongBits( 机构目标值 );
result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + 到期数全月;
temp = Double.doubleToLongBits( 序时到期数占比 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 个车续保率序时 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 个车续保率全月 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 环比昨日 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 环比上月 );
result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + 平均提前签单天数;
temp = Double.doubleToLongBits( 环比 );
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
BIDepartmentRenewalRateRecord other = (BIDepartmentRenewalRateRecord) obj;
if ( 责任部门 == null )
{
if ( other.责任部门 != null )
return false;
}
else if ( !责任部门.equals( other.责任部门 ) )
return false;
if ( Double.doubleToLongBits( 机构目标值 ) != Double.doubleToLongBits( other.机构目标值 ) )
return false;
if ( 到期数全月 != other.到期数全月 )
return false;
if ( Double.doubleToLongBits( 序时到期数占比 ) != Double.doubleToLongBits( other.序时到期数占比 ) )
return false;
if ( Double.doubleToLongBits( 个车续保率序时 ) != Double.doubleToLongBits( other.个车续保率序时 ) )
return false;
if ( Double.doubleToLongBits( 个车续保率全月 ) != Double.doubleToLongBits( other.个车续保率全月 ) )
return false;
if ( Double.doubleToLongBits( 环比昨日 ) != Double.doubleToLongBits( other.环比昨日 ) )
return false;
if ( Double.doubleToLongBits( 环比上月 ) != Double.doubleToLongBits( other.环比上月 ) )
return false;
if ( 平均提前签单天数 != other.平均提前签单天数 )
return false;
if ( Double.doubleToLongBits( 环比 ) != Double.doubleToLongBits( other.环比 ) )
return false;
return true;
}
@Override
public String toString()
{
return "BIDepartmentRenewalRateRecord [责任部门=" + 责任部门 + ", 机构目标值=" + 机构目标值 + ", 到期数全月="
+ 到期数全月 + ", 序时到期数占比=" + 序时到期数占比 + ", 个车续保率序时=" + 个车续保率序时 + ", 个车续保率全月=" + 个车续保率全月
+ ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + ", 平均提前签单天数=" + 平均提前签单天数 + ", 环比=" + 环比
+ "]";
}
}

View File

@ -1,311 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-10-08 14:45:13
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BITelsalerAttachingRateRecord.java
* @Description: 用于存放BI导出每日电销坐席车险非车险保费和车非渗透率数据.
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.pojo;
import java.time.LocalDate;
import com.fasterxml.jackson.annotation.JsonProperty;
public class BITelsalerAttachingRateRecord
{
// 部门
@JsonProperty( "departmentName" )
private String departmentName;
// 统计日期
@JsonProperty( "summaryDate" )
private LocalDate summaryDate;
// 坐席名称
@JsonProperty( "telsalerName" )
private String telsalerName;
// 车险保费
@JsonProperty( "motoPremium" )
private double motoPremium;
// 非车险保费
@JsonProperty( "nomotoPremium" )
private double nomotoPremium;
// 车险保费占比
@JsonProperty( "motoPremiumProportion" )
private double motoPremiumProportion;
// 渗透率
@JsonProperty( "attachingRate" )
private double attachingRate;
// 渗透率环比上月
@JsonProperty( "attachingRateChange" )
private double attachingRateChange;
// 当月客户渗透率
@JsonProperty( "customerHandleRateCell" )
private double customerHandleRate;
// 客户渗透率环比上月
@JsonProperty( "customerHandleRateChangeCell" )
private double customerHandleRateChange;
// 当月车非客均保费
@JsonProperty( "noMotoPremiumPerCustomerCell" )
private double noMotoPremiumPerCustomer;
// 客均保费环比上月
@JsonProperty( "noMotoPremiumPerCustomerChangeCell" )
private double noMotoPremiumPerCustomerChange;
public BITelsalerAttachingRateRecord( String departmentName, LocalDate summaryDate,
String telsalerName, double motoPremium, double nomotoPremium,
double motoPremiumProportion, double attachingRate, double attachingRateChange,
double customerHandleRate, double customerHandleRateChange,
double noMotoPremiumPerCustomer, double noMotoPremiumPerCustomerChange )
{
this.departmentName = departmentName;
this.summaryDate = summaryDate;
this.telsalerName = telsalerName;
this.motoPremium = motoPremium;
this.nomotoPremium = nomotoPremium;
this.motoPremiumProportion = motoPremiumProportion;
this.attachingRate = attachingRate;
this.attachingRateChange = attachingRateChange;
this.customerHandleRate = customerHandleRate;
this.customerHandleRateChange = customerHandleRateChange;
this.noMotoPremiumPerCustomer = noMotoPremiumPerCustomer;
this.noMotoPremiumPerCustomerChange = noMotoPremiumPerCustomerChange;
}
public BITelsalerAttachingRateRecord()
{}
public double getCustomerHandleRate()
{
return customerHandleRate;
}
public void setCustomerHandleRate( double customerHandleRate )
{
this.customerHandleRate = customerHandleRate;
}
public double getCustomerHandleRateChange()
{
return customerHandleRateChange;
}
public void setCustomerHandleRateChange( double customerHandleRateChange )
{
this.customerHandleRateChange = customerHandleRateChange;
}
public double getNoMotoPremiumPerCustomer()
{
return noMotoPremiumPerCustomer;
}
public void setNoMotoPremiumPerCustomer( double noMotoPremiumPerCustomer )
{
this.noMotoPremiumPerCustomer = noMotoPremiumPerCustomer;
}
public double getNoMotoPremiumPerCustomerChange()
{
return noMotoPremiumPerCustomerChange;
}
public void setNoMotoPremiumPerCustomerChange( double noMotoPremiumPerCustomerChange )
{
this.noMotoPremiumPerCustomerChange = noMotoPremiumPerCustomerChange;
}
@Override
public String toString()
{
return "BITelsalerAttachingRateRecord [departmentName=" + departmentName + ", summaryDate="
+ summaryDate + ", telsalerName=" + telsalerName + ", motoPremium=" + motoPremium
+ ", nomotoPremium=" + nomotoPremium + ", motoPremiumProportion="
+ motoPremiumProportion + ", attachingRate=" + attachingRate
+ ", attachingRateChange=" + attachingRateChange + ", customerHandleRate="
+ customerHandleRate + ", customerHandleRateChange=" + customerHandleRateChange
+ ", noMotoPremiumPerCustomer=" + noMotoPremiumPerCustomer
+ ", noMotoPremiumPerCustomerChange=" + noMotoPremiumPerCustomerChange + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((departmentName == null) ? 0 : departmentName.hashCode());
result = prime * result + ((summaryDate == null) ? 0 : summaryDate.hashCode());
result = prime * result + ((telsalerName == null) ? 0 : telsalerName.hashCode());
long temp;
temp = Double.doubleToLongBits( motoPremium );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( nomotoPremium );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( motoPremiumProportion );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( attachingRate );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( attachingRateChange );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( customerHandleRate );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( customerHandleRateChange );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( noMotoPremiumPerCustomer );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( noMotoPremiumPerCustomerChange );
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
BITelsalerAttachingRateRecord other = (BITelsalerAttachingRateRecord) obj;
if ( departmentName == null )
{
if ( other.departmentName != null )
return false;
}
else if ( !departmentName.equals( other.departmentName ) )
return false;
if ( summaryDate == null )
{
if ( other.summaryDate != null )
return false;
}
else if ( !summaryDate.equals( other.summaryDate ) )
return false;
if ( telsalerName == null )
{
if ( other.telsalerName != null )
return false;
}
else if ( !telsalerName.equals( other.telsalerName ) )
return false;
if ( Double.doubleToLongBits( motoPremium ) != Double
.doubleToLongBits( other.motoPremium ) )
return false;
if ( Double.doubleToLongBits( nomotoPremium ) != Double
.doubleToLongBits( other.nomotoPremium ) )
return false;
if ( Double.doubleToLongBits( motoPremiumProportion ) != Double
.doubleToLongBits( other.motoPremiumProportion ) )
return false;
if ( Double.doubleToLongBits( attachingRate ) != Double
.doubleToLongBits( other.attachingRate ) )
return false;
if ( Double.doubleToLongBits( attachingRateChange ) != Double
.doubleToLongBits( other.attachingRateChange ) )
return false;
if ( Double.doubleToLongBits( customerHandleRate ) != Double
.doubleToLongBits( other.customerHandleRate ) )
return false;
if ( Double.doubleToLongBits( customerHandleRateChange ) != Double
.doubleToLongBits( other.customerHandleRateChange ) )
return false;
if ( Double.doubleToLongBits( noMotoPremiumPerCustomer ) != Double
.doubleToLongBits( other.noMotoPremiumPerCustomer ) )
return false;
if ( Double.doubleToLongBits( noMotoPremiumPerCustomerChange ) != Double
.doubleToLongBits( other.noMotoPremiumPerCustomerChange ) )
return false;
return true;
}
public LocalDate getSummaryDate()
{
return summaryDate;
}
public void setSummaryDate( LocalDate summaryDate )
{
this.summaryDate = summaryDate;
}
public String getTelsalerName()
{
return telsalerName;
}
public void setTelsalerName( String telsalerName )
{
this.telsalerName = telsalerName;
}
public double getMotoPremium()
{
return motoPremium;
}
public void setMotoPremium( double motoPremium )
{
this.motoPremium = motoPremium;
}
public double getNomotoPremium()
{
return nomotoPremium;
}
public void setNomotoPremium( double nomotoPremium )
{
this.nomotoPremium = nomotoPremium;
}
public double getMotoPremiumProportion()
{
return motoPremiumProportion;
}
public void setMotoPremiumProportion( double motoPremiumProportion )
{
this.motoPremiumProportion = motoPremiumProportion;
}
public double getAttachingRate()
{
return attachingRate;
}
public void setAttachingRate( double attachingRate )
{
this.attachingRate = attachingRate;
}
public double getAttachingRateChange()
{
return attachingRateChange;
}
public void setAttachingRateChange( double attachingRateChange )
{
this.attachingRateChange = attachingRateChange;
}
public String getDepartmentName()
{
return departmentName;
}
public void setDepartmentName( String departmentName )
{
this.departmentName = departmentName;
}
}

View File

@ -1,236 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-10-09 21:45:39
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BITelsalerRenewalRateRecord.java
* @Description: BI导出的续保率Excel文件行记录
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.pojo;
public class BITelsalerRenewalRateRecord
{
private String 责任部门;
private String 责任人;
private double 机构目标值;
private double 到期数全月;
private double 序时到期数占比;
private double 个车续保率序时;
private double 个车续保率全月;
private double 环比昨日;
private double 环比上月;
private double 平均提前签单天数;
private double 环比;
public BITelsalerRenewalRateRecord( String 责任部门, String 责任人, double 机构目标值, double 到期数全月,
double 序时到期数占比, double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月,
double 平均提前签单天数, double 环比 )
{
this.责任部门 = 责任部门;
this.责任人 = 责任人;
this.机构目标值 = 机构目标值;
this.到期数全月 = 到期数全月;
this.序时到期数占比 = 序时到期数占比;
this.个车续保率序时 = 个车续保率序时;
this.个车续保率全月 = 个车续保率全月;
this.环比昨日 = 环比昨日;
this.环比上月 = 环比上月;
this.平均提前签单天数 = 平均提前签单天数;
this.环比 = 环比;
}
public double get平均提前签单天数()
{
return 平均提前签单天数;
}
public void set平均提前签单天数( double 平均提前签单天数 )
{
this.平均提前签单天数 = 平均提前签单天数;
}
public double get环比()
{
return 环比;
}
public void set环比( double 环比 )
{
this.环比 = 环比;
}
public String get责任部门()
{
return 责任部门;
}
public void set责任部门( String 责任部门 )
{
this.责任部门 = 责任部门;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((责任部门 == null) ? 0 : 责任部门.hashCode());
result = prime * result + ((责任人 == null) ? 0 : 责任人.hashCode());
long temp;
temp = Double.doubleToLongBits( 机构目标值 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 到期数全月 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 序时到期数占比 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 个车续保率序时 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 个车续保率全月 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 环比昨日 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 环比上月 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 平均提前签单天数 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 环比 );
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
BITelsalerRenewalRateRecord other = (BITelsalerRenewalRateRecord) obj;
if ( 责任部门 == null )
{
if ( other.责任部门 != null )
return false;
}
else if ( !责任部门.equals( other.责任部门 ) )
return false;
if ( 责任人 == null )
{
if ( other.责任人 != null )
return false;
}
else if ( !责任人.equals( other.责任人 ) )
return false;
if ( Double.doubleToLongBits( 机构目标值 ) != Double.doubleToLongBits( other.机构目标值 ) )
return false;
if ( Double.doubleToLongBits( 到期数全月 ) != Double.doubleToLongBits( other.到期数全月 ) )
return false;
if ( Double.doubleToLongBits( 序时到期数占比 ) != Double.doubleToLongBits( other.序时到期数占比 ) )
return false;
if ( Double.doubleToLongBits( 个车续保率序时 ) != Double.doubleToLongBits( other.个车续保率序时 ) )
return false;
if ( Double.doubleToLongBits( 个车续保率全月 ) != Double.doubleToLongBits( other.个车续保率全月 ) )
return false;
if ( Double.doubleToLongBits( 环比昨日 ) != Double.doubleToLongBits( other.环比昨日 ) )
return false;
if ( Double.doubleToLongBits( 环比上月 ) != Double.doubleToLongBits( other.环比上月 ) )
return false;
if ( Double.doubleToLongBits( 平均提前签单天数 ) != Double.doubleToLongBits( other.平均提前签单天数 ) )
return false;
if ( Double.doubleToLongBits( 环比 ) != Double.doubleToLongBits( other.环比 ) )
return false;
return true;
}
@Override
public String toString()
{
return "BITelsalerRenewalRateRecord [责任部门=" + 责任部门 + ", 责任人=" + 责任人 + ", 机构目标值=" + 机构目标值
+ ", 到期数全月=" + 到期数全月 + ", 序时到期数占比=" + 序时到期数占比 + ", 个车续保率序时=" + 个车续保率序时
+ ", 个车续保率全月=" + 个车续保率全月 + ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + ", 平均提前签单天数="
+ 平均提前签单天数 + ", 环比=" + 环比 + "]";
}
public String get责任人()
{
return 责任人;
}
public void set责任人( String 责任人 )
{
this.责任人 = 责任人;
}
public double get机构目标值()
{
return 机构目标值;
}
public void set机构目标值( double 机构目标值 )
{
this.机构目标值 = 机构目标值;
}
public double get到期数全月()
{
return 到期数全月;
}
public void set到期数全月( double 到期数全月 )
{
this.到期数全月 = 到期数全月;
}
public double get序时到期数占比()
{
return 序时到期数占比;
}
public void set序时到期数占比( double 序时到期数占比 )
{
this.序时到期数占比 = 序时到期数占比;
}
public double get个车续保率序时()
{
return 个车续保率序时;
}
public void set个车续保率序时( double 个车续保率序时 )
{
this.个车续保率序时 = 个车续保率序时;
}
public double get个车续保率全月()
{
return 个车续保率全月;
}
public void set个车续保率全月( double 个车续保率全月 )
{
this.个车续保率全月 = 个车续保率全月;
}
public double get环比昨日()
{
return 环比昨日;
}
public void set环比昨日( double 环比昨日 )
{
this.环比昨日 = 环比昨日;
}
public double get环比上月()
{
return 环比上月;
}
public void set环比上月( double 环比上月 )
{
this.环比上月 = 环比上月;
}
}

View File

@ -1,93 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-07-27 11:12:19
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/MensualArchievementItem.java
* @Description: 每月业绩对象
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.pojo;
import com.fasterxml.jackson.annotation.JsonProperty;
public class MensualArchievementItem
{
public MensualArchievementItem()
{}
public MensualArchievementItem( int month, String premium)
{
this.month = month;
this.premium = premium;
}
public int getMonth()
{
return month;
}
public void setMonth( int month )
{
this.month = month;
}
public String getPremium()
{
return premium;
}
public void setPremium( String premium )
{
this.premium = premium;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + month;
result = prime * result + ((premium == null) ? 0 : premium.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
MensualArchievementItem other = (MensualArchievementItem) obj;
if ( month != other.month )
return false;
if ( premium == null )
{
if ( other.premium != null )
return false;
} else if ( !premium.equals( other.premium ) )
return false;
return true;
}
@Override
public String toString()
{
return "MensualArchievementItem [month=" + month + ", premium=" + premium + "]";
}
// 月份
@JsonProperty( "month" )
private int month;
// 月总保费
@JsonProperty( "premium" )
private String premium;
}

Some files were not shown because too many files have changed in this diff Show More