Compare commits

...

268 Commits

Author SHA1 Message Date
Kane Wang d517c2e82a 保存进度! 2023-10-28 12:09:02 +08:00
Kane Wang 80ba8da7e0 保存进度! 2023-10-27 18:59:50 +08:00
Kane Wang 1422c0b781 保存进度! 2023-10-27 16:51:57 +08:00
Kane Wang a33981ac55 变更报表内容。 2023-10-26 18:46:32 +08:00
Kane Wang 506f18abfe 修改oracle获取部门和坐席业绩的代码。 2023-10-25 18:11:56 +08:00
Kane Wang e4d641021e 加入BI机构当月个车续保率跟踪表上传导入功能。 2023-10-24 15:53:24 +08:00
unknown 6ddfe56e6d 保存进度! 2023-10-23 23:48:07 +08:00
Kane Wang a3c56df910 保存进度! 2023-10-23 17:46:30 +08:00
unknown 8b31ffb6d6 保存进度! 2023-10-22 01:15:34 +08:00
Kane Wang b794e99694 升级依赖。 2023-10-21 18:21:07 +08:00
unknown 321ff39e1c 保存进度! 2023-10-20 00:36:39 +08:00
Kane Wang 05aabea1a2 完成基本上传导入前端代码 2023-10-18 18:36:11 +08:00
Kane Wang 0caf428d67 制作非车渗透的上传报表。 2023-10-17 17:44:14 +08:00
Kane Wang 0ad42d00a9 修复文件上传的问题。 2023-10-16 17:57:09 +08:00
unknown 16df86e3a7 保存进度! 2023-10-15 19:33:47 +08:00
unknown 636ae55b43 保存进度! 2023-10-15 10:45:58 +08:00
Kane Wang cb1c08fff4 完成bi报表导入的controller。 2023-10-13 18:33:33 +08:00
Kane Wang 3c807a6efa 保存进度! 2023-10-12 18:31:54 +08:00
Kane Wang 7964f8fbe0 完成mybatis导入函数。 2023-10-12 18:24:28 +08:00
unknown a1de9387c8 保存进度! 2023-10-12 00:38:42 +08:00
Kane Wang 0021873ef7 开始编写插入代码 2023-10-11 18:31:27 +08:00
Kane Wang be1a5ffb00 加入两个报表读取函数。 2023-10-10 19:05:17 +08:00
unknown 6d06ad934d 保存进度! 2023-10-09 23:46:46 +08:00
Kane Wang e805bf914b 完成读取车非渗透表。 2023-10-09 18:37:44 +08:00
unknown e40b81672a 写了两个工具函数。 2023-10-09 00:18:07 +08:00
Kane Wang 041ec287b9 开始开发车非渗透率BI表导入功能。
加入一些测试用数据文件。
2023-10-08 18:20:48 +08:00
unknown e5dfb45c79 创建坐席记录文件。 2023-10-08 01:17:43 +08:00
Kane Wang 19d658858e 111 2023-10-07 19:11:46 +08:00
unknown 5fa7639314 升级依赖 2023-10-06 08:38:28 +08:00
unknown 8a64561471 保存进度! 2023-10-06 08:28:02 +08:00
unknown fdb345176e 升级依赖 2023-10-05 23:57:44 +08:00
unknown c6e08981f7 保存进度! 2023-09-29 01:44:20 +08:00
Kane Wang a9c05eef2c 保存进度! 2023-09-28 19:19:06 +08:00
Kane Wang 0c2c762721 保存进度! 2023-09-27 19:57:33 +08:00
Kane Wang b8df96ac42 保存进度! 2023-09-26 18:55:37 +08:00
unknown 580e917347 保存进度! 2023-09-26 00:43:51 +08:00
Kane Wang 64824e6f74 保存进度! 2023-09-25 16:23:26 +08:00
unknown 099a1e65f6 保存进度! 2023-09-24 16:34:31 +08:00
unknown a9b30dd293 保存进度! 2023-09-24 09:01:06 +08:00
unknown f61f623f73 保存进度! 2023-09-24 01:17:54 +08:00
Kane Wang b03056d783 保存进度! 2023-09-22 19:22:04 +08:00
unknown bcef8b4994 保存进度! 2023-09-21 22:58:01 +08:00
Kane Wang b91c7d281e 保存进度! 2023-09-21 18:36:31 +08:00
Kane Wang 1d554056ac 保存进度! 2023-09-21 16:56:34 +08:00
Kane Wang 0d0b61db3c 保存进度! 2023-09-19 19:00:20 +08:00
Kane Wang 8fd5ee4904 保存进度! 2023-09-19 18:59:39 +08:00
Kane Wang fa4f211ac2 保存进度! 2023-09-18 18:32:21 +08:00
Kane Wang 992606d77a 保存进度! 2023-09-15 18:05:03 +08:00
Kane Wang 712aabfb99 保存进度! 2023-09-14 18:42:23 +08:00
unknown 9878abb946 保存进度! 2023-09-14 00:42:03 +08:00
unknown 7d0112b483 保存进度! 2023-09-13 22:54:43 +08:00
unknown 58f60b9eaf 保存进度! 2023-09-13 22:48:35 +08:00
Kane Wang 4cd800e62b 保存进度! 2023-09-13 19:35:44 +08:00
Kane Wang 4deed356f5 保存进度! 2023-09-13 18:01:07 +08:00
Kane Wang 31d5e1622c 保存进度! 2023-09-12 18:12:27 +08:00
Kane Wang be5e426cee 保存进度! 2023-09-12 11:51:09 +08:00
Kane Wang 7ea11e34a9 保存进度! 2023-09-11 18:27:06 +08:00
Kane Wang 2edd5f67db 保存进度! 2023-09-11 11:49:58 +08:00
Kane Wang efebd548c6 保存进度! 2023-09-08 17:57:34 +08:00
Kane Wang 22157b11eb 开始编写获奖相关的界面 2023-09-06 18:37:50 +08:00
Kane Wang bc7e56c336 加入奖项相关的代码 2023-09-06 16:26:47 +08:00
Kane Wang f54f6bbfea 保存进度! 2023-09-05 18:37:41 +08:00
unknown 21a50f4c61 保存进度! 2023-09-05 00:41:39 +08:00
Kane Wang 075da72a73 保存进度! 2023-09-04 19:01:52 +08:00
Kane Wang ae68f047f4 开发个人业绩组件 2023-09-01 19:05:30 +08:00
Kane Wang 7c5da24f5a 保存进度! 2023-08-31 20:34:36 +08:00
Kane Wang 4d03abde27 保存进度! 2023-08-30 20:15:31 +08:00
Kane Wang 08ea359cd1 保存进度! 2023-08-29 18:57:27 +08:00
Kane Wang 8e0505bd49 完成坐席业绩的请求方法。 2023-08-29 10:55:30 +08:00
Kane Wang a74e612546 该死的node 20 2023-08-28 17:41:07 +08:00
Kane Wang 42c2e8bdf7 完成坐席业绩查询代码 2023-08-26 19:26:13 +08:00
unknown 83be988941 保存进度! 2023-08-26 10:24:03 +08:00
Kane Wang 2a92179adf 保存进度! 2023-08-25 23:00:43 +08:00
Kane Wang 9976c852ba 保存进度! 2023-08-25 22:47:25 +08:00
Kane Wang fd59698264 保存进度! 2023-08-25 20:47:36 +08:00
Kane Wang f5a53e2f55 保存进度! 2023-08-15 09:51:54 +08:00
Kane Wang 5b6285993f 保存进度! 2023-07-31 20:14:49 +08:00
unknown b2a973f7bd 保存进度! 2023-07-30 22:12:14 +08:00
unknown dcc925bb41 完成部门业绩和坐席排行榜的mybatis改造! 2023-07-30 22:11:00 +08:00
Kane Wang 8fd60d6b24 parameterType!!! 2023-07-30 20:07:59 +08:00
Kane Wang 090a551066 保存进度! 2023-07-30 19:11:56 +08:00
Kane Wang 9483b49a20 mybatisUtils加入使用默认参数的工厂函数。 2023-07-30 19:03:53 +08:00
unknown e436fbf89e Merge branch 'mybatis' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into mybatis 2023-07-30 18:59:59 +08:00
unknown 0875919b5f 保存进度! 2023-07-30 18:59:48 +08:00
Kane Wang a5b008f056 保存进度! 2023-07-30 18:03:47 +08:00
unknown ada65278a1 保存进度! 2023-07-30 00:27:57 +08:00
unknown 38ec1c7d6c 保存进度! 2023-07-29 01:13:43 +08:00
Kane Wang 7ab604f3dd 保存进度! 2023-07-28 20:13:31 +08:00
unknown 374a87e1ee 保存进度! 2023-07-28 02:10:38 +08:00
unknown 7304ccf2e8 保存进度! 2023-07-27 21:43:56 +08:00
Kane Wang ff487c3fb6 保存进度! 2023-07-27 18:07:31 +08:00
Kane Wang a9b6e88733 改用mybatis 2023-07-27 16:34:59 +08:00
Kane Wang 9111067e63 修正生成车非数据的bug。 2023-07-26 20:31:10 +08:00
Kane Wang 702ab2c4d1 保存进度! 2023-07-25 19:11:27 +08:00
unknown c08b85cbe4 保存进度! 2023-07-24 00:48:14 +08:00
unknown 068c56e1c9 升级依赖 2023-07-24 00:36:35 +08:00
unknown 73d03bfe9b 保存进度! 2023-07-24 00:17:39 +08:00
Kane Wang 6d4ca8cf96 保存进度! 2023-07-24 00:13:19 +08:00
Kane Wang 5344f2e0ea Merge branch 'feature-personal' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-personal 2023-07-18 18:48:55 +08:00
Kane Wang 78ae920795 保存进度! 2023-07-18 18:48:48 +08:00
unknown d39e731a1e 升级依赖 2023-07-17 00:04:59 +08:00
Kane Wang 16574b6a47 保存进度! 2023-07-12 23:21:00 +08:00
Kane Wang c4b1c754a9 保存进度! 2023-07-11 18:35:17 +08:00
Kane Wang dbc5066aed 保存进度! 2023-07-11 10:49:14 +08:00
Kane Wang daa675b079 升级依赖。 2023-07-10 16:42:05 +08:00
Kane Wang 47c30a4ea1 保存进度! 2023-06-25 18:29:36 +08:00
Kane Wang 157ab0d76e 保存进度! 2023-06-21 18:47:17 +08:00
Kane Wang 8c4293f374 保存进度! 2023-06-20 22:29:37 +08:00
Kane Wang f6ec7cbdfe 111 2023-06-19 22:12:49 +08:00
unknown 59bc739cac 升级依赖 2023-06-19 00:48:48 +08:00
unknown 30ea250264 保存进度! 2023-06-18 00:50:24 +08:00
unknown a14f4b154f Merge branch 'feature-rankinglist' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-rankinglist 2023-06-17 23:37:56 +08:00
Kane Wang dfdde2f8d3 保存进度! 2023-06-16 18:35:19 +08:00
Kane Wang 503a5bcdff 保存进度! 2023-06-16 09:54:26 +08:00
unknown 05dfb0483c Merge branch 'feature-rankinglist' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-rankinglist 2023-06-14 00:15:17 +08:00
unknown 3eeaf68593 保存进度! 2023-06-14 00:15:13 +08:00
Kane Wang 20924be00e 升级依赖。 2023-06-13 18:10:57 +08:00
Kane Wang 0e1338e54b 保存进度! 2023-06-12 18:29:24 +08:00
Kane Wang 24266203ca Merge branch 'feature-rankinglist' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-rankinglist 2023-06-12 09:43:43 +08:00
Kane Wang 88880962a9 升级依赖。 2023-06-12 09:43:34 +08:00
unknown e2ccf553aa Merge branch 'feature-rankinglist' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-rankinglist 2023-06-10 00:42:45 +08:00
unknown 5856909e92 保存进度! 2023-06-10 00:42:43 +08:00
Kane Wang 1b368deb9c 保存进度! 2023-06-09 16:57:13 +08:00
Kane Wang aa39cc4601 保存进度! 2023-06-09 16:37:50 +08:00
Kane Wang 80e4b24e4f 保存进度! 2023-06-08 18:08:57 +08:00
Kane Wang 664c2335ca 保存进度! 2023-06-07 17:19:47 +08:00
Kane Wang 2f3e22fb3e 保存进度! 2023-06-06 18:51:11 +08:00
Kane Wang f9392ea2eb 开发排行榜组件 2023-06-06 17:31:16 +08:00
Kane Wang 8b23d4ad4a 保存进度! 2023-06-06 16:16:34 +08:00
Kane Wang eeb01604b2 保存进度! 2023-06-05 18:14:36 +08:00
Kane Wang 4eec8a9f18 完成排行榜代码,还没测试 2023-06-05 18:09:40 +08:00
Kane Wang 6f65e18672 编写坐席排行榜接口 2023-06-05 11:45:20 +08:00
unknown 490e0e0e93 保存进度! 2023-06-05 00:12:21 +08:00
unknown ec18d20461 Merge branch 'feature-data' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-data 2023-06-04 19:51:45 +08:00
Kane Wang d3ca1f9004 保存进度! 2023-06-04 19:11:44 +08:00
unknown 425b7be1a7 保存进度! 2023-06-04 16:01:05 +08:00
Kane Wang 43ebc2babb 保存进度! 2023-06-03 18:15:07 +08:00
Kane Wang 0184cbf2d5 保存进度! 2023-06-02 18:04:26 +08:00
Kane Wang 9420e96539 Merge branch 'feature-data' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-data 2023-05-29 00:31:44 +08:00
unknown 631ee1170d 保存进度! 2023-05-29 00:30:38 +08:00
unknown 3bc20dea6c 保存进度! 2023-05-29 00:15:18 +08:00
Kane Wang 5faf939c89 保存进度! 2023-05-29 00:07:59 +08:00
Kane 14cd4df5bb 保存进度! 2023-05-26 22:13:39 +08:00
Kane Wang 7b7b97b343 保存进度! 2023-05-24 19:17:00 +08:00
Kane Wang 01ae8f3486 升级依赖。 2023-05-24 17:43:06 +08:00
Kane Wang d696aeec82 进度 2023-05-18 18:45:18 +08:00
Kane Wang e48e68d680 完成业绩基本代码 2023-05-18 18:22:05 +08:00
Kane Wang fa79a8f8d1 保存进度! 2023-05-18 15:40:04 +08:00
Kane Wang 34c60ada3e 修改了CROS的代码,options请求的origin为*。 2023-05-17 20:24:44 +08:00
Kane Wang 21732f6bd2 保存进度! 2023-05-15 20:06:17 +08:00
Kane b2ca0d946b 保存进度! 2023-05-15 00:03:42 +08:00
Kane Wang b19bdf77b4 保存进度! 2023-05-13 00:44:28 +08:00
Kane Wang bc6cd47eb2 保存进度! 2023-05-11 18:19:55 +08:00
Kane 9a83d7ac9a 保存进度! 2023-05-10 23:47:38 +08:00
Kane Wang dc3da1496d 保存进度! 2023-05-10 20:44:25 +08:00
Kane 52667f3d9c 修改了桌面霸屏页面:
1、读取已登录信息的代码;
2、根据已登录信息获取部门业绩的代码;
3、将数据结构代码移到 types 目录下。
2023-05-09 23:45:53 +08:00
Kane d0c9383bf8 更新登录代码
保存坐席的信息,用于获取业绩数据。
2023-05-09 22:42:20 +08:00
Kane Wang 8e9e36bb58 保存进度! 2023-05-09 20:24:37 +08:00
Kane ed55dcc682 保存进度! 2023-05-04 00:13:48 +08:00
Kane 503e7ba86c 保存进度! 2023-05-02 09:46:28 +08:00
Kane Wang f7d48368c6 进度 2023-04-28 19:42:48 +08:00
Kane Wang 0fb93d0ccd 完成登录功能。 2023-04-28 17:46:54 +08:00
Kane Wang 6869294c26 保存进度! 2023-04-27 12:24:55 +08:00
Kane Wang c207de7b25 保存进度! 2023-04-26 20:20:43 +08:00
Kane Wang f31d9e9812 完成坐席工号查询接口。 2023-04-26 20:20:19 +08:00
Kane Wang 2e72789a4f 完成坐席工号查询接口。 2023-04-26 20:19:49 +08:00
Kane Wang 1e33383d22 升级依赖。 2023-04-21 19:32:35 +08:00
Kane Wang bea91eead2 修正一下 2023-04-20 20:00:54 +08:00
Kane Wang 2b45c48e04 升级依赖。 2023-04-20 14:36:42 +08:00
Kane faa515f0cc 更新依赖 2023-04-18 11:21:44 +08:00
Kane ca48a48f4e Merge branch 'feature-data' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-data 2023-04-12 18:28:09 +08:00
Kane 4ef2c38bdf 保存进度! 2023-04-12 18:27:52 +08:00
Kane Wang d8dd27241f 升级依赖。 2023-04-12 18:27:24 +08:00
Kane ee04d00cad 升级依赖! 2023-04-10 23:56:32 +08:00
Kane 08a154440e 保存进度! 2023-04-10 23:55:09 +08:00
Kane 8b4b664685 升级组件 2023-04-10 23:54:28 +08:00
Kane Wang c797e4d25c 升级依赖。 2023-04-07 16:52:45 +08:00
Kane Wang 6da78396a3 保存进度! 2023-04-06 18:20:16 +08:00
Kane Wang a432c8432b 保存进度! 2023-04-06 09:25:46 +08:00
Kane 21356ad6d6 保存进度! 2023-04-06 08:01:27 +08:00
Kane 0c2007b4b2 保存进度! 2023-04-05 23:55:33 +08:00
Kane 8e2f06bae3 保存进度! 2023-04-05 22:19:07 +08:00
Kane Wang c6d1ae80a9 保存进度! 2023-04-04 17:58:05 +08:00
Kane Wang cb730ded34 保存进度! 2023-04-02 17:23:22 +08:00
Kane Wang bbc608e258 更新插件。 2023-04-02 17:20:22 +08:00
Kane c04c6e8365 保存进度! 2023-03-31 23:58:41 +08:00
Kane 88006b2db9 ... 2023-03-31 23:41:03 +08:00
Kane b53090e808 保存进度! 2023-03-31 20:25:01 +08:00
Kane 091168236e 保存进度! 2023-03-31 19:56:50 +08:00
Kane b5a68cc884 Merge branch 'feature-data' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-data 2023-03-31 19:55:21 +08:00
Kane 6d24626478 保存进度! 2023-03-31 19:53:12 +08:00
Kane Wang 3f98fac660 保存进度! 2023-03-31 18:07:06 +08:00
Kane Wang 4ffe05ee95 Merge branch 'feature-data' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-data 2023-03-31 09:05:53 +08:00
Kane Wang 21ffcaeab8 加入生成续保数据的代码 2023-03-31 09:05:50 +08:00
Kane 1b37ae5c97 保存进度! 2023-03-30 18:29:54 +08:00
Kane fdc198ed3d 保存进度! 2023-03-30 17:53:38 +08:00
Kane 156430fba8 完成光荣榜 2023-03-30 17:35:57 +08:00
Kane 2b0fb27bec 修改请求的链接。 2023-03-30 00:49:56 +08:00
Kane 58f01e9bbb 保存进度! 2023-03-29 23:55:51 +08:00
Kane Wang 99fe14f0dc 增加数据 2023-03-28 17:34:31 +08:00
Kane Wang 861eb4353f 保存进度! 2023-03-28 10:35:48 +08:00
Kane 2e9cb02449 保存进度! 2023-03-28 00:33:36 +08:00
Kane 079c729421 保存进度! 2023-03-28 00:32:50 +08:00
Kane cf166cf00f 保存进度! 2023-03-28 00:31:44 +08:00
Kane Wang e1cc6b9194 修改了index的布局。 2023-03-27 20:47:40 +08:00
Kane Wang 2bd88d70e9 lint一下 2023-03-27 17:54:35 +08:00
Kane 892e09de77 尝试解决一些ts的类型问题。 2023-03-27 00:30:33 +08:00
Kane 5325a283a5 尝试解决一些route的类型问题。 2023-03-27 00:30:15 +08:00
Kane Wang 04e825c6bb 保存进度! 2023-03-25 17:59:34 +08:00
Kane 42eff6dad4 增加退出系统的确认提示。 2023-03-24 23:30:45 +08:00
Kane Wang 50a8ef9b9d 修改数据生成代码 2023-03-24 18:44:53 +08:00
Kane Wang f4c4970b30 修改侧边栏样式,让选中项高亮显示 2023-03-24 17:01:14 +08:00
Kane Wang 7dbd48152f 整理代码! 2023-03-24 15:11:47 +08:00
Kane bee1061e20 修改bug 2023-03-23 23:58:38 +08:00
Kane Wang 293a64dbc7 保存进度! 2023-03-23 19:02:20 +08:00
Kane Wang cca2f449ac 加入后台管理模块。 2023-03-23 18:39:15 +08:00
Kane Wang a03da1bba9 添加一个退出桌面霸屏页面的功能。 2023-03-22 17:07:33 +08:00
Kane 0afa218810 修复代码bug! 2023-03-22 01:06:11 +08:00
Kane Wang 44f10a24bb 渲染数据。 2023-03-21 18:01:05 +08:00
Kane Wang 09eb8dddff 开发数据库相关脚本. 2023-03-21 11:42:12 +08:00
Kane Wang c20aabdfd0 保存进度! 2023-03-20 18:05:44 +08:00
Kane Wang dfde67a3aa 保存进度! 2023-03-20 16:34:54 +08:00
Kane Wang c0683cfbff 修改了.eslintrc.cjs 文件,将vue文件的配置做为override的一项。 2023-03-20 16:02:32 +08:00
Kane Wang 31d175d36a 编写前端请求代码 2023-03-17 18:53:13 +08:00
Kane Wang 6f4dbdbd7e 修复html属性的bug! 2023-03-17 15:11:21 +08:00
Kane Wang 8053360878 配置针对vue文件eslint 2023-03-17 14:40:04 +08:00
Kane Wang 884641abbf 完成后端查询部门业绩的框架。 2023-03-16 18:26:36 +08:00
Kane Wang 76c7ae3ca8 保存进度! 2023-03-16 11:46:55 +08:00
Kane Wang 3bedccd4a4 开始处理数据 2023-03-14 17:38:07 +08:00
Kane Wang 893b697d5a 数据 2023-03-14 09:47:53 +08:00
Kane eb133c0365 111 2023-03-12 23:33:27 +08:00
Kane 49a207a9d5 Merge branch 'feature-archievement' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-archievement 2023-03-10 23:47:49 +08:00
Kane eb22d61fcc 保存进度! 2023-03-10 23:46:56 +08:00
Kane Wang 56398fe9d6 保存进度! 2023-03-10 17:35:17 +08:00
Kane Wang 96079ea519 保存进度! 2023-03-10 17:34:12 +08:00
Kane Wang b5010930f2 保存进度! 2023-03-10 17:32:13 +08:00
Kane Wang 405e3984b6 。。。 2023-03-09 15:15:25 +08:00
Kane Wang bab8d6bf6f 完成业绩部分的布局。 2023-03-08 20:14:41 +08:00
Kane Wang e4260780bc 保存进度! 2023-03-08 16:35:40 +08:00
Kane Wang 92553a9ba9 保存进度! 2023-03-08 13:24:12 +08:00
Kane Wang 18d4620729 将组件数据参数化 2023-03-08 10:29:35 +08:00
Kane 3313414c70 保存进度! 2023-03-08 00:56:38 +08:00
Kane 330f5fa1e4 保存进度! 2023-03-07 23:04:03 +08:00
Kane Wang ef9472b334 保存进度! 2023-03-07 22:55:30 +08:00
Kane Wang 12dd277a2a 完善typescript的调试。 2023-03-07 17:54:52 +08:00
Kane Wang e99d092862 规范代码 2023-03-06 11:26:47 +08:00
Kane Wang ef78c2e42e 代码优化 2023-03-06 11:22:43 +08:00
Kane b2712087a0 保存进度! 2023-03-05 22:55:59 +08:00
Kane 52bcee8d39 修改了一些eslint的配置。 2023-03-05 00:37:24 +08:00
Kane f472031b6f 修改一些ts的问题。 2023-03-04 19:32:05 +08:00
Kane Wang 620860c551 还在调整界面 2023-03-04 18:05:47 +08:00
Kane Wang 075e9050dd 调整布局,开始开发总业绩组件。 2023-03-04 16:38:56 +08:00
Kane 04e7a8cd5b 开始设计布局 2023-03-04 00:09:25 +08:00
Kane Wang ce33d04694 完成标题 2023-03-03 17:28:49 +08:00
Kane Wang 19df478f63 开始设计业绩组件。 2023-03-03 16:08:27 +08:00
Kane Wang 3afb4ca1ff 增加一个用于代码测试的typescript项目 2023-03-03 11:35:34 +08:00
Kane 10047b7b6d 加入两个字体 2023-03-03 00:33:30 +08:00
Kane Wang e8c230211b 完成登录功能 2023-03-02 19:48:08 +08:00
Kane Wang 1ef1329495 保存进度! 2023-03-02 16:59:48 +08:00
Kane 554bb14c36 加入vuex模块! 2023-03-02 00:35:21 +08:00
Kane Wang b960ddfa5d 保存进度! 2023-03-01 18:47:16 +08:00
Kane Wang 2a226831dc 完成url获取用户账号功能 2023-03-01 17:31:20 +08:00
Kane 83b256a832 保存进度! 2023-03-01 00:24:06 +08:00
Kane 65a51efa30 完成后端查询员工信息功能 2023-03-01 00:20:47 +08:00
Kane Wang 1fa3b7cfdc 编写登录用的api和后端代码 2023-02-28 19:58:03 +08:00
Kane Wang e49f4426f3 测试 2023-02-28 18:48:14 +08:00
Kane Wang e8996c3fbf 保存进度! 2023-02-28 09:30:02 +08:00
Kane c99d69c629 保存进度! 2023-02-28 01:20:07 +08:00
202 changed files with 36335 additions and 907 deletions

