|
@@ -65,6 +65,11 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public void add(ContractMaterialAdjustAddDTO dto) {
|
|
|
+ //获取材料信息,用于调差范围
|
|
|
+ ContractMaterial material= baseMapper.getMaterialInfo(dto.getContractMaterialId());
|
|
|
+ if (material == null){
|
|
|
+ throw new ServiceException("未获取到材料信息");
|
|
|
+ }
|
|
|
//获取材料有效期
|
|
|
ContractMaterialValidity validity = validityService.getById(dto.getMaterialValidityId());
|
|
|
/*保存材料调差单*/
|
|
@@ -95,14 +100,14 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
|
|
|
BigDecimal currentPrice = dto.getCurrentPrice();
|
|
|
if (price.compareTo(currentPrice) == 1){
|
|
|
//市场价低于基准价
|
|
|
- adjustMoney = adjustTotal.multiply(currentPrice.subtract((price.multiply(new BigDecimal(1).add(dto.getRangePriceRatio().abs().divide(new BigDecimal(100))))))).multiply(new BigDecimal(1.09)).setScale(2, RoundingMode.DOWN);
|
|
|
+ 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("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1+"+dto.getRangePriceRatio().abs()+"%)]*(1+9.0/100)");
|
|
|
+ str.append("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1-"+dto.getRangePriceRatio().abs()+"%)]*(1+9.0/100)");
|
|
|
}else {
|
|
|
//市场价高于基准价
|
|
|
- adjustMoney = adjustTotal.multiply(currentPrice.subtract((price.multiply(new BigDecimal(1).add(dto.getRangePriceRatio().divide(new BigDecimal(100))))))).multiply(new BigDecimal(1.09)).setScale(2, RoundingMode.DOWN);
|
|
|
+ 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("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1-"+dto.getRangePriceRatio()+"%)]*(1+9.0/100)");
|
|
|
+ str.append("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1+"+dto.getRangePriceRatio()+"%)]*(1+9.0/100)");
|
|
|
}
|
|
|
adjust.setAdjustTotal(adjustTotal);
|
|
|
adjust.setAdjustMoney(adjustMoney);
|
|
@@ -169,6 +174,11 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public void update2(ContractMaterialAdjustAddDTO dto) {
|
|
|
+ //获取材料信息,用于调差范围
|
|
|
+ ContractMaterial material= baseMapper.getMaterialInfo(dto.getContractMaterialId());
|
|
|
+ if (material == null){
|
|
|
+ throw new ServiceException("未获取到材料信息");
|
|
|
+ }
|
|
|
//获取材料有效期
|
|
|
ContractMaterialValidity validity = validityService.getById(dto.getMaterialValidityId());
|
|
|
/*保存材料调差单*/
|
|
@@ -196,19 +206,21 @@ 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");
|
|
|
- BigDecimal adjustMoney;
|
|
|
+ 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).add(dto.getRangePriceRatio().abs().divide(new BigDecimal(100))))))).multiply(new BigDecimal(1.09)).setScale(2, RoundingMode.DOWN);
|
|
|
+ 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.DOWN);
|
|
|
str.append("调差公式(标准):调增金额=调差数量×[市场价-基准价×(1-风险幅度差%)]×(1+合同增值税税率)\n");
|
|
|
- str.append("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1+"+dto.getRangePriceRatio().abs()+"%)]*(1+9.0/100)");
|
|
|
+ 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(dto.getRangePriceRatio().divide(new BigDecimal(100))))))).multiply(new BigDecimal(1.09)).setScale(2, RoundingMode.DOWN);
|
|
|
+ BigDecimal b1 = new BigDecimal(1).add(material.getQuotaRatio().multiply(new BigDecimal("0.01"))).setScale(3, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal b2 = price.multiply(b1).setScale(3, RoundingMode.HALF_UP);
|
|
|
+ adjustMoney = adjustTotal.multiply(currentPrice.subtract(b2)).multiply(new BigDecimal("1.09")).setScale(2, RoundingMode.HALF_UP);
|
|
|
str.append("调差公式(标准):调增金额=调差数量×[市场价-基准价×(1+风险幅度差%)]×(1+合同增值税税率)\n");
|
|
|
- str.append("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1-"+dto.getRangePriceRatio()+"%)]*(1+9.0/100)");
|
|
|
+ str.append("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1+"+material.getQuotaRatio()+"%)]*(1+9.0/100)");
|
|
|
}
|
|
|
adjust.setAdjustMoney(adjustMoney);
|
|
|
adjust.setAdjustTotal(adjustTotal);
|
|
@@ -241,6 +253,9 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
|
|
|
}
|
|
|
//获取合同计量期,判断是否已经审批
|
|
|
ContractMeterPeriod period = contractMeterPeriodService.getById(adjust.getMeterPeriodId());
|
|
|
+ if (period == null){
|
|
|
+ throw new ServiceException("删除失败,未获取到当前计量期信息");
|
|
|
+ }
|
|
|
if (period.getApproveStatus() != 0){
|
|
|
throw new ServiceException("删除失败,当前计量期不是未上报状态");
|
|
|
}
|