qianxb před 1 rokem
rodič
revize
e7a82ae957

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ContractMaterialAdjust.java

@@ -102,6 +102,9 @@ public class ContractMaterialAdjust extends BaseEntity {
     @NotNull(message = "请填写材料数量!")
     private BigDecimal materialTotal;
 
+    @ApiModelProperty(value = "调差数量")
+    private BigDecimal adjustTotal;
+
     @ApiModelProperty(value = "调差金额")
     private BigDecimal adjustMoney;
 

+ 7 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MaterialAdjustDetailVO.java

@@ -7,6 +7,7 @@ import org.springblade.meter.entity.AttachmentForm;
 import org.springblade.meter.entity.ContractMaterialAdjust;
 import org.springblade.meter.entity.ContractMaterialAdjustDetail;
 
+import java.time.LocalDate;
 import java.util.List;
 
 /**
@@ -23,4 +24,10 @@ public class MaterialAdjustDetailVO extends ContractMaterialAdjust {
 
     @ApiModelProperty(value = "附件集合")
     private List<AttachmentForm> files;
+
+    @ApiModelProperty(value = "开始日期")
+    private LocalDate startDate;
+
+    @ApiModelProperty(value = "结束日期")
+    private LocalDate endDate;
 }

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

@@ -99,7 +99,7 @@ public class ContractMaterialAdjustController extends BladeController {
     }
 
     @GetMapping("/delete")
-    @ApiOperationSupport(order = 6)
+    @ApiOperationSupport(order = 7)
     @ApiOperation(value = "删除", notes = "传入材料调差表id")
     public R delete(Long id) {
         adjustService.delete(id);

+ 5 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractMaterialAdjustMapper.xml

@@ -19,7 +19,7 @@
     <select id="page2" resultType="org.springblade.meter.vo.ContractMaterialAdjustVO">
         select *,if(approve_status = 0,'未完成','已完成') as approveStatusName
         from s_contract_material_adjust
-        where contract_id = #{dto.contractId} and is_deleted = 0 and contract_period_id = #{dto.contractPeriodId}
+        where contract_id = #{dto.contractId} and is_deleted = 0
         <if test="dto.contractPeriodId != null and dto.contractPeriodId != ''">
             and contract_period_id = #{dto.contractPeriodId}
         </if>
@@ -28,6 +28,9 @@
         </if>
     </select>
     <select id="detail" resultType="org.springblade.meter.vo.MaterialAdjustDetailVO">
-        select * from s_contract_material_adjust where id = #{id}
+        select * ,
+               (select start_date from s_contract_material_validity cmv where cmv.id = cma.material_validity_id) as startDate,
+               (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>
 </mapper>

+ 50 - 28
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractMaterialAdjustServiceImpl.java

@@ -71,6 +71,21 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
         ContractMaterialAdjust adjust = new ContractMaterialAdjust();
         BeanUtils.copyProperties(dto,adjust);
         adjust.setId(SnowFlakeUtil.getId());
+        /*保存材料明细*/
+        List<ContractMaterialAdjustDetail> details = dto.getDetails();
+        BigDecimal adjustTotal = BigDecimal.ZERO;
+        if (details.size() != 0){
+            for (ContractMaterialAdjustDetail detail : details) {
+                detail.setMaterialAdjustId(adjust.getId());
+                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());
+            }
+            adjustDetailService.saveBatch(details);
+        }
+
         //计算调差金额,生成计算式
         StringBuilder str = new StringBuilder("调差价格依据于:"+dto.getMaterialName()+
                 "("+validity.getStartDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))+"至"+
@@ -80,32 +95,27 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
         BigDecimal currentPrice = dto.getCurrentPrice();
         if (price.compareTo(currentPrice) == 1){
             //市场价低于基准价
-            adjustMoney = dto.getMaterialTotal().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).add(dto.getRangePriceRatio().abs().divide(new BigDecimal(100))))))).multiply(new BigDecimal(1.09)).setScale(2, RoundingMode.DOWN);
             str.append("调差公式(标准):调增金额=调差数量×[市场价-基准价×(1-风险幅度差%)]×(1+合同增值税税率)\n");
-            str.append("调差公式(计算):"+adjustMoney+"="+dto.getMaterialTotal()+"*["+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 = dto.getMaterialTotal().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(dto.getRangePriceRatio().divide(new BigDecimal(100))))))).multiply(new BigDecimal(1.09)).setScale(2, RoundingMode.DOWN);
             str.append("调差公式(标准):调增金额=调差数量×[市场价-基准价×(1+风险幅度差%)]×(1+合同增值税税率)\n");
-            str.append("调差公式(计算):"+adjustMoney+"="+dto.getMaterialTotal()+"*["+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);
         adjust.setAdjustCalculation(str.toString());
         this.save(adjust);
 
-        /*保存材料明细*/
-        List<ContractMaterialAdjustDetail> details = dto.getDetails();
-        if (details.size() != 0){
-            for (ContractMaterialAdjustDetail detail : details) {
-                detail.setMaterialAdjustId(adjust.getId());
-            }
-            adjustDetailService.saveBatch(details);
-        }
         /*保存附件信息*/
         List<AttachmentForm> files = dto.getFiles();
         if (files.size() != 0){
             for (AttachmentForm file : files) {
                 file.setMasterId(adjust.getId());
+                file.setProjectId(dto.getProjectId());
+                file.setContractId(dto.getContractId());
             }
             attachmentFormService.saveBatch(files);
         }
