liupeng 5 lat temu
rodzic
commit
c1ce7fc63d

+ 8 - 0
code/sapparent/sapservice/src/main/java/org/fouram/constants/WebConstants.java

@@ -1,7 +1,11 @@
 package org.fouram.constants;
 
+import java.util.Map;
+
 import org.fouram.core.util.ConfConfig;
 
+import com.google.common.collect.Maps;
+
 public final class WebConstants {
 
 	public static final Long TOP_DEPART = 1L;
@@ -11,4 +15,8 @@ public final class WebConstants {
 	public static final String INGORE_PERSONIDS = ConfConfig.getConfigString("ingorePersonIds");
 
 	public static final String SUCCESS = "SUCCESS";
+	
+	public static final Map<String, String> LABEL_MAP = Maps.newHashMap();
+	
+	public static final Map<String, String> NAME_MAP = Maps.newHashMap();
 }

+ 2 - 2
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapCourses.java

@@ -20,8 +20,8 @@ public class SapCourses implements Serializable {
 	private String userId;
 	private String course;// 课程名称
 	private String startDate;// 开始日期
-	private String endData;// 结束日期
-	private String lengthCode;// 培训类型
+	private String endDate;// 结束日期
+	private String type;// 培训类型
 	private String place;// 培训地点
 	private String duration;// 历时
 	private String result;// 培训结果

+ 1 - 1
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapEmpEmployment.java

@@ -28,5 +28,5 @@ public class SapEmpEmployment implements Serializable {
 	private String okToRehire;// 可以再雇佣
 	private String salaryEndDate;// 最后结薪日期
 	private String benefitsEndDate;// 福利结算日期
-	private String leavingReasonCode;// 离职详细原因
+	private String leavingReason;// 离职详细原因
 }

+ 1 - 0
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapEmpJob.java

@@ -27,6 +27,7 @@ public class SapEmpJob implements Serializable {
 	private String teamName;// 小组
 	private String locationName;// 工作地点
 	private String managerId;// 直线经理
+	private String managerName;// 直线经理
 	private String jobCodeName;// 职务分类
 	private String jobTitle;// 标准职务名称
 	private String rank;// 职级

+ 1 - 1
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapEmpJobRelationships.java

@@ -18,6 +18,6 @@ public class SapEmpJobRelationships implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	private String userId;
-	private String relationshipTypeCode;// 关系类型
+	private String relationshipType;// 关系类型
 	private String relUserName;// 姓名
 }

+ 4 - 4
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapLanguages.java

@@ -18,8 +18,8 @@ public class SapLanguages implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	private String userId;
-	private String languageCode;// 语言
-	private String speakingProfCode;// 口语能力
-	private String readingProfCode;// 阅读能力
-	private String writingProfCode;// 书写能力
+	private String language;// 语言
+	private String speakingProf;// 口语能力
+	private String readingProf;// 阅读能力
+	private String writingProf;// 书写能力
 }

+ 1 - 1
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapPerEmail.java

@@ -18,7 +18,7 @@ public class SapPerEmail implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	private String personId;
-	private String emailTypeCode;// 电子邮件类型
+	private String emailType;// 电子邮件类型
 	private String emailAddress;// 电子邮件地址
 	private String isPrimary;// 主要
 }

+ 1 - 1
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapPerPersonal.java

@@ -24,7 +24,7 @@ public class SapPerPersonal implements Serializable {
 	private String formalName;// 全名
 	private String nationality;// 国籍
 	private String gender;// 性别
-	private String maritalStatusCode;// 婚姻状况
+	private String maritalStatus;// 婚姻状况
 	private String firstNameAlt1;// 英文名
 	private String lastNameAlt1;// 英文姓
 	private String firstNameAlt2;// 拼音名

+ 1 - 1
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapPerPhone.java

@@ -18,7 +18,7 @@ public class SapPerPhone implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	private String personId;
-	private String phoneTypeCode;// 电话类型
+	private String phoneType;// 电话类型
 	private String phoneNumber;// 电话号码
 	private String isPrimary;// 主要
 }

+ 1 - 1
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapPerSocialAccount.java

@@ -18,6 +18,6 @@ public class SapPerSocialAccount implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	private String personId;// 员工号
-	private String domainCode;// 微信
+	private String domain;// 微信
 	private String imId;// 微信号
 }

+ 17 - 18
code/sapparent/sapservice/src/main/java/org/fouram/mapper/SapReportMapper.xml

