yangyj 1 жил өмнө
parent
commit
1791c854d5

+ 46 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/InterimMeter.java

@@ -1,16 +1,60 @@
 package org.springblade.manager.vo;
 
 import com.alibaba.fastjson.annotation.JSONField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author yangyj
  * @Date 2024/1/24 15:13
  * @description 中间计量表
  */
+@Data
 public class InterimMeter {
     public static final String ID="20270000000";
     public static final String TBN="IMeter";
     public static final String TBN_CH="中间计量表";
-    @JSONField(name = "key_0",label="支付编号")
-    private String formNumber;
+
+    @JSONField(name = "key_0",label="计量单编号")
+    private String meterNumber;
+
+    @JSONField(name = "key_1",label="工程划分")
+    private String engineerDivide;
+
+    @JSONField(name = "key_2",label="部位名称")
+    private String partName;
+
+    @JSONField(name = "key_3",label="交工证书编号")
+    private String certificateNumber;
+
+    @JSONField(name = "key_4",label="计量金额")
+    private BigDecimal meterMoney;
+
+    @JSONField(name = "key_5",label="变更令编号")
+    private String changeTokenNumber;
+
+    @JSONField(name = "key_6",label="草图文件地址")
+    private String pictureUrl;
+
+    @JSONField(name = "key_7",label="草图文件名称")
+    private String pictureName;
+
+    @JSONField(name = "key_8",label="计算式")
+    private String calculateFormula;
+
+    @JSONField(name = "key_9",label="合同图号")
+    private String contractPicture;
+
+    @JSONField(name = "key_10",label="支付号")
+    private List<String> formNumberList;
+    @JSONField(name = "key_11",label="项目名称")
+    private List<String> itemNameList;
+    @JSONField(name = "key_12",label="单位")
+    private List<String> unitList;
+    @JSONField(name = "key_13",label="申报数量")
+    private List<String> completedList;
+
 }

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

