ソースを参照

材料调差价差幅度

qianxb 10 ヶ月 前
コミット
306c4a0a5d

+ 11 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractMaterialValidityController.java

@@ -39,6 +39,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 import java.time.YearMonth;
 import java.util.List;
+import java.util.Map;
 
 /**
  *
@@ -85,6 +86,15 @@ public class ContractMaterialValidityController extends BladeController {
 		return R.data(list);
 	}
 
+	@GetMapping("/get-material-range-price")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "材料调差-选择实时价格-确认", notes = "实时价格id,返回价差幅度与是否允许调差")
+	public R<Map<String,Object>> getMaterialRangePrice(Long priceId) {
+		Map<String,Object> map = validityService.getMaterialRangePrice(priceId);
+		return R.data(map);
+	}
+
+
+
 
-	
 }

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

@@ -19,11 +19,13 @@ package org.springblade.meter.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.meter.entity.AttachmentForm;
+import org.springblade.meter.entity.ContractMaterial;
 import org.springblade.meter.entity.ContractMaterialValidity;
 import org.springblade.meter.vo.ContractMaterialVO3;
 import org.springblade.meter.vo.ContractMaterialValidityVO;
 import org.springblade.meter.vo.GetMaterialCurrentPriceVO;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.YearMonth;
 import java.util.List;
@@ -47,4 +49,6 @@ public interface ContractMaterialValidityMapper extends BaseMapper<ContractMater
     List<ContractMaterialVO3> detail(@Param("id") Long id);
 
     List<GetMaterialCurrentPriceVO> getMaterialCurrentPrice(@Param("contractId") Long contractId,@Param("materialId") Long materialId,@Param("yearMonth") YearMonth yearMonth);
+
+    ContractMaterial getMaterial(@Param("id") Long materialId);
 }

+ 5 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractMaterialValidityMapper.xml

@@ -35,4 +35,9 @@
         </if>
         order by end_date desc
     </select>
+    <select id="getMaterial" resultType="org.springblade.meter.entity.ContractMaterial">
+        select * from s_contract_material where id = #{id}
+    </select>
+
+
 </mapper>

+ 3 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IContractMaterialValidityService.java

@@ -26,6 +26,7 @@ import org.springblade.meter.vo.GetMaterialCurrentPriceVO;
 
 import java.time.YearMonth;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -44,4 +45,6 @@ public interface IContractMaterialValidityService extends BaseService<ContractMa
     List<ContractMaterialVO3> detail(Long id);
 
     List<GetMaterialCurrentPriceVO> getMaterialCurrentPrice(Long contractId, Long materialId, YearMonth yearMonth);
+
+    Map<String, Object> getMaterialRangePrice( Long priceId);
 }

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

@@ -24,9 +24,11 @@ import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.dto.ContractMaterialValidityDTO;
 import org.springblade.meter.entity.AttachmentForm;
+import org.springblade.meter.entity.ContractMaterial;
 import org.springblade.meter.entity.ContractMaterialPrice;
 import org.springblade.meter.entity.ContractMaterialValidity;
 import org.springblade.meter.mapper.AttachmentFormMapper;
+import org.springblade.meter.mapper.ContractMaterialMapper;
 import org.springblade.meter.mapper.ContractMaterialValidityMapper;
 import org.springblade.meter.service.IAttachmentFormService;
 import org.springblade.meter.service.IContractMaterialPriceService;
@@ -38,11 +40,11 @@ import org.springblade.meter.vo.GetMaterialCurrentPriceVO;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.YearMonth;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 附件表 服务实现类
@@ -57,6 +59,7 @@ public class ContractMaterialValidityServiceImpl extends BaseServiceImpl<Contrac
     private final IContractMaterialPriceService priceService;
 
 
+
     @Override
     public List<ContractMaterialValidityVO> list2(Long projectId,Long contractId) {
         //获取合同下所有数据
@@ -133,11 +136,42 @@ public class ContractMaterialValidityServiceImpl extends BaseServiceImpl<Contrac
         return vos;
     }
 
+    @Override
+    public Map<String, Object> getMaterialRangePrice( Long priceId) {
+        //获取材料实时价格
+        ContractMaterialPrice validity = priceService.getById(priceId);
+        BigDecimal currentPrice = validity.getCurrentPrice();
+        //获取材料价格
+        ContractMaterial material = baseMapper.getMaterial(validity.getContractMaterialId());
+        BigDecimal price = material.getPrice();
+        if (currentPrice == null || price == null || currentPrice.compareTo(BigDecimal.ZERO) == 0 || price.compareTo(BigDecimal.ZERO) == 0 ){
+            throw new ServiceException("基础价格或者实时价格不能为空,不能为0");
+        }
+        //校验调差限额
+        BigDecimal quotaRatio = material.getQuotaRatio();
+        if (quotaRatio == null){
+            throw new ServiceException("材料未设置调差限额");
+        }
+        //计算比例
+        Map<String, Object> map = new HashMap<>();
+        BigDecimal decimal = currentPrice.subtract(price).multiply(new BigDecimal(100)).divide(price, 2, RoundingMode.DOWN);
+        map.put("rangePriceRatio",decimal);
+        if (decimal.compareTo(quotaRatio.negate()) == 1 && decimal.compareTo(quotaRatio) == -1){
+            map.put("isAdjust",0);
+        }else {
+            map.put("isAdjust",1);
+        }
+        return map;
+    }
+
     @NotNull
     private static List<ContractMaterialPrice> getContractMaterialPrices(ContractMaterialValidityDTO dto, ContractMaterialValidity validity) {
         List<ContractMaterialValidityDTO.Material> list = dto.getMaterials();
         List<ContractMaterialPrice> priceList = new ArrayList<>();
         for (ContractMaterialValidityDTO.Material material : list) {
+            if (material.getPrice() == null || material.getPrice().compareTo(BigDecimal.ZERO) == 0){
+                throw new ServiceException("价格不能为空和0");
+            }
             ContractMaterialPrice price = new ContractMaterialPrice();
             price.setProjectId(dto.getProjectId());
             price.setContractId(dto.getContractId());