@@ -16,10 +16,10 @@
 	
 	<insert id="saveSapPerPersonal">
 		insert into sapperpersonal(personId,firstName,lastName,displayName,
-			formalName,nationality,gender,maritalStatusCode,firstNameAlt1,
+			formalName,nationality,gender,maritalStatus,firstNameAlt1,
 			lastNameAlt1,firstNameAlt2,lastNameAlt2) 
 		values (#{personId},#{firstName},#{lastName},#{displayName},
-			#{formalName},#{nationality},#{gender},#{maritalStatusCode},#{firstNameAlt1},
+			#{formalName},#{nationality},#{gender},#{maritalStatus},#{firstNameAlt1},
 			#{lastNameAlt1},#{firstNameAlt2},#{lastNameAlt2})
 	</insert>
 	
@@ -48,8 +48,8 @@
 	</delete>
 	
 	<insert id="saveSapPerEmail">
-		insert into sapperemail(personId,emailTypeCode,emailAddress,isPrimary) 
-		values (#{personId},#{emailTypeCode},#{emailAddress},#{isPrimary})
+		insert into sapperemail(personId,emailType,emailAddress,isPrimary) 
+		values (#{personId},#{emailType},#{emailAddress},#{isPrimary})
 	</insert>
 	
 	<delete id="deleteSapPerPhone">
@@ -57,8 +57,8 @@
 	</delete>
 	
 	<insert id="saveSapPerPhone">
-		insert into sapperphone(personId,phoneNumber,phoneTypeCode,isPrimary) 
-		values (#{personId},#{phoneNumber},#{phoneTypeCode},#{isPrimary})
+		insert into sapperphone(personId,phoneNumber,phoneType,isPrimary) 
+		values (#{personId},#{phoneNumber},#{phoneType},#{isPrimary})
 	</insert>
 	
 	<delete id="deleteSapPerSocialAccount">
@@ -66,8 +66,7 @@
 	</delete>
 	
 	<insert id="saveSapPerSocialAccount">
-		insert into sappersocialaccount(personId,domainCode,imId) 
-		values (#{personId},#{domainCode},#{imId})
+		insert into sappersocialaccount(personId,domain,imId) values (#{personId},#{domain},#{imId})
 	</insert>
 	
 	<delete id="deleteSapEmpEmployment">
@@ -76,9 +75,9 @@
 	
 	<insert id="saveSapEmpEmployment">
 		insert into sapempemployment(personId,startDate,firstDateWorked,originalStartDate,seniorityDate,socialServiceAge,
-			seniority,endDate,okToRehire,salaryEndDate,benefitsEndDate,leavingReasonCode) 
+			seniority,endDate,okToRehire,salaryEndDate,benefitsEndDate,leavingReason) 
 		values (#{personId},#{startDate},#{firstDateWorked},#{originalStartDate},#{seniorityDate},#{socialServiceAge},
-			#{seniority},#{endDate},#{okToRehire},#{salaryEndDate},#{benefitsEndDate},#{leavingReasonCode})
+			#{seniority},#{endDate},#{okToRehire},#{salaryEndDate},#{benefitsEndDate},#{leavingReason})
 	</insert>
 	
 	<delete id="deleteSapEmpJob">
@@ -87,10 +86,10 @@
 	
 	<insert id="saveSapEmpJob">
 		insert into sapempjob(userId,positionName,positionEntryDate,companyName,businessUnitName,
-			divisionName,departmentName,teamName,locationName,managerId,jobCodeName,
+			divisionName,departmentName,teamName,locationName,managerId,managerName,jobCodeName,
 			jobTitle,rank,managementOrNot) 
 		values (#{userId},#{positionName},#{positionEntryDate},#{companyName},#{businessUnitName},
-			#{divisionName},#{departmentName},#{teamName},#{locationName},#{managerId},#{jobCodeName},
+			#{divisionName},#{departmentName},#{teamName},#{locationName},#{managerId},#{managerName},#{jobCodeName},
 			#{jobTitle},#{rank},#{managementOrNot})
 	</insert>
 	
@@ -99,8 +98,8 @@
 	</delete>
 	
 	<insert id="saveSapEmpJobRelationships">
-		insert into sapempjobrelationships(userId,relationshipTypeCode,relUserName) 
-		values (#{userId},#{relationshipTypeCode},#{relUserName})
+		insert into sapempjobrelationships(userId,relationshipType,relUserName) 
+		values (#{userId},#{relationshipType},#{relUserName})
 	</insert>
 	
 	<delete id="deleteSapOutsideWorkExperience">
@@ -128,9 +127,9 @@
 	</delete>
 
 	<insert id="saveSapCourses">
-		insert into sapcourses(userId,course,institution,instructionType,lengthCode,
+		insert into sapcourses(userId,course,startDate,endDate,type,
 			place,duration,result,certificateOrNot,dueTime,remark) 
-		values (#{userId},#{course},#{institution},#{instructionType},#{lengthCode},
+		values (#{userId},#{course},#{startDate},#{endDate},#{type},
 			#{place},#{duration},#{result},#{certificateOrNot},#{dueTime},#{remark})
 	</insert>
 	
@@ -157,8 +156,8 @@
 	</delete>
 
 	<insert id="saveSapLanguages">
-		insert into saplanguages(userId,languageCode,speakingProfCode,readingProfCode,writingProfCode) 
-		values (#{userId},#{languageCode},#{speakingProfCode},#{readingProfCode},#{writingProfCode})
+		insert into saplanguages(userId,language,speakingProf,readingProf,writingProf) 
+		values (#{userId},#{language},#{speakingProf},#{readingProf},#{writingProf})
 	</insert>
 	
 	<delete id="deleteSapOverallPerformance">

+ 98 - 62
code/sapparent/sapservice/src/main/java/org/fouram/service/SapReportService.java

@@ -3,6 +3,7 @@ package org.fouram.service;
 import java.util.Iterator;
 import java.util.List;
 
+import org.fouram.constants.WebConstants;
 import org.fouram.core.base.service.BaseService;
 import org.fouram.core.base.service.RequestService;
 import org.fouram.core.util.JsonNodeUtil;
@@ -45,30 +46,50 @@ public class SapReportService extends BaseService {
 	public void saveSapAllReportData() throws Exception {
 		HttpHeaders headers = getHttpHeaders();
 		List<SapUser> sapUsers = selectReportUserList();
-//		this.saveSapCertificates(headers, sapUsers);
-//		this.saveSapCourses(headers, sapUsers);
-		this.saveSapEducation(headers, sapUsers);
-//		this.saveSapInsideWorkExperience(headers, sapUsers);
-//		this.saveSapLanguages(headers, sapUsers);
-//		this.saveSapOverallPerformance(headers, sapUsers);
-//		this.saveSapEmpJob(headers, sapUsers);
-//		this.saveSapOutsideWorkExperience(headers, sapUsers);
-//		this.saveSapEmpEmployment(headers, sapUsers);
-//		this.saveSapEmpJobRelationships(headers, sapUsers);
-//		this.saveSapPerEmail(headers, sapUsers);
+		for (SapUser sapUser : sapUsers) {
+			WebConstants.NAME_MAP.put(sapUser.getUserId(), sapUser.getName());
+		}
+//		// 基本信息 PerPerson
+//		this.saveSapPerPerson(headers, sapUsers);
+//		// 基本信息 PerPerson,PerPersonal
+//		this.saveSapPerPersonal(headers, sapUsers);
+//		// 个人信息 PerGlobalInfoCHN
 //		this.saveSapPerGlobalInfoCHN(headers, sapUsers);
+//		// 国家身份信息 PerNationalId
 //		this.saveSapPerNationalId(headers, sapUsers);
-//		this.saveSapPerPersonal(headers, sapUsers);
-//		this.saveSapPerPerson(headers, sapUsers);
+//		// 邮件信息 PerEmail
+//		this.saveSapPerEmail(headers, sapUsers);
+//		// 通讯信息 PerPhone
 //		this.saveSapPerPhone(headers, sapUsers);
+//		// 社交账号 PerSocialAccount
 //		this.saveSapPerSocialAccount(headers, sapUsers);
+//		// 雇佣详细信息 EmpEmployment
+//		this.saveSapEmpEmployment(headers, sapUsers);
+//		// 组织以及职位信息 EmpJob
+//		this.saveSapEmpJob(headers, sapUsers);
+//		// 工作关系 EmpJobRelationships
+//		this.saveSapEmpJobRelationships(headers, sapUsers);
+//		// 先前工作经历 Background_OutsideWorkExperience
+//		this.saveSapOutsideWorkExperience(headers, sapUsers);
+		// 公司内工作经历 Background_InsideWorkExperience
+		this.saveSapInsideWorkExperience(headers, sapUsers);
+		// 培训经历 Background_Courses
+		this.saveSapCourses(headers, sapUsers);
+		// 学历教育 Background_Education
+		this.saveSapEducation(headers, sapUsers);
+		// 证书 Background_Certificates
+		this.saveSapCertificates(headers, sapUsers);
+		// 语言能力 Background_Languages
+		this.saveSapLanguages(headers, sapUsers);
+		// 绩效历史 TrendData_SysOverallPerformance
+		this.saveSapOverallPerformance(headers, sapUsers);
 	}
 
 	// 基本信息 PerPerson
 	public void saveSapPerPerson(HttpHeaders headers, List<SapUser> sapUsers) throws Exception {
 		delete("SapReportMapper.deleteSapPerPerson", null);
 
-		String url = "https://api15.sapsf.cn/odata/v2/PerPerson?$filter=personIdExternal in %s&$format=json&$expand=customString1Nav";
+		String url = "https://api15.sapsf.cn/odata/v2/PerPerson?$filter=personIdExternal in %s&$format=json";
 		url = String.format(url, getPersonIds(sapUsers));
 		JsonNode node = requestService.getForObject(url, headers);
 		if (node != null) {
@@ -78,7 +99,7 @@ public class SapReportService extends BaseService {
 				String personId = JsonNodeUtil.getValue(userNode, "personIdExternal");// 员工号
 				String dateOfBirth = JsonNodeUtil.getValue(userNode, "dateOfBirth");// 出生日期
 				String placeOfBirth = JsonNodeUtil.getValue(userNode, "placeOfBirth");// 籍贯
-				String education = JsonNodeUtil.getValue(userNode, "customString1Nav", "externalCode");// 最高学历
+				String education = getLabelValue(JsonNodeUtil.getValue(userNode, "customString1"));// 最高学历
 				SapPerPerson entity = SapPerPerson.builder().personId(personId).dateOfBirth(dateOfBirth)
 						.placeOfBirth(placeOfBirth).education(education).build();
 				save("SapReportMapper.saveSapPerPerson", entity);
@@ -90,7 +111,7 @@ public class SapReportService extends BaseService {
 	public void saveSapPerPersonal(HttpHeaders headers, List<SapUser> sapUsers) throws Exception {
 		delete("SapReportMapper.deleteSapPerPersonal", null);
 
-		String url = "https://api15.sapsf.cn/odata/v2/PerPersonal?$filter=personIdExternal in %s&$format=json&$expand=maritalStatusNav";
+		String url = "https://api15.sapsf.cn/odata/v2/PerPersonal?$filter=personIdExternal in %s&$format=json";
 		url = String.format(url, getPersonIds(sapUsers));
 		JsonNode node = requestService.getForObject(url, headers);
 		if (node != null) {
@@ -104,14 +125,14 @@ public class SapReportService extends BaseService {
 				String formalName = JsonNodeUtil.getValue(userNode, "formalName");// 全名
 				String nationality = JsonNodeUtil.getValue(userNode, "nationality");// 国籍
 				String gender = JsonNodeUtil.getValue(userNode, "gender");// 性别
-				String maritalStatusCode = JsonNodeUtil.getValue(userNode, "maritalStatusNav", "externalCode");// 婚姻状况
+				String maritalStatus = getLabelValue(JsonNodeUtil.getValue(userNode, "maritalStatus"));// 婚姻状况
 				String firstNameAlt1 = JsonNodeUtil.getValue(userNode, "firstNameAlt1");// 英文名
 				String lastNameAlt1 = JsonNodeUtil.getValue(userNode, "lastNameAlt1");// 英文姓
 				String firstNameAlt2 = JsonNodeUtil.getValue(userNode, "firstNameAlt2");// 拼音名
 				String lastNameAlt2 = JsonNodeUtil.getValue(userNode, "lastNameAlt2");// 拼音姓
 				SapPerPersonal entity = SapPerPersonal.builder().personId(personId).firstName(firstName)
 						.lastName(lastName).displayName(displayName).formalName(formalName).nationality(nationality)
-						.gender(gender).maritalStatusCode(maritalStatusCode).firstNameAlt1(firstNameAlt1)
+						.gender(gender).maritalStatus(maritalStatus).firstNameAlt1(firstNameAlt1)
 						.lastNameAlt1(lastNameAlt1).firstNameAlt2(firstNameAlt2).lastNameAlt2(lastNameAlt2).build();
 				save("SapReportMapper.saveSapPerPersonal", entity);
 			}
@@ -130,11 +151,11 @@ public class SapReportService extends BaseService {
 			while (iterator.hasNext()) {
 				JsonNode userNode = iterator.next();
 				String personId = JsonNodeUtil.getValue(userNode, "personIdExternal");
-				String householdRegistrationType = JsonNodeUtil.getValue(userNode, "genericNumber1Nav", "externalCode");// 户口类型
-				String nation = JsonNodeUtil.getValue(userNode, "genericNumber4Nav", "externalCode");// 民族
-				String politicalOutlook = JsonNodeUtil.getValue(userNode, "customString6Nav", "externalCode");// 政治面貌
+				String householdRegistrationType = getLabelValue(JsonNodeUtil.getValue(userNode, "genericNumber1"));// 户口类型
+				String nation = getLabelValue(JsonNodeUtil.getValue(userNode, "genericNumber4"));// 民族
+				String politicalOutlook = getLabelValue(JsonNodeUtil.getValue(userNode, "customString6"));// 政治面貌
 				String orgRelationshipLocation = JsonNodeUtil.getValue(userNode, "customString1");// 组织关系所在地
-				String socialSecurityLocation = JsonNodeUtil.getValue(userNode, "customString2");// 社保所在地
+				String socialSecurityLocation = getLabelValue(JsonNodeUtil.getValue(userNode, "customString2"));// 社保所在地
 				SapPerGlobalInfoCHN entity = SapPerGlobalInfoCHN.builder().personId(personId)
 						.householdRegistrationType(householdRegistrationType).nation(nation)
 						.politicalOutlook(politicalOutlook).orgRelationshipLocation(orgRelationshipLocation)
@@ -170,7 +191,7 @@ public class SapReportService extends BaseService {
 	public void saveSapPerEmail(HttpHeaders headers, List<SapUser> sapUsers) throws Exception {
 		delete("SapReportMapper.deleteSapPerEmail", null);
 
-		String url = "https://api15.sapsf.cn/odata/v2/PerEmail?$filter=personIdExternal in %s&$format=json&$expand=emailTypeNav";
+		String url = "https://api15.sapsf.cn/odata/v2/PerEmail?$filter=personIdExternal in %s&$format=json";
 		url = String.format(url, getPersonIds(sapUsers));
 		JsonNode node = requestService.getForObject(url, headers);
 		if (node != null) {
@@ -178,10 +199,10 @@ public class SapReportService extends BaseService {
 			while (iterator.hasNext()) {
 				JsonNode userNode = iterator.next();
 				String personId = JsonNodeUtil.getValue(userNode, "personIdExternal");
-				String emailTypeCode = JsonNodeUtil.getValue(userNode, "emailTypeNav", "externalCode");// 电子邮件类型
+				String emailType = getLabelValue(JsonNodeUtil.getValue(userNode, "emailType"));// 电子邮件类型
 				String emailAddress = JsonNodeUtil.getValue(userNode, "emailAddress");// 电子邮件地址
 				String isPrimary = JsonNodeUtil.getValue(userNode, "isPrimary");// 主要
-				SapPerEmail entity = SapPerEmail.builder().personId(personId).emailTypeCode(emailTypeCode)
+				SapPerEmail entity = SapPerEmail.builder().personId(personId).emailType(emailType)
 						.emailAddress(emailAddress).isPrimary(isPrimary).build();
 				save("SapReportMapper.saveSapPerEmail", entity);
 			}
@@ -193,7 +214,7 @@ public class SapReportService extends BaseService {
 	public void saveSapPerPhone(HttpHeaders headers, List<SapUser> sapUsers) throws Exception {
 		delete("SapReportMapper.deleteSapPerPhone", null);
 
-		String url = "https://api15.sapsf.cn/odata/v2/PerPhone?$filter=personIdExternal in %s&$format=json&$expand=phoneTypeNav";
+		String url = "https://api15.sapsf.cn/odata/v2/PerPhone?$filter=personIdExternal in %s&$format=json";
 		url = String.format(url, getPersonIds(sapUsers));
 		JsonNode node = requestService.getForObject(url, headers);
 		if (node != null) {
@@ -201,11 +222,11 @@ public class SapReportService extends BaseService {
 			while (iterator.hasNext()) {
 				JsonNode userNode = iterator.next();
 				String personId = JsonNodeUtil.getValue(userNode, "personIdExternal");
-				String phoneTypeCode = JsonNodeUtil.getValue(userNode, "phoneTypeNav", "externalCode");// 电话类型
+				String phoneType = getLabelValue(JsonNodeUtil.getValue(userNode, "phoneType"));// 电话类型
 				String phoneNumber = JsonNodeUtil.getValue(userNode, "phoneNumber");// 电话号码
 				String isPrimary = JsonNodeUtil.getValue(userNode, "isPrimary");// 主要
 				SapPerPhone entity = SapPerPhone.builder().personId(personId).phoneNumber(phoneNumber)
-						.phoneTypeCode(phoneTypeCode).isPrimary(isPrimary).build();
+						.phoneType(phoneType).isPrimary(isPrimary).build();
 				save("SapReportMapper.saveSapPerPhone", entity);
 			}
 		}
@@ -215,7 +236,7 @@ public class SapReportService extends BaseService {
 	public void saveSapPerSocialAccount(HttpHeaders headers, List<SapUser> sapUsers) throws Exception {
 		delete("SapReportMapper.deleteSapPerSocialAccount", null);
 
-		String url = "https://api15.sapsf.cn/odata/v2/PerSocialAccount?$filter=personIdExternal in %s&$format=json&$expand=domainNav";
+		String url = "https://api15.sapsf.cn/odata/v2/PerSocialAccount?$filter=personIdExternal in %s&$format=json";
 		url = String.format(url, getPersonIds(sapUsers));
 		JsonNode node = requestService.getForObject(url, headers);
 		if (node != null) {
@@ -223,10 +244,10 @@ public class SapReportService extends BaseService {
 			while (iterator.hasNext()) {
 				JsonNode userNode = iterator.next();
 				String personId = JsonNodeUtil.getValue(userNode, "personIdExternal");
-				String domainCode = JsonNodeUtil.getValue(userNode, "domainNav", "externalCode");// 微信
+				String domain = getLabelValue(JsonNodeUtil.getValue(userNode, "domain"));// 微信
 				String imId = JsonNodeUtil.getValue(userNode, "imId");// 微信号
-				SapPerSocialAccount entity = SapPerSocialAccount.builder().personId(personId).domainCode(domainCode)
-						.imId(imId).build();
+				SapPerSocialAccount entity = SapPerSocialAccount.builder().personId(personId).domain(domain).imId(imId)
+						.build();
 				save("SapReportMapper.saveSapPerSocialAccount", entity);
 			}
 		}
@@ -254,12 +275,12 @@ public class SapReportService extends BaseService {
 				String okToRehire = JsonNodeUtil.getValue(userNode, "okToRehire");// 可以再雇佣
 				String salaryEndDate = JsonNodeUtil.getValue(userNode, "salaryEndDate");// 最后结薪日期
 				String benefitsEndDate = JsonNodeUtil.getValue(userNode, "benefitsEndDate");// 福利结算日期
-				String leavingReasonCode = JsonNodeUtil.getValue(userNode, "customString16Nav", "externalCode");// 离职详细原因
+				String leavingReason = getLabelValue(JsonNodeUtil.getValue(userNode, "customString16"));// 离职详细原因
 				SapEmpEmployment entity = SapEmpEmployment.builder().personId(personId).startDate(startDate)
 						.firstDateWorked(firstDateWorked).originalStartDate(originalStartDate)
 						.seniorityDate(seniorityDate).socialServiceAge(socialServiceAge).seniority(seniority)
 						.endDate(endDate).okToRehire(okToRehire).salaryEndDate(salaryEndDate)
-						.benefitsEndDate(benefitsEndDate).leavingReasonCode(leavingReasonCode).build();
+						.benefitsEndDate(benefitsEndDate).leavingReason(leavingReason).build();
 				save("SapReportMapper.saveSapEmpEmployment", entity);
 			}
 		}
@@ -270,7 +291,7 @@ public class SapReportService extends BaseService {
 		delete("SapReportMapper.deleteSapEmpJob", null);
 
 		String url = "https://api15.sapsf.cn/odata/v2/EmpJob?$filter=userId in %s&$format=json"
-				+ "&$expand=positionNav,companyNav,divisionNav,departmentNav,customString19Nav,locationNav,jobCodeNav,customString2Nav,customString4Nav";
+				+ "&$expand=positionNav,companyNav,businessUnitNav,divisionNav,departmentNav,customString19Nav,locationNav,jobCodeNav";
 		url = String.format(url, getUserIds(sapUsers));
 		JsonNode node = requestService.getForObject(url, headers);
 		if (node != null) {
@@ -280,7 +301,6 @@ public class SapReportService extends BaseService {
 				String userId = JsonNodeUtil.getValue(userNode, "userId");
 				String positionName = JsonNodeUtil.getValue(userNode, "positionNav", "externalName_zh_CN");// 职位
 				String positionEntryDate = JsonNodeUtil.getValue(userNode, "positionEntryDate");// 就职日期
-				// TODO 在职时间
 				String companyName = JsonNodeUtil.getValue(userNode, "companyNav", "name");// 公司
 				String businessUnitName = JsonNodeUtil.getValue(userNode, "businessUnitNav", "name");// 业务单元
 				String divisionName = JsonNodeUtil.getValue(userNode, "divisionNav", "name");// 部门
@@ -288,16 +308,17 @@ public class SapReportService extends BaseService {
 				String teamName = JsonNodeUtil.getValue(userNode, "customString19Nav", "externalName_zh_CN");// 小组
 				String locationName = JsonNodeUtil.getValue(userNode, "locationNav", "name");// 工作地点
 				String managerId = JsonNodeUtil.getValue(userNode, "managerId");// 直线经理
+				String managerName = WebConstants.NAME_MAP.get(managerId);// 直线经理
 				String jobCodeName = JsonNodeUtil.getValue(userNode, "jobCodeNav", "name");// 职务分类
 				String jobTitle = JsonNodeUtil.getValue(userNode, "jobTitle");// 标准职务名称
-				// TODO 员工性质
-				String rank = JsonNodeUtil.getValue(userNode, "customString2Nav", "externalCode");// 职级
-				String managementOrNot = JsonNodeUtil.getValue(userNode, "customString4Nav", "externalCode");// 是否管理层
+				String rank = getLabelValue(JsonNodeUtil.getValue(userNode, "customString2"));// 职级
+				String managementOrNot = getLabelValue(JsonNodeUtil.getValue(userNode, "customString4"));// 是否管理层
 				SapEmpJob entity = SapEmpJob.builder().userId(userId).positionName(positionName)
 						.positionEntryDate(positionEntryDate).companyName(companyName)
 						.businessUnitName(businessUnitName).divisionName(divisionName).departmentName(departmentName)
-						.teamName(teamName).locationName(locationName).managerId(managerId).jobCodeName(jobCodeName)
-						.jobTitle(jobTitle).rank(rank).managementOrNot(managementOrNot).build();
+						.teamName(teamName).locationName(locationName).managerId(managerId).managerName(managerName)
+						.jobCodeName(jobCodeName).jobTitle(jobTitle).rank(rank).managementOrNot(managementOrNot)
+						.build();
 				save("SapReportMapper.saveSapEmpJob", entity);
 			}
 		}
@@ -307,7 +328,7 @@ public class SapReportService extends BaseService {
 	public void saveSapEmpJobRelationships(HttpHeaders headers, List<SapUser> sapUsers) throws Exception {
 		delete("SapReportMapper.deleteSapEmpJobRelationships", null);
 
-		String url = "https://api15.sapsf.cn/odata/v2/EmpJobRelationships?$filter=userId in %s&$format=json&$expand=relationshipTypeNav,relUserNav";
+		String url = "https://api15.sapsf.cn/odata/v2/EmpJobRelationships?$filter=userId in %s&$format=json&$expand=relUserNav";
 		url = String.format(url, getUserIds(sapUsers));
 		JsonNode node = requestService.getForObject(url, headers);
 		if (node != null) {
@@ -315,11 +336,11 @@ public class SapReportService extends BaseService {
 			while (iterator.hasNext()) {
 				JsonNode userNode = iterator.next();
 				String userId = JsonNodeUtil.getValue(userNode, "userId");
-				String relationshipTypeCode = JsonNodeUtil.getValue(userNode, "relationshipTypeNav", "externalCode");// 关系类型
+				String relationshipType = getLabelValue(JsonNodeUtil.getValue(userNode, "relationshipType"));// 关系类型
 				String relUserName = JsonNodeUtil.getValue(userNode, "relUserNav", "lastName")
 						+ JsonNodeUtil.getValue(userNode, "relUserNav", "firstName");// 姓名
 				SapEmpJobRelationships entity = SapEmpJobRelationships.builder().userId(userId)
-						.relationshipTypeCode(relationshipTypeCode).relUserName(relUserName).build();
+						.relationshipType(relationshipType).relUserName(relUserName).build();
 				save("SapReportMapper.saveSapEmpJobRelationships", entity);
 			}
 		}
@@ -358,6 +379,8 @@ public class SapReportService extends BaseService {
 
 	// 公司内工作经历 Background_InsideWorkExperience
 	public void saveSapInsideWorkExperience(HttpHeaders headers, List<SapUser> sapUsers) throws Exception {
+		delete("SapReportMapper.deleteSapInsideWorkExperience", null);
+
 		String url = "https://api15.sapsf.cn/odata/v2/Background_InsideWorkExperience?$filter=userId in %s&$format=json";
 		url = String.format(url, getUserIds(sapUsers));
 		JsonNode node = requestService.getForObject(url, headers);
@@ -379,7 +402,9 @@ public class SapReportService extends BaseService {
 
 	// 培训经历 Background_Courses
 	public void saveSapCourses(HttpHeaders headers, List<SapUser> sapUsers) throws Exception {
-		String url = "https://api15.sapsf.cn/odata/v2/Background_Courses?$filter=userId in %s&$format=json&$expand=custom3Nav,lengthNav";
+		delete("SapReportMapper.deleteSapCourses", null);
+
+		String url = "https://api15.sapsf.cn/odata/v2/Background_Courses?$filter=userId in %s&$format=json";
 		url = String.format(url, getUserIds(sapUsers));
 		JsonNode node = requestService.getForObject(url, headers);
 		if (node != null) {
@@ -389,16 +414,16 @@ public class SapReportService extends BaseService {
 				String userId = JsonNodeUtil.getValue(userNode, "userId");
 				String course = JsonNodeUtil.getValue(userNode, "course");// 课程名称
 				String startDate = JsonNodeUtil.getValue(userNode, "institution");// 开始日期
-				String endData = JsonNodeUtil.getValue(userNode, "instructionType");// 结束日期
-				String lengthCode = JsonNodeUtil.getValue(userNode, "lengthNav", "externalCode");// 培训类型
+				String endDate = JsonNodeUtil.getValue(userNode, "instructionType");// 结束日期
+				String type = getLabelValue(JsonNodeUtil.getValue(userNode, "length"));// 培训类型
 				String place = JsonNodeUtil.getValue(userNode, "custom9");// 培训地点
 				String duration = JsonNodeUtil.getValue(userNode, "custom1");// 历时
 				String result = JsonNodeUtil.getValue(userNode, "custom2");// 培训结果
-				String certificateOrNot = JsonNodeUtil.getValue(userNode, "custom3Nav", "externalCode");// 是否有证书
+				String certificateOrNot = getLabelValue(JsonNodeUtil.getValue(userNode, "custom3"));// 是否有证书
 				String dueTime = JsonNodeUtil.getValue(userNode, "custom4");// 培训服务期到期时间
 				String remark = JsonNodeUtil.getValue(userNode, "custom7");// 备注
 				SapCourses entity = SapCourses.builder().userId(userId).course(course).startDate(startDate)
-						.endData(endData).lengthCode(lengthCode).place(place).duration(duration).result(result)
+						.endDate(endDate).type(type).place(place).duration(duration).result(result)
 						.certificateOrNot(certificateOrNot).dueTime(dueTime).remark(remark).build();
 				save("SapReportMapper.saveSapCourses", entity);
 			}
@@ -407,6 +432,8 @@ public class SapReportService extends BaseService {
 
 	// 学历教育 Background_Education
 	public void saveSapEducation(HttpHeaders headers, List<SapUser> sapUsers) throws Exception {
+		delete("SapReportMapper.deleteSapEducation", null);
+
 		String url = "https://api15.sapsf.cn/odata/v2/Background_Education?$filter=userId in %s&$format=json";
 		url = String.format(url, getUserIds(sapUsers));
 		JsonNode node = requestService.getForObject(url, headers);
@@ -456,7 +483,7 @@ public class SapReportService extends BaseService {
 	public void saveSapLanguages(HttpHeaders headers, List<SapUser> sapUsers) throws Exception {
 		delete("SapReportMapper.deleteSapLanguages", null);
 
-		String url = "https://api15.sapsf.cn/odata/v2/Background_Languages?$filter=userId in %s&$format=json&$expand=languageNav,speakingProfNav,readingProfNav,writingProfNav";
+		String url = "https://api15.sapsf.cn/odata/v2/Background_Languages?$filter=userId in %s&$format=json";
 		url = String.format(url, getUserIds(sapUsers));
 		JsonNode node = requestService.getForObject(url, headers);
 		if (node != null) {
@@ -464,13 +491,12 @@ public class SapReportService extends BaseService {
 			while (iterator.hasNext()) {
 				JsonNode userNode = iterator.next();
 				String userId = JsonNodeUtil.getValue(userNode, "userId");
-				String languageCode = JsonNodeUtil.getValue(userNode, "languageNav", "externalCode");// 语言
-				String speakingProfCode = JsonNodeUtil.getValue(userNode, "speakingProfNav");// 口语能力
-				String readingProfCode = JsonNodeUtil.getValue(userNode, "readingProfNav");// 阅读能力
-				String writingProfCode = JsonNodeUtil.getValue(userNode, "writingProfNav");// 书写能力
-				SapLanguages entity = SapLanguages.builder().userId(userId).languageCode(languageCode)
-						.speakingProfCode(speakingProfCode).readingProfCode(readingProfCode)
-						.writingProfCode(writingProfCode).build();
+				String language = getLabelValue(JsonNodeUtil.getValue(userNode, "language"));// 语言
+				String speakingProf = getLabelValue(JsonNodeUtil.getValue(userNode, "speakingProf"));// 口语能力
+				String readingProf = getLabelValue(JsonNodeUtil.getValue(userNode, "readingProf"));// 阅读能力
+				String writingProf = getLabelValue(JsonNodeUtil.getValue(userNode, "writingProf"));// 书写能力
+				SapLanguages entity = SapLanguages.builder().userId(userId).language(language)
+						.speakingProf(speakingProf).readingProf(readingProf).writingProf(writingProf).build();
 				save("SapReportMapper.saveSapLanguages", entity);
 			}
 		}
@@ -501,12 +527,22 @@ public class SapReportService extends BaseService {
 	}
 
 	public String getLabelValue(String optionId) {
-		if(Tools.isEmpty(optionId)) {
+		if (Tools.isEmpty(optionId)) {
 			return "";
 		}
-		String url = "https://api15.sapsf.cn/odata/v2/PicklistLabel(locale='zh_CN',optionId=" + optionId
-				+ ")?$format=json";
-		JsonNode node = requestService.getForObject(url, getHttpHeaders());
-		return JsonNodeUtil.getValue(node, "d", "label");
+		if (WebConstants.LABEL_MAP.containsKey(optionId)) {
+			return WebConstants.LABEL_MAP.get(optionId);
+		} else {
+			String value = "";
+			try {
+				String url = "https://api15.sapsf.cn/odata/v2/PicklistLabel(locale='zh_CN',optionId=" + optionId
+						+ ")?$format=json";
+				JsonNode node = requestService.getForObject(url, getHttpHeaders());
+				value = JsonNodeUtil.getValue(node, "d", "label");
+			} catch (Exception e) {
+			}
+			WebConstants.LABEL_MAP.put(optionId, value);
+			return value;
+		}
 	}
 }