ソースを参照

合同材料字段修改与同步

qianxb 10 ヶ月 前
コミット
5b6ca0c550

+ 11 - 5
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ContractMaterial.java

@@ -74,11 +74,17 @@ public class ContractMaterial extends BaseEntity {
      */
     @ApiModelProperty(value = "单价")
     private BigDecimal price;
-    /**
-     * 数量
-     */
-    @ApiModelProperty(value = "数量")
-    private BigDecimal amount;
 
+    @ApiModelProperty(value = "材料损耗率")
+    private BigDecimal wastageRatio;
+
+    @ApiModelProperty(value = "调差限额百分比")
+    private BigDecimal quotaRatio;
+
+    @ApiModelProperty(value = "业主收益/承担百分比")
+    private BigDecimal ownerRatio;
+
+    @ApiModelProperty(value = "材料总和抵扣率")
+    private BigDecimal deductionRatio;
 
 }

+ 6 - 6
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractMaterialVO.java

@@ -34,14 +34,14 @@ import java.math.BigDecimal;
 public class ContractMaterialVO extends ContractMaterial {
 	private static final long serialVersionUID = 1L;
 
-	@ApiModelProperty(value = "节点名称")
-	private String nodeName;
+	@ApiModelProperty(value = "项目id")
+	private Long projectId;
 
-	@ApiModelProperty(value = "ture有子节点,false没有子节点")
-	private Boolean hasChild;
+	@ApiModelProperty(value = "合同段id")
+	private Long contractId;
 
-	@ApiModelProperty(value = "计量金额")
-	private BigDecimal meterMoney;
+	@ApiModelProperty(value = "材料编号")
+	private String materialNumber;
 
 
 }

+ 46 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractMaterialVO2.java

@@ -0,0 +1,46 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.meter.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.meter.entity.ContractMaterial;
+
+import java.math.BigDecimal;
+
+/**
+ * 合同材料表视图实体类
+ *
+ * @author BladeX
+ * @since 2023-11-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ContractMaterialVO2 extends ContractMaterial {
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "其他合同段数量")
+	private Integer otherTotal;
+
+	@ApiModelProperty(value = "被调差数量")
+	private Integer adjustTotal;
+
+	@ApiModelProperty(value = "是否可以同步,0否1是")
+	private Integer isSync;
+
+}

+ 20 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/SyncMaterialVO.java

@@ -0,0 +1,20 @@
+package org.springblade.meter.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.meter.entity.ContractMaterial;
+
+/**
+ * @Param   同步材料
+ * @Author wangwl
+ * @Date 2024/4/19 10:52
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SyncMaterialVO  extends ContractMaterial {
+
+    @ApiModelProperty(value = "数据来源(合同段名称)")
+    private String contractName;
+
+}

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

@@ -26,6 +26,8 @@ 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.vo.ContractMaterialTreeVO;
+import org.springblade.meter.vo.ContractMaterialVO2;
+import org.springblade.meter.vo.SyncMaterialVO;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -57,7 +59,8 @@ public class ContractMaterialController extends BladeController {
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "新增或修改", notes = "传入contractMaterial")
 	public R submit(@Valid @RequestBody ContractMaterial contractMaterial) {
-		return R.status(contractMaterialService.saveOrUpdate(contractMaterial));
+		contractMaterialService.addOrUpdate(contractMaterial);
+		return R.success("操作成功");
 	}
 
 	/**
@@ -72,17 +75,42 @@ public class ContractMaterialController extends BladeController {
 			@ApiImplicitParam(name = "current", value = "当前页", required = true),
 			@ApiImplicitParam(name = "size", value = "每页数量", required = true)
 	})
-	public R<IPage<ContractMaterial>> list(ContractMaterial contractMaterial, Query query) {
-		IPage<ContractMaterial> pages = contractMaterialService.page(Condition.getPage(query), Condition.getQueryWrapper(contractMaterial));
+	public R<IPage<ContractMaterialVO2>> list(ContractMaterial material, Query query) {
+		IPage<ContractMaterialVO2> pages = contractMaterialService.page2(material,query);
 		return R.data(pages);
 	}
 
+	@GetMapping("/getSyncData")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "获取同步数据", notes = "传入项目id合同段id和材料编号")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "projectId", value = "项目id", required = true),
+			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+			@ApiImplicitParam(name = "materialNumber", value = "材料编号", required = true),
+	})
+	public R<List<SyncMaterialVO>> getSyncData(ContractMaterial material) {
+		List<SyncMaterialVO> list = contractMaterialService.getSyncData(material);
+		return R.data(list);
+	}
+
+	@GetMapping("/syncMaterial")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "同步材料", notes = "传入材料id,和选中行id")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "id", value = "材料id", required = true),
+			@ApiImplicitParam(name = "selectId", value = "选中行id", required = true),
+	})
+	public R<String> syncMaterial(Long id,Long selectId) {
+		contractMaterialService.syncMaterial(id,selectId);
+		return R.success("同步成功");
+	}
+
 	
 	/**
 	 * 删除 合同材料表
 	 */
 	@PostMapping("/remove")
