Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master'

liuyc 1 жил өмнө
parent
commit
ecf7707e28
23 өөрчлөгдсөн 559 нэмэгдсэн , 284 устгасан
  1. 25 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/CabinetVO.java
  2. 3 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/InterimPaymentSummary.java
  3. 1 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterPeriodInfo.java
  4. 27 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ProjectStatVO.java
  5. 12 2
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SubInterimMeterPaySummary.java
  6. 3 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SubprojectInterimPaymentSummary.java
  7. 13 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterInventoryVO.java
  8. 12 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java
  9. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  10. 10 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  11. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java
  12. 259 253
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  13. 36 5
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java
  14. 15 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java
  15. 25 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java
  16. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/SubTable.java
  17. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java
  18. 12 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  19. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaBaseService.java
  20. 40 16
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  21. 34 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  22. 7 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml
  23. 8 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

+ 25 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/CabinetVO.java

@@ -0,0 +1,25 @@
+package org.springblade.archive.vo;
+
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * @Param   大屏档案柜,单个档案信息
+ * @Author wangwl
+ * @Date 2024/1/30 18:17
+ **/
+@Data
+public class CabinetVO {
+    Long id;
+    String name;
+    String fileNumber;
+    String unit;
+    LocalDate startDate;
+    LocalDate endDate;
+    String storageTime;
+    String secretLevel;
+    String secretLevelValue;
+    String storageTimeValue;
+    String sideNumber;
+}

+ 3 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/InterimPaymentSummary.java

