package com.malk.xinwei.controller; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.malk.server.common.McR; import com.malk.server.dingtalk.DDConf; import com.malk.service.aliwork.YDClient; import com.malk.service.dingtalk.DDClient; import com.malk.service.dingtalk.DDClient_New; import com.malk.service.dingtalk.DDService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.web.bind.annotation.*; import java.util.*; /** * 错误抛出与拦截详见 CatchException */ @Slf4j @RestController @RequestMapping("/xinwei") @EnableAsync public class XinWeiController { @Autowired private DDClient ddClient; @Autowired private DDConf ddConf; @Autowired private DDService ddService; /**** 心玮服务 ****/ @PostMapping("validate") public McR validateLeave(@RequestBody Map param) { String proId = param.get("processInstanceId"); List compList = (List) (ddClient.queryProcessInstanceId(proId)).get("form_component_values"); String type = String.valueOf(compList.stream().filter(item -> item.get("component_type").equals("DDHolidayField")).findAny().get().get("value")); log.info("余额校验请求入参: {}, {}", param, type); // 23.01.11 取消调休对于的年假限制 if (type.contains("企业福利假")) { Map leaveType = new HashMap(); ddClient.queryVacationTypeList(ddConf.getOperator(), true).forEach(item -> { if (Arrays.asList("调休", "年假").contains(String.valueOf(item.get("leave_name")))) { leaveType.put(String.valueOf(item.get("leave_name")), String.valueOf(item.get("leave_code"))); } }); String message = ""; Map nianjia = null; Map tiaoxiu = null; float budget = Float.valueOf(String.valueOf(JSON.parseArray(type).get(2))); // 优先级: 调休 > 年假 > 企业福利假 | prd 23.08.22 福利假只要存在4小时以上调休, 或年假余额大于半天以上, 就不可申请 tiaoxiu = ddService.queryVacationQuota_balance(ddConf.getOperator(), leaveType.get("调休"), param.get("userId"), 0, 50); if (ObjectUtil.isNotNull(tiaoxiu)) { float balance = (float) tiaoxiu.get("balance"); // if (budget * 8.0f <= balance) { if (balance >= 4.0f) { message = "调休剩余" + balance + tiaoxiu.get("unit"); } } if (type.contains("企业福利假") && StringUtils.isBlank(message)) { nianjia = ddService.queryVacationQuota_balance(ddConf.getOperator(), leaveType.get("年假"), param.get("userId"), 0, 50); if (ObjectUtil.isNotNull(nianjia)) { float balance = (float) nianjia.get("balance"); // if (budget <= balance) { if (balance >= 0.5f) { message = "年假剩余" + balance + nianjia.get("unit"); } } } log.info("查询假期规则列表, {}, {}, {}, {}", type, message, nianjia, tiaoxiu); if (StringUtils.isNotBlank(message)) { ddService.terminateRunningApprove_async(proId, true, message + ", 请优先使用", "", param.get("userId")); } } return McR.success(); } @Autowired private YDClient ydClient; @Autowired private DDClient_New ddClient_new; @GetMapping("sync") public McR sync() { // 宜搭的测试 // ArrayList list = new ArrayList(); // // YDParam ydParam = YDParam.builder(). // appType("APP_BT0NLNNL1O1ZQD1JMJCQ") // .systemToken("16A6629115S3L0K6C9E7Y91UV9A23HV4J008LJ8") // .formUuid("FORM-IS866QA1UIC7CJIA6U0IJ95126GR21AE7SFDLG") // .build(); // Map rsp = ydClient.queryData(YDConf.API_FORM_QUERY_DATA, ydParam); // // ddClient.queryProcessInstanceId("cNqDrkYPQNKXIZDjUvKoEA07901671162044"); // ddClient.cancelRunningApprove("0953580166290444112", "cNqDrkYPQNKXIZDjUvKoEA07901671162044"); // return McR.success(rsp.get("data")); // ddClient_new.createTBTask("395639364223285514", "调休剩余9.9天, 请优先使用", "您的请假已被系统撤销", new Date().getTime() + 16000, Arrays.asList("395639364223285514"), null, null, false, 20, null); ddClient_new.createTBTask("010160171416764428", "调休剩余5.6天, 请优先使用", "您的请假已被系统撤销", new Date().getTime() + 16000, Arrays.asList("010160171416764428"), null, null, false, 20, null); ddClient_new.createTBTask("16282107913674491", "调休剩余2.0天, 请优先使用", "您的请假已被系统撤销", new Date().getTime() + 16000, Arrays.asList("16282107913674491"), null, null, false, 20, null); ddClient_new.createTBTask("16296825472051479", "调休剩余4.6天, 请优先使用", "您的请假已被系统撤销", new Date().getTime() + 16000, Arrays.asList("16296825472051479"), null, null, false, 20, null); return McR.success(); } }