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

Merge branch 'test-merge' of http://219.151.181.73:3000/zhuwei/bladex into test-merge

lvy пре 6 дана
родитељ
комит
382d571921

+ 3 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/TaskBatchMonitorDTO.java

@@ -49,4 +49,7 @@ public class TaskBatchMonitorDTO {
     @ApiModelProperty("完成时间")
     private String finishTime;
 
+    @ApiModelProperty("偏移秒数")
+    private Integer estimatedTimeSeconds;
+
 }

+ 2 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/TaskBatchPage.java

@@ -25,6 +25,8 @@ public class TaskBatchPage {
     private Integer current;
     @ApiModelProperty("数量")
     private Integer size;
+    @ApiModelProperty("偏移时间")
+    private Integer time;
     @ApiModelProperty("数量")
     private List<String> formDataIds;
 

+ 12 - 2
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskBatchMapper.xml

@@ -30,6 +30,7 @@
     </select>
     <select id="selectTaskBatchList" resultType="org.springblade.business.dto.TaskBatchMonitorDTO">
         SELECT
+            a.formDataId,
             b.type,
             d.project_name projectName,
             c.contract_name contractName,
@@ -37,7 +38,11 @@
             a.nick_name userName,
             DATE_FORMAT(a.create_time,'%H:%i') createTime,
             1 signType,
-            b.pdf_url_size pdfUrlSize
+            b.pdf_url_size pdfUrlSize,
+            CASE
+                WHEN b.pdf_url_size/1024 &lt;= 51200 THEN 30 + ${query.time}  -- 0-50M固定30秒
+                ELSE GREATEST(30, CEIL(b.pdf_url_size/52428800) * 30) + ${query.time}
+            END AS estimated_time_seconds
         FROM
             (
                 SELECT
@@ -80,6 +85,7 @@
     </select>
     <select id="selectTaskBatchList2" resultType="org.springblade.business.dto.TaskBatchMonitorDTO">
         SELECT
+            a.formDataId,
             b.type,
             d.project_name projectName,
             c.contract_name contractName,
@@ -87,7 +93,11 @@
             a.nick_name userName,
             DATE_FORMAT(a.create_time,'%H:%i') createTime,
             1 signType,
-            b.pdf_url_size pdfUrlSize
+            b.pdf_url_size pdfUrlSize,
+            CASE
+                WHEN b.pdf_url_size/1024 &lt;= 51200 THEN 30
+                ELSE GREATEST(30, CEIL(b.pdf_url_size/52428800) * 30)
+            END AS estimated_time_seconds
         FROM
             (
                 SELECT

+ 32 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskBatchServiceImpl.java

@@ -95,8 +95,8 @@ public class TaskBatchServiceImpl extends BaseServiceImpl<TaskBatchMapper, TaskB
                         if (StringUtils.isNotEmpty(value)) {
                             taskBatchMonitorDTO.setTaskType(1);
                             //开始时间
-                            DateTime startTime = DateUtil.parse(value, "yyyy-MM-dd HH:MM:ss");
-                            taskBatchMonitorDTO.setStartTime(startTime.toString("HH:MM"));
+                            DateTime startTime = DateUtil.parse(value, "yyyy-MM-dd HH:mm:ss");
+                            taskBatchMonitorDTO.setStartTime(startTime.toString("HH:mm"));
                             //预计完成时间
                             if (taskBatchMonitorDTO.getPdfUrlSize() != null && taskBatchMonitorDTO.getPdfUrlSize() != 0) {
                                 Long pdfUrlSize = taskBatchMonitorDTO.getPdfUrlSize();
@@ -107,6 +107,8 @@ public class TaskBatchServiceImpl extends BaseServiceImpl<TaskBatchMapper, TaskB
 
                                 String s = TimeConverter.secondsToMinutesSeconds(time);
                                 taskBatchMonitorDTO.setFinishTime(s + "(" + dateTime.toString("HH:mm") + ")");
+                            }else{
+                                taskBatchMonitorDTO.setFinishTime("无法估算");
                             }
                             data.add(taskBatchMonitorDTO);
                         }
@@ -145,8 +147,27 @@ public class TaskBatchServiceImpl extends BaseServiceImpl<TaskBatchMapper, TaskB
 
     @Override
     public R<IPage<TaskBatchMonitorDTO>> pageOrder(TaskBatchPage page) {
+        boolean jarRunning = false;
+        try {
+            jarRunning = isJarRunning("blade-e-visa.jar");
+        } catch (Exception e) {
+        }
+        //获取正在处理的任务
+        Integer time = 0;
+        if(jarRunning){
+            R<List<TaskBatchMonitorDTO>> listR = selectTaskBatchList(new TaskBatchPage());
+            List<TaskBatchMonitorDTO> data = listR.getData();
+            if(CollectionUtil.isNotEmpty(data)){
+                List<TaskBatchMonitorDTO> collect = data.stream().filter(f -> f.getEstimatedTimeSeconds() != null).collect(Collectors.toList());
+                TaskBatchMonitorDTO taskBatchMonitorDTO = collect.get(collect.size() - 1);
+                //正在处理的任务最后一个偏移时间
+                time += taskBatchMonitorDTO.getEstimatedTimeSeconds();
+            }
+        }
+
         //初始化查询参数
         page.setTaskType(2);
+        page.setTime(time);
 
         Set<String> keys = redisTemplate.keys("sign-*");
         if (CollectionUtil.isNotEmpty(keys)) {
@@ -157,6 +178,15 @@ public class TaskBatchServiceImpl extends BaseServiceImpl<TaskBatchMapper, TaskB
             page.setFormDataIds(strings);
         }
         IPage<TaskBatchMonitorDTO> taskBatchMonitorDTOIPage = baseMapper.selectTaskBatchList(new Page<>(page.getCurrent(),page.getSize()),page);
+        taskBatchMonitorDTOIPage.getRecords().forEach(f->{
+            if(f.getEstimatedTimeSeconds() == null || page.getTime() == 0){
+                f.setFinishTime("无法估算");
+                return;
+            }
+            DateTime dateTime = DateUtil.offsetSecond(DateUtil.parse(f.getCreateTime()), f.getEstimatedTimeSeconds());
+            String s = TimeConverter.secondsToMinutesSeconds(f.getEstimatedTimeSeconds());
+            f.setFinishTime(s + "(" + dateTime.toString("HH:mm") + ")");
+        });
         return R.data(taskBatchMonitorDTOIPage);
     }
 

+ 2 - 1
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVController.java

@@ -1,5 +1,6 @@
 package org.springblade.evisa.controller;
 
+import cn.hutool.core.date.DateTime;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import io.swagger.annotations.Api;
@@ -98,7 +99,7 @@ public class EVController {
                         }
 
                         if(!aBoolean){
-                            RedisTemplate.opsForValue().set("sign-" + dataInfo.getFormDataId(), "1", 7200, TimeUnit.SECONDS);
+                            RedisTemplate.opsForValue().set("sign-" + dataInfo.getFormDataId(), DateTime.now().toString(), 7200, TimeUnit.SECONDS);
                             CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
                                 try {
                                     /*===============执行批量任务===============*/

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

@@ -428,10 +428,42 @@ public class EVDataServiceImpl implements EVDataService {
                 taskApp.setPdfDataType(type);
                 if (StringUtils.isNotEmpty(pdfTrialUrlPosition) || StringUtils.isNotEmpty(pdfTrialUrl) || StringUtils.isNotEmpty(eVisaPdfUrl) || StringUtils.isNotEmpty(pdfUrl)) {
                     if ("1".equals(type)) {
-                        String approvalPdf = eVisaPdfUrl.length() >= 10 ? eVisaPdfUrl : pdfUrl;
+                       /* String approvalPdf = eVisaPdfUrl.length() >= 10 ? eVisaPdfUrl : pdfUrl;
                         approvalPdf = pdfTrialUrl.length() >= 10 ? pdfTrialUrl : approvalPdf;
                         approvalPdf = pdfTrialUrlPosition.length() >= 10 ? pdfTrialUrlPosition : approvalPdf;
-                        taskApp.setSignPdfUrl(getHppsToHttp(approvalPdf));
+                        taskApp.setSignPdfUrl(getHppsToHttp(approvalPdf));*/
+                        String nodeDdfUrl = map.get("node_pdf_url") + "";
+                        if(pdfTrialUrlPosition!=null && pdfTrialUrlPosition.length()>=10){
+                            taskApp.setSignPdfUrl(getHppsToHttp(pdfTrialUrlPosition));
+                        }else if(pdfTrialUrl!=null && pdfTrialUrl.length()>=10 ){
+                            if(eVisaPdfUrl!=null && eVisaPdfUrl.length()>=10){
+                                taskApp.setSignPdfUrl(getHppsToHttp(eVisaPdfUrl));
+                            }else{
+                                if(nodeDdfUrl!=null && nodeDdfUrl.length()>=10){
+                                    taskApp.setSignPdfUrl(getHppsToHttp(nodeDdfUrl));
+                                }else{
+                                    List<String> pdfList = new ArrayList<>();
+                                    pdfList.add(pdfUrl);
+                                    pdfList.add(pdfTrialUrl);
+                                    String file_path = FileUtils.getSysLocalFileUrl();
+                                    Long id = SnowFlakeUtil.getId();
+                                    String listPdf = file_path + "/pdf/" +id + ".pdf";
+                                    File pdf2 = ResourceUtil.getFile(listPdf);
+                                    if (pdf2.exists()) {
+                                        pdf2.delete();
+                                    }
+                                    FileUtils.mergePdfPublicMethods(pdfList, file_path);
+                                    BladeFile bladeFile = newIOSSClient.uploadFile(id+".pdf", file_path);
+                                    if (bladeFile != null) {
+                                        taskApp.setSignPdfUrl(getHppsToHttp(bladeFile.getLink()));
+                                    }
+                                }
+                            }
+                        }else if (eVisaPdfUrl!=null && eVisaPdfUrl.length()>=10){
+                            taskApp.setSignPdfUrl(getHppsToHttp(eVisaPdfUrl));
+                        }else if (pdfUrl!=null && pdfUrl.length()>=10){
+                            taskApp.setSignPdfUrl(getHppsToHttp(pdfUrl));
+                        }
                     } else if ("2".equals(type)) {
                         if (StringUtils.isNotEmpty(eVisaPdfUrl) || StringUtils.isNotEmpty(pdfUrl)) {
                             //试验原始pdf

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

@@ -94,7 +94,6 @@ import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.stream.Collectors;
-
 @Service
 @AllArgsConstructor
 public class EVisaServiceImpl implements EVisaService {

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java

@@ -670,7 +670,7 @@ public class TextdictInfoController extends BladeController {
                 element.removeAttr(":readonly");
             }
         }
-        Elements tryInfo = doc.select("td[dqid]");
+        Elements tryInfo = doc.getElementsByAttribute("dqid");// doc.select("td[dqid]");
         if (tryInfo != null && !tryInfo.isEmpty()) {
             for (Element element : tryInfo) {
                 element.removeAttr("dqid");

+ 25 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/SubTable.java

@@ -2,6 +2,7 @@ package org.springblade.manager.formula.impl;
 
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.StringUtils;
+import io.swagger.models.auth.In;
 import lombok.Data;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
@@ -34,6 +35,7 @@ public class SubTable {
     private LinkedHashMap<String, Item> original = new LinkedHashMap<>();
     /**检验单检查项目元素,用来排序*/
     private List<FormData> mainList = new ArrayList<>();
+    private List<FormData> inspectionListInfo = new ArrayList<>();
     /**项目名称*/
     private FormData itemName;
     /**设计值*/
@@ -42,7 +44,7 @@ public class SubTable {
     private FormData data;
 
     private TableElementConverter tec;
-
+    private List<Long> delTabList = new ArrayList<>();
 
     public SubTable() {
     }
@@ -93,8 +95,10 @@ public class SubTable {
 
     /*解析项目信息*/
     public void put(List<FormData> inspectionList) {
+
         /*根据行号排序*/
         inspectionList.sort(Comparator.comparingInt(e->e.getCoordsList().get(0).getY()));
+        inspectionListInfo = inspectionList;
         /*检验单、评定表不能超过一页,多余的需要删除并把检测项数据写人附表*/
         /*检验单或者评定表存的超页数据汇总到附表对象*/
           for(FormData fd:inspectionList) {
@@ -107,7 +111,9 @@ public class SubTable {
                   Optional<FormData> designFdOp = tec.formDataMap.values().stream().filter(o -> o.getTableName().equals(fd.getTableName()) && !o.equals(fd) && fd.getMaxRow().equals(o.getMaxRow()) && o.getEName().contains("设计")).findAny();
                   designFdOp.ifPresent(formData -> item.setDesign(formData.getValues().stream().map(ElementData::stringValue).filter(StringUtils::isNotEmpty).collect(Collectors.toList())));
                   item.setData(FormulaUtils.setScale(null, overList).stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).collect(Collectors.toList()));
+                  item.setColFullName(fd.getEName());
                   group.put(item.getName(), item);
+
              }
           }
     }
@@ -118,6 +124,7 @@ public class SubTable {
         if(!checked()){
             return;
         }
+
         /*获取项目数据*/
         List<Item> itemList =getPutOutList();
         if (itemList.size() > 0) {
@@ -174,6 +181,9 @@ public class SubTable {
             FormulaUtils.write(data, dataList, true);
             itemName.setUpdate(1);
             data.setUpdate(1);
+        }else{
+            List<NodeTable> mainFBTable = tec.getTableAll().stream().filter(e -> (e.getTableType().equals(1) || e.getTableType().equals(5)) && e.getNodeName().contains("附表") && tec.getCurrentNode().getNodeType() > 3).collect(Collectors.toList());
+            delTabList = mainFBTable.stream().map(e -> e.getPKeyId()).collect(Collectors.toList());
         }
     }
 
@@ -195,11 +205,18 @@ public class SubTable {
     }
     /*用原有数据初始化*/
     private void initOriginal(){
+        Map<String, String> keyMap = new HashMap<>();
         List<String> itemName = this.itemName.getValues().stream().map(ElementData::stringValue).collect(Collectors.toList());
         List<String> designs=null;
         if(this.design!=null) {
              designs = this.design.getValues().stream().map(ElementData::stringValue).collect(Collectors.toList());
         }
+        for(FormData item:this.mainList){
+            String key = FormulaUtils.parseItemName(item.getEName()).trim();
+            keyMap.put(key, "1");
+        }
+
+        // 计算元素是否需要覆盖
         List<Object> data = this.data.getRawValue();
         String name = itemName.get(0);
         if(StringUtils.isNotEmpty(name)) {
@@ -215,13 +232,17 @@ public class SubTable {
                             item.setDesign(designs.subList(head, i).stream().filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList()));
                         }
                         item.setData(new ArrayList<>(data.subList(head*15,  i*ROW_SIZE)));
-                        original.put(name,item);
+                        if(!(inspectionListInfo.size()==0 && keyMap.containsKey(name)) ){
+                            original.put(name,item);
+                        }
                         head = i;
                         name = x;
                     }else{
                         Item item = original.get(name);
                         item.getData().addAll(new ArrayList<>(data.subList(head*15,  i*ROW_SIZE)));
-                        original.put(name,item);
+                        if(!(inspectionListInfo.size()==0 && keyMap.containsKey(name)) ){
+                            original.put(name,item);
+                        }
                         head = i;
                         name = x;
                     }
@@ -260,6 +281,7 @@ public class SubTable {
     public static class Item{
         /*项目的顺序要根据检验单上的自上到下的顺序,相同项目名需要合并,如果存在不同设计值则连续显示;空白行要去除*/
         private String name;
+        private String colFullName; //列全名
         private List<String>design;
         private List<Object> data;
         public Item(String name) {

+ 29 - 85
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -1768,7 +1768,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         }else{*///}
 
                         jdbcTemplate.execute(delSql);
-                        jdbcTemplate.execute(sqlInfo);
+                        jdbcTemplate.execute(sqlInfo.replace("\\","\\\\"));
                         jdbcTemplate.execute(sb.toString());
 
                         transactionManager1.commit(transactionStatus);
@@ -1856,7 +1856,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     for (WbsFormElement element : elements) {
                         if(bh.containsKey(element.getEName())){
                             dataMap2.remove(element.getEKey());
-                            break;
                         }
                     }
                     return dataMap2;
@@ -5757,90 +5756,35 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         }
                     }
                 }
-            }
-        }
-        // 组装电签设置
-        QueryWrapper<TextdictInfo> queryWrapper = new QueryWrapper<>();
-        queryWrapper.select("col_key", "id");
-        queryWrapper.in("type", 2, 6);
-        queryWrapper.eq("tab_id", wbsTreePrivate.getPKeyId());
-        List<TextdictInfo> textdictInfos = textdictInfoService.getBaseMapper().selectList(queryWrapper);
-        String dqSql = "select e_key,GROUP_CONCAT(DISTINCT concat('*✹',id)) ids from u_sign_key_role_info where tab_en_name='" + wbsTreePrivate.getInitTableName() + "' GROUP BY e_key";
-        List<Map<String, Object>> mapList = jdbcTemplate.queryForList(dqSql);
-        if(!mapList.isEmpty()){
-            for(Map<String, Object> map : mapList) {
-                Elements elementsBy = table.getElementsByAttributeValueStarting("keyname", map.get("e_key") + "__");
-                if(elementsBy!=null && !elementsBy.isEmpty()){
-                    String ids = map.get("ids").toString();
-                    ids = ids.replace(",","");
-                    String[] split = ids.split("\\*✹");
-                    for(Element element : elementsBy){
-                        for (String s : split) {
-                            if (s.isEmpty()) {
-                                continue;
-                            }
-                            try {
-                                TextdictInfo info = new TextdictInfo();
-                                info.setColKey(element.attr("keyname"));
-                                info.setId(Long.parseLong(s));
-                                info.setType(-1);
-                                textdictInfos.add(info);
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        if (textdictInfos != null && !textdictInfos.isEmpty()) {
-            for (TextdictInfo e : textdictInfos) {
-                String key = e.getColKey();
-                String[] keys = key.split("__");
-                String[] trtd = keys[1].split("_");
-                if (Integer.parseInt(trtd[0]) < trs.size()) {
-                    Element ytzData = trs.get(Integer.parseInt(trtd[0]));
-                    if (ytzData != null) {
-                        Elements tdsx = ytzData.select("td");
-                        if (Integer.parseInt(trtd[1]) < tdsx.size()) {
-                            Element data = ytzData.select("td").get(Integer.parseInt(trtd[1]));
-                            if (data.html().contains("el-tooltip")) {
-                                data = data.children().get(0);
-                            }
 
-                            int x1 = Integer.parseInt(data.children().get(0).attr("x1"));
-                            if (x1 == 0) {
-                                x1 = 1;
-                            }
-                            int y1 = Integer.parseInt(data.children().get(0).attr("y1"));
-
-                            Row row = sheet.getRow(y1 - 1);
-                            if (row != null) {
-                                Cell cell = sheet.getRow(y1 - 1).getCell(x1 - 1);
-                                if (cell != null) {
-                                    short fontIndex = cell.getCellStyle().getFontIndex();
-                                    Font oldfontAt = workbook.getFontAt(fontIndex);
-
-                                    Font redFont = workbook.createFont();
-                                    redFont.setColor(IndexedColors.WHITE.getIndex()); //设置字体颜色
-                                    redFont.setFontHeightInPoints(Short.valueOf("1"));//设置字体大小
-                                    redFont.setFontName(oldfontAt.getFontName());//设置字体
-
-                                    CellStyle newStyle = workbook.createCellStyle(); //创建单元格样式
-                                    newStyle.cloneStyleFrom(cell.getCellStyle());
-                                    newStyle.setFont(redFont);
-                                    cell.setCellStyle(newStyle);
-                                    String id = e.getId() + "";
-                                    if (e.getType() != null && e.getType() == -1) {
-                                        id = "✹" + id;
-                                    }
-                                    if (cell.getCellTypeEnum() == CellType.STRING && StringUtil.hasText(cell.getStringCellValue())) {
-                                        id = cell.getStringCellValue() + "*" + id;
-                                    }
-                                    cell.setCellValue(id);
-                                } else {
-                                    ObjectUtils.isNotEmpty(cell);
-                                }
+                // 组装电签设置
+                Elements dqids = table.getElementsByAttribute("dqid");
+                for (Element element : dqids) {
+                    String dqid = element.attr("dqid");
+                    Elements x11 = element.getElementsByAttribute("x1");
+                    if (x11 != null && x11.size() >= 1) {
+                        Element element1 = x11.get(x11.size() - 1);
+                        int x1 = Func.toInt(element1.attr("x1"));
+                        int y1 = Func.toInt(element1.attr("y1"));
+
+                        Row row = sheet.getRow(y1 - 1);
+                        if (row != null) {
+                            Cell cell = row.getCell(x1 - 1);
+                            if (cell != null || ObjectUtils.isNotEmpty(cell)) {
+                                short fontIndex = cell.getCellStyle().getFontIndex();
+                                Font oldfontAt = workbook.getFontAt(fontIndex);
+                                Font redFont = workbook.createFont();
+                                redFont.setColor(IndexedColors.WHITE.getIndex()); //设置字体颜色
+                                redFont.setFontHeightInPoints(Short.valueOf("1"));//设置字体大小
+                                redFont.setFontName(oldfontAt.getFontName());//设置字体
+                                String CellValue = cell.getStringCellValue().trim();
+
+                                CellStyle newStyle = workbook.createCellStyle(); //创建单元格样式
+                                newStyle.cloneStyleFrom(cell.getCellStyle());
+                                newStyle.setFont(redFont);
+                                newStyle.setShrinkToFit(true);
+                                cell.setCellStyle(newStyle);
+                                cell.setCellValue(dqid);
                             }
                         }
                     }

Разлика између датотеке није приказан због своје велике величине
+ 228 - 199
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java


+ 68 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -12,6 +12,7 @@ import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.common.utils.SystemUtils;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -33,9 +34,11 @@ import org.springblade.manager.vo.WbsFormElementVO;
 import org.springblade.manager.vo.WbsFormElementVO2;
 import org.springblade.manager.vo.WbsNodeTableVO;
 import org.springblade.system.cache.ParamCache;
+import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.ResultSetExtractor;
 import org.springframework.jdbc.core.SingleColumnRowMapper;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -416,6 +419,71 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
         return R.success("操作成功");
     }
 
+    /**
+     * 刷新html中元素对应的标签值
+     * 需要m_wbs_form_element_rebrush表
+     */
+    @Scheduled(fixedDelay = 60000)
+    public void test(){
+        if (SystemUtils.isWindows() || SystemUtils.isMacOs()) {
+            return;
+        }
+        //查询需要重刷的数据
+        String sql="select * from m_wbs_form_element_rebrush where is_brush=0 limit 200";
+        List<Map<String,Object>> rebushList = null;
+        try {
+            rebushList = jdbcTemplate.queryForList(sql);
+        } catch (DataAccessException e) {
+            return;
+        }
+        if(CollectionUtil.isEmpty(rebushList)){
+            return;
+        }
+        rebushList.forEach(f->{
+            //当前元素表下所有元素信息
+            List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda().eq(WbsFormElement::getFId, f.get("init_table_id")));
+            if(CollectionUtil.isNotEmpty(wbsFormElements)){
+                String sqlHtml="select DISTINCT html_url from m_wbs_tree_private where init_table_name='"+f.get("init_table_name")+"' and is_deleted=0 and html_url is not null";
+                List<String> htmlurls = jdbcTemplate.query(sqlHtml, new SingleColumnRowMapper<>(String.class));
+                if(!htmlurls.isEmpty()){
+                    for (String htmlurl : htmlurls) {
+                        InputStream inputStream = null;
+                        try {
+                            inputStream = FileUtils.getInputStreamByUrl(htmlurl);
+                        } catch (Exception e) {}
+                        if(inputStream==null){
+                            continue;
+                        }
+                        String htmlString = IoUtil.readToString(inputStream);
+                        Document doc = Jsoup.parse(htmlString);
+                        for (WbsFormElement wbsFormElement : wbsFormElements) {
+                            Elements elements = doc.select("[keyname^=" + wbsFormElement.getEKey() + "__]");;
+                            for (Element element : elements) {
+                                String attr = element.attr("placeholder");
+                                if(!wbsFormElement.getEName().equals(attr)){
+                                    element.attr("placeholder", wbsFormElement.getEName());
+                                }
+                            }
+                        }
+                        try {
+                            File writefile = new File(htmlurl);
+                            FileUtil.writeToFile(writefile, doc.html(), Boolean.parseBoolean("UTF-8"));
+                        }catch (Exception e){
+                            System.out.println("修改html文件异常:"+ htmlurl);
+                        }finally {
+                            try {
+                                inputStream.close();
+                            } catch (IOException e) {}
+                        }
+
+                    }
+                }
+            }
+            jdbcTemplate.execute("update m_wbs_form_element_rebrush set is_brush = 1 where init_table_id = " + f.get("init_table_id"));
+        });
+    }
+
+
     @Override
     public List<WbsFormElementDTO2> findWbsTreeTableSameLevel(String parentId) {
         return baseMapper.selectWbsTreeTableListByParentId(parentId);

Неке датотеке нису приказане због велике количине промена