123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519 |
- 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<String, String> 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<Map> teacherList = mjyService.queryAllBySync(ydParam);
- log.info("教师档案数据, {}", teacherList.size());
- // 学校档案去重
- List<Map> 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<String, String> 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<Map> 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<Map> details = (List<Map>) formData.get("tableField_lgf41nj3");
- // 创建学校确认流程: src - cur, 发起流程 - 学校确认; 明细内: 全称, 简称, 在编在岗, 学带 + 骨干教师, 后备, 学校负责人
- Map<String, String> 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<Map> schoolApprove = (List<Map>) 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<Map> 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<Map> 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<Map> 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<Map> formList = (List<Map>) 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<Map> 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<Map> details = (List<Map>) 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<Map> 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<Map>) 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<String> teachers = (List<String>) JSON.parse(String.valueOf(data.get("teachers")));
- List<String> associations = (List<String>) JSON.parse(String.valueOf(data.get("associations")));
- List<String> results = (List<String>) 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<Map> associationForm = (List<Map>) 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<Map> details = (List<Map>) formData.get("tableField_lgs5ycm5");
- List<Map> association = (List<Map>) 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<Map>) 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<Map>) 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<String>) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_search_process_id).getData()).get(0);
- List<Map> 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);
- }
- }
|