Преглед изворни кода

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

laibulaizheli пре 2 месеци
родитељ
комит
0219dde034

+ 16 - 8
blade-service-api/blade-e-visa-api/src/main/java/org/springblade/evisa/redissionUtil/DistributedRedisLock.java

@@ -14,8 +14,7 @@ import java.util.concurrent.TimeUnit;
 public class DistributedRedisLock {
 
     private static final Logger _log = Logger.getLogger(DistributedRedisLock.class);
-
-    private static final Config config = new Config();
+    private static volatile Redisson redisson;
 
     private static final String LOCK_TITLE = "redisLock_";
 
@@ -104,13 +103,22 @@ public class DistributedRedisLock {
     }
 
     private static Redisson getRedisson() {
-        config.useSingleServer()
-                .setAddress("redis://" + RedissonManager.SPRING_REDIS_HOST + ":" + RedissonManager.SPRING_REDIS_PORT)
-                .setConnectionPoolSize(500);
-        if (StringUtil.isNotEmpty(RedissonManager.SPRING_REDIS_PASSWORD)) {
-            config.useSingleServer().setPassword(RedissonManager.SPRING_REDIS_PASSWORD);
+        if (redisson == null) {
+            synchronized (DistributedRedisLock.class) {
+                if (redisson == null) {
+                    Config config = new Config();
+                    config.useSingleServer()
+                            .setAddress("redis://" + RedissonManager.SPRING_REDIS_HOST + ":" + RedissonManager.SPRING_REDIS_PORT)
+                            .setConnectionPoolSize(500);
+                    if (StringUtil.isNotEmpty(RedissonManager.SPRING_REDIS_PASSWORD)) {
+                        config.useSingleServer().setPassword(RedissonManager.SPRING_REDIS_PASSWORD);
+                    }
+                    redisson = (Redisson) Redisson.create(config);
+                    _log.info("Redisson instance created.");
+                }
+            }
         }
-        return (Redisson) Redisson.create(config);
+        return redisson;
     }
 
 }

+ 65 - 60
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -387,71 +387,76 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
         } else {
             //首先根据wbsId获取合同段ID和项目ID
             WbsTreeContract contractTree = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(primaryKeyId));
