思路

首先讲讲编程思路的一个问题,导致走了一天的弯路,业务是要把提交表单的多条数据求和取上限,因为之前react写多了,顺手就在前端代码发请求写校验了,但,一是要把限制条件写在前台代码里,二是即使现从后台取上限,我也要在系统中用到此功能的地方都写校验,虽然是复制粘贴,但改的时候也不好改,可能有遗漏,所以后来还是写到数据库中以便于以后的修改,不用每次发版。

新的知识

首先吧,我的多条表单数据格式是`[
{name:xxx,date:xxx,remark:xxx}{name:xxx,date:xxx,remark:xxx}]
日期有相同的,也有不同的,我要根据日期相同的去求另一个字段的和;
用map集合对list进行接收,key为日期,因为map.put如果key存在则覆盖,不存在则更新,利用这一特性可以对相同日期迭代求和覆盖,更新增加,(网上还有一个collector的相关方法,java8的特性但是BigDecimal类型要自定义扩展源码,没有搞成功就放弃了)

Map<String, BigDecimal> group = new HashMap<String, BigDecimal>();  
    	  Date estDate1 = new Date();  
    	  BigDecimal hourTotal = new BigDecimal(0.0); 
    	  
    	  for(PmEstimate pmEstimatest1 : list){  
    		  estDate1 = pmEstimatest1.getEstDate();
    		  String estDate=DateUtils.formatDate(estDate1);
    		  hourTotal = group.get(estDate);
    		  if(hourTotal == null){  
    			  hourTotal = new BigDecimal(0.0);           
    			  }  
    	      group.put(estDate, hourTotal.add(pmEstimatest1.getConsumed()));          
    	  }

注意格式化日期再去与数据库查询,map.get(key)获得的是value,调用null的方法属性会报空指针异常,切换项目报tomcat找不到jar时,双clean。

BigDecimal

String tip = \"\";
      	  for (String key : group.keySet()) { 
      		  String currentId = staff.getStaffId();
      		  BigDecimal finshedHour = pmEstimateMapper.queryTotalHours(key,currentId);
      		  if(finshedHour==null) {
      			  finshedHour = new BigDecimal(0.0);
      		  }
      		  BigDecimal big = new BigDecimal(estimateMax);
      		  if((group.get(key).compareTo((big.subtract(finshedHour)))==1)||(big.compareTo((group.get(key)).add(finshedHour))==-1)){//第四:判断是否合法
      			  String tip1 = (key+\"当前已记录\"+finshedHour+\";\");
      			  tip += tip1;
      			  tip1 =\"\";
      		  }
      		} 
      	   if(tip!=\"\") {
      		 res.ok();
             res.setData(estimateList);
             res.setMessage(tip+\",建议一天总工时不超过\"+estimateMax);
      	   } else {
        	res.ok();
      	   }

这是一个集合的遍历与BigDecimal的简单运算,加a.add(b)减b.subtract(a)比较大小a.compareTo(b)返回-1,0,1。(dead code eclipse自动判断不会去执行的代码)

react的一点应用

异步promise对象,因为当你连续添加数据页面变化时,不等effect执行完成就执行另一个effect数据状态state并未完成渲染,虽然最后页面变了,但内部数据会出现不可名状的错误,如果要用到异步的数据,要等异步返回success。

收藏 打印