Explorar el Código

Merge remote-tracking branch 'origin/master'

liuyc hace 2 años
padre
commit
82b6b5afae

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

@@ -125,4 +125,8 @@ public class InformationQuery extends BaseEntity {
     @ApiModelProperty("首件关联工序资料ids")
     private String sjRecordIds;
 
+
+    @ApiModelProperty("业务时间")
+    private String BusinessTime;
+
 }

+ 3 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ArchiveFileClient.java

@@ -122,4 +122,7 @@ public interface ArchiveFileClient {
     //批量查询案卷下的文件
     @PostMapping(API_PREFIX + "/batchSearchArchiveFile")
     List<ArchiveFile> batchSearchArchiveFile(@RequestBody List<Long> ids);
+
+    @PostMapping(API_PREFIX + "/addOrUpdateArchiveFileBusinessData")
+    void addOrUpdateArchiveFileBusinessData(@RequestParam Long nodeId, @RequestParam Long keyId, @RequestParam Long contractId, @RequestParam String formDataId);
 }

+ 4 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormData.java

@@ -216,5 +216,9 @@ public class FormData {
         return !(Func.isNotEmpty(this.values) && this.values.stream().map(ElementData::getValue).anyMatch(Func::isNotEmpty));
     }
 
+    public List<Object> getRawValue(){
+        return this.values.stream().map(ElementData::getValue).collect(Collectors.toList());
+    }
+
 
 }

+ 3 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java

@@ -174,4 +174,7 @@ public interface WbsTreeContractClient {
     @PostMapping(API_PREFIX + "/updateTabFileTypeByPkeyIds")
     void updateTabFileTypeByPkeyIds(@RequestParam List<Long> updatePKeyIds);
 
+    @GetMapping(API_PREFIX + "/getNextPkeyIdByNodeType")
+    Long getNextPkeyIdByNodeType(@RequestParam Long pkeyId, @RequestParam Long nodeType);
+
 }

+ 8 - 0
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java

@@ -12,6 +12,7 @@ import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.feign.ArchiveFileClient;
 import org.springblade.business.mapper.ArchiveFileMapper;
 import org.springblade.business.service.IArchiveFileService;
+import org.springblade.business.service.ITaskService;
 import org.springblade.business.vo.ArchiveFileVO;
 import org.springblade.common.utils.FileUtils;
 import org.springblade.common.vo.FileSize;
@@ -34,6 +35,8 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
 
     private ContractClient contractClient;
 
+    private final ITaskService iTaskService;
+
 
     @Override
     public void saveArchiveFile(ArchiveFileVO vo) {
@@ -257,4 +260,9 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
     }
 
 
+    @Override
+    public void addOrUpdateArchiveFileBusinessData(Long nodeId, Long keyId, Long contractId, String formDataId) {
+        iTaskService.addOrUpdateArchiveFileBusinessData(nodeId,keyId,contractId,formDataId);
+    }
+
 }

+ 1 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml

@@ -36,6 +36,7 @@
         <result column="sort" property="sort"/>
         <result column="pdf_trial_url" property="pdfTrialUrl"/>
         <result column="pdf_trial_url_position" property="pdfTrialUrlPosition"/>
+        <result column="business_time" property="BusinessTime"/>
     </resultMap>
 
     <resultMap id="queryProcessDataMap" type="org.springblade.business.vo.QueryProcessDataVO">

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java

@@ -81,4 +81,6 @@ public interface ITaskService extends BaseService<Task> {
      * 获取当前合同段所有上报资料的上报批次
      */
     Map<String, String> queryContractAllBatch(String contract);
+
+    void addOrUpdateArchiveFileBusinessData(Long nodeId, Long keyId, Long contractId, String newFileUrl);
 }

+ 40 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -976,5 +976,45 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                 .set(ArchiveFile::getEVisaFile, newFileUrl);
         this.archiveFileService.update(wrapper.in(ArchiveFile::getId, Arrays.asList(formDataId.split(","))));
     }
+    @Override
+    public void addOrUpdateArchiveFileBusinessData(Long nodeId, Long keyId, Long contractId, String formDataId) {
+
+        InformationQuery query = this.informationQueryService.getById(formDataId);
+        if (query == null) {
+            return;
+        }
+
+        ArchiveFile archiveFile = this.archiveFileService.getOne(Wrappers.<ArchiveFile>lambdaQuery()
+                .eq(ArchiveFile::getNodeId, nodeId.toString())
+                .eq(ArchiveFile::getNodeExtId, keyId)
+                .eq(ArchiveFile::getIsDeleted, 0));
+
+        if (archiveFile != null) {
+            archiveFile.setEVisaFile(query.getEVisaPdfUrl());
+            archiveFile.setPdfFileUrl(query.getEVisaPdfUrl()); // 这里将pdfFileUrl也更新了,因为需求中没有限制只能更新eVisaFile属性
+            this.archiveFileService.updateById(archiveFile);
+
+        } else {
+            archiveFile = new ArchiveFile();
+            archiveFile.setNodeId(nodeId.toString());
+            archiveFile.setNodeExtId(keyId);
+            archiveFile.setContractId(contractId.toString());
+            archiveFile.setStatus(2); // 这里是新增归档文件,所以状态为1(已完成)
+            //TODO 文件题名规则,待补充
+            fillFileNameAndTime(archiveFile,query);
+            //
+            archiveFile.setEVisaFile(query.getEVisaPdfUrl());
+            archiveFile.setPdfFileUrl(query.getEVisaPdfUrl());
+            this.archiveFileService.save(archiveFile);
+        }
+    }
+
+    public  void fillFileNameAndTime(ArchiveFile archiveFile,InformationQuery info) {
+        archiveFile.setFileName(info.getName());
+        archiveFile.setFileTime(info.getBusinessTime());
+
+        //todo 文件时间怎么取
+        //archiveFile.setFileTime(info.getCreateTime());
+    }
 
 }

