瀏覽代碼

材料调差系数

qianxb 1 年之前
父節點
當前提交
f217001f1d

+ 47 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MaterialLinkFormDTO.java

@@ -0,0 +1,47 @@
+package org.springblade.meter.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @Param   材料关联清单专用
+ * @Author wangwl
+ * @Date 2024/4/22 17:09
+ **/
+@Data
+public class MaterialLinkFormDTO {
+
+    @ApiModelProperty(value = "项目id")
+    @NotNull(message = "未获取到项目id!")
+    private Long projectId;
+
+    @ApiModelProperty(value = "合同段id")
+    @NotNull(message = "未获取到合同段id!")
+    private Long contractId;
+
+    @ApiModelProperty(value = "材料id")
+    @NotNull(message = "未获取到材料id!")
+    private Long materialId;
+
+
+    @ApiModelProperty(value = "节点集合")
+    @NotNull(message = "未选择节点!")
+    @Valid
+    private List<form> forms;
+
+    @Data
+    public static class form{
+        @ApiModelProperty(value = "节点id")
+        @NotNull(message = "未找到节点id!")
+        private Long id;
+
+        @NotNull(message = "请填写完所有关联的调差系数!")
+        @ApiModelProperty(value = "调差系数")
+        private BigDecimal adjustFactor;
+    }
+}

+ 73 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/FormTreeVO2.java

@@ -0,0 +1,73 @@
+package org.springblade.meter.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.core.tool.node.INode;
+import org.springblade.meter.config.IsConverter;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Param   材料调差返回所有允许调差节点
+ * @Author wangwl
+ * @Date 2023/11/29 15:25
+ **/
+@Data
+public class FormTreeVO2 implements INode<FormTreeVO2> {
+
+    /**
+     * 主键ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 父节点ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+
+    /**
+     * 子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<FormTreeVO2> children;
+
+    /**
+     * 是否有子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private Boolean hasChildren;
+
+    @Override
+    public List<FormTreeVO2> getChildren() {
+        if (this.children == null) {
+            this.children = new ArrayList<>();
+        }
+        return this.children;
+    }
+
+    @ApiModelProperty(value = "清单名称")
+    private String formName;
+
+    @ApiModelProperty(value = "是否选择0否1是")
+    private Integer isSelect;
+
+    @ApiModelProperty(value = "调差系数")
+    private BigDecimal adjustFactor;
+
+    @ApiModelProperty(value = "是否清单节点0否1是")
+    private Integer isFormNode;
+
+    @ApiModelProperty(value = "是否允许材料调差0否1是")
+    private Integer isAdjust;
+
+
+}

+ 31 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/GetLinkAllFormVO.java

@@ -0,0 +1,31 @@
+package org.springblade.meter.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * @Param   材料调差-编辑获取清单列表
+ * @Author wangwl
+ * @Date 2024/4/23 10:52
+ **/
+@Data
+public class GetLinkAllFormVO {
+    @ApiModelProperty(value = "材料和清单绑定关系id")
+    private Long id;
+
+    @ApiModelProperty(value = "清单编号")
+    private String formNumber;
+
+    @ApiModelProperty(value = "清单名称")
+    private String formName;
+
+    @ApiModelProperty(value = "材料名称")
+    private String materialName;
+
+    @ApiModelProperty(value = "调差系数")
+    private BigDecimal adjustFactor;
+}

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

@@ -25,6 +25,7 @@ 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.MaterialLinkFormDTO;
 import org.springblade.meter.dto.MaterialListDTO;
 import org.springblade.meter.vo.*;
 import org.springframework.web.bind.annotation.*;
@@ -137,9 +138,41 @@ public class ContractMaterialController extends BladeController {
 	@PostMapping("/get-all-material2")
 	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "材料调差-获取材料列表不分页", notes = "传入合同id,搜索条件")
-	public R<List<ContractMaterialVO4>> getAllMaterial2(@RequestBody MaterialListDTO dto) {
+	public R<List<ContractMaterialVO4>> getAllMaterial2(@Valid @RequestBody MaterialListDTO dto) {
 		List<ContractMaterialVO4> list = contractMaterialService.getAllMaterial2(dto);
 		return R.data(list);
 	}
+
+	@GetMapping("/get-adjust-form-tree")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "材料调差-绑定清单-获取清单树", notes = "传入合同id,材料id")
+	public R<List<FormTreeVO2>> getAdjustFormTree(Long contractId,Long materialId) {
+		List<FormTreeVO2> list = contractMaterialService.getAdjustFormTree(contractId,materialId);
+		return R.data(list);
+	}
+
+	@PostMapping("/material-link-form")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "材料调差-绑定清单-确定绑定", notes = "传入项目id,合同id,材料id,节点数组")
+	public R materialLinkForm(@Valid @RequestBody MaterialLinkFormDTO dto) {
+		contractMaterialService.materialLinkForm(dto);
+		return R.success("绑定成功");
+	}
+
+	@GetMapping("/get-link-all-form")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "材料调差-编辑获取清单列表", notes = "传入合同id,材料id")
+	public R<List<GetLinkAllFormVO>> getLinkAllForm(Long contractId,Long materialId) {
+		List<GetLinkAllFormVO> vos = contractMaterialService.getLinkAllForm(contractId,materialId);
+		return R.data(vos);
+	}
+
+	@GetMapping("/remove-link-form")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "材料调差-解除绑定关系", notes = "传入材料和清单绑定关系id")
+	public R removeLinkForm(Long id) {
+		contractMaterialService.removeLinkForm(id);
+		return R.success("解除成功");
+	}
 	
 }

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