5
.gitignore vendored
View File

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

View File

@ -11,3 +11,20 @@
1. 员工电脑使用 Lively Wallpaper将壁纸设置为一个web页面。 1. 员工电脑使用 Lively Wallpaper将壁纸设置为一个web页面。
2. 前端使用vite + vue3 2. 前端使用vite + vue3
3. 后端使用 Java + springMVC 3. 后端使用 Java + springMVC
4. 使用webview2组件
# 需求内容
需根据续保部和转保团队开发不同的页面。
# 坐席主机配置
需要安装插件,插件目录 AppData\Local\Programs\Lively Wallpaper\Plugins。
datacenter.dc_yzh_cfqd2023表
车非渗透率 车非融合保费 / 车险个人客户保费, 为月初至当日的总量。

View File

@ -0,0 +1,18 @@
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;
*/

765
code/db/grant.sql Normal file
View File

@ -0,0 +1,765 @@
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

@ -0,0 +1,315 @@
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

@ -0,0 +1,43 @@
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;
/

918
code/db/pkg/telsale_pkg.pck Normal file
View File

@ -0,0 +1,918 @@
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

@ -0,0 +1,918 @@
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

@ -0,0 +1,99 @@
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;
/

18
code/db/团队表.sql Normal file
View File

@ -0,0 +1,18 @@
-- 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

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