+ 5 - 0
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -1592,6 +1592,11 @@ public class CustomFunction {
                 min = designD - devD;
                 max = designD + devD;
             }
+            if(min>max){
+                double tmp=max;
+                max=min;
+                min=tmp;
+            }
             result[0] = min;
             result[1] = max;
             return result;

+ 6 - 7
blade-service/blade-manager/src/main/java/com/mixsmart/utils/StringUtils.java

@@ -939,13 +939,12 @@ public class StringUtils {
 
 
     /**
-     * 判断是否为数字,包括小数、负数
-     *
-     * @param value
-     * @return
-     * @author:rock
-     * @time:2020年4月15日 上午10:46:15
-     */
+     * @Description 是否数字
+     * @Param [value]
+     * @return boolean
+     * @Author yangyj
+     * @Date 2022.06.02 14:54
+     **/
     public static boolean isNumber(Object value) {
         if (isEmpty(value)) {
             return false;

+ 26 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java

@@ -393,4 +393,30 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
         vosResult.add(vos);
     }
 
+    /**
+     * 根据pkid,找符合nodetype的祖先节点
+     * @param pkeyId
+     * @param nodeType
+     * @return
+     */
+    @Override
+    public Long getNextPkeyIdByNodeType(Long pkeyId, Long nodeType) {
+        WbsTreeContract one = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, pkeyId));
+        if (one != null) {
+
+            int max = 20;
+            int loop = 0;
+            String parentId = one.getParentId().toString();
+            while (loop < max && StringUtils.isNotEquals(0, parentId)) {
+                WbsTreeContract next = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getContractId, one.getContractId()).eq(WbsTreeContract::getId, parentId));
+                if(next.getNodeType().equals(nodeType)){
+                    return next.getPKeyId();
+                }
+                parentId = next.getParentId().toString();
+                loop++;
+            }
+        }
+        return null; // 如果没有满足条件的节点,返回null
+    }
+
 }

+ 63 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -21,6 +21,7 @@ import com.mixsmart.utils.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import lombok.AllArgsConstructor;
+import org.springblade.business.feign.ArchiveFileClient;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -32,6 +33,7 @@ import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ProjectInfo;
+import org.springblade.manager.feign.WbsTreeContractClient;
 import org.springblade.manager.mapper.ArchiveTreeMapper;
 import org.springblade.manager.service.IArchiveTreeService;
 import org.springblade.manager.service.IContractInfoService;
@@ -71,6 +73,10 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 	private final ArchiveTreeContractSyncImpl archiveTreeContractSync;
 
+	private final WbsTreeContractClient wbsTreeContractClient;
+
+	private final ArchiveFileClient archiveFileClient;
+
 
 
 
@@ -968,7 +974,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	}
 
 	/**
-	 * 返回关联质检资料的节点
+	 * 返回某个合同段关联质检资料的节点
 	 * @param contractId
 	 * @return
 	 */
@@ -998,11 +1004,12 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	 * @return
 	 */
 
-	public ArchiveTreeContract getWbsNode(String contractId,Long pkId) {
+	public ArchiveTreeContract getWbsNodeFromWbsKeyId(Long contractId,Long pkId,Long attachId) {
 		List<ArchiveTreeContract> archiveTreeContracts =  baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
 				.eq(ArchiveTreeContract::getContractId, contractId)
 				.eq(ArchiveTreeContract::getIsDeleted, 0)
-				.eq(ArchiveTreeContract::getExtKeyId, pkId));
+				.eq(ArchiveTreeContract::getExtKeyId, pkId)
+				.eq(ArchiveTreeContract::getExtAttachId, attachId));
 		if (archiveTreeContracts == null || archiveTreeContracts.size() ==0) {
 			return null;
 		}
