Explorar el Código

Merge remote-tracking branch 'origin/master'

hanwenjie hace 5 años
padre
commit
14c7cae527

+ 5 - 10
code/sapparent/sapservice/src/main/java/org/fouram/core/plugin/weixin/cp/core/WXCpBase.java

@@ -1,7 +1,5 @@
 package org.fouram.core.plugin.weixin.cp.core;
 
-import me.chanjar.weixin.cp.api.WxCpOAuth2Service;
-import me.chanjar.weixin.cp.api.impl.WxCpOAuth2ServiceImpl;
 import org.fouram.core.util.ConfConfig;
 
 import me.chanjar.weixin.cp.api.WxCpDepartmentService;
@@ -14,27 +12,24 @@ import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
 
 /**
  * 企业微信工具类
- *
+ * 
  * @author Liup
  */
 public class WXCpBase {
-
+	
 
 	public static final WxCpService service = new WxCpServiceImpl();
 	public static final WxCpUserService userService;
-	public static final WxCpOAuth2Service oauth2Service;
 	public static final WxCpDepartmentService departService;
 	static {
 		WxCpDefaultConfigImpl configStorage = new WxCpDefaultConfigImpl();
 		configStorage.setCorpId(ConfConfig.getConfigString("wxCp.corpId"));
-		configStorage.setCorpSecret(ConfConfig.getConfigString("wxCp.mailList.corpSecret"));
+		configStorage.setCorpSecret(ConfConfig.getConfigString("wxCp.corpSecret"));
 		// 初始化基础service
 		service.setWxCpConfigStorage(configStorage);
-		// 初始化service
+		// 初始化用户service
 		userService = new WxCpUserServiceImpl(service);
 		// 初始化部门service
 		departService = new WxCpDepartmentServiceImpl(service);
-		//授权服务
-		oauth2Service= new WxCpOAuth2ServiceImpl(service);
 	}
-}
+}

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