104
code/db/常用语句.sql Normal file
View File

@ -0,0 +1,104 @@
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

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

View File

@ -0,0 +1,15 @@
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

@ -0,0 +1,14 @@
--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

@ -0,0 +1,14 @@
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

@ -0,0 +1,17 @@
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

@ -0,0 +1,17 @@
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

@ -0,0 +1,28 @@
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

@ -0,0 +1,18 @@
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;

183
code/db/续保.sql Normal file
View File

@ -0,0 +1,183 @@
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

@ -0,0 +1,512 @@
--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

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

View File

@ -0,0 +1,21 @@
-- 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

@ -0,0 +1,310 @@
--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

@ -0,0 +1,259 @@
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

@ -0,0 +1,13 @@
###
# @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"

View File

@ -0,0 +1,201 @@
/*
* @Author: Kane
* @Date: 2023-03-14 09:19:21
* @LastEditors: Kane
* @FilePath: /task_schedule/.eslintrc.cjs
* @Description: eslint 配置文件
*
* 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",], },],
"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",], // 逗号在行位
"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, },],
"prefer-const": "warn",
"space-before-function-paren": ["error", {
anonymous: "always",
named: "never",
asyncArrow: "always",
},],
},
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,},],
},
},
],
};

View File

@ -1,44 +0,0 @@
/*
* @Author: Kane
* @Date: 2022-12-14 15:12:46
* @LastEditors: Kane
* @LastEditTime: 2023-02-06 00:36:26
* @FilePath: /IT工具综合平台/.eslintrc.js
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
module.exports = {
root: true,
env: {
node: true,
},
'extends': [
'plugin:vue/vue3-essential',
'eslint:recommended',
],
parserOptions: {
parser: '@babel/eslint-parser',
},
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",],//控制行尾部分号
"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, },],
},
};

View File

@ -0,0 +1 @@
registry=https://registry.npm.taobao.org/

20
code/web/task_schedule/env.d.ts vendored Normal file
View File

@ -0,0 +1,20 @@
/*
* @Author: Kane
* @Date: 2023-03-03 10:07:00
* @LastEditors: Kane
* @FilePath: /task_schedule/env.d.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
interface ImportMetaEnv
{
readonly VITE_APP_TITLE: string;
readonly VITE_URL_VALIDATE_ACCOUNT: string;
// 更多环境变量...
}
interface ImportMeta
{
readonly env: ImportMetaEnv;
}

View File

@ -1,13 +1,25 @@
<!--
* @Author: Kane
* @Date: 2023-02-28 00:12:43
* @LastEditors: Kane
* @FilePath: /task_schedule/index.html
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Vue</title> <title>看看你的业绩!!!</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
<script type="module" src="/src/main.js"></script> <script type="module" src="/src/main.js"></script>
</body> </body>
<script>
// alert(window.location.href);
</script>
</html> </html>

File diff suppressed because it is too large Load Diff

View File

@ -9,21 +9,32 @@
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
"@babel/eslint-parser": "^7.19.1", "@element-plus/icons-vue": "^2.1.0",
"@element-plus/icons-vue": "^2.0.10", "echarts": "^5.4.3",
"element-plus": "^2.2.30", "element-plus": "^2.4.1",
"mitt": "^3.0.1",
"moment": "^2.29.4", "moment": "^2.29.4",
"vue": "^3.2.45", "sass-loader": "^13.3.2",
"vue-router": "^4.1.6", "vue": "^3.3.6",
"vue-router": "^4.2.5",
"vuex": "^4.1.0" "vuex": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/eslint-parser": "^7.19.1", "@babel/eslint-parser": "^7.22.15",
"@vitejs/plugin-vue": "^4.0.0", "@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/cli-plugin-eslint": "^5.0.8",
"eslint": "^8.35.0", "@vue/eslint-config-typescript": "^12.0.0",
"axios": "^1.5.1",
"babel": "^6.23.0",
"eslint-config-recommended": "^4.1.0", "eslint-config-recommended": "^4.1.0",
"eslint-plugin-vue": "^9.9.0", "eslint-config-standard-with-typescript": "^39.1.1",
"vite": "^4.1.0" "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"
} }
} }

15
code/web/task_schedule/shims-vue.d.ts vendored Normal file
View File

@ -0,0 +1,15 @@
/*
* @Author: Kane
* @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.
*/
declare module "*.vue"
{
import { type ComponentOptions } from "vue";
const componentOptions: ComponentOptions;
export default componentOptions;
}