@@ -12,6 +12,7 @@ import java.math.BigDecimal;
 @Data
 public class MeterApply {
 
+        private Long id;
         /**
          * 合同计量单元id
          */

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

@@ -15,6 +15,8 @@ public class Payment {
     private Long  formId;
     /**计量单元id*/
     private Long  meterId;
+    /**中间计量申请Id*/
+    private Long  middleMeterId;
     /**清单编号*/
     private String number;
     /**计量单编号*/

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

@@ -16,6 +16,8 @@ public class ReportResult {
     private String url;
     /**表编号*/
     private String initTableName;
+    /**清表模版*/
+    private Long excelId;
     /**表名*/
     private String name;
     /**每一页的数据,格式{y_x:val,y1_x1:val1...}{...}...*/

+ 14 - 4
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SubInterimMeterPaySummary.java

@@ -2,8 +2,11 @@ package org.springblade.manager.vo;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import lombok.Data;
+import org.springblade.common.utils.BaseUtils;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @author yangyj
@@ -29,13 +32,13 @@ public class SubInterimMeterPaySummary {
     private String contractTotal;
     /**变更数量*/
     @JSONField(name = "key_4",label="变更数量",ordinal = 4)
-    private Integer revisedTotal;
+    private String revisedTotal;
     /**本次完成数量*/
     @JSONField(name = "key_5",label="本次完成数量",ordinal = 5)
-    private Integer currentPeriodCompleted;
+    private String currentPeriodCompleted;
     /**累计完成数量*/
     @JSONField(name = "key_6",label="累计完成数量",ordinal = 6)
-    private Integer completed;
+    private String completed;
     /**合同金额*/
     @JSONField(name = "key_7",label="合同金额",ordinal = 7)
     private String contractAmount;
@@ -47,11 +50,18 @@ public class SubInterimMeterPaySummary {
     private String currentPeriodPay;
     /**累计支付B金额*/
     @JSONField(name = "key_10",label="累计支付金额",ordinal = 10)
-    private BigDecimal currentPeriodEndPay;
+    private String currentPeriodEndPay;
     /**比例*/
     @JSONField(name = "key_11",label="变更令号",ordinal = 11)
     private String changeTokenId;
 
+    public void currentPeriodEndPayAdd(String n){
+          List<String> list = new ArrayList<>();
+          list.add(this.currentPeriodEndPay);
+          list.add(n);
+         this.setCurrentPeriodEndPay(list.stream().filter(BaseUtils::isNumber).map(BigDecimal::new).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
+    }
+
     public SubInterimMeterPaySummary(String itemName) {
         this.itemName = itemName;
     }

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

@@ -12,6 +12,7 @@ public class NodeTable {
     private Long pKeyId;
     private String nodeName;
     private String initTableName;
+    private Long excelId;
     private String wbsId;
     private Integer tableType;
     private Long parentId;

+ 33 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSpecial.java

@@ -550,12 +550,12 @@ public class ExecutorSpecial extends FormulaExecutor {
             smps.setItemName(payment.getName());
             smps.setFormNumber(payment.getNumber());
             smps.setUnit(payment.getUnit());
-            smps.setRevisedTotal(payment.getChangeTotal());
-            smps.setCurrentPeriodCompleted(payment.getCompleted());
-            smps.setCompleted(payment.getCompleted()+prePayment.getCompleted());
+            smps.setRevisedTotal(StringUtils.handleNull(payment.getChangeTotal()));
+            smps.setCurrentPeriodCompleted(StringUtils.handleNull(payment.getCompleted()));
+            smps.setCompleted(StringUtils.handleNull(payment.getCompleted()+prePayment.getCompleted()));
             smps.setRevisedAmount(payment.getChangeMoney());
             smps.setCurrentPeriodPay(payment.getMoney());
-            smps.setCurrentPeriodEndPay(new BigDecimal(payment.getMoney()).add(new BigDecimal(prePayment.getMoney())));
+            smps.setCurrentPeriodEndPay(StringUtils.handleNull(new BigDecimal(payment.getMoney()).add(new BigDecimal(prePayment.getMoney()))));
             return smps;
         };
 
@@ -596,7 +596,7 @@ public class ExecutorSpecial extends FormulaExecutor {
                         int size = (int)Math.ceil(tmp.size()/(double)this.capacity);
                         /*每一章需要留一行做小计,其他要填充空白行*/
                         SubInterimMeterPaySummary summary=  new SubInterimMeterPaySummary("小计");
-                        summary.setCurrentPeriodEndPay(tmp.stream().map(SubInterimMeterPaySummary::getCurrentPeriodEndPay).reduce(BigDecimal.ZERO,BigDecimal::add));
+                        summary.setCurrentPeriodEndPay(tmp.stream().map(SubInterimMeterPaySummary::getCurrentPeriodEndPay).filter(BaseUtils::isNumber).map(BigDecimal::new).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
                         int over = size*capacity-1-tmp.size();
                         if(over>0){
                             /*填充空白行*/
@@ -636,7 +636,7 @@ public class ExecutorSpecial extends FormulaExecutor {
                     tmpTree.peer=ss;
                 }else{
                     /*已存在则相加*/
-                    ss.setCurrentPeriodEndPay(ss.getCurrentPeriodEndPay().add(sp.getCurrentPeriodEndPay()));
+                    ss.currentPeriodEndPayAdd(sp.getCurrentPeriodEndPay());
                 }
                 node=node.getParent();
             }
@@ -719,7 +719,34 @@ public class ExecutorSpecial extends FormulaExecutor {
             this.capacity=getLineSize(new ArrayList<>(fdm.keySet()));
             Map<String,Function<List<InterimMeter>,List<Object>>> functionMap =FormulaUtils.fieldDataFcMap(InterimMeter.class);
             tec.getFormDataMap().putAll(fdm);
+            List<MeterApply> meterApplyList=meterApplyFc.apply(tec.getPeriodId());
+            Map<Long,List<Payment>> paymentGroup = current.stream().collect(Collectors.groupingBy(Payment::getMiddleMeterId));
             List<InterimMeter> dataList = new ArrayList<>();
+            for(MeterApply meterApply:meterApplyList){
+                List<Payment> paymentList = paymentGroup.get(meterApply.getId());
+                List<List<Payment>> pageData = BaseUtils.splitList(paymentList,this.capacity);
+                for(List<Payment> payments:pageData){
+                    /*根据清单数量决定一条中间计量申请显示多少页*/
+                    InterimMeter iim = new InterimMeter();
+                    BeanUtils.copyProperties(meterApply,iim);
+                    int over = this.capacity-payments.size();
+                    List<String> formNumberList= payments.stream().map(Payment::getNumber).collect(Collectors.toList());
+                    List<String> itemNameList= payments.stream().map(Payment::getName).collect(Collectors.toList());
+                    List<String> unitList= payments.stream().map(Payment::getUnit).collect(Collectors.toList());
+                    List<String> completedList= payments.stream().map(p->StringUtils.handleNull(p.getCompleted())).collect(Collectors.toList());
+                    if(over>0){
+                        formNumberList.addAll(Collections.nCopies(over,StringPool.EMPTY));
+                        itemNameList.addAll(Collections.nCopies(over,StringPool.EMPTY));
+                        unitList.addAll(Collections.nCopies(over,StringPool.EMPTY));
+                        completedList.addAll(Collections.nCopies(over,StringPool.EMPTY));
+                    }
+                    iim.setFormNumberList(formNumberList);
+                    iim.setItemNameList(itemNameList);
+                    iim.setUnitList(unitList);
+                    iim.setCompletedList(completedList);
+                    dataList.add(iim);
+                }
+            }
             FormulaUtils.put2FormData(fdm,functionMap,dataList);
         }
     }

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -108,7 +108,7 @@ public class TableElementConverter implements ITableElementConverter {
     /**输入输出转换,在创建TableElementConverter必须明确实例*/
     private final Converter in;
     private final Converter out;
-    /*计量属性*/
+    /**计量属性*/
     private Long periodId;
     /**计量类型*/
     private MeterType meterType;
@@ -458,6 +458,7 @@ public class TableElementConverter implements ITableElementConverter {
                    rt.setUrl(report.getHtmlUrl());
                    rt.setInitTableName(report.getInitTableName());
                    rt.setName(report.getNodeName());
+                   rt.setExcelId(report.getExcelId());
                    reportResults.add(rt);
                    List<FormData> fds =group.get(report.getInitTableName());
                    if(fds.size()>0){

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

@@ -90,7 +90,7 @@ public class FormulaDaoImpl implements IFormulaDao {
     @Override
     public Function<Long, List<Payment>> getPaymentListFc() {
         return contractId->{
-            String paySql="select a.form_number number,a.form_name name ,a.current_meter_total completed ,a.current_price price,current_meter_money money,meter_number meterNumber ,contract_meter_id meterId,b.id formId,b.chapter_number chapter, b.contract_money contractMoney,b.change_money,b.unit,contract_total ,change_total,c.sort,c.id periodId from s_inventory_form_apply a join s_contract_inventory_form b on a.contract_form_id=b.id join s_contract_meter_period c on a.contract_period_id=c.id where a.is_deleted=0 and a.approve_status=2 and a.contract_id="+contractId;
+            String paySql="select a.form_number number,a.form_name name ,a.middle_meter_id,a.current_meter_total completed ,a.current_price price,current_meter_money money,meter_number meterNumber ,contract_meter_id meterId,b.id formId,b.chapter_number chapter, b.contract_money contractMoney,b.change_money,b.unit,contract_total ,change_total,c.sort,c.id periodId from s_inventory_form_apply a join s_contract_inventory_form b on a.contract_form_id=b.id join s_contract_meter_period c on a.contract_period_id=c.id where a.is_deleted=0 and a.approve_status=2 and a.contract_id="+contractId;
             return this.jdbcTemplate.query(paySql,new BeanPropertyRowMapper<>(Payment.class));
         };
     }
@@ -114,7 +114,7 @@ public class FormulaDaoImpl implements IFormulaDao {
     @Override
     public Function<Long, List<MeterApply>> getMeterApplyFc() {
         return   MeterPeriodId->{
-            String sql="select id,node_name,node_code,parent_id,sort from  s_meter_tree_contract where   is_deleted=0 and contract_id ="+MeterPeriodId;
+            String sql="select a.id,contract_unit_id,contract_period_id,period_number,meter_number,engineer_divide,part_name,certificate_number,meter_money,change_token_number,picture_url,picture_name,calculate_formula ,b.contract_picture from  s_middle_meter_apply a join s_meter_tree_contract b on a.contract_unit_id= b.id where a.contract_period_id="+MeterPeriodId;
             return getEntityList(sql,MeterApply.class);
         };
     }

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

@@ -2622,7 +2622,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
         /*元素创建*/
         Map<String,String> parent=  getWtpParent(meterType.getName(),contractInfo.getPId());
-        List<NodeTable> tableList=  this.getSqlList("select p_key_id pkeyId, node_name nodeName ,init_table_name initTableName,html_url htmlUrl  from  m_wbs_tree_private where ancestors like ? and LENGTH(html_url)>0 and is_deleted=0 and project_id=? and wbs_id=?",NodeTable.class,parent.get("path")+"%",contractInfo.getPId(),parent.get("wbsId"));
+        List<NodeTable> tableList=  this.getSqlList("select p_key_id pkeyId, node_name nodeName ,init_table_name initTableName,html_url htmlUrl ,excel_id  from  m_wbs_tree_private where ancestors like ? and LENGTH(html_url)>0 and is_deleted=0 and project_id=? and wbs_id=?",NodeTable.class,parent.get("path")+"%",contractInfo.getPId(),parent.get("wbsId"));
         Map<String,Map<String,String>> coordinateMap=tableList.stream().collect(Collectors.toMap(NodeTable::getInitTableName,m->FormulaUtils.getElementCell(m.getHtmlUrl()),(v1,v2)->v2));
         List<FormData> processFds = this.createFormDataByTableName(tableList.stream().map(NodeTable::getInitTableName).collect(Collectors.joining("','")));
         listForMeter(processFds,contractInfo.getPId(),parent.get("id"));