yangyj 1 år sedan
förälder
incheckning
a093341407

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

@@ -15,8 +15,16 @@ public class MaterialAdjust {
     private String materialName;
     /**调差金额*/
     private BigDecimal adjustMoney;
+    /**调差金额*/
+    private BigDecimal adjustTotal;
+    /**调差金额*/
+    private BigDecimal materialPrice;
+    /**调差金额*/
+    private BigDecimal currentPrice;
+    /**调差金额*/
+    private String unit;
     /**中期计量期Id*/
-    private Long       periodId;
+    private Long      periodId;
     /**计量期排序*/
     private Integer   sort;
 }

+ 47 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -232,7 +232,7 @@ public class ExecutorMeter extends FormulaExecutor {
             this.specialList.add(new MaterialSp());
             this.specialList.add(new MaterialsArrivalSp());
         }else if(MeterType.INTERIM.equals(tec.getMeterType())){
-            this.specialList.add(new MaterialSp());
+            this.specialList.add(new MaterialInterimSp());
             /*材料*/
             this.specialList.add(new MaterialsArrivalSp());
             /*中期支付证书*/
@@ -503,6 +503,45 @@ public class ExecutorMeter extends FormulaExecutor {
     }
     @Data
     @EqualsAndHashCode(callSuper = true)
+    public  class MaterialInterimSp extends   BaseSpecial<MaterialPriceDifferential> implements Special{
+        /*永久性工程材料差价金额一览表*/
+        @Override
+        public boolean ready() {
+            return MeterInfo.MB_ZJ.equals(tec.getMeterInfo().getTemplate());
+        }
+
+        @Override
+        public void parse() {
+            builderFormDatas(MaterialPriceDifferential.class);
+            /*本期材料*/
+            List<MaterialAdjust> materialAdjustList=tec.meterInfo.getMaterialAdjustListMap().get(MeterInfo.CUR);
+            if(materialAdjustList.size()>0){
+                for(MaterialAdjust mad:materialAdjustList){
+                    MaterialPriceDifferential mpd = new MaterialPriceDifferential();
+                    mpd.setPeriodNumber(tec.periodInfo.getPeriodNumber());
+                    mpd.setName(mad.getMaterialName());
+                    mpd.setUnit(mad.getUnit());
+                    mpd.setQuantity(mad.getAdjustTotal().toPlainString());
+                    mpd.setPriceBase(mad.getMaterialPrice().toPlainString());
+                    mpd.setPrice(mad.getCurrentPrice().toPlainString());
+                    mpd.setAmount(StringUtils.number2String(multiFc.apply(mpd.getPrice(),mpd.getQuantity()),0));
+                    mpd.setAmountBase(StringUtils.number2String(multiFc.apply(mpd.getPriceBase(),mpd.getQuantity()),0));
+                    mpd.setPriceSpread(subtractFc.apply(mpd.getPrice(),mpd.getPriceBase()));
+                    mpd.setTotal(StringUtils.number2String(mad.getAdjustMoney().toPlainString(),0));
+                    mpd.setMaterialArriveNumber(tec.periodInfo.getPayNumber());
+                    dataList.add(mpd);
+                }
+            }
+            /*每页合计*/
+            FormulaUtils.elementFindByKey(fdm,"key_14").ifPresent(fd->{
+                List<  List<MaterialPriceDifferential> > list =BaseUtils.splitList(dataList,capacity);
+                elementWriter.write(fd,list.stream().map(l->l.stream().map(MaterialPriceDifferential::getTotal).mapToDouble(Double::parseDouble).sum()).collect(Collectors.toList()));
+            });
+            putOut(MaterialPriceDifferential.class);
+        }
+    }
+    @Data
+    @EqualsAndHashCode(callSuper = true)
     public  class SupervisionCertificateSp extends   BaseSpecial<SupervisionCertificate> implements Special{
 
         private final LinkedHashMap<String,String> itemNamesMap=new LinkedHashMap<>();
@@ -818,7 +857,7 @@ public class ExecutorMeter extends FormulaExecutor {
                    hj.setQuantity(v.stream().map(e->BaseUtils.str2BigDecimal(e.getQuantity())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
                    hj.setAmount(v.stream().map(e->BaseUtils.str2BigDecimal(e.getAmount())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
                    hj.setTotal(divideFc.apply(multiFc.apply(hj.getAmount(),ratio),"100"));
-                   materialSum=hj.getTotal();
+                   materialSum=StringUtils.number2String(hj.getTotal(),0);
                    tmp.add(hj);
                    dataList.addAll(tmp);
                });
@@ -1033,9 +1072,9 @@ public class ExecutorMeter extends FormulaExecutor {
                      /*材料调差*/
                      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));
+                         jgtz.setPreviousPeriodEndPay(StringUtils.number2String(countFc.apply(MeterInfo.PRE),0));
+                         jgtz.setCurrentPeriodPay(StringUtils.number2String(countFc.apply(MeterInfo.CUR),0));
+                         jgtz.setCurrentPeriodEndPay(StringUtils.number2String(countFc.apply(MeterInfo.END),0));
                      }
                      payItemZj.add(jgtz);
                      InterimPaymentCertificate hj = new InterimPaymentCertificate("合计",true);
@@ -1209,11 +1248,11 @@ public class ExecutorMeter extends FormulaExecutor {
                      fieldGetSet(x->!x.getIsSummary(),InterimPaymentCertificate::getInvertState);
                      InterimPaymentCertificate finalBlj = blj;
                      dataList.stream().filter(e-> "合计".equals(e.getChapterSeq())).findFirst().ifPresent(t->{
-                         finalBlj.setCurrentPeriodPay(multiFc.apply(t.getCurrentPeriodPay(),"0.1"));
+                         finalBlj.setCurrentPeriodPay(StringUtils.number2String(multiFc.apply(t.getCurrentPeriodPay(),"0.1"),0));
                          if(BaseUtils.obj2DoubleZero(t.getPreviousPeriodEndPay())>0) {
-                             finalBlj.setPreviousPeriodEndPay(multiFc.apply(t.getPreviousPeriodEndPay(), "0.1"));
+                             finalBlj.setPreviousPeriodEndPay(StringUtils.number2String(multiFc.apply(t.getPreviousPeriodEndPay(), "0.1"),0));
                          }
-                         finalBlj.setCurrentPeriodEndPay(multiFc.apply(t.getCurrentPeriodEndPay(),"0.1"));
+                         finalBlj.setCurrentPeriodEndPay(addFc.apply(finalBlj.getCurrentPeriodPay(),finalBlj.getPreviousPeriodEndPay()));
                          dataList.stream().filter(e-> "实际支付".equals(e.getChapterSeq())).findFirst().ifPresent(w->{
                              w.setCurrentPeriodPay(StringUtils.number2String(subtractFc.apply(w.getCurrentPeriodPay(),finalBlj.getCurrentPeriodPay()),0));
                              if(BaseUtils.obj2DoubleZero(t.getPreviousPeriodEndPay())>0) {

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

@@ -225,8 +225,9 @@ 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.meter_period_id=  b.id  " +
-                    "where a.contract_id="+contractId+" and a.is_deleted=0";
+            String sql="select a.material_name ,a.material_price,a.current_price,a.adjust_money ,a.adjust_total,b.id periodId,b.sort,c.unit " +
+                    "from s_contract_material_adjust a join  s_contract_meter_period b on a.meter_period_id=  b.id  join s_contract_material c on a.contract_material_id =c.id  " +
+                    " where a.contract_id="+contractId+" and a.is_deleted=0";
             return getEntityList(sql,MaterialAdjust.class);
         };
     }