@@ -43,6 +43,9 @@ public class InterimPaymentSummary {
     /**备注*/
     /**备注*/
     @JSONField(name = "key_9",label="备注",ordinal = 9)
     @JSONField(name = "key_9",label="备注",ordinal = 9)
     private String remark;
     private String remark;
+    /**至上前累计批准支付金额*/
+    @JSONField(name = "key_10",label="",ordinal = 4)
+    private String previousPay;
     /**是否是汇总小结数据,输出的时候显示,计算的时候不参与*/
     /**是否是汇总小结数据,输出的时候显示,计算的时候不参与*/
     private Boolean summary=false;
     private Boolean summary=false;
 
 

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterPeriodInfo.java

@@ -15,7 +15,7 @@ public class MeterPeriodInfo {
     public static final String ID="20200000000";
     public static final String ID="20200000000";
     /**计量期信息表名*/
     /**计量期信息表名*/
     public static final String TBN="MPI";
     public static final String TBN="MPI";
-    public static final String TBN_CH="开工材料计量期";
+    public static final String TBN_CH="计量期";
     /**计量期*/
     /**计量期*/
     @JSONField(name = "key_1",label="计量期",ordinal = 1)
     @JSONField(name = "key_1",label="计量期",ordinal = 1)
     private String periodNumber;
     private String periodNumber;

+ 27 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ProjectStatVO.java

@@ -0,0 +1,27 @@
+package org.springblade.manager.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Param   统计项目的内页外页 档案大屏用
+ * @Author wangwl
+ * @Date 2024/1/30 15:06
+ **/
+@Data
+public class ProjectStatVO {
+    @ApiModelProperty(value = "内页")
+    private StatInfo inner;
+
+    @ApiModelProperty(value = "外业")
+    private StatInfo outer;
+
+    @Data
+    public static class StatInfo{
+        @ApiModelProperty(value = "比例")
+        private Integer ratio;
+
+        @ApiModelProperty(value = "总数")
+        private Integer total;
+    }
+}

+ 12 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SubInterimMeterPaySummary.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.annotation.JSONField;
 import lombok.Data;
 import lombok.Data;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.BaseUtils;
 import org.springblade.common.utils.BaseUtils;
+import org.springblade.core.tool.utils.StringPool;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
@@ -29,6 +30,9 @@ public class SubInterimMeterPaySummary {
     /**计量单位*/
     /**计量单位*/
     @JSONField(name = "key_2",label="计量单位",ordinal = 2)
     @JSONField(name = "key_2",label="计量单位",ordinal = 2)
     private String unit;
     private String unit;
+    /**单价*/
+    @JSONField(name = "key_12",label="单价",ordinal = 2)
+    private String price;
     /**合同数量*/
     /**合同数量*/
     @JSONField(name = "key_3",label="合同数量",ordinal = 3)
     @JSONField(name = "key_3",label="合同数量",ordinal = 3)
     private String contractTotal;
     private String contractTotal;
@@ -56,10 +60,13 @@ public class SubInterimMeterPaySummary {
     /**比例*/
     /**比例*/
     @JSONField(name = "key_11",label="变更令号",ordinal = 11)
     @JSONField(name = "key_11",label="变更令号",ordinal = 11)
     private String changeTokenId;
     private String changeTokenId;
-
     /**第n页 共m页*/
     /**第n页 共m页*/
     @JSONField(name = "key_12",label="页码",ordinal = 101)
     @JSONField(name = "key_12",label="页码",ordinal = 101)
     private String pageCount;
     private String pageCount;
+    /*分项工程名称*/
+    @JSONField(name = "key_13",label="分项工程名称",ordinal = 102)
+    private String subProjectName;
+
 
 
     public void currentPeriodEndPayAdd(String n){
     public void currentPeriodEndPayAdd(String n){
           List<String> list = new ArrayList<>();
           List<String> list = new ArrayList<>();
@@ -75,7 +82,10 @@ public class SubInterimMeterPaySummary {
         this.setCompleted(String.valueOf(list.stream().filter(BaseUtils::isNumber).map(Object::toString).mapToInt(Integer::parseInt).sum()));
         this.setCompleted(String.valueOf(list.stream().filter(BaseUtils::isNumber).map(Object::toString).mapToInt(Integer::parseInt).sum()));
     }
     }
 
 
-
+    /*获取*/
+    public static  String getSubPjFdCode(){
+        return TBN+ StringPool.COLON+"key_13";
+    }
 
 
     public SubInterimMeterPaySummary(String itemName) {
     public SubInterimMeterPaySummary(String itemName) {
         this.itemName = itemName;
         this.itemName = itemName;

+ 3 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SubprojectInterimPaymentSummary.java

@@ -49,6 +49,9 @@ public class SubprojectInterimPaymentSummary {
     @JSONField(name = "key_8",label="变更后A金额",ordinal = 8)
     @JSONField(name = "key_8",label="变更后A金额",ordinal = 8)
     private String changeMoney;
     private String changeMoney;
     /**上次支付金额*/
     /**上次支付金额*/
+    @JSONField(name = "key_13",label="本次支付金额",ordinal = 8)
+    private String previousPeriodPay;
+    /**本次支付金额*/
     @JSONField(name = "key_9",label="本次支付金额",ordinal = 9)
     @JSONField(name = "key_9",label="本次支付金额",ordinal = 9)
     private String currentPeriodPay;
     private String currentPeriodPay;
     /**累计支付B金额*/
     /**累计支付B金额*/

+ 13 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterInventoryVO.java

@@ -34,7 +34,7 @@ public class MeterInventoryVO {
     @ApiModelProperty(value = "分解数量")
     @ApiModelProperty(value = "分解数量")
     private BigDecimal resolveTotal;
     private BigDecimal resolveTotal;
 
 
-    @ApiModelProperty(value = "变更后数量")
+    @ApiModelProperty(value = "变更后分解数量")
     private BigDecimal changeTotal;
     private BigDecimal changeTotal;
 
 
     @ApiModelProperty(value = "本期计量数量")
     @ApiModelProperty(value = "本期计量数量")
@@ -52,5 +52,17 @@ public class MeterInventoryVO {
     @ApiModelProperty(value = "其他计量期计量量")
     @ApiModelProperty(value = "其他计量期计量量")
     private BigDecimal otherMeterTotal;
     private BigDecimal otherMeterTotal;
 
 
+    @ApiModelProperty(value = "施工图变更后数量是否大于合同变更后数量:1是0否")
+    private Integer isBuildThanContract;
+
+    @ApiModelProperty(value = "合同段是否允许超计:1是0否")
+    private Integer isContractOver;
+
+    @ApiModelProperty(value = "是否生成划分:1是0否")
+    private Integer isCreateDivide;
+
+    @ApiModelProperty(value = "清单合同变更后数量")
+    private BigDecimal contractChangeAllTotal;
+
 
 
 }
 }

+ 12 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -187,6 +187,18 @@ public class ArchivesAutoController extends BladeController {
 		}
 		}
 	}
 	}
 
 
+	@GetMapping("/pageByArchivesAuto2")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "档案柜查询返回当前单位所有档案柜,大屏使用", notes = "传入项目id和单位类型:1建设2监理3施工")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "projectId", value = "项目id", required = true),
+			@ApiImplicitParam(name = "type", value = "1建设2监理3施工", required = true)
+	})
+	public R pageByArchivesAuto2(Long projectId,Integer type) {
+		List<List<Map<String, List<CabinetVO>>>> lists = archivesAutoService.getUnitAllCabinet(projectId,type);
+		return R.data(lists);
+	}
+
 	/**
 	/**
 	 * 查询档案里的文件
 	 * 查询档案里的文件
 	 */
 	 */

+ 2 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java

@@ -200,4 +200,6 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
     List<ArchiveWarningVO> getRoutingInspection(@Param("projectId") Long projectId,@Param("nodeId") Long nodeId,@Param("rec") Integer rectification);
     List<ArchiveWarningVO> getRoutingInspection(@Param("projectId") Long projectId,@Param("nodeId") Long nodeId,@Param("rec") Integer rectification);
 
 
 	List<ArchiveWarningVO> getSpotCheck(@Param("projectId") Long projectId,@Param("nodeId") Long nodeId);
 	List<ArchiveWarningVO> getSpotCheck(@Param("projectId") Long projectId,@Param("nodeId") Long nodeId);
+
+	List<CabinetVO> getUnitAllCabinet(@Param("projectId") Long projectId,@Param("nodeId") Long nodeId);
 }
 }