+            int type = (contractTree.getIsExpernode() == null || contractTree.getIsExpernode() <= 0) ? 1 : 2;
+            if (DistributedRedisLock.acquire("saveOrUpdateInformationQueryData:" + primaryKeyId + ":" + contractTree.getContractId() + ":" + classify + ":" + type,5)) {
+                try {
+                    //判断当前填报节点下是否已经存在相应数据
+                    InformationQuery oldData = this.baseMapper.getInformationQueryByWbsId(contractTree.getPKeyId(), classify,contractTree.getContractId());
 
-            //判断当前填报节点下是否已经存在相应数据
-            InformationQuery oldData = this.baseMapper.getInformationQueryByWbsId(contractTree.getPKeyId(), classify,contractTree.getContractId());
-
-            if (oldData != null) {
-                //存在记录,修改
-                if (StringUtils.isNotEmpty(fileName)) {
-                    oldData.setName(fileName);
-                }
-
-                //拼接填报人信息
-                String fileUser = userId + "-" + userNmae;
-                if (StringUtils.isNotEmpty(oldData.getFileUserIdAndName())) {
-                    if (!oldData.getFileUserIdAndName().contains(userId.toString())) {
-                        //不包含,拼接
-                        oldData.setFileUserIdAndName(oldData.getFileUserIdAndName() + "," + fileUser);
-                    }
-                } else {
-                    oldData.setFileUserIdAndName(fileUser);
-                }
-
-                oldData.setUpdateTime(new Date());
-                oldData.setUpdateUser(userId);
+                    if (oldData != null) {
+                        //存在记录,修改
+                        if (StringUtils.isNotEmpty(fileName)) {
+                            oldData.setName(fileName);
+                        }
 
-                List<String> linkIds = linkDataList.stream().map(json -> json.getString("id")).distinct().collect(Collectors.toList());
-                if (linkIds.size() > 0) {
-                    oldData.setSjRecordIds(StringUtils.join(linkIds, ","));
-                }
+                        //拼接填报人信息
+                        String fileUser = userId + "-" + userNmae;
+                        if (StringUtils.isNotEmpty(oldData.getFileUserIdAndName())) {
+                            if (!oldData.getFileUserIdAndName().contains(userId.toString())) {
+                                //不包含,拼接
+                                oldData.setFileUserIdAndName(oldData.getFileUserIdAndName() + "," + fileUser);
+                            }
+                        } else {
+                            oldData.setFileUserIdAndName(fileUser);
+                        }
 
-                //修改数据
-                this.baseMapper.updateById(oldData);
-            } else {
-                //新增基础数据
-                InformationQuery newData = new InformationQuery();
-                //设置文件题名
-                newData.setName(fileName);
-                //设置文件类型
-                newData.setCategory(contractTree.getNodeType());
-                //项目ID
-                newData.setProjectId(Long.parseLong(contractTree.getProjectId()));
-                //合同段ID
-                newData.setContractId(Long.parseLong(contractTree.getContractId()));
-                //施工资料还是质检资料
-                newData.setClassify(classify);
-                //节点ID
-                newData.setWbsId(contractTree.getPKeyId());
-
-                //1资料填报,2试验,3首件
-                newData.setType((contractTree.getIsExpernode() == null || contractTree.getIsExpernode() <= 0) ? 1 : 2);
-
-                //流程状态,默认未上报
-                newData.setStatus(0);
-                //填报人ID及姓名
-                newData.setFileUserIdAndName(userId + "-" + userNmae);
-                //数据源类型
-                newData.setSourceType(sourceType);
-                newData.setCreateUser(userId);
-                newData.setCreateTime(new Date());
+                        oldData.setUpdateTime(new Date());
+                        oldData.setUpdateUser(userId);
 
-                List<String> linkIds = linkDataList.stream().map(json -> json.getString("id")).distinct().collect(Collectors.toList());
-                if (linkIds.size() > 0) {
-                    newData.setSjRecordIds(StringUtils.join(linkIds, ","));
+                        List<String> linkIds = linkDataList.stream().map(json -> json.getString("id")).distinct().collect(Collectors.toList());
+                        if (linkIds.size() > 0) {
+                            oldData.setSjRecordIds(StringUtils.join(linkIds, ","));
+                        }
+                        //修改数据
+                        this.baseMapper.updateById(oldData);
+                    } else {
+                        //新增基础数据
+                        InformationQuery newData = new InformationQuery();
+                        //设置文件题名
+                        newData.setName(fileName);
+                        //设置文件类型
+                        newData.setCategory(contractTree.getNodeType());
+                        //项目ID
+                        newData.setProjectId(Long.parseLong(contractTree.getProjectId()));
+                        //合同段ID
+                        newData.setContractId(Long.parseLong(contractTree.getContractId()));
+                        //施工资料还是质检资料
+                        newData.setClassify(classify);
+                        //节点ID
+                        newData.setWbsId(contractTree.getPKeyId());
+
+                        //1资料填报,2试验,3首件
+                        newData.setType(type);
+
+                        //流程状态,默认未上报
+                        newData.setStatus(0);
+                        //填报人ID及姓名
+                        newData.setFileUserIdAndName(userId + "-" + userNmae);
+                        //数据源类型
+                        newData.setSourceType(sourceType);
+                        newData.setCreateUser(userId);
+                        newData.setCreateTime(new Date());
+
+                        List<String> linkIds = linkDataList.stream().map(json -> json.getString("id")).distinct().collect(Collectors.toList());
+                        if (linkIds.size() > 0) {
+                            newData.setSjRecordIds(StringUtils.join(linkIds, ","));
+                        }
+                        //保存数据
+                        this.baseMapper.insert(newData);
+                    }
+                } finally {
+                    DistributedRedisLock.release("saveOrUpdateInformationQueryData:" + primaryKeyId + ":" + contractTree.getContractId() + ":" + classify + ":" + type);
                 }
-                //保存数据
-                this.baseMapper.insert(newData);
             }
         }
         return null;

+ 1 - 1
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVDataServiceImpl.java

@@ -335,7 +335,7 @@ public class EVDataServiceImpl implements EVDataService {
                     if (taskApp.getSigType() == 2) {
                         this.jdbcTemplate.execute("update u_entrust_info set sample_status=2,status=" + (taskApp.getSigType() + 1) + ",entrust_e_pdf='" + taskApp.getLastFilePdfUrl() + "' where id=(SELECT wbs_id from u_information_query where id='" + taskApp.getFormDataId() + "')");
                     }
-                    updateSql = "update u_information_query set e_visa_pdf_url='" + taskApp.getLastFilePdfUrl() + "',status=" + taskApp.getSigType() + " where id='" + taskApp.getFormDataId() + "'";
+                    updateSql = "update u_information_query set e_visa_pdf_url='" + taskApp.getLastFilePdfUrl() + "',status=" + taskApp.getSigType() + ",business_time='" + taskApp.getPdfDate() + "' where id='" + taskApp.getFormDataId() + "'";
                 }
                 this.jdbcTemplate.execute(updateSql);
                 System.out.println("u_information_query修改语句:"+updateSql);

+ 34 - 8
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/utils/PDFUtils.java

@@ -1,16 +1,17 @@
 package org.springblade.evisa.utils;
 
 import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.text.PDFTextStripper;
 import org.springblade.business.vo.TaskSignInfoVO;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.tool.utils.Func;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
+import java.io.*;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
@@ -23,7 +24,9 @@ public class PDFUtils {
             PDFTextStripper stripper = new PDFTextStripper();
             String text = stripper.getText(document);
             String[] lines = text.split("[ \\n]+");
-            String regex = "^\\d{4}年\\d{2}月\\d{2}日$";
+            String lastDate = getPdfFirstPageLastDate(document);
+            taskApp.setPdfDate(lastDate);
+            Pattern pattern = Pattern.compile("(\\d{4}[年-]\\d{2}[月-]\\d{2}日?)");
 
             for(int k=0;k<lines.length;k++){
                 String textStr = lines[k];
@@ -41,10 +44,11 @@ public class PDFUtils {
                     if (txt.length() >= 15 && Func.isNumeric(txt)||(Func.isNumeric(txt)&&txt.length()==8&&txt.startsWith("123"))) {
                         eVisaConfigList.add(txt);
                     }
-
-                    Pattern pattern = Pattern.compile(regex);
-                    if(pattern.matcher(txt).matches()){
-                        taskApp.setPdfDate(txt);
+                    if (taskApp.getPdfDate() == null || taskApp.getPdfDate().isEmpty()) {
+                        Matcher matcher = pattern.matcher(txt);
+                        if(matcher.matches()){
+                            taskApp.setPdfDate(matcher.group(1));
+                        }
                     }
                 }
 
@@ -123,4 +127,26 @@ public class PDFUtils {
         }
     }
 
+    public static String getPdfFirstPageLastDate(PDDocument document) throws IOException {
+        PDFTextStripper stripper = new PDFTextStripper();
+        stripper.setStartPage(1);
+        stripper.setEndPage(1);
+        String text = stripper.getText(document);
+        Pattern pattern = Pattern.compile("(\\d{4}[-年.]\r?\n?\\d{2}[-月.]\r?\n?\\d{2}日?)");
+        Matcher matcher = pattern.matcher(text);
+        List<String> dates = new ArrayList<>();
+        while (matcher.find()) {
+            dates.add(matcher.group(1));
+        }
+        if (!dates.isEmpty()) {
+            Optional<String> max = dates.stream().map(item -> {
+                String replace = item.replace("年", "-").replace("月", "-").replace("日", "").replaceAll("\\.", "-");
+                return replace.replaceAll("[\r\n]",  "");
+            }).max(String::compareTo);
+            return max.get();
+        } else {
+            return "";
+        }
+    }
+
 }

+ 8 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -2364,10 +2364,11 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         }
 
         //附件
-        TableFile tableFile1 = tableFileService.getBaseMapper().selectList(Wrappers.<TableFile>query().lambda().eq(TableFile::getTabId, pkeyId + "").eq(TableFile::getType, 1)).stream().findAny().orElse(null);
-        if (tableFile1 != null) {
-            tableFileService.update(Wrappers.<TableFile>lambdaUpdate().set(TableFile::getDomainPdfUrl, bladeFile.getLink()).eq(TableFile::getId, tableFile1.getId()));
-        } else {
+//        TableFile tableFile1 = tableFileService.getBaseMapper().selectList(Wrappers.<TableFile>query().lambda().eq(TableFile::getTabId, pkeyId + "").eq(TableFile::getType, 1)).stream().findAny().orElse(null);
+//        if (tableFile1 != null) {
+//            tableFileService.update(Wrappers.<TableFile>lambdaUpdate().set(TableFile::getDomainPdfUrl, bladeFile.getLink()).eq(TableFile::getId, tableFile1.getId()));
+//        } else
+        {
             TableFile tableFile = new TableFile();
             String fileExtension = FileUtil.getFileExtension(wbsTreeContract.getFullName() + ".pdf");
             tableFile.setTabId(pkeyId + "");
@@ -2377,7 +2378,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             tableFile.setIsDeleted(0);
             tableFile.setExtension(fileExtension);
             tableFile.setDomainPdfUrl(bladeFile.getLink());
-            tableFileService.saveOrUpdate(tableFile);
+            tableFileService.remove(Wrappers.<TableFile>query().lambda().eq(TableFile::getTabId, pkeyId + "").eq(TableFile::getType, 1));
+            tableFileService.save(tableFile);
         }
 
         List<TableFile> tableFileList = tableFileService.getBaseMapper().selectList(Wrappers.<TableFile>query().lambda().eq(TableFile::getTabId, pkeyId + "").eq(TableFile::getIsDeleted, 0));
@@ -2443,7 +2445,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             }
         }
 
