package com.malk.minjiaoyuan.controller; import com.alibaba.fastjson.JSON; import com.malk.Util.UtilList; import com.malk.Util.UtilMap; import com.malk.Util.UtilServlet; import com.malk.Util.UtilString; import com.malk.minjiaoyuan.service.MJYService; 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.service.aliwork.YDClient; import com.malk.service.aliwork.YDService; import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.*; import java.util.stream.Collectors; /** * 错误抛出与拦截详见CatchException */ @Slf4j @RestController @RequestMapping("/minjiaoyuan") public class MJYController { @Autowired private YDConf ydConf; @Autowired private YDClient ydClient; @Autowired private MJYService mjyService; /** * 同步名额数据 */ @Synchronized @PostMapping("sync/quota") McR quotaSync(@RequestBody Map data) { log.info("###### 同步名额数据 #####"); // 参数合法校验 McException.assertParamException_Null(data, "period"); String period = data.get("period"); // 是否重新计算 YDParam ydParam = YDParam.builder() .formUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLLE") .pageSize(1) .searchCondition(JSON.toJSONString(UtilMap.map("selectField_lggd61a7", period))) .build(); long totalCount = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_list).getTotalCount(); McException.assertAccessException(totalCount > 0, period + "名额已计算, 若需重置请删除后台数据后重试"); // 查询教师档案 ydParam.setSearchCondition(null); ydParam.setFormUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLAE"); List teacherList = mjyService.queryAllBySync(ydParam); log.info("教师档案数据, {}", teacherList.size()); // 学校档案去重 List schoolList = new ArrayList<>(); for (Map teacher : teacherList) { Map formData = (Map) teacher.get("formData"); // 条件: 学校全称 Optional matchData = schoolList.stream().filter(school -> formData.get("textField_lgeyihed").equals(school.get("textField_lgezb8r7"))).findAny(); Map schoolMap; if (!matchData.isPresent()) { schoolMap = UtilMap.map("selectField_lggd61a7, radioField_lgf7zdi5", period, "未开始"); schoolMap.put("textField_lgezb8r7", formData.get("textField_lgeyihed")); // 学校全称 schoolMap.put("textField_lggdp94o", formData.get("textField_lgeyihe8")); // 学校简称 schoolMap.put("selectField_lggdghio", formData.get("selectField_lggdghio")); // 所属学段 schoolMap.put("numberField_lgf2au4s", 0); // 在编在岗人数 schoolList.add(schoolMap); } else { schoolMap = (Map) matchData.get(); } // prd: 档案教师计算比例都是在编在岗 if (formData.get("radioField_lgezgr8l").equals("是")) { schoolMap.put("numberField_lgf2au4s", (int) schoolMap.get("numberField_lgf2au4s") + 1); } log.debug("教师档案处理, {}", formData); } log.info("学校档案数据, {}, {}", schoolList.size(), schoolList); // 学校名额计算 for (Map schoolData : schoolList) { String schoolName = String.valueOf(schoolData.get("textField_lgezb8r7")); int numZBZG = Integer.valueOf(String.valueOf(schoolData.get("numberField_lgf2au4s"))); // 骨干系列: prd 骨干比例拆分比例分项计算, 合计数不一定匹配, 因此不计算骨干系列名额 int ratioGDXT = mjyService.getSchoolRatio(schoolName, "骨干系列"); schoolData.put("numberField_lgf2au4t", ratioGDXT); // 学科带头人和骨干教师 int ratioXDGG = mjyService.getSchoolRatio(schoolName, "学科带头人和骨干教师"); schoolData.put("numberField_lgf2au51", ratioXDGG); schoolData.put("numberField_lgf2au52", Math.round(numZBZG * ratioXDGG / 100)); // 骨干后备 int numGGHB = Math.round(numZBZG * (ratioGDXT - ratioXDGG) / 100); schoolData.put("numberField_lghpgjyk", ratioGDXT - ratioXDGG); schoolData.put("numberField_lgf2au4z", numGGHB); // 写入学校档案 log.info("学校名额计算, {}", schoolData); ydParam.setFormDataJson(JSON.toJSONString(schoolData)); ydParam.setFormUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLLE"); ydClient.operateData(ydParam, YDConf.FORM_OPERATION.create); } return McR.success(mjyService.matchQuery(schoolList)); } /** * 查询学校名额 */ @PostMapping("query/quota") McR quotaQuery(@RequestBody Map data) { McException.assertParamException_Null(data, "period"); String period = data.get("period"); YDParam ydParam = YDParam.builder() .formUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLLE") .searchCondition(JSON.toJSONString(UtilMap.map("selectField_lggd61a7", period))) .build(); List schoolList = mjyService.queryAllBySync(ydParam); log.info("学校名额数据, {}", schoolList.size()); List list = schoolList.stream().map(item -> (Map) item.get("formData")).collect(Collectors.toList()); return McR.success(mjyService.matchQuery(list)); } /** * 推送学校名额确认 */ @PostMapping("confirm/quota") McR quotaConfirm(HttpServletRequest request) { Map data = UtilServlet.getParamMap(request); McException.assertParamException_Null(data, "formInstanceId"); YDParam ydParam = YDParam.builder() .formInstanceId(String.valueOf(data.get("formInstanceId"))) .build(); Map formData = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id).getFormData(); List details = (List) formData.get("tableField_lgf41nj3"); // 创建学校确认流程: src - cur, 发起流程 - 学校确认; 明细内: 全称, 简称, 在编在岗, 学带 + 骨干教师, 后备, 学校负责人 Map keyMap = UtilMap.map("selectField_lgf41nj4, selectField_lgi7oaqo, numberField_lgf2au4s, numberField_lgi7oaqq, numberField_lgi7oaqr, employeeField_lgf7ky0h", "selectField_lgf41nj4, selectField_lgi7oaqo, numberField_lgf2au4s, numberField_lgi7oaqq, numberField_lgi7oaqr, employeeField_lgf7m9s4"); for (Map detail : details) { // 主表读取: 届别, 提交人 Map formJson = UtilMap.map("selectField_lggd61a7, employeeField_lgf7ky0i", formData.get("selectField_lggd61a7"), formData.get("employeeField_lgf6dzrv_id")); for (String key : keyMap.keySet()) { if (key.contains("employeeField_")) { formJson.put(key, detail.get(keyMap.get(key) + "_id")); } else { formJson.put(key, detail.get(keyMap.get(key))); } } log.info("名额确认记录, {}, {}", formJson, detail); ydParam.setFormDataJson(JSON.toJSONString(formJson)); ydParam.setFormUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLYD"); ydParam.setProcessCode("TPROC--G2666871DH3AGJ52BWGGY62N9HGV39Y1TRTGLL6"); ydClient.operateData(ydParam, YDConf.FORM_OPERATION.start); } return McR.success(); } /** * 汇总学校复核数据 */ @Synchronized @PostMapping("approve/quota") McR quotaApprove(HttpServletRequest request) { Map data = UtilServlet.getParamMap(request); McException.assertParamException_Null(data, "formInstanceId"); log.info("学校汇总, {}", data); // 查询教师申请数据 YDParam ydParam = YDParam.builder() .formInstanceId(String.valueOf(data.get("formInstanceId"))) .build(); Map teacherData = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id).getFormData(); // 匹配学校汇总数据: 届别 + 学校全称 Map formData = UtilMap.map("selectField_lggd61a7, selectField_lgf41nj4", teacherData.get("selectField_lgs5yclt"), teacherData.get("textField_lgf4ppaw")); ydParam.setFormUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLWD"); ydParam.setSearchCondition(JSON.toJSONString(formData)); List schoolApprove = (List) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_list_all).getData(); // 组装评审明细数据: 关联评选记录, 教师进修编号, 教师成员, 手机号, 评选类型, 行政职务 formData.put("selectField_lgi7oaqo", teacherData.get("textField_lgib58q3")); // 学校简称 formData.put("employeeField_lgf7ky0h", teacherData.get("employeeField_lgf7ky0h_id")); // 学校负责人 formData.put("radioField_lggd61a8", "进行中"); // 届别评选状态 List details = new ArrayList<>(); if (UtilList.isNotEmpty(schoolApprove)) { Map recordData = schoolApprove.get(0); details = mjyService.getCollectData(String.valueOf(recordData.get("formInstanceId"))); // 全量申请数据 // 成员组件 && 关联表单数据处理 details.forEach(item -> { item.put("employeeField_lgialujd", item.get("employeeField_lgialujd_id")); item.put("associationFormField_lgiacs47", JSON.parse(String.valueOf(item.get("associationFormField_lgiacs47_id")))); }); ydParam.setFormInstanceId(String.valueOf(recordData.get("formInstanceId"))); } Map detail = UtilMap.map("textField_lgialujb, employeeField_lgialujd, numberField_lgeyihee, selectField_lgf4ppa6, textField_lgt9sb8f, textField_lhxaovhb", teacherData.get("textField_lgf4ppax"), teacherData.get("employeeField_lgf4ppa7_id"), teacherData.get("numberField_lgeyihee"), teacherData.get("selectField_lgf4ppa6"), teacherData.get("textField_lgt9sb8f"), teacherData.get("serialNumberField_lhxa769r")); detail.put("associationFormField_lgiacs47", Arrays.asList(UtilMap.map("appType, formUuid, instanceId, title, formType, subTitle", ydConf.getAppType(), "FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLVD", data.get("formInstanceId"), teacherData.get("textField_lgs8ej3g"), "receipt", teacherData.get("textField_lgf4ppax")))); details.add(detail); // prd 按照评选类型, 排序: 学带, 骨干, 特色, 后备 Map sortRule = UtilMap.map("学科带头人, 骨干教师, 骨干后备, 特色骨干", 1, 2, 3, 4); details.forEach(item -> item.put("sort", sortRule.get(item.get("selectField_lgf4ppa6")))); Collections.sort(details, Comparator.comparingInt(o -> Integer.parseInt(String.valueOf(o.get("sort"))))); formData.put("tableField_lgiacs44", details); log.info("学校汇总记录, {}", JSON.toJSONString(formData)); ydParam.setFormDataJson(JSON.toJSONString(formData)); ydParam.setFormUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLWD"); ydParam.setProcessCode("TPROC--G2666871DH3AGJ52BWGGY62N9HGV39Y1TRTGLN6"); if (UtilList.isNotEmpty(schoolApprove)) { ydParam.setUpdateFormDataJson(ydParam.getFormDataJson()); ydClient.operateData(ydParam, YDConf.FORM_OPERATION.update); return McR.success(); } ydClient.operateData(ydParam, YDConf.FORM_OPERATION.start); return McR.success(); } @Autowired private YDService ydService; /** * 学校申报区里, 名额校验 */ @PostMapping("validate/quota") McR quotaValidate(HttpServletRequest request) { Map data = UtilServlet.getParamMap(request); McException.assertParamException_Null(data, "formInstanceId"); log.info("名额校验, {}", data); List usersZRMD = mjyService.getDirectList(); // 直入名单 // 学校申报数据 YDParam ydParam = YDParam.builder() .formInstanceId(String.valueOf(data.get("formInstanceId"))) .build(); Map approveData = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id).getFormData(); List details = mjyService.getCollectData(String.valueOf(data.get("formInstanceId"))); // 全量教师申请数量 // 匹配通过数据 & 未在直入名单 [进修编号] List arrStatus = (List) JSON.parse(String.valueOf(data.get("details_status"))); List arrType = (List) JSON.parse(String.valueOf(data.get("details_type"))); List arrPeerRatio = (List) JSON.parse(String.valueOf(data.get("details_peer_ratio"))); List arrSort = (List) JSON.parse(String.valueOf(data.get("details_sort"))); List approveList = new ArrayList(); int appXKDTR = 0, appGGJS = 0, appGGHB = 0, appTSGG = 0, appZRMD = 0; for (int i = 0; i < arrStatus.size(); i++) { // prd 直入名单通过人员匹配, 不占用名额, 教师信息报区里 if (usersZRMD.contains(details.get(i).get("textField_lgialujb"))) { details.get(i).put("isDirect", "直入名单"); approveList.add(details.get(i)); appZRMD++; log.info("直入名单, {}", details.get(i)); } else if (arrStatus.get(i).equals("通过")) { if (arrType.get(i).equals("学科带头人")) appXKDTR += 1; if (arrType.get(i).equals("骨干教师")) appGGJS += 1; if (arrType.get(i).equals("骨干后备")) appGGHB += 1; if (arrType.get(i).equals("特色骨干")) appTSGG += 1; approveList.add(details.get(i)); } // 存储前台填写数据 details.get(i).put("textField_lgst1j31", arrPeerRatio.get(i)); details.get(i).put("numberField_lh8monwb", arrSort.get(i)); details.get(i).put("radioField_lgialujc", arrStatus.get(i)); } log.info("申报数量, appXKDTR = {}, appGGJS = {}, appGGHB = {}, appTSGG = {}, appZRMD = {}", appXKDTR, appGGJS, appGGHB, appTSGG, appZRMD); // 学校名额信息: 届别 + 学校全称 ydParam.setFormInstanceId(null); ydParam.setFormUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLLE"); ydParam.setSearchCondition(JSON.toJSONString(UtilMap.map("selectField_lggd61a7, textField_lgezb8r7", approveData.get("selectField_lggd61a7"), approveData.get("selectField_lgf41nj4")))); ydParam.setPageSize(1); ydParam.setPageSize(Integer.valueOf(10)); // 学校查询输入框, 模糊会有重复情况, 兼容处理 List formList = (List) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_list).getData(); if (formList.size() > 1) { formList = formList.stream().filter(item -> ((Map) item.get("formData")).get("textField_lgezb8r7").equals(approveData.get("selectField_lgf41nj4"))).collect(Collectors.toList()); } Map schoolData = (Map) (formList.get(0)).get("formData"); int numXDGG = Integer.valueOf(String.valueOf(schoolData.get("numberField_lgf2au52"))); int numGGHB = Integer.valueOf(String.valueOf(schoolData.get("numberField_lgf2au4z"))); // 学带 + 骨干教师名额校验 McException.assertAccessException((appXKDTR + appGGJS) > numXDGG, "申报名额校验未通过,请核查!"); // 名额降级逻辑,骨干后备可以占骨干教师 + 学带名额 [prd 申报名额未用完或超标均不能上报] McException.assertAccessException((appGGHB + appXKDTR + appGGJS) != (numGGHB + numXDGG), "申报名额校验未通过,请核查!"); // 更新申报信息: 进修编号, 评选类型, 同职比, 手机号 [排序] Map updateJson = UtilMap.map("numberField_lgstol7i, numberField_lgstol7k, numberField_lgstol7j, numberField_lgstol7l", appXKDTR, appGGJS, appGGHB, appTSGG); List appDetails = approveList.stream().map(item -> { Map row = UtilMap.map("textField_lgst1j33, selectField_lgst1j35, textField_lgst1j3g, numberField_lgst1j37", item.get("textField_lgialujb"), item.get("selectField_lgf4ppa6"), item.get("textField_lgst1j31"), item.get("numberField_lgeyihee")); row.put("textField_lgt59zeb", item.get("isDirect")); row.put("employeeField_lgst1j34", item.get("employeeField_lgialujd_id")); row.put("numberField_lh8monwb", item.get("numberField_lh8monwb")); // 未排序过前顺序 row.put("associationFormField_lgst1j32", JSON.parse(String.valueOf(item.get("associationFormField_lgiacs47_id")))); return row; }).collect(Collectors.toList()); Collections.sort(appDetails, Comparator.comparingInt(o -> Integer.parseInt(String.valueOf(o.get("numberField_lh8monwb"))))); // 后置排序, 避免影响到客户填入数据 [先储存再排序] details.forEach(item -> { item.put("employeeField_lgialujd", item.get("employeeField_lgialujd_id")); item.put("associationFormField_lgiacs47", JSON.parse(String.valueOf(item.get("associationFormField_lgiacs47_id")))); }); Collections.sort(details, Comparator.comparingInt(o -> Integer.parseInt(String.valueOf(o.get("numberField_lh8monwb"))))); updateJson.put("tableField_lgst1j3e", appDetails); updateJson.put("tableField_lgiacs44", details); // 更新学校排序 ydParam.setFormInstanceId(String.valueOf(data.get("formInstanceId"))); ydParam.setUpdateFormDataJson(JSON.toJSONString(updateJson)); // 操作数据 [异步] - 审批通过立即更新, 会无效 ydService.operateData(ydParam, YDConf.FORM_OPERATION.update); log.info("更新申报信息, {}", appDetails); return McR.success(); } // 宜搭审批页面弱校验提示框会被覆盖, 或另一个校验冲销. 添加记录, 第二次请求放行 private Map checkMap = new HashMap(); /** * 学校申报区里, 学校中层或校级副职干部, 弱校验 */ @PostMapping("check/quota") McR quotaCheck(HttpServletRequest request) { Map data = UtilServlet.getParamMap(request); McException.assertParamException_Null(data, "formInstanceId"); log.info("名额验证, {}", data); List usersZRMD = mjyService.getDirectList(); // 直入名单 // 学校申报数据 YDParam ydParam = YDParam.builder() .formInstanceId(String.valueOf(data.get("formInstanceId"))) .build(); Map approveData = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id).getFormData(); List details = (List) approveData.get("tableField_lgiacs44"); // 匹配通过数据 & 未在直入名单 [进修编号] List arrStatus = (List) JSON.parse(String.valueOf(data.get("details_status"))); List arrType = (List) JSON.parse(String.valueOf(data.get("details_type"))); List approveList = new ArrayList(); int appGGHB = 0; for (int i = 0; i < arrStatus.size(); i++) { // prd 直入名单通过人员匹配, 不占用名额, 教师信息报区里 if (usersZRMD.contains(details.get(i).get("textField_lgialujb"))) { approveList.add(details.get(i)); details.get(i).put("isDirect", "直入名单"); log.info("直入名单, {}", details.get(i)); } else if (arrStatus.get(i).equals("通过")) { approveList.add(details.get(i)); if (arrType.get(i).equals("骨干后备")) appGGHB += 1; } } float numZCXF = approveList.stream().filter(item -> Arrays.asList("学校副职", "中层副职", "中层正职").contains(item.get("textField_lgt9sb8f"))).collect(Collectors.toList()).size(); log.info("学校中层或校级副职干部, 弱校验, appGGHB = {}, nunZCXF = {}", appGGHB, numZCXF); // 学校名额信息: 届别 + 学校全称 ydParam.setFormInstanceId(null); ydParam.setFormUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLLE"); ydParam.setSearchCondition(JSON.toJSONString(UtilMap.map("selectField_lggd61a7, textField_lgezb8r7", approveData.get("selectField_lggd61a7"), approveData.get("selectField_lgf41nj4")))); ydParam.setPageSize(1); Map schoolData = (Map) ((List) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_list).getData()).get(0).get("formData"); // prd 学校中层或校级副职干部,每周兼课时数需达到教育局规定课时量,比例不超过学校申报骨干后备教师人选的20%。(学校教师人在编在岗数不满30人,比例不超过学校申报骨干后备教师人选的25%) float numZBZG = Integer.valueOf(String.valueOf(schoolData.get("numberField_lgf2au4s"))); int ratio = numZBZG >= 30 ? 25 : 20; log.info("学校中层或校级副职干部, 弱校验, check = {}, ratio = {}", appGGHB / numZBZG, ratio / 100F); if (!checkMap.containsKey(data.get("formInstanceId"))) { checkMap.put(data.get("formInstanceId"), true); McException.assertAccessException((appGGHB / numZBZG) > (ratio / 100F), "学校中层或校级副职干部, 占比骨干后备超标准"); } return McR.success(); } /** * 是否直入名单 */ @PostMapping("direct/quota") McR directQuota(@RequestBody Map data) { log.info("是否直入名单", data); McException.assertParamException_Null(data, "code"); List usersZRMD = mjyService.getDirectList(); // 直入名单 return McR.success(UtilMap.map("isDirect", usersZRMD.contains(data.get("code")))); } /** * 退回卡片通知 * 被学校退回:某某老师,您的骨干系列评选材料已被学校退回。 * 被区级退回:某某老师,您的骨干系列评选材料已被区级退回;某某学校,您校某某老师的评选资料已被区级退回。 */ @PostMapping("notice/sendback") McR sendBackNotice(HttpServletRequest request) { Map data = UtilServlet.getParamMap(request); log.info("退回卡片通知, {}", data); McException.assertParamException_Null(data, "teachers, administrator, results, associations, createUserId, schoolName"); List teachers = (List) JSON.parse(String.valueOf(data.get("teachers"))); List associations = (List) JSON.parse(String.valueOf(data.get("associations"))); List results = (List) JSON.parse(String.valueOf(data.get("results"))); String createUserId = String.valueOf(data.get("createUserId")); String schoolName = String.valueOf(data.get("schoolName")); for (int i = 0; i < results.size(); i++) { String status = results.get(i); if (!Arrays.asList("不通过", "退回").contains(status)) { continue; } List associationForm = (List) JSON.parse(associations.get(i)); String notice = associationForm.get(0).get("title") + "老师[" + associationForm.get(0).get("subTitle") + "]"; Map formData = UtilMap.map("employeeField_lhgj6tc7, employeeField_lhgj6tc9, associationFormField_lgiacs47", JSON.parse(teachers.get(i)), data.get("administrator"), associationForm); if ("不通过".equals(status)) { notice += ", 您好: \n您的骨干系列评选材料已被学校退回。"; } if ("退回".equals(status)) { notice += ", 您好: \n您的骨干系列评选材料已被区级退回。"; // 通知学校 String new_notice = schoolName + ", 管理员您好: \n您校" + associationForm.get(0).get("title") + "老师[" + associationForm.get(0).get("subTitle") + "]"; new_notice += "的评选资料已被区级退回。"; formData.put("textareaField_lhgj6tcu", new_notice); mjyService.triggerNotice("FORM-NC966W81139A3Y5QEEXT5AZ6BU7M3TB0C9LHLO", createUserId, formData); } // 通知老师 formData.put("textareaField_lhgj6tcu", notice); mjyService.triggerNotice("FORM-NT766881D48AF5W78VL7L6VLZTAJ2TOE6JGHL92", createUserId, formData); } return McR.success(); } /** * 评选信息变更 */ @PostMapping("update/details") McR updateDetails(HttpServletRequest request) { Map data = UtilServlet.getParamMap(request); McException.assertParamException_Null(data, "formInstanceId"); log.info("信息变更, {}", data); YDParam ydParam = YDParam.builder() .formInstanceId(String.valueOf(data.get("formInstanceId"))) .build(); Map formData = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id).getFormData(); List details = (List) formData.get("tableField_lgs5ycm5"); List association = (List) JSON.parse(String.valueOf(data.get("associationComp"))); ydParam.setFormInstanceId(String.valueOf(association.get(0).get("instanceId"))); ydParam.setUpdateFormDataJson(JSON.toJSONString(UtilMap.map("tableField_lgs5ycm5", details))); ydClient.operateData(ydParam, YDConf.FORM_OPERATION.update); return McR.success(); } /** * 学校管理员撤回 */ @Synchronized @PostMapping({"cancel/quota"}) McR cancelQuota(@RequestBody Map data) { log.info("学校管理员撤回, {}", data); McException.assertParamException_Null(data, "serialNumber, teacherCode, schoolShort, period, formInstId"); YDParam ydParam = YDParam.builder() .formUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGL7E") .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lftczqr5", data.get("teacherCode")))) .pageSize(1) .build(); Map dataForm = ((List) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_search_form).getData()).get(0); Map formData = (Map) dataForm.get("formData"); // 校验, 修改教师档案 String result = String.valueOf(formData.get("radioField_lgfawf83")); McException.assertAccessException((!result.equals("内通过") && !result.equals("内拒绝")), "当前结果为" + (UtilString.isBlankCompatNull(result) ? "未开始" : result) + ", 不支持撤销!"); ydParam.setFormInstanceId(dataForm.get("formInstanceId").toString()); ydParam.setUpdateFormDataJson(JSON.toJSONString(UtilMap.map("radioField_lgfawf83", ""))); ydClient.operateData(ydParam, YDConf.FORM_OPERATION.update); // 修改教师档案 ydParam.setFormInstanceId(""); ydParam.setFormUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLAE"); ydParam.setSearchFieldJson(JSON.toJSONString(UtilMap.map("textField_lftczqr5", data.get("teacherCode")))); dataForm = ((List) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_search_form).getData()).get(0); ydParam.setFormInstanceId(dataForm.get("formInstanceId").toString()); ydParam.setUpdateFormDataJson(JSON.toJSONString(UtilMap.map("radioField_lhlbdk4w", ""))); ydClient.operateData(ydParam, YDConf.FORM_OPERATION.update); // 修改评选报名 ydParam.setFormInstanceId(data.get("formInstId").toString()); ydParam.setUpdateFormDataJson(JSON.toJSONString(UtilMap.map("textField_li0f7sah", ""))); ydClient.operateData(ydParam, YDConf.FORM_OPERATION.update); ydParam.setFormInstanceId(""); // 删除评选汇总 ydParam.setFormUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLWD"); ydParam.setSearchFieldJson(JSON.toJSONString(UtilMap.map("selectField_lgi7oaqo, selectField_lggd61a7", new Object[]{data.get("schoolShort"), data.get("period")}))); String processInstanceId = ((List) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_search_process_id).getData()).get(0); List details = mjyService.getCollectData(processInstanceId); Optional optional = details.stream().filter(item -> item.get("textField_lhxaovhb").equals(data.get("serialNumber"))).findAny(); if (optional.isPresent()) { details.remove(optional.get()); ydParam.setFormInstanceId(processInstanceId); // 宜搭BUG: 若仅剩一条, 明细不支持删除, 只能删除主表 if (details.isEmpty()) { ydClient.operateData(ydParam, YDConf.FORM_OPERATION.delete); } else { details.forEach(item -> { item.put("employeeField_lgialujd", item.get("employeeField_lgialujd_id")); item.put("associationFormField_lgiacs47", JSON.parse(String.valueOf(item.get("associationFormField_lgiacs47_id")))); }); ydParam.setUpdateFormDataJson(JSON.toJSONString(UtilMap.map("tableField_lgiacs44", details))); ydClient.operateData(ydParam, YDConf.FORM_OPERATION.update); } String notice = data.get("teacherName") + "老师[" + data.get("teacherCode") + "]"; notice = notice + ", 您好: \n您的评选材料经过学校审核被撤销, 请按照要求重新提交评选材料。"; dataForm = UtilMap.map("employeeField_lhgj6tc7, textField_lhlj3dgb, textareaField_lhgj6tcu", Arrays.asList(data.get("teacherCode")), data.get("teacherCode"), notice); mjyService.triggerNotice("FORM-F8666NB1MRZA2CT097OAE65SOFSV27SERG0ILB", String.valueOf(data.get("teacherCode")), dataForm); log.info("撤销成功, {}", optional.get()); } return McR.success(details); } }