+ 10 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -1159,6 +1159,16 @@
           and (atc.id = #{nodeId} or FIND_IN_SET(#{nodeId}, atc.ancestors))
           and (atc.id = #{nodeId} or FIND_IN_SET(#{nodeId}, atc.ancestors))
         GROUP by aei.file_id
         GROUP by aei.file_id
     </select>
     </select>
+    <select id="getUnitAllCabinet" resultType="org.springblade.archive.vo.CabinetVO">
+        select uaa.id,uaa.name,uaa.file_number,uaa.unit,uaa.storage_time,uaa.secret_level,uaa.start_date,uaa.end_date
+        from
+        (SELECT id FROM m_archive_tree_contract WHERE project_id =#{projectId}
+        and  ancestors like concat('%',#{nodeId},'%')
+        ) matc left join u_archives_auto uaa on matc.id = uaa.node_id
+        where uaa.is_deleted = 0 and uaa.is_archive = 1
+        GROUP BY uaa.id
+        order by uaa.tree_sort,uaa.auto_file_sort,uaa.file_number asc
+    </select>
 
 
 
 
     <update id="splitFiles">
     <update id="splitFiles">

+ 2 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java

@@ -149,4 +149,6 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 	ExcelEditCallback callbackSave(ExcelEditCallback callback);
 	ExcelEditCallback callbackSave(ExcelEditCallback callback);
 
 
     IPage<ArchiveWarningVO> warningPage(Query query, ArchiveWarningDTO dto);
     IPage<ArchiveWarningVO> warningPage(Query query, ArchiveWarningDTO dto);
+
+	List<List<Map<String, List<CabinetVO>>>> getUnitAllCabinet(Long projectId, Integer type);
 }
 }

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 259 - 253
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java


+ 36 - 5
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -800,7 +800,41 @@ public class FormulaUtils {
             return new HashMap<>();
             return new HashMap<>();
         }
         }
     }
     }
-
+    public static Map<String, String> getElementExcelCoords(String uri){
+        return getElementExcelCoords(uri,null,null);
+    }
+    public static Map<String, String> getElementExcelCoords(String uri,String key,Document document){
+        try {
+            String filter=" [keyname]";
+            if(Func.isNotBlank(key)){
+                filter="[keyname^="+key+"__]";
+            }
+            if(document==null){
+                InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(uri);
+                document=Jsoup.parse(IoUtil.readToString(inputStreamByUrl));
+            }
+            Map<String,String> result= document
+                    .select("table").first()
+                    .select(filter).stream()
+                    .filter(d -> Func.isNotEmpty(d.attr("keyname"))).filter(StringUtils::isNotEmpty).map(e ->new String[]{e.attr("keyname").split("__")[0],e.attr("y1")+"_"+e.attr("x1")})
+                    .collect(
+                            Collectors.toMap(
+                                    b -> b[0],
+                                    b -> b[1],
+                                    (v1, v2) -> v1 + ";" + v2
+                            )
+                    );
+            if(result.size()>0){
+                for(Map.Entry<String,String> entry:result.entrySet()){
+                    entry.setValue(FormulaUtils.coordsSorted(entry.getValue()));
+                }
+            }
+            return result;
+        }catch (Exception e){
+            e.printStackTrace();
+            return new HashMap<>();
+        }
+    }
 
 
 
 
     public static List<ElementData> setScale(Integer scale, List<ElementData> data){
     public static List<ElementData> setScale(Integer scale, List<ElementData> data){
@@ -811,10 +845,7 @@ public class FormulaUtils {
         return data.stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2StringZero(e.getValue(),finalScale));}}).collect(Collectors.toList());
         return data.stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2StringZero(e.getValue(),finalScale));}}).collect(Collectors.toList());
     }
     }
 
 
