Browse Source

Merge remote-tracking branch 'origin/master'

qianxb 2 năm trước cách đây
mục cha
commit
11659c8bfb

+ 15 - 6
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1255,10 +1255,7 @@ public class InformationWriteQueryController extends BladeController {
         //首先查询需要复制的节点及其下级所有子节点的信息
         WbsTreeContract needCopyNode = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
         // 获取当前节点的所有子节点
-       String vocational = SnowFlakeUtil.getId()+"";
-        // 插入数据库
-        // informationQueryService.copeNodeData(needCopyNode.getId()+"",vocational);
-        // 修改
+        String vocational = SnowFlakeUtil.getId()+"";
         //新增施工台账
         List<WbsTreeContract>   saveList = new ArrayList<>();
         List<ConstructionLedger> saveLedger = new ArrayList<>();
@@ -1268,6 +1265,7 @@ public class InformationWriteQueryController extends BladeController {
         List<QueryProcessDataVO> nodeTabCols = informationQueryService.getNodeChildTabColsAllByNodeId(needCopyNode.getId() + "", needCopyNode.getContractId());
         // 转化为map
         Map<String, String> nodeTabColsMap = nodeTabCols.stream().collect(Collectors.toMap(QueryProcessDataVO::getQueryType, QueryProcessDataVO::getAncestors, (key1, key2) -> key2));
+        StringBuilder copeSql = new StringBuilder();
 
         if (StringUtils.isNotEmpty(vo.getNeedCopyPrimaryKeyId())) {
             WbsTreeContract parent = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getParentPrimaryKeyId());
@@ -1280,7 +1278,6 @@ public class InformationWriteQueryController extends BladeController {
                 nodeMap.put(node.getId().toString(), node);
             });
 
-            System.out.println("4="+DateUtil.formatDateTime(DateUtil.now()));
             //todo 单份复制
             nodeChildAll.forEach(node -> {
                 WbsTreeContract newData = new WbsTreeContract();
@@ -1331,10 +1328,22 @@ public class InformationWriteQueryController extends BladeController {
                     //生成施工日志
                     this.createLedger(newData, saveLedger, nodeMap, null);
                 }
+
+                // 组织复制值Sql
+                if(nodeTabColsMap!=null && node.getType()==2){
+                    String tableName = newData.getInitTableName();
+                    String col = nodeTabColsMap.get(tableName);
+                    String colVal = nodeTabColsMap.get(tableName);
+                    colVal = colVal.replaceAll("id,p_key_id,","'"+SnowFlakeUtil.getId()+"' as id,'"+newData.getPKeyId()+"' as p_key_id,");
+                    copeSql.append("insert into "+tableName+"  ("+col+") select "+colVal+" from "+tableName+" where p_key_id='"+node.getPKeyId()+"' ;");
+                }
             });
         }
+        //保存节点信息
          R<Boolean> booleanR = this.saveOrCopyNodeTree(saveList, saveLedger, 32, needCopyNode);
-         jdbcTemplate.batchUpdate();
+
+        //复制数据逻辑
+         jdbcTemplate.execute(copeSql.toString());
         return booleanR;
     }
 

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

