|
@@ -26,7 +26,6 @@ import org.springblade.core.mp.base.BaseServiceImpl;
|
|
|
import org.springblade.meter.dto.ContractMaterialAdjustAddDTO;
|
|
|
import org.springblade.meter.dto.ContractMaterialDTO2;
|
|
|
import org.springblade.meter.entity.*;
|
|
|
-import org.springblade.meter.mapper.AttachmentFormMapper;
|
|
|
import org.springblade.meter.mapper.ContractMaterialAdjustMapper;
|
|
|
import org.springblade.meter.service.*;
|
|
|
import org.springblade.meter.vo.ContractMaterialAdjustVO;
|
|
@@ -39,7 +38,6 @@ import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.List;
|
|
|
-import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -65,13 +63,6 @@ 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());
|
|
|
/*保存材料调差单*/
|
|
|
ContractMaterialAdjust adjust = new ContractMaterialAdjust();
|
|
|
BeanUtils.copyProperties(dto,adjust);
|
|
@@ -92,26 +83,7 @@ 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 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("调差公式(计算):"+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("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1+"+material.getQuotaRatio()+"%)]*(1+9.0/100)");
|
|
|
- }
|
|
|
- adjust.setAdjustTotal(adjustTotal);
|
|
|
- adjust.setAdjustMoney(adjustMoney);
|
|
|
- adjust.setAdjustCalculation(str.toString());
|
|
|
+ this.buildCalculation(dto,adjustTotal,adjust);
|
|
|
this.save(adjust);
|
|
|
|
|
|
/*保存附件信息*/
|
|
@@ -174,13 +146,6 @@ 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());
|
|
|
/*保存材料调差单*/
|
|
|
ContractMaterialAdjust adjust = new ContractMaterialAdjust();
|
|
|
BeanUtils.copyProperties(dto,adjust);
|
|
@@ -203,29 +168,9 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
|
|
|
adjustDetailService.saveBatch(details);
|
|
|
}
|
|
|
//计算调差金额,生成计算式
|
|
|
- StringBuilder str = new StringBuilder("调差价格依据于:"+dto.getMaterialName()+
|
|
|
- "("+validity.getStartDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))+"至"+
|
|
|
- validity.getEndDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))+")\n");
|
|
|
- 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("调差公式(计算):"+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("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1+"+material.getQuotaRatio()+"%)]*(1+9.0/100)");
|
|
|
- }
|
|
|
- adjust.setAdjustMoney(adjustMoney);
|
|
|
- adjust.setAdjustTotal(adjustTotal);
|
|
|
- adjust.setAdjustCalculation(str.toString());
|
|
|
+ this.buildCalculation(dto,adjustTotal,adjust);
|
|
|
this.updateById(adjust);
|
|
|
|
|
|
-
|
|
|
/*保存附件信息*/
|
|
|
//先删除再清空id
|
|
|
attachmentFormService.remove(new LambdaQueryWrapper<AttachmentForm>()
|
|
@@ -260,4 +205,57 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
|
|
|
this.removeById(id);
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ContractMaterialAdjust MaterialAdjustCalculateDTO(ContractMaterialAdjustAddDTO dto) {
|
|
|
+ List<ContractMaterialAdjustDetail> details = dto.getDetails();
|
|
|
+ if (details.size() == 0){
|
|
|
+ throw new ServiceException("没有材料明细数据,无法计算");
|
|
|
+ }
|
|
|
+ ContractMaterialAdjust adjust = new ContractMaterialAdjust();
|
|
|
+ BigDecimal adjustTotal = BigDecimal.ZERO;
|
|
|
+ for (ContractMaterialAdjustDetail detail : details) {
|
|
|
+ if (detail.getChangeTotal() == null){
|
|
|
+ throw new ServiceException("请填写["+detail.getFormName()+"]可调量");
|
|
|
+ }
|
|
|
+ detail.setAdjustTotal(detail.getChangeTotal().multiply(detail.getAdjustFactor()).setScale(3,RoundingMode.HALF_UP));
|
|
|
+ adjustTotal = adjustTotal.add(detail.getAdjustTotal());
|
|
|
+ }
|
|
|
+ this.buildCalculation(dto,adjustTotal,adjust);
|
|
|
+ return adjust;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成材料调差计算式
|
|
|
+ */
|
|
|
+ private void buildCalculation(ContractMaterialAdjustAddDTO dto,BigDecimal adjustTotal,ContractMaterialAdjust adjust){
|
|
|
+ //获取材料信息,用于调差范围
|
|
|
+ ContractMaterial material= baseMapper.getMaterialInfo(dto.getContractMaterialId());
|
|
|
+ if (material == null){
|
|
|
+ throw new ServiceException("未获取到材料信息");
|
|
|
+ }
|
|
|
+ //获取材料有效期
|
|
|
+ ContractMaterialValidity validity = validityService.getById(dto.getMaterialValidityId());
|
|
|
+ //计算调差金额,生成计算式
|
|
|
+ StringBuilder str = new StringBuilder("调差价格依据于:"+dto.getMaterialName()+
|
|
|
+ "("+validity.getStartDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))+"至"+
|
|
|
+ validity.getEndDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))+")\n");
|
|
|
+ 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("调差公式(计算):"+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("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1+"+material.getQuotaRatio()+"%)]*(1+9.0/100)");
|
|
|
+ }
|
|
|
+ adjust.setAdjustMoney(adjustMoney);
|
|
|
+ adjust.setAdjustTotal(adjustTotal);
|
|
|
+ adjust.setAdjustCalculation(str.toString());
|
|
|
+ }
|
|
|
}
|