package com.malk.ruisi.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.malk.ruisi.server.YDParam_T; import com.malk.ruisi.service.QysApiService; import com.malk.ruisi.service.QysService; import com.malk.ruisi.service.dingshiqi; import com.malk.server.aliwork.YDConf; import com.malk.server.aliwork.YDParam; import com.malk.server.common.McException; import com.malk.server.common.McR; import com.malk.server.dingtalk.DDR; import com.malk.server.dingtalk.DDR_New; import com.malk.service.aliwork.YDClient; import com.malk.service.aliwork.YDService; import com.malk.service.dingtalk.DDClient; import com.malk.service.dingtalk.DDClient_Contacts; import com.malk.utils.UtilDateTime; import com.malk.utils.UtilHttp; import com.malk.utils.UtilMap; import com.malk.utils.UtilToken; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.*; import java.util.*; import static com.malk.ruisi.constant.QysConstant.*; @Service @Slf4j public class dingshiqiImpl implements dingshiqi { @Autowired private QysService qysService; @Autowired private QysServiceImpl qysServiceImpl; @Autowired private QysApiService qysApiService; @Autowired private YDClient ydClient; @Autowired private YDConf ydConf; @Autowired private DDClient ddClient; @Autowired private DDClient_Contacts ddClient_contacts; @Override public JSONObject getYWFLid() throws Exception { Map data = new HashMap(); //通过接口获取所有业务分类列表 JSONObject ywfLid = qysApiService.sendGet(data, QYS_API_CATEGORIES, false); JSONArray ids = ywfLid.getJSONArray("categories");//得到所有业务分类数据 if (ids != null && ids.size() > 0) { for (int i = 0; i < ids.size(); i++) { String scon = "";//签署配置 //判断所需数据是否为空 if (ids.getJSONObject(i).getString("name") != "" && ids.getJSONObject(i).getString("id") != "" && ids.getJSONObject(i).getString("tenantName") != "" && ids.getJSONObject(i).getString("tenantId") != "" && ids.getJSONObject(i).getString("config") != "") { String name = ids.getJSONObject(i).getString("name");//业务分类名称 String yycj = ""; String wbdwlx = ""; if(name.equals("我方电子对方物理(企业)")){ yycj = "我方电子对方物理用印"; wbdwlx = "企业"; }else if (name.equals("我方电子对方物理(个人)")){ yycj = "我方电子对方物理用印"; wbdwlx = "个人"; }else if (name.equals("我方电子对方物理(企业&个人)")){ yycj = "我方电子对方物理用印"; wbdwlx = "企业&个人"; }else if (name.equals("多方电子用印(个人)(我方先签)")){ yycj = "多方-电子用印"; wbdwlx = "个人"; }else if (name.equals("多方电子用印(企业)(我方先签)")){ yycj = "多方-电子用印"; wbdwlx = "企业"; }else if (name.equals("多方电子用印(企业&个人)(我方先签)")){ yycj = "多方-电子用印"; wbdwlx = "企业&个人"; }else if (name.equals("我方电子对方物理(企业)(我方先签)")){ yycj = "我方电子对方物理用印"; wbdwlx = "企业"; }else if (name.equals("我方电子对方物理(个人)(我方先签)")){ yycj = "我方电子对方物理用印"; wbdwlx = "个人"; }else if (name.equals("我方电子对方物理(企业&个人)(我方先签)")){ yycj = "我方电子对方物理用印"; wbdwlx= "企业&个人"; }else if (name.equals("多方电子用印(个人)(对方先签)")){ yycj = "多方-电子用印"; wbdwlx = "个人"; }else if (name.equals("多方电子用印(企业)(对方先签)")){ yycj = "多方-电子用印"; wbdwlx = "企业"; }else if (name.equals("多方电子用印(企业&个人)(对方先签)")){ yycj = "多方-电子用印"; wbdwlx = "企业&个人"; }else if (name.equals("续签(固定几年)") || name.equals("续签(无固定期限)") || name.equals("续签(员工合同到期公司不再与员工续签)") || name.equals("续签(员工合同到期员工本人不愿意与公司续签时签订)")){ yycj = "续签"; wbdwlx = ""; }else if (name.equals("内部企业单签")){ yycj = "单方-电子用印"; wbdwlx = ""; }else if (name.equals("物理用印公司用印场景")){ yycj = "物理用印-内部使用"; wbdwlx = "企业"; }else if (name.equals("物理用印外带场景")){ yycj = "物理用印-外带"; wbdwlx = "企业"; }else if (name.equals("劳动合同") || name.equals("校区劳动合同") || name.equals("劳务协议") || name.equals("校区劳务协议")){ yycj = "新签劳动合同"; wbdwlx = ""; } else{ yycj = ""; wbdwlx = ""; } String id = ids.getJSONObject(i).getString("id");//业务分类id String config = ids.getJSONObject(i).getString("config"); String tenantName = ids.getJSONObject(i).getString("tenantName");//公司名称 String tenantID = ids.getJSONObject(i).getString("tenantId");//公司id String sc = "textField_lvkbxugq, textField_lvkbxugr, textField_lvyy8a3l"; String fd = "textField_lvkbxugq, textField_lvkbxugr, textField_lvyy8a3l, textField_lvyy8a3m, textareaField_lw1py1td, textField_lvkbxugo, textField_lvkbxugp"; //把配置数据转换成json Gson gson = new Gson(); JsonObject jsonObject = gson.fromJson(config, JsonObject.class); JsonArray signatories = jsonObject.getAsJsonArray("signatories"); if (signatories == null || signatories.size() == 0) { signatories = new JsonArray(); } //封装所需配置数据为列表 List> signatoriesData = new ArrayList<>(); for (JsonElement signatory : signatories) { JsonObject signatoryObj = signatory.getAsJsonObject(); String tenantType = signatoryObj.has("tenantType") ? signatoryObj.get("tenantType").getAsString() : "COMPANY"; int serialNo = signatoryObj.get("serialNo").getAsInt(); List> actionData = new ArrayList<>(); JsonArray actions = signatoryObj.getAsJsonArray("actions"); for (JsonElement action : actions) { JsonObject actionObj = action.getAsJsonObject(); String type = actionObj.get("type").getAsString(); String name1 = actionObj.get("name").getAsString(); int actionSerialNo = actionObj.get("serialNo").getAsInt(); Map actionMap = new HashMap<>(); actionMap.put("type", type); actionMap.put("name", name1); actionMap.put("serialNo", actionSerialNo); actionData.add(actionMap); } Map signatoryMap = new HashMap<>(); if (tenantType != null) { signatoryMap.put("tenantType", tenantType); } signatoryMap.put("serialNo", serialNo); signatoryMap.put("actions", actionData); signatoriesData.add(signatoryMap); } //把配置数据转换成json Gson gson1 = new Gson(); scon = gson1.toJson(signatoriesData); Map mapForm = UtilMap.map(fd, name, id, tenantName, tenantID, scon, yycj, wbdwlx); mapForm.put("radioField_lznyvvav","启用");//状态 mapForm.put("dateField_lznyvvaw",new Date().getTime());//同步时间 //把数据插入宜搭基础表单中 String tquid = ydClient.operateData(YDParam.builder() .formUuid("FORM-417576F4EE9F4AA1B2395BCD93B7A08C8ASN") .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, name, id, tenantName))) .formDataJson(JSONObject.toJSONString(mapForm)) .build(), YDConf.FORM_OPERATION.upsert).toString(); System.out.println("tquid:" + tquid); } } } return null; } public static String getAccessToken_PJSS() { // String accessToken = UtilToken.get("invalid-token-dingtalk"); if (StringUtils.isNotBlank(accessToken)) { return accessToken; } Map param = new HashMap(); param.put("appkey", "dingwnds0gg0vpbu44cd"); param.put("appsecret", "B7tDWb3hPjP4rksRd_PqOsOVBv6QWY6F9gvn1X2aIoAIMFchRGw69aDeHly-6XXn"); DDR r = (DDR) UtilHttp.doGet("https://oapi.dingtalk.com/gettoken", param, DDR.class); log.info("响应token, {}", r.getAccessToken()); accessToken = r.getAccessToken(); // token失效自动重置: DD重新调用会重置过期时间 UtilToken.put("invalid-token-dingtalk", accessToken, r.getExpiresIn() * 1000L); return accessToken; } @Override public JSONObject getYWFLid1() throws Exception { List LegaltList = new ArrayList<>(); String sql = "select * from V_SEAL_COM_USER where miaosu ='物理' order by yzmc desc"; String jdbcUrl = "jdbc:mysql://10.9.33.236/qiyuesuodb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC"; String userName = "root"; String password = "hpZbPf6YnVr7"; try{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection(jdbcUrl, userName, password); Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery(sql); int i5=0; while (resultSet.next()){ i5++; System.out.println(i5+"-"+resultSet.getFetchSize()); String yzsysmz = resultSet.getString("yzsysmz");//编号 String yzsyzid1 = resultSet.getString("yzsyzid");//使用人id String yzsyzid = ""; if(yzsyzid1!=null){ yzsyzid = yzsyzid1.replace("\'", "") .replace("[", "") .replace("]", ""); } String gszt = resultSet.getString("gszt");//公司名称 String sid = resultSet.getString("id");//印章名称 String yzmc = resultSet.getString("yzmc");//印章名称 HashMap bankmap = new HashMap<>(); bankmap.put("yzsysmz",yzsysmz); bankmap.put("yzsyzid",yzsyzid); bankmap.put("gszt",gszt); bankmap.put("id",sid); bankmap.put("yzmc",yzmc); LegaltList.add(bankmap); } resultSet.close(); statement.close(); conn.close(); }catch (Exception e){ e.printStackTrace(); } if (LegaltList.size() > 0 && LegaltList != null) { for (int i11 = 0; i11 < LegaltList.size(); i11++) { Map sealDetail = LegaltList.get(i11); ArrayList yzsyzid1 = new ArrayList<>(); try { String yzsysmz = String.valueOf(sealDetail.get("yzsysmz")); // 印章使用人名字 String yzsyzid = String.valueOf(sealDetail.get("yzsyzid")); // 使用人id String mobile = ""; if (StringUtils.isNotBlank(yzsyzid)) { String[] userIds = yzsyzid.split(","); String yzsyzid2 = userIds[0]; Map userInfoByMobile1 = ddClient_contacts.getUserInfoById(ddClient.getAccessToken(), yzsyzid2); mobile = String.valueOf(userInfoByMobile1.get("mobile")); } String[] userIds = yzsyzid.split(","); String gszt = String.valueOf(sealDetail.get("gszt")); // 公司名称 String id = String.valueOf(sealDetail.get("id")); // 印章id String yzmc = String.valueOf(sealDetail.get("yzmc")); // 印章名称 yzsyzid1.add(yzsyzid); String sc = "textField_lw6aecvd, textField_lw6aecvg, textField_lw6aecve"; String fd = "textField_lw6aecvd, textField_lw6aecvg, textField_lw6aecve"; String fd1 = "textField_lw6aecvd, textField_lw6aecvg, textField_lw6aecve"; if (yzsyzid1 != null) { Map mapForm = UtilMap.map(fd, gszt, id, yzmc); mapForm.put("employeeField_lwr509pq", userIds); mapForm.put("textField_lwywohh0", mobile); mapForm.put("radioField_lznyvvav", "启用"); // 状态 mapForm.put("dateField_lznyvvaw", new Date().getTime()); // 同步时间 ydClient.operateData(YDParam.builder() .formUuid("FORM-7ACCB70D96FA4187BD2042243641E54CD6VH") .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, gszt, id, yzmc))) .formDataJson(JSONObject.toJSONString(mapForm)) .build(), YDConf.FORM_OPERATION.upsert); } else { Map mapForm1 = UtilMap.map(fd1, gszt, id, yzmc); mapForm1.put("radioField_lznyvvav", "启用"); // 状态 mapForm1.put("dateField_lznyvvaw", new Date().getTime()); // 同步时间 ydClient.operateData(YDParam.builder() .formUuid("FORM-7ACCB70D96FA4187BD2042243641E54CD6VH") .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, gszt, id, yzmc))) .formDataJson(JSONObject.toJSONString(mapForm1)) .build(), YDConf.FORM_OPERATION.upsert); } } catch (Exception e) { // 处理异常 e.printStackTrace(); // 可以在这里记录错误信息或者采取其他措施 System.err.println("An error occurred while processing the data: " + e.getMessage()); } } } return null; } @Override public JSONObject getYWFLid2() throws Exception { List LegaltList = new ArrayList<>(); String sql = "select * from V_SEAL_COM_USER where miaosu ='电子' order by gszt"; String jdbcUrl = "jdbc:mysql://10.9.33.236/qiyuesuodb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC"; String userName = "root"; String password = "hpZbPf6YnVr7"; try{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection(jdbcUrl, userName, password); Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery(sql); int i5=0; while (resultSet.next()){ i5++; System.out.println(i5+"-"+resultSet.getFetchSize()); String yzsysmz = resultSet.getString("yzsysmz");//编号 String yzsyzid1 = resultSet.getString("yzsyzid");//使用人id String yzsyzid = ""; if(yzsyzid1!=null){ yzsyzid = yzsyzid1.replace("\'", "") .replace("[", "") .replace("]", ""); } String gszt = resultSet.getString("gszt");//公司名称 String sid = resultSet.getString("id");//印章名称 String yzmc = resultSet.getString("yzmc");//印章名称 HashMap bankmap = new HashMap<>(); bankmap.put("yzsysmz",yzsysmz); bankmap.put("yzsyzid",yzsyzid); bankmap.put("gszt",gszt); bankmap.put("id",sid); bankmap.put("yzmc",yzmc); LegaltList.add(bankmap); } resultSet.close(); statement.close(); conn.close(); }catch (Exception e){ e.printStackTrace(); } if (LegaltList.size() > 0 && LegaltList != null) { for (int i11 = 0; i11 < LegaltList.size(); i11++) { Map sealDetail = LegaltList.get(i11); ArrayList yzsyzid1 = new ArrayList<>(); try { String yzsysmz = String.valueOf(sealDetail.get("yzsysmz")); // 印章使用人名字 String yzsyzid = String.valueOf(sealDetail.get("yzsyzid")); // 使用人id String mobile = ""; if (StringUtils.isNotBlank(yzsyzid)) { try { String[] userIds = yzsyzid.split(","); if (userIds.length > 0) { String yzsyzid2 = userIds[0]; Map userInfoByMobile1 = ddClient_contacts.getUserInfoById(ddClient.getAccessToken(), yzsyzid2); if (userInfoByMobile1 != null && userInfoByMobile1.containsKey("mobile")) { mobile = String.valueOf(userInfoByMobile1.get("mobile")); } else { // 处理 userInfoByMobile1 没有 "mobile" 键的情况 log.error("User info does not contain the 'mobile' key."); } } else { // 处理 userIds 数组为空的情况 log.error("User ID list is empty."); } } catch (Exception e) { // 捕获并处理所有其他异常 log.error("Error while processing user information: ", e); } } String[] userIds = yzsyzid.split(","); String gszt = String.valueOf(sealDetail.get("gszt")); // 公司名称 String id = String.valueOf(sealDetail.get("id")); // 印章id String yzmc = String.valueOf(sealDetail.get("yzmc")); // 印章名称 yzsyzid1.add(yzsyzid); String sc = "textField_lu0k70cf, textField_lw5pfnr9, textField_lu0k70cg"; String fd = "textField_lu0k70cf, textField_lw5pfnr9, textField_lu0k70cg"; String fd1 = "textField_lu0k70cf, textField_lw5pfnr9, textField_lu0k70cg"; if (yzsyzid1 != null) { Map mapForm = UtilMap.map(fd, gszt, id, yzmc); mapForm.put("employeeField_lwqbilgc", userIds); mapForm.put("textField_lwywvrx9", mobile); mapForm.put("radioField_lznyvvav", "启用"); // 状态 mapForm.put("dateField_lznyvvaw", new Date().getTime()); // 同步时间 ydClient.operateData(YDParam.builder() .formUuid("FORM-6D5B2C469B45456F9287C3575BFF92C7KUF6") .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, gszt, id, yzmc))) .formDataJson(JSONObject.toJSONString(mapForm)) .build(), YDConf.FORM_OPERATION.upsert); } else { Map mapForm1 = UtilMap.map(fd1, gszt, id, yzmc); mapForm1.put("radioField_lznyvvav", "启用"); // 状态 mapForm1.put("dateField_lznyvvaw", new Date().getTime()); // 同步时间 ydClient.operateData(YDParam.builder() .formUuid("FORM-6D5B2C469B45456F9287C3575BFF92C7KUF6") .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, gszt, id, yzmc))) .formDataJson(JSONObject.toJSONString(mapForm1)) .build(), YDConf.FORM_OPERATION.upsert); } } catch (Exception e) { // 处理异常 e.printStackTrace(); // 可以在这里记录错误信息或者采取其他措施 System.err.println("An error occurred while processing the data: " + e.getMessage()); } } } return null; } @Override public void syncDelete() { DDR_New ddrNew = ydClient.queryData(YDParam.builder() .formUuid("FORM-7ACCB70D96FA4187BD2042243641E54CD6VH") .build(), YDConf.FORM_QUERY.retrieve_search_form_id); System.out.println(ddrNew.getTotalCount()); ydClient.operateData(YDParam.builder() .formUuid("FORM-7ACCB70D96FA4187BD2042243641E54CD6VH") .asynchronousExecution(true) .formInstanceIdList((List) ddrNew.getData()) .build(), YDConf.FORM_OPERATION.delete_batch); } @Autowired private YDService ydService; /** * 停用数据同步逻辑 */ @Override public void syncRecruitSource(String type) { Map mapForm = UtilMap.map("YWFL, YZDZ, YZWL", "FORM-417576F4EE9F4AA1B2395BCD93B7A08C8ASN", "FORM-6D5B2C469B45456F9287C3575BFF92C7KUF6", "FORM-7ACCB70D96FA4187BD2042243641E54CD6VH"); String formUuid = UtilMap.getString(mapForm, type); McException.assertParamException(StringUtils.isBlank(formUuid), "同步数据档案不存在!"); YDParam_T ydParamT = new YDParam_T(); ydParamT.setFormUuid(formUuid); ydParamT.setSearchCondition(JSON.toJSONString(UtilMap.map("radioField_lznyvvav", "启用"))); ydParamT.setModifiedToTimeGMT(UtilDateTime.formatDate(new Date(new Date().getTime() - 1 * 24 * 60 * 60 * 1000L))); List dataList = ydService.queryFormData_all(ydParamT); dataList.forEach(item -> { ydClient.operateData(YDParam.builder() .formInstanceId(UtilMap.getString(item, "instanceId")) .updateFormDataJson(JSON.toJSONString(UtilMap.map("radioField_lznyvvav", "停用"))) .build(), YDConf.FORM_OPERATION.update); }); } /** * 同步数据公共方法, 手动 + 定时 */ @SneakyThrows @Override public void syncCommon(String type) { // todo 罗:: 判定不同来源, 这里触发原有逻辑同步, 添加同步时间和状态写入 if(type.equals("YWFL")){ getYWFLid(); } if (type.equals("YZDZ")) { getYWFLid2(); } if (type.equals("YZWL")) { getYWFLid1(); } // 匹配停用数据做更新 this.syncRecruitSource(type); } }