|
@@ -21,6 +21,7 @@ import com.kingdee.eas.hr.emp.PersonPositionCollection;
|
|
|
import com.kingdee.eas.hr.emp.PersonPositionFactory;
|
|
|
import com.kingdee.eas.hr.emp.PersonPositionInfo;
|
|
|
import com.kingdee.eas.scm.util.datetime.DateTimeUtil;
|
|
|
+import com.kingdee.ws.ca.utils.StringUtils;
|
|
|
import oadd.org.apache.commons.codec.digest.DigestUtils;
|
|
|
import okhttp3.*;
|
|
|
import org.apache.log4j.Logger;
|
|
@@ -151,7 +152,7 @@ public class SynPersonToPunchCardFacadeControllerBean extends AbstractSynPersonT
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 人员恢复
|
|
|
+ * 人员恢复 再入职
|
|
|
*
|
|
|
* @param ctx
|
|
|
* @throws BOSException
|
|
@@ -204,14 +205,7 @@ public class SynPersonToPunchCardFacadeControllerBean extends AbstractSynPersonT
|
|
|
if (personNumber.size() > 0) {
|
|
|
JSONObject params = new JSONObject();
|
|
|
params.put("userpin", personNumber); //人员编号
|
|
|
- // 生成 Token 和 URL 参数
|
|
|
- long currentTime = Instant.now().getEpochSecond();
|
|
|
- String secretKey = propt.getProperty("SECRET_KEY");
|
|
|
- String token = DigestUtils.md5Hex(secretKey + currentTime);
|
|
|
- // 构建查询参数
|
|
|
- Map<String, String> queryParams = new HashMap<>();
|
|
|
- queryParams.put("timestamp", String.valueOf(currentTime));
|
|
|
- queryParams.put("token", token);
|
|
|
+ Map<String, String> queryParams = getToken();
|
|
|
// 调用接口
|
|
|
String urlPath = propt.getProperty("recoverUrlPath");
|
|
|
String result = sendPostRequest(urlPath, params, queryParams);
|
|
@@ -221,8 +215,136 @@ public class SynPersonToPunchCardFacadeControllerBean extends AbstractSynPersonT
|
|
|
|
|
|
}
|
|
|
|
|
|
- /***
|
|
|
+ /**
|
|
|
+ * 人员恢复-反审批
|
|
|
+ *
|
|
|
+ * @param ctx
|
|
|
+ * @param offSet
|
|
|
+ * @param personNumber
|
|
|
+ * @throws BOSException
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ protected void _synRecoverPerson(
|
|
|
+ Context ctx,
|
|
|
+ int offSet,
|
|
|
+ String personNumber
|
|
|
+ ) throws BOSException {
|
|
|
+ super._synRecoverPerson(ctx, offSet, personNumber);
|
|
|
+ logger.error("_synRecoverPerson--");
|
|
|
+ loadProperties();
|
|
|
+ String dayBefore = getDayBefore(new Date(), offSet);
|
|
|
+ logger.error("_recoverPerson--dayBefore--" + dayBefore);
|
|
|
+ //员工
|
|
|
+ IPerson iPerson = PersonFactory.getLocalInstance(ctx);
|
|
|
+ FilterInfo filterInfo = new FilterInfo();
|
|
|
+ FilterItemCollection filterItems = filterInfo.getFilterItems();
|
|
|
+ if (!StringUtils.isEmpty(personNumber)) {
|
|
|
+ filterItems.add(new FilterItemInfo("number", AtsUtil.toSet(personNumber), CompareType.INCLUDE));
|
|
|
+ } else {
|
|
|
+ filterItems.add(new FilterItemInfo("hireDate", dayBefore, CompareType.GREATER_EQUALS));
|
|
|
+ filterItems.add(new FilterItemInfo("hireDate", new Date(), CompareType.LESS_EQUALS));
|
|
|
+ }
|
|
|
+ SelectorItemCollection sic = new SelectorItemCollection();
|
|
|
+ sic.add("number");
|
|
|
+ sic.add("name");
|
|
|
+ sic.add("id");
|
|
|
+ sic.add("hireDate");
|
|
|
+ sic.add("nCell");
|
|
|
+ sic.add("gender");
|
|
|
+ sic.add("email");
|
|
|
+ sic.add("employeeType.number");
|
|
|
+ sic.add("employeeType.id");
|
|
|
+ EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
|
|
|
+ logger.error("filterInfo--" + filterInfo.toSql());
|
|
|
+ //获取时间段的人员
|
|
|
+ PersonCollection personCollection = iPerson.getPersonCollection(entityViewInfo);
|
|
|
+ logger.error("personCollection--" + personCollection.size());
|
|
|
+ JSONObject personNumberAll = getPersonNumberAll();
|
|
|
+ logger.error("personNumberAll--" + personNumberAll);
|
|
|
+ if (personNumberAll.size() > 0) {
|
|
|
+ //中控不存在的人员,
|
|
|
+ JSONArray notExistArray = new JSONArray();
|
|
|
+ if (personCollection.size() > 0) {
|
|
|
+ for (int i = 0; i < personCollection.size(); i++) {
|
|
|
+ PersonInfo personInfo = personCollection.get(i);
|
|
|
+ String name = personInfo.getName();
|
|
|
+ String perNumber = personInfo.getNumber();
|
|
|
+ String number = personInfo.getEmployeeType().getNumber();
|
|
|
+ //对shr在职人员进行人员恢复
|
|
|
+ if (!"010".equals(number) && !"009".equals(number) && !"S09".equals(number)) {
|
|
|
+ //判断中控是否存在该人员
|
|
|
+ if (!personNumberAll.containsKey(perNumber)) {
|
|
|
+ notExistArray.add(perNumber);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (notExistArray.size() > 0) {
|
|
|
+ logger.error("notExistArray--" + notExistArray.size());
|
|
|
+ //对查询到中控人员 进行人员恢复操作
|
|
|
+ JSONObject params = new JSONObject();
|
|
|
+ params.put("userpin", notExistArray); //人员编号
|
|
|
+ Map<String, String> queryParams = getToken();
|
|
|
+ // 调用接口
|
|
|
+ String urlPath = propt.getProperty("recoverUrlPath");
|
|
|
+ String result = sendPostRequest(urlPath, params, queryParams);
|
|
|
+ logger.error("result--" + result);
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
+ //判断是否存在总控不存在的人员
|
|
|
+ if (jsonObject.containsKey("error_list")) {
|
|
|
+ JSONArray errorList = jsonObject.getJSONArray("error_list");
|
|
|
+ StringBuilder personNumbers = new StringBuilder();
|
|
|
+ for (int i = 0; i < errorList.size(); i++) {
|
|
|
+ Object number = errorList.get(i);
|
|
|
+ personNumbers.append(number).append(",");
|
|
|
+ }
|
|
|
+ personNumbers.deleteCharAt(personNumbers.lastIndexOf(","));
|
|
|
+ logger.error("personNumbers--" + personNumbers);
|
|
|
+ try {
|
|
|
+ //调用人员更新接口
|
|
|
+ updatePerson(ctx, personNumbers.toString());
|
|
|
+ } catch (EASBizException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取所有中控人员
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public JSONObject getPersonNumberAll() {
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ Map<String, String> queryParams = getToken();
|
|
|
+ // 调用接口
|
|
|
+ String urlPath = propt.getProperty("employeeUrlPath");
|
|
|
+ logger.error("getPersonNumberAll--urlPath---" + urlPath);
|
|
|
+ String response = sendPostRequest(urlPath, queryParams);
|
|
|
+ JSONObject result = JSONObject.parseObject(response);
|
|
|
+ logger.error("getPersonNumberAll--result---" + result);
|
|
|
+ Integer ret = result.getInteger("ret");
|
|
|
+ if (ret == 0) {
|
|
|
+ JSONObject data = result.getJSONObject("data");
|
|
|
+ String count = data.containsKey("count") ? data.getString("count") : "";
|
|
|
+ logger.error("getPersonNumberAll--count---" + count);
|
|
|
+ JSONArray items = data.getJSONArray("items");
|
|
|
+ for (int i = 0; i < items.size(); i++) {
|
|
|
+ JSONObject item = items.getJSONObject(i);
|
|
|
+ String pin = item.getString("pin");
|
|
|
+ String name = item.getString("name");
|
|
|
+ jsonObject.put(pin, name);
|
|
|
+ }
|
|
|
+ return jsonObject;
|
|
|
+ }
|
|
|
+ return new JSONObject();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取时间内的人员ID
|
|
|
+ *
|
|
|
* @param ctx
|
|
|
* @param dayBefore
|
|
|
* @throws BOSException
|
|
@@ -247,7 +369,6 @@ public class SynPersonToPunchCardFacadeControllerBean extends AbstractSynPersonT
|
|
|
return personSet;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 往前推多少天
|
|
|
*
|
|
@@ -277,7 +398,6 @@ public class SynPersonToPunchCardFacadeControllerBean extends AbstractSynPersonT
|
|
|
* @throws EASBizException
|
|
|
*/
|
|
|
@Override
|
|
|
-
|
|
|
protected void _updatePerson(Context ctx, String personNumbers) throws BOSException, EASBizException {
|
|
|
logger.error("_updatePerson--");
|
|
|
loadProperties();
|
|
@@ -294,7 +414,8 @@ public class SynPersonToPunchCardFacadeControllerBean extends AbstractSynPersonT
|
|
|
logger.error("personPositionCollection--" + personPositionCollection.size());
|
|
|
List<PersonPositionInfo> PersonPositionList = new ArrayList();
|
|
|
for (int i = 0; i < personPositionCollection.size(); i++) {
|
|
|
- PersonPositionList.add(personPositionCollection.get(i));
|
|
|
+ PersonPositionInfo personPositionInfo = personPositionCollection.get(i);
|
|
|
+ PersonPositionList.add(personPositionInfo);
|
|
|
}
|
|
|
logger.error("PersonPositionList--" + PersonPositionList.size());
|
|
|
JSONArray msgArray = new JSONArray();
|
|
@@ -450,7 +571,6 @@ public class SynPersonToPunchCardFacadeControllerBean extends AbstractSynPersonT
|
|
|
return messageMap;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 查询参数
|
|
|
*/
|
|
@@ -496,7 +616,6 @@ public class SynPersonToPunchCardFacadeControllerBean extends AbstractSynPersonT
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 人员离职
|
|
|
*
|
|
@@ -514,13 +633,7 @@ public class SynPersonToPunchCardFacadeControllerBean extends AbstractSynPersonT
|
|
|
param.put("leavetype", 0); //员工编码
|
|
|
}
|
|
|
// 生成 Token 和 URL 参数
|
|
|
- long currentTime = Instant.now().getEpochSecond();
|
|
|
- String secretKey = propt.getProperty("SECRET_KEY");
|
|
|
- String token = DigestUtils.md5Hex(secretKey + currentTime);
|
|
|
- // 构建查询参数
|
|
|
- Map<String, String> queryParams = new HashMap<>();
|
|
|
- queryParams.put("timestamp", String.valueOf(currentTime));
|
|
|
- queryParams.put("token", token);
|
|
|
+ Map<String, String> queryParams = getToken();
|
|
|
// 调用接口
|
|
|
String urlPath = propt.getProperty("leaveUrlPath");
|
|
|
String response = sendPostRequest(urlPath, param, queryParams);
|
|
@@ -542,6 +655,18 @@ public class SynPersonToPunchCardFacadeControllerBean extends AbstractSynPersonT
|
|
|
* @return
|
|
|
*/
|
|
|
private String synPerson(JSONArray params) {
|
|
|
+ Map<String, String> queryParams = getToken();
|
|
|
+ // 调用接口
|
|
|
+ String urlPath = propt.getProperty("updateUrlPath");
|
|
|
+ return sendPostRequest(urlPath, params, queryParams);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取Token
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Map getToken() {
|
|
|
// 生成 Token 和 URL 参数
|
|
|
long currentTime = Instant.now().getEpochSecond();
|
|
|
String secretKey = propt.getProperty("SECRET_KEY");
|
|
@@ -550,9 +675,45 @@ public class SynPersonToPunchCardFacadeControllerBean extends AbstractSynPersonT
|
|
|
Map<String, String> queryParams = new HashMap<>();
|
|
|
queryParams.put("timestamp", String.valueOf(currentTime));
|
|
|
queryParams.put("token", token);
|
|
|
- // 调用接口
|
|
|
- String urlPath = propt.getProperty("updateUrlPath");
|
|
|
- return sendPostRequest(urlPath, params, queryParams);
|
|
|
+ return queryParams;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送 POST 请求(JSON 格式) 用于查询所有数据
|
|
|
+ *
|
|
|
+ * @param urlPath 接口地址(可含路径参数,如 `/api/v2/transaction/get`)
|
|
|
+ * @param queryParams URL 查询参数(如 `timestamp` 和 `token`)
|
|
|
+ * @return 响应体字符串(失败返回 null)
|
|
|
+ */
|
|
|
+ public static String sendPostRequest(String urlPath, Map<String, String> queryParams) {
|
|
|
+ try {
|
|
|
+ // 1. 构建完整 URL(含查询参数)
|
|
|
+ HttpUrl.Builder urlBuilder = HttpUrl.parse(urlPath).newBuilder();
|
|
|
+ if (queryParams != null) {
|
|
|
+ queryParams.forEach(urlBuilder::addQueryParameter);
|
|
|
+ }
|
|
|
+ String fullUrl = urlBuilder.build().toString();
|
|
|
+ // 2. 创建请求体
|
|
|
+ MediaType mediaType = MediaType.parse("application/json");
|
|
|
+ RequestBody body = RequestBody.create(mediaType, "");
|
|
|
+ // 3. 构建请求
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url(fullUrl)
|
|
|
+ .post(body)
|
|
|
+ .addHeader("Content-Type", "application/json")
|
|
|
+ .build();
|
|
|
+ // 4. 发送请求并处理响应
|
|
|
+ try (Response response = client.newCall(request).execute()) {
|
|
|
+ if (response.isSuccessful() && response.body() != null) {
|
|
|
+ return response.body().string();
|
|
|
+ } else {
|
|
|
+ logger.error("请求失败,状态码: " + response.code());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ logger.error("请求异常: " + e.getMessage(), e);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
/**
|