-/*    public static void main(String[] args) {
-        Map<String,String> map=getElementCell("/www/wwwroot/Users/hongchuangyanfa/Desktop/privateUrl/1694630551069130752.html","key_22");
-        System.out.println(map);
-    }*/
+
     /**
     /**
      * @Description  定位信息排序
      * @Description  定位信息排序
      * @Param [coords]
      * @Param [coords]

+ 15 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -37,6 +37,7 @@ import org.springblade.manager.service.IWbsTreeContractService;
 import org.springblade.manager.service.impl.WbsTreeContractServiceImpl;
 import org.springblade.manager.service.impl.WbsTreeContractServiceImpl;
 import org.springblade.manager.utils.FileUtils;
 import org.springblade.manager.utils.FileUtils;
 import org.springblade.manager.vo.*;
 import org.springblade.manager.vo.*;
+import org.springblade.meter.entity.MiddleMeterApply;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -697,5 +698,19 @@ public class WbsTreeContractController extends BladeController {
         }
         }
     }
     }
 
 
+    /**
+     * 获取项目内外页台账完成比例
+     * @return
+     */
+    @GetMapping("/getProjectStat")
+    @ApiOperationSupport(order = 40)
+    @ApiOperation(value = "获取项目内外页台账完成比例", notes = "返回内外页台账完成比例")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "projectId", value = "项目id", required = true),
+    })
+    public R<ProjectStatVO> getProjectStat(@RequestParam Long projectId) {
+        return R.data(wbsTreeContractServiceImpl.getProjectStat(projectId));
+    }
+
 
 
 }
 }

+ 25 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -72,6 +72,7 @@ public class ExecutorMeter extends FormulaExecutor {
         return fn;
         return fn;
     }
     }
 
 
+
     Function<String,String> preFixFc= this::getPrefix;
     Function<String,String> preFixFc= this::getPrefix;
 
 
 
 
@@ -550,6 +551,9 @@ public class ExecutorMeter extends FormulaExecutor {
             return current.size()>0;
             return current.size()>0;
         }
         }
 
 
+        /*分项工程名称*/
+        List<String> subProjectName = new ArrayList<>();
+
         public BiFunction<Payment,Payment,SubInterimMeterPaySummary> payment2Smps=(payment,prePayment)->{
         public BiFunction<Payment,Payment,SubInterimMeterPaySummary> payment2Smps=(payment,prePayment)->{
             SubInterimMeterPaySummary smps= new SubInterimMeterPaySummary();
             SubInterimMeterPaySummary smps= new SubInterimMeterPaySummary();
             smps.setItemName(payment.getName());
             smps.setItemName(payment.getName());
@@ -610,6 +614,11 @@ public class ExecutorMeter extends FormulaExecutor {
                         tmp.add(summary);
                         tmp.add(summary);
                        return tmp.stream();
                        return tmp.stream();
                     }).collect(Collectors.toList());
                     }).collect(Collectors.toList());
+                    /*分项数据*/
+                     FormData subPjFd = fdm.get(SubInterimMeterPaySummary.getSubPjFdCode());
+                     if(subPjFd!=null) {
+                         FormulaUtils.write(subPjFd, this.subProjectName);
+                     }
                     /*内容输出*/
                     /*内容输出*/
                     putOut(SubInterimMeterPaySummary.class);
                     putOut(SubInterimMeterPaySummary.class);
                 }
                 }
@@ -619,6 +628,7 @@ public class ExecutorMeter extends FormulaExecutor {
 
 
         }
         }
 
 
+
         /*溯源并计算累计支付*/
         /*溯源并计算累计支付*/
         public  void treeNodeCheckedCount(TreeNode<MeterTree> tmp,Payment payment, Payment prePayment ){
         public  void treeNodeCheckedCount(TreeNode<MeterTree> tmp,Payment payment, Payment prePayment ){
             tmp.setChecked(true);
             tmp.setChecked(true);
@@ -645,6 +655,7 @@ public class ExecutorMeter extends FormulaExecutor {
                 }
                 }
                 node=node.getParent();
                 node=node.getParent();
             }
             }
+
         }
         }
 
 
         /*遍历树获取smps*/
         /*遍历树获取smps*/
@@ -654,25 +665,34 @@ public class ExecutorMeter extends FormulaExecutor {
                 List<TreeNode<MeterTree>> parts = top.getChildren();
                 List<TreeNode<MeterTree>> parts = top.getChildren();
                 for(TreeNode<MeterTree> node :parts){
                 for(TreeNode<MeterTree> node :parts){
                     List<SubInterimMeterPaySummary> list = new ArrayList<>();
                     List<SubInterimMeterPaySummary> list = new ArrayList<>();
-                    toSmps(node,list);
+                    toSubCollect(node,list);
                     if(list.size()>0){
                     if(list.size()>0){
                         total.add(list);
                         total.add(list);
+                        /*计算每页的分项名称*/
+                        setSubPjName(node.getName(),list.size());
                     }
                     }
                 }
                 }
             }
             }
             return total;
             return total;
         }
         }
 
 
