Selaa lähdekoodia

计量-材料调差价差幅度规则与小数格式

qianxb 1 vuosi sitten
vanhempi
commit
c1b4cb6b28

+ 60 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ContractMaterialAdjust.java

@@ -29,7 +29,7 @@ import java.time.LocalDate;
 import java.time.YearMonth;
 
 /**
- * 合同材料表实体类
+ * 合同材料调差表实体类
  *
  * @author BladeX
  * @since 2023-11-29
@@ -113,4 +113,63 @@ public class ContractMaterialAdjust extends BaseEntity {
     @ApiModelProperty(value = "审批状态:0未完成1已完成(此处根据计量期状态)")
     private Integer approveStatus;
 
+    public BigDecimal getCurrentPrice() {
+        if (currentPrice == null){
+            return null;
+        }else {
+            return new BigDecimal(currentPrice.stripTrailingZeros().toPlainString());
+        }
+    }
+
+    public void setCurrentPrice(BigDecimal currentPrice) {
+        this.currentPrice = new BigDecimal(currentPrice.stripTrailingZeros().toPlainString());
+    }
+
+    public BigDecimal getMaterialPrice() {
+        if (materialPrice == null){
+            return null;
+        }else {
+            return new BigDecimal(materialPrice.stripTrailingZeros().toPlainString());
+        }
+    }
+
+    public void setMaterialPrice(BigDecimal materialPrice) {
+        this.materialPrice = new BigDecimal(materialPrice.stripTrailingZeros().toPlainString());
+    }
+
+    public BigDecimal getRangePriceRatio() {
+        if (rangePriceRatio == null){
+            return null;
+        }else {
+            return new BigDecimal(rangePriceRatio.stripTrailingZeros().toPlainString());
+        }
+    }
+
+    public void setRangePriceRatio(BigDecimal rangePriceRatio) {
+        this.rangePriceRatio = new BigDecimal(rangePriceRatio.stripTrailingZeros().toPlainString());
+    }
+
+    public BigDecimal getAdjustTotal() {
+        if (adjustTotal == null){
+            return null;
+        }else {
+            return new BigDecimal(adjustTotal.stripTrailingZeros().toPlainString());
+        }
+    }
+
+    public void setAdjustTotal(BigDecimal adjustTotal) {
+        this.adjustTotal = new BigDecimal(adjustTotal.stripTrailingZeros().toPlainString());
+    }
+
+    public BigDecimal getAdjustMoney() {
+        if (adjustMoney == null){
+            return null;
+        }else {
+            return new BigDecimal(adjustMoney.stripTrailingZeros().toPlainString());
+        }
+    }
+
+    public void setAdjustMoney(BigDecimal adjustMoney) {
+        this.adjustMoney =  new BigDecimal(adjustMoney.stripTrailingZeros().toPlainString());
+    }
 }

+ 42 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ContractMaterialAdjustDetail.java

@@ -81,11 +81,52 @@ public class ContractMaterialAdjustDetail extends BaseEntity {
     @ApiModelProperty(value = "调差数量")
     private BigDecimal adjustTotal;
 
+    public BigDecimal getChangeTotal() {
+        if (changeTotal == null){
+            return null;
+        }else {
+            return new BigDecimal(changeTotal.stripTrailingZeros().toPlainString());
+        }
+
+    }
+
+    public void setChangeTotal(BigDecimal changeTotal) {
+        this.changeTotal = new BigDecimal(changeTotal.stripTrailingZeros().toPlainString());
+    }
+
+    public BigDecimal getAdjustFactor() {
+        if (adjustFactor == null){
+            return null;
+        }else {
+            return new BigDecimal(adjustFactor.stripTrailingZeros().toPlainString());
+        }
+    }
+
+    public void setAdjustFactor(BigDecimal adjustFactor) {
+        this.adjustFactor = new BigDecimal(adjustFactor.stripTrailingZeros().toPlainString());
+    }
+
     public BigDecimal getMeterTotal() {
-        return new BigDecimal(meterTotal.stripTrailingZeros().toPlainString());
+        if (meterTotal == null){
+            return null;
+        }else {
+            return new BigDecimal(meterTotal.stripTrailingZeros().toPlainString());
+        }
     }
 
     public void setMeterTotal(BigDecimal meterTotal) {
         this.meterTotal = new BigDecimal(meterTotal.stripTrailingZeros().toPlainString());
     }
+
+    public BigDecimal getAdjustTotal() {
+        if (adjustTotal == null){
+            return null;
+        }else {
+            return new BigDecimal(adjustTotal.stripTrailingZeros().toPlainString());
+        }
+    }
+
+    public void setAdjustTotal(BigDecimal adjustTotal) {
+        this.adjustTotal =  new BigDecimal(adjustTotal.stripTrailingZeros().toPlainString());
+    }
 }

+ 11 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormMaterial.java

@@ -58,4 +58,15 @@ public class InventoryFormMaterial extends BaseEntity {
     @ApiModelProperty(value = "调差系数")
     private BigDecimal adjustFactor;
 
+    public BigDecimal getAdjustFactor() {
+        if (adjustFactor == null){
+            return null;
+        }else {
+            return new BigDecimal(adjustFactor.stripTrailingZeros().toPlainString());
+        }
+    }
+
+    public void setAdjustFactor(BigDecimal adjustFactor) {
+        this.adjustFactor = new BigDecimal(adjustFactor.stripTrailingZeros().toPlainString());
+    }
 }

+ 12 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/GetLinkAllFormVO.java

@@ -31,4 +31,16 @@ public class GetLinkAllFormVO {
 
     @ApiModelProperty(value = "是否被引用0否1是,被引用后不允许取消")
     private Integer isQuote;
+
+    public BigDecimal getAdjustFactor() {
+        if (adjustFactor == null){
+            return null;
+        }else {
+            return new BigDecimal(adjustFactor.stripTrailingZeros().toPlainString());
+        }
+    }
+
+    public void setAdjustFactor(BigDecimal adjustFactor) {
+        this.adjustFactor = new BigDecimal(adjustFactor.stripTrailingZeros().toPlainString());
+    }
 }

+ 11 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/GetMaterialCurrentPriceVO.java

@@ -41,4 +41,15 @@ public class GetMaterialCurrentPriceVO {
     @ApiModelProperty(value = "结束日期")
     private LocalDate endDate;
 
+    public BigDecimal getCurrentPrice() {
+        if (currentPrice == null){
+            return null;
+        }else {
+            return new BigDecimal(currentPrice.stripTrailingZeros().toPlainString());
+        }
+    }
+
+    public void setCurrentPrice(BigDecimal currentPrice) {
+        this.currentPrice = new BigDecimal(currentPrice.stripTrailingZeros().toPlainString());
+    }
 }

+ 1 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractMaterialMapper.xml

@@ -73,7 +73,7 @@
                         <if test="dto.id != null">
                             and cma.id != #{dto.id}
                         </if>
-                                                                                       )
+                        )
     </select>
 
 

+ 11 - 4
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractMaterialAdjustServiceImpl.java

@@ -232,6 +232,7 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
      * 生成材料调差计算式
      */
     private void buildCalculation(ContractMaterialAdjustAddDTO dto,BigDecimal adjustTotal,ContractMaterialAdjust adjust){
+        adjust.setAdjustTotal(adjustTotal);
         //获取材料信息,用于调差范围
         ContractMaterial material= baseMapper.getMaterialInfo(dto.getContractMaterialId());
         if (material == null){
@@ -243,22 +244,28 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
         StringBuilder str = new StringBuilder("调差价格依据于:"+dto.getMaterialName()+
                 "("+validity.getStartDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))+"至"+
                 validity.getEndDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))+")\n");
