huangjn 2 年 前
コミット
adeb10d353

+ 6 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ContractLogClient.java

@@ -18,6 +18,9 @@ public interface ContractLogClient {
 
     String API_PREFIX = "/contractLog";
 
+    @PostMapping(API_PREFIX + "/queryContractLogWbsByBusinessId")
+    List<JSONObject> queryContractLogWbsByBusinessId(@RequestParam String businessId);
+
     @PostMapping(API_PREFIX + "/removeContractLogWbsByTheLogId")
     void removeContractLogWbsByTheLogId(@RequestParam String theLogId);
 
@@ -33,6 +36,9 @@ public interface ContractLogClient {
     @GetMapping(API_PREFIX + "/queryContractLogById")
     JSONObject queryContractLogById(@RequestParam String theLogId);
 
+    @PostMapping(API_PREFIX + "/queryContractLogByIdList")
+    List<JSONObject> queryContractLogByIds(@RequestBody List<String> theLogIds);
+
     /**
      * 保存日志信息
      */

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/EVisaTaskCheckController.java

@@ -131,7 +131,7 @@ public class EVisaTaskCheckController {
         List<JSONObject> jsonList = this.queryTableEVisaConfig(json);
 
         if(jsonList == null){
-            return R.data(300, null, "未找到符合电签配置的相关流程,请联系服务人员处理");
+            return R.fail(300, "未找到符合电签配置的相关流程,请联系服务人员处理");
         }
 
         //汇总电签配置的审批角色

+ 81 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/OtherController.java

@@ -0,0 +1,81 @@
+package org.springblade.business.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.business.entity.MessageWarning;
+import org.springblade.business.entity.Task;
+import org.springblade.business.entity.TaskParallel;
+import org.springblade.business.service.IMessageWarningService;
+import org.springblade.business.service.ITaskParallelService;
+import org.springblade.business.service.ITaskService;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/other")
+@Api(value = "其它接口", tags = "其它接口")
+public class OtherController extends BladeController {
+
+    private final ITaskParallelService taskParallelService;
+
+    private final ITaskService taskService;
+
+    private final IMessageWarningService messageWarningService;
+
+    /**
+     * 统计当前用户当前合同段下的所有未读通知及待办任务
+     */
+    @GetMapping("/countUserMessageAndTask")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "统计当前用户当前合同段下的所有未读通知及待办任务")
+    public R<Long> countUserMessageAndTask(@RequestParam String contractId){
+        //待办任务
+        long taskLong = this.countToDoUserTask(contractId).getData();
+        //未读通知
+        long messageLong = this.countUserMessage(contractId).getData();
+
+        return R.data((taskLong + messageLong));
+    }
+
+    /**
+     * 统计当前用户的所有未读通知
+     */
+    @GetMapping("/countUserMessage")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "统计当前用户当前合同段下的所有未读通知")
+    public R<Long> countUserMessage(@RequestParam String contractId){
+        return R.data(this.messageWarningService.count(Wrappers.<MessageWarning>lambdaQuery()
+                .eq(MessageWarning::getContractId, contractId)
+                .ne(MessageWarning::getIsRead, "1")
+                .eq(MessageWarning::getPushUser, AuthUtil.getUserId())));
+    }
+
+    /**
+     * 统计当前用户当前合同段下的待办数量
+     */
+    @GetMapping("/countToDoUserTask")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "统计当前用户当前合同段下的待办数量")
+    public R<Long> countToDoUserTask(@RequestParam String contractId){
+        List<Task> taskList = this.taskService.list(Wrappers.<Task>lambdaQuery().eq(Task::getContractId, contractId));
+        long result = 0;
+        if(taskList != null && taskList.size() > 0){
+            result = this.taskParallelService.count(Wrappers.<TaskParallel>lambdaQuery()
+                    .eq(TaskParallel::getTaskUser, AuthUtil.getUserId())
+                    .eq(TaskParallel::getStatus, "1")
+                    .in(TaskParallel::getProcessInstanceId, taskList.stream().map(Task::getProcessInstanceId).distinct().collect(Collectors.toList()))
+                    .groupBy(TaskParallel::getProcessInstanceId));
+        }
+        return R.data(result);
+    }
+
+}

