You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

266 lines
12 KiB
Java

2 years ago
package com.engine.custom.yunxuetang;
import com.alibaba.fastjson.JSONObject;
import com.engine.custom.yunxuetang.bean.DeptRequestBody;
import com.engine.custom.yunxuetang.bean.JobRequestBody;
import com.engine.custom.yunxuetang.bean.JobTypeRequestBody;
import com.engine.custom.yunxuetang.bean.ResponseData;
import com.engine.custom.yunxuetang.util.HttpClientUtil;
import com.engine.custom.yunxuetang.util.SyncUtil;
import com.weaver.general.Util;
import okhttp3.*;
import weaver.conn.BatchRecordSet;
import weaver.conn.RecordSet;
import weaver.general.GCONST;
import weaver.general.StringUtil;
import weaver.hrm.job.JobActivitiesComInfo;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
//查询未封存的分部 数量不大暂不分页
public static final String querySubsql = "select ID,SUBCOMPANYNAME,SHOWORDER,SUBCOMPANYCODE from hrmsubcompany where CANCELED is null or CANCELED != 1";
//更新分部云学堂id
public static final String updateSubyxtid = "update hrmsubcompanydefined set yxtid = ? where subcomid = ?";
//查询部门等级sql
public static final String queryDeptLevelsql = "select TLEVEL level from HRMDEPARTMENT group by TLEVEL";
//根据层级获取对应层级的总数
public static final String queryDeptLevelCountsql = "select count(*) cnt from HRMDEPARTMENT where TLEVEL = ?";
//查询某级部门
public static final String queryDeptsql = "select dept.* from (" +
" select id , DEPARTMENTNAME ,DEPARTMENTCODE ,SUBCOMPANYID1 , SUPDEPID,SHOWORDER, " +
" ROW_NUMBER() OVER (ORDER BY SHOWORDER) AS rn from HRMDEPARTMENT where TLEVEL = ? " +
" ) dept WHERE dept.rn BETWEEN ? AND ? ";
//查询删除的部门
public static final String queryDelDeptsql = "select id from HRMDEPARTMENT where CANCELED = 1 order by TLEVEL desc";
// public static final String queryDelDeptsql = "select id from HRMDEPARTMENT order by TLEVEL desc";
//查询删除的分部
public static final String queryDelSubsql = "select id from HRMSUBCOMPANY where CANCELED = 1 order by TLEVEL desc";
// public static final String queryDelSubsql = "select id from HRMSUBCOMPANY order by TLEVEL desc";
//查询岗位分类
public static final String queryJobTypesql = "select * from hrmjobactivities";
//查询岗位
public static final String queryJobsql = "select * from hrmjobtitles";
public static final char Separator = Util.getSeparator();
public static void main(String[] args) {
String rootPath = "D:\\WEAVER2\\ecology\\";
GCONST.setRootPath(rootPath);
GCONST.setServerName("ecology");
// Test test = new Test();
//同步部门成功,开始调用删除部门接口同步封存部门
// test.syncDeptList();
//先删除部门再删除分部
// test.deldept();
//同步岗位类型 防止有同名岗位
// test.syncJobTypeList();
//同步岗位
// test.syncJobList();
JobActivitiesComInfo jobActivitiesComInfo = new JobActivitiesComInfo();
jobActivitiesComInfo.getJobActivitiesname();
// boolean next = jobActivitiesComInfo.next();
}
private void syncDeptList() {
//同步分部作为一级部门
//获取分部beanList
SyncUtil syncUtil = new SyncUtil();
RecordSet recordSet = new RecordSet();
BatchRecordSet batchRecordSet = new BatchRecordSet();
List<DeptRequestBody> subcompanyList = getSubcompanyList(recordSet);
List<String> updatesubcompanyList = new ArrayList<>();
//推送数据云学堂
for (DeptRequestBody deptRequestBody : subcompanyList) {
ResponseData responseData = syncUtil.syncDept(deptRequestBody);
System.out.println("responseData"+responseData);
String yxtid = responseData.getData().getString("id");
updatesubcompanyList.add(yxtid+Separator+deptRequestBody.getThirdId());
System.out.println("sql==="+yxtid+Separator+deptRequestBody.getThirdId());
}
batchRecordSet.executeSqlBatchNew(updateSubyxtid,updatesubcompanyList);
//同步部门(从一级开始同步,查询一共几级部门,按顺序推送)
ArrayList<Integer> levelList = new ArrayList<>();
recordSet.executeQuery(queryDeptLevelsql);
while (recordSet.next()){
int level = Util.getIntValue(recordSet.getString("level"),2);
levelList.add(level);
}
Collections.sort(levelList);
//去重,一般不会有这个问题
List<Integer> listWithoutDuplicates = new ArrayList<>(new LinkedHashSet<>(levelList));
//禁止在循环中创建recordSet对象,防止连接溢出
for (int i = 0; i < listWithoutDuplicates.size(); i++) {
int total = getTotalRecords(recordSet, listWithoutDuplicates.get(i));
int pageSize = 200;
int totalPages = (int) Math.ceil((double) total / pageSize);
if (i == 0) {
//level为2的作为2级部门,上级部门字段为分部
for (int pageIndex = 0; pageIndex < totalPages; pageIndex++) {
List<DeptRequestBody> pageData = getDeptList(listWithoutDuplicates.get(i),recordSet,pageIndex, pageSize);
for (DeptRequestBody deptRequestBody : pageData) {
ResponseData responseData = syncUtil.syncDept(deptRequestBody);
System.out.println("deptRequestBody===>"+deptRequestBody);
System.out.println("responseData===>"+responseData);
responseData.getData().getString("id");
}
}
} else {
//level大于2的上级部门为oa原上级部门
for (int pageIndex = 0; pageIndex < totalPages; pageIndex++) {
List<DeptRequestBody> pageData = getDeptList(listWithoutDuplicates.get(i),recordSet,pageIndex, pageSize);
for (DeptRequestBody deptRequestBody : pageData) {
ResponseData responseData = syncUtil.syncDept(deptRequestBody);
System.out.println("deptRequestBody===>"+deptRequestBody);
System.out.println("responseData===>"+responseData);
responseData.getData().getString("id");
}
}
}
}
}
private List<DeptRequestBody> getSubcompanyList(RecordSet recordSet){
recordSet.executeQuery(querySubsql);
ArrayList<DeptRequestBody> subcompanyList = new ArrayList<>();
while (recordSet.next()){
DeptRequestBody deptRequestBody = new DeptRequestBody();
//三方id
deptRequestBody.setThirdId(Util.null2String("sub_"+recordSet.getString("ID")));
//分部名称
deptRequestBody.setName(Util.null2String(recordSet.getString("SUBCOMPANYNAME")));
//排序
deptRequestBody.setOrderIndex(Util.getIntValue(recordSet.getString("SHOWORDER")));
//编码
deptRequestBody.setCode(Util.null2String(recordSet.getString("SUBCOMPANYCODE")));
subcompanyList.add(deptRequestBody);
}
return subcompanyList;
};
private List<DeptRequestBody> getDeptList(Integer level, RecordSet recordSet ,int pageIndex, int pageSize) {
ArrayList<DeptRequestBody> deptRequestBodyList = new ArrayList<>();
int start = pageIndex * pageSize + 1;
int end = start + pageSize - 1;
recordSet.executeQuery(queryDeptsql,level,start,end);
while (recordSet.next()){
DeptRequestBody deptRequestBody = new DeptRequestBody();
//三方id
deptRequestBody.setThirdId("dept_"+Util.null2String(recordSet.getString("ID")));
//分部名称
deptRequestBody.setName(Util.null2String(recordSet.getString("DEPARTMENTNAME")));
//排序
deptRequestBody.setOrderIndex(Util.getIntValue(recordSet.getString("SHOWORDER")));
//编码
deptRequestBody.setCode(Util.null2String(recordSet.getString("DEPARTMENTCODE")));
String supdepid = Util.null2String(recordSet.getString("SUPDEPID"));
if ("0".equals(supdepid)|| StringUtil.isEmpty(supdepid)){
deptRequestBody.setParentThirdId("sub_"+Util.null2String(recordSet.getString("SUBCOMPANYID1")));
}else {
deptRequestBody.setParentThirdId("dept_"+supdepid);
}
deptRequestBodyList.add(deptRequestBody);
}
return deptRequestBodyList;
}
//获取对应层级总数
public static int getTotalRecords(RecordSet recordSet , int level) {
recordSet.executeQuery(queryDeptLevelCountsql,level);
recordSet.next();
return recordSet.getInt("cnt");
}
//删除部门
public void deldept() {
SyncUtil syncUtil = new SyncUtil();
RecordSet recordSet = new RecordSet();
recordSet.executeQuery(queryDelDeptsql);
while (recordSet.next()){
syncUtil.syncDelDept("dept_"+recordSet.getString("id"));
}
recordSet.executeQuery(queryDelSubsql);
while (recordSet.next()){
syncUtil.syncDelDept("sub_"+recordSet.getString("id"));
}
}
private void syncJobList() {
SyncUtil syncUtil = new SyncUtil();
ArrayList<JobRequestBody> jobRequestBodyList = getJobRequestBodyList();
for (JobRequestBody jobRequestBody : jobRequestBodyList) {
syncUtil.syncJobs(jobRequestBody);
}
}
private void syncJobTypeList() {
SyncUtil syncUtil = new SyncUtil();
ArrayList<JobTypeRequestBody> jobTypeRequestBodyList = getJobTypeRequestBodyList();
for (JobTypeRequestBody jobTypeRequestBody : jobTypeRequestBodyList) {
syncUtil.syncJobType(jobTypeRequestBody);
}
}
// 获取岗位
private ArrayList<JobRequestBody> getJobRequestBodyList() {
RecordSet recordSet = new RecordSet();
ArrayList<JobRequestBody> jobList = new ArrayList<>();
recordSet.executeQuery(queryJobsql);
while (recordSet.next()){
String id = recordSet.getString("id");
String jobtitlename = recordSet.getString("JOBTITLENAME");
JobRequestBody jobRequestBody = new JobRequestBody();
jobRequestBody.setThirdId(id);
jobRequestBody.setName(jobtitlename);
jobList.add(jobRequestBody);
}
return jobList;
}
// 获取岗位分类
private ArrayList<JobTypeRequestBody> getJobTypeRequestBodyList() {
RecordSet recordSet = new RecordSet();
ArrayList<JobTypeRequestBody> jobTypeList = new ArrayList<>();
recordSet.executeQuery(queryJobTypesql);
while (recordSet.next()){
String id = recordSet.getString("id");
String jobtitlename = recordSet.getString("JOBACTIVITYNAME");
JobTypeRequestBody jobTypeRequestBody = new JobTypeRequestBody();
jobTypeRequestBody.setThirdId(id);
jobTypeRequestBody.setName(jobtitlename);
jobTypeList.add(jobTypeRequestBody);
}
return jobTypeList;
}
public static String extractChinesePart(String input) {
// 正则表达式匹配 ~`~`数字 中文内容`~`数字 的模式
Pattern pattern = Pattern.compile("~`~`\\d+ ([\u4e00-\u9fa5]+)`~`");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
return matcher.group(1); // 返回匹配的第一个分组,即中文内容
}
//birthdayReminders
2 years ago
return input;
}
}