@@ -2756,7 +2756,7 @@ public class ExcelTabController extends BladeController {
             @ApiImplicitParam(name = "id", value = "记录id-当做groupId", required = true)
     })
     public R<Map<String, Object>> getBussDataInfoListTrial(Long id, Long pkeyId) {
-        List<Map<String, Object>> bussDataInfoTrial = excelTabService.getBussDataInfoTrial(id, pkeyId);
+        List<Map<String, Object>> bussDataInfoTrial = excelTabService.getBussDataInfoTrialRecordSG(id, pkeyId);
         Map<String, Object> map = bussDataInfoTrial.get(0);
         map.remove("group_id");
         return R.data(map);

+ 41 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.controller;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -20,6 +21,7 @@ import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.manager.bean.TableInfo;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
@@ -31,12 +33,15 @@ import org.springblade.manager.service.*;
 import org.springblade.manager.vo.*;
 import org.springblade.manager.wrapper.WbsTreePrivateWrapper;
 import org.springframework.beans.BeanUtils;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 
 import java.io.IOException;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
@@ -54,6 +59,7 @@ public class WbsTreePrivateController extends BladeController {
     private final IProjectInfoService projectInfoService;
     private final IWbsFormElementService wbsFormElementService;
     private final IExcelTabService iExcelTabService;
+    private final JdbcTemplate jdbcTemplate;
 
     /**
      * 保存项目日志划分
@@ -595,7 +601,8 @@ public class WbsTreePrivateController extends BladeController {
     }
 
     /**
-     * 试验-根据所属方查询当前节点表信息
+     * 试验 - 根据所属方查询当前节点表信息
+     * 使用位置:1、客户端试验自检、施工关联试验数据
      *
      * @param primaryKeyId
      * @param type
@@ -606,22 +613,43 @@ public class WbsTreePrivateController extends BladeController {
      */
     @GetMapping("/search-node-tables")
     @ApiOperationSupport(order = 22)
-    @ApiOperation(value = "试验-根据所属方查询当前节点表信息", notes = "传入节点primaryKeyId;所属方type=1施工,=2监理 ;表单类型tableType=1记录表、=2报告单; 合同段id;项目id;isAdd=是否新增;记录id")
+    @ApiOperation(value = "试验-根据所属方查询当前节点表信息", notes = "传入节点primaryKeyId、所属方type=1施工/=2监理、表单类型tableType=1记录表/=2报告单、合同段id、项目id、isAdd=是否新增、试验记录id")
     public R<List<WbsTreePrivateVO4>> searchNodeAllTable(String primaryKeyId, String type, String tableType, String contractId, String projectId, Integer isAdd, Long id) {
         List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateService.searchNodeAllTable(primaryKeyId, type, tableType, contractId, projectId, isAdd, id);
-        List<WbsTreePrivateVO4> list = new ArrayList<>();
-        //数据包装
-        for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
-            WbsTreePrivateVO4 wbsTreePrivateVO4 = BeanUtil.copyProperties(wbsTreePrivate, WbsTreePrivateVO4.class);
-            List<Map<String, Object>> bussDataInfoTrial = iExcelTabService.getBussDataInfoTrial(id, wbsTreePrivate.getPKeyId());
-            if (wbsTreePrivateVO4 != null && bussDataInfoTrial.size() > 0) {
-                wbsTreePrivateVO4.setBussDataInfoTrial(bussDataInfoTrial.get(0));
+        List<WbsTreePrivateVO4> wbsTreePrivateVO4s = BeanUtil.copyProperties(wbsTreePrivates, WbsTreePrivateVO4.class);
+        for (WbsTreePrivateVO4 treePrivate : wbsTreePrivateVO4s) {
+            //新增
+            if ((new Integer(1).equals(isAdd)) && ObjectUtil.isEmpty(id)) {
+                //按钮状态
+                treePrivate.setPdfUrl(null);
+                treePrivate.setIsBussShow(1);
+                treePrivate.setIsTabPdf(1);
+                treePrivate.setTabFileType(1);
             }
-            list.add(wbsTreePrivateVO4);
-        }
-        return R.data(list);
 
-        //return R.data(wbsTreePrivateService.searchNodeAllTable(primaryKeyId, type, tableType, contractId, projectId, isAdd, id));
+            //编辑
+            if (ObjectUtil.isNotEmpty(id)) {
+                //获取当前试验记录信息中表的按钮状态
+                String sql = "select tab_id,is_buss_show,is_tab_pdf,is_tab_file_type from u_trial_self_data_record where record_id = " + id;
+                Map<Long, TrialSelfDataRecord> map = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TrialSelfDataRecord.class)).stream().collect(Collectors.toMap(TrialSelfDataRecord::getTabId, Function.identity()));
+
+                //按钮状态
+                TrialSelfDataRecord record = map.get(treePrivate.getPKeyId());
+                if (record != null) {
+                    treePrivate.setIsBussShow(record.getIsBussShow());
+                    treePrivate.setIsTabPdf(record.getIsTabPdf());
+                    treePrivate.setTabFileType(record.getIsTabFileType());
+                }
+
+                //表单数据
+                List<Map<String, Object>> bussDataInfoTrial = iExcelTabService.getBussDataInfoTrial(id, treePrivate.getPKeyId());
+                if (bussDataInfoTrial != null && bussDataInfoTrial.size() > 0) {
+                    bussDataInfoTrial.get(0).remove("group_id");
+                    treePrivate.setBussDataInfoTrial(bussDataInfoTrial.get(0));
+                }
+            }
+        }
+        return R.data(wbsTreePrivateVO4s);
     }
 
     /**

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java

@@ -126,6 +126,11 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
      */
     List<Map<String, Object>> getBussDataInfoTrial(Long id, Long pkeyId);
 
