NC65:分摊明细需要根据收支项目(key)去取合计, 并与表体明细相同的收支项目合计金额进行校验

java: List<Map<String, Object>>相同key去合计value
业务场景:

分摊明细需要根据收支项目(key)去取合计, 并与表体明细相同的收支项目合计金额进行校验

在这里插入图片描述

代码

// 获取表体与分摊页签vo
CShareDetailVO[] csharevo = jkbxvo.getcShareDetailVo();
BXBusItemVO[] bvo = jkbxvo.getBxBusItemVOS();
// 调用getmap方法
Map<String,UFDouble> CsharevoMap = getmap(csharevo,"cshare");
Map<String,UFDouble> bvoMap = getmap(bvo,"bvo");
IInoutBusiClassQryService Ibusi = NCLocator.getInstance().lookup(IInoutBusiClassQryService.class);
// 处理信息
List<String> list = new ArrayList<String>();
		
	if(CsharevoMap!=null&&CsharevoMap.size()!=0){
	
		for (Map.Entry<String, UFDouble> entry : CsharevoMap.entrySet())
		      {
		         String testKey = entry.getKey();
		         if(CsharevoMap.get(testKey).equals(bvoMap.get(testKey))){
		              System.out.println(testKey);
		          }else{
		          	String str = testKey.replaceAll("\\[|\\)", "").replaceAll("\\]|\\)", "");
		          	list.add(str);
		          }
		      }
		List<String> liststr = new ArrayList<String>();
		if(list!=null&&list.size()!=0){
			for(int i = 0 ; i <list.size();i++){
				InoutBusiClassVO busivo = Ibusi.queryInoutBusiClassVOByPk(list.get(i));
				String name = busivo.getName();
				liststr.add(name.toString());
			}
			throw new LfwRuntimeException(liststr.toString().replaceAll("\\[|\\)", "").replaceAll("\\]|\\)", "")+"分摊明细页签的合计与单据明细页签合计不一致");
		}
	}
/**
 * 将同一key的value相加
 * @param obj
 * @param type
 * @return
 */
public Map<String,UFDouble> getmap(Object[] obj,String type){
	
	List<Map<String,UFDouble>> list = new ArrayList<Map<String,UFDouble>>();
	Map<String,UFDouble> mapend = new HashMap<String,UFDouble>();
	Set<String> strlist = new HashSet<String>();
	if(obj!=null&&obj.length!=0){
		for(int i = 0 ; i <obj.length;i++){
			if("cshare".equals(type)){ 
				CShareDetailVO[] csharevo = (CShareDetailVO[]) obj;
				Map<String,UFDouble> mapc = new HashMap<String,UFDouble>();
				mapc.put(csharevo[i].getPk_iobsclass(), csharevo[i].getAssume_amount());
				list.add(mapc);
				strlist.add(csharevo[i].getPk_iobsclass());
			}else {
				BXBusItemVO[] bvo = (BXBusItemVO[]) obj;
				Map<String,UFDouble> mapb= new HashMap<String,UFDouble>();
				mapb.put(bvo[i].getSzxmid(), bvo[i].getTni_amount());
				list.add(mapb);
				strlist.add(bvo[i].getSzxmid());
			}
		}
		// 最关键的一步,获取List中所有的MAP的key,将相同key的value进行合计处理
		mapend = getAmount(list,strlist.toArray(new String[strlist.size()]));
	}
	return mapend;
}

	/**
	 * 
	 * @param selectList
	 * @param key
	 * @return  合计后的MAP
	 */
	public static Map<String,UFDouble> getAmount(List ListMap, String[] key) {
		Map<String,UFDouble> param = new HashMap<String,UFDouble>();
		UFDouble sum = UFDouble.ZERO_DBL;
        if (ListMap!=null) {
            if (ListMap.size() > 0) {
                for (int i=0; i<key.length; i++) {
                    String str = key[i];
                    param.put(str,UFDouble.ZERO_DBL);
                }
                Iterator<Map<String, UFDouble>> list = ListMap.iterator();
                while(list.hasNext()) {
					Map<String,UFDouble> map = (Map<String,UFDouble>)list.next();
                    for (int i=0; i<key.length; i++) {
                        String strin = key[i];
                        sum =  param.get(strin);
                        Object obj = map.get(strin);
                        if (obj != null) {
                        	sum = sum.add((UFDouble) map.get(strin));
                        }
                        param.put(strin, sum);
                    }
                }
            }
        }
		return param;
	}

转载于:https://blog.csdn.net/qq_37110695/article/details/88992300

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值