浏览代码

材料调差

yangyj 1 年之前
父节点
当前提交
b96e069abb

+ 22 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MaterialAdjust.java

@@ -0,0 +1,22 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author yangyj
+ * @Date 2024/5/11 11:27
+ * @description 调差信息
+ */
+@Data
+public class MaterialAdjust {
+    /**调差材料名称*/
+    private String materialName;
+    /**调差金额*/
+    private BigDecimal adjustMoney;
+    /**中期计量期Id*/
+    private Long       periodId;
+    /**计量期排序*/
+    private Integer   sort;
+}

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

@@ -41,6 +41,8 @@ public class MeterInfo {
     List<StartPayForm> startPayFormAll;
     /**变更令,按照计量清单  */
     LinkedHashMap<Integer,List<ChangeToken>> changeTokenListMap;
+    /**合同段材料调差信息*/
+    LinkedHashMap<Integer,List<MaterialAdjust>> MaterialAdjustListMap;
     /**合同段所有支付项信息*/
     List<MidPayItem> midPayItemList;
     /**支付信息*/

+ 38 - 17
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java

@@ -2,6 +2,7 @@ package org.springblade.manager.formula.impl;
 
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.StringUtils;
+import kotlin.ranges.IntRange;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.common.utils.BaseUtils;
@@ -14,10 +15,13 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
+import java.util.function.BiFunction;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 /**
  * @author yangyj
@@ -40,6 +44,8 @@ public class ExecutorInit extends FormulaExecutor {
     private Function<Long,List<ChangeToken>> changeTokenFc;
     private Function<Long, List<Payment>> paymentListFc;
     private Function<Long, List<InventoryForm>> inventoryFormFc;
+    private Function<Long, List<MaterialAdjust>> materialAdjustFc;
+
 
     public static final String SZ="[ 一二三四五六七八九十]+";
 
@@ -83,6 +89,8 @@ public class ExecutorInit extends FormulaExecutor {
             startInfo();
             //变更令部分
             changeToken();
+            /*材料调差*/
+            materialAdjust();
             tec.meterInfo.setPaymentList(paymentListFc.apply(tec.getContractId()));
             /*合同工程清单*/
             tec.meterInfo.setInventoryForms(CompletableFuture.supplyAsync(() ->  inventoryFormFc.apply(tec.getContractId())));
@@ -148,10 +156,35 @@ public class ExecutorInit extends FormulaExecutor {
         }
     }
 
+    BiFunction<List<ChangeToken>,Predicate<ChangeToken>,List<ChangeToken>>
+            changeTokenPick = (a,b)-> a.stream().filter(b).collect(Collectors.toList());
+
     private void changeToken(){
         List<ChangeToken> changeTokenList = changeTokenFc.apply(tec.getContractId());
         if(changeTokenList.size()>0){
-            tec.meterInfo.setChangeTokenListMap(changeTokenList.stream().collect(Collectors.groupingBy(changeTokenPick,LinkedHashMap::new,Collectors.toList())));
+            MeterPeriodInfo periodInfo =tec.periodInfo;
+            LinkedHashMap<Integer,List<ChangeToken>>changeTokenListMap = new LinkedHashMap<>();
+            changeTokenListMap.put(MeterInfo.PRE,changeTokenPick.apply(changeTokenList,token -> token.getChangeApprovalDate().isBefore(periodInfo.getStartDate())));
+            changeTokenListMap.put(MeterInfo.CUR,changeTokenPick.apply(changeTokenList,token -> (periodInfo.getStartDate().isBefore(token.getChangeApprovalDate())
+                    && !periodInfo.getEndDate().isBefore(token.getChangeApprovalDate()))));
+            changeTokenListMap.put(MeterInfo.END,changeTokenPick.apply(changeTokenList,token -> token.getChangeApprovalDate().isBefore(periodInfo.getEndDate())));
+            tec.meterInfo.setChangeTokenListMap(changeTokenListMap);
+        }
+    }
+
+    BiFunction< LinkedHashMap<Integer,List<MaterialAdjust>>, Predicate<Map.Entry<Integer,List<MaterialAdjust>>>, List<MaterialAdjust>>
+            materialAdjustPick = (a,b)-> a.entrySet().stream().filter(b).flatMap(kv->kv.getValue().stream()).collect(Collectors.toList());
+
+    private void materialAdjust(){
+        List<MaterialAdjust> materialAdjustList = materialAdjustFc.apply(tec.getContractId());
+        if(materialAdjustList.size()>0){
+            LinkedHashMap<Integer,List<MaterialAdjust>> tmp = materialAdjustList.stream().collect(Collectors.groupingBy(MaterialAdjust::getSort,LinkedHashMap::new,Collectors.toList()));
+            int sort = tec.periodInfo.getSort();
+            LinkedHashMap<Integer,List<MaterialAdjust>>materialAdjustListMap = new LinkedHashMap<>();
+            materialAdjustListMap.put(MeterInfo.PRE,materialAdjustPick.apply(tmp,kv->kv.getKey()<sort));
+            materialAdjustListMap.put(MeterInfo.CUR,materialAdjustPick.apply(tmp,kv->kv.getKey()==sort));
+            materialAdjustListMap.put(MeterInfo.END,materialAdjustPick.apply(tmp,kv->kv.getKey()<=sort));
+            tec.meterInfo.setMaterialAdjustListMap(materialAdjustListMap);
         }
     }
 