-        public void toSmps(TreeNode<MeterTree> node,List<SubInterimMeterPaySummary> list){
+        /*获取checked状态的节点*/
+        public void toSubCollect(TreeNode<MeterTree> node,List<SubInterimMeterPaySummary> list){
             if(node.isChecked()){
             if(node.isChecked()){
                 list.add(node.getValue().getPeer());
                 list.add(node.getValue().getPeer());
                 if(node.hasChildren()){
                 if(node.hasChildren()){
                       for(TreeNode<MeterTree> child:node.getChildren()){
                       for(TreeNode<MeterTree> child:node.getChildren()){
-                          toSmps(child,list);
+                          toSubCollect(child,list);
                       }
                       }
                 }
                 }
             }
             }
         }
         }
+        /*计算每页的分项名称*/
+        public void setSubPjName(String name ,int size){
+            this.subProjectName.addAll(Collections.nCopies((int)Math.ceil(size/(double)this.capacity),name));
+        }
+
+
 
 
     }
     }
 
 
@@ -790,10 +810,11 @@ public class ExecutorMeter extends FormulaExecutor {
                 pageFd.setValues(IntStream.range(0, total).boxed().map(i -> new ElementData(pageTmp.replace("$1", i.toString()))).collect(Collectors.toList()));
                 pageFd.setValues(IntStream.range(0, total).boxed().map(i -> new ElementData(pageTmp.replace("$1", i.toString()))).collect(Collectors.toList()));
             }
             }
         }
         }
-        /*写入对应的元素*/
+        /*动态行数据写入对应的元素*/
         public void putOut(){
         public void putOut(){
             FormulaUtils.put2FormData(fdm, fieldDataFcMap,dataList);
             FormulaUtils.put2FormData(fdm, fieldDataFcMap,dataList);
         };
         };
