public R startProcess(@RequestBody ShouldCredentialPayable bean) {
System.out.println("应付贷项参数bean========="+bean);
//开启审批流程之前先验证库存
boolean judge=false;
if(null!=bean.getCredentialPayableDetail() && bean.getCredentialPayableDetail().size()>0){
List<SapVerifyInventory> sapList=new ArrayList<SapVerifyInventory>();
//对明细根据来源编号进行分组
Map<Long,List<ShouldCredentialPayableDetail>>map=grouping(bean.getCredentialPayableDetail());
//如果map不为空
if(!map.isEmpty()){
//获取map所有key 和value
Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry =(Map.Entry )it.next();
Long key=(Long)entry.getKey();
System.out.println("key=============="+key);
//获取key值
List<ShouldCredentialPayableDetail>listValue=(List)entry.getValue();
System.out.println("list=============="+listValue);
//根据company,baseID查询库存
String company=bean.getCompany();
Long baseID=key;
String url= MessageFormat.format(SapConstant.PURCHASECREDIT_DETAIL_STOCK+"?Company={0}&BaseID={1}",company,baseID);
//System.out.println("url========================"+url);
String result=HttpUtil.doGet(url,SapUtil.getReadToken());
SapReturnResult sapReturnResult=JSONObject.parseObject(result, SapReturnResult.class);
System.out.println("sapReturnResult================="+sapReturnResult);
String datas=sapReturnResult.getData();
System.out.println("datas================="+datas);
//将data数据转换成 SapVerifyInventory
List<SapVerifyInventory> list2=JSONObject.parseArray(datas,SapVerifyInventory.class);
//比较提交的库存和sap现有的库存
if(null!=list2 && list2.size()>0 && null!=listValue && listValue.size()>0){
for(SapVerifyInventory sapVerifyInventory :list2){
for (ShouldCredentialPayableDetail shouldCredentialPayableDetail : listValue){
//当来源编号相同,仓库相同,物料编号相同时 比较库存
if(sapVerifyInventory.getItemCode().equals(shouldCredentialPayableDetail.getItemCode()) && sapVerifyInventory.getBaseEntry().longValue()==shouldCredentialPayableDetail.getSourceCode().longValue() && sapVerifyInventory.getWhsCode().equals(shouldCredentialPayableDetail.getWhsCode())){
System.out.println("开始判断》》》》》》》》》》》》》》》》》》》》》》》》》》》2222222222");
System.out.println(sapVerifyInventory.getItemCode().equals(shouldCredentialPayableDetail.getItemCode()) && sapVerifyInventory.getBaseEntry()==shouldCredentialPayableDetail.getSourceCode() && sapVerifyInventory.getWhsCode().equals(shouldCredentialPayableDetail.getWhsCode()));
//Double 值比较大小
BigDecimal outValue = new BigDecimal(sapVerifyInventory.getQuantity());
BigDecimal inValue = new BigDecimal(shouldCredentialPayableDetail.getQuantity());
System.out.println("outValue======"+outValue+"---inValue====="+inValue+"---(outValue.compareTo(inValue)===="+outValue.compareTo(inValue));
//如果库存小于 提交的数量
if(outValue.compareTo(inValue)<0){
System.out.println("库存小于提交的数量>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
sapList.add(sapVerifyInventory);
judge=true;
}
}
} }
}
}
}
//数量和库存不一致
if(judge){
return R.data(sapList);
}
}
return R.data("在测试");
//return R.status(shouldCredentialPayableService.startProcess(bean));
}
//根据来源编号对明细进行分组
public Map<Long,List<ShouldCredentialPayableDetail>> grouping(List<ShouldCredentialPayableDetail> list){
Map<Long,List<ShouldCredentialPayableDetail>> map=new HashMap<Long,List<ShouldCredentialPayableDetail>>();
if(null!=list && list.size()>0){
for (ShouldCredentialPayableDetail shouldCredentialPayableDetail : list){
Long key=shouldCredentialPayableDetail.getSourceCode();
if(map.containsKey(key)){
map.get(key).add(shouldCredentialPayableDetail);
}else{
//map中不存在以此id作为的key,新建key用来存放数据
List<ShouldCredentialPayableDetail> credentialPayableList=new ArrayList<ShouldCredentialPayableDetail>();
credentialPayableList.add(shouldCredentialPayableDetail);
map.put(key,credentialPayableList);
}
}
}
return map;
}

