ソースを参照

Merge remote-tracking branch 'origin/master' into master

yangyj 1 年間 前
コミット
21a3d49455

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

@@ -22,4 +22,7 @@ public class MaterialListDTO {
 
     @ApiModelProperty(value = "材料名称")
     private String materialName;
+
+    @ApiModelProperty(value = "材料计量期id")
+    private Long meterPeriodId;
 }

+ 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;
 }

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

@@ -98,5 +98,13 @@ public class ContractMaterialAdjustController extends BladeController {
         return R.success("修改成功");
     }
 
+    @GetMapping("/delete")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "删除", notes = "传入材料调差表id")
+    public R delete(Long id) {
+        adjustService.delete(id);
+        return R.success("删除成功");
+    }
+
 
 }

+ 13 - 5
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractMaterialController.java

@@ -147,8 +147,16 @@ public class ContractMaterialController extends BladeController {
 		return R.data(list);
 	}
 
-	@GetMapping("/get-adjust-form-tree")
+	@PostMapping("/get-all-material3")
 	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "材料调差-当前期未调差材料不分页", notes = "传入合同id,材料计量期id")
+	public R<List<ContractMaterialVO4>> getAllMaterial3(@RequestBody MaterialListDTO dto) {
+		List<ContractMaterialVO4> list = contractMaterialService.getAllMaterial3(dto);
+		return R.data(list);
+	}
+
+	@GetMapping("/get-adjust-form-tree")
+	@ApiOperationSupport(order = 10)
 	@ApiOperation(value = "调差系数-绑定清单-获取清单树", notes = "传入合同id,材料id")
 	public R<GetAdjustFormTreeVO> getAdjustFormTree(Long contractId,Long materialId) {
 		GetAdjustFormTreeVO vo = contractMaterialService.getAdjustFormTree(contractId,materialId);
@@ -156,7 +164,7 @@ public class ContractMaterialController extends BladeController {
 	}
 
 	@PostMapping("/material-link-form")
-	@ApiOperationSupport(order = 10)
+	@ApiOperationSupport(order = 11)
 	@ApiOperation(value = "调差系数-绑定清单-确定绑定", notes = "传入项目id,合同id,材料id,节点数组")
 	public R materialLinkForm(@Valid @RequestBody MaterialLinkFormDTO dto) {
 		contractMaterialService.materialLinkForm(dto);
@@ -164,7 +172,7 @@ public class ContractMaterialController extends BladeController {
 	}
 
 	@GetMapping("/get-link-all-form")
-	@ApiOperationSupport(order = 11)
+	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "调差系数-编辑获取清单列表", notes = "传入合同id,材料id")
 	public R<List<GetLinkAllFormVO>> getLinkAllForm(Long contractId,Long materialId) {
 		List<GetLinkAllFormVO> vos = contractMaterialService.getLinkAllForm(contractId,materialId);
@@ -172,14 +180,14 @@ public class ContractMaterialController extends BladeController {
 	}
 
 	@GetMapping("/remove-link-form")
-	@ApiOperationSupport(order = 12)
+	@ApiOperationSupport(order = 13)
 	@ApiOperation(value = "调差系数-解除绑定关系", notes = "传入材料和清单绑定关系id")
 	public R removeLinkForm(Long id) {
 		contractMaterialService.removeLinkForm(id);
 		return R.success("解除成功");
 	}
 	@PostMapping("/submit-link-form")
-	@ApiOperationSupport(order = 13)
+	@ApiOperationSupport(order = 14)
 	@ApiOperation(value = "调差系数-提交编辑", notes = "传入编辑列表数据,只传入id和调差系数")
 	public R submitLinkForm(@RequestBody List<InventoryFormMaterial> list) {
 		formMaterialService.updateBatchById(list);

+ 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>

+ 2 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractMaterialMapper.java

@@ -48,4 +48,6 @@ public interface ContractMaterialMapper extends BaseMapper<ContractMaterial> {
     List<ContractMaterialVO4> getALLMaterial3(@Param("dto") MaterialListDTO dto);
 
     List<GetLinkAllFormVO> getLinkAllForm(@Param("contractId") Long contractId,@Param("materialId") Long materialId);
+
+    List<ContractMaterialVO4> getALLUnAdjustMaterial(@Param("dto") MaterialListDTO dto);
 }

+ 6 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractMaterialMapper.xml

@@ -64,6 +64,12 @@
         from s_inventory_form_material ifm
         where  is_deleted = 0 and contract_id = #{contractId} and contract_material_id = #{materialId}
     </select>
+    <select id="getALLUnAdjustMaterial" resultType="org.springblade.meter.vo.ContractMaterialVO4">
+        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.meter_period_id = #{dto.meterPeriodId})
+    </select>
 
 
 </mapper>

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

@@ -47,4 +47,6 @@ public interface IContractMaterialAdjustService extends BaseService<ContractMate
     MaterialAdjustDetailVO detail(Long id);
 
     void update2(ContractMaterialAdjustAddDTO dto);
+
+    void delete(Long id);
 }

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

@@ -58,4 +58,6 @@ public interface IContractMaterialService extends BaseService<ContractMaterial>
     List<GetLinkAllFormVO> getLinkAllForm(Long contractId, Long materialId);
 
     void removeLinkForm(Long id);
+
+    List<ContractMaterialVO4> getAllMaterial3(MaterialListDTO dto);
 }

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

@@ -60,6 +60,8 @@ public class ContractMaterialAdjustServiceImpl extends BaseServiceImpl<ContractM
 
     private final IInventoryFormMaterialService formMaterialService;
 
+    private final IMeterPeriodService meterPeriodService;
+
     @Override
     @Transactional
     public void add(ContractMaterialAdjustAddDTO dto) {
@@ -69,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"))+"至"+
@@ -78,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);
         }
@@ -122,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;
     }
@@ -160,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"))+"至"+
@@ -169,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>()
@@ -203,8 +225,26 @@ 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);
         }
     }
+
+    @Override
+    public void delete(Long id) {
+        //获取调差信息,判断是否已经审批
+        ContractMaterialAdjust adjust = this.getById(id);
+        if (adjust.getApproveStatus() == 1){
+            throw new ServiceException("当前材料调差单已经上报,删除失败");
+        }
+        //获取材料计量期,判断是否已经审批
+        MeterPeriod period = meterPeriodService.getById(adjust.getMeterPeriodId());
+        if (period.getApproveStatus() != 0){
+            throw new ServiceException("删除失败,当前计量期不是未上报状态");
+        }
+        this.removeById(id);
+
+    }
 }

+ 9 - 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());
@@ -242,4 +245,10 @@ public class ContractMaterialServiceImpl extends BaseServiceImpl<ContractMateria
     public void removeLinkForm(Long id) {
         formMaterialService.removeById(id);
     }
+
+    @Override
+    public List<ContractMaterialVO4> getAllMaterial3(MaterialListDTO dto) {
+        List<ContractMaterialVO4> vo4List = baseMapper.getALLUnAdjustMaterial(dto);
+        return vo4List;
+    }
 }