@@ -21,6 +21,7 @@ public class SapEmpEmployment implements Serializable {
 	private String startDate;// 最近一次入职日期
 	private String firstDateWorked;// 首次工作日期
 	private String originalStartDate;// 进入集团日期
+	private String seniorityDate;// 司龄起始日期
 	private String socialServiceAge;// 社会工龄
 	private String seniority;// 司龄(最近入职)
 	private String endDate;// 离职日期

+ 100 - 0
code/sapparent/sapservice/src/main/java/org/fouram/mapper/SapReportMapper.xml

@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="SapReportMapper">
+	<insert id="saveSapPerPerson">
+		insert into SapPerPerson(personId,dateOfBirth,placeOfBirth,education) 
+		values (#{personId},#{dateOfBirth},#{placeOfBirth},#{education})
+	</insert>
+	
+	<insert id="saveSapPerPersonal">
+		insert into SapPerPersonal(personId,firstName,lastName,displayName,
+			formalName,nationality,gender,maritalStatusCode,firstNameAlt1,
+			lastNameAlt1,firstNameAlt2,lastNameAlt2) 
+		values (#{personId},#{firstName},#{lastName},#{displayName},
+			#{formalName},#{nationality},#{gender},#{maritalStatusCode},#{firstNameAlt1},
+			#{lastNameAlt1},#{firstNameAlt2},#{lastNameAlt2})
+	</insert>
+	
+	<insert id="saveSapPerGlobalInfoCHN">
+		insert into SapPerGlobalInfoCHN(personId,householdRegistrationType,nation,
+			politicalOutlook,orgRelationshipLocation,socialSecurityLocation) 
+		values (#{personId},#{householdRegistrationType},#{nation},
+			#{politicalOutlook},#{orgRelationshipLocation},#{socialSecurityLocation})
+	</insert>
+	
+	<insert id="saveSapPerNationalId">
+		insert into SapPerNationalId(personId,countryName,cardType,nationalId) 
+		values (#{personId},#{countryName},#{cardType},#{nationalId})
+	</insert>
+	
+	<insert id="saveSapPerEmail">
+		insert into SapPerEmail(personId) 
+		values (#{personId})
+	</insert>
+	
+	<insert id="saveSapPerPhone">
+		insert into SapPerPhone(personId) 
+		values (#{personId})
+	</insert>
+	
+	<insert id="saveSapPerSocialAccount">
+		insert into SapPerSocialAccount(personId,domainCode,imId) 
+		values (#{personId},#{domainCode},#{imId})
+	</insert>
+	
+	<insert id="saveSapEmpEmployment">
+		insert into SapEmpEmployment(personId,startDate,firstDateWorked,originalStartDate,seniorityDate,socialServiceAge,
+			seniority,endDate,okToRehire,salaryEndDate,benefitsEndDate,leavingReasonCode) 
+		values (#{personId},#{startDate},#{firstDateWorked},#{originalStartDate},#{seniorityDate},#{socialServiceAge},
+			#{seniority},#{endDate},#{okToRehire},#{salaryEndDate},#{benefitsEndDate},#{leavingReasonCode})
+	</insert>
+	
+	<insert id="saveSapEmpJob">
+		insert into SapEmpJob(userId,positionName,positionEntryDate,companyName,businessUnitName,
+			divisionName,departmentName,teamName,locationName,managerId,jobCodeName,
+			jobTitle,rank,managementOrNot) 
+		values (#{userId},#{positionName},#{positionEntryDate},#{companyName},#{businessUnitName},
+			#{divisionName},#{departmentName},#{teamName},#{locationName},#{managerId},#{jobCodeName},
+			#{jobTitle},#{rank},#{managementOrNot})
+	</insert>
+	
+	<insert id="saveSapEmpJobRelationships">
+		insert into SapEmpJobRelationships(userId) 
+		values (#{userId})
+	</insert>
+	
+	<insert id="saveSapOutsideWorkExperience">
+		insert into SapOutsideWorkExperience(userId) 
+		values (#{userId})
+	</insert>
+
+	<insert id="saveSapInsideWorkExperience">
+		insert into SapInsideWorkExperience(userId) 
+		values (#{userId})
+	</insert>
+
+	<insert id="saveSapCourses">
+		insert into SapCourses(userId) 
+		values (#{userId})
+	</insert>
+
+	<insert id="saveSapEducation">
+		insert into SapEducation(userId) 
+		values (#{userId})
+	</insert>
+
+	<insert id="saveSapCertificates">
+		insert into SapCertificates(userId) 
+		values (#{userId})
+	</insert>
+	
+	<insert id="saveSapLanguages">
+		insert into SapLanguages(userId) 
+		values (#{userId})
+	</insert>
+
+	<insert id="saveSapOverallPerformance">
+		insert into SapOverallPerformance(userId) 
+		values (#{userId})
+	</insert>
+</mapper>

+ 67 - 66
code/sapparent/sapservice/src/main/java/org/fouram/service/SapReportService.java

@@ -40,7 +40,7 @@ public class SapReportService extends BaseService {
 		return (List<SapUser>) findList("SapUserMapper.selectReportUserList", null);
 	}
 
-	public void saveAllReportData() throws Exception {
+	public void saveSapAllReportData() throws Exception {
 		HttpHeaders headers = getHttpHeaders();
 		List<SapUser> sapUsers = selectReportUserList();
 		String personIds = "";
@@ -49,26 +49,27 @@ public class SapReportService extends BaseService {
 			personIds += "'" + sapUser.getPersonId() + "',";
 			userIds += "'" + sapUser.getUserId() + "',";
 		}
-		this.saveOrUpdateBackgroundCertificates(headers, personIds, userIds);
-		this.saveOrUpdateBackgroundCourses(headers, userIds);
-		this.saveOrUpdateBackgroundEducation(headers, personIds, userIds);
-		this.saveOrUpdateBackgroundInsideWorkExperience(headers, userIds);
-		this.saveOrUpdateBackgroundLanguages(headers, personIds, userIds);
-		this.saveOrUpdateTrendDataSysOverallPerformance(headers, personIds, userIds);
-		this.saveOrUpdateBackgroundOutsideWorkExperience(headers, userIds);
-		this.saveOrUpdateEmpEmployment(headers, personIds, userIds);
-		this.saveOrUpdateEmpJob(headers, personIds, userIds);
-		this.saveOrUpdateEmpJobRelationships(headers, userIds);
-		this.saveOrUpdatePerEmail(headers, personIds, userIds);
-		this.saveOrUpdatePerGlobalInfoCHN(headers, personIds, userIds);
-		this.saveOrUpdatePerNationalId(headers, personIds, userIds);
-		this.saveOrUpdatePerPerson(headers, personIds, userIds);
-		this.saveOrUpdatePerPhone(headers, personIds, userIds);
-		this.saveOrUpdatePerSocialAccount(headers, personIds, userIds);
+		this.saveSapCertificates(headers, personIds, userIds);
+		this.saveSapCourses(headers, userIds);
+		this.saveSapEducation(headers, personIds, userIds);
+		this.saveSapInsideWorkExperience(headers, userIds);
+		this.saveSapLanguages(headers, personIds, userIds);
+		this.saveSapOverallPerformance(headers, personIds, userIds);
+		this.saveSapOutsideWorkExperience(headers, userIds);
+		this.saveSapEmpEmployment(headers, personIds, userIds);
+		this.saveSapEmpJob(headers, personIds, userIds);
+		this.saveSapEmpJobRelationships(headers, userIds);
+		this.saveSapPerEmail(headers, personIds, userIds);
+		this.saveSapPerGlobalInfoCHN(headers, personIds, userIds);
+		this.saveSapPerNationalId(headers, personIds, userIds);
+		this.saveSapPerPersonal(headers, personIds, userIds);
+		this.saveSapPerPerson(headers, personIds, userIds);
+		this.saveSapPerPhone(headers, personIds, userIds);
+		this.saveSapPerSocialAccount(headers, personIds, userIds);
 	}
 
-//	基本信息	PerPerson,PerPersonal
-	public void saveOrUpdatePerPerson(HttpHeaders headers, String personIds, String userIds) {
+// 基本信息	PerPerson,PerPersonal
+	public void saveSapPerPerson(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/PerPerson?$filter=personIdExternal in %s&$format=json&$expand=customString1Nav";
 		url = String.format(url, personIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -82,13 +83,16 @@ public class SapReportService extends BaseService {
 				String education = userNode.get("customString1Nav").get("externalCode").asText().trim();// 最高学历
 				SapPerPerson entity = SapPerPerson.builder().personId(personId).dateOfBirth(dateOfBirth)
 						.placeOfBirth(placeOfBirth).education(education).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapPerPerson", entity);
 			}
 		}
+	}
 
-		url = "https://api15.sapsf.cn/odata/v2/PerPersonal?$filter=personIdExternal in %s&$format=json&$expand=maritalStatusNav";
+// 基本信息	PerPerson,PerPersonal
+	public void saveSapPerPersonal(HttpHeaders headers, String personIds, String userIds) throws Exception {
+		String url = "https://api15.sapsf.cn/odata/v2/PerPersonal?$filter=personIdExternal in %s&$format=json&$expand=maritalStatusNav";
 		url = String.format(url, personIds);
-		node = requestService.getForObject(url, headers);
+		JsonNode node = requestService.getForObject(url, headers);
 		if (node != null) {
 			Iterator<JsonNode> iterator = node.get("d").get("results").elements();
 			while (iterator.hasNext()) {
@@ -109,13 +113,13 @@ public class SapReportService extends BaseService {
 						.lastName(lastName).displayName(displayName).formalName(formalName).nationality(nationality)
 						.gender(gender).maritalStatusCode(maritalStatusCode).firstNameAlt1(firstNameAlt1)
 						.lastNameAlt1(lastNameAlt1).firstNameAlt2(firstNameAlt2).lastNameAlt2(lastNameAlt2).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapPerPersonal", entity);
 			}
 		}
 	}
 
-//	个人信息	PerGlobalInfoCHN
-	public void saveOrUpdatePerGlobalInfoCHN(HttpHeaders headers, String personIds, String userIds) {
+// 个人信息	PerGlobalInfoCHN
+	public void saveSapPerGlobalInfoCHN(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/PerGlobalInfoCHN?$filter=personIdExternal in %s&$format=json";
 		url = String.format(url, personIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -134,13 +138,13 @@ public class SapReportService extends BaseService {
 						.householdRegistrationType(householdRegistrationType).nation(nation)
 						.politicalOutlook(politicalOutlook).orgRelationshipLocation(orgRelationshipLocation)
 						.socialSecurityLocation(socialSecurityLocation).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapPerGlobalInfoCHN", entity);
 			}
 		}
 	}
 
-//	国家身份信息	PerNationalId
-	public void saveOrUpdatePerNationalId(HttpHeaders headers, String personIds, String userIds) {
+// 国家身份信息	PerNationalId
+	public void saveSapPerNationalId(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/PerNationalId?$filter=personIdExternal in %s&$format=json&$expand=countryNav";
 		url = String.format(url, personIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -154,13 +158,13 @@ public class SapReportService extends BaseService {
 				String nationalId = userNode.get("nationalId").asText().trim();// 国民身份证
 				SapPerNationalId entity = SapPerNationalId.builder().personId(personId).countryName(countryName)
 						.cardType(cardType).nationalId(nationalId).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapPerNationalId", entity);
 			}
 		}
 	}
 
-//	邮件信息	PerEmail
-	public void saveOrUpdatePerEmail(HttpHeaders headers, String personIds, String userIds) {
+// 邮件信息	PerEmail
+	public void saveSapPerEmail(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/PerEmail?$filter=personIdExternal in %s&$format=json&$expand=emailTypeNav";
 		url = String.format(url, personIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -174,14 +178,14 @@ public class SapReportService extends BaseService {
 				String isPrimary = userNode.get("isPrimary").asText().trim();// 主要
 				SapPerEmail entity = SapPerEmail.builder().personId(personId).emailTypeCode(emailTypeCode)
 						.emailAddress(emailAddress).isPrimary(isPrimary).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapPerEmail", entity);
 			}
 		}
 
 	}
 
-//	通讯信息	PerPhone
-	public void saveOrUpdatePerPhone(HttpHeaders headers, String personIds, String userIds) {
+// 通讯信息	PerPhone
+	public void saveSapPerPhone(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/PerPhone?$filter=personIdExternal in %s&$format=json&$expand=phoneTypeNav";
 		url = String.format(url, personIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -195,13 +199,13 @@ public class SapReportService extends BaseService {
 				String isPrimary = userNode.get("isPrimary").asText().trim();// 主要
 				SapPerPhone entity = SapPerPhone.builder().personId(personId).phoneNumber(phoneNumber)
 						.phoneTypeCode(phoneTypeCode).isPrimary(isPrimary).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapPerPhone", entity);
 			}
 		}
 	}
 
-//	社交账号	PerSocialAccount
-	public void saveOrUpdatePerSocialAccount(HttpHeaders headers, String personIds, String userIds) {
+// 社交账号	PerSocialAccount
+	public void saveSapPerSocialAccount(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/PerSocialAccount?$filter=personIdExternal in %s&$format=json&$expand=domainNav";
 		url = String.format(url, personIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -214,13 +218,13 @@ public class SapReportService extends BaseService {
 				String imId = userNode.get("imId").asText().trim();// 微信号
 				SapPerSocialAccount entity = SapPerSocialAccount.builder().personId(personId).domainCode(domainCode)
 						.imId(imId).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapPerSocialAccount", entity);
 			}
 		}
 	}
 
-//	雇佣详细信息	EmpEmployment
-	public void saveOrUpdateEmpEmployment(HttpHeaders headers, String personIds, String userIds) {
+// 雇佣详细信息	EmpEmployment
+	public void saveSapEmpEmployment(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/EmpEmployment?$filter=personIdExternal in %s&$format=json";
 		url = String.format(url, personIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -232,29 +236,26 @@ public class SapReportService extends BaseService {
 				String startDate = userNode.get("startDate").asText().trim();// 最近一次入职日期
 				String firstDateWorked = userNode.get("firstDateWorked").asText().trim();// 首次工作日期
 				String originalStartDate = userNode.get("originalStartDate").asText().trim();// 进入集团日期
-				// TODO 司龄计算日
+				String seniorityDate = userNode.get("seniorityDate").asText().trim();// 司龄起始日期
 				String socialServiceAge = userNode.get("customDouble1").asText().trim();// 社会工龄
 				String seniority = userNode.get("customDouble2").asText().trim();// 司龄(最近入职)
 				String endDate = userNode.get("endDate").asText().trim();// 离职日期
-				// TODO 离职原因
 				String okToRehire = userNode.get("okToRehire").asText().trim();// 可以再雇佣
-				// TODO 工资单结束日期
-				// TODO 最后工作日期
 				String salaryEndDate = userNode.get("salaryEndDate").asText().trim();// 最后结薪日期
 				String benefitsEndDate = userNode.get("benefitsEndDate").asText().trim();// 福利结算日期
 				String leavingReasonCode = userNode.get("customString16Nav").get("externalCode").asText().trim();// 离职详细原因
 				SapEmpEmployment entity = SapEmpEmployment.builder().personId(personId).startDate(startDate)
 						.firstDateWorked(firstDateWorked).originalStartDate(originalStartDate)
-						.socialServiceAge(socialServiceAge).seniority(seniority).endDate(endDate).okToRehire(okToRehire)
-						.salaryEndDate(salaryEndDate).benefitsEndDate(benefitsEndDate)
-						.leavingReasonCode(leavingReasonCode).build();
-				System.out.println(entity);
+						.seniorityDate(seniorityDate).socialServiceAge(socialServiceAge).seniority(seniority)
+						.endDate(endDate).okToRehire(okToRehire).salaryEndDate(salaryEndDate)
+						.benefitsEndDate(benefitsEndDate).leavingReasonCode(leavingReasonCode).build();
+				save("SapReportMapper.saveSapEmpEmployment", entity);
 			}
 		}
 	}
 
 	// 组织以及职位信息 EmpJob
-	public void saveOrUpdateEmpJob(HttpHeaders headers, String personIds, String userIds) {
+	public void saveSapEmpJob(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		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";
 		url = String.format(url, personIds);
@@ -284,13 +285,13 @@ public class SapReportService extends BaseService {
 						.businessUnitName(businessUnitName).divisionName(divisionName).departmentName(departmentName)
 						.teamName(teamName).locationName(locationName).managerId(managerId).jobCodeName(jobCodeName)
 						.jobTitle(jobTitle).rank(rank).managementOrNot(managementOrNot).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapEmpJob", entity);
 			}
 		}
 	}
 
 	// 工作关系 EmpJobRelationships
-	public void saveOrUpdateEmpJobRelationships(HttpHeaders headers, String userIds) {
+	public void saveSapEmpJobRelationships(HttpHeaders headers, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/EmpJobRelationships?$filter=userId in %s&$format=json&$expand=relationshipTypeNav,relUserNav";
 		url = String.format(url, userIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -304,13 +305,13 @@ public class SapReportService extends BaseService {
 						+ userNode.get("relUserNav").get("firstName").asText().trim();// 姓名
 				SapEmpJobRelationships entity = SapEmpJobRelationships.builder().userId(userId)
 						.relationshipTypeCode(relationshipTypeCode).relUserName(relUserName).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapEmpJobRelationships", entity);
 			}
 		}
 	}
 
 	// 先前工作经历 Background_OutsideWorkExperience
-	public void saveOrUpdateBackgroundOutsideWorkExperience(HttpHeaders headers, String userIds) {
+	public void saveSapOutsideWorkExperience(HttpHeaders headers, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/Background_OutsideWorkExperience?$filter=userId in %s&$format=json";
 		url = String.format(url, userIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -333,13 +334,13 @@ public class SapReportService extends BaseService {
 						.position(position).leavingReason(leavingReason)
 						.immediateSupervisorName(immediateSupervisorName).contactInformation(contactInformation)
 						.build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapOutsideWorkExperience", entity);
 			}
 		}
 	}
 
 	// 公司内工作经历 Background_InsideWorkExperience
-	public void saveOrUpdateBackgroundInsideWorkExperience(HttpHeaders headers, String userIds) {
+	public void saveSapInsideWorkExperience(HttpHeaders headers, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/Background_InsideWorkExperience?$filter=userId in %s&$format=json";
 		url = String.format(url, userIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -354,13 +355,13 @@ public class SapReportService extends BaseService {
 				String department = userNode.get("department").asText().trim();// 部门
 				SapInsideWorkExperience entity = SapInsideWorkExperience.builder().userId(userId).startDate(startDate)
 						.endDate(endDate).title(title).department(department).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapInsideWorkExperience", entity);
 			}
 		}
 	}
 
 	// 培训经历 Background_Courses
-	public void saveOrUpdateBackgroundCourses(HttpHeaders headers, String userIds) {
+	public void saveSapCourses(HttpHeaders headers, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/Background_Courses?$filter=userId in %s&$format=json&$expand=custom3Nav,lengthNav";
 		url = String.format(url, userIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -382,13 +383,13 @@ public class SapReportService extends BaseService {
 				SapCourses entity = SapCourses.builder().userId(userId).course(course).institution(institution)
 						.instructionType(instructionType).lengthCode(lengthCode).place(place).duration(duration)
 						.result(result).certificateOrNot(certificateOrNot).dueTime(dueTime).remark(remark).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapCourses", entity);
 			}
 		}
 	}
 
 	// 学历教育 Background_Education
-	public void saveOrUpdateBackgroundEducation(HttpHeaders headers, String personIds, String userIds) {
+	public void saveSapEducation(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/Background_Education?$filter=userId in %s&$format=json";
 		url = String.format(url, personIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -405,13 +406,13 @@ public class SapReportService extends BaseService {
 				String qualification = userNode.get("custom1").asText().trim();// 学位
 				SapEducation entity = SapEducation.builder().userId(userId).startDate(startDate).endDate(endDate)
 						.school(school).major(major).degree(degree).qualification(qualification).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapEducation", entity);
 			}
 		}
 	}
 
 	// 证书 Background_Certificates
-	public void saveOrUpdateBackgroundCertificates(HttpHeaders headers, String personIds, String userIds) {
+	public void saveSapCertificates(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/Background_Certificates?$filter=userId in %s&$format=json";
 		url = String.format(url, personIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -427,13 +428,13 @@ public class SapReportService extends BaseService {
 				String endDate = userNode.get("endDate").asText().trim();// 证书到期日期
 				SapCertificates entity = SapCertificates.builder().userId(userId).name(name).description(description)
 						.institution(institution).startDate(startDate).endDate(endDate).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapCertificates", entity);
 			}
 		}
 	}
 
 	// 语言能力 Background_Languages
-	public void saveOrUpdateBackgroundLanguages(HttpHeaders headers, String personIds, String userIds) {
+	public void saveSapLanguages(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/Background_Languages?$filter=userId in %s&$format=json&$expand=languageNav,speakingProfNav,readingProfNav,writingProfNav";
 		url = String.format(url, personIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -449,13 +450,13 @@ public class SapReportService extends BaseService {
 				SapLanguages entity = SapLanguages.builder().userId(userId).languageCode(languageCode)
 						.speakingProfCode(speakingProfCode).readingProfCode(readingProfCode)
 						.writingProfCode(writingProfCode).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapLanguages", entity);
 			}
 		}
 	}
 
 	// 绩效历史 TrendData_SysOverallPerformance
-	public void saveOrUpdateTrendDataSysOverallPerformance(HttpHeaders headers, String personIds, String userIds) {
+	public void saveSapOverallPerformance(HttpHeaders headers, String personIds, String userIds) throws Exception {
 		String url = "https://api15.sapsf.cn/odata/v2/TrendData_SysOverallPerformance?$filter=userId in %s&$format=json";
 		url = String.format(url, personIds);
 		JsonNode node = requestService.getForObject(url, headers);
@@ -471,7 +472,7 @@ public class SapReportService extends BaseService {
 				String description = userNode.get("description").asText().trim();// 描述
 				SapOverallPerformance entity = SapOverallPerformance.builder().userId(userId).startDate(startDate)
 						.endDate(endDate).module(module).name(name).description(description).build();
-				System.out.println(entity);
+				save("SapReportMapper.saveSapOverallPerformance", entity);
 			}
 		}
 	}