فهرست منبع

新增流程标准消息体

wangliang 2 سال پیش
والد
کامیت
2e66dfd466

+ 1 - 1
cas/src/main/java/com/qmth/teachcloud/cas/mq/gdpu/api/GdpuMqController.java

@@ -23,7 +23,7 @@ import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
-@Api(tags = "广东药科大学获取流程事项controller")
+@Api(tags = "广东药科大学服务中台controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_GDPU)
 @Aac(auth = BOOL.FALSE)

+ 60 - 0
cas/src/main/java/com/qmth/teachcloud/cas/mq/gdpu/api/OpenMqController.java

@@ -0,0 +1,60 @@
+package com.qmth.teachcloud.cas.mq.gdpu.api;
+
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.exchange.common.bean.dto.flow.DoneTaskDto;
+import com.qmth.teachcloud.exchange.common.bean.dto.flow.ToDoTaskDto;
+import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
+import com.qmth.teachcloud.exchange.common.entity.BasicSchool;
+import com.qmth.teachcloud.exchange.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.exchange.common.util.AuthThirdUtil;
+import com.qmth.teachcloud.exchange.common.util.JacksonUtil;
+import com.qmth.teachcloud.exchange.common.util.Result;
+import com.qmth.teachcloud.exchange.common.util.ResultUtil;
+import io.swagger.annotations.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.Optional;
+
+@Api(tags = "广东药科大学获取流程消息controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_GDPU_MQ)
+@Aac(auth = BOOL.FALSE)
+@Validated
+public class OpenMqController {
+    private final static Logger log = LoggerFactory.getLogger(OpenMqController.class);
+
+    @RequestMapping(value = "/{schoolCode}/todotask", method = RequestMethod.POST)
+    @ApiOperation(value = "获取流程待办信息")
+    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
+    public Result toDoTask(@ApiParam(value = "学校编码") @PathVariable("schoolCode") String schoolCode,
+                           @ApiParam(value = "消息数据", required = true) @RequestBody String data) throws IOException {
+        Optional.ofNullable(data).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("账号为空"));
+        String decodeJson = URLDecoder.decode(data, SystemConstant.CHARSET_NAME);
+        ToDoTaskDto toDoTaskDto = JacksonUtil.readJson(decodeJson, ToDoTaskDto.class);
+        log.info("todotask进来了,toDoTaskDto:{}", JacksonUtil.parseJson(toDoTaskDto));
+
+        BasicSchool basicSchool = AuthThirdUtil.hasPermission();
+        return ResultUtil.ok(true);
+    }
+
+    @RequestMapping(value = "/{schoolCode}/donetask", method = RequestMethod.POST)
+    @ApiOperation(value = "获取流程已办信息")
+    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
+    public Result doneTask(@ApiParam(value = "学校编码") @PathVariable("schoolCode") String schoolCode,
+                           @ApiParam(value = "消息数据", required = true) @RequestBody String data) throws IOException {
+        Optional.ofNullable(data).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("账号为空"));
+        String decodeJson = URLDecoder.decode(data, SystemConstant.CHARSET_NAME);
+        DoneTaskDto doneTaskDto = JacksonUtil.readJson(decodeJson, DoneTaskDto.class);
+        log.info("donetask进来了,doneTaskDto:{}", JacksonUtil.parseJson(doneTaskDto));
+
+        BasicSchool basicSchool = AuthThirdUtil.hasPermission();
+        return ResultUtil.ok(true);
+    }
+}

+ 1 - 1
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/bean/dto/flow/StandardFlowDoneMsg.java → teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/bean/dto/flow/DoneTaskDto.java

@@ -13,6 +13,6 @@ import java.io.Serializable;
  * @Date: 2023/6/14
  */
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class StandardFlowDoneMsg extends TFFlowViewLogResult implements Serializable {
+public class DoneTaskDto extends TFFlowViewLogResult implements Serializable {
 
 }

+ 47 - 0
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/bean/dto/flow/ToDoTaskDto.java

@@ -0,0 +1,47 @@
+package com.qmth.teachcloud.exchange.common.bean.dto.flow;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 流程消息dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2023/6/14
+ */
+public class ToDoTaskDto implements Serializable {
+
+    @ApiModelProperty(value = "流程信息")
+    StandardFlowData flowData;
+
+    @ApiModelProperty(value = "待办消息")
+    List<StandardFlowWorkMsg> todoTaskList;
+
+    public ToDoTaskDto() {
+
+    }
+
+    public ToDoTaskDto(StandardFlowData flowData, List<StandardFlowWorkMsg> todoTaskList) {
+        this.flowData = flowData;
+        this.todoTaskList = todoTaskList;
+    }
+
+    public StandardFlowData getFlowData() {
+        return flowData;
+    }
+
+    public void setFlowData(StandardFlowData flowData) {
+        this.flowData = flowData;
+    }
+
+    public List<StandardFlowWorkMsg> getTodoTaskList() {
+        return todoTaskList;
+    }
+
+    public void setTodoTaskList(List<StandardFlowWorkMsg> todoTaskList) {
+        this.todoTaskList = todoTaskList;
+    }
+}

+ 2 - 1
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/contant/SystemConstant.java

@@ -36,7 +36,8 @@ public class SystemConstant {
      * api前缀
      */
     public static final String PREFIX_URL_OPEN = "/open";
-    public static final String PREFIX_URL_GDPU = "/admin/gdpu/affair";
+    public static final String PREFIX_URL_GDPU = "/admin/affair";
+    public static final String PREFIX_URL_GDPU_MQ = "/open/mq";
 
     /**
      * 系统常量

+ 80 - 0
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/util/AuthThirdUtil.java

@@ -0,0 +1,80 @@
+package com.qmth.teachcloud.exchange.common.util;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.boot.tools.signature.SignatureEntity;
+import com.qmth.boot.tools.signature.SignatureType;
+import com.qmth.teachcloud.exchange.common.contant.SpringContextHolder;
+import com.qmth.teachcloud.exchange.common.entity.BasicSchool;
+import com.qmth.teachcloud.exchange.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.exchange.common.service.BasicSchoolService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Optional;
+
+/**
+ * @Description: 第三方鉴权util
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/5/27
+ */
+public class AuthThirdUtil {
+    private final static Logger log = LoggerFactory.getLogger(AuthThirdUtil.class);
+
+    /**
+     * 鉴权
+     *
+     * @return
+     */
+    public static BasicSchool hasPermission() {
+        return commonHasPermission(ServletUtil.getRequestTime(), ServletUtil.getRequestAuthorization());
+    }
+
+    /**
+     * 公用方法
+     *
+     * @param expireTime
+     * @param authorization
+     * @return
+     */
+    protected static BasicSchool commonHasPermission(Long expireTime, String authorization) {
+        BasicSchoolService basicSchoolService = SpringContextHolder.getBean(BasicSchoolService.class);
+        HttpServletRequest request = ServletUtil.getRequest();
+        String url = request.getServletPath();
+        //验证authorization
+        Optional.ofNullable(authorization).orElseThrow(() -> ExceptionResultEnum.AUTHORIZATION_INVALID.exception());
+        Optional.ofNullable(expireTime).orElseThrow(() -> ExceptionResultEnum.TIME_INVALID.exception());
+
+        String method = request.getMethod();
+        final SignatureEntity info = SignatureEntity.parse(authorization, method, url, expireTime);
+        Optional.ofNullable(info).orElseThrow(() -> ExceptionResultEnum.AUTHORIZATION_ERROR.exception());
+
+        if (!url.equalsIgnoreCase(info.getUri())) {
+            log.warn("url faile: url error");
+            throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
+        }
+        if (!method.equalsIgnoreCase(info.getMethod())) {
+            log.warn("method faile: method error");
+            throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
+        }
+        if (info.getTimestamp() > expireTime) {
+            log.warn("Authorization faile: session has expired, expire time=" + expireTime);
+            throw ExceptionResultEnum.TIME_INVALID.exception();
+        }
+        if (SignatureType.SECRET != info.getType()) {
+            log.warn("Authorization faile: signature type is not Secret");
+            throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
+        }
+        QueryWrapper<BasicSchool> basicSchoolQueryWrapper = new QueryWrapper<>();
+        basicSchoolQueryWrapper.lambda().eq(BasicSchool::getAccessKey, info.getInvoker());
+        BasicSchool basicSchool = basicSchoolService.getOne(basicSchoolQueryWrapper);
+        Optional.ofNullable(basicSchool).orElseThrow(() -> ExceptionResultEnum.AUTHORIZATION_ERROR.exception("没有学校信息"));
+        if (!info.validate(basicSchool.getAccessSecret())) {
+            log.warn("Authorization faile: secret invalid, secret is " + basicSchool.getAccessSecret());
+            throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
+        }
+        return basicSchool;
+    }
+}