Browse Source

外协价格库excel导入(根据外协项目查找数据库数据对比是否重复,导入新增编辑自动计算平均值)以及新增数据

sl 1 year ago
parent
commit
c1811214d9

+ 21 - 5
module_kzks/src/main/java/org/jeecg/modules/costModelWxPrice/controller/CostModelWxPriceController.java

@@ -86,23 +86,38 @@ public class CostModelWxPriceController extends JeecgController<CostModelWxPrice
 	@PostMapping(value = "/add")
 	public Result<String> add(@RequestBody CostModelWxPrice costModelWxPrice) {
 		try {
-			CostModelWxPrice wxp = costModelWxPrice;
+//			CostModelWxPrice wxp = costModelWxPrice;
 			boolean noRepeat = true;
 			//前端就不会让录入为null
-//			if((wxp.getWxProject()==null)&(wxp.getDanjia()==null)&(wxp.getUnit()==null)&(wxp.getWxCompany()==null)){
+//			if((wxp.getWxProject()==null)&(wxpNew.getWxCompany()!=null)&(wxp.getDanjia()==null)&(wxp.getUnit()==null)&(wxp.getWxCompany()==null)){
 //				System.out.println("当前数据内容都为空,不能录入");
 //				noRepeat = false;
 //			}
 //			List<CostModelWxPrice> list = costModelWxPriceService.getWXPAllDetailList();
-			List<CostModelWxPrice> list = costModelWxPriceService.getWXPFProDetailList(wxp.getWxProject());
+			List<CostModelWxPrice> list = costModelWxPriceService.getWXPFProDetailList(costModelWxPrice.getWxProject());
 			for (CostModelWxPrice wxp1 : list) {
-				if((Objects.equals(wxp.getDanjia(), wxp1.getDanjia()))&(Objects.equals(wxp.getUnit(), wxp1.getUnit()))&(Objects.equals(wxp.getWxCompany(), wxp1.getWxCompany()))){
+				//因为根据外协项目查找的数据库数据,所以不用再比较外协项目
+				if((Objects.equals(costModelWxPrice.getMaxPrice(), wxp1.getMaxPrice()))&(Objects.equals(costModelWxPrice.getMinPrice(), wxp1.getMinPrice()))&(Objects.equals(costModelWxPrice.getUnit(), wxp1.getUnit()))&(Objects.equals(costModelWxPrice.getWxCompany(), wxp1.getWxCompany()))){
 					noRepeat = false;
-					//System.out.println("当前元素重复,进行删除");
+//					System.out.println("当前元素重复,进行删除");
 					break;//因为wxpNew元素已经被删除了,所有此段循环可以跳过了
 				}
 			}
 			if (noRepeat) {
+//				System.out.println("数据不重复,计算平均值");
+				try{
+					//计算平均值并写入list
+					costModelWxPrice.setAvePrice(Float.toString((Float.parseFloat(costModelWxPrice.getMaxPrice())+Float.parseFloat(costModelWxPrice.getMinPrice()))/2));
+//					System.out.println("写入数据成功");
+				} catch (NumberFormatException e) {
+					System.out.println("Float.parseFloat(String)方法执行异常");
+					e.printStackTrace();
+				}
+
+//				System.out.println("最终需要存入的数据");
+//				System.out.println(costModelWxPrice);
+//				System.out.println(costModelWxPrice.getClass());
+//				System.out.println(costModelWxPrice.getClass().getName());
 				costModelWxPriceService.save(costModelWxPrice);
 				return Result.OK("添加成功!");
 			} else {
@@ -127,6 +142,7 @@ public class CostModelWxPriceController extends JeecgController<CostModelWxPrice
 	//@RequiresPermissions("org.jeecg.modules:kzks_cost_model_wx_price:edit")
 	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
 	public Result<String> edit(@RequestBody CostModelWxPrice costModelWxPrice) {
+		costModelWxPrice.setAvePrice(Float.toString((Float.parseFloat(costModelWxPrice.getMaxPrice())+Float.parseFloat(costModelWxPrice.getMinPrice()))/2));
 		costModelWxPriceService.updateById(costModelWxPrice);
 		return Result.OK("编辑成功!");
 	}

+ 12 - 0
module_kzks/src/main/java/org/jeecg/modules/costModelWxPrice/entity/CostModelWxPrice.java

@@ -75,4 +75,16 @@ public class CostModelWxPrice implements Serializable {
 	@Excel(name = "备注", width = 15)
     @ApiModelProperty(value = "备注")
     private java.lang.String remark;
+    /**单价(最大值)*/
+    @Excel(name = "单价(最大值)", width = 15)
+    @ApiModelProperty(value = "单价(最大值)")
+    private java.lang.String maxPrice;
+    /**单价(最小值)*/
+    @Excel(name = "单价(最小值)", width = 15)
+    @ApiModelProperty(value = "单价(最小值)")
+    private java.lang.String minPrice;
+    /**单价(平均值)*/
+    @Excel(name = "平均值", width = 15)
+    @ApiModelProperty(value = "平均值")
+    private java.lang.String avePrice;
 }

+ 1 - 1
module_kzks/src/main/java/org/jeecg/modules/costModelWxPrice/mapper/CostModelWxPriceMapper.java

@@ -19,6 +19,6 @@ public interface CostModelWxPriceMapper extends BaseMapper<CostModelWxPrice> {
     public List<CostModelWxPrice> getWXPAllDetailList();
 
     /**外协价格库-通过外协项目查看表中的数据-用来判断导入的数据是否有重复数据*/
-    @Select("select wx_company, danjia, unit from kzks_cost_model_wx_price where wx_project = #{wx_project}")
+    @Select("select wx_company, unit, max_price, min_price, ave_price from kzks_cost_model_wx_price where wx_project = #{wx_project}")
     public List<CostModelWxPrice> getWXPFProDetailList(@Param("wx_project") String wx_project);
 }

+ 22 - 4
module_kzks/src/main/java/org/jeecg/modules/costModelWxPrice/service/impl/CostModelWxPriceServiceImpl.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.costModelWxPrice.service.impl;
 
 import lombok.extern.slf4j.Slf4j;
+import org.hibernate.query.criteria.internal.expression.function.AggregationFunction;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.costModelWxPrice.entity.CostModelWxPrice;
 import org.jeecg.modules.costModelWxPrice.mapper.CostModelWxPriceMapper;
@@ -42,7 +43,7 @@ public class CostModelWxPriceServiceImpl extends ServiceImpl<CostModelWxPriceMap
         return wxpMapper.getWXPAllDetailList();
     }
 
-    /**查看表中所有数据-用来判断导入的数据是否有重复数据*/
+    /**外协价格库-通过外协项目查看表中的数据-用来判断导入的数据是否有重复数据*/
     public List<CostModelWxPrice> getWXPFProDetailList(String wx_project){
         return wxpMapper.getWXPFProDetailList(wx_project);
     }
@@ -91,19 +92,36 @@ public class CostModelWxPriceServiceImpl extends ServiceImpl<CostModelWxPriceMap
                 //4.判断去重后的listNew中是否有数据已经在数据库中记录过了,如果已经保存过直接删掉
                 while(iterator.hasNext()){
                     CostModelWxPrice wxpNew = iterator.next();
-                    //5.此处的条件可能更改,目前是外协项目、单价、计量单位都不为null的数据才能进行判断是否重复在确定是否录入数据
-                    if((wxpNew.getWxProject()!=null)&(wxpNew.getDanjia()!=null)&(wxpNew.getUnit()!=null)){
+                    //5.此处的条件可能更改,目前是外协项目、外协单位、单价最大值、单价最小值、计量单位都不为null的数据才能进行判断是否重复在确定是否录入数据
+                    if((wxpNew.getWxProject()!=null)&(wxpNew.getWxCompany()!=null)&(wxpNew.getMaxPrice()!=null)&(wxpNew.getMinPrice()!=null)&(wxpNew.getUnit()!=null)){
+                        boolean noRepeat = true; //用来判断数据是否重复
                         //6.从数据库中取出对应外协项目的数据内容
                         List<CostModelWxPrice> list1 = getWXPFProDetailList(wxpNew.getWxProject());
+//                        System.out.println("从数据库中取出的数据");
+//                        list1.forEach(System.out::println);
 
+                        //7.与数据库中的数据比较,如果数据重复,则删除,如果数据不重复,计算平均值,在将整条信息进行录入
                         for(CostModelWxPrice wxp1:list1) {
-                            if((Objects.equals(wxpNew.getDanjia(), wxp1.getDanjia()))&(Objects.equals(wxpNew.getUnit(), wxp1.getUnit()))&(Objects.equals(wxpNew.getWxCompany(), wxp1.getWxCompany()))){
+                            //因为根据外协项目查找的数据库数据,所以不用再比较外协项目
+                            if((Objects.equals(wxpNew.getMaxPrice(), wxp1.getMaxPrice()))&(Objects.equals(wxpNew.getMinPrice(), wxp1.getMinPrice()))&(Objects.equals(wxpNew.getUnit(), wxp1.getUnit()))&(Objects.equals(wxpNew.getWxCompany(), wxp1.getWxCompany()))){
                                 iterator.remove();
+                                noRepeat = false;
                                 //System.out.println("当前元素重复,进行删除");
                                 //listNew.forEach(System.out::println);  //foreach中不能remove,不然会报错java.util.ConcurrentModificationException
                                 break;//因为wxpNew元素已经被删除了,所有此段循环可以跳过了
                             }
                         }
+                        if(noRepeat){
+                            try{
+                                //计算平均值并写入list
+                                wxpNew.setAvePrice(Float.toString((Float.parseFloat(wxpNew.getMaxPrice())+Float.parseFloat(wxpNew.getMinPrice()))/2));
+
+                            } catch (NumberFormatException e) {
+                                System.out.println("Float.parseFloat(String)方法执行异常");
+                                e.printStackTrace();
+                            }
+                        }
+
                     }
                     else{
                         //System.out.println("当前关键数据内容为空,删除");