+ 27 - 8
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -2,7 +2,9 @@ package org.springblade.business.controller;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -72,6 +74,31 @@ public class TaskController extends BladeController {
 
 	private final ITaskBatchService taskBatchService;
 
+	/**
+	 * 记录短信验证码超时时间
+	 */
+	@GetMapping("/save-sms-timeout")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "记录短信验证码超时时间")
+	public void saveSmsTimeout(@RequestParam String code){
+		//获取账户记录
+		DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
+		if(config != null){
+			//获取当前时间
+			Date now = DateUtil.now();
+			//默认16小时后超时
+			now = DateUtil.plusHours(now, 16);
+
+			LambdaUpdateWrapper<DefaultConfig> wrapper = new LambdaUpdateWrapper<>();
+			wrapper.set(DefaultConfig::getSmsTimeOut, DateUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
+			if(!StringUtils.equals(config.getSmsCode(), code)){
+				wrapper.set(DefaultConfig::getSmsCode, code);
+			}
+			//生成超时时间
+			this.defaultConfigService.update(wrapper.eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
+		}
+	}
+
 	/**
 	 * 校验电签短信验证码
 	 */
@@ -131,22 +158,14 @@ public class TaskController extends BladeController {
 		if(result.getData().isSuccess()){
 			//记录当前验证码
 			DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
-
-			//获取当前时间
-			Date now = DateUtil.now();
-			//默认16小时后超时
-			now = DateUtil.plusHours(now, 16);
-
 			if(config != null){
 				//修改
 				config.setSmsCode(code);
-				config.setSmsTimeOut(DateUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
 				this.defaultConfigService.updateById(config);
 			} else {
 				//新增
 				config = new DefaultConfig();
 				config.setSmsCode(code);
-				config.setSmsTimeOut(DateUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
 				config.setCreateUser(AuthUtil.getUserId());
 				config.setCreateTime(new Date());
 				this.defaultConfigService.save(config);

+ 23 - 1
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ContractLogClientImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.business.feignClient;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
@@ -14,7 +15,6 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.entity.WbsTreePrivate;
-import org.springblade.manager.feign.WbsTreeContractClient;
 import org.springblade.manager.feign.WbsTreePrivateClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.RestController;
@@ -34,6 +34,22 @@ public class ContractLogClientImpl implements ContractLogClient {
 
     private final WbsTreePrivateClient wbsTreePrivateClient;
 
+    @Override
+    public List<JSONObject> queryContractLogWbsByBusinessId(String businessId) {
+        List<JSONObject> wbsJsonList = new ArrayList<>();
+        List<ContractLogWbs> wbsList = this.contractLogWbsService.list(Wrappers.<ContractLogWbs>lambdaQuery().eq(ContractLogWbs::getBusinessId, businessId));
+        if(wbsList != null && wbsList.size() > 0){
+            for(ContractLogWbs logWbs : wbsList){
+                JSONObject json = new JSONObject();
+                json.put("path", logWbs.getTitle());
+                json.put("primaryKeyId", logWbs.getTreePrimaryKeyId());
+                wbsJsonList.add(json);
+            }
+        }
+
+        return wbsJsonList;
+    }
+
     @Override
     public void removeContractLogWbsByTheLogId(String theLogId) {
         try{
@@ -81,6 +97,12 @@ public class ContractLogClientImpl implements ContractLogClient {
         return log != null ? JSONObject.parseObject(JSONObject.toJSONString(log)) : null;
     }
 
+    @Override
+    public List<JSONObject> queryContractLogByIds(List<String> theLogIds) {
+        List<ContractLog> logList = this.contractLogService.list(Wrappers.<ContractLog>lambdaQuery().in(ContractLog::getId, theLogIds));
+        return logList != null && logList.size() > 0 ? JSONArray.parseArray(JSONObject.toJSONString(logList), JSONObject.class) : null;
+    }
+
     @Override
     public String saveContractLog(SaveContractLogVO saveContractLogVO) {
         ContractLog contractLog = new ContractLog();

+ 65 - 50
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -1865,65 +1865,80 @@ public class ExcelTabController extends BladeController {
     })
     public R<List<Map<String, Object>>> copyTheLogBusinessData(@RequestParam String theLogId, @RequestParam String nodePrimaryKeyId, @RequestParam String currentTime, @RequestParam String contractId) {
         if (StringUtils.isNotEmpty(theLogId) && StringUtils.isNotEmpty(currentTime)) {
-            //获取目标的数据
-            JSONObject targetJson = this.contractLogClient.queryContractLogById(theLogId);
-            if (targetJson == null) {
-                return R.fail("目标日期下未找到当前用户填报的数据,请重新选择");
-            }
-            //查询是否存在关联工序的数据
-            List<JSONObject> wbsJsonList = this.contractLogClient.queryContractLogWbsByTheLogId(targetJson.getString("id"));
-
-            //获取目标数据所在数据表
-            WbsTreePrivate table = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, targetJson.getString("tableId")));
-
-            //获取目标数据
-            String queryTargetDataSql = "SELECT * FROM " + table.getInitTableName() + " WHERE group_id = " + targetJson.getString("dataId");
-            List<Map<String, Object>> targetDatas = this.jdbcTemplate.queryForList(queryTargetDataSql);
 
             //检查当前日期下是否存在数据
             JSONObject currentJson = this.contractLogClient.queryContractLogByPrimaryKeyIdAndRecordTime(nodePrimaryKeyId, currentTime, contractId);
             String businessId = SnowFlakeUtil.getId().toString();
             boolean isNew = true;
             if (currentJson != null) {
-                //有记录,需要删除掉原本记录填写的数据
-                String removeOldSql = "DELETE FROM " + table.getInitTableName() + " WHERE group_id = " + currentJson.getString("dataId");
-                this.jdbcTemplate.execute(removeOldSql);
-
-                //删除掉原本关联的工序节点
-                this.contractLogClient.removeContractLogWbsByTheLogId(currentJson.getString("id"));
-
                 //使用原本的数据ID
                 businessId = currentJson.getString("dataId");
                 isNew = false;
             }
+
             //新增的SQL集合
             List<String> insertSqlList = new ArrayList<>();
+            //关联集合
+            List<JSONObject> logWbsList = new ArrayList<>();
+            //记录第一组
+            List<JSONObject> oneGroupLogWbsList = new ArrayList<>();
 
-            //只需要替换group_id和id即可
-            for (Map<String, Object> dataMap : targetDatas) {
-                StringBuilder insertSql = new StringBuilder("INSERT INTO " + table.getInitTableName()), keySql = new StringBuilder(), valueSql = new StringBuilder();
-                for (Map.Entry<String, Object> mapEntry : dataMap.entrySet()) {
-                    String key = mapEntry.getKey();
-                    Object value = mapEntry.getValue();
-
-                    if ("id".equals(key)) {
-                        value = SnowFlakeUtil.getId();
-                    } else if ("group_id".equals(key)) {
-                        value = businessId;
-                    }
-                    //设置参数
-                    keySql.append(",").append(key);
-                    if (value != null && StringUtils.isNotEmpty(String.valueOf(value))) {
-                        valueSql.append(",").append("'").append(value).append("'");
-                    } else {
-                        valueSql.append(",").append(value);
+            List<JSONObject> targetJsonList = this.contractLogClient.queryContractLogByIds(Func.toStrList(theLogId));
+            if (targetJsonList == null || targetJsonList.size() <= 0) {
+                return R.fail("目标日期下未找到当前用户填报的数据,请重新选择");
+            }
+
+            for(JSONObject targetJson : targetJsonList){
+
+                //获取目标数据所在数据表
+                WbsTreePrivate table = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, targetJson.getString("tableId")));
+
+                //获取目标数据
+                String queryTargetDataSql = "SELECT * FROM " + table.getInitTableName() + " WHERE group_id = " + targetJson.getString("dataId");
+                List<Map<String, Object>> targetDatas = this.jdbcTemplate.queryForList(queryTargetDataSql);
+
+                //只需要替换group_id和id即可
+                for (Map<String, Object> dataMap : targetDatas) {
+                    StringBuilder insertSql = new StringBuilder("INSERT INTO " + table.getInitTableName()), keySql = new StringBuilder(), valueSql = new StringBuilder();
+                    for (Map.Entry<String, Object> mapEntry : dataMap.entrySet()) {
+                        String key = mapEntry.getKey();
+                        Object value = mapEntry.getValue();
+
+                        if ("id".equals(key)) {
+                            //查询是否有关联记录
+                            //查询是否存在关联工序的数据
+                            List<JSONObject> wbsJsonList = this.contractLogClient.queryContractLogWbsByBusinessId(value.toString());
+                            //重置业务ID
+                            value = SnowFlakeUtil.getId();
+                            if(wbsJsonList != null && wbsJsonList.size() > 0){
+                                if(oneGroupLogWbsList.size() == 0){
+                                    oneGroupLogWbsList.addAll(wbsJsonList);
+                                }
+                            } else {
+                                wbsJsonList = new ArrayList<>(oneGroupLogWbsList);
+                            }
+                            for(JSONObject json : wbsJsonList){
+                                json.put("businessId", value);
+                            }
+
+                            logWbsList.addAll(wbsJsonList);
+                        } else if ("group_id".equals(key)) {
+                            value = businessId;
+                        }
+                        //设置参数
+                        keySql.append(",").append(key);
+                        if (value != null && StringUtils.isNotEmpty(String.valueOf(value))) {
+                            valueSql.append(",").append("'").append(value).append("'");
+                        } else {
+                            valueSql.append(",").append(value);
+                        }
                     }
-                }
-                //组装SQL
-                insertSql.append(" (").append(keySql.toString().substring(1)).append(") ");
-                insertSql.append(" VALUES(").append(valueSql.toString().substring(1)).append(")");
+                    //组装SQL
+                    insertSql.append(" (").append(keySql.toString().substring(1)).append(") ");
+                    insertSql.append(" VALUES(").append(valueSql.toString().substring(1)).append(")");
 
-                insertSqlList.add(insertSql.toString());
+                    insertSqlList.add(insertSql.toString());
+                }
             }
 
             if (insertSqlList.size() > 0) {
@@ -1935,13 +1950,13 @@ public class ExcelTabController extends BladeController {
             //处理数据
             this.contractLogClient.saveContractLog(new SaveContractLogVO(
                     Long.parseLong(businessId),
-                    targetJson.getString("projectId"),
-                    targetJson.getString("contractId"),
-                    Long.parseLong(targetJson.getString("wbsNodeId")),
-                    Long.parseLong(targetJson.getString("tableId")),
-                    Integer.parseInt(targetJson.getString("wbsNodeType")),
+                    targetJsonList.get(0).getString("projectId"),
+                    targetJsonList.get(0).getString("contractId"),
+                    Long.parseLong(targetJsonList.get(0).getString("wbsNodeId")),
+                    Long.parseLong(targetJsonList.get(0).getString("tableId")),
+                    Integer.parseInt(targetJsonList.get(0).getString("wbsNodeType")),
                     currentTime,
-                    wbsJsonList
+                    logWbsList
             ));
 
             //返回当前的新数据