Pārlūkot izejas kodu

Merge branch 'dev' of http://219.151.181.73:3000/zhuwei/bladex into dev

laibulaizheli 1 mēnesi atpakaļ
vecāks
revīzija
b0833b1aa2

+ 4 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/Task.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.business.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import java.io.Serializable;
@@ -178,4 +179,7 @@ public class Task extends BaseEntity {
     @ApiModelProperty("计量任务是否生成审计意见单 1是0否")
     private Integer isBuildAudit;
 
+    @ApiModelProperty("电签状态")
+    @TableField(exist = false)
+    private Integer eStatus;
 }

+ 3 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/BusinessTaskPageVO.java

@@ -58,4 +58,7 @@ public class BusinessTaskPageVO implements Serializable {
     @ApiModelProperty(value = "签字人员集合")
     private List<TaskParallel> taskApproveUserNamesList;
 
+    @ApiModelProperty("电签状态,用来判断是否同意过")
+    private Integer eStatus;
+
 }

+ 16 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProjectInfo.java

@@ -215,5 +215,20 @@ public class ProjectInfo extends BaseEntity {
      *
      */
     @ApiModelProperty(value = "短信时间")
-    private int msTime;
+    private Double msTime;
+    /**
+     * 项目状态
+     */
+    @ApiModelProperty(value = "项目状态, 0:未开始, 1:配置中, 2: 进行中, 3: 已完成")
+    private Integer projectStatus;
+    /**
+     * 项目排序
+     */
+    @ApiModelProperty(value = "项目排序")
+    private Integer sort;
+    /**
+     * 项目负责人
+     */
+    @ApiModelProperty(value = "项目负责人")
+    private Long projectLeader;
 }

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

@@ -68,6 +68,7 @@ import org.springblade.manager.vo.WbsTreeContractVO8;
 import org.springblade.manager.vo.WbsTreePrivateAddVO;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.cache.ParamCache;
+import org.springblade.system.entity.Dept;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.feign.IDictBizClient;
 import org.springblade.system.user.feign.IUserClient;
@@ -1444,6 +1445,7 @@ public R<String> batchDownloadFileToZip(String ids, HttpServletResponse response
                  /*   result.forEach(query -> urls.add(
                             StringUtils.isNotEmpty(query.getNodePdfUrl()) ? query.getNodePdfUrl() + "@@@" + query.getName() + "-" + query.getId() : query.getPdfUrl() + "@@@" + query.getName() + "-" + query.getId()));
                    */
+                Map<String, Integer> nameMap = new HashMap<>();
                 for (int i=0;i<result.size();i++) {
                     String url_link = "";
                     List<TaskApprovalVO.ApprovalFile> files = jdbcTemplate.query("select name as fileName,domain_url as fileUrl from m_table_file where is_deleted = 0 and type in(10,11,12)and tab_id = ?", new BeanPropertyRowMapper<>(TaskApprovalVO.ApprovalFile.class), result.get(i).getWbsId());
@@ -1471,7 +1473,15 @@ public R<String> batchDownloadFileToZip(String ids, HttpServletResponse response
                     } else if (url != null && url.size() == 1) {
                         url_link = url.get(0);
                     }
-                    urls.add(url_link + "@@@" + result.get(i).getName() + "-" + result.get(i).getId());
+                    String fileName = result.get(i).getName();
+                    fileName = fileName == null ? "找不到文件题目" : fileName.replaceAll("\\\\", "_").replaceAll("/", "_");
+                    if (nameMap.containsKey(fileName)) {
+                        fileName = fileName + "_" + nameMap.get(fileName);
+                        nameMap.put(fileName, nameMap.get(fileName) + 1);
+                    } else {
+                        nameMap.put(fileName, 1);
+                    }
+                    urls.add(url_link + "@@@" + fileName);
                 }
 
                 //删除空数据
@@ -2285,6 +2295,29 @@ public R<Boolean> copyContractTreeNode(@RequestBody CopyContractTreeNodeVO vo) {
                 if (StringUtils.isEmpty(contractId)) {
                     contractId = toCopyNode.getContractId();
                 }
+                String userRole = AuthUtil.getUserRole();
+                if(!"administrator".equals(userRole) && vo.getIsCopyData() == 1){
+                    // 查询当前节点有没有数据,有数据则不能复制
+                    if(vo.getClassifyType() != null && !vo.getClassifyType().isEmpty()) {
+                        List<InformationQuery> queries = informationQueryService.list(Wrappers.<InformationQuery>lambdaQuery().eq(InformationQuery::getContractId, contractId)
+                                .in(InformationQuery::getClassify, vo.getClassifyType()).eq(InformationQuery::getWbsId, toCopyNode.getPKeyId()).in(InformationQuery::getStatus, 1, 2));
+                        if (!queries.isEmpty()) {
+                            Map<Integer, List<InformationQuery>> map = queries.stream().collect(Collectors.groupingBy(InformationQuery::getClassify));
+                            if (vo.getClassifyType().contains("1")) {
+                                List<InformationQuery> queryList = map.get(1);
+                                if (queryList != null && !queryList.isEmpty()) {
+                                    throw new ServiceException(toCopyNode.getFullName() + "节点有施工上报数据,不允许复制");
+                                }
+                            }
+                            if (vo.getClassifyType().contains("2")) {
+                                List<InformationQuery> queryList = map.get(2);
+                                if (queryList != null && !queryList.isEmpty()) {
+                                    throw new ServiceException(toCopyNode.getFullName() + "节点有监理上报数据,不允许复制");
+                                }
+                            }
+                        }
+                    }
+                }
             }
 
             WbsTreeContract needCopyNodeRoot = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());