@@ -178,27 +211,15 @@ public class ExecutorInit extends FormulaExecutor {
                         .collect(Collectors.toList());
             case 2:
                 return changeTokenList.stream()
-                        .filter(token -> !token.getChangeApprovalDate().isAfter(periodInfo.getEndDate()))
+                        .filter(token -> token.getChangeApprovalDate().isBefore(periodInfo.getEndDate()))
                         .collect(Collectors.toList());
             default:
                 throw new IllegalArgumentException("Unsupported type: " + type);
         }
     }
 
-    /**根据日期对变更令分类*/
-    Function<ChangeToken,Integer> changeTokenPick=token->{
-        int result =-1;
-        if(token.getChangeApprovalDate().isBefore(tec.periodInfo.getStartDate())){
-            /*上期末*/
-            result=MeterInfo.PRE;
-        }else if(tec.periodInfo.getStartDate().isBefore(token.getChangeApprovalDate()) && !tec.periodInfo.getEndDate().isBefore(token.getChangeApprovalDate())){
-            /*本期*/
-            result=MeterInfo.CUR;
-        }else if(!token.getChangeApprovalDate().isAfter(tec.periodInfo.getEndDate())){
-            /*本期末*/
-            result= MeterInfo.END;
-        }
-        return result;
-    };
+
+
+
 
 }

+ 10 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -490,7 +490,16 @@ public class ExecutorMeter extends FormulaExecutor {
                      addGetSetConfig(xj,summaryConfigMap,InterimPaymentCertificate::getCurrentPeriodPay,xj::setCurrentPeriodPay);
                      addGetSetConfig(xj,summaryConfigMap,InterimPaymentCertificate::getCurrentPeriodChangeMoney,xj::setCurrentPeriodChangeMoney);
                      payItemZj.add(xj);
-                     payItemZj.add(new InterimPaymentCertificate("价格调整"));
+                     InterimPaymentCertificate jgtz= new InterimPaymentCertificate("价格调整");
+                     LinkedHashMap<Integer,List<MaterialAdjust>> materialAdjustMap= tec.meterInfo.getMaterialAdjustListMap();
+                     /*材料调差*/
+                     if(materialAdjustMap!=null) {
+                         Function<Integer, String> countFc = category -> materialAdjustMap.get(category).stream().map(MaterialAdjust::getAdjustMoney).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
+                         jgtz.setPreviousPeriodEndPay(countFc.apply(MeterInfo.PRE));
+                         jgtz.setCurrentPeriodPay(countFc.apply(MeterInfo.CUR));
+                         jgtz.setCurrentPeriodEndPay(countFc.apply(MeterInfo.END));
+                     }
+                     payItemZj.add(jgtz);
                      InterimPaymentCertificate hj = new InterimPaymentCertificate("合计");
                      addGetSetConfig(hj,summaryConfigMap,InterimPaymentCertificate::getCurrentPeriodEndPay,hj::setCurrentPeriodEndPay);
                      addGetSetConfig(hj,summaryConfigMap,InterimPaymentCertificate::getPreviousPeriodEndPay,hj::setPreviousPeriodEndPay);

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

@@ -37,4 +37,6 @@ public interface IFormulaDao {
     Function<Long, List<ChangeTokenForm>> getChangeTokenFormFc();
     /**获取变更令,按照每条清单*/
     Function<Long, List<ChangeToken>> getChangeTokenFc();
+    /**获取材料调差新*/
+    Function<Long, List<MaterialAdjust>> getMaterialAdjustFc();
 }

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

@@ -192,6 +192,15 @@ public class FormulaDaoImpl implements IFormulaDao {
         };
     }
 
+    @Override
+    public Function<Long, List<MaterialAdjust>> getMaterialAdjustFc() {
+        return  contractId->{
+            String sql="select a.adjust_money,a.material_name,b.id periodId,b.sort from s_contract_material_adjust a join  s_contract_meter_period b on a.contract_period_id=  b.id  " +
+                    "where a.contract_id="+contractId+" and a.approve_status=2 and a.is_deleted=0";
+            return getEntityList(sql,MaterialAdjust.class);
+        };
+    }
+
     public <T> List<T> getEntityList(String sql, Class<T> entityClass) {
         return  jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(entityClass));
     }