浏览代码

材料调差单修改

qianxb 1 年之前
父节点
当前提交
d0f9468d97

+ 9 - 9
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractMaterialAdjustController.java

@@ -20,25 +20,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
 import org.springblade.meter.dto.ContractMaterialAdjustAddDTO;
 import org.springblade.meter.dto.ContractMaterialDTO2;
-import org.springblade.meter.entity.AttachmentForm;
-import org.springblade.meter.entity.ContractMaterial;
+import org.springblade.meter.entity.ContractMaterialAdjust;
 import org.springblade.meter.entity.ContractMaterialAdjustDetail;
-import org.springblade.meter.service.IAttachmentFormService;
 import org.springblade.meter.service.IContractMaterialAdjustService;
 import org.springblade.meter.vo.ContractMaterialAdjustVO;
 import org.springblade.meter.vo.MaterialAdjustDetailVO;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
-import javax.validation.groups.Default;
 
 import javax.validation.Valid;
 import java.util.List;
@@ -106,5 +98,13 @@ public class ContractMaterialAdjustController extends BladeController {
         return R.success("删除成功");
     }
 
+    @PostMapping("/material-adjust-calculate")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "材料明细-计算调差数量与金额", notes = "传入传入市场价,基准价,价差幅度,材料明细集合,返回调差数量,调差金额,调差计算式")
+    public R<ContractMaterialAdjust> materialAdjustCalculate(@Valid @RequestBody ContractMaterialAdjustAddDTO dto) {
+        ContractMaterialAdjust adjust = adjustService.MaterialAdjustCalculateDTO(dto);
+        return R.data(adjust);
+    }
+
 
 }

+ 2 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IContractMaterialAdjustService.java

@@ -20,14 +20,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.meter.dto.ContractMaterialAdjustAddDTO;
 import org.springblade.meter.dto.ContractMaterialDTO2;
-import org.springblade.meter.entity.AttachmentForm;
 import org.springblade.meter.entity.ContractMaterialAdjust;
 import org.springblade.meter.entity.ContractMaterialAdjustDetail;
 import org.springblade.meter.vo.ContractMaterialAdjustVO;
 import org.springblade.meter.vo.MaterialAdjustDetailVO;
 
 import java.util.List;
-import java.util.Set;
 
 /**
  * 附件表 服务类
@@ -49,4 +47,6 @@ public interface IContractMaterialAdjustService extends BaseService<ContractMate
     void update2(ContractMaterialAdjustAddDTO dto);
 
     void delete(Long id);
+
+    ContractMaterialAdjust MaterialAdjustCalculateDTO(ContractMaterialAdjustAddDTO dto);
 }

+ 55 - 57
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractMaterialAdjustServiceImpl.java

@@ -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());
+    }
 }