+ 16 - 7
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -123,12 +123,12 @@ public class TaskController extends BladeController {
         if (config != null) {
             if(projectId!=null && !projectId.equals("") && Func.isNotEmpty(projectId)){
                 ProjectInfo projectInfo = projectClient.getById(projectId);
-                addTime = projectInfo.getMsTime();
+                addTime = projectInfo.getMsTime() == null ? 60 : (int)(projectInfo.getMsTime() * 60);
             }
             //获取当前时间
             Date now = DateUtil.now();
             // 16 改为 1小时后超时
-            now = DateUtil.plusHours(now, addTime);
+            now = DateUtil.plusMinutes(now, addTime);
 
             LambdaUpdateWrapper<DefaultConfig> wrapper = new LambdaUpdateWrapper<>();
             wrapper.set(DefaultConfig::getSmsTimeOut, DateUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
@@ -1303,7 +1303,8 @@ public class TaskController extends BladeController {
         int size = dto.getSize();
         //封装入参SQL
         List<Object> params = new ArrayList<>();
-        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE 1=1 AND is_deleted = 0 AND approval_type in(1,3,4,8,9,10)");
+        String sqlResult = "SELECT * ";
+        StringBuilder sqlString = new StringBuilder(" FROM u_task WHERE 1=1 AND is_deleted = 0 AND approval_type in(1,3,4,8,9,10)");
         if (ObjectUtil.isNotEmpty(dto.getTypeValue())) {
             sqlString.append(" AND type = ?");
             params.add(dto.getTypeValue());
@@ -1379,7 +1380,8 @@ public class TaskController extends BladeController {
                     sqlString.append("EXISTS (SELECT 1 FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.status = ? AND u_task_parallel.task_user = ?)");
                     params.add(1);
                     params.add(SecureUtil.getUserId());
-
+                    sqlResult = "SELECT *, (SELECT ifnull(e_visa_status, -1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.STATUS = 1 " +
+                            "AND u_task_parallel.task_user = " + SecureUtil.getUserId() + " and is_deleted = 0 order by id desc limit 1) as e_status";
                     //如果是待办页面,且 任务状态下拉框 选择的不是 待审批状态 的任务,那么直接返回null
                 } else if (ObjectUtil.isNotEmpty(dto.getStatusValue()) && !dto.getStatusValue().equals(1)) {
                     return null;
@@ -1390,6 +1392,8 @@ public class TaskController extends BladeController {
                     params.add(1);
                     params.add(SecureUtil.getUserId());
                     sqlString.append(" AND status = 1");
+                    sqlResult = "SELECT *, (SELECT ifnull(e_visa_status, -1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.STATUS = 1 " +
+                            "AND u_task_parallel.task_user = " + SecureUtil.getUserId() + " and is_deleted = 0 order by id desc limit 1) as e_status";
                 }
 
             } else if (dto.getSelectedType().equals(2)) { //已办页面
@@ -1407,7 +1411,7 @@ public class TaskController extends BladeController {
 //        sqlString.append(" AND (SELECT COUNT(1)  FROM u_information_query WHERE u_task.form_data_id = id and is_deleted=0) > 0");
 
         //总数量
-        String sqlCount = sqlString.toString().replace("*", "count(1)");
+        String sqlCount = "select count(1) " +  sqlString;
         Optional<Integer> totalCountOptional = Optional.ofNullable(jdbcTemplate.queryForObject(sqlCount, Integer.class, params.toArray()));
         int totalCount = totalCountOptional.orElse(0);
 
@@ -1423,13 +1427,17 @@ public class TaskController extends BladeController {
             }
         } else {
             //Web端默认倒叙
-            sqlString.append(" ORDER BY create_time DESC LIMIT ? OFFSET ?");
+            if (!sqlResult.equals("SELECT * ")) {
+                sqlString.append(" ORDER BY e_status asc, create_time DESC LIMIT ? OFFSET ?");
+            } else {
+                sqlString.append(" ORDER BY create_time DESC LIMIT ? OFFSET ?");
+            }
         }
         params.add(size);
         params.add((current - 1) * size);
 
         //执行SQL获取数据
-        String sqlPage = sqlString.toString();
+        String sqlPage = sqlResult + sqlString;
         List<Task> resultList = jdbcTemplate.query(
                 sqlPage,
                 new BeanPropertyRowMapper<>(Task.class),
@@ -1467,6 +1475,7 @@ public class TaskController extends BladeController {
                     vo.setApprovalType(task.getApprovalType());
                     vo.setFormDataId(task.getFormDataId());
                     vo.setProcessInstanceId(task.getProcessInstanceId());
+                    vo.setEStatus(task.getEStatus());
                     List<TaskParallel> taskParallelList = finalTaskParallelGroupMap.get(task.getProcessInstanceId());
                     if (taskParallelList != null && taskParallelList.size() > 0) {
                         //如果是垂直签,且是待办页面,判断是否是当前用户审批轮次,不是当前用户审批轮次就不显示该任务

+ 15 - 6
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ContractLogServiceImpl.java

@@ -329,13 +329,22 @@ public class ContractLogServiceImpl extends BaseServiceImpl<ContractLogMapper, C
             }
         });
         if(CollectionUtil.isNotEmpty(contractLogMonthPacks)){
-            List<String> collect1 = contractLogMonthPacks.stream().map(ContractLogMonthPack::getRecordTime).collect(Collectors.toList());
-            //删除文件
-            List<ContractLogMonthPack> list = contractLogMonthPackService.list(Wrappers.<ContractLogMonthPack>lambdaQuery()
-                    .eq(ContractLogMonthPack::getContractId, logVo.getContractId())
-                    .eq(ContractLogMonthPack::getWbsNodeId, logVo.getWbsNodeId())
-                    .in(ContractLogMonthPack::getRecordTime, collect1));
+            List<String> collect1 = contractLogMonthPacks.stream().map(map ->{
+                DateTime dateTime = DateUtil.parse(map.getRecordTime(), "yyyyMMdd");
+                return dateTime.toString("yyyyMM");
+            }).collect(Collectors.toList());
+            List<ContractLogMonthPack> list = new ArrayList<>();
+            for (String date : collect1) {
+                //删除文件
+                List<ContractLogMonthPack> listed = contractLogMonthPackService.list(Wrappers.<ContractLogMonthPack>lambdaQuery()
+                        .eq(ContractLogMonthPack::getContractId, logVo.getContractId())
+                        .eq(ContractLogMonthPack::getWbsNodeId, logVo.getWbsNodeId())
+                        .likeRight(ContractLogMonthPack::getRecordTime, date));
 
+                if(CollectionUtil.isNotEmpty(listed)){
+                    list.addAll(listed);
+                }
+            }
             if(CollectionUtil.isNotEmpty(list)){
                 //删除文件
                 list.forEach(f -> {

+ 15 - 5
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -39,6 +39,7 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.ResourceUtil;
 import org.springblade.evisa.feign.EVisaClient;
+import org.springblade.evisa.redissionUtil.DistributedRedisLock;
 import org.springblade.evisa.vo.EVisaTaskApprovalVO;
 import org.springblade.flow.core.constant.ProcessConstant;
 import org.springblade.flow.core.feign.IFlowClient;
@@ -1566,11 +1567,20 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             //这里发起的默认为普通流程
             task.setType(1);
             task.setStatus(1);
-            //保存附表信息
-            this.taskParallelService.saveBatch(taskParallelArray);
-
-            //保存主表数据
-            this.save(task);
+            try {
+                if (DistributedRedisLock.acquire("TaskService_StartApproval_" + task.getFormDataId(), 20)) {
+                    long count = this.count(Wrappers.<Task>lambdaQuery().eq(Task::getFormDataId, task.getFormDataId()).ne(Task::getStatus, 3));
+                    if (count > 0) {
+                        return false;
+                    }
+                    //保存附表信息
+                    this.taskParallelService.saveBatch(taskParallelArray);
+                    //保存主表数据
+                    this.save(task);
+                }
+            } finally {
+                DistributedRedisLock.release("TaskService_StartApproval_" + task.getFormDataId());
+            }
         }
         return true;
     }

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java

@@ -1404,7 +1404,7 @@ public class TrialSelfInspectionRecordServiceImpl extends BaseServiceImpl<TrialS
     }
 
     public void submitTrialData(TrialSelfInspectionRecord obj, TrialSelfInspectionRecordDTO dto) {
-        String pdfURL = excelTabClient.saveTabData(dto, dto.getIsBatchSave(), dto.getType(), dto.getTableType(), dto.getId(), obj.getTableIds());
+        String pdfURL = excelTabClient.saveTabData(dto, dto.getIsBatchSave(), dto.getType(), dto.getTableType(), dto.getId(), dto.getTableIds());
         if (StringUtils.isNotEmpty(pdfURL) && !pdfURL.startsWith("500")) {
             String file_path = FileUtils.getSysLocalFileUrl();
             Long snowId = SnowFlakeUtil.getId();

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

@@ -1888,7 +1888,7 @@ public class ExcelTabController extends BladeController {
         }
 
         //获取节点下的所有表单,和附件,如果表单全是隐藏的,并且没有附件,则提示暂无数据
-        String sql = "select pdf_url,e_visa_pdf_url,pdf_trial_url,pdf_trial_url_position,status from u_information_query where classify='" + classify + "' and wbs_id='" + nodeId + "' and contract_id='" + contractId + "'  and status<>3 ";
+        String sql = "select pdf_url,e_visa_pdf_url,pdf_trial_url,pdf_trial_url_position,status from u_information_query where classify='" + classify + "' and wbs_id='" + nodeId + "' and contract_id='" + contractId + "'  and status<>3 and is_deleted=0";
         List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
         if (maps.size() < 1) {
             //判断当前合同段的类型
@@ -1904,7 +1904,7 @@ public class ExcelTabController extends BladeController {
                         String contractsIdsStr = contractsIds.stream()
                             .map(id -> "'" + id + "'")
                             .collect(Collectors.joining(", "));;
-                        String sql1 = "select pdf_url,e_visa_pdf_url,pdf_trial_url,pdf_trial_url_position,status from u_information_query where classify='" + classify + "' and wbs_id='" + nodeId + "' and contract_id in(" + contractsIdsStr + ") and status in(0,1,2)";
+                        String sql1 = "select pdf_url,e_visa_pdf_url,pdf_trial_url,pdf_trial_url_position,status from u_information_query where classify='" + classify + "' and wbs_id='" + nodeId + "' and contract_id in(" + contractsIdsStr + ") and status in(0,1,2) and is_deleted=0";
                         maps = jdbcTemplate.queryForList(sql1);
                     }
                 }