+        /*动态行数据写入对应的元素*/
         public void putOut(Class<T> clazz){
         public void putOut(Class<T> clazz){
             pageNumber(clazz);
             pageNumber(clazz);
             FormulaUtils.put2FormData(fdm, fieldDataFcMap,dataList);
             FormulaUtils.put2FormData(fdm, fieldDataFcMap,dataList);

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/SubTable.java

@@ -35,6 +35,7 @@ public class SubTable {
     public SubTable(List<FormData> source) {
     public SubTable(List<FormData> source) {
         if (source != null && source.size() > 0) {
         if (source != null && source.size() > 0) {
             source.stream().filter(e -> KEYS.contains(e.getEName().trim())).forEach(fd -> {
             source.stream().filter(e -> KEYS.contains(e.getEName().trim())).forEach(fd -> {
+                /*这是把所有数据重置为空,如果要实现手填就必须分析出项目*/
                 fd.getValues().forEach(e -> e.setValue(null));
                 fd.getValues().forEach(e -> e.setValue(null));
                 switch (KEYS.indexOf(fd.getEName().trim())) {
                 switch (KEYS.indexOf(fd.getEName().trim())) {
                     case 0:
                     case 0:

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java

@@ -92,4 +92,11 @@ public interface WbsTreeContractMapper extends EasyBaseMapper<WbsTreeContract> {
     Long getAllTableFileSize(@Param("projectId") Long projectId);
     Long getAllTableFileSize(@Param("projectId") Long projectId);
 
 
     void syncCurrentFormToAllContract(@Param("wbsTreePrivate") WbsTreePrivate wbsTreePrivate);
     void syncCurrentFormToAllContract(@Param("wbsTreePrivate") WbsTreePrivate wbsTreePrivate);
+
+    Integer getProjectAllFillNode(@Param("projectId") Long projectId);
+
+    Integer getAllAppTotal(@Param("projectId")Long projectId);
+
+    Integer getAllAppTotal2(@Param("projectId")Long projectId);
+
 }
 }

+ 12 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -760,4 +760,16 @@
             != ''
             != ''
         GROUP by mwtc.init_table_name );
         GROUP by mwtc.init_table_name );
     </select>
     </select>
+    <select id="getProjectAllFillNode" resultType="java.lang.Integer">
+        select COUNT(1) from m_wbs_tree_contract
+        WHERE project_id = #{projectId} and node_type = 6 and is_deleted = 0
+    </select>
+    <select id="getAllAppTotal" resultType="java.lang.Integer">
+        select COUNT(1) from u_information_query
+        WHERE project_id = #{projectId} and status = 2 and classify = 1 and is_deleted = 0
+    </select>
+    <select id="getAllAppTotal2" resultType="java.lang.Integer">
+        select COUNT(1) from u_construction_ledger
+        WHERE project_id = #{projectId} and is_deleted = 0 and site_end_time &lt; NOW()
+    </select>
 </mapper>
 </mapper>

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

@@ -88,4 +88,9 @@ public class FormulaBaseService extends BaseServiceImpl<FormulaBaseMapper, Formu
 
 
     }
     }
 
 
+    /*用于自动绑定元素库和数据模型*/
+    public void modelBind(String bindId,String tableId){
+
+    }
+
 }
 }

+ 40 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -1121,15 +1121,37 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             /*检验单附表处理*/
             /*检验单附表处理*/
             List<FormData> inspectionList = new ArrayList<>();
             List<FormData> inspectionList = new ArrayList<>();
             /*1检验表5评定表*/
             /*1检验表5评定表*/
-            tec.getTableAll().stream().filter(e -> e.getTableType().equals(1) ||e.getTableType().equals(5)).forEach(e -> {
-                /*获取所有挂在检验单、评定表里的元素映射关系*/
-                tec.getKeyMappers().stream().filter(p -> p.getPkId().equals(e.getPKeyId())).forEach(k -> {
-                    /*筛选元素长度超1页的元素*/
-                    List<FormData> target = tec.formDataMap.values().stream().filter(f -> f.getCode().equals(k.getCode()) && f.getAddPages() > 0).collect(Collectors.toList());
-                    if (Func.isNotEmpty(target)) {
-                        inspectionList.addAll(target);
-                    }
+            List<NodeTable> mainTable = tec.getTableAll().stream().filter(e -> (e.getTableType().equals(1) ||e.getTableType().equals(5))&&!e.getNodeName().contains("附表")).collect(Collectors.toList());
+            if(Func.isEmpty(mainTable)){
+                return;
+            }
+            NodeTable main = mainTable.get(0);
+            if(mainTable.size()>1){
+                /*超过一页全部删除*/
+                List<Long> removeIds = mainTable.stream().skip(1L).map(NodeTable::getPKeyId).collect(Collectors.toList());
+                tec.getKeyMappers().removeIf(e->removeIds.contains(e.getPkId()));
+                this.wbsTreeContractMapper.deleteByIds(removeIds);
+                /*多余的表删除之后需要,裁剪多余表头数据保留全部实测数据然后重新设置增页大小*/
+                tec.getKeyMappers().stream().filter(e->e.getPkId().equals(main.getPKeyId())).map(KeyMapper::getCode).forEach(e->{
+                   FormData target= tec.formDataMap.get(e);
+                   int capacity=target.getCoordsList().size();
+                   List<ElementData> eds = target.getValues();
+                   if(eds.size()>capacity){
+                       if(capacity>1){
+                          target.setAddPages((eds.size()/capacity)-1);
+                       }else{
+                          target.setValues(eds.stream().limit(capacity).collect(Collectors.toList()));
+                       }
+                   }
                 });
                 });
+            }
+            /*获取所有挂在检验单、评定表里的元素映射关系*/
+            tec.getKeyMappers().stream().filter(p -> p.getPkId().equals(main.getPKeyId())).forEach(k -> {
+                /*筛选元素长度超1页的元素*/
+                List<FormData> target = tec.formDataMap.values().stream().filter(f -> f.getCode().equals(k.getCode()) && f.getAddPages() > 0).collect(Collectors.toList());
+                if (Func.isNotEmpty(target)) {
+                    inspectionList.addAll(target);
+                }
             });
             });
             if (Func.isNotEmpty(inspectionList)) {
             if (Func.isNotEmpty(inspectionList)) {
                 /*检查是否存在附表,不存在挂载*/
                 /*检查是否存在附表,不存在挂载*/
@@ -1154,14 +1176,16 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     List<ElementData> overList = f.getValues().stream().skip(f.getCoordsList().size()).collect(Collectors.toList());
                     List<ElementData> overList = f.getValues().stream().skip(f.getCoordsList().size()).collect(Collectors.toList());
                     f.setValues(f.getValues().stream().limit(f.getCoordsList().size()).collect(Collectors.toList()));
                     f.setValues(f.getValues().stream().limit(f.getCoordsList().size()).collect(Collectors.toList()));
                     f.setAddPages(0);
                     f.setAddPages(0);
-                    String itemName=FormulaUtils.parseItemName(f.getEName());
-                    String key=itemName.trim();
-                    /*同项目*/
-                    Optional<FormData> designFdOp=  tec.formDataMap.values().stream().filter(o->o.getTableName().equals(f.getTableName())&&!o.equals(f)&&f.getMaxRow().equals(o.getMaxRow())&&o.getEName().contains("设计")).findAny();
-                    if(designFdOp.isPresent()){
-                        key+="@"+designFdOp.get().getValues().stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).findAny().orElse("");
+                    if(overList.stream().anyMatch(ElementData::isNotEmpty)) {
+                        String itemName = FormulaUtils.parseItemName(f.getEName());
+                        String key = itemName.trim();
+                        /*同项目*/
+                        Optional<FormData> designFdOp = tec.formDataMap.values().stream().filter(o -> o.getTableName().equals(f.getTableName()) && !o.equals(f) && f.getMaxRow().equals(o.getMaxRow()) && o.getEName().contains("设计")).findAny();
+                        if (designFdOp.isPresent()) {
+                            key += "@" + designFdOp.get().getValues().stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).findAny().orElse("");
+                        }
+                        sta.put(key, FormulaUtils.setScale(null, overList));
                     }
                     }
-                    sta.put(key,FormulaUtils.setScale(null,overList));
                 });
                 });
                 if(sta.checked()){
                 if(sta.checked()){
                     /*把附表数据刷入对应的附表元素对象*/
                     /*把附表数据刷入对应的附表元素对象*/
@@ -2628,7 +2652,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         /*元素创建*/
         /*元素创建*/
         Map<String,String> parent=  getWtpParent(meterType.getName(),contractInfo.getPId());
         Map<String,String> parent=  getWtpParent(meterType.getName(),contractInfo.getPId());
         List<NodeTable> tableList=getTableListMeter(parent);
         List<NodeTable> tableList=getTableListMeter(parent);
-        Map<String,Map<String,String>> coordinateMap=tableList.parallelStream().collect(Collectors.toMap(NodeTable::getInitTableName,m->FormulaUtils.getElementCell(m.getHtmlUrl()),(v1,v2)->v2));
+        Map<String,Map<String,String>> coordinateMap=tableList.parallelStream().collect(Collectors.toMap(NodeTable::getInitTableName,m->FormulaUtils.getElementExcelCoords(m.getHtmlUrl()),(v1,v2)->v2));
         List<FormData> processFds = this.createFormDataByTableName(tableList.stream().map(NodeTable::getInitTableName).collect(Collectors.joining("','")));
         List<FormData> processFds = this.createFormDataByTableName(tableList.stream().map(NodeTable::getInitTableName).collect(Collectors.joining("','")));
         listForMeter(processFds,contractInfo.getPId(),parent.get("id"));
         listForMeter(processFds,contractInfo.getPId(),parent.get("id"));
 
 

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

@@ -57,6 +57,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
 import java.io.*;
+import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.BigInteger;
 import java.util.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.*;
@@ -2287,4 +2288,37 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         return list;
         return list;
     }
     }
 
 
+    /**
+     * 获取项目内外页台账完成比例
+     * @return
+     */
+    public ProjectStatVO getProjectStat(Long projectId) {
+        ProjectStatVO vo = new ProjectStatVO();
+        ProjectStatVO.StatInfo info1 = new ProjectStatVO.StatInfo();
+        ProjectStatVO.StatInfo info2 = new ProjectStatVO.StatInfo();
+        //获取总填报节点
+        Integer total = baseMapper.getProjectAllFillNode(projectId);
+        if (total == 0){
+            throw new ServiceException("统计内外页,未获取到项目信息");
+        }
+        info1.setTotal(total);
+        info2.setTotal(total);
+        //获取内页资料已审批数量
+        Integer appTotal = baseMapper.getAllAppTotal(projectId);
+        if (appTotal >= total){
+            info1.setRatio(100);
+        }else {
+            info1.setRatio(new BigDecimal(appTotal).divide(new BigDecimal(total),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue());
+        }
+        //获取外业资料已审批数量
+        Integer appTotal2 = baseMapper.getAllAppTotal2(projectId);
+        if (appTotal2 >= total){
+            info2.setRatio(100);
+        }else {
+            info2.setRatio(new BigDecimal(appTotal2).divide(new BigDecimal(total),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue());
+        }
+        vo.setInner(info1);
+        vo.setOuter(info2);
+        return vo;
+    }
 }
 }

+ 7 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml

@@ -40,7 +40,7 @@
     <select id="getFormList" resultType="org.springblade.meter.vo.ResolveInventoryVO">
     <select id="getFormList" resultType="org.springblade.meter.vo.ResolveInventoryVO">
         select id,form_number,form_name,current_price,contract_total,change_total,
         select id,form_number,form_name,current_price,contract_total,change_total,
                change_total as buildChangeTotal,
                change_total as buildChangeTotal,
-        (change_total - IFNULL((select sum(build_picture_total) from s_inventory_form_meter where is_deleted = 0 and contract_form_id = cif.id),0)) as resolveResidueTotal
+                (change_total - IFNULL((select sum(build_picture_total) from s_inventory_form_meter where is_deleted = 0 and contract_form_id = cif.id),0)) as resolveResidueTotal
         from s_contract_inventory_form  cif where contract_id = #{contractId} and is_deleted = 0 and is_form_node = 1
         from s_contract_inventory_form  cif where contract_id = #{contractId} and is_deleted = 0 and is_form_node = 1
             AND id in
             AND id in
             <foreach collection="ids" item="id" open="(" separator="," close=")">
             <foreach collection="ids" item="id" open="(" separator="," close=")">
@@ -48,7 +48,9 @@
             </foreach>
             </foreach>
     </select>
     </select>
     <select id="getResolveFormInfo" resultType="org.springblade.meter.vo.MeterInventoryVO">
     <select id="getResolveFormInfo" resultType="org.springblade.meter.vo.MeterInventoryVO">
-        select id,form_number,form_name,current_price,
+        select id,form_number,form_name,current_price,change_total as contractChangeAllTotal,
+               IF (cif.build_change_total is null ,0,1) as isCreateDivide,
+               (select is_over_meter from m_contract_info mci WHERE id = #{contractId}) as isContractOver,
                IFNULL((select sum(change_build_picture_total) from s_inventory_form_meter where is_deleted = 0
                IFNULL((select sum(change_build_picture_total) from s_inventory_form_meter where is_deleted = 0
                     and contract_meter_id = #{nodeId} and contract_form_id = cif.id),0) as change_total,
                     and contract_meter_id = #{nodeId} and contract_form_id = cif.id),0) as change_total,
                IFNULL((select sum(build_picture_total) from s_inventory_form_meter where is_deleted = 0
                IFNULL((select sum(build_picture_total) from s_inventory_form_meter where is_deleted = 0
@@ -122,6 +124,9 @@
                ifa.change_build_picture_total as changeTotal,
                ifa.change_build_picture_total as changeTotal,
                ifa.current_meter_total as currentMeterTotal,0 as containChangeTotal,
                ifa.current_meter_total as currentMeterTotal,0 as containChangeTotal,
                ifa.current_meter_money as currentMeterMoney,
                ifa.current_meter_money as currentMeterMoney,
+               (select cif.change_total  from s_contract_inventory_form cif where cif.id = ifa.contract_form_id ) as contractChangeAllTotal,
+               (select IF (cif.build_change_total is null ,0,1) from s_contract_inventory_form cif where cif.id = ifa.contract_form_id ) as isCreateDivide,
+               (select is_over_meter from m_contract_info mci WHERE id = #{contractId}) as isContractOver,
                (IFNULL((select sum(current_meter_total) from s_inventory_form_apply where is_deleted = 0
                (IFNULL((select sum(current_meter_total) from s_inventory_form_apply where is_deleted = 0
                       and contract_meter_id = #{nodeId} and contract_form_id = ifa.contract_form_id and id != ifa.id),0)) as otherMeterTotal,
                       and contract_meter_id = #{nodeId} and contract_form_id = ifa.contract_form_id and id != ifa.id),0)) as otherMeterTotal,
                (IFNULL((select sum(current_meter_total) from s_inventory_form_apply where is_deleted = 0
                (IFNULL((select sum(current_meter_total) from s_inventory_form_apply where is_deleted = 0

+ 8 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

@@ -125,7 +125,10 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         List<Long> longs = Func.toLongList(ids);
         List<Long> longs = Func.toLongList(ids);
         vos = baseMapper.getResolveFormInfo(contractId,nodeId,longs);
         vos = baseMapper.getResolveFormInfo(contractId,nodeId,longs);
         for (MeterInventoryVO vo : vos) {
         for (MeterInventoryVO vo : vos) {
+            //设置其他计量总数
             vo.setOtherMeterTotal(vo.getAllMeterTotal().subtract(vo.getCurrentMeterTotal()));
             vo.setOtherMeterTotal(vo.getAllMeterTotal().subtract(vo.getCurrentMeterTotal()));
+            //设置施工图数量是否大于合同数量
+            vo.setIsBuildThanContract(vo.getChangeTotal().compareTo(vo.getContainChangeTotal()) == 1?1:0);
         }
         }
         return vos;
         return vos;
     }
     }
@@ -434,6 +437,11 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         MiddleMeterApplyVO vo = baseMapper.getById(id);
         MiddleMeterApplyVO vo = baseMapper.getById(id);
         //获取计量清单列表
         //获取计量清单列表
         List<MeterInventoryVO> formList = baseMapper.getForm(id,vo.getContractId(),vo.getContractUnitId());
         List<MeterInventoryVO> formList = baseMapper.getForm(id,vo.getContractId(),vo.getContractUnitId());
+        //计算分解数量是否超过合同数量
+        for (MeterInventoryVO form : formList) {
+            //设置施工图数量是否大于合同数量
+            form.setIsBuildThanContract(form.getChangeTotal().compareTo(form.getContractChangeAllTotal()) == 1?1:0);
+        }
         vo.setFormList(formList);
         vo.setFormList(formList);
         //获取附件列表
         //获取附件列表
         List<AttachmentForm> list = attachmentFormService.list(new LambdaQueryWrapper<AttachmentForm>()
         List<AttachmentForm> list = attachmentFormService.list(new LambdaQueryWrapper<AttachmentForm>()

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно