瀏覽代碼

新增教研分析回调

wangliang 3 年之前
父節點
當前提交
9cef6998f1

+ 3 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/NotifyApiController.java

@@ -3,7 +3,6 @@ package com.qmth.distributed.print.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.common.SignatureEntityTest;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
@@ -21,7 +20,6 @@ import javax.annotation.Resource;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
-import java.text.MessageFormat;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -59,13 +57,14 @@ public class NotifyApiController {
         Optional.ofNullable(sign).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("签名为空"));
         log.info("sign:{}", sign);
 
-        String pattern = "{0}{1}{2}";
-        String localSign = URLEncoder.encode(MessageFormat.format(pattern, Base64Util.encode(ShaUtils.sha1(callbackPwd)), SignatureEntityTest.FIELD_JOINER, SignatureEntityTest.encrypt(decodeJson)), SystemConstant.CHARSET_NAME);
+        String localSign = URLEncoder.encode(Base64Util.encode(ShaUtils.sha1(callbackPwd + decodeJson)), SystemConstant.CHARSET_NAME);
         log.info("localSign:{}", localSign);
 
         if (!Objects.equals(localSign, sign)) {
             throw ExceptionResultEnum.ERROR.exception("签名不匹配");
         }
+
+        //TODO 此处加批次数据状态更新service方法
         return ResultUtil.ok(System.currentTimeMillis());
     }
 }

+ 272 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/UserSaveReportParams.java

@@ -0,0 +1,272 @@
+package com.qmth.teachcloud.common.bean.params;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.contant.SpringContextHolder;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysConfig;
+import com.qmth.teachcloud.common.enums.userPush.SyncStatusEnum;
+import com.qmth.teachcloud.common.service.SysConfigService;
+import com.qmth.teachcloud.common.util.Base64Util;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.StringUtils;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @Description: 用户保存/编辑params
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/3/24
+ */
+public class UserSaveReportParams extends BaseEntity implements Serializable {
+
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField("school_id")
+    private Long schoolId;
+    /**
+     * 用户名
+     */
+    @TableField("login_name")
+    @NotBlank(message = "请输入登录名")
+    @Length(message = "登录名不能超过{max}个字符", max = 50)
+    private String loginName;
+    /**
+     * 姓名
+     */
+    @TableField("real_name")
+    @NotBlank(message = "请输入姓名")
+    @Length(message = "姓名不能超过{max}个字符", max = 50)
+    private String realName;
+
+    /**
+     * 姓名
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 密码
+     */
+    private String password;
+    /**
+     * 手机号
+     */
+    @TableField("mobile_number")
+//    @NotBlank(message = "请输入手机号码")
+    @Length(message = "手机号码不能超过{max}个字符", max = 25)
+    private String mobileNumber;
+
+    @ApiModelProperty(value = "机构id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField("org_id")
+    private Long orgId;
+
+    @ApiModelProperty(value = "是否启用,0:停用,1:启用")
+    private Boolean enable = true;
+
+    /**
+     * 密码修改次数
+     */
+    @TableField("pwd_count")
+    private Integer pwdCount;
+
+    /**
+     * 密码修改时间
+     */
+    @TableField("pwd_update_time")
+    private Long pwdUpdateTime;
+    /**
+     * 备注
+     */
+    private String remark;
+
+    @TableField(exist = false)
+    private String oldPassword;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "前端传的修改手机号码时的验证码")
+    private String verifyCode;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(exist = false)
+    @NotNull(message = "请选择角色")
+    private Long[] roleIds;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(exist = false)
+    private Long[] courseIds;
+
+    @ApiModelProperty(value = "同步状态")
+    @TableField("sync_status")
+    private SyncStatusEnum syncStatus;
+
+    @ApiModelProperty("历史用户名")
+    private String historicName;
+
+    public String getHistoricName() {
+        return historicName;
+    }
+
+    public void setHistoricName(String historicName) {
+        this.historicName = historicName;
+    }
+
+    public UserSaveReportParams() {
+
+    }
+
+    public UserSaveReportParams(Long schoolId, String loginName, String realName, String mobileNumber) {
+        setId(SystemConstant.getDbUuid());
+        this.schoolId = schoolId;
+        this.loginName = loginName;
+        this.realName = realName;
+        this.mobileNumber = mobileNumber;
+        this.pwdCount = 1;
+        this.password = SystemConstant.DEFAULT_PASSWORD;
+        this.enable = true;
+    }
+
+    @Override
+    public void insertInfo(Long userId) {
+        super.insertInfo(userId);
+        SysConfigService sysConfigService = SpringContextHolder.getBean(SysConfigService.class);
+        SysConfig sysConfig = sysConfigService.getByKey("sys.user.initPassword");
+        setPassword(Base64Util.encode(StringUtils.isNoneBlank(sysConfig.getConfigValue()) ? sysConfig.getConfigValue().getBytes() : "123456".getBytes()));
+    }
+
+    public SyncStatusEnum getSyncStatus() {
+        return syncStatus;
+    }
+
+    public void setSyncStatus(SyncStatusEnum syncStatus) {
+        this.syncStatus = syncStatus;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getMobileNumber() {
+        return mobileNumber;
+    }
+
+    public void setMobileNumber(String mobileNumber) {
+        this.mobileNumber = mobileNumber;
+    }
+
+    public Long getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(Long orgId) {
+        this.orgId = orgId;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public Integer getPwdCount() {
+        return pwdCount;
+    }
+
+    public void setPwdCount(Integer pwdCount) {
+        this.pwdCount = pwdCount;
+    }
+
+    public Long getPwdUpdateTime() {
+        return pwdUpdateTime;
+    }
+
+    public void setPwdUpdateTime(Long pwdUpdateTime) {
+        this.pwdUpdateTime = pwdUpdateTime;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Long[] getRoleIds() {
+        return roleIds;
+    }
+
+    public void setRoleIds(Long[] roleIds) {
+        this.roleIds = roleIds;
+    }
+
+    public Long[] getCourseIds() {
+        return courseIds;
+    }
+
+    public void setCourseIds(Long[] courseIds) {
+        this.courseIds = courseIds;
+    }
+
+    public String getOldPassword() {
+        return oldPassword;
+    }
+
+    public void setOldPassword(String oldPassword) {
+        this.oldPassword = oldPassword;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getVerifyCode() {
+        return verifyCode;
+    }
+
+    public void setVerifyCode(String verifyCode) {
+        this.verifyCode = verifyCode;
+    }
+}

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

@@ -251,6 +251,8 @@ public class SystemConstant {
     public static final long REDIS_LOCK_FLOW_TIME_OUT = 60L * 2;
     public static final String REDIS_LOCK_CUSTOM_FLOW_PREFIX = "redis:lock:custom:flow:";//自定义流程锁
     public static final long REDIS_LOCK_CUSTOM_FLOW_TIME_OUT = 60L * 2;
+    public static final String REDIS_LOCK_CALCULATE_PREFIX = "redis:lock:calculate:";//计算锁
+    public static final long REDIS_LOCK_CALCULATE_TIME_OUT = 60L * 60;
 
     /**
      * 机器心跳

+ 3 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java

@@ -8,6 +8,7 @@ import com.qmth.teachcloud.common.bean.dto.UserDto;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.bean.params.UserPushParam;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
+import com.qmth.teachcloud.common.bean.params.UserSaveReportParams;
 import com.qmth.teachcloud.common.bean.result.LoginResult;
 import com.qmth.teachcloud.common.bean.result.SyncCountResult;
 import com.qmth.teachcloud.common.bean.result.SysUserResult;
@@ -39,10 +40,10 @@ public interface SysUserService extends IService<SysUser> {
     /**
      * 保存用户
      *
-     * @param userSaveParams
+     * @param userSaveReportParams
      * @return
      */
-    boolean saveUserReport(UserSaveParams userSaveParams);
+    boolean saveUserReport(UserSaveReportParams userSaveReportParams);
 
     boolean enable(SysUser user) throws NoSuchAlgorithmException, IllegalAccessException;
 

+ 4 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -19,6 +19,7 @@ import com.qmth.teachcloud.common.bean.dto.excel.SysUserImportDto;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.bean.params.UserPushParam;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
+import com.qmth.teachcloud.common.bean.params.UserSaveReportParams;
 import com.qmth.teachcloud.common.bean.result.*;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
@@ -161,7 +162,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      * @return
      */
     @Override
-    public boolean saveUserReport(UserSaveParams userSaveParams) {
+    public boolean saveUserReport(UserSaveReportParams userSaveReportParams) {
+        Gson gson = new Gson();
+        UserSaveParams userSaveParams = gson.fromJson(gson.toJson(userSaveReportParams), UserSaveParams.class);
         saveUserCommon(userSaveParams, null);
         return true;
     }

+ 0 - 34
teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/strategy/CalculateTaskTemplate.java

@@ -1,34 +0,0 @@
-package com.qmth.teachcloud.common.sync.strategy;
-
-import com.qmth.teachcloud.common.bean.params.CalculateParams;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class CalculateTaskTemplate {
-    private final static Logger log = LoggerFactory.getLogger(CalculateTaskTemplate.class);
-//    private static RedisUtil redisUtil = SpringContextHolder.getBean(RedisUtil.class);
-
-    protected void createSyncTask() {
-        log.info("createSyncTask come in");
-    }
-
-    protected abstract void dataVaild();
-
-    protected abstract void calculate();
-
-    protected void finished() {
-        log.info("finished come in");
-    }
-
-    protected void exception() {
-        log.info("exception come in");
-    }
-
-    public void start(CalculateParams calculateParams) {
-        createSyncTask();
-        dataVaild();
-        calculate();
-        finished();
-    }
-}
-

+ 36 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/CalculateParams.java → teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/bean/params/CalculateParams.java

@@ -1,8 +1,9 @@
-package com.qmth.teachcloud.common.bean.params;
+package com.qmth.teachcloud.report.business.bean.params;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.report.business.entity.TBSyncTask;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.util.CollectionUtils;
 
@@ -24,7 +25,14 @@ public class CalculateParams implements Serializable {
     private Long examId;
 
     @ApiModelProperty(value = "课程编码,一个分析试卷的唯一标识")
-    private List courseCode;
+    private List<String> courseCode;
+
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long schoolId;
+
+    @ApiModelProperty(value = "异步任务")
+    private TBSyncTask tbSyncTask;
 
     /**
      * 参数校验
@@ -36,6 +44,22 @@ public class CalculateParams implements Serializable {
         }
     }
 
+    public TBSyncTask getTbSyncTask() {
+        return tbSyncTask;
+    }
+
+    public void setTbSyncTask(TBSyncTask tbSyncTask) {
+        this.tbSyncTask = tbSyncTask;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
     public Long getExamId() {
         return examId;
     }
@@ -44,11 +68,19 @@ public class CalculateParams implements Serializable {
         this.examId = examId;
     }
 
-    public List getCourseCode() {
+    public List<String> getCourseCode() {
         return courseCode;
     }
 
-    public void setCourseCode(List courseCode) {
+    public void setCourseCode(List<String> courseCode) {
         this.courseCode = courseCode;
     }
+
+    @Override
+    public String toString() {
+        return "CalculateParams{" +
+                "examId=" + examId +
+                ", courseCode=" + courseCode +
+                '}';
+    }
 }

+ 14 - 1
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/entity/TBSyncTask.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.report.business.entity;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.PushTypeEnum;
 import com.qmth.teachcloud.common.enums.TaskResultEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
@@ -20,7 +21,7 @@ import java.math.BigDecimal;
  * @author wangliang
  * @since 2022-06-06
  */
-@ApiModel(value="TBSyncTask对象", description="同步任务表")
+@ApiModel(value = "TBSyncTask对象", description = "同步任务表")
 public class TBSyncTask extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -67,6 +68,18 @@ public class TBSyncTask extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "报告路径")
     private String reportFilePath;
 
+    public TBSyncTask() {
+
+    }
+
+    public TBSyncTask(Long schoolId, Long thirdRelateId) {
+        setId(SystemConstant.getDbUuid());
+        this.schoolId = schoolId;
+        this.thirdRelateId = thirdRelateId;
+        this.type = PushTypeEnum.CALCULATE;
+        this.status = TaskStatusEnum.INIT;
+    }
+
     public Long getSchoolId() {
         return schoolId;
     }

+ 169 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/strategy/CalculateTaskTemplate.java

@@ -0,0 +1,169 @@
+package com.qmth.teachcloud.report.business.templete.strategy;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.teachcloud.common.config.DictionaryConfig;
+import com.qmth.teachcloud.common.contant.SpringContextHolder;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.TaskResultEnum;
+import com.qmth.teachcloud.common.enums.TaskStatusEnum;
+import com.qmth.teachcloud.common.util.*;
+import com.qmth.teachcloud.report.business.bean.params.CalculateParams;
+import com.qmth.teachcloud.report.business.entity.TBSyncTask;
+import com.qmth.teachcloud.report.business.service.TBSyncTaskService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.Objects;
+
+/**
+ * @Description: 分析数据模版
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/6/7
+ */
+public abstract class CalculateTaskTemplate {
+    private final static Logger log = LoggerFactory.getLogger(CalculateTaskTemplate.class);
+
+    /**
+     * 创建异步任务
+     *
+     * @param calculateParams
+     * @throws IOException
+     */
+    protected void createSyncTask(CalculateParams calculateParams) throws IOException {
+        log.info("createSyncTask come in");
+        TBSyncTaskService tbSyncTaskService = SpringContextHolder.getBean(TBSyncTaskService.class);
+        QueryWrapper<TBSyncTask> tbSyncTaskQueryWrapper = new QueryWrapper<>();
+        tbSyncTaskQueryWrapper.lambda().eq(TBSyncTask::getThirdRelateId, calculateParams.getExamId());
+        TBSyncTask tbSyncTask = tbSyncTaskService.getOne(tbSyncTaskQueryWrapper);
+        if (Objects.isNull(tbSyncTask)) {
+            tbSyncTask = new TBSyncTask(calculateParams.getSchoolId(), calculateParams.getExamId());
+            tbSyncTaskService.save(tbSyncTask);
+        }
+        calculateParams.setTbSyncTask(tbSyncTask);
+    }
+
+    /**
+     * 数据校验,由具体类实现
+     *
+     * @param calculateParams
+     * @throws IOException
+     */
+    public abstract void dataVaild(CalculateParams calculateParams) throws IOException;
+
+    /**
+     * 数据计算,由具体类实现
+     *
+     * @param calculateParams
+     * @throws IOException
+     */
+    public abstract void calculate(CalculateParams calculateParams) throws IOException;
+
+    /**
+     * 更新任务进度方法
+     *
+     * @param calculateParams
+     * @throws IOException
+     */
+    protected void updateProgress(CalculateParams calculateParams) throws IOException {
+        log.info("updateProgress come in");
+        TBSyncTaskService tbSyncTaskService = SpringContextHolder.getBean(TBSyncTaskService.class);
+        TBSyncTask tbSyncTask = calculateParams.getTbSyncTask();
+        tbSyncTaskService.updateById(tbSyncTask);
+        callback(calculateParams);
+    }
+
+    /**
+     * 完成任务方法
+     *
+     * @param calculateParams
+     * @throws IOException
+     */
+    protected void finished(CalculateParams calculateParams) throws IOException {
+        log.info("finished come in");
+        TBSyncTask tbSyncTask = calculateParams.getTbSyncTask();
+        tbSyncTask.setStatus(TaskStatusEnum.FINISH);
+        tbSyncTask.setResult(TaskResultEnum.SUCCESS);
+        updateProgress(calculateParams);
+    }
+
+    /**
+     * 任务异常方法
+     *
+     * @param calculateParams
+     * @throws IOException
+     */
+    protected void exception(CalculateParams calculateParams) throws IOException {
+        log.info("exception come in");
+        TBSyncTask tbSyncTask = calculateParams.getTbSyncTask();
+        tbSyncTask.setStatus(TaskStatusEnum.FINISH);
+        tbSyncTask.setResult(TaskResultEnum.ERROR);
+        callback(calculateParams);
+    }
+
+    /**
+     * 回调通知方法
+     *
+     * @param calculateParams
+     * @throws IOException
+     */
+    protected void callback(CalculateParams calculateParams) throws IOException {
+        log.info("callback come in");
+        DictionaryConfig dictionaryConfig = SpringContextHolder.getBean(DictionaryConfig.class);
+        TBSyncTask tbSyncTask = calculateParams.getTbSyncTask();
+
+        Long time = System.currentTimeMillis();
+        JSONObject dataObjectJson = new JSONObject();
+        dataObjectJson.put("examId", tbSyncTask.getThirdRelateId());
+        dataObjectJson.put("courseCode", tbSyncTask.getObj());
+        dataObjectJson.put("progress", tbSyncTask.getProgress());
+        dataObjectJson.put("status", tbSyncTask.getStatus());
+        dataObjectJson.put("time", time);
+
+        String sign = URLEncoder.encode(Base64Util.encode(ShaUtils.sha1(dictionaryConfig.printOpenDomain().getCallbackPwd() + dataObjectJson.toJSONString())), SystemConstant.CHARSET_NAME);
+        String callbackResult = HttpUtil.postJson(dictionaryConfig.printOpenDomain().getHostUrl() + dictionaryConfig.printOpenDomain().getCallbackUrlApi(), dataObjectJson.toJSONString(), sign, time);
+        if (Objects.nonNull(callbackResult)) {
+            log.info("callbackResult:{}", JacksonUtil.parseJson(callbackResult));
+        }
+    }
+
+    /**
+     * 开始计算
+     *
+     * @param calculateParams
+     * @throws IOException
+     */
+    public void start(CalculateParams calculateParams) throws IOException {
+        RedisUtil redisUtil = SpringContextHolder.getBean(RedisUtil.class);
+        boolean lock = redisUtil.lock(SystemConstant.REDIS_LOCK_CALCULATE_PREFIX + calculateParams.toString(), SystemConstant.REDIS_LOCK_CALCULATE_TIME_OUT);
+        if (!lock) {
+            throw ExceptionResultEnum.ERROR.exception("正在计算中,请稍候再试!");
+        }
+        try {
+            createSyncTask(calculateParams);
+            dataVaild(calculateParams);
+            calculate(calculateParams);
+            finished(calculateParams);
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (Objects.nonNull(calculateParams.getTbSyncTask())) {
+                calculateParams.getTbSyncTask().setSummary(e.getMessage());
+            }
+            exception(calculateParams);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {
+            redisUtil.releaseLock(SystemConstant.REDIS_LOCK_CALCULATE_PREFIX + calculateParams.toString());
+        }
+    }
+}
+

+ 27 - 3
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/strategy/CourseCodeSyncTaskService.java

@@ -1,21 +1,45 @@
 package com.qmth.teachcloud.report.business.templete.strategy;
 
-import com.qmth.teachcloud.common.sync.strategy.CalculateTaskTemplate;
+import com.qmth.teachcloud.common.enums.TaskStatusEnum;
+import com.qmth.teachcloud.report.business.bean.params.CalculateParams;
+import com.qmth.teachcloud.report.business.entity.TBSyncTask;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
+
+/**
+ * @Description: 科目(试卷)计算service
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/6/7
+ */
 @Service
 public class CourseCodeSyncTaskService extends CalculateTaskTemplate {
     private final static Logger log = LoggerFactory.getLogger(CourseCodeSyncTaskService.class);
 
     @Override
-    protected void dataVaild() {
+    public void dataVaild(CalculateParams calculateParams) throws IOException {
         log.info("CourseCodeSyncTaskService dataVaild come in");
+        TBSyncTask tbSyncTask = calculateParams.getTbSyncTask();
+        tbSyncTask.setStatus(TaskStatusEnum.DATA_VALID);
+        updateProgress(calculateParams);
+
+        //TODO 此处加校验数据具体逻辑方法,推荐service方法然后加@Transactional注解
     }
 
     @Override
-    protected void calculate() {
+    public void calculate(CalculateParams calculateParams) throws IOException {
         log.info("CourseCodeSyncTaskService calculate come in");
+        TBSyncTask tbSyncTask = calculateParams.getTbSyncTask();
+        tbSyncTask.setStatus(TaskStatusEnum.RUNNING);
+        updateProgress(calculateParams);
+
+//        tbSyncTask.setObj(calculateParams.getCourseCode().get(0));//科目名称
+//        tbSyncTask.setRemark("tableName");//表名称
+
+        //TODO 此处加计算数据具体逻辑方法,推荐service方法然后加@Transactional注解
     }
 }

+ 37 - 42
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/OpenApiController.java

@@ -1,19 +1,20 @@
 package com.qmth.teachcloud.report.api;
 
-import com.alibaba.fastjson.JSONObject;
 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.common.SignatureEntityTest;
 import com.qmth.teachcloud.common.bean.params.BasicSemesterParams;
-import com.qmth.teachcloud.common.bean.params.CalculateParams;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicSchool;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
-import com.qmth.teachcloud.common.util.*;
+import com.qmth.teachcloud.common.util.AuthThirdUtil;
+import com.qmth.teachcloud.common.util.JacksonUtil;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.report.business.bean.params.CalculateParams;
 import com.qmth.teachcloud.report.business.bean.params.CourseParam;
 import com.qmth.teachcloud.report.business.bean.params.TBExamParam;
 import com.qmth.teachcloud.report.business.service.TBExamCourseService;
@@ -31,11 +32,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import java.io.IOException;
-import java.math.BigDecimal;
 import java.net.URLDecoder;
-import java.net.URLEncoder;
-import java.text.MessageFormat;
-import java.util.Objects;
 import java.util.Optional;
 
 /**
@@ -129,45 +126,43 @@ public class OpenApiController {
         log.info("calculate进来了,result:{}", decodeJson);
         CalculateParams calculateParams = JacksonUtil.readJson(decodeJson, CalculateParams.class);
         calculateParams.validParams();
-        AuthThirdUtil.hasPermission();
+        BasicSchool basicSchool = AuthThirdUtil.hasPermission();
+        calculateParams.setSchoolId(basicSchool.getId());
 
         String callbackPwd = dictionaryConfig.printOpenDomain().getCallbackPwd();
         Optional.ofNullable(callbackPwd).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("配置文件回调密码为空"));
 
         courseCodeSyncTaskService.start(calculateParams);
-
-        try {
-            //TODO 这里加入前置校验数据环节
-
-            BigDecimal progress = new BigDecimal(0);
-            BigDecimal finished = new BigDecimal(1);
-            for (int i = 0; i < calculateParams.getCourseCode().size(); i++) {
-                progress = new BigDecimal(i).divide(new BigDecimal(calculateParams.getCourseCode().size() - 1), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
-                Long time = System.currentTimeMillis();
-                JSONObject dataObjectJson = new JSONObject();
-                dataObjectJson.put("examId", calculateParams.getExamId());
-                dataObjectJson.put("courseCode", calculateParams.getCourseCode().get(i));
-                dataObjectJson.put("progress", progress);
-                if (progress.compareTo(finished) == 0) {
-                    dataObjectJson.put("status", "FINISHED");
-                } else {
-                    dataObjectJson.put("status", "RUNNING");
-                }
-                dataObjectJson.put("time", time);
-                String pattern = "{0}{1}{2}";
-                String sign = URLEncoder.encode(MessageFormat.format(pattern, Base64Util.encode(ShaUtils.sha1(callbackPwd)), SignatureEntityTest.FIELD_JOINER, SignatureEntityTest.encrypt(dataObjectJson.toJSONString())), SystemConstant.CHARSET_NAME);
-                String callbackResult = HttpUtil.postJson(dictionaryConfig.printOpenDomain().getHostUrl() + dictionaryConfig.printOpenDomain().getCallbackUrlApi(), dataObjectJson.toJSONString(), sign, time);
-                if (Objects.nonNull(callbackResult)) {
-                    log.info("callbackResult:{}", JacksonUtil.parseJson(callbackResult));
-                }
-                if (progress.compareTo(finished) == 0) {
-                    break;
-                }
-//                Thread.sleep(5000);
-            }
-        } catch (Exception e) {
-            log.error(SystemConstant.LOG_ERROR, e);
-        }
+//        try {
+//            BigDecimal progress = new BigDecimal(0);
+//            BigDecimal finished = new BigDecimal(1);
+//            for (int i = 0; i < calculateParams.getCourseCode().size(); i++) {
+//                progress = new BigDecimal(i).divide(new BigDecimal(calculateParams.getCourseCode().size() - 1), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
+//                Long time = System.currentTimeMillis();
+//                JSONObject dataObjectJson = new JSONObject();
+//                dataObjectJson.put("examId", calculateParams.getExamId());
+//                dataObjectJson.put("courseCode", calculateParams.getCourseCode().get(i));
+//                dataObjectJson.put("progress", progress);
+//                if (progress.compareTo(finished) == 0) {
+//                    dataObjectJson.put("status", "FINISHED");
+//                } else {
+//                    dataObjectJson.put("status", "RUNNING");
+//                }
+//                dataObjectJson.put("time", time);
+//
+//                String sign = URLEncoder.encode(Base64Util.encode(ShaUtils.sha1(callbackPwd + dataObjectJson.toJSONString())), SystemConstant.CHARSET_NAME);
+//                String callbackResult = HttpUtil.postJson(dictionaryConfig.printOpenDomain().getHostUrl() + dictionaryConfig.printOpenDomain().getCallbackUrlApi(), dataObjectJson.toJSONString(), sign, time);
+//                if (Objects.nonNull(callbackResult)) {
+//                    log.info("callbackResult:{}", JacksonUtil.parseJson(callbackResult));
+//                }
+//                if (progress.compareTo(finished) == 0) {
+//                    break;
+//                }
+////                Thread.sleep(5000);
+//            }
+//        } catch (Exception e) {
+//            log.error(SystemConstant.LOG_ERROR, e);
+//        }
         return ResultUtil.ok(true);
     }
 }

+ 3 - 3
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/SysUserController.java

@@ -3,7 +3,7 @@ package com.qmth.teachcloud.report.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.common.bean.params.UserSaveParams;
+import com.qmth.teachcloud.common.bean.params.UserSaveReportParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.service.SysUserService;
@@ -100,11 +100,11 @@ public class SysUserController {
      */
     @ApiOperation(value = "新增/修改")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
-    public Result save(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody UserSaveParams userSaveParams, BindingResult bindingResult) throws IllegalAccessException {
+    public Result save(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody UserSaveReportParams userSaveReportParams, BindingResult bindingResult) throws IllegalAccessException {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
-        return ResultUtil.ok(sysUserService.saveUserReport(userSaveParams));
+        return ResultUtil.ok(sysUserService.saveUserReport(userSaveReportParams));
     }
 
     /**