@@ -69,4 +69,6 @@ public interface ContractInventoryFormMapper extends BaseMapper<ContractInventor
     List<String> getAllEqualsNumber(@Param("contractId") Long contractId,@Param("numbers") List<String> collect);
 
     List<FormNodeSortVO> getAllForm(@Param("contractId") Long contractId);
+
+    List<FormTreeVO2> getAllForm2(@Param("contractId") Long contractId);
 }

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

@@ -173,5 +173,10 @@
         from s_contract_inventory_form where contract_id = #{contractId} and is_deleted = 0
         order by -sort desc,create_time
     </select>
+    <select id="getAllForm2" resultType="org.springblade.meter.vo.FormTreeVO2">
+        select id ,parent_id,form_name,is_form_node,is_adjust,0 as isSelect
+        from s_contract_inventory_form scif where contract_id = #{contractId} and is_deleted = 0
+        order by -sort desc,create_time
+    </select>
 
 </mapper>

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

@@ -46,4 +46,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);
 }

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

@@ -54,6 +54,14 @@
             and u.material_name like concat('%',#{dto.materialName},'%')
         </if>
     </select>
+    <select id="getLinkAllForm" resultType="org.springblade.meter.vo.GetLinkAllFormVO">
+        select id,adjust_factor,
+               (select form_number from s_contract_inventory_form cif where cif.id = ifm.contract_form_id) as formNumber,
+               (select form_name from s_contract_inventory_form cif where cif.id = ifm.contract_form_id) as formName,
+               (select material_name from s_contract_material scm where scm.id = ifm.contract_material_id) as materialName
+        from s_inventory_form_material ifm
+        where  is_deleted = 0 and contract_id = #{contractId} and contract_material_id = #{materialId}
+    </select>
 
 
 </mapper>

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

@@ -62,4 +62,7 @@ public interface IContractInventoryFormService extends BaseService<ContractInven
 
     //清单公共方法,返回当前清单编号顺序集合
     List<String> getAllFormNumberBySort(Long contractId);
+
+    //材料调差-获取允许调差清单树,并且回显已经选择的
+    List<FormTreeVO2> getAdjustFormTree(Long contractId, Long materialId);
 }

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

@@ -18,6 +18,7 @@ package org.springblade.meter.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.mp.support.Query;
+import org.springblade.meter.dto.MaterialLinkFormDTO;
 import org.springblade.meter.dto.MaterialListDTO;
 import org.springblade.meter.entity.ContractMaterial;
 import org.springblade.core.mp.base.BaseService;
@@ -49,4 +50,12 @@ public interface IContractMaterialService extends BaseService<ContractMaterial>
     List<ContractMaterialVO3> getAllMaterial(Long contractId);
 
     List<ContractMaterialVO4> getAllMaterial2(MaterialListDTO dto);
+
+    List<FormTreeVO2> getAdjustFormTree(Long contractId, Long materialId);
+
+    void materialLinkForm(MaterialLinkFormDTO dto);
+
+    List<GetLinkAllFormVO> getLinkAllForm(Long contractId, Long materialId);
+
+    void removeLinkForm(Long id);
 }

+ 35 - 4
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractInventoryFormServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.meter.service.impl;
 
+import com.alibaba.druid.sql.visitor.functions.If;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -28,13 +29,11 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.meter.entity.ChangeTokenInventory;
 import org.springblade.meter.entity.ContractInventoryForm;
+import org.springblade.meter.entity.InventoryFormMaterial;
 import org.springblade.meter.entity.InventoryFormMeter;
 import org.springblade.meter.mapper.ContractInventoryFormMapper;
-import org.springblade.meter.service.IChangeTokenFormService;
-import org.springblade.meter.service.IChangeTokenInventoryService;
-import org.springblade.meter.service.IContractInventoryFormService;
+import org.springblade.meter.service.*;
 import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.meter.service.IInventoryFormMeterService;
 import org.springblade.meter.utils.ForestNodeMerger;
 import org.springblade.meter.vo.*;
 import org.springframework.stereotype.Service;
@@ -59,6 +58,8 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
 
         private final IChangeTokenInventoryService tokenInventoryService;
 