View File

@ -2,84 +2,33 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-02-15 09:25:52 * @Date: 2023-02-15 09:25:52
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-02-28 01:15:01 * @LastEditTime: 2023-08-25 10:53:30
* @FilePath: /task_schedule/src/App.vue * @FilePath: /task_schedule/src/App.vue
* @Description: * @Description:
* 应用的框架
* 1配置el-config-provider配置为中文
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<el-config-provider :locale="this.locale"> <el-config-provider :locale="locale">
<router-view></router-view> <router-view />
</el-config-provider> </el-config-provider>
</template> </template>
<script> <script lang="ts">
import HelloWorld from "./components/HelloWorld.vue"; import zhCn from "element-plus/es/locale/lang/zh-cn"; // element-plus
import zhCn from "element-plus/lib/locale/lang/zh-cn"; //element-plus
import { reactive } from "vue";
export default { export default {
name: "App", name: "App",
components: { HelloWorld }, components: {},
setup(props) setup()
{ {
const locale = zhCn; const locale = zhCn;
const ui = reactive({
counter: 0,
});
const onCount = () => return { locale, };
{
ui.counter++;
console.log(ui.counter);
};
// setInterval(() =>
// {
// ui.counter += 1;
// // console.log(counter);
// }, 1000);
// setInterval(() =>
// {
// location.reload();
// }, 5000);
return { locale, ui, onCount };
}, },
}; };
</script> </script>
<style scoped> <style scoped></style>
.app_wrapper {
box-sizing: border-box;
width: 100%;
height: calc(100vh - 60px);
/* border: 1px solid brown; */
/* 布局 */
display: flex;
}
.counter_wrapper {
width: 500px;
margin-top: 1cm;
margin-left: auto;
margin-right: 1cm;
border-radius: 5px;
background-color: rgb(250 250 250 / 75%);
}
.counter_wrapper:hover {
box-shadow: 0px 0px 20px 10px rgb(14 18 22 / 10%);
}
.counter_wrapper span {
display: block;
font-size: 150px;
text-align: right;
}
</style>

