|
|
@@ -1,27 +1,25 @@
|
|
|
package com.malk.suodisi.controller;
|
|
|
|
|
|
-import cn.hutool.core.util.ObjectUtil;
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
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.DDConf;
|
|
|
+import com.malk.server.dingtalk.DDR_New;
|
|
|
import com.malk.service.aliwork.YDClient;
|
|
|
+import com.malk.service.dingtalk.DDClient;
|
|
|
+import com.malk.suodisi.entity.XyTodo;
|
|
|
import com.malk.suodisi.server.XYR;
|
|
|
import com.malk.utils.UtilDateTime;
|
|
|
import com.malk.utils.UtilHttp;
|
|
|
import com.malk.utils.UtilMap;
|
|
|
-import com.malk.utils.UtilServlet;
|
|
|
-import com.sun.org.apache.bcel.internal.generic.NEW;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.logging.log4j.util.Strings;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.web.bind.annotation.PostMapping;
|
|
|
-import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
-import org.springframework.web.bind.annotation.RestController;
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
-import java.util.*;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* 错误抛出与拦截详见 CatchException
|
|
|
@@ -30,6 +28,14 @@ import java.util.*;
|
|
|
@RestController
|
|
|
@RequestMapping("/xy")
|
|
|
public class XYController {
|
|
|
+ @Autowired
|
|
|
+ private DDClient ddClient;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private YDClient ydClient;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private YDConf ydConf;
|
|
|
|
|
|
final static String XY_sys = "XYDING";
|
|
|
final static String XY_secure = "51d7cbff-806f-4bc9-aca8-7a26fdd6327c";
|
|
|
@@ -42,7 +48,9 @@ public class XYController {
|
|
|
}
|
|
|
|
|
|
private static String getXyUrl(String path) {
|
|
|
- return "https://xyapiuat.xiangyu.cn/xmxyg/todo/epi" + path;
|
|
|
+ return "http://xyapiuat.xiangyu.cn:8000/xmxyg/todo/epi" + path;
|
|
|
+// return "http://10.16.8.160:8011/TODO/rest/ofs/ProxyServices" + path;
|
|
|
+// return "https://xyesb.xiangyu.com:8011/TODO/rest/ofs/ProxyServices" + path;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -50,62 +58,188 @@ public class XYController {
|
|
|
* - prd
|
|
|
* 1. 待办创建, 更新均需要传递全部参数 (目前仅会校验审批时间不能小于历史数据)
|
|
|
* 2. 接收人存在多人时, 统一待办会自动拆分为多个 (待办中心以 业务单据号 + 用户域账号)
|
|
|
- *
|
|
|
- * @param category 待办分类
|
|
|
- * @param optType 操作类型:1待办、2已办、3待阅
|
|
|
- * @param busNo 业务单据号
|
|
|
- * @param title 待办标题
|
|
|
- * @param currentStatus 待办进度
|
|
|
- * @param pcUrl 待办PC端地址
|
|
|
- * @param appUrl 待办移动端地址
|
|
|
- * @param createDateTime 创建时间
|
|
|
- * @param creator 创建人域账号(钉钉工号)
|
|
|
- * @param creatorName 创建人姓名
|
|
|
- * @param receivers 接收人姓名
|
|
|
- * @param receiverNames 接收人域账号(钉钉工号)
|
|
|
- * @param keywords 关键字字段
|
|
|
*/
|
|
|
- private void syncXyTodo(String category, int optType, String busNo, String title, String currentStatus, String pcUrl, String appUrl,
|
|
|
- String createDateTime, String creator, String creatorName, String receivers, String receiverNames, List<String> keywords) {
|
|
|
+ private void syncXyTodo(XyTodo todo) {
|
|
|
+ try {
|
|
|
+ Map body = todo.toMap();
|
|
|
+ XYR r = (XYR) UtilHttp.doPost(getXyUrl("/push"), UtilMap.map("deipaaskeyauth","XahX56IIQ27SQ9hiKcp3T031A23bB4fw"), body, XYR.class);
|
|
|
+
|
|
|
+ log.info("创建统一待办, {}", r);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除象屿统一待办
|
|
|
+ */
|
|
|
+ private void deleteXyTodo(String busNo) {
|
|
|
+ try {
|
|
|
+ XYR r = (XYR) UtilHttp.doPost(getXyUrl("/delete"), null, UtilMap.map("busNo",busNo), XYR.class);
|
|
|
+
|
|
|
+ log.info("删除统一待办, {}", r);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 宜搭待办
|
|
|
+ */
|
|
|
+ @PostMapping("/sync")
|
|
|
+ McR sync(@RequestBody Map map) {
|
|
|
+ String formInstId = UtilMap.getString(map, "formInstId");//审批实例id
|
|
|
+
|
|
|
+ String busNo = UtilMap.getString(map, "busNo");//唯一流水号
|
|
|
+
|
|
|
+ String boName = UtilMap.getString(map,"boName");//单据名称
|
|
|
+
|
|
|
+ String pcUrl = "https://xiangyu.aliwork.com/"+ydConf.getAppType()+"/processDetail?procInsId="+formInstId;
|
|
|
+ String appUrl = "https://xiangyu.aliwork.com/"+ydConf.getAppType()+"/processDetail?procInsId="+formInstId;
|
|
|
+
|
|
|
+ //查询宜搭审批记录, 完成回调, 完成更新
|
|
|
+ Map<String,Object> param = new HashMap<>();
|
|
|
+ param.put("appType",ydConf.getAppType());
|
|
|
+ param.put("systemToken",ydConf.getSystemToken());
|
|
|
+ param.put("userId","yida_pub_account");
|
|
|
+ param.put("processInstanceId",formInstId);
|
|
|
+
|
|
|
+ Map<String,Object> result = (Map<String,Object>) JSONObject.parse(UtilHttp.doGet("https://api.dingtalk.com/v1.0/yida/processes/operationRecords", ddClient.initTokenHeader(), param));
|
|
|
+
|
|
|
+ List<Map<String,Object>> operationRecords = UtilMap.getList(result,"result");
|
|
|
+
|
|
|
+ XyTodo xyTodo = new XyTodo(XY_sys,XY_secure,DD_category.get(0));
|
|
|
+
|
|
|
+ xyTodo.setBusNo(busNo);//唯一流水号
|
|
|
+ xyTodo.setCreateDateTime(UtilDateTime.formatDateTime(new Date()));//创建时间
|
|
|
+ xyTodo.setPcUrl(pcUrl);
|
|
|
+ xyTodo.setAppUrl(appUrl);
|
|
|
+ xyTodo.setOptType(2);//操作类型:1、待办;2、已办;3、待阅
|
|
|
+ xyTodo.setCreateDateTime(UtilDateTime.formatDateTime(new Date()));//创建时间
|
|
|
+ xyTodo.setReceiveDateTime(UtilDateTime.formatDateTime(new Date()));//接收时间
|
|
|
+ xyTodo.setApproveDateTime(UtilDateTime.formatDateTime(new Date()));//审批时间
|
|
|
+
|
|
|
+ boolean isFirst = true;
|
|
|
+
|
|
|
+ //创建人、接收人账号应取象屿平台账号,若找不到账号则固定人员:陈文良
|
|
|
+ for (Map<String,Object> operationRecord : operationRecords) {
|
|
|
+ //第一条审批记录为发起节点
|
|
|
+ if (isFirst) {
|
|
|
+
|
|
|
+ String creatorName = UtilMap.getString(operationRecord, "operatorName");
|
|
|
+ String ddUserId = UtilMap.getString(operationRecord, "operatorUserId");
|
|
|
+ String creator = getXyUserId(ddUserId);
|
|
|
+
|
|
|
+ //若无域账号
|
|
|
+ if (Strings.isBlank(creator)){
|
|
|
+ creator = "wl.chen";//创建人域账号
|
|
|
+ creatorName = "陈文良";//创建人姓名
|
|
|
+ }
|
|
|
+
|
|
|
+ xyTodo.setCreator(creator);
|
|
|
+ xyTodo.setCreatorName(creatorName);
|
|
|
+ xyTodo.setTitle(boName + "-" + creatorName + "-" + busNo);//标题
|
|
|
+
|
|
|
+ isFirst = false;
|
|
|
+
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- Map body = UtilMap.map("sysCode, secureCode, busType, optType, isSupportBatch, receiveDateTime", XY_sys, XY_secure, category, optType, false, UtilDateTime.formatDateTime(new Date()));
|
|
|
- body.putAll(UtilMap.map("busNo, title, currentStatus, pcUrl, appUrl, createDateTime", busNo, title, currentStatus, pcUrl, appUrl, createDateTime));
|
|
|
- body.putAll(UtilMap.map("creator, creatorName, receivers, receiverNames, keywords", creator, creatorName, receivers, receiverNames, keywords));
|
|
|
+ String type = UtilMap.getString(operationRecord, "type");
|
|
|
|
|
|
- XYR r = (XYR) UtilHttp.doPost(getXyUrl("/push"), null, body, XYR.class);
|
|
|
+ switch (type){
|
|
|
+ case "HISTORY":
|
|
|
+ //统一待办仅展示最新 暂不考虑历史记录
|
|
|
+ /*xyTodo.setOptType(2);
|
|
|
|
|
|
- log.info("创建统一待办, {}", r);
|
|
|
+ xyTodo.setReceivers(UtilMap.getString(operationRecord,"operatorUserId"));//接收人域账号
|
|
|
+ xyTodo.setReceiverNames(UtilMap.getString(operationRecord,"operatorName"));//接收人姓名
|
|
|
+ xyTodo.setApproveDateTime(convertDateTime(UtilMap.getString(operationRecord, "operateTimeGMT")));//审批时间
|
|
|
|
|
|
+ //若该代办已存在,则拼接接收人 若该代办不存在,添加该代办
|
|
|
+ if (!isExist(xyTodoList, xyTodo)) {
|
|
|
+ xyTodoList.add(xyTodo);
|
|
|
+ }*/
|
|
|
+
|
|
|
+ break;
|
|
|
+ case "TODO":
|
|
|
+ xyTodo.setOptType(1);
|
|
|
+ xyTodo.setCurrentStatus(UtilMap.getString(operationRecord,"showName"));//当前状况(流程描述)
|
|
|
+
|
|
|
+ String ddUserId = UtilMap.getString(operationRecord, "operatorUserId");
|
|
|
+ String receiversName = UtilMap.getString(operationRecord, "operatorName");
|
|
|
+ String receivers = getXyUserId(ddUserId);
|
|
|
+
|
|
|
+ //若无域账号
|
|
|
+ if (Strings.isBlank(receivers)){
|
|
|
+ receivers = "wl.chen";
|
|
|
+ receiversName = "陈文良";
|
|
|
+ }
|
|
|
+ xyTodo.setReceivers(receivers);//接收人域账号
|
|
|
+ xyTodo.setReceiverNames(receiversName);//接收人姓名
|
|
|
+
|
|
|
+ break;
|
|
|
+ case "FORCAST":break;
|
|
|
+ default:break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //全部已办
|
|
|
+ if (Strings.isBlank(xyTodo.getReceivers())){
|
|
|
+ //最后一个审批记录审批人设为接收人
|
|
|
+ Map<String, Object> operationRecord = operationRecords.get(operationRecords.size() - 1);
|
|
|
+
|
|
|
+ String ddUserId = UtilMap.getString(operationRecord, "operatorUserId");
|
|
|
+ String receiversName = UtilMap.getString(operationRecord, "operatorName");
|
|
|
+ String receivers = getXyUserId(ddUserId);
|
|
|
+ //若无域账号
|
|
|
+ if (Strings.isBlank(receivers)){
|
|
|
+ receivers = "wl.chen";
|
|
|
+ receiversName = "陈文良";
|
|
|
+ }
|
|
|
+
|
|
|
+ xyTodo.setReceivers(receivers);//接收人域账号
|
|
|
+ xyTodo.setReceiverNames(receiversName);//接收人姓名
|
|
|
+ xyTodo.setCurrentStatus(UtilMap.getString(operationRecord,"showName"));//当前状况(流程描述)
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ syncXyTodo(xyTodo);
|
|
|
+
|
|
|
+ return McR.success();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 宜搭待办
|
|
|
+ * 删除宜搭待办
|
|
|
*/
|
|
|
- @PostMapping("/sync")
|
|
|
- McR sdsUpdate(HttpServletRequest request) {
|
|
|
-
|
|
|
- Map data = UtilServlet.getParamMap(request);
|
|
|
- log.info("宜搭待办, {}", JSON.toJSONString(data));
|
|
|
- int optType = UtilMap.getInt(data, "optType");
|
|
|
- String busNo = UtilMap.getString(data, "busNo");
|
|
|
- String title = UtilMap.getString(data, "title");
|
|
|
- String currentStatus = UtilMap.getString(data, "currentStatus");
|
|
|
- String pcUrl = UtilMap.getString(data, "pcUrl");
|
|
|
- String appUrl = UtilMap.getString(data, "appUrl");
|
|
|
- String createDateTime = UtilDateTime.formatDateTime(new Date(UtilMap.getLong(data, "createDateTime")));
|
|
|
- String creator = UtilMap.getString(data, "creator");
|
|
|
- String creatorName = UtilMap.getString(data, "creatorName");
|
|
|
- String receivers = UtilMap.getString(data, "receivers");
|
|
|
- String receiverNames = UtilMap.getString(data, "receiverNames");
|
|
|
- String keywords = UtilMap.getString(data, "keywords");
|
|
|
-
|
|
|
- syncXyTodo(DD_category.get(0), optType, busNo, title, currentStatus, pcUrl, appUrl, createDateTime,creator , creatorName,receivers, receiverNames, Arrays.asList(keywords));
|
|
|
-
|
|
|
- // Todo 查询宜搭审批记录, 完成回调, 完成更新
|
|
|
+ @PostMapping("/delete")
|
|
|
+ McR delete(@RequestBody Map map) {
|
|
|
+ String busNo = UtilMap.getString(map, "busNo");//唯一流水号
|
|
|
+
|
|
|
+ deleteXyTodo(busNo);
|
|
|
|
|
|
return McR.success();
|
|
|
}
|
|
|
|
|
|
+ @GetMapping("/test")
|
|
|
+ McR test(){
|
|
|
+ return McR.success("111");
|
|
|
+ }
|
|
|
+
|
|
|
+ //钉钉userId查询象屿域账号(钉钉工号)
|
|
|
+ private String getXyUserId(String userId){
|
|
|
+ DDR_New ddrNew = (DDR_New) UtilHttp.doPost("https://oapi.dingtalk.com/topapi/v2/user/get", null, ddClient.initTokenParams(), UtilMap.map("userid", userId), DDR_New.class);
|
|
|
+
|
|
|
+ Map result = (Map) ddrNew.getResult();
|
|
|
+
|
|
|
+ String xyUserId = UtilMap.getString(result, "job_number");
|
|
|
+
|
|
|
+ return xyUserId;//接收人域账号
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|