根据来源编号对明细进行分组 跟库存做对比 用到的技术 list根据某个字段分组 Double Long 比较大小的更多相关文章

  1. SQL Server 按某一字段分组 取 最大 (小)值所在行的数据

    SQL Server 按某一字段分组 取 最大 (小)值所在行的数据 -- 按某一字段分组 取 最大 (小)值所在行的数据 -- (爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-10-23 ...

  2. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码

    2013-9-15 1.    CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...

  3. .Net Linq与Lambda表达式中GroupBy以多个字段分组

    一.引入 基本上熟悉C#语言的没有不知道Lambda表达式的,其对于数据的处理真的是太方便了.其中分组处理的GroupBy方法在List中的使用非常广泛.正式近期一个功能需求中又遇到了,而且是需要Gr ...

  4. js将json格式的list转换为按某个字段分组的map数组

    这几天做的微信公众号项目中,出现了需要将list分组显示的需求,解决方法如下 var data = [{ "id": "32b80b76-a81e-4545-8065-1 ...

  5. js 按字段分组

    var data = [{"id":"32b80b76-a81e-4545-8065-1e7c57180801","userId":&quo ...

  6. mysql按某一字段分组取最大(小)值所在行的数据

    mysql按某一字段分组取最大(小)值所在行的数据   mysql技巧--按某一字段分组取最大(小)值所在行的数据,这是mysql数据库程序员经常用到的在处理一些报表数据时候可以活用!那么猎微网将总结 ...

  7. mysql根据某个字段分组根据更新时间获取最新的记录

    我现在有一种统计表,要根据一个字段分组然后根据更新时间,每个分组获取最新的一条记录.命名感觉挺简单的一个需求,然而没什么思路,当然是问度娘了. 度娘的答案很统一,然而都不管用,都是报错的,不知道是不是 ...

  8. Sql按照字段分组,选取其他字段最值所在的行记录

    引言: 为什么会引入这个问题,在程序中遇到这样的问题,在某个数据表中,相同的AID(项目ID)被多次添加到数据表中,所以对应于不同的时间,只想选取添加时间最早的哪一条记录. 参考:红黑联盟 所用到的数 ...

  9. list转map工具类,根据指定的字段分组

    import org.apache.log4j.Logger; import java.lang.reflect.Method;import java.util.ArrayList;import ja ...

随机推荐

  1. python中字符串的编码和解码

    1. 常用的编码 ASCII:只能表示一些字母,数字和特殊的字符,占一个字节 GBK:国家简体中文字符集和繁体字符集,兼容ASCII,占两个字节 Unicode:能够表示全世界上所有的字符,Unico ...

  2. 用Python爬取英雄联盟(lol)全部皮肤

    小三:"怎么了小二?一副无精打采的样子!" 小二:"唉!别提了,还不是最近又接触了一个叫英雄联盟的游戏,游戏中很多皮肤都需要花钱买,但是我钱不够呀..." 小三 ...

  3. 关于 [栈溢出后jmp esp执行shellcode] 原理分析

    原文地址:https://blog.csdn.net/lixiangminghate/article/details/53333710 正常情况下,函数栈分布图如下: 即,返回地址被改为一段缓存区的地 ...

  4. 深度学习基础 Probabilistic Graphical Models | Statistical and Algorithmic Foundations of Deep Learning

    目录 Probabilistic Graphical Models Statistical and Algorithmic Foundations of Deep Learning 01 An ove ...

  5. JZOJ2020年8月11日提高组T3 页

    JZOJ2020年8月11日提高组T3 页 题目 Description 战神阿瑞斯听说2008年在中华大地上,将举行一届规模盛大的奥林匹克运动会,心中顿觉异常兴奋,他想让天马在广阔的天空上,举行一场 ...

  6. Mybatis学习-配置、作用域和生命周期

    核心配置文件:Mybatis-config.xml Mybatis的配置文件包含了会深深影响Mybatis行为的设置和属性信息 配置(configuration) 在mybatis-config.xm ...

  7. 第10.5节 使用__all__定义Python模块导入白名单

    一. 引言 <第10.4节 Python模块的弱封装机制>介绍了Python模块的的弱封装机制,除了使用弱封装机制来从一定程度上防止导入特定成员外,Python模块中还提供可另外一种类似白 ...

  8. Python基础概念学习遇到的问题

    Python运算符的优先级是怎样的? Python中的迭代是什么意思? Python中的列表解析和列表推导是一回事吗? Python中可迭代对象是什么? Python中容器指的是什么? 关于Pytho ...

  9. PostMan设置环境变量&全局变量

    一.设置环境变量 1.点击右上角Manage Environment,进入环境变量设置界面 2.定义环境名称,参数名及参数值 3.将接口地址中服务器地址进行参数化,并选择对应的环境执行 二.设置全局变 ...

  10. 团队作业6——Alpha阶段项目复审

    复审人:利国铭 复审人看什么: 软件的质量:解决原计划解决的问题了么,软件运行质量如何?用户有多少,用户反馈如何? 软件工程的质量:代码在哪里? 代码能在新的机器上构建成功么? 代码可维护性如何?每日 ...