+        private final IInventoryFormMaterialService formMaterialService;
+
     /**
      * 导入excel
      * @param file
@@ -650,6 +651,36 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
         return forms;
     }
 
+    @Override
+    public List<FormTreeVO2> getAdjustFormTree(Long contractId, Long materialId) {
+        //获取已经关联的节点
+        List<InventoryFormMaterial> formMaterials = formMaterialService.list(new LambdaQueryWrapper<InventoryFormMaterial>()
+                .eq(InventoryFormMaterial::getContractId, contractId)
+                .eq(InventoryFormMaterial::getContractMaterialId, materialId));
+        Map<Long, BigDecimal> map = formMaterials.stream().collect(Collectors.toMap(l -> l.getContractFormId(), l -> l.getAdjustFactor()));
+        //获取所有清单节点
+        List<FormTreeVO2> vo2s = baseMapper.getAllForm2(contractId);
+        List<FormTreeVO2> list = new ArrayList<>();
+        //循环清单节点,把最底层节点不允许调差的删除,并且标识已关联的节点
+        for (FormTreeVO2 vo2 : vo2s) {
+            if (vo2.getIsFormNode() == 1){
+                if (vo2.getIsAdjust() == 1){
+                    BigDecimal decimal = map.get(vo2.getId());
+                    if(decimal != null) {
+                        vo2.setAdjustFactor(decimal);
+                        vo2.setIsSelect(1);
+                    }
+                    list.add(vo2);
+                }
+            }else {
+                list.add(vo2);
+            }
+        }
+        //转换为树
+        list = ForestNodeMerger.merge(list);
+        return list;
+    }
+
     /**
      * 判断当前清单是否已经分解或变更过,变更过返回true
      */

+ 50 - 7
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractMaterialServiceImpl.java

@@ -24,15 +24,11 @@ import org.apache.commons.lang.StringUtils;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.meter.dto.MaterialLinkFormDTO;
 import org.springblade.meter.dto.MaterialListDTO;
-import org.springblade.meter.entity.ContractInventoryForm;
-import org.springblade.meter.entity.ContractMaterial;
-import org.springblade.meter.entity.ContractMaterialAdjust;
-import org.springblade.meter.entity.ContractMaterialPrice;
+import org.springblade.meter.entity.*;
 import org.springblade.meter.mapper.ContractMaterialMapper;
-import org.springblade.meter.service.IContractMaterialAdjustService;
-import org.springblade.meter.service.IContractMaterialPriceService;
-import org.springblade.meter.service.IContractMaterialService;
+import org.springblade.meter.service.*;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.vo.*;
 import org.springframework.stereotype.Service;
@@ -57,6 +53,10 @@ public class ContractMaterialServiceImpl extends BaseServiceImpl<ContractMateria
 
     private final IContractMaterialPriceService priceService;
 
+    private final IContractInventoryFormService formService;
+
+    private final IInventoryFormMaterialService formMaterialService;
+
 
 
     /**
@@ -198,4 +198,47 @@ public class ContractMaterialServiceImpl extends BaseServiceImpl<ContractMateria
         List<ContractMaterialVO4> vo3List = baseMapper.getALLMaterial3(dto);
         return vo3List;
     }
+
+    @Override
+    public List<FormTreeVO2> getAdjustFormTree(Long contractId, Long materialId) {
+        return formService.getAdjustFormTree(contractId,materialId);
+    }
+
+    @Override
+    @Transactional
+    public void materialLinkForm(MaterialLinkFormDTO dto) {
+        //校验材料是否存在
+        ContractMaterial m = this.getById(dto.getMaterialId());
+        if (m == null){
+            throw new ServiceException("获取材料信息错误");
+        }
+        //先删除当前材料绑定的节点
+        formMaterialService.remove(new LambdaQueryWrapper<InventoryFormMaterial>()
+                .eq(InventoryFormMaterial::getContractId,dto.getContractId())
+                .eq(InventoryFormMaterial::getContractMaterialId,dto.getMaterialId()));
+        //再保存当前选择的节点
+        List<InventoryFormMaterial> addList = new ArrayList<>();
+        List<MaterialLinkFormDTO.form> forms = dto.getForms();
+        for (MaterialLinkFormDTO.form form : forms) {
+            InventoryFormMaterial material = new InventoryFormMaterial();
+            material.setProjectId(dto.getProjectId());
+            material.setContractId(dto.getContractId());
+            material.setContractMaterialId(dto.getMaterialId());
+            material.setContractFormId(form.getId());
+            material.setAdjustFactor(form.getAdjustFactor());
+            addList.add(material);
+        }
+        formMaterialService.saveBatch(addList);
+    }
+
+    @Override
+    public List<GetLinkAllFormVO> getLinkAllForm(Long contractId, Long materialId) {
+        List<GetLinkAllFormVO> vos = baseMapper.getLinkAllForm(contractId,materialId);
+        return vos;
+    }
+
+    @Override
+    public void removeLinkForm(Long id) {
+        formMaterialService.removeById(id);
+    }
 }