Просмотр исходного кода

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex

huangtf 2 лет назад
Родитель
Сommit
71741a4d3c
26 измененных файлов с 490 добавлено и 186 удалено
  1. 2 2
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/TrialSelfInspectionRecordDTO.java
  2. 0 23
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormulaOption.java
  3. 43 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormulaOptionVo.java
  4. 27 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/FormulaOption.java
  5. 1 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClient.java
  6. 2 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsNodeTableVO.java
  7. 7 7
      blade-service/blade-business/src/main/java/org/springblade/business/controller/ImageClassificationFileController.java
  8. 35 18
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  9. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  10. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialDetectionController.java
  11. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/TrialSelfInspectionRecordMapper.xml
  12. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialSelfInspectionRecordService.java
  13. 169 61
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java
  14. 4 2
      blade-service/blade-business/src/main/java/org/springblade/business/utils/FileUtils.java
  15. 24 28
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java
  16. 4 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TableFileController.java
  17. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  18. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java
  19. 10 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/FormulaOptionMapper.java
  20. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  21. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java
  22. 14 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaOptionService.java
  23. 3 25
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  24. 73 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaOptionServiceImpl.java
  25. 59 9
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  26. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

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

@@ -14,8 +14,8 @@ public class TrialSelfInspectionRecordDTO extends TrialSelfInspectionRecord {
     @ApiModelProperty("样品信息ids")
     private String sampleIds;
 
-    @ApiModelProperty(value = "表类型 1=记录表 2=报告单")
-    private Integer tableType;
+    @ApiModelProperty(value = "表类型 1=记录表 2=报告单 ,字符串拼接")
+    private String tableType;
 
     @ApiModelProperty(value = "引用设备仪器ids")
     private String deviceUseIds;

+ 0 - 23
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormulaOption.java

@@ -1,23 +0,0 @@
-package org.springblade.manager.dto;
-
-import lombok.Data;
-
-/**
- * @author yangyj
- * @Date 2023/3/1 17:35
- * @description TODO
- */
-@Data
-public class FormulaOption {
-    private Long id;
-    private Long parentId;
-    private String ekey;
-    private Long contractId;
-    private String value;
-    private Long pKeyId;
-    private Integer scope;
-
-    public String toSql(){
-        return ","+parentId+",'"+ekey+"',"+contractId+",'"+value+"',"+pKeyId+","+scope;
-    }
-}

+ 43 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormulaOptionVo.java

@@ -0,0 +1,43 @@
+package org.springblade.manager.dto;
+
+import lombok.Data;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.entity.FormulaOption;
+
+/**
+ * @author yangyj
+ * @Date 2023/3/1 17:35
+ * @description TODO
+ */
+@Data
+public class FormulaOptionVo {
+    private Long id;
+    private Long parentId;
+    private String key;
+    private Long contractId;
+    private String value;
+    private Long pKeyId;
+    private Integer scope;
+    public boolean saveChecked(){
+        if( Func.isNotBlank(value)&&contractId!=null&&parentId!=null&&pKeyId!=null&&key!=null&&scope!=null){
+            if(scope==0){
+                /*scope==0是元素范围,1是单元格范围*/
+                this.key=key.replaceAll("__[\\d_]+","");
+            }
+            return true;
+        }
+        return false;
+    }
+    public FormulaOption toFo(){
+        FormulaOption   formulaOption=new FormulaOption();
+        formulaOption.setParentId(this.parentId);
+        formulaOption.setContractId(this.contractId);
+        return formulaOption;
+    }
+    public boolean isElementScope(){
+        return this.scope==0;
+    }
+    public boolean isCellScope(){
+        return this.scope==1;
+    }
+}

+ 27 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/FormulaOption.java

@@ -0,0 +1,27 @@
+package org.springblade.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author yangyj
+ * @Date 2023/3/6 9:17
+ * @description TODO
+ */
+@Data
+@TableName("m_formula")
+public class FormulaOption {
+    @ApiModelProperty("主键id")
+    @TableId(
+            value = "id",
+            type = IdType.ASSIGN_ID
+    )
+    private Long id;
+    private Long parentId;
+    private Long contractId;
+    private String val;
+}

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClient.java

@@ -24,7 +24,7 @@ public interface ExcelTabClient {
     String saveTabData(@RequestParam Integer isBatchSave,
                        @RequestBody JSONObject dataInfo,
                        @RequestParam Integer type,
-                       @RequestParam Integer tableType,
+                       @RequestParam String tableType,
                        @RequestParam Long id,
                        @RequestParam String tabIds) throws Exception;
 

+ 2 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsNodeTableVO.java

@@ -89,4 +89,6 @@ public class WbsNodeTableVO implements Serializable {
      */
     private String fillRate;
 
+    private String htmlUrl;
+
 }

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

@@ -163,8 +163,8 @@ public class ImageClassificationFileController extends BladeController {
                     //需要删除的本地文件集合
                     List<String> removeList = new ArrayList<>();
 
-                    // 压缩到小于指定文件大小500kb
-                    double targetSize = 500 * 1024;
+                    //压缩到小于指定文件大小100kb
+                    //double targetSize = 100 * 1024;
 
                     for (ImageClassificationFile file : fileResult) {
                         //获取图片文件流
@@ -204,16 +204,16 @@ public class ImageClassificationFileController extends BladeController {
 
                                             //获取文件流
                                             byte[] bytes = CommonUtil.InputStreamToBytes(CommonUtil.getOSSInputStream(urls.get(i)));
-                                            byte[] a = new byte[(int) targetSize];
+
                                             //压缩文件大小
-                                            while (bytes.length > targetSize) {
+                                            /*while (bytes.length > targetSize) {
                                                 float reduceMultiple = 0.5f;
                                                 bytes = FileUtils.resizeImage(bytes, reduceMultiple);
-                                                a = bytes;
-                                            }
+                                            }*/
+                                            bytes = FileUtils.resizeImage(bytes, 0f);
 
                                             //创建图片
-                                            drawing.createPicture(anchor, workbook.addPicture(a, Workbook.PICTURE_TYPE_JPEG));
+                                            drawing.createPicture(anchor, workbook.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG));
                                             //图片定位
                                             FileUtils.imageOrientation(sheet, anchor, i == 1 ? new DataVO(1, 28) : new DataVO(0, 0));
 

+ 35 - 18
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -363,7 +363,7 @@ public class InformationWriteQueryController extends BladeController {
             //获取数据源节点
             CopyContractTreeNodeVO.CopyBatch copyBatchResource = batchPathList.stream().filter(f -> f.getPrimaryKeyId().equals(wbsTreeContract.getPKeyId().toString())).findAny().orElse(null);
             if (copyBatchResource != null) {
-                throw new ServiceException("请选择除【" + wbsTreeContract.getNodeName() + "】源节点之外的节点进行复制");
+                return R.fail("请选择除【" + wbsTreeContract.getNodeName() + "】源节点之外的节点进行复制");
             }
 
             String tabOwner;
@@ -388,17 +388,27 @@ public class InformationWriteQueryController extends BladeController {
                 //获取源数据
                 Map<String, List<List<Map<String, Object>>>> tableBusinessDataMap = new HashMap<>();
                 for (WbsTreeContract treeContract : tableList) {
-                    List<Map<String, Object>> tableBusinessData = this.jdbcTemplate.queryForList("select * from " + treeContract.getInitTableName() + " where p_key_id = " + treeContract.getPKeyId());
-                    if (tableBusinessData.size() > 0) {
-                        //设置参数
-                        List<List<Map<String, Object>>> list;
-                        if (tableBusinessDataMap.containsKey(treeContract.getId().toString())) {
-                            list = tableBusinessDataMap.get(treeContract.getId().toString());
-                        } else {
-                            list = new ArrayList<>();
+                    if (StringUtils.isNotEmpty(treeContract.getInitTableName())) {
+                        //判断表是否存在
+                        String isExitSql = "select * from information_schema.TABLES where TABLE_NAME='" + treeContract.getInitTableName() + "'";
+                        List<Map<String, Object>> tabList = this.jdbcTemplate.queryForList(isExitSql);
+                        if (tabList.size() == 0) {
+                            continue; //未找到实体表跳过
+                        }
+
+                        String sql = "select * from " + treeContract.getInitTableName() + " where p_key_id = " + treeContract.getPKeyId();
+                        List<Map<String, Object>> tableBusinessData = this.jdbcTemplate.queryForList(sql);
+                        if (tableBusinessData.size() > 0) {
+                            //设置参数
+                            List<List<Map<String, Object>>> list;
+                            if (tableBusinessDataMap.containsKey(treeContract.getId().toString())) {
+                                list = tableBusinessDataMap.get(treeContract.getId().toString());
+                            } else {
+                                list = new ArrayList<>();
+                            }
+                            list.add(tableBusinessData);
+                            tableBusinessDataMap.put(treeContract.getId().toString(), list);
                         }
-                        list.add(tableBusinessData);
-                        tableBusinessDataMap.put(treeContract.getId().toString(), list);
                     }
                 }
 
@@ -495,7 +505,7 @@ public class InformationWriteQueryController extends BladeController {
                         str.add("【" + map.getValue() + "-" + map.getKey() + "】");
                     }
                     String join = StringUtils.join(str, "、");
-                    throw new ServiceException(StringUtil.format("节点{}已上报,无法复制数据,请重新选择", join));
+                    return R.fail(StringUtil.format("节点{}已上报,无法复制数据,请重新选择", join));
                 }
 
                 //删除原本填写的数据,覆盖
@@ -532,8 +542,8 @@ public class InformationWriteQueryController extends BladeController {
                                 //新增源数据附件到复制节点下对应表中
                                 tableFileClient.saveBatchFile(query, next.getPKeyId());
 
-                                //修改复制节点下对应表的按钮状态
-                                String updateStatus = "update m_wbs_tree_contract set tab_file_type = " + sourceDataObj.getTabFileType() + " ,is_tab_pdf = " + sourceDataObj.getIsTabPdf() + " ,pdf_url = '" + sourceDataObj.getPdfUrl() + "' ,is_buss_show = " + sourceDataObj.getIsBussShow() + " where p_key_id = " + next.getPKeyId();
+                                //修改复制节点下对应表的文件上传的按钮状态
+                                String updateStatus = "update m_wbs_tree_contract set tab_file_type = " + sourceDataObj.getTabFileType() + " where p_key_id = " + next.getPKeyId();
                                 jdbcTemplate.execute(updateStatus);
 
                                 iterator.remove();
@@ -542,7 +552,6 @@ public class InformationWriteQueryController extends BladeController {
                     }
                 }
             }
-
             return R.data(true);
         }
 
@@ -1393,7 +1402,7 @@ public class InformationWriteQueryController extends BladeController {
                             newData.setId(oldToNewIdMap.containsKey(node.getId()) ? oldToNewIdMap.get(node.getId()) : SnowFlakeUtil.getId());
 
                             //划分编号
-                            newData.setPartitionCode(StringUtils.isNotEmpty(node.getPartitionCode()) ? node.getPartitionCode() : null);
+                            newData.setPartitionCode(StringUtils.isNotEmpty(copyBatch.getPartitionCode()) ? copyBatch.getPartitionCode() : null);
                         }
                         //设置父节点ID
                         if (vo.getNeedCopyPrimaryKeyId().equals(node.getPKeyId().toString())) {
@@ -1727,10 +1736,18 @@ public class InformationWriteQueryController extends BladeController {
 
         //保存操作记录
         List<String> idArray = JSONArray.parseArray(JSONObject.toJSONString(ids.split(",")), String.class);
-
+        //获取当前节点的所有父节点
+        List<WbsTreeContract> result = new ArrayList<>();
+        result.add(removeNode);
+        this.queryParentNode(removeNode, result);
+        StringBuilder pathName = new StringBuilder();
+        for (int i = 1, l = result.size(); i <= l; i++) {
+            WbsTreeContract node = result.get(result.size() - i);
+            pathName.append("-").append(StringUtils.isNotEmpty(node.getFullName()) ? node.getFullName() : node.getNodeName());
+        }
         JSONObject json = new JSONObject();
         json.put("operationObjIds", idArray);
-        json.put("operationObjName", nodeName);
+        json.put("operationObjName", pathName.substring(1));
         this.operationLogClient.saveUserOperationLog(4, "资料管理", "工序资料", json);
 
         //保存进回收站

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

@@ -560,7 +560,7 @@ public class TaskController extends BladeController {
 	@ApiOperation(value = "完成/审批任务")
 	public R<Boolean> completeApprovalTask(@RequestBody TaskApprovalVO taskApprovalVO) throws FileNotFoundException {
 		//检查当前用户是否存在等待批次
-		System.out.println(AuthUtil.getUserId());
+		//System.out.println(AuthUtil.getUserId());
 		long batchCount = this.taskBatchService.count(Wrappers.<TaskBatch>lambdaQuery().eq(TaskBatch::getCreateUser, AuthUtil.getUserId()));
 
 		if(batchCount > 0){

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

@@ -124,7 +124,7 @@ public class TrialDetectionController extends BladeController {
     @PostMapping("/self/submit")
     @ApiOperationSupport(order = 11)
     @ApiOperation(value = "自检记录新增或修改", notes = "传入TrialSelfInspectionRecordDTO")
-    public R<Object> selfSubmit(@Valid @RequestBody TrialSelfInspectionRecordDTO dto) throws Exception {
+    public R<Object> selfSubmit(@Valid @RequestBody TrialSelfInspectionRecordDTO dto) {
         return R.data(iTrialSelfInspectionRecordService.selfSubmit(dto));
     }
 

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

@@ -64,7 +64,7 @@
     </delete>
 
     <select id="selectAll" resultType="org.springblade.business.entity.TrialSelfInspectionRecord">
-        select * from u_trial_self_inspection_record where node_id = #{nodeId} and contract_id = #{contractId}
+        select record_no,report_no from u_trial_self_inspection_record where node_id = #{nodeId} and contract_id = #{contractId}
     </select>
 
     <select id="selectSelfSampleRecord" resultType="java.lang.String">

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

@@ -15,7 +15,7 @@ public interface ITrialSelfInspectionRecordService extends BaseService<TrialSelf
 
     IPage<TrialSelfInspectionRecordVO> selfPage(IPage<TrialSelfInspectionRecord> page, TrialSelfInspectionRecordPageDTO dto);
 
-    String selfSubmit(TrialSelfInspectionRecordDTO dto) throws Exception;
+    String selfSubmit(TrialSelfInspectionRecordDTO dto) ;
 
     List<TrialSampleInfoVO> selfSampleList(String id);
 

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

@@ -204,11 +204,19 @@ public class TrialSelfInspectionRecordServiceImpl
     public boolean selfCopy(List<Long> ids) {
         List<TrialSelfInspectionRecord> trialSelfInspectionRecords = baseMapper.selectBatchIds(ids);
         for (TrialSelfInspectionRecord trialSelfInspectionRecord : trialSelfInspectionRecords) {
-            TrialSelfInspectionRecordDTO trialSelfInspectionRecordDTO = BeanUtil.copyProperties(trialSelfInspectionRecord, TrialSelfInspectionRecordDTO.class);
-            assert trialSelfInspectionRecordDTO != null;
-            trialSelfInspectionRecordDTO.setId(SnowFlakeUtil.getId()); //主键id
-            this.buildNumber(trialSelfInspectionRecordDTO); //重构编号
-            this.save(trialSelfInspectionRecordDTO); //复制新增
+            TrialSelfInspectionRecordDTO dto = BeanUtil.copyProperties(trialSelfInspectionRecord, TrialSelfInspectionRecordDTO.class);
+            assert dto != null;
+            dto.setId(SnowFlakeUtil.getId());
+            if (StringUtils.isNotEmpty(dto.getRecordNo())) {
+                dto.setTableType("1");
+            } else if (StringUtils.isNotEmpty(dto.getReportNo())) {
+                dto.setTableType("2");
+            } else if (StringUtils.isNotEmpty(dto.getReportNo()) && StringUtils.isNotEmpty(dto.getRecordNo())) {
+                dto.setTableType("1,2");
+            }
+            //重构编号
+            this.buildNumber(dto);
+            this.save(dto);
         }
         return true;
     }
@@ -642,8 +650,8 @@ public class TrialSelfInspectionRecordServiceImpl
     }
 
     @Override
-    public String selfSubmit(TrialSelfInspectionRecordDTO dto) throws Exception {
-        if (ObjectUtil.isEmpty(dto.getId())) {
+    public String selfSubmit(TrialSelfInspectionRecordDTO dto) {
+        if (ObjectUtil.isEmpty(dto.getId()) && StringUtils.isNotEmpty(dto.getTableType())) {
             //构建记录表编号、报告单编号
             this.buildNumber(dto);
 
@@ -667,9 +675,17 @@ public class TrialSelfInspectionRecordServiceImpl
             //获取当前最新的试验记录信息
             TrialSelfInspectionRecord obj = baseMapper.selectById(dto.getId());
 
+            //如果新增时不是两种类型表都填报过,那么有一项编号为Null,所以编辑时生成记录表编号或报告单编号
+            if (StringUtils.isEmpty(obj.getRecordNo()) && dto.getTableType().contains("1")) {
+                this.buildNumber(dto);
+                this.saveOrUpdate(dto);
+            } else if (StringUtils.isEmpty(obj.getReportNo()) && dto.getTableType().contains("2")) {
+                this.buildNumber(dto);
+                this.saveOrUpdate(dto);
+            }
+
             try {
-                //保存实体表数据、记录信息、生成pdf
-                assert obj != null;
+                //保存实体表数据、试验记录信息、生成pdf
                 String pdfURL = excelTabClient.saveTabData(dto.getIsBatchSave(), dto.getDataInfo(), dto.getType(), dto.getTableType(), dto.getId(), obj.getTableIds());
                 if (StringUtils.isNotEmpty(pdfURL)) {
                     //修改合并pdf
@@ -817,66 +833,158 @@ public class TrialSelfInspectionRecordServiceImpl
     private void buildNumber(TrialSelfInspectionRecordDTO dto) {
         StringSPUtils spUtils = new StringSPUtils();
         List<TrialSelfInspectionRecord> trialSelfInspectionRecords = baseMapper.selectAll(dto.getNodeId(), dto.getContractId());
-        //获取记录表最大编号
-        List<String> recordNos = trialSelfInspectionRecords.stream().map(TrialSelfInspectionRecord::getRecordNo).collect(Collectors.toList());
-        String maxRecordNo;
-        if (recordNos.size() == 0 || ObjectUtil.isEmpty(recordNos)) {
-            maxRecordNo = "0001";
-        } else {
-            List<String> numberRecordNos = new ArrayList<>();
-            for (String recordNo : recordNos) {
-                String number = recordNo.split("-")[recordNo.split("-").length - 1];
-                numberRecordNos.add(number);
+
+        //两种类型同时生成
+        if (dto.getTableType().contains("1,2") || dto.getTableType().contains("2,1")) {
+            String maxRecordNo = "";
+            if (StringUtils.isEmpty(dto.getRecordNo())) {
+                //获取记录表最大编号
+                List<String> recordNos = trialSelfInspectionRecords.stream().map(TrialSelfInspectionRecord::getRecordNo).collect(Collectors.toList());
+                if (recordNos.size() == 0 || ObjectUtil.isEmpty(recordNos)) {
+                    maxRecordNo = "0001";
+                } else {
+                    List<String> numberRecordNos = new ArrayList<>();
+                    for (String recordNo : recordNos) {
+                        String number = recordNo.split("-")[recordNo.split("-").length - 1];
+                        numberRecordNos.add(number);
+                    }
+                    int maxRecordNo1 = Integer.parseInt(Collections.max(numberRecordNos)) + 1;
+                    if (maxRecordNo1 < 9999 && maxRecordNo1 > 0) {
+                        maxRecordNo = spUtils.buildSerial(maxRecordNo1, 4);
+                    } else {
+                        throw new ServiceException("当前编号已达到最大值9999,操作失败");
+                    }
+                }
             }
-            int maxRecordNo1 = Integer.parseInt(Collections.max(numberRecordNos)) + 1;
-            if (maxRecordNo1 < 9999 && maxRecordNo1 > 0) {
-                maxRecordNo = spUtils.buildSerial(maxRecordNo1, 4);
+
+            String maxReportNo = "";
+            if (StringUtils.isEmpty(dto.getReportNo())) {
+                //获取报告单最大编号
+                List<String> reportNos = trialSelfInspectionRecords.stream().map(TrialSelfInspectionRecord::getReportNo).collect(Collectors.toList());
+                if (reportNos.size() == 0 || ObjectUtil.isEmpty(reportNos)) {
+                    maxReportNo = "0001";
+                } else {
+                    List<String> numberReportNo = new ArrayList<>();
+                    for (String reportNo : reportNos) {
+                        String number = reportNo.split("-")[reportNo.split("-").length - 1];
+                        numberReportNo.add(number);
+                    }
+                    int maxReportNo1 = Integer.parseInt(Collections.max(numberReportNo)) + 1;
+                    if (maxReportNo1 < 9999 && maxReportNo1 > 0) {
+                        maxReportNo = spUtils.buildSerial(maxReportNo1, 4);
+                    } else {
+                        throw new ServiceException("当前编号已达到最大值9999,操作失败");
+                    }
+                }
+            }
+
+            List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateClient.queryByPKeyIds(Func.toStrList(String.valueOf(dto.getNodeId())));
+            WbsTreePrivate wbsTreePrivate = wbsTreePrivates.stream().findAny().orElse(null);
+            ContractInfo contract = contractClient.getContractById(dto.getContractId());
+            int year = LocalDateTimeUtil.now().getYear();
+            if (wbsTreePrivate == null) {
+                throw new ServiceException("未找到当前节点信息,操作失败!");
             } else {
-                throw new ServiceException("当前编号已达到最大值9999,操作失败");
+                //记录表
+                if (StringUtils.isNotEmpty(maxRecordNo)) {
+                    String str1 = "JL" +
+                            "-" + contract.getContractNumber() +
+                            "-" + year +
+                            "-" + spUtils.getStringSP(wbsTreePrivate.getNodeName().trim()) +
+                            "-" + maxRecordNo;
+                    dto.setRecordNo(str1);
+                }
+
+                //报告单
+                if (StringUtils.isNotEmpty(maxReportNo)) {
+                    String str2 = "BG" +
+                            "-" + contract.getContractNumber() +
+                            "-" + year +
+                            "-" + spUtils.getStringSP(wbsTreePrivate.getNodeName().trim()) +
+                            "-" + maxReportNo;
+                    dto.setReportNo(str2);
+                }
             }
         }
 
-        //获取报告单最大编号
-        List<String> reportNos = trialSelfInspectionRecords.stream().map(TrialSelfInspectionRecord::getReportNo).collect(Collectors.toList());
-        String maxReportNo;
-        if (reportNos.size() == 0 || ObjectUtil.isEmpty(reportNos)) {
-            maxReportNo = "0001";
-        } else {
-            List<String> numberReportNo = new ArrayList<>();
-            for (String reportNo : reportNos) {
-                String number = reportNo.split("-")[reportNo.split("-").length - 1];
-                numberReportNo.add(number);
-            }
-            int maxReportNo1 = Integer.parseInt(Collections.max(numberReportNo)) + 1;
-            if (maxReportNo1 < 9999 && maxReportNo1 > 0) {
-                maxReportNo = spUtils.buildSerial(maxReportNo1, 4);
-            } else {
-                throw new ServiceException("当前编号已达到最大值9999,操作失败");
+        //记录表
+        if (("1").equals(dto.getTableType())) {
+            if (StringUtils.isEmpty(dto.getRecordNo())) {
+                //获取记录表最大编号
+                List<String> recordNos = trialSelfInspectionRecords.stream().map(TrialSelfInspectionRecord::getRecordNo).collect(Collectors.toList());
+                String maxRecordNo;
+                if (recordNos.size() == 0 || ObjectUtil.isEmpty(recordNos)) {
+                    maxRecordNo = "0001";
+                } else {
+                    List<String> numberRecordNos = new ArrayList<>();
+                    for (String recordNo : recordNos) {
+                        String number = recordNo.split("-")[recordNo.split("-").length - 1];
+                        numberRecordNos.add(number);
+                    }
+                    int maxRecordNo1 = Integer.parseInt(Collections.max(numberRecordNos)) + 1;
+                    if (maxRecordNo1 < 9999 && maxRecordNo1 > 0) {
+                        maxRecordNo = spUtils.buildSerial(maxRecordNo1, 4);
+                    } else {
+                        throw new ServiceException("当前编号已达到最大值9999,操作失败");
+                    }
+                }
+
+                List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateClient.queryByPKeyIds(Func.toStrList(String.valueOf(dto.getNodeId())));
+                WbsTreePrivate wbsTreePrivate = wbsTreePrivates.stream().findAny().orElse(null);
+                ContractInfo contract = contractClient.getContractById(dto.getContractId());
+                int year = LocalDateTimeUtil.now().getYear();
+                if (wbsTreePrivate == null) {
+                    throw new ServiceException("未找到当前节点信息,操作失败!");
+                } else {
+                    //记录表
+                    String str1 = "JL" +
+                            "-" + contract.getContractNumber() +
+                            "-" + year +
+                            "-" + spUtils.getStringSP(wbsTreePrivate.getNodeName().trim()) +
+                            "-" + maxRecordNo;
+                    dto.setRecordNo(str1);
+                }
             }
         }
 
-        List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateClient.queryByPKeyIds(Func.toStrList(String.valueOf(dto.getNodeId())));
-        WbsTreePrivate wbsTreePrivate = wbsTreePrivates.stream().findAny().orElse(null);
-        ContractInfo contract = contractClient.getContractById(dto.getContractId());
-        int year = LocalDateTimeUtil.now().getYear();
-        if (wbsTreePrivate == null) {
-            throw new ServiceException("未找到当前节点信息,操作失败!");
-        } else {
-            //记录表
-            String str1 = "JL" +
-                    "-" + contract.getContractNumber() +
-                    "-" + year +
-                    "-" + spUtils.getStringSP(wbsTreePrivate.getNodeName().trim()) +
-                    "-" + maxRecordNo;
-            dto.setRecordNo(str1);
-
-            //报告单
-            String str2 = "BG" +
-                    "-" + contract.getContractNumber() +
-                    "-" + year +
-                    "-" + spUtils.getStringSP(wbsTreePrivate.getNodeName().trim()) +
-                    "-" + maxReportNo;
-            dto.setReportNo(str2);
+        //报告单
+        if (("2").equals(dto.getTableType())) {
+            if (StringUtils.isEmpty(dto.getReportNo())) {
+                //获取报告单最大编号
+                List<String> reportNos = trialSelfInspectionRecords.stream().map(TrialSelfInspectionRecord::getReportNo).collect(Collectors.toList());
+                String maxReportNo;
+                if (reportNos.size() == 0 || ObjectUtil.isEmpty(reportNos)) {
+                    maxReportNo = "0001";
+                } else {
+                    List<String> numberReportNo = new ArrayList<>();
+                    for (String reportNo : reportNos) {
+                        String number = reportNo.split("-")[reportNo.split("-").length - 1];
+                        numberReportNo.add(number);
+                    }
+                    int maxReportNo1 = Integer.parseInt(Collections.max(numberReportNo)) + 1;
+                    if (maxReportNo1 < 9999 && maxReportNo1 > 0) {
+                        maxReportNo = spUtils.buildSerial(maxReportNo1, 4);
+                    } else {
+                        throw new ServiceException("当前编号已达到最大值9999,操作失败");
+                    }
+                }
+
+                List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateClient.queryByPKeyIds(Func.toStrList(String.valueOf(dto.getNodeId())));
+                WbsTreePrivate wbsTreePrivate = wbsTreePrivates.stream().findAny().orElse(null);
+                ContractInfo contract = contractClient.getContractById(dto.getContractId());
+                int year = LocalDateTimeUtil.now().getYear();
+                if (wbsTreePrivate == null) {
+                    throw new ServiceException("未找到当前节点信息,操作失败!");
+                } else {
+                    //报告单
+                    String str2 = "BG" +
+                            "-" + contract.getContractNumber() +
+                            "-" + year +
+                            "-" + spUtils.getStringSP(wbsTreePrivate.getNodeName().trim()) +
+                            "-" + maxReportNo;
+                    dto.setReportNo(str2);
+                }
+            }
         }
     }
 

+ 4 - 2
blade-service/blade-business/src/main/java/org/springblade/business/utils/FileUtils.java

@@ -104,8 +104,10 @@ public class FileUtils {
      */
     public static byte[] resizeImage(byte[] srcImgData, float reduceMultiple) throws IOException {
         BufferedImage bi = ImageIO.read(new ByteArrayInputStream(srcImgData));
-        int width = (int) (bi.getWidth() * reduceMultiple);
-        int height = (int) (bi.getHeight() * reduceMultiple);
+        /*int width = (int) (bi.getWidth() * reduceMultiple);
+        int height = (int) (bi.getHeight() * reduceMultiple);*/
+        int width = 768;
+        int height = 1024;
         Image image = bi.getScaledInstance(width, height, Image.SCALE_SMOOTH);
         BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
         Graphics g = tag.getGraphics();

+ 24 - 28
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -52,6 +52,7 @@ public class FormulaController {
     private final JdbcTemplate jdbcTemplate;
     private final IContractInfoService contractInfoService;
     private final ITextdictInfoService textdictInfoService;
+    private final IFormulaOptionService formulaOptionService;
     /**
      * 新增或修改
      */
@@ -174,8 +175,10 @@ public class FormulaController {
                 FormulaBean fb=BeanUtil.toBean(map,FormulaBean.class);
                 if(StringUtils.isNotEmpty(rely)){
                     String[] relyArr = rely.split(StringPool.COMMA);
-                   List<Map<String,Object>> mapList =this.jdbcTemplate.queryForList("select CONCAT(a.tab_en_name,':',b.e_key) ekey,a.tab_ch_name tableName,b.e_name ename  ,b.e_length elength,c.dict_value type from m_table_info a JOIN m_wbs_form_element b on a.id=b.f_id  LEFT JOIN (select dict_key, dict_value from blade_dict where code ='data_type' and parent_id > 0 and is_sealed = 0 and is_deleted = 0 )c on b.e_type=c.dict_key" +
-                            " where  a.tab_en_name in( "+ Arrays.stream(relyArr).map(e->e.split(StringPool.COLON)[0]).distinct().collect(Collectors.joining(StringPool.COMMA,"'","'"))+")");
+                   List<Map<String,Object>> mapList =this.jdbcTemplate.queryForList("select CONCAT(a.tab_en_name,':',b.e_key) ekey,a.tab_ch_name tableName,b.e_name ename  ,b.e_length elength,c.dict_value type f" +
+                           "rom m_table_info a JOIN m_wbs_form_element b on a.id=b.f_id  " +
+                           "LEFT JOIN (select dict_key, dict_value from blade_dict where code ='data_type' and parent_id > 0 and is_sealed = 0 and is_deleted = 0 )c on b.e_type=c.dict_key" +
+                           " where  a.tab_en_name in( "+ Arrays.stream(relyArr).map(e->e.split(StringPool.COLON)[0]).distinct().collect(Collectors.joining(StringPool.COMMA,"'","'"))+")");
                    if(ListUtils.isNotEmpty(mapList)){
                        fb.setDict(mapList.stream().filter(e-> Arrays.stream(relyArr).anyMatch(c->StringUtils.isEquals(e.get("ekey"),c))).collect(Collectors.toMap(e->StringUtils.handleNull(e.get("ekey")), e->e)));
                    }
@@ -340,9 +343,9 @@ public class FormulaController {
     @GetMapping("/panel")
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "公式交互面板", notes = "公式交互面板")
-    public R<Object> panel(FormulaOption fo)  {
+    public R<Object> panel(FormulaOptionVo fo)  {
              Map<String,Object> result = new LinkedHashMap<>();
-             String  key=fo.getEkey().replaceAll("__[\\d_]+","");;
+             String  key=fo.getKey().replaceAll("__[\\d_]+","");
               ContractInfo contract = this.contractInfoService.getById(fo.getContractId());
               List<KeyMapper> kms =  this.service.getKeyMapperList(Collections.singletonList(fo.getPKeyId()),contract.getPId());
               KeyMapper keyMapper=null;
@@ -354,28 +357,13 @@ public class FormulaController {
               }
               if(keyMapper!=null&&Func.isNotEmpty(keyMapper.getFormulaId())){
                    Formula formula = this.service.getById(keyMapper.getFormulaId());
-                   /*临时处理,等确定数据结构在优化*/
+                  String data = this.formulaOptionService.queryOption(fo.getContractId(),fo.getParentId(),fo.getPKeyId(),fo.getKey());
+                  /*临时处理,等确定数据结构在优化*/
                    if(formula.getFormula().contains(".option")){
-                       JSONObject jo =JSON.parseObject(TEMPLATE);
-                       jo.put("scope",0);
-                       JSONObject info =jo.getJSONObject("info");
-                       info.put("label","是否引用公式数据");
-                       /*针对元素级别*/
-                       List<Map<String,Object>> mapList=this.jdbcTemplate.queryForList("select id,parent_id parentId,table_id pKeyId,val value,e_key ekey,contract_id contractId,scope from m_formula_option where scope=0 and parent_id ="+fo.getParentId()+" and e_key='"+key+"' and contract_id="+fo.getContractId());
-                       if(Func.isNotEmpty(mapList)){
-                           info.put("data",mapList.get(0));
-                       }
-                     return    R.data(jo);
+                       return R.data(createRadioPanel(0,"是否引用公式数据",data));
                    }else if (StringUtils.isEquals("MILE",formula.getNumber())){
                       if(StringUtils.isEquals(key,formula.getRelyList().get(0).split(StringPool.COLON)[1])){
-                          JSONObject jo =JSON.parseObject(TEMPLATE);
-                          jo.put("scope",1);
-                          JSONObject info =jo.getJSONObject("info");
-                          info.put("label","竖直方向");
-                          List<Map<String,Object>> mapList=this.jdbcTemplate.queryForList("select id,parent_id parentId,table_id pKeyId,val value,e_key ekey,contract_id contractId,scope from m_formula_option where scope=1 and table_id="+fo.getPKeyId()+" and parent_id ="+fo.getParentId()+" and e_key='"+key+"' and contract_id="+fo.getContractId());
-                          if(Func.isNotEmpty(mapList)){
-                              result.put("data",mapList.get(0));
-                          }
+                          return R.data(createRadioPanel(1,"竖直方向",data));
                       }
                   }
               }else{
@@ -384,14 +372,22 @@ public class FormulaController {
              return R.data(result);
     }
 
+    public JSONObject createRadioPanel(Integer scope,String label,String data){
+        JSONObject jo =JSON.parseObject(TEMPLATE);
+        jo.put("scope",1);
+        JSONObject info =jo.getJSONObject("info");
+        info.put("label","竖直方向");
+        if(Func.isNotEmpty(data)){
+            info.put("data",data);
+        }
+        return jo;
+    }
+
     @PostMapping("/panel-save")
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "公式交互面板参数保存", notes = "公式交互面板参数保存")
-    public R<Object> panelSave( @RequestBody FormulaOption fo){
-            if(Func.isNotEmpty(fo.getId())){
-                this.jdbcTemplate.execute("delete from m_formula_option where id="+fo.getId());
-            }
-            this.jdbcTemplate.execute("insert into m_formula_option values ("+SnowFlakeUtil.getId()+fo.toSql()+")");
+    public R<Object> panelSave( @RequestBody FormulaOptionVo fo){
+
            return    R.success("保存成功");
     }
 

+ 4 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TableFileController.java

@@ -117,7 +117,7 @@ public class TableFileController extends BladeController {
     @PostMapping("/remove-trial")
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "逻辑删除", notes = "传入当前文件ids、tableType、合同段Id、当前自检记录id")
-    public R removeTrial(@RequestParam String ids, @RequestParam Integer tableType, @RequestParam String contractId, @RequestParam Long id) throws Exception {
+    public R removeTrial(@RequestParam String ids, @RequestParam String tableType, @RequestParam String contractId, @RequestParam Long id) throws Exception {
         //基本信息
         TableFile tableFile = tableFileService.getById(ids);
 
@@ -136,6 +136,7 @@ public class TableFileController extends BladeController {
                 .eq(WbsTreePrivate::getPKeyId, pkeyId));
 
         WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                .select(WbsTreePrivate::getPKeyId)
                 .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
                 .eq(WbsTreePrivate::getId, wbsTreePrivate.getParentId())
         );
@@ -162,7 +163,7 @@ public class TableFileController extends BladeController {
         }
 
         //获取当前记录下的文本元素表的附件文件信息
-        List<TableFile> fileList = this.tableFileService.getBaseMapper().selectList(Wrappers.<TableFile>lambdaQuery()
+        Long row = this.tableFileService.getBaseMapper().selectCount(Wrappers.<TableFile>lambdaQuery()
                 .eq(TableFile::getType, 2)
                 .eq(TableFile::getTabId, pkeyId)
                 .eq(TableFile::getTrialRecordId, id)
@@ -170,7 +171,7 @@ public class TableFileController extends BladeController {
 
         //修改按钮状态
         String updateSql;
-        if (fileList.size() == 0) {
+        if (row == 0) {
             //无附件
             updateSql = "update u_trial_self_data_record set is_tab_file_type = 1 where tab_id = " + pkeyId + " and record_id = " + id;
         } else {

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -317,6 +317,9 @@ public class WbsTreePrivateController extends BladeController {
         List<WbsNodeTableVO> rs = wbsTreePrivateService.selectByNodeTable(parentId, wbsId, projectId);
         if (rs.size() > 0) {
             for (WbsNodeTableVO r : rs) {
+                if (StringUtil.isBlank(r.getHtmlUrl())){
+                    r.setIsLinkTable(1);
+                }
                 if (StringUtil.isBlank(r.getInitTableId())) {
                     WbsTree wbsTree = wbsTreeService.getById(r.getId());
                     if (wbsTree != null) {

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java

@@ -44,7 +44,7 @@ public class ExcelTabClientImpl implements ExcelTabClient {
     }
 
     @Override
-    public String saveTabData(Integer isBatchSave, JSONObject dataInfo, Integer type, Integer tableType, Long id, String tabIds) throws Exception {
+    public String saveTabData(Integer isBatchSave, JSONObject dataInfo, Integer type, String tableType, Long id, String tabIds) throws Exception {
         //通用参数
         JSONArray dataArray = dataInfo.getJSONArray("orderList");
         JSONObject table = dataArray.getJSONObject(0);
@@ -143,7 +143,7 @@ public class ExcelTabClientImpl implements ExcelTabClient {
     public String getBussPDFSTrial(String nodeId, String tableType, String classify, String contractId, String projectId, String id, String tabIds) throws Exception {
         //合并PDF加载
         return excelTabService.getBussPDFSTrial(nodeId,
-                Integer.parseInt(tableType), //tableType=表类型 1=记录表 2=报告单
+                tableType, //tableType=表类型 1=记录表 2=报告单
                 classify, //type=所属方 1=施工质检 2=监理抽检
                 contractId, //合同段id
                 projectId, //项目id

+ 10 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/FormulaOptionMapper.java

@@ -0,0 +1,10 @@
+package org.springblade.manager.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.manager.entity.FormulaOption;
+
+/**
+ * @author yangyj
+ */
+public interface FormulaOptionMapper extends BaseMapper<FormulaOption> {
+}

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -461,6 +461,7 @@
                wt.sort,
                wt.status,
                wt.fill_rate AS "fillRate",
+               wt.html_url AS htmlUrl,
                (SELECT count(1) FROM m_wbs_form_element WHERE f_id = wt.init_table_id and is_deleted=0) AS "elementTotal"
         FROM m_wbs_tree_private AS wt
         WHERE wt.type = 2

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

@@ -134,7 +134,7 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
     /**
      * 多PDF 合并 - 试验
      */
-    String getBussPDFSTrial(String nodeId, Integer tableType, String classify, String contractId, String projectId, Long id, String tabIds) throws Exception;
+    String getBussPDFSTrial(String nodeId, String tableType, String classify, String contractId, String projectId, Long id, String tabIds) throws Exception;
 
 
     /**

+ 14 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaOptionService.java

@@ -0,0 +1,14 @@
+package org.springblade.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.manager.dto.FormulaOptionVo;
+import org.springblade.manager.entity.FormulaOption;
+
+/**
+ * @author yangyj
+ */
+public interface IFormulaOptionService extends IService<FormulaOption> {
+    String queryOption(Long contractId,Long parentId,Long pkeyId,String key);
+    void saveOrUpdateOption(FormulaOptionVo fo);
+
+}

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

@@ -1547,7 +1547,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 Element table = doc.select("table").first();
                 Elements trs = table.select("tr");
                 Elements cols = table.select("col");
-
                 if (ObjectUtil.isNotEmpty(DataInfo)) {
                     for (String val : DataInfo.keySet()) {
                         if (val.contains("__")) {
@@ -1559,7 +1558,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                             if (data.html().contains("x1") && data.html().contains("y1")) {
                                 int x1 = 0;
                                 int y1 = 0;
-
                                 if (data.html().contains("el-tooltip")) {
                                     x1 = Integer.parseInt(data.children().get(0).children().get(0).attr("x1"));
                                     y1 = Integer.parseInt(data.children().get(0).children().get(0).attr("y1"));
@@ -1591,11 +1589,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                         myData = StringUtil.format("{}年{}月{}日", dataStr[0], dataStr[1], Integer.parseInt(dataStr[2]) + 1);
                                     }
                                 }
-                                //https:bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20220819/b53cb6700db369381e3b03d7737bcdec.jpg__16_1
                                 if (myData.contains("https") && myData.contains("aliyuncs")) {
-
                                     BufferedImage image = ImageIO.read(CommonUtil.getOSSInputStream(myData));
-
                                     int colspan = data.attr("COLSPAN").equals("") ? 0 : Integer.parseInt(data.attr("COLSPAN"));
                                     int rowspan = data.attr("ROWSPAN").equals("") ? 0 : Integer.parseInt(data.attr("ROWSPAN"));
                                     int picHeight = 0;
@@ -1635,23 +1630,17 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                     ExcelPicture pic = sheet.getPictures().add(y1, x1, image);
                                     pic.setAutoSize(true);
                                     pic.setWidth(picWidth - 10);
-
-                                    //System.out.println(sheet.get(y1, x1).getRowHeight());
-                                    //System.out.println(sheet.get(y1, x1).getRows());
                                     pic.setHeight(picHeight);
                                     pic.setLeft(5);
                                 } else {
                                     CellRange cellRange = sheet.getCellRange(y1, x1);
                                     cellRange.getCellStyle().getExcelFont().setFontName("EUDC");
                                     cellRange.setText(myData);
-                                    //System.out.println(cellRange.getStyle().getFont().getFontName());
-                                    //System.out.println("后" + cellRange.getText());
                                 }
                             }
                         }
                     }
                 }
-
                 // 组装电签设置
                 QueryWrapper<TextdictInfo> queryWrapper = new QueryWrapper<>();
                 queryWrapper.eq("type", 2);
@@ -1681,11 +1670,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         wb.saveToFile(excelPath, ExcelVersion.Version2010);
         FileUtils.excelToPdf(excelPath, pdfPath);
         BladeFile bladeFile = newIOSSClient.uploadFile(pkeyId + ".pdf", pdfPath);
-        TableFile tableFile1 = tableFileService.getBaseMapper().selectOne(Wrappers.<TableFile>query().lambda()
-                .eq(TableFile::getTabId, pkeyId + "")
-                .eq(TableFile::getType, 1)
-                .eq(TableFile::getTrialRecordId, id));
-
+        TableFile tableFile1 = tableFileService.getBaseMapper().selectOne(Wrappers.<TableFile>query().lambda().eq(TableFile::getTabId, pkeyId + "").eq(TableFile::getType, 1).eq(TableFile::getTrialRecordId, id));
         if (tableFile1 != null) {
             tableFile1.setDomainPdfUrl(bladeFile.getLink());
             tableFileService.saveOrUpdate(tableFile1);
@@ -1699,22 +1684,15 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             tableFile.setIsDeleted(0);
             tableFile.setExtension(fileExtension);
             tableFile.setDomainPdfUrl(bladeFile.getLink());
-
             tableFile.setTrialRecordId(id);
-
             tableFileService.saveOrUpdate(tableFile);
         }
 
         //获取当前试验记录的中的元素表的附件文件
-        List<TableFile> tableFileList = tableFileService.getBaseMapper().selectList(Wrappers.<TableFile>query().lambda()
-                .eq(TableFile::getTabId, pkeyId + "")
-                .eq(TableFile::getTrialRecordId, id)
-        );
+        List<TableFile> tableFileList = tableFileService.getBaseMapper().selectList(Wrappers.<TableFile>query().lambda().eq(TableFile::getTabId, pkeyId + "").eq(TableFile::getTrialRecordId, id));
 
         if (tableFileList.size() > 0) {
-
             tableFileList.sort(Comparator.comparing(TableFile::getType));
-
             List<String> dataListPdf = tableFileList.stream().filter(tableFile ->
                     tableFile.getDomainPdfUrl() != null
                             && (tableFile.getType() == 1 || tableFile.getType() == 2)
@@ -1755,7 +1733,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
      * 试验 多pdf
      */
     @Override
-    public String getBussPDFSTrial(String nodeId, Integer tableType, String classify, String contractId, String projectId, Long id, String tabIds) throws Exception {
+    public String getBussPDFSTrial(String nodeId, String tableType, String classify, String contractId, String projectId, Long id, String tabIds) throws Exception {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
         //获取有权限的节点信息
         String sql = "select * from m_wbs_tree_private where is_deleted = 0 and p_key_id in (" + tabIds + ")";

+ 73 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaOptionServiceImpl.java

@@ -0,0 +1,73 @@
+package org.springblade.manager.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mixsmart.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.manager.dto.FormulaOptionVo;
+import org.springblade.manager.entity.FormulaOption;
+import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.mapper.FormulaOptionMapper;
+import org.springblade.manager.service.IFormulaOptionService;
+import org.springblade.manager.service.IWbsTreeContractService;
+import org.springframework.stereotype.Service;
+
+
+
+/**
+ * @author yangyj
+ * @Date 2023/3/6 9:37
+ * @description TODO
+ */
+@Service
+@RequiredArgsConstructor
+public class FormulaOptionServiceImpl extends ServiceImpl<FormulaOptionMapper, FormulaOption> implements IFormulaOptionService {
+    private final IWbsTreeContractService wbsTreeContractService;
+
+    @Override
+    public String queryOption(Long contractId, Long parentId,Long pkeyId, String key) {
+        if(StringUtils.isNotEmpty(contractId,parentId,pkeyId,key)){
+            WbsTreeContract wbc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,pkeyId));
+            FormulaOption fo = this.getOne(Wrappers.<FormulaOption>lambdaQuery().eq(FormulaOption::getParentId,parentId).eq(FormulaOption::getContractId,contractId));
+            if(fo!=null&&wbc!=null){
+                JSONObject jo = JSON.parseObject(fo.getVal());
+                 if(jo.containsKey(pkeyId.toString())){
+                     JSONObject tableJson=jo.getJSONObject(wbc.getInitTableName());
+                     if(tableJson.containsKey(pkeyId.toString())){
+                         JSONObject excel = tableJson.getJSONObject(pkeyId.toString());
+                         if(excel.containsKey(key)){
+                             return excel.getString(key);
+                         }
+                     }
+
+                 }
+
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public void saveOrUpdateOption(FormulaOptionVo fo) {
+        if(fo.saveChecked()){
+            WbsTreeContract wbc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,fo.getPKeyId()));
+            FormulaOption formulaOption = this.getOne(Wrappers.<FormulaOption>lambdaQuery().eq(FormulaOption::getParentId,fo.getParentId()).eq(FormulaOption::getContractId,fo.getContractId()));
+            if(formulaOption==null){
+                formulaOption=fo.toFo();
+                JSONObject jo = new JSONObject();
+                JSONObject table = (JSONObject) jo.computeIfAbsent(wbc.getInitTableName(),(k)->new JSONObject());
+                if(fo.isElementScope()){
+                    table.put(fo.getKey(),fo.getValue());
+                }else if(fo.isCellScope()){
+                    table.put(fo.getPKeyId()+ StringPool.AT +fo.getPKeyId(),fo.getValue());
+                }
+                formulaOption.setVal(jo.toJSONString());
+                this.saveOrUpdate(formulaOption);
+            }
+        }
+
+    }
+}

+ 59 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -36,6 +36,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -132,7 +133,17 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         /*通过判断元素名称来确定,加入汇总公式延后执行*/
         this.constantMap.put("tableNames",tableList.stream().filter(e->StringUtils.isEquals(e.getIsBussShow(),1)).map(WbsTreeContract::getFullName).collect(Collectors.toList()));
         /*检查是否有跨节点数据*/
+        /*获取type=1的检验单或者type=4的监表*/
+        List<Map<String,Object>>  inspectionElementMaps = new ArrayList<>();
+        Optional<AppWbsTreeContractVO> wop=tableList.stream().filter(e->e.getTableType()==1).findAny();
+        if(wop.isPresent()){
+            /*检验单或者监表的*/
+            inspectionElementMaps=  this.jdbcTemplate.queryForList("select c.e_name name ,c.init_table_name tableName,c.e_key ekey from m_wbs_tree_contract a INNER JOIN m_wbs_tree b on (a.id=b.id or a.old_id=b.id) INNER join m_wbs_form_element c on b.init_table_id=c.f_id where a.id=" + wop.get().getPKeyId());
+        }
         List<String> missingList = new ArrayList<>();
+        List<Map<String, Object>> finalInspectionElementMaps = inspectionElementMaps;
+        List<String> cki =new ArrayList<>();
+        AtomicReference<String> ckd= new AtomicReference<>("");
         this.formDataList.forEach(fd->{
             if(fd.executable()){
                 relyParse(fd.getFormula());
@@ -145,12 +156,60 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                         }
                     });
                 }
+                if(StringUtils.isEquals("CKI",f.getNumber())){
+                    finalInspectionElementMaps.forEach(m->{
+                        String name = StringUtils.handleNull(m.get("name"));
+                        if(name.contains("实测值")&&name.contains("偏差值")){
+                            String ekey = StringUtils.handleNull(m.get("tableName"))+":"+StringUtils.handleNull(m.get("ekey"));
+                            if(this.formDataMap.values().stream().map(FormData::getCode).noneMatch(k->StringUtils.isEquals(k,ekey))){
+                                cki.add(ekey);
+                                missingList.add(ekey);
+                            }
+                        }
+                    });
+                    f.setFormula("CKI");
+                }else  if(StringUtils.isEquals("CKD",f.getNumber())){
+                    finalInspectionElementMaps.forEach(m->{
+                        String name = StringUtils.handleNull(m.get("name"));
+                        if(name.contains("检验日期")){
+                            String ekey = StringUtils.handleNull(m.get("tableName"))+":"+StringUtils.handleNull(m.get("ekey"));
+                            if(!this.formDataMap.containsKey(ekey)&&this.formDataMap.values().stream().map(FormData::getCode).noneMatch(k->StringUtils.isEquals(k,ekey))){
+                                ckd.set(ekey);
+                                missingList.add(ekey);
+                            }
+                        }
+                    });
+                    f.setFormula("CKD");
+                }
+
             }
         });
+
         missingFill(missingList);
         if(Func.isNotEmpty(missingList)){
             this.tec.getLog().append("无法识别的依赖:").append(missingList.stream().map(e->e.replaceAll("'","")).collect(Collectors.joining(",")));
         }
+        if(Func.isNotEmpty(cki)){
+           /*检验内容*/
+            StringBuilder sb = new StringBuilder();
+            for(String s:cki){
+                FormData fdTmp=this.formDataMap.get(s);
+                if(fdTmp!=null&&fdTmp.getValues().stream().anyMatch(e->StringUtils.isNotEmpty(e)&&StringUtils.isEquals("/",e))){
+                    sb.append(fdTmp.getEName().split("\\(.+\\)")[0]).append(",");
+                }
+            }
+            if(sb.length()>1){
+                this.constantMap.put(CHECK_ITEMS,sb.toString());
+            }
+        }
+        if(Func.isNotBlank(ckd.get())){
+            /*检验时间*/
+            FormData fdTmp =   this.formDataMap.get(ckd.get());
+            if(fdTmp!=null){
+                this.constantMap.put("CKD",fdTmp.getValues().stream().map(ElementData::stringValue).collect(Collectors.joining(",")));
+            }
+        }
+
         /*实测值参数*/
         List<Map<String,Object>>  textInfoMap= this.jdbcTemplate.queryForList("SELECT b.tab_id pkId,b.col_name val ,CONCAT(a.init_table_name,':',b.col_key)code from m_wbs_tree_contract a inner join m_textdict_info b on a.p_key_id=b.tab_id   " +
                 "where a.p_key_id in("+this.tec.getTableAll().stream().map(AppWbsTreeContractVO::getPKeyId).map(Func::toStr).collect(Collectors.joining(","))+") and b.type=8 ");
@@ -378,12 +437,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                         tmp = tmp.replace(am.group(),am.group(1)+"['"+am.group(2)+"']");
                     }
                 }
-                if(CHECK_ITEMS.equals(tmp)){
-                    /*获取type=1的检验单或者type=4的监表*/
-                    List<WbsTreeContract> tableList= (List<WbsTreeContract>) this.constantMap.get(TABLE_LIST);
-                    Optional<WbsTreeContract> wop=tableList.stream().filter(e->e.getTableType()==1||e.getTableType()==4).findAny();
-                    wop.ifPresent(wbsTreeContract -> this.jdbcTemplate.queryForList("select c.e_name name ,c.init_table_name tableName,c.e_key ekey from m_wbs_tree_contract a INNER JOIN m_wbs_tree b on (a.id=b.id or a.old_id=b.id) INNER join m_wbs_form_element c on b.init_table_id=c.f_id where a.id=" + wbsTreeContract.getPKeyId()));
-                }
                 fd.getFormula().setFormula(tmp);
                 this.formDataMap.put(fd.getCode(),fd);
             }
@@ -756,9 +809,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                              data.put(eNames.get(i),values.get(i));
                          }
                          f=f.replace(m.group(),putDataWithKey(data));
-                         if(f.contains("ENAME")){
-                             f=f.replace("ENAME",putDataWithKey(target.stream().map(FormData::getEName).collect(Collectors.toList())));
-                         }
                      }
                  }
                  if(f.contains(".option")){

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -323,6 +323,8 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                 tableOwners = "1,2,3";
             } else if (tableOwner.equals("2")) {
                 tableOwners = "4,5,6";
+            }else {
+                tableOwners = "7,8,9";
             }
             tableOwnerList = Func.toStrList(tableOwners);
         }