浏览代码

材料调差2

qianxb 1 年之前
父节点
当前提交
363b00e34f

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MaterialListDTO.java

@@ -13,6 +13,9 @@ import javax.validation.constraints.NotNull;
 @Data
 public class MaterialListDTO {
 
+    @ApiModelProperty(value = "调差单id,用于回显排除自己")
+    private Long id;
+
     @ApiModelProperty(value = "合同段id")
     @NotNull(message = "未获取到合同段id!")
     private Long contractId;

+ 4 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractMaterialAdjustMapper.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
 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.vo.ContractMaterialAdjustVO;
@@ -43,4 +44,7 @@ public interface ContractMaterialAdjustMapper extends BaseMapper<ContractMateria
     IPage<ContractMaterialAdjustVO> page2(IPage<ContractMaterialAdjustVO> iPage,@Param("dto") ContractMaterialDTO2 dto);
 
     MaterialAdjustDetailVO detail(@Param("id") Long id);
+
+    //根据材料id,获取材料信息
+    ContractMaterial getMaterialInfo(@Param("id") Long contractMaterialId);
 }

+ 3 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractMaterialAdjustMapper.xml

@@ -33,4 +33,7 @@
                (select end_date from s_contract_material_validity cmv where cmv.id = cma.material_validity_id ) as endDate
         from s_contract_material_adjust cma where id = #{id}
     </select>
+    <select id="getMaterialInfo" resultType="org.springblade.meter.entity.ContractMaterial">
+        select * from s_contract_material where id = #{id}
+    </select>
 </mapper>

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

@@ -68,7 +68,11 @@
         select id,material_number,material_name,unit,price
         from s_contract_material where is_deleted = 0 and contract_id = #{dto.contractId}
         and id not in (select contract_material_id from s_contract_material_adjust cma where cma.is_deleted = 0
-                                and cma.contract_id = #{dto.contractId} and cma.contract_period_id = #{dto.contractPeriodId})
+                                and cma.contract_id = #{dto.contractId} and cma.contract_period_id = #{dto.contractPeriodId}
+                        <if test="dto.id != null">
+                            and cma.id != #{dto.id}
+                        </if>
+                                                                                       )
     </select>
 
 

+ 24 - 9
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractMaterialAdjustServiceImpl.java

@@ -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("删除失败,当前计量期不是未上报状态");
         }