根据来源编号对明细进行分组 跟库存做对比 用到的技术 list根据某个字段分组 Double Long 比较大小
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 比较大小的更多相关文章
- SQL Server 按某一字段分组 取 最大 (小)值所在行的数据
SQL Server 按某一字段分组 取 最大 (小)值所在行的数据 -- 按某一字段分组 取 最大 (小)值所在行的数据 -- (爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-10-23 ...
- 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码
2013-9-15 1. CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...
- .Net Linq与Lambda表达式中GroupBy以多个字段分组
一.引入 基本上熟悉C#语言的没有不知道Lambda表达式的,其对于数据的处理真的是太方便了.其中分组处理的GroupBy方法在List中的使用非常广泛.正式近期一个功能需求中又遇到了,而且是需要Gr ...
- js将json格式的list转换为按某个字段分组的map数组
这几天做的微信公众号项目中,出现了需要将list分组显示的需求,解决方法如下 var data = [{ "id": "32b80b76-a81e-4545-8065-1 ...
- js 按字段分组
var data = [{"id":"32b80b76-a81e-4545-8065-1e7c57180801","userId":&quo ...
- mysql按某一字段分组取最大(小)值所在行的数据
mysql按某一字段分组取最大(小)值所在行的数据 mysql技巧--按某一字段分组取最大(小)值所在行的数据,这是mysql数据库程序员经常用到的在处理一些报表数据时候可以活用!那么猎微网将总结 ...
- mysql根据某个字段分组根据更新时间获取最新的记录
我现在有一种统计表,要根据一个字段分组然后根据更新时间,每个分组获取最新的一条记录.命名感觉挺简单的一个需求,然而没什么思路,当然是问度娘了. 度娘的答案很统一,然而都不管用,都是报错的,不知道是不是 ...
- Sql按照字段分组,选取其他字段最值所在的行记录
引言: 为什么会引入这个问题,在程序中遇到这样的问题,在某个数据表中,相同的AID(项目ID)被多次添加到数据表中,所以对应于不同的时间,只想选取添加时间最早的哪一条记录. 参考:红黑联盟 所用到的数 ...
- list转map工具类,根据指定的字段分组
import org.apache.log4j.Logger; import java.lang.reflect.Method;import java.util.ArrayList;import ja ...
随机推荐
- cheat.sh在手,天下我有
前言 作为程序员需要了解的东西有很多,日常编码和写脚本脱离不开各式语言与 Linux 命令.为了记住一些杂乱的或不被经常使用的知识点,我们迫切需要一个"小抄"/备忘录,小抄内容多了 ...
- LaTeX学习路线
LaTex源文件的基本结构 LaTex中的中文处理方法 LaTeX相关自学文档 LaTeX的字体字号设置 LaTeX文档的基本结构 LaTeX中的特殊字符 LaTeX中的插图 LaTeX中的表格 La ...
- 19_B门长时曝光APP
知识很基础-- 前几天买了个单反,特别想拍B门长时间曝光的效果.后来想想不如自己写个APP,实现屏幕背景的随机颜色以及全屏显示文字. 先上图: 这两张图片的左侧都很亮,这是因为APP里面忘记把&quo ...
- 17.java设计模式之观察者模式
基本需求: 气象站可以将每天测量到的温度,湿度,气压等等,以公告的形式发布出去(比如发布到自己的网站或第三方) 需要设计开放型API,便于其他第三方也能接入气象站获取数据 提供温度.气压和湿度的接口 ...
- Spring Cloud Alibaba 初体验(三) Nacos 与 Dubbo 集成
一.新建项目 新建项目,只放置接口,用于暴露 Dubbo 服务接口 public interface GreetingService { String greeting(); } 二.provider ...
- moviepy应用pyinstaller打包后执行报错AttributeError: module audio/video.fx.all has no attribute fadein、crop
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在开发moviepy的Python程序使用pyinstaller打包后 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性
accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...
- PyQt(Python+Qt)学习随笔:QAbstractItemView的tabKeyNavigation属性
老猿Python博文目录 老猿Python博客地址 tabKeyNavigation属性为bool类型,用于控制视图中是否启用tab键和backtab(shift+tab)进行数据项之间的导航切换. ...
- PyQt(Python+Qt)学习随笔:Qt Designer中Action的信号
Action与菜单和工具栏挂接后,只是实现了相关的关联关系,但并不能执行响应操作,真正的响应操作是通过Action的信号与对应槽函数连接实现的. Action提供了4种信号: changed()信号: ...
- DVWA SQL Injection High
High 虽然是high等级,但是通过源码审计发现与low等级一样,没有对传入的值做任何过滤,唯一不同的就是点击连接后打开了另外一个对话框,用户在新打开的页面输入 其余的步骤与low级别的一样:htt ...