@@ -124,6 +134,8 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
         List<ContractMaterialAdjustDetail> list = baseMapper.getMaterialDetail(dto,formIds);
         for (ContractMaterialAdjustDetail detail : list) {
             detail.setContractMaterialId(dto.getContractMaterialId());
+            detail.setChangeTotal(detail.getMeterTotal());
+            detail.setAdjustTotal(detail.getChangeTotal().multiply(detail.getAdjustFactor()).setScale(3,RoundingMode.HALF_UP));
         }
         return list;
     }
@@ -162,6 +174,24 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
         /*保存材料调差单*/
         ContractMaterialAdjust adjust = new ContractMaterialAdjust();
         BeanUtils.copyProperties(dto,adjust);
+        BigDecimal adjustTotal = BigDecimal.ZERO;
+        /*保存材料明细*/
+        //先删除再清空id
+        adjustDetailService.remove(new LambdaQueryWrapper<ContractMaterialAdjustDetail>()
+                .eq(ContractMaterialAdjustDetail::getMaterialAdjustId,adjust.getId()));
+        List<ContractMaterialAdjustDetail> details = dto.getDetails();
+        if (details.size() != 0){
+            for (ContractMaterialAdjustDetail detail : details) {
+                detail.setId(null);
+                detail.setMaterialAdjustId(adjust.getId());
+                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());
+            }
+            adjustDetailService.saveBatch(details);
+        }
         //计算调差金额,生成计算式
         StringBuilder str = new StringBuilder("调差价格依据于:"+dto.getMaterialName()+
                 "("+validity.getStartDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))+"至"+
@@ -171,31 +201,21 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
         BigDecimal currentPrice = dto.getCurrentPrice();
         if (price.compareTo(currentPrice) == 1){
             //市场价低于基准价
-            adjustMoney = dto.getMaterialTotal().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).add(dto.getRangePriceRatio().abs().divide(new BigDecimal(100))))))).multiply(new BigDecimal(1.09)).setScale(2, RoundingMode.DOWN);
             str.append("调差公式(标准):调增金额=调差数量×[市场价-基准价×(1-风险幅度差%)]×(1+合同增值税税率)\n");
-            str.append("调差公式(计算):"+adjustMoney+"="+dto.getMaterialTotal()+"*["+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 = dto.getMaterialTotal().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(dto.getRangePriceRatio().divide(new BigDecimal(100))))))).multiply(new BigDecimal(1.09)).setScale(2, RoundingMode.DOWN);
             str.append("调差公式(标准):调增金额=调差数量×[市场价-基准价×(1+风险幅度差%)]×(1+合同增值税税率)\n");
-            str.append("调差公式(计算):"+adjustMoney+"="+dto.getMaterialTotal()+"*["+currentPrice+"-"+price+"*(1-"+dto.getRangePriceRatio()+"%)]*(1+9.0/100)");
+            str.append("调差公式(计算):"+adjustMoney+"="+adjustTotal+"*["+currentPrice+"-"+price+"*(1-"+dto.getRangePriceRatio()+"%)]*(1+9.0/100)");
         }
         adjust.setAdjustMoney(adjustMoney);
+        adjust.setAdjustTotal(adjustTotal);
         adjust.setAdjustCalculation(str.toString());
         this.updateById(adjust);
 
-        /*保存材料明细*/
-        //先删除再清空id
-        adjustDetailService.remove(new LambdaQueryWrapper<ContractMaterialAdjustDetail>()
-                .eq(ContractMaterialAdjustDetail::getMaterialAdjustId,adjust.getId()));
-        List<ContractMaterialAdjustDetail> details = dto.getDetails();
-        if (details.size() != 0){
-            for (ContractMaterialAdjustDetail detail : details) {
-                detail.setId(null);
-                detail.setMaterialAdjustId(adjust.getId());
-            }
-            adjustDetailService.saveBatch(details);
-        }
+
         /*保存附件信息*/
         //先删除再清空id
         attachmentFormService.remove(new LambdaQueryWrapper<AttachmentForm>()
@@ -205,6 +225,8 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
             for (AttachmentForm file : files) {
                 file.setId(null);
                 file.setMasterId(adjust.getId());
+                file.setProjectId(dto.getProjectId());
+                file.setContractId(dto.getContractId());
             }
             attachmentFormService.saveBatch(files);
         }

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

@@ -93,6 +93,9 @@ public class ContractMaterialServiceImpl extends BaseServiceImpl<ContractMateria
         if (StringUtils.isBlank(contractMaterial.getMaterialName())){
             throw new ServiceException("请填写材料名称");
         }
+        if (contractMaterial.getPrice() == null){
+            throw new ServiceException("请填写材料价格");
+        }
         //校验是否存在当前材料编号和名称
         LambdaQueryWrapper<ContractMaterial> wrapper1 = new LambdaQueryWrapper<>();
         wrapper1.eq(ContractMaterial::getContractId,contractMaterial.getContractId());