+        /** 如果价差幅度小于调差限额,则调差金额为0*/
+        if (dto.getRangePriceRatio().abs().compareTo(material.getQuotaRatio()) < 0){
+            String st = "调差公式(标准):调差金额=0,"+dto.getRangePriceRatio()+"% <= ±"+material.getQuotaRatio()+"%";
+            adjust.setAdjustMoney(BigDecimal.ZERO);
+            adjust.setAdjustCalculation(st);
+            return ;
+        }
         BigDecimal adjustMoney = BigDecimal.ZERO;
         BigDecimal price = dto.getMaterialPrice();
         BigDecimal currentPrice = dto.getCurrentPrice();
         if (price.compareTo(currentPrice) == 1){
             //市场价低于基准价
             adjustMoney = adjustTotal.multiply(currentPrice.subtract((price.multiply(new BigDecimal(1).subtract(material.getQuotaRatio().multiply(new BigDecimal("0.01"))))))).multiply(new BigDecimal("1.09")).setScale(2, RoundingMode.HALF_UP);
-            str.append("调差公式(标准):调增金额=调差数量×[市场价-基准价×(1-风险幅度差%)]×(1+合同增值税税率)\n");
+            str.append("调差公式(标准)调增金额=调差数量×[市场价-基准价×(1-风险幅度差%)]×(1+合同增值税税率)\n");
             str.append("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1-"+material.getQuotaRatio()+"%)]*(1+9.0/100)");
         }else {
             //市场价高于基准价
             adjustMoney = adjustTotal.multiply(currentPrice.subtract((price.multiply(new BigDecimal(1).add(material.getQuotaRatio().multiply(new BigDecimal("0.01"))))))).multiply(new BigDecimal("1.09")).setScale(2, RoundingMode.HALF_UP);
-            str.append("调差公式(标准):调增金额=调差数量×[市场价-基准价×(1+风险幅度差%)]×(1+合同增值税税率)\n");
+            str.append("调差公式(标准)调增金额=调差数量×[市场价-基准价×(1+风险幅度差%)]×(1+合同增值税税率)\n");
             str.append("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1+"+material.getQuotaRatio()+"%)]*(1+9.0/100)");
         }
-        adjust.setAdjustMoney(adjustMoney);
-        adjust.setAdjustTotal(adjustTotal);
+        adjust.setAdjustMoney(adjustMoney.setScale(0,RoundingMode.HALF_UP));
         adjust.setAdjustCalculation(str.toString());
     }
 }

+ 1 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractMaterialValidityServiceImpl.java

@@ -168,7 +168,7 @@ public class ContractMaterialValidityServiceImpl extends BaseServiceImpl<Contrac
         }
         Map<String, Object> map = new HashMap<>();
         BigDecimal decimal = currentPrice.subtract(price).multiply(new BigDecimal(100)).divide(price, 2, RoundingMode.DOWN);
-        map.put("rangePriceRatio",decimal);
+        map.put("rangePriceRatio",decimal.stripTrailingZeros().toPlainString());
         map.put("adjustCalculation",str.toString());
         if (decimal.compareTo(quotaRatio.negate()) == 1 && decimal.compareTo(quotaRatio) == -1){
             map.put("isAdjust",0);