From d1aebdc7f5178c0da65b4a2c194e9d45776e7937 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Fri, 24 Nov 2023 18:48:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=BA=E5=91=98=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/db/建表/TWr坐席.sql | 39 + .../xim/mybatis/pojo/TWrTelsalerRecord.java | 755 ++++++++++++++++++ .../xim/utils/data/ImportTWRTelsalerData.java | 190 +++++ .../com/cpic/xim/utils/poi/MyPOIUtils.java | 30 +- .../坐席/TWr业务员人力查询 (1).xlsx | Bin 0 -> 41213 bytes 5 files changed, 1008 insertions(+), 6 deletions(-) create mode 100644 code/db/建表/TWr坐席.sql create mode 100644 code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/TWrTelsalerRecord.java create mode 100644 code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportTWRTelsalerData.java create mode 100644 数据/坐席/TWr业务员人力查询 (1).xlsx diff --git a/code/db/建表/TWr坐席.sql b/code/db/建表/TWr坐席.sql new file mode 100644 index 0000000..e087e49 --- /dev/null +++ b/code/db/建表/TWr坐席.sql @@ -0,0 +1,39 @@ +drop table telsaler; +create table telsaler +( + Ա varchar2(40), +Ա varchar2(40), + varchar2(40), +μӹʱ date, +ְ date, +˾ date, +ҵ varchar2(40), +칫ʡ varchar2(40), +칫 varchar2(40), +Ա varchar2(40), +θλ varchar2(40), +ְ varchar2(40), + varchar2(40), +ְ varchar2(40), +Ƭ varchar2(40), +Ŷ varchar2(40), +Կڷֹ˾ varchar2(40), +չҵ varchar2(40), +Ƹ varchar2(40), +ϸ varchar2(40), +ȫѧ varchar2(40), +ѧ varchar2(40), +ù varchar2(40), +ͬ varchar2(40), +ͬ varchar2(40), +ͬ varchar2(40), +ͬǩ integer, +ͬЧ date, +ͬ date, +Ա varchar2(40), +Ա varchar2(40), +ְ varchar2(40), +칫 varchar2(40), +Ա varchar2(40), +Ա״̬ varchar2(40) +); diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/TWrTelsalerRecord.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/TWrTelsalerRecord.java new file mode 100644 index 0000000..0fbaeaf --- /dev/null +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/TWrTelsalerRecord.java @@ -0,0 +1,755 @@ +/* + * @Author: Kane + * @Date: 2023-11-24 14:34:16 + * @LastEditors: Kane + * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/TwrTelsalerRecord.java + * @Description: + * + * Copyright (c) ${2023} by Kane, All Rights Reserved. + */ +package com.cpic.xim.mybatis.pojo; + +public class TWrTelsalerRecord +{ + private String 人员姓名; + private String 人员工号; + private String 籍贯; + private String 参加工作时间; + private String 入职日期; + private String 入司日期; + private String 业务类型; + private String 办公地省; + private String 办公地市; + private String 人员类别; + private String 现任岗位; + private String 现任职级; + private String 机构名称; + private String 职场分类; + private String 片区名称; + private String 团队名称; + private String 对口分公司; + private String 展业地区; + private String 招聘渠道; + private String 渠道明细; + private String 全日制最高学历; + private String 学历类型; + private String 用工性质名称; + private String 合同种类; + private String 合同类型; + private String 合同性质; + private int 合同签订次数; + private String 合同生效日期; + private String 合同到期日期; + private String 人员属性; + private String 保代员工号; + private String 职场属性; + private String 办公性质; + private String 保代人员属性; + private String 人员状态; + + public TWrTelsalerRecord( String 人员姓名, String 人员工号, String 籍贯, String 参加工作时间, String 入职日期, + String 入司日期, String 业务类型, String 办公地省, String 办公地市, String 人员类别, String 现任岗位, + String 现任职级, String 机构名称, String 职场分类, String 片区名称, String 团队名称, String 对口分公司, + String 展业地区, String 招聘渠道, String 渠道明细, String 全日制最高学历, String 学历类型, String 用工性质名称, + String 合同种类, String 合同类型, String 合同性质, int 合同签订次数, String 合同生效日期, String 合同到期日期, + String 人员属性, String 保代员工号, String 职场属性, String 办公性质, String 保代人员属性, String 人员状态 ) + { + this.人员姓名 = 人员姓名; + this.人员工号 = 人员工号; + this.籍贯 = 籍贯; + this.参加工作时间 = 参加工作时间; + this.入职日期 = 入职日期; + this.入司日期 = 入司日期; + this.业务类型 = 业务类型; + this.办公地省 = 办公地省; + this.办公地市 = 办公地市; + this.人员类别 = 人员类别; + this.现任岗位 = 现任岗位; + this.现任职级 = 现任职级; + this.机构名称 = 机构名称; + this.职场分类 = 职场分类; + this.片区名称 = 片区名称; + this.团队名称 = 团队名称; + this.对口分公司 = 对口分公司; + this.展业地区 = 展业地区; + this.招聘渠道 = 招聘渠道; + this.渠道明细 = 渠道明细; + this.全日制最高学历 = 全日制最高学历; + this.学历类型 = 学历类型; + this.用工性质名称 = 用工性质名称; + this.合同种类 = 合同种类; + this.合同类型 = 合同类型; + this.合同性质 = 合同性质; + this.合同签订次数 = 合同签订次数; + this.合同生效日期 = 合同生效日期; + this.合同到期日期 = 合同到期日期; + this.人员属性 = 人员属性; + this.保代员工号 = 保代员工号; + this.职场属性 = 职场属性; + this.办公性质 = 办公性质; + this.保代人员属性 = 保代人员属性; + this.人员状态 = 人员状态; + } + + @Override + public String toString() + { + return "TWrTelsalerRecord [人员姓名=" + 人员姓名 + ", 人员工号=" + 人员工号 + ", 籍贯=" + 籍贯 + ", 参加工作时间=" + + 参加工作时间 + ", 入职日期=" + 入职日期 + ", 入司日期=" + 入司日期 + ", 业务类型=" + 业务类型 + ", 办公地省=" + 办公地省 + + ", 办公地市=" + 办公地市 + ", 人员类别=" + 人员类别 + ", 现任岗位=" + 现任岗位 + ", 现任职级=" + 现任职级 + + ", 机构名称=" + 机构名称 + ", 职场分类=" + 职场分类 + ", 片区名称=" + 片区名称 + ", 团队名称=" + 团队名称 + + ", 对口分公司=" + 对口分公司 + ", 展业地区=" + 展业地区 + ", 招聘渠道=" + 招聘渠道 + ", 渠道明细=" + 渠道明细 + + ", 全日制最高学历=" + 全日制最高学历 + ", 学历类型=" + 学历类型 + ", 用工性质名称=" + 用工性质名称 + ", 合同种类=" + + 合同种类 + ", 合同类型=" + 合同类型 + ", 合同性质=" + 合同性质 + ", 合同签订次数=" + 合同签订次数 + ", 合同生效日期=" + + 合同生效日期 + ", 合同到期日期=" + 合同到期日期 + ", 人员属性=" + 人员属性 + ", 保代员工号=" + 保代员工号 + ", 职场属性=" + + 职场属性 + ", 办公性质=" + 办公性质 + ", 保代人员属性=" + 保代人员属性 + ", 人员状态=" + 人员状态 + "]"; + } + + @Override + public int hashCode() + { + final int prime = 31; + int result = 1; + result = prime * result + ((人员姓名 == null) ? 0 : 人员姓名.hashCode()); + result = prime * result + ((人员工号 == null) ? 0 : 人员工号.hashCode()); + result = prime * result + ((籍贯 == null) ? 0 : 籍贯.hashCode()); + result = prime * result + ((参加工作时间 == null) ? 0 : 参加工作时间.hashCode()); + result = prime * result + ((入职日期 == null) ? 0 : 入职日期.hashCode()); + result = prime * result + ((入司日期 == null) ? 0 : 入司日期.hashCode()); + result = prime * result + ((业务类型 == null) ? 0 : 业务类型.hashCode()); + result = prime * result + ((办公地省 == null) ? 0 : 办公地省.hashCode()); + result = prime * result + ((办公地市 == null) ? 0 : 办公地市.hashCode()); + result = prime * result + ((人员类别 == null) ? 0 : 人员类别.hashCode()); + result = prime * result + ((现任岗位 == null) ? 0 : 现任岗位.hashCode()); + result = prime * result + ((现任职级 == null) ? 0 : 现任职级.hashCode()); + result = prime * result + ((机构名称 == null) ? 0 : 机构名称.hashCode()); + result = prime * result + ((职场分类 == null) ? 0 : 职场分类.hashCode()); + result = prime * result + ((片区名称 == null) ? 0 : 片区名称.hashCode()); + result = prime * result + ((团队名称 == null) ? 0 : 团队名称.hashCode()); + result = prime * result + ((对口分公司 == null) ? 0 : 对口分公司.hashCode()); + result = prime * result + ((展业地区 == null) ? 0 : 展业地区.hashCode()); + result = prime * result + ((招聘渠道 == null) ? 0 : 招聘渠道.hashCode()); + result = prime * result + ((渠道明细 == null) ? 0 : 渠道明细.hashCode()); + result = prime * result + ((全日制最高学历 == null) ? 0 : 全日制最高学历.hashCode()); + result = prime * result + ((学历类型 == null) ? 0 : 学历类型.hashCode()); + result = prime * result + ((用工性质名称 == null) ? 0 : 用工性质名称.hashCode()); + result = prime * result + ((合同种类 == null) ? 0 : 合同种类.hashCode()); + result = prime * result + ((合同类型 == null) ? 0 : 合同类型.hashCode()); + result = prime * result + ((合同性质 == null) ? 0 : 合同性质.hashCode()); + result = prime * result + 合同签订次数; + result = prime * result + ((合同生效日期 == null) ? 0 : 合同生效日期.hashCode()); + result = prime * result + ((合同到期日期 == null) ? 0 : 合同到期日期.hashCode()); + result = prime * result + ((人员属性 == null) ? 0 : 人员属性.hashCode()); + result = prime * result + ((保代员工号 == null) ? 0 : 保代员工号.hashCode()); + result = prime * result + ((职场属性 == null) ? 0 : 职场属性.hashCode()); + result = prime * result + ((办公性质 == null) ? 0 : 办公性质.hashCode()); + result = prime * result + ((保代人员属性 == null) ? 0 : 保代人员属性.hashCode()); + result = prime * result + ((人员状态 == null) ? 0 : 人员状态.hashCode()); + return result; + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj ) + return true; + if ( obj == null ) + return false; + if ( getClass() != obj.getClass() ) + return false; + TWrTelsalerRecord other = (TWrTelsalerRecord) obj; + if ( 人员姓名 == null ) + { + if ( other.人员姓名 != null ) + return false; + } + else if ( !人员姓名.equals( other.人员姓名 ) ) + return false; + if ( 人员工号 == null ) + { + if ( other.人员工号 != null ) + return false; + } + else if ( !人员工号.equals( other.人员工号 ) ) + return false; + if ( 籍贯 == null ) + { + if ( other.籍贯 != null ) + return false; + } + else if ( !籍贯.equals( other.籍贯 ) ) + return false; + if ( 参加工作时间 == null ) + { + if ( other.参加工作时间 != null ) + return false; + } + else if ( !参加工作时间.equals( other.参加工作时间 ) ) + return false; + if ( 入职日期 == null ) + { + if ( other.入职日期 != null ) + return false; + } + else if ( !入职日期.equals( other.入职日期 ) ) + return false; + if ( 入司日期 == null ) + { + if ( other.入司日期 != null ) + return false; + } + else if ( !入司日期.equals( other.入司日期 ) ) + return false; + if ( 业务类型 == null ) + { + if ( other.业务类型 != null ) + return false; + } + else if ( !业务类型.equals( other.业务类型 ) ) + return false; + if ( 办公地省 == null ) + { + if ( other.办公地省 != null ) + return false; + } + else if ( !办公地省.equals( other.办公地省 ) ) + return false; + if ( 办公地市 == null ) + { + if ( other.办公地市 != null ) + return false; + } + else if ( !办公地市.equals( other.办公地市 ) ) + return false; + if ( 人员类别 == null ) + { + if ( other.人员类别 != null ) + return false; + } + else if ( !人员类别.equals( other.人员类别 ) ) + return false; + if ( 现任岗位 == null ) + { + if ( other.现任岗位 != null ) + return false; + } + else if ( !现任岗位.equals( other.现任岗位 ) ) + return false; + if ( 现任职级 == null ) + { + if ( other.现任职级 != null ) + return false; + } + else if ( !现任职级.equals( other.现任职级 ) ) + return false; + if ( 机构名称 == null ) + { + if ( other.机构名称 != null ) + return false; + } + else if ( !机构名称.equals( other.机构名称 ) ) + return false; + if ( 职场分类 == null ) + { + if ( other.职场分类 != null ) + return false; + } + else if ( !职场分类.equals( other.职场分类 ) ) + return false; + if ( 片区名称 == null ) + { + if ( other.片区名称 != null ) + return false; + } + else if ( !片区名称.equals( other.片区名称 ) ) + return false; + if ( 团队名称 == null ) + { + if ( other.团队名称 != null ) + return false; + } + else if ( !团队名称.equals( other.团队名称 ) ) + return false; + if ( 对口分公司 == null ) + { + if ( other.对口分公司 != null ) + return false; + } + else if ( !对口分公司.equals( other.对口分公司 ) ) + return false; + if ( 展业地区 == null ) + { + if ( other.展业地区 != null ) + return false; + } + else if ( !展业地区.equals( other.展业地区 ) ) + return false; + if ( 招聘渠道 == null ) + { + if ( other.招聘渠道 != null ) + return false; + } + else if ( !招聘渠道.equals( other.招聘渠道 ) ) + return false; + if ( 渠道明细 == null ) + { + if ( other.渠道明细 != null ) + return false; + } + else if ( !渠道明细.equals( other.渠道明细 ) ) + return false; + if ( 全日制最高学历 == null ) + { + if ( other.全日制最高学历 != null ) + return false; + } + else if ( !全日制最高学历.equals( other.全日制最高学历 ) ) + return false; + if ( 学历类型 == null ) + { + if ( other.学历类型 != null ) + return false; + } + else if ( !学历类型.equals( other.学历类型 ) ) + return false; + if ( 用工性质名称 == null ) + { + if ( other.用工性质名称 != null ) + return false; + } + else if ( !用工性质名称.equals( other.用工性质名称 ) ) + return false; + if ( 合同种类 == null ) + { + if ( other.合同种类 != null ) + return false; + } + else if ( !合同种类.equals( other.合同种类 ) ) + return false; + if ( 合同类型 == null ) + { + if ( other.合同类型 != null ) + return false; + } + else if ( !合同类型.equals( other.合同类型 ) ) + return false; + if ( 合同性质 == null ) + { + if ( other.合同性质 != null ) + return false; + } + else if ( !合同性质.equals( other.合同性质 ) ) + return false; + if ( 合同签订次数 != other.合同签订次数 ) + return false; + if ( 合同生效日期 == null ) + { + if ( other.合同生效日期 != null ) + return false; + } + else if ( !合同生效日期.equals( other.合同生效日期 ) ) + return false; + if ( 合同到期日期 == null ) + { + if ( other.合同到期日期 != null ) + return false; + } + else if ( !合同到期日期.equals( other.合同到期日期 ) ) + return false; + if ( 人员属性 == null ) + { + if ( other.人员属性 != null ) + return false; + } + else if ( !人员属性.equals( other.人员属性 ) ) + return false; + if ( 保代员工号 == null ) + { + if ( other.保代员工号 != null ) + return false; + } + else if ( !保代员工号.equals( other.保代员工号 ) ) + return false; + if ( 职场属性 == null ) + { + if ( other.职场属性 != null ) + return false; + } + else if ( !职场属性.equals( other.职场属性 ) ) + return false; + if ( 办公性质 == null ) + { + if ( other.办公性质 != null ) + return false; + } + else if ( !办公性质.equals( other.办公性质 ) ) + return false; + if ( 保代人员属性 == null ) + { + if ( other.保代人员属性 != null ) + return false; + } + else if ( !保代人员属性.equals( other.保代人员属性 ) ) + return false; + if ( 人员状态 == null ) + { + if ( other.人员状态 != null ) + return false; + } + else if ( !人员状态.equals( other.人员状态 ) ) + return false; + return true; + } + + public String get人员姓名() + { + return 人员姓名; + } + + public void set人员姓名( String 人员姓名 ) + { + this.人员姓名 = 人员姓名; + } + + public String get人员工号() + { + return 人员工号; + } + + public void set人员工号( String 人员工号 ) + { + this.人员工号 = 人员工号; + } + + public String get籍贯() + { + return 籍贯; + } + + public void set籍贯( String 籍贯 ) + { + this.籍贯 = 籍贯; + } + + public String get参加工作时间() + { + return 参加工作时间; + } + + public void set参加工作时间( String 参加工作时间 ) + { + this.参加工作时间 = 参加工作时间; + } + + public String get入职日期() + { + return 入职日期; + } + + public void set入职日期( String 入职日期 ) + { + this.入职日期 = 入职日期; + } + + public String get入司日期() + { + return 入司日期; + } + + public void set入司日期( String 入司日期 ) + { + this.入司日期 = 入司日期; + } + + public String get业务类型() + { + return 业务类型; + } + + public void set业务类型( String 业务类型 ) + { + this.业务类型 = 业务类型; + } + + public String get办公地省() + { + return 办公地省; + } + + public void set办公地省( String 办公地省 ) + { + this.办公地省 = 办公地省; + } + + public String get办公地市() + { + return 办公地市; + } + + public void set办公地市( String 办公地市 ) + { + this.办公地市 = 办公地市; + } + + public String get人员类别() + { + return 人员类别; + } + + public void set人员类别( String 人员类别 ) + { + this.人员类别 = 人员类别; + } + + public String get现任岗位() + { + return 现任岗位; + } + + public void set现任岗位( String 现任岗位 ) + { + this.现任岗位 = 现任岗位; + } + + public String get现任职级() + { + return 现任职级; + } + + public void set现任职级( String 现任职级 ) + { + this.现任职级 = 现任职级; + } + + public String get机构名称() + { + return 机构名称; + } + + public void set机构名称( String 机构名称 ) + { + this.机构名称 = 机构名称; + } + + public String get职场分类() + { + return 职场分类; + } + + public void set职场分类( String 职场分类 ) + { + this.职场分类 = 职场分类; + } + + public String get片区名称() + { + return 片区名称; + } + + public void set片区名称( String 片区名称 ) + { + this.片区名称 = 片区名称; + } + + public String get团队名称() + { + return 团队名称; + } + + public void set团队名称( String 团队名称 ) + { + this.团队名称 = 团队名称; + } + + public String get对口分公司() + { + return 对口分公司; + } + + public void set对口分公司( String 对口分公司 ) + { + this.对口分公司 = 对口分公司; + } + + public String get展业地区() + { + return 展业地区; + } + + public void set展业地区( String 展业地区 ) + { + this.展业地区 = 展业地区; + } + + public String get招聘渠道() + { + return 招聘渠道; + } + + public void set招聘渠道( String 招聘渠道 ) + { + this.招聘渠道 = 招聘渠道; + } + + public String get渠道明细() + { + return 渠道明细; + } + + public void set渠道明细( String 渠道明细 ) + { + this.渠道明细 = 渠道明细; + } + + public String get全日制最高学历() + { + return 全日制最高学历; + } + + public void set全日制最高学历( String 全日制最高学历 ) + { + this.全日制最高学历 = 全日制最高学历; + } + + public String get学历类型() + { + return 学历类型; + } + + public void set学历类型( String 学历类型 ) + { + this.学历类型 = 学历类型; + } + + public String get用工性质名称() + { + return 用工性质名称; + } + + public void set用工性质名称( String 用工性质名称 ) + { + this.用工性质名称 = 用工性质名称; + } + + public String get合同种类() + { + return 合同种类; + } + + public void set合同种类( String 合同种类 ) + { + this.合同种类 = 合同种类; + } + + public String get合同类型() + { + return 合同类型; + } + + public void set合同类型( String 合同类型 ) + { + this.合同类型 = 合同类型; + } + + public String get合同性质() + { + return 合同性质; + } + + public void set合同性质( String 合同性质 ) + { + this.合同性质 = 合同性质; + } + + public int get合同签订次数() + { + return 合同签订次数; + } + + public void set合同签订次数( int 合同签订次数 ) + { + this.合同签订次数 = 合同签订次数; + } + + public String get合同生效日期() + { + return 合同生效日期; + } + + public void set合同生效日期( String 合同生效日期 ) + { + this.合同生效日期 = 合同生效日期; + } + + public String get合同到期日期() + { + return 合同到期日期; + } + + public void set合同到期日期( String 合同到期日期 ) + { + this.合同到期日期 = 合同到期日期; + } + + public String get人员属性() + { + return 人员属性; + } + + public void set人员属性( String 人员属性 ) + { + this.人员属性 = 人员属性; + } + + public String get保代员工号() + { + return 保代员工号; + } + + public void set保代员工号( String 保代员工号 ) + { + this.保代员工号 = 保代员工号; + } + + public String get职场属性() + { + return 职场属性; + } + + public void set职场属性( String 职场属性 ) + { + this.职场属性 = 职场属性; + } + + public String get办公性质() + { + return 办公性质; + } + + public void set办公性质( String 办公性质 ) + { + this.办公性质 = 办公性质; + } + + public String get保代人员属性() + { + return 保代人员属性; + } + + public void set保代人员属性( String 保代人员属性 ) + { + this.保代人员属性 = 保代人员属性; + } + + public String get人员状态() + { + return 人员状态; + } + + public void set人员状态( String 人员状态 ) + { + this.人员状态 = 人员状态; + } +} + + diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportTWRTelsalerData.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportTWRTelsalerData.java new file mode 100644 index 0000000..a0f04a9 --- /dev/null +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportTWRTelsalerData.java @@ -0,0 +1,190 @@ +/* + * @Author: Kane + * @Date: 2023-11-24 11:09:46 + * @LastEditors: Kane + * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportTWRTelsalerData.java + * @Description: + * + * Copyright (c) ${2023} by Kane, All Rights Reserved. + */ +package com.cpic.xim.utils.data; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.cpic.xim.mybatis.pojo.TWrTelsalerRecord; +import com.cpic.xim.utils.poi.MyPOIUtils; + +public class ImportTWRTelsalerData +{ + private static Logger logger = LoggerFactory.getLogger( ImportTWRTelsalerData.class ); + private static String[] TwrTelsalerListExcelTitle = new String[] + { "人员姓名", "人员工号", "籍 贯", "参加工作时间", "入职日期", "入司日期", "业务类型", "办公地省", "办公地市", "人员类别", "现任岗位", + "现任职级", "机构名称", "职场分类", "片区名称", "团队名称", "对口分公司", "展业地区", "招聘渠道", "渠道明细", "全日制最高学历", + "学历类型", "用工性质名称", "合同种类", "合同类型", "合同性质", "合同签订次数", "合同生效日期", "合同到期日期", "人员属性", "保代员工号", + "职场属性", "办公性质", "保代人员属性", "人员状态",}; + + public static void importTWrTelsalerDataFromExcel( String filePath, int sheetIndex, + int firstRow ) throws IOException, InvalidFormatException + { + ArrayList records = new ArrayList<>( 200 ); + + Workbook wb = null; + Sheet sheet = null; + + try + { + wb = WorkbookFactory.create( new File( filePath ) ); + sheet = wb.getSheetAt( sheetIndex ); + + // 先验证格式,不对就抛出错误 + if ( !checkExcelFormat( sheet, null, 0, TwrTelsalerListExcelTitle, 0 ) ) + { + throw new InvalidFormatException( "Excel文件格式错误,请检查报表内容!" ); + } + + for ( Row row : sheet ) + { + int rowIndex = row.getRowNum(); + + // 从数据行开始 + if ( row.getRowNum() < firstRow ) + { + continue; + } + + try + { + String 人员姓名 = MyPOIUtils.getStringCellValue( row, 0 ); + String 人员工号 = MyPOIUtils.getStringCellValue( row, 1 ); + String 籍贯 = MyPOIUtils.getStringCellValue( row, 2 ); + String 参加工作时间 = MyPOIUtils.getStringCellValue( row, 3 ); + String 入职日期 = MyPOIUtils.getStringCellValue( row, 4 ); + String 入司日期 = MyPOIUtils.getStringCellValue( row, 5 ); + String 业务类型 = MyPOIUtils.getStringCellValue( row, 6 ); + String 办公地省 = MyPOIUtils.getStringCellValue( row, 7 ); + String 办公地市 = MyPOIUtils.getStringCellValue( row, 8 ); + String 人员类别 = MyPOIUtils.getStringCellValue( row, 9 ); + String 现任岗位 = MyPOIUtils.getStringCellValue( row, 10 ); + String 现任职级 = MyPOIUtils.getStringCellValue( row, 11 ); + String 机构名称 = MyPOIUtils.getStringCellValue( row, 12 ); + String 职场分类 = MyPOIUtils.getStringCellValue( row, 13 ); + String 片区名称 = MyPOIUtils.getStringCellValue( row, 14 ); + String 团队名称 = MyPOIUtils.getStringCellValue( row, 15 ); + String 对口分公司 = MyPOIUtils.getStringCellValue( row, 16 ); + String 展业地区 = MyPOIUtils.getStringCellValue( row, 17 ); + String 招聘渠道 = MyPOIUtils.getStringCellValue( row, 18 ); + String 渠道明细 = MyPOIUtils.getStringCellValue( row, 19 ); + String 全日制最高学历 = MyPOIUtils.getStringCellValue( row, 20 ); + String 学历类型 = MyPOIUtils.getStringCellValue( row, 21 ); + String 用工性质名称 = MyPOIUtils.getStringCellValue( row, 22 ); + String 合同种类 = MyPOIUtils.getStringCellValue( row, 23 ); + String 合同类型 = MyPOIUtils.getStringCellValue( row, 24 ); + String 合同性质 = MyPOIUtils.getStringCellValue( row, 25 ); + int 合同签订次数 = (int)MyPOIUtils.getNumbericCellValue( row, 26 ); + String 合同生效日期 = MyPOIUtils.getStringCellValue( row, 27 ); + String 合同到期日期 = MyPOIUtils.getStringCellValue( row, 28 ); + String 人员属性 = MyPOIUtils.getStringCellValue( row, 29 ); + String 保代员工号 = MyPOIUtils.getStringCellValue( row, 30 ); + String 职场属性 = MyPOIUtils.getStringCellValue( row, 31 ); + String 办公性质 = MyPOIUtils.getStringCellValue( row, 32 ); + String 保代人员属性 = MyPOIUtils.getStringCellValue( row, 33 ); + String 人员状态 = MyPOIUtils.getStringCellValue( row, 34 ); + + TWrTelsalerRecord record = new TWrTelsalerRecord(人员姓名, 人员工号, 籍贯, 参加工作时间, 入职日期, 入司日期, 业务类型, 办公地省, 办公地市, 人员类别, 现任岗位, 现任职级, 机构名称, 职场分类, 片区名称, 团队名称, 对口分公司, 展业地区, 招聘渠道, 渠道明细, 全日制最高学历, 学历类型, 用工性质名称, 合同种类, 合同类型, 合同性质, 合同签订次数, 合同生效日期, 合同到期日期, 人员属性, 保代员工号, 职场属性, 办公性质, 保代人员属性, 人员状态); + + records.add(record); + } + catch ( IllegalStateException error ) + { + error.printStackTrace(); + } + catch ( NumberFormatException error ) + { + error.printStackTrace(); + } + catch ( NullPointerException error ) + { + String message = "第" + String.valueOf( rowIndex ) + "行出现NullPointerException异常"; + logger.error( message, error ); + } + } + } + finally + { + try + { + if ( wb != null ) + { + wb.close(); + } + } + catch ( IOException error ) + { + error.printStackTrace(); + } + } + } + + private static boolean checkExcelFormat( Sheet sheet, String caption, int captionRowIndex, + String[] title, int titleRowIndex ) + { + boolean result = true; + + Row captionRow = sheet.getRow( captionRowIndex ); + Row titleRow = sheet.getRow( titleRowIndex ); + + if ( caption != null && !caption.isEmpty() ) + { + try + { + int captionCellNum = captionRow.getFirstCellNum(); + String captionString = MyPOIUtils.getStringCellValue( captionRow, captionCellNum ); + + if ( !caption.equals( captionString ) ) + { + result = false; + } + } + catch ( NullPointerException error ) + { + result = false; + } + } + + if ( title.length != 0 ) + { + int cellIndex = 0; + + try + { + for ( Cell cell : titleRow ) + { + String cellString = MyPOIUtils.getStringCellValue( cell ); + + if ( !cellString.equals( title[cellIndex] ) ) + { + result = false; + break; + } + + cellIndex++; + } + } + catch ( NullPointerException error ) + { + result = false; + } + } + + return result; + } +} diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/poi/MyPOIUtils.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/poi/MyPOIUtils.java index 90af375..966bb93 100644 --- a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/poi/MyPOIUtils.java +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/poi/MyPOIUtils.java @@ -10,6 +10,7 @@ package com.cpic.xim.utils.poi; import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Row.MissingCellPolicy; @@ -17,7 +18,7 @@ public class MyPOIUtils { public static String getStringCellValue( Cell cell ) { - switch( cell.getCellType() ) + switch ( cell.getCellType()) { case STRING: return cell.getStringCellValue(); @@ -28,9 +29,9 @@ public class MyPOIUtils public static String getStringCellValue( Row row, int columnIndex ) { - Cell cell = row.getCell(columnIndex, MissingCellPolicy.RETURN_NULL_AND_BLANK); + Cell cell = row.getCell( columnIndex, MissingCellPolicy.RETURN_NULL_AND_BLANK ); - switch( cell.getCellType() ) + switch ( cell.getCellType()) { case STRING: return cell.getStringCellValue(); @@ -43,7 +44,7 @@ public class MyPOIUtils { double value = 0.0; - switch ( cell.getCellType() ) + switch ( cell.getCellType()) { case NUMERIC: value = cell.getNumericCellValue(); @@ -59,12 +60,29 @@ public class MyPOIUtils public static double getNumbericCellValue( Row row, int columnIndex ) { double value = 0.0; + String strValue; Cell cell = row.getCell( columnIndex, MissingCellPolicy.RETURN_NULL_AND_BLANK ); + CellType type = cell.getCellType(); - switch ( cell.getCellType() ) + switch ( type ) { case NUMERIC: value = cell.getNumericCellValue(); + break; + case STRING: + // 字符串类型,尝试转换成数字 + strValue = cell.getStringCellValue(); + + try + { + value = Double.parseDouble( strValue ); + } + // 任何异常都视为转换失败 + catch ( Exception error ) + { + value = 0.0; + } + break; default: value = 0.0; @@ -73,4 +91,4 @@ public class MyPOIUtils return value; } -} \ No newline at end of file +} diff --git a/数据/坐席/TWr业务员人力查询 (1).xlsx b/数据/坐席/TWr业务员人力查询 (1).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..18ff82313d9348cc8f6ffa85d8745a07283f32cd GIT binary patch literal 41213 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 T2Ao9@h!*&i1Hmov_-OV&8b#(N literal 0 HcmV?d00001