-        String listPdf = file_path + "/pdf/" + nodeId + ".pdf";
+        String listPdf = file_path + "/pdf/" + nodeId + "_" + classify + ".pdf";
         File tabpdf2 = ResourceUtil.getFile(listPdf);
         if (tabpdf2.exists()) {
             tabpdf2.delete();

+ 26 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -684,7 +684,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                         return;
                     }
                     List<Map<String, Object>> tableNamePkIdsMaps = this.jdbcTemplate.queryForList(
-                            "select c.init_table_name tableName,c.p_key_id pkId,c.html_url url from" +
+                            "select c.init_table_name tableName,c.p_key_id pkId,c.html_url url,c.p_id from" +
                                     " (select id from m_wbs_tree_contract where contract_id=" + currentNode.getContractId() + " and is_deleted=0 and node_type=6 and tree_code like '" + parent.getTreeCode() + "%' ORDER BY sort) k" +
                                     " join m_wbs_tree_contract c on c.parent_id = k.id " +
                                     "where  c.contract_id=" + currentNode.getContractId() + " and c.is_deleted=0 "
@@ -705,6 +705,31 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 }
                                 List<Map<String, Object>> tableDatas = this.jdbcTemplate.queryForList("select * from " + tn + " where p_key_id in (" + targetIds + ")");
                                 String tmp = elementInfo == null ? "" : StringUtils.handleNull(elementInfo.get("ename"));