View File

@ -0,0 +1,13 @@
/*
* @Author: Kane
* @Date: 2023-03-03 09:56:05
* @LastEditors: Kane
* @FilePath: /task_schedule/src/assets/css/index.scss
* @Description: 全局css的入口文件
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
@import url("./public/reset.scss");
@import url("./public/normalize.scss");
@import url("../font/fonts.css");
// @import url("./public/color.scss");

View File

@ -0,0 +1,56 @@
/*
* @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,21 @@
/*
* @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

@ -0,0 +1,389 @@
/*
* @Author: Kane
* @Date: 2023-03-03 10:17:59
* @LastEditors: Kane
* @FilePath: /task_schedule/src/assets/css/public/normalize.scss
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
/* Document
========================================================================== */
/**
* 1. Correct the line height in all browsers.
* 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
========================================================================== */
/**
* Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
* Render the `main` element consistently in IE.
*/
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
========================================================================== */
/**
* 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 */
}
/**
* 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
========================================================================== */
/**
* Remove the gray background on active links in IE 10.
*/
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 */
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
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 */
}
/**
* Add the correct font size in all browsers.
*/
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
========================================================================== */
/**
* Remove the border on images inside links in IE 10.
*/
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 */
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
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;
}
/**
* Correct the inability to style clickable types in iOS and Safari.
*/
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;
}
/**
* 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;
}
/**
* Correct the padding in Firefox.
*/
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 */
}
/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
vertical-align: baseline;
}
/**
* Remove the default vertical scrollbar in IE 10+.
*/
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 */
}
/**
* 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;
}
/**
* 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 */
}
/**
* Remove the inner padding in Chrome and Safari on macOS.
*/
[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
========================================================================== */
/*
* Add the correct display in Edge, IE 10+, and Firefox.
*/
details {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Misc
========================================================================== */
/**
* Add the correct display in IE 10+.
*/
template {
display: none;
}
/**
* Add the correct display in IE 10.
*/
[hidden] {
display: none;
}

View File

@ -0,0 +1,48 @@
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}

View File

@ -0,0 +1,31 @@
/*
* @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;

Binary file not shown.

View File

@ -0,0 +1,11 @@
@font-face {
font-family: "FZ-ZHUOHEI";
src: url("FZZhuoHJW.TTF");
font-weight: normal;
}
@font-face {
font-family: "FZ-RGAQSAY";
src: url("FZSJ-RUGAQSAY.TTF");
font-weight: normal;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -0,0 +1,109 @@
<!--
* @Author: Kane
* @Date: 2023-03-04 16:09:31
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/ArchievementChartComponent.vue
* @Description: 业绩图表组件
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="archievement-wrapper">
<div id="chartWrapper" />
</div>
</template>
<script lang="ts">
import { reactive, onMounted } from "vue";
import * as echarts from "echarts";
export default {
name: "ArchievementChartComponent",
props: {
chartData: {
type: Array,
require: true,
default: () => [],
},
},
setup( props )
{
const ui = reactive({
mensualList: [],
});
//
const initCharts = (): void =>
{
console.log( "每月业绩", props.chartData );
const chartDom = document.getElementById( "chartWrapper" );
const myChart = echarts.init( chartDom as HTMLDivElement );
const option = {
xAxis: {
type: "category",
data: ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二",],
},
yAxis: {
type: "value",
data: [400, 600, 800, 1000, 1200,],
},
series: [
{
data: props.chartData,
type: "line",
},
],
};
myChart.setOption( option );
window.onresize = function ()
{
//
myChart.resize();
};
};
onMounted(() =>
{
initCharts();
});
return { ui, initCharts, props, };
},
};
</script>
<style lang="scss">
.archievement-wrapper {
height: 100%;
width: 100%;
// display: flex;
// flex-direction: column;
// justify-content: center;
// align-items: stretch;
// span {
// display: block;
// width: 100%;
// color: #25e6e6;
// text-align: center;
// font: {
// size: 35px;
// family: "FZ-ZHUOHEI";
// }
// flex-grow: 0;
// }
#chartWrapper {
min-height: 200px;
width: 100%;
background-color: $color-charts-bg;
backdrop-filter: blur(10px);
flex-grow: 1;
border-radius: 5px;
}
}
</style>

View File

@ -0,0 +1,84 @@
<!--
* @Author: Kane
* @Date: 2023-03-07 23:22:13
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/ArchievementCompleteRateComponent.vue
* @Description: 业绩完成率组件
*
* 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>
<span class="percentage-label">{{ ui.indicator }}</span>
<span class="percentage-value">{{ percentage }}%</span>
</template>
</el-progress>
</div>
</template>
<script lang="ts">
import { reactive } from "vue";
export default {
name: "ArchievementCompleteRateComponent",
props: {
percentage: {
type: String,
require: true,
default: () => "0",
},
indicator: {
type: String,
default: "",
},
},
setup( props )
{
const percentage = Number( props.percentage ).valueOf();
const ui = reactive({
percentage,
indicator: props.indicator,
});
return { ui, };
},
};
</script>
<style lang="scss">
.complete-rate-wrapper {
// display: flex;
// flex-direction: column;
// justify-content: center;
// align-items: center;
span {
display: block;
width: 100%;
color: #fff;
}
.el-progress {
margin: 5px;
}
.percentage-value {
display: block;
margin-top: 10px;
font-size: 28px;
}
.percentage-label {
display: block;
margin-top: 10px;
font-size: 12px;
}
}
</style>

View File

@ -0,0 +1,166 @@
<!--
* @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

@ -0,0 +1,114 @@
<!--
* @Author: Kane
* @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.
-->
<template>
<div class="dishonorlist-wrapper">
<div class="banner-wrapper">
<img
src="@/assets/img/ranking/stop.png"
alt=""
>
<div class="title-wrapper">
<span> 8 6 突围战</span>
<span>指标落后入营坐席</span>
</div>
</div>
<div class="telsaler-list-wrapper">
<span>开发中</span>
</div>
</div>
</template>
<script lang="ts">
export default {
name: "DishonorListComponent",
props: {
month: {
type: String,
require: true,
default: () => "本",
},
dishonorPersons: {
type: Array,
require: true,
default: () => [],
},
},
setup( props )
{
return { props, };
},
};
</script>
<style scoped lang="scss">
.dishonorlist-wrapper {
display: flex;
flex-direction: column;
height: 240px;
width: 360px;
border-radius: 5px;
background-color: $color-honorlist-bg;
backdrop-filter: blur(10px);
padding: 10px;
>*+* {
margin-top: 10px;
}
.banner-wrapper {
display: flex;
justify-content: center;
align-items: stretch;
height: 65px;
flex-grow: 0;
img {
// width: 70px;
height: 60px;
}
span {
display: block;
width: 100%;
text-align: center;
font: {
family: "fz-zhuohei";
size: 1.7rem;
weight: 100;
}
color: #fff;
}
}
}
.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>

View File

@ -1,40 +0,0 @@
<script setup>
import { ref } from 'vue'
defineProps({
msg: String,
})
const count = ref(0)
</script>
<template>
<h1>{{ msg }}</h1>
<div class="card">
<button type="button" @click="count++">count is {{ count }}</button>
<p>
Edit
<code>components/HelloWorld.vue</code> to test HMR
</p>
</div>
<p>
Check out
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
>create-vue</a
>, the official Vue + Vite starter
</p>
<p>
Install
<a href="https://github.com/johnsoncodehk/volar" target="_blank">Volar</a>
in your IDE for a better DX
</p>
<p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
</template>
<style scoped>
.read-the-docs {
color: #888;
}
</style>

View File

@ -0,0 +1,127 @@
<!--
* @Author: Kane
* @Date: 2023-03-08 14:18:39
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/HonorListComponent.vue
* @Description: 光荣榜组件
*
* 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>
</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,
require: true,
default: () => ["",],
},
advanceReward: {
type: Array,
require: true,
default: () => ["",],
},
},
setup( props )
{
const ui = reactive({
leadingReward: props.leadingReward as string[],
advanceReward: props.advanceReward as string[],
});
console.log( props );
return { ui, };
},
};
</script>
<style scoped lang="scss">
.honorlist-wrapper {
display: flex;
flex-direction: column;
height: 240px;
width: 360px;
border-radius: 5px;
background-color: $color-honorlist-bg;
backdrop-filter: blur(10px);
padding: 10px;
>*+* {
margin-top: 10px;
}
}
.banner-wrapper {
display: flex;
justify-content: center;
align-items: center;
height: 65px;
flex-grow: 0;
img {
width: 65px;
height: 65px;
}
.title-wrapper {
span {
display: block;
text-align: center;
color: rgb(245, 178, 11);
margin-top: 0px;
font: {
size: 1.65rem;
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>

View File

@ -0,0 +1,166 @@
<!--
* @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

@ -1,24 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-02-28 00:57:21
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/login/Login.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
登录页面
</template>
<script lang="ts">
export default {
name: "Login",
setup(): void
{
},
};
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,86 @@
<!--
* @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

@ -0,0 +1,157 @@
<!--
* @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

@ -0,0 +1,120 @@
<!--
* @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

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

View File

@ -0,0 +1,20 @@
/*
* @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

@ -1,12 +1,13 @@
/* /*
* @Author: Kane * @Author: Kane
* @Date: 2023-02-28 00:20:48 * @Date: 2023-02-28 01:22:48
* @LastEditors: Kane * @LastEditors: Kane
* @FilePath: /task_schedule/src/router/index.js * @FilePath: /task_schedule/src/router/index.js
* @Description: 路由配置文件 * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
import { createRouter, createWebHashHistory } from "vue-router"; import { createRouter, createWebHashHistory } from "vue-router";
const routes = [ const routes = [
@ -20,7 +21,74 @@ const routes = [
path: "/login", path: "/login",
name: "Login", name: "Login",
hidden: true, hidden: true,
component: () => import("@/components/login/login.vue"), component: async () => await import( "@/views/Login.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" ),
},
],
}, },
]; ];
@ -31,4 +99,31 @@ const router = createRouter(
} }
); );
export { router }; // 路由守卫
// 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 };

View File

@ -0,0 +1,19 @@
/*
* @Author: Kane
* @Date: 2023-03-01 18:23:32
* @LastEditors: Kane
* @FilePath: /task_schedule/src/store/index.ts
* @Description: vuex配置文件
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { createStore } from "vuex";
import app from "./modules/app";
const store = createStore({
modules: {
app,
},
});
export default store;

View File

@ -0,0 +1,24 @@
/*
* @Author: Kane
* @Date: 2023-03-01 23:03:02
* @LastEditors: Kane
* @FilePath: /task_schedule/src/store/modules/app.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
const state = {
staffInfo: null,
};
const getters = {};
const mutations = {};
const actions = {};
export default {
namespaced: true,
state,
getters,
mutations,
actions,
};

View File

@ -1,19 +0,0 @@
html {
/* background-color: #8796a6; */
background-image: url("./assets/img/bg/bg_01.jpg");
background-attachment: fixed;
background-size: contain;
/* background-position: center; */
/* background-repeat: no-repeat; */
}
body {
/* background-color: #8796a6; */
width: 100vw;
height: 100vh;
/* border: 1px solid red; */
/* overflow: hidden; */
padding: 0px;
margin: 0px;
}

