yangyj 11 месяцев назад
Родитель
Сommit
0aa71eb79c

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

@@ -25,6 +25,8 @@ public class MaterialAdjust {
     private String unit;
     /**中期计量期Id*/
     private Long      periodId;
+    /**调差限额百分比*/
+    private String  quotaRatio;
     /**计量期排序*/
     private Integer   sort;
 

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

@@ -531,7 +531,13 @@ public class ExecutorMeter extends FormulaExecutor {
                     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()));
+                    String base=mpd.getPriceBase();
+                    if(mad.getCurrentPrice().compareTo(mad.getMaterialPrice())>0){
+                        base=multiFc.apply(base,addFc.apply("1",mad.getQuotaRatio()));
+                    }else{
+                        base=multiFc.apply(base,subtractFc.apply("1",mad.getQuotaRatio()));
+                    }
+                    mpd.setPriceSpread(subtractFc.apply(mpd.getPrice(),base));
                     mpd.setTotal(StringUtils.number2String(multiFc.apply("0.91",mad.getAdjustMoney().toPlainString()),0));
                     mpd.setMaterialArriveNumber(tec.periodInfo.getPayNumber());
                     dataList.add(mpd);
@@ -543,8 +549,7 @@ public class ExecutorMeter extends FormulaExecutor {
                     String diffSum=dataList.stream().map(MaterialPriceDifferential::getTotal).map(BaseUtils::str2BigDecimal).reduce(BigDecimal.ZERO,BigDecimal::add).setScale(0,RoundingMode.HALF_UP).toPlainString();
                     elementWriter.write(fd,diffSum);
                     /*税金*/
-                    BigDecimal sum= materialAdjustList.stream().map(m->BaseUtils.str2BigDecimal(m.getAdjustMoney()).setScale(0,RoundingMode.HALF_UP)).reduce(BigDecimal.ZERO,BigDecimal::add);
-                    String tax=BaseUtils.str2BigDecimal(multiFc.apply(sum.toPlainString(),"0.09")).setScale(0,RoundingMode.HALF_UP).toPlainString();
+                    String tax=BaseUtils.str2BigDecimal(multiFc.apply(diffSum,"0.09")).setScale(0,RoundingMode.HALF_UP).toPlainString();
                     FormulaUtils.elementFindByKey(fdm,"key_16").ifPresent(t->{
                         elementWriter.write(t,tax);
                     });

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

@@ -225,7 +225,7 @@ public class FormulaDaoImpl implements IFormulaDao {
     @Override
     public Function<Long, List<MaterialAdjust>> getMaterialAdjustFc() {
         return  contractId->{
-            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 " +
+            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,c.quota_ratio " +
                     "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);