+                                // 优先查找当前节点下的元素
+                                if (!tableDatas.isEmpty()) {
+                                    Map<Long, Long> map = new HashMap<>();
+                                    tableNamePkIdsMaps.forEach(m -> {
+                                        if (StringUtils.isEquals(m.get("tableName"), tn)) {
+                                            Object o = m.get("pkId");
+                                            Object o1 = m.get("p_id");
+                                            if(o instanceof Long && currentNode.getPkId().equals(o1)) {
+                                                map.put((Long) o, 1L);
+                                            }
+                                        }
+                                    });
+                                    if (!map.isEmpty()) {
+                                        List<Map<String, Object>> datas = tableDatas.stream().filter(t -> {
+                                            Object pKeyId = t.get("p_key_id");
+                                            if (pKeyId instanceof Long) {
+                                                return map.containsKey(pKeyId);
+                                            }
+                                            return false;
+                                        }).collect(Collectors.toList());
+                                        if (!datas.isEmpty()) {
+                                            tableDatas = datas;
+                                        }
+                                    }
+                                }
                                 fill(tableDatas, removeList, tn, key, tmp, tec);
                             }
                         });

+ 1 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateItemServiceImpl.java

@@ -127,7 +127,7 @@ public class InterimPayCertificateItemServiceImpl extends BaseServiceImpl<Interi
 
     @Override
     public void saveOrUpdateBatchList(List<InterimPayCertificateItem> items,Long reportId) {
-        List<InterimPayCertificateItem> list = baseMapper.selectList(new QueryWrapper<InterimPayCertificateItem>().eq("certificate_id", reportId));
+        List<InterimPayCertificateItem> list = baseMapper.selectList(new QueryWrapper<InterimPayCertificateItem>().eq("certificate_id", reportId).ne("chapter_seq","施工单位送审金额"));
         if(list.size()>0){
             for (InterimPayCertificateItem item : items) {
                 baseMapper.updateById(item);