View File

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

View File

@ -0,0 +1,18 @@
/*
* @Author: Kane
* @Date: 2023-04-27 15:29:10
* @LastEditors: Kane
* @FilePath: /task_schedule/src/test/test.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
// import { testRankingListRequest } from "./testRankingListRequest.js";
// testRankingListRequest();
const arr: string[] = [];
console.log( "test" );
console.log( "检查instanceof", arr instanceof String );

View File

@ -0,0 +1,52 @@
/*
* @Author: Kane
* @Date: 2023-03-01 23:38:12
* @LastEditors: Kane
* @FilePath: /task_schedule/src/test/tsconfig.json
* @Description: tsconfig使
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
{
"compilerOptions": {
"forceConsistentCasingInFileNames": true,
"useDefineForClassFields": true,
"target": "ESNext",
"module": "ESNext",
// "module": "CommonJS",
"moduleResolution": "node",
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"baseUrl": "./", // paths
"paths": { //
"@/*": [
"src/*"
],
},
"lib": [
"ESNext",
"DOM"
],
"types": [
"vite/client"
]
},
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue",
"*.d.ts",
"src/router/index.js",
"src/router/index.js",
"./**/*.ts",
],
"exclude": [
"./node_modules",
],
"ts-node": {
"esm": true
},
}