@@ -1010,7 +1017,39 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	}
 
 
-	public Integer writeBusinessData(Long wbsId, Long contractId) {
+	/**
+	 *
+	 * @param keyId
+	 * @param level
+	 * @return
+	 */
+	public Long getWbsKeyIdFromLayer(Long keyId,Long level){
+		return wbsTreeContractClient.getNextPkeyIdByNodeType(keyId,level);
+	}
+
+
+
+	/**
+	 * 根据 wbsId,contractId 获取u_information_query得信息,
+	 *   根据nodeId,看是否有归属于该nodeId得文件,新增或者更新url
+	 * @param nodeId
+	 * @param wbsId
+	 * @param contractId
+	 * @return
+	 */
+	public Integer addOrUpDateArchiveFile(Long nodeId,Long wbsId, Long contractId ) {
+
+		return 0;
+
+
+	}
+
+	/**
+	 * 将电签文件写到
+	 * @param contractId
+	 * @return
+	 */
+	public Integer writeBusinessData(Long keyId, Long contractId, String formDataId) {
 		// 这里省略了具体实现,可根据业务需求编写相应的逻辑
 
 		List<ArchiveTreeContract> associatedNodes = getWbsAssociatedNodes(contractId.toString());
@@ -1019,9 +1058,19 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		}
 
 		for (ArchiveTreeContract associatedNode:associatedNodes) {
+			Long attachId = associatedNode.getId();
 
+			Long level = null;
+			if (associatedNode.getDisplayHierarchy()!= null) {
+				level = Long.parseLong(associatedNode.getDisplayHierarchy());
+			}
 
+			Long levelkeyId = getWbsKeyIdFromLayer(keyId,level);
+			ArchiveTreeContract node = getWbsNodeFromWbsKeyId(contractId,keyId,attachId);
+			if (node!= null ) {
 
+				archiveFileClient.addOrUpdateArchiveFileBusinessData(node.getId(),keyId,contractId,formDataId);
+			}
 		}
 
 
@@ -1034,5 +1083,15 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		}
 	}
 
+	void BusinessData(Long contractId) {
+
+		//获取该合同段完成电签的文件题名,主要是获取pkid和fileurl
+
+		//获取返回某个合同段关联质检资料的节点
+
+	}
+
+
+
 
 }

+ 17 - 11
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -1549,7 +1549,7 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
                              FormData dataFd=tec.formDataMap.get(codeList.get(0));
                              String designStr=codeList.get(1);
                              FormData designFd=tec.formDataMap.get(designStr);
-                             String devStr=StringUtils.isEmpty(formula.getDev())?formula.getDev():fd.getEAllowDeviation();
+                             String devStr=StringUtils.isNotEmpty(formula.getDev())?formula.getDev():fd.getEAllowDeviation();
                              if(StringUtils.isEmpty(devStr)){
                                  /*数据库找不到的情况就读取Excel*/
                                  if(tec.wkbMap.isEmpty()){
@@ -1602,17 +1602,23 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
                                  devStr="±100000";
                              }
                              /*设计值可以是数值类型,或空(等效0)*/
-                             if(dataFd!=null&&designFd!=null){
-                                 if(dataFd.getValues().stream().map(ElementData::getValue).anyMatch(StringUtils::isNotEmpty)&&(designFd.getValues().size()>1||designFd.getValues().stream().map(ElementData::getValue).anyMatch(StringUtils::isEmpty))){
-                                     /*多少个设计值暂时默认全部合格,满足绝大部分结果*/
-                                     data=dataFd.getValues().stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).count();
-                                 }else{
-                                     List<Object>  result =  CustomFunction.b445check(dataFd.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()),designFd.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()),devStr,1 );
-                                     data=result.get(1);
+                             if(dataFd!=null){
+                                    List<Object> values= dataFd.getRawValue();
+                                    boolean nonNumeric=values.stream().filter(StringUtils::isNotEmpty).anyMatch(e->!StringUtils.isNumber(e));
+                                 if(nonNumeric){
+                                   data=values.stream().filter(StringUtils::isNotEmpty).count();
+                                 }else if(designFd!=null){
+                                     if(dataFd.getValues().stream().map(ElementData::getValue).anyMatch(StringUtils::isNotEmpty)&&(designFd.getValues().size()>1||designFd.getValues().stream().map(ElementData::getValue).anyMatch(StringUtils::isEmpty))){
+                                         /*多少个设计值暂时默认全部合格,满足绝大部分结果*/
+                                         data=dataFd.getValues().stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).count();
+                                     }else{
+                                         List<Object>  result =  CustomFunction.b445check(dataFd.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()),designFd.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()),devStr,1 );
+                                         data=result.get(1);
+                                     }
+                                 }else if(BaseUtils.isNumber(designStr)) {
+                                     List<Object> result = CustomFunction.b445check(dataFd.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()), 0, devStr, 1);
+                                     data = result.get(1);
                                  }
-                             }else if(dataFd!=null&& BaseUtils.isNumber(designStr)){
-                                     List<Object>  result =  CustomFunction.b445check(dataFd.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()),0,devStr,1 );
-                                     data=result.get(1);
                              }
                          }
                          f = f.replace(m.group(),putDataWithKey(BaseUtils.isNumber(data)?Double.parseDouble(data.toString()):data));