+    /**
+     * 获取试验用户端 单个表单接口数据 - 关联施工
+     */
+    List<Map<String, Object>> getBussDataInfoTrialRecordSG(Long id, Long pkeyId);
+
     /**
      * 单PDF 生成 - 试验
      */

+ 158 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -92,6 +92,7 @@ import java.net.URL;
 import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -1055,7 +1056,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     public R getBussPdfInfo(Long pkeyId) throws Exception {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
         //String file_path = "/Users/hongchuangyanfa/Desktop/";
-
         WbsTreeContract wbsTreeContract = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, pkeyId));
 
@@ -1425,6 +1425,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         List<Map<String, Object>> list = new ArrayList<>();
         Map<String, Object> reData = new HashMap<>();
         WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                .select(WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl, WbsTreePrivate::getPKeyId)
                 .eq(WbsTreePrivate::getPKeyId, pkeyId));
         if (wbsTreePrivate == null) {
             return list;
@@ -1441,6 +1442,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             return list;
         }
 
+        //实体数据
         String querySql = "select * from " + wbsTreePrivate.getInitTableName() + " where p_key_id=" + pkeyId + " and group_id = " + groupId;
         List<Map<String, Object>> dataIn = jdbcTemplate.queryForList(querySql);
 
@@ -1457,6 +1459,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             Map<String, Object> mysqlData = dataIn.get(0);
             for (String key : mysqlData.keySet()) {
                 String tabVal = mysqlData.get(key) + "";
+
                 // 时间段处理
                 if (StringUtils.isNotEmpty(tabVal) && !tabVal.equals("null")) {
                     if (tabVal.contains("T") && tabVal.contains(".000Z]")) {
@@ -1516,6 +1519,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
         // 获取默认值
         QueryWrapper<TextdictInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("col_key", "sig_role_name");
         queryWrapper.eq("type", 4);
         queryWrapper.eq("tab_id", wbsTreePrivate.getPKeyId());
         final List<TextdictInfo> textDictInfos = textdictInfoService.getBaseMapper().selectList(queryWrapper);
@@ -1540,6 +1544,159 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         return list;
     }
 
+    /**
+     * 试验 获取填报信息 - 施工关联试验数据
+     */
+    @Override
+    public List<Map<String, Object>> getBussDataInfoTrialRecordSG(Long groupId, Long pkeyId) {
+        List<Map<String, Object>> list = new ArrayList<>();
+        Map<String, Object> reData = new HashMap<>();
+        WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                .select(WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl, WbsTreePrivate::getPKeyId, WbsTreePrivate::getInitTableId)
+                .eq(WbsTreePrivate::getPKeyId, pkeyId));
+        if (wbsTreePrivate == null) {
+            return list;
+        }
+        if (wbsTreePrivate.getHtmlUrl() == null) {
+            return list;
+        }
+
+        //表单是否存储在
+        String tabName = wbsTreePrivate.getInitTableName();
+        String isExitSql = "select * from information_schema.TABLES where TABLE_NAME='" + tabName + "'";
+        List<Map<String, Object>> tabList = jdbcTemplate.queryForList(isExitSql);
+        if (tabList.size() <= 0) {
+            return list;
+        }
+
+        //实体数据
+        String querySql = "select * from " + wbsTreePrivate.getInitTableName() + " where p_key_id=" + pkeyId + " and group_id = " + groupId;
+        List<Map<String, Object>> dataIn = jdbcTemplate.queryForList(querySql);
+
+        //对应实体表的对应Key字段的KeyName字段名
+        Map<String, WbsFormElement> elementMap = null;
+        if (StringUtils.isNotEmpty(wbsTreePrivate.getInitTableId())) {
+            String eleSql = "select e_key,e_name from m_wbs_form_element where f_id = " + wbsTreePrivate.getInitTableId();
+            elementMap = jdbcTemplate.query(eleSql, new BeanPropertyRowMapper<>(WbsFormElement.class)).stream().collect(Collectors.toMap(WbsFormElement::getEKey, Function.identity()));
+        }
+
+        // 匹配关联
+        try {
+            File file1 = ResourceUtil.getFile(wbsTreePrivate.getHtmlUrl());
+            String htmlString = IoUtil.readToString(new FileInputStream(file1));
+            Document doc = Jsoup.parse(htmlString);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        }
+
+        if (dataIn.size() >= 1) {
+            Map<String, Object> mysqlData = dataIn.get(0);
+            for (String key : mysqlData.keySet()) {
+                String tabVal = mysqlData.get(key) + "";
+
+                //映射KeyName名称
+                if (elementMap != null && elementMap.size() > 0) {
+                    WbsFormElement wbsFormElement = elementMap.get(key);
+                    if (wbsFormElement != null) {
+
+                        key = wbsFormElement.getEName();
+
+                        if (StringUtils.isNotEmpty(tabVal) && !tabVal.equals("null")) {
+
+                            //处理相同字段名称问题,同一个KeyName,那么拼接value
+                            Object oldValue = reData.get(key);
+                            if (oldValue != null) {
+                                reData.put(key, oldValue + "、" + tabVal);
+                                continue;
+                            }
+
+                            //时间段处理
+                            if (tabVal.contains("T") && tabVal.contains(".000Z]")) {
+                                String[] tabData = tabVal.split("_\\^_");
+
+                                if (reData.containsKey("pickerKey")) {
+                                    String pickerKey = reData.get("pickerKey") + "," + key;
+                                    reData.put("pickerKey", pickerKey);
+                                } else {
+                                    reData.put("pickerKey", key);
+                                }
+
+                                String sql = tabData[0];
+                                sql = sql.replaceAll("\\[", "['");
+                                sql = sql.replaceAll("]", "']");
+                                sql = sql.replaceAll("000Z,", "000Z',");
+                                sql = sql.replaceAll(", 20", ", '20");
+                                if (StringUtils.isNotEmpty(tabData[0])) {
+                                    reData.put(key, sql);
+                                }
+
+                                //时间和字符串合作
+                            } else if (tabVal.contains("T") && tabVal.contains(".000Z")) { //时间
+                                if (tabVal.contains("☆")) {
+                                    String[] mysql = tabVal.split("☆");
+                                    for (String data : mysql) {
+                                        String[] tabData = data.split("_\\^_");
+                                        if (StringUtils.isNotEmpty(tabData[0])) {
+                                            reData.put(key, tabData[0]);
+                                        }
+                                    }
+                                } else {
+                                    String[] tabData = tabVal.split("_\\^_");
+                                    if (StringUtils.isNotEmpty(tabData[0])) {
+                                        reData.put(key, tabData[0]);
+                                    }
+                                }
+                            } else if (tabVal.contains("☆")) {
+                                String[] mysql = tabVal.split("☆");
+                                for (String data : mysql) {
+                                    String[] tabData = data.split("_\\^_");
+                                    if (StringUtils.isNotEmpty(tabData[0])) {
+                                        reData.put(key, tabData[0]);
+                                    }
+                                }
+                            } else if (tabVal.contains("_^_")) {
+                                String[] tabData = tabVal.split("_\\^_");
+                                if (StringUtils.isNotEmpty(tabData[0])) {
+                                    reData.put(key, tabData[0]);
+                                }
+                            } else {
+                                reData.put(key, tabVal);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        // 获取默认值
+        QueryWrapper<TextdictInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("col_key", "sig_role_name");
+        queryWrapper.eq("type", 4);
+        queryWrapper.eq("tab_id", wbsTreePrivate.getPKeyId());
+        final List<TextdictInfo> textDictInfos = textdictInfoService.getBaseMapper().selectList(queryWrapper);
+        if (!textDictInfos.isEmpty()) {
+            for (TextdictInfo textdictInfo : textDictInfos) {
+                if (reData.containsKey(textdictInfo.getColKey())) {
+                    String keyVal = reData.get(textdictInfo.getColKey()) + "";
+                } else {
+                    reData.put(textdictInfo.getColKey() + "", textdictInfo.getSigRoleName());
+                }
+            }
+        }
+
+        // 移除Id 和 p_key_id
+        reData.remove("id");
+        reData.remove("p_key_id");
+        reData.remove("classify");
+        reData.remove("contractId");
+        reData.remove("pkeyId");
+        reData.remove("projectId");
+        list.add(reData);
+
+        return list;
+    }
+
+
     /**
      * 试验 单pdf
      */

+ 2 - 28
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -1697,6 +1697,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     @Override
     public List<WbsTreePrivate> searchNodeAllTable(String primaryKeyId, String tableOwner, String tableType, String contractId, String projectId, Integer isAdd, Long id) {
         WbsTreePrivate wbsTreePrivate = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                .select(WbsTreePrivate::getProjectId, WbsTreePrivate::getWbsId, WbsTreePrivate::getId)
                 .eq(WbsTreePrivate::getPKeyId, primaryKeyId));
         if (wbsTreePrivate == null) {
             return Collections.emptyList();
@@ -1729,34 +1730,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             tableOwnerList = Func.toStrList(tableOwners);
         }
 
-        List<WbsTreePrivate> wbsTreePrivates = baseMapper.selectWbsTreeContractList(roleAndTabOwners, tableType, wbsTreePrivate.getProjectId(), wbsTreePrivate.getWbsId(), wbsTreePrivate.getId(), tableOwnerList);
-
-        if (ObjectUtil.isNotEmpty(id)) { //编辑
-            //获取当前试验记录信息中的表状态
-            String sql = "select tab_id,is_buss_show,is_tab_pdf,is_tab_file_type from u_trial_self_data_record where record_id = " + id;
-            List<TrialSelfDataRecord> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TrialSelfDataRecord.class));
-
-            for (WbsTreePrivate treePrivate : wbsTreePrivates) {
-                for (TrialSelfDataRecord record : query) {
-                    if (treePrivate.getPKeyId().equals(record.getTabId())) {
-                        treePrivate.setIsBussShow(record.getIsBussShow());
-                        treePrivate.setIsTabPdf(record.getIsTabPdf());
-                        treePrivate.setTabFileType(record.getIsTabFileType());
-                    }
-                }
-            }
-            return wbsTreePrivates;
-        }
-
-        if (isAdd == 1 && ObjectUtil.isEmpty(id)) { //新增时处理按钮显示问题
-            for (WbsTreePrivate treePrivate : wbsTreePrivates) {
-                treePrivate.setPdfUrl(null);
-                treePrivate.setIsBussShow(1);
-                treePrivate.setIsTabPdf(1);
-                treePrivate.setTabFileType(1);
-            }
-        }
-        return wbsTreePrivates;
+        return baseMapper.selectWbsTreeContractList(roleAndTabOwners, tableType, wbsTreePrivate.getProjectId(), wbsTreePrivate.getWbsId(), wbsTreePrivate.getId(), tableOwnerList);
     }
 
     @Override