View File

@ -0,0 +1,17 @@
/*
* @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

@ -0,0 +1,18 @@
/*
* @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

@ -0,0 +1,91 @@
/*
* @Author: Kane
* @Date: 2023-02-28 14:48:30
* @LastEditors: Kane
* @FilePath: /task_schedule/src/data/cpicxim/StaffInfo.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
class StaffInfo
{
constructor(
p13uid: string,
staffCode: string,
staffName: string,
departmentCode: string,
departmentName: string,
sectionOfficeCode: string,
sectionOfficeName: string
)
{
this._stuffCode = staffCode;
this._stuffName = staffName;
this._p13uid = p13uid;
this._departmentCode = departmentCode;
this._departmentName = departmentName;
this._sectionOfficeCode = sectionOfficeCode;
this._sectionOfficeName = sectionOfficeName;
}
public get stuffCode(): string
{
return this._stuffCode;
}
public set stuffCode( stuffCode: string )
{
this._stuffCode = stuffCode;
}
public get stuffName(): string
{
return this._stuffName;
}
public set stuffName( stuffName: string )
{
this._stuffName = stuffName;
}
public get P13UID(): string
{
return this._p13uid;
}
public set P13UID( p13uid: string )
{
this._p13uid = p13uid;
}
public set departmentCode( departmentCode: string )
{
this._departmentCode = departmentCode;
}
public get departmentCode(): string
{
return this._departmentCode;
}
public set departmentName( departmentName: string )
{
this._departmentName = departmentName;
}
public get departmentName(): string
{
return this._departmentName;
}
private _stuffCode: string;
private _stuffName: string;
private _p13uid: string;
private _departmentCode: string;
private _departmentName: string;
private readonly _sectionOfficeCode: string;
private readonly _sectionOfficeName: string;
}
export { StaffInfo };

View File

@ -0,0 +1,21 @@
/*
* @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

@ -0,0 +1,79 @@
/*
* @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

@ -0,0 +1,95 @@
/*
* @Author: Kane
* @Date: 2023-03-02 14:48:35
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/account.ts
* @Description:
*
* 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>>
{
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
};

View File

@ -0,0 +1,12 @@
/*
* @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

@ -0,0 +1,55 @@
/*
* @Author: Kane
* @Date: 2023-03-02 15:35:43
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/api/config.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
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",
};
export { API_URL };

View File

@ -0,0 +1,115 @@
/*
* @Author: Kane
* @Date: 2023-02-28 09:26:45
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/api/localStorage.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { StaffInfo } from "../../types/cpicxim/StaffInfo.js";
import { type TelSaler } from "@/types/cpicxim/TelSaler.js";
const STUFF_ITEM = "stuff_info";
const CALLER_ITEM = "call_info";
const USER_TYPE_ITEM = "user_type";
function loadStaffInfo(): StaffInfo
{
let obj = null;
try
{
obj = JSON.parse( window.localStorage.getItem( STUFF_ITEM ) ?? "{}" );
}
catch ( error )
{
obj = {};
}
const stuff = new StaffInfo(
obj._p13uid ?? "",
obj._stuffCode ?? "",
obj._stuffName ?? "",
obj._department_code ?? "",
obj._department_name ?? "",
obj._section_office_code ?? "",
obj._section_office_name ?? "" );
return stuff;
}
function saveStaffInfo( stuff: StaffInfo ): void
{
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
};

View File

@ -0,0 +1,64 @@
/*
* @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

@ -0,0 +1,53 @@
/*
* @Author: Kane
* @Date: 2023-02-28 17:47:22
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/api/request.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import axios, { type AxiosInstance } from "axios";
const service: AxiosInstance = axios.create(
{
baseURL: "",
timeout: 10000,
}
);
// 请求拦截
service.interceptors.request.use(
/**
* token
* @param config ,token
* @returns
*/
( config ) =>
{
config.headers.token = "123";
return config;
},
async ( error ) =>
{
console.log( error );
return await Promise.reject( error );
}
);
// 响应拦截
service.interceptors.response.use(
( response ) =>
{
return response;
},
async ( error ) =>
{
return await Promise.reject( error );
}
);
export { service };

View File

@ -0,0 +1,84 @@
/*
* @Author: Kane
* @Date: 2023-02-28 19:30:40
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/api/url.ts
* @Description: URL的操作
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
type stringkey = Record<string, string>;
/**
* url的参数拆分成对象
* @param url 访url
* @returns
*/
function getURLParams( url: string ): Record<string, string>
{
const arr = url.split( "?" );
const params = arr[1].split( "&" );
const obj: stringkey = {};
for ( let i = 0; i < params.length; i++ )
{
const param = params[i].split( "=" );
obj[param[0]] = param[1];
}
return obj;
}
/**
* URL中的参数进行拆分
* @param url url字符串
* @returns url中参数作为keyvalue的对象
*/
function getParamsFromURL( url: string ): stringkey
{
const indexOfQuestionMark: number = url.indexOf( "?" );
const indexOfSharp: number = url.indexOf( "#" );
const paramObj: stringkey = {};
let paramString;
// url中没有问号说明没有参数
if ( indexOfQuestionMark < 0 )
{
return paramObj;
}
// 检查是否有#号
if ( indexOfSharp < 0 )
{
// 没有#号,可以直接截取参数字符串
paramString = url.substring( indexOfQuestionMark );
}
else
{
// 有#号,截取?和#之间的字符串
const end: number = indexOfQuestionMark < indexOfSharp ? indexOfSharp : url.length;
paramString = url.substring( indexOfQuestionMark + 1, end );
}
// 拆分属性
const paramArray: string[] = paramString.split( "&" );
paramArray.forEach(( item ) =>
{
if ( item.length === 0 )
{
return;
}
const param = item.split( "=" );
paramObj[param[0]] = param[1] ?? "";
});
return paramObj;
}
export { getURLParams, getParamsFromURL };

View File