-	@ApiOperationSupport(order = 4)
+	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		return R.status(contractMaterialService.deleteLogic(Func.toLongList(ids)));
@@ -92,7 +120,7 @@ public class ContractMaterialController extends BladeController {
 	 * 材料树 合同材料表
 	 */
 	@GetMapping("/materialTree")
-	@ApiOperationSupport(order = 2)
+	@ApiOperationSupport(order = 10)
 	@ApiOperation(value = "材料树", notes = "传入合同id")
 	public R<List<ContractMaterialTreeVO>> materialTree(Long contractId) {
 		return R.data(contractMaterialService.materialTree(contractId));

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

@@ -16,11 +16,14 @@
  */
 package org.springblade.meter.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.meter.entity.ContractMaterial;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springblade.meter.vo.ContractMaterialTreeVO;
 import org.springblade.meter.vo.ContractMaterialVO;
+import org.springblade.meter.vo.ContractMaterialVO2;
+import org.springblade.meter.vo.SyncMaterialVO;
 
 import java.util.List;
 
@@ -34,4 +37,8 @@ public interface ContractMaterialMapper extends BaseMapper<ContractMaterial> {
 
 
     List<ContractMaterialVO> getALLMaterial(@Param("contractId") Long contractId);
+
+    IPage<ContractMaterialVO2> page2(IPage<ContractMaterialVO2> iPage,@Param("material") ContractMaterial material);
+
+    List<SyncMaterialVO> getSyncData(@Param("material") ContractMaterial material);
 }

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

@@ -19,7 +19,6 @@
         <result column="specification" property="specification"/>
         <result column="unit" property="unit"/>
         <result column="price" property="price"/>
-        <result column="amount" property="amount"/>
     </resultMap>
     <select id="getALLMaterial" resultType="org.springblade.meter.vo.ContractMaterialVO">
         select *,false as hasChild,
@@ -27,6 +26,20 @@
                 ELSE concat(material_name, '[',material_number,']') end) as nodeName
         from s_contract_material where is_deleted = 0 and contract_id = #{contractId}
     </select>
+    <select id="page2" resultType="org.springblade.meter.vo.ContractMaterialVO2">
+        select *,
+               (select count(1) from s_contract_material scm2 where is_deleted = 0 and project_id = #{material.projectId}
+                        and contract_id != #{material.contractId} and scm.material_number = scm2.material_number ) as otherTotal,
+               (select count(1) from s_contract_material_adjust where is_deleted = 0 and contract_id = #{material.contractId} and scm.id = contract_material_id) as adjustTotal
+        from s_contract_material scm where is_deleted = 0 and contract_id = #{material.contractId}
+    </select>
+    <select id="getSyncData" resultType="org.springblade.meter.vo.SyncMaterialVO">
+        select *,(select contract_name from m_contract_info where id = scm.contract_id) as contractName
+        from s_contract_material scm
+        where is_deleted = 0 and project_id = #{material.projectId}
+          and contract_id != #{material.contractId}
+          and scm.material_number = #{material.materialNumber}
+    </select>
 
 
 </mapper>

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

@@ -16,9 +16,13 @@
  */
 package org.springblade.meter.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.support.Query;
 import org.springblade.meter.entity.ContractMaterial;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.meter.vo.ContractMaterialTreeVO;
+import org.springblade.meter.vo.ContractMaterialVO2;
+import org.springblade.meter.vo.SyncMaterialVO;
 
 import java.util.List;
 
@@ -32,4 +36,12 @@ public interface IContractMaterialService extends BaseService<ContractMaterial>
 
 
     List<ContractMaterialTreeVO> materialTree(Long contractId);
+
+    void addOrUpdate(ContractMaterial contractMaterial);
+
+    IPage<ContractMaterialVO2> page2(ContractMaterial material, Query query);
+
+    void  syncMaterial(Long id,Long selectId);
+
+    List<SyncMaterialVO> getSyncData(ContractMaterial material);
 }

+ 82 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractMaterialServiceImpl.java

@@ -16,17 +16,27 @@
  */
 package org.springblade.meter.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Query;
+import org.springblade.meter.entity.ContractInventoryForm;
 import org.springblade.meter.entity.ContractMaterial;
 import org.springblade.meter.mapper.ContractMaterialMapper;
 import org.springblade.meter.service.IContractMaterialService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.vo.ContractMaterialTreeVO;
 import org.springblade.meter.vo.ContractMaterialVO;
+import org.springblade.meter.vo.ContractMaterialVO2;
+import org.springblade.meter.vo.SyncMaterialVO;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Consumer;
 
 /**
  * 合同材料表 服务实现类
@@ -53,8 +63,8 @@ public class ContractMaterialServiceImpl extends BaseServiceImpl<ContractMateria
             vo.setHasChild(false);
         }else {
             for (ContractMaterialVO materialVO : voList) {
-                if (materialVO.getPrice() != null && materialVO.getAmount() != null){
-                    materialVO.setMeterMoney(materialVO.getPrice().multiply(materialVO.getAmount()));
+                if (materialVO.getPrice() != null){
+//                    materialVO.setMeterMoney(materialVO.getPrice().multiply(materialVO.getAmount()));
                 }
             }
             vo.setHasChild(true);
@@ -63,4 +73,74 @@ public class ContractMaterialServiceImpl extends BaseServiceImpl<ContractMateria
         vos.add(vo);
         return vos;
     }
+
+    @Override
+    public void addOrUpdate(ContractMaterial contractMaterial) {
+        if (StringUtils.isBlank(contractMaterial.getMaterialNumber())){
+            throw new ServiceException("请填写材料编号");
+        }
+        if (StringUtils.isBlank(contractMaterial.getMaterialName())){
+            throw new ServiceException("请填写材料名称");
+        }
+        //校验是否存在当前材料编号和名称
+        LambdaQueryWrapper<ContractMaterial> wrapper1 = new LambdaQueryWrapper<>();
+        wrapper1.eq(ContractMaterial::getContractId,contractMaterial.getContractId());
+        wrapper1.eq(ContractMaterial::getMaterialNumber,contractMaterial.getMaterialNumber());
+        LambdaQueryWrapper<ContractMaterial> wrapper2 = new LambdaQueryWrapper<>();
+        wrapper2.eq(ContractMaterial::getContractId,contractMaterial.getContractId());
+        wrapper2.eq(ContractMaterial::getMaterialName,contractMaterial.getMaterialName());
+        if (contractMaterial.getId() != null){
+            wrapper1.ne(ContractMaterial::getId,contractMaterial.getId());
+            wrapper2.ne(ContractMaterial::getId,contractMaterial.getId());
+        }
+        List<ContractMaterial> list1 = this.list(wrapper1);
+        if (list1.size() > 0){
+            throw new ServiceException("当前合同段已存在此材料编号");
+        }
+        List<ContractMaterial> list2 = this.list(wrapper2);
+        if (list2.size() > 0){
+            throw new ServiceException("当前合同段已存在此材料名称");
+        }
+        this.saveOrUpdate(contractMaterial);
+    }
+
+    @Override
+    public IPage<ContractMaterialVO2> page2(ContractMaterial material, Query query) {
+        IPage<ContractMaterialVO2> iPage = new Page<>(query.getCurrent(),query.getSize());
+        iPage = baseMapper.page2(iPage,material);
+        iPage.getRecords().stream().forEach(l->{
+            if (l.getAdjustTotal() == 0 && l.getOtherTotal() > 0){
+                l.setIsSync(1);
+            }else {
+                l.setIsSync(0);
+            }
+        });
+        return iPage;
+    }
+
+    @Override
+    public void syncMaterial(Long id,Long selectId) {
+        //获取当前材料
+        ContractMaterial thisData = this.getById(id);
+        //获取选择的材料
+        ContractMaterial selectData = this.getById(selectId);
+        if (!thisData.getMaterialNumber().equals(selectData.getMaterialNumber())){
+            throw new ServiceException("数据错误,材料编号不同,请联系管理员");
+        }
+        thisData.setMaterialName(selectData.getMaterialName());
+        thisData.setSpecification(selectData.getSpecification());
+        thisData.setUnit(selectData.getUnit());
+        thisData.setPrice(selectData.getPrice());
+        thisData.setWastageRatio(selectData.getWastageRatio());
+        thisData.setQuotaRatio(selectData.getQuotaRatio());
+        thisData.setOwnerRatio(selectData.getOwnerRatio());
+        thisData.setDeductionRatio(selectData.getDeductionRatio());
+        this.updateById(thisData);
+
+    }
+
+    @Override
+    public List<SyncMaterialVO> getSyncData(ContractMaterial material) {
+        return baseMapper.getSyncData(material);
+    }
 }