@ -0,0 +1,253 @@
/*
* @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

@ -0,0 +1,20 @@
/*
* @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

@ -0,0 +1,116 @@
/*
* @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

@ -0,0 +1,346 @@
/*
* @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

@ -0,0 +1,32 @@
<!--
* @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

@ -0,0 +1,519 @@
<!--
* @Author: Kane
* @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.
-->
<template>
<div
v-if="ui.showUI"
class="view-wrapper"
tabindex="0"
@keyup.esc="logoutDesktopArchievement()"
>
<div class="center-wrapper">
<span class="slogan">对标先进&nbsp;比学赶超</span>
<div class="total-archievement-wrapper">
<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"
/>
</div>
<div class="total-archievement-charts-wrapper">
<ArchievementChart :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"
/>
</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 { useRouter } from "vue-router";
import { getCallerInfo } 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",
components: {
ArchievementChart,
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,
});
let timerHandler = 0;
const getTotalArchievement = computed((): string =>
{
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 === "" )
{
ElMessage({
message: "登录信息失效,请重新登录!",
type: "success",
center: true,
});
router.push( "/login" ).then(() => {}).catch(() => {});
}
/**
* 用于定时对页面进行刷新其中会请求最新的业绩数据
*/
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,
};
},
};
</script>
<style scoped lang="scss">
.view-wrapper {
box-sizing: border-box;
min-height: 800px;
height: calc(100vh - 10mm);
min-width: 1280px;
width: 100vw;
padding: 5mm;
display: flex;
justify-content: flex-end;
align-items: stretch;
}
.left-wrapper {
width: 10%;
}
.center-wrapper {
//
width: 50%;
min-width: 780px;
display: flex;
flex-direction: column;
align-items: stretch;
justify-content: start;
.slogan {
//
margin: 0px;
padding: 15px 0px;
display: block;
text-align: center;
flex-grow: 0;
font: {
family: "FZ-ZHUOHEI";
weight: 100;
size: 90px;
}
color: $color-title-font;
text-shadow: #feebb1 0px 0px,
#feebb1 5px 0px,
#feebb1 -5px -0px,
#feebb1 -0px -5px,
#feebb1 -4px -4px,
#feebb1 4px 4px,
#feebb1 4px -4px,
#feebb1 -4px 4px;
}
.total-archievement-wrapper {
height: 80px;
span {
display: block;
width: 100%;
color: #25e6e6;
text-align: center;
font: {
size: 35px;
family: "FZ-ZHUOHEI";
}
flex-grow: 0;
}
}
.archievement-wrapper {
//
height: 280px;
display: flex;
justify-content: center;
align-items: stretch;
>*+* {
margin-left: 15px;
}
.total-archievement-rate-wrapper {
//
// width: 20%;
width: 140px;
min-width: 140px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.total-archievement-charts-wrapper {
//
width: 70%;
display: flex;
justify-content: center;
align-items: center;
}
}
.reward-wrapper {
//
// height: 280px;
padding: 15px;
display: flex;
justify-content: center;
align-items: center;
>*+* {
margin-left: 15px;
}
}
}
.right-wrapper {
min-width: 300px;
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">
body {
background-image: radial-gradient(farthest-corner at 100% 0%,
$color-bg-01,
$color-bg-02,
$color-bg-03,
$color-bg-04,
$color-bg-05,
$color-bg-05 );
}
div {
// border: 1px solid red;
box-sizing: border-box;
}
</style>

View File

@ -0,0 +1,366 @@
<!--
* @Author: Kane
* @Date: 2023-02-28 00:57:21
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/Login.vue
* @Description:
* 登录页面路由默认指向这个页面
* 1判断url中的参数取得用户信息根据用户的部门改变路由
*
* 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-form-item>
<el-form-item>
<el-button
type="primary"
class="el-button-block"
@click="onLogin"
>
登录
</el-button>
</el-form-item>
</el-form>
</div>
<!-- <div>
<span>{{ ui.tips }}</span>
</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 { ElMessage } from "element-plus";
import { StaffInfo } from "@/types/cpicxim/StaffInfo";
import { type TelSaler } from "@/types/cpicxim/TelSaler";
export default {
name: "LoginPage",
setup()
{
const router = useRouter();
const ui = reactive({
account: "",
password: "",
tips: "",
showNeedAccountTip: false,
showAccountErrorTip: false,
tabMenu: [
{ type: "cpicxim_staff", label: "内勤", },
{ type: "tele_saler", label: "坐席", },
],
currentMenu: "",
});
/**
* 保存p13账号
*/
const savedP13uid = (): void =>
{
window.localStorage.setItem( "stuff_account", ui.account );
};
/**
* 登录函数根据ui.currentMenu判断登录的是坐席还是员工
*/
const onLogin = (): void =>
{
//
saveUserType( ui.currentMenu );
//
if ( ui.currentMenu === "cpicxim_staff" )
{
//
const info = {
p13account: ui.account,
password: ui.password,
};
login( info )
//
.then(( response ) =>
{
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 );
ElMessage({
message,
type: "error",
});
});
}
};
onBeforeMount(() =>
{
//
//
//
const staffType = getUserType();
if ( staffType === "tele_saler" )
{
//
const callInfo = getCallerInfo();
//
if ( callInfo.telSalerCode.length !== 0 )
{
ElMessage({
message: `已登录账号:${callInfo.telSalerName}`,
type: "success",
center: true,
});
//
router.push( "/desktop_archievement" ).then(() => {}).catch(() => {});
}
}
else if ( staffType === "cpicxim_staff" )
{
//
}
});
const onToggleMenu = ( type: string ): void =>
{
ui.currentMenu = type;
};
//
ui.currentMenu = ui.tabMenu[1].type;
return { ui, savedP13uid, onLogin, onToggleMenu, };
},
};
</script>
<style scoped lang="scss">
.page-wrapper {
box-sizing: border-box;
// height: calc(100vh - 10mm);
// width: calc(100vw - 10mm);
height: 100vh;
width: 100vw;
// 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;
}
}
.login-wrapper {
box-sizing: border-box;
width: 320px;
// margin-top: 5cm auto auto auto;
margin-top: calc(100vh * 0.075);
padding: 10mm;
background-color: #cac2c27f;
backdrop-filter: blur(10px);
border-radius: 5px;
// backdrop-filter: ;
h1 {
font-family: "FZ-ZHUOHEI";
font-size: 70px;
font-weight: 100;
color: #fff;
margin: 5mm 0;
display: block;
text-align: center;
text-shadow: #1d6ddc 2px 10px 2px,
#1d6ddc 2px 0px 2px,
#1d6ddc -2px -0px 2px,
#1d6ddc -0px -2px 2px,
#1d6ddc -1.4px -1.4px 2px,
#1d6ddc 1.4px 1.4px 2px,
#1d6ddc 1.4px -1.4px 2px,
#1d6ddc -1.4px 1.4px 2px;
}
}
.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; */
color: #344a5fef;
font-size: 14px;
// border: 1px solid red;
}
.el-input {
color: #344a5fef;
}
.el-button-block {
width: 100%;
margin-top: 20px;
}
</style>

View File

@ -0,0 +1,24 @@
<!--
* @Author: Kane
* @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.
-->
<template>
<div>公共</div>
</template>
<script lang="ts">
export default {
name: "PublicPage",
setup()
{
return {};
},
};
</script>
<style lang="scss"></style>

View File

@ -0,0 +1,393 @@
<!--
* @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

@ -0,0 +1,115 @@
<!--
* @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

@ -0,0 +1,238 @@
<!--
* @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

@ -0,0 +1,31 @@
<!--
* @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

@ -0,0 +1,142 @@
<!--
* @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

@ -0,0 +1,30 @@
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

@ -0,0 +1,239 @@
<!--
* @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

@ -0,0 +1,185 @@
<!--
* @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

@ -0,0 +1,69 @@
<!--
* @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

@ -0,0 +1,48 @@
/*
* @Author: Kane
* @Date: 2023-03-01 23:38:12
* @LastEditors: Kane
* @FilePath: /task_schedule/tsconfig.json
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
{
"compilerOptions": {
"forceConsistentCasingInFileNames": true,
"useDefineForClassFields": true,
"target": "ES2015",
"module": "ES2015",
"moduleResolution": "node",
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": false,
"isolatedModules": true,
"baseUrl": "./", // paths
"paths": { //
"@/*": [
"src/*"
],
},
"lib": [
"ES2015",
"DOM"
],
"types": [
"vite/client"
]
},
"include": [
"src/**/*",
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue",
"*.d.ts",
"src/router/index.d.ts",
],
"exclude": [
"./node_modules",
]
}

View File

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

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