根据来源编号对明细进行分组 跟库存做对比 用到的技术 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 ...
随机推荐
- 华为交换机eNSP删除Vlan的详细步骤
设备支持批量删除VLAN和单个删除VLAN两种方式: 单个删除VLAN10 <HUAWEI> system-view [HUAWEI] undo vlan 10 批量删除VLAN10到VL ...
- 转2:Python字符编码详解
1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...
- Object.prototype.toString.call()和typeof()区别
js中判断数据类型都知道用tyoeof(),但是他只能判断object,boolean,function,string,number,undefined还有symbol(es6新增)这几种初步类型,比 ...
- C#获取引用组件的版本信息
/// <summary> /// 当前目录下文件版本 /// </summary> public void FilesVersion ...
- 【java】JSON.toJSONString 空对象也可以转化为JSON字符串
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifac ...
- 算法——和为K的连续子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况. 链 ...
- 零基础的Java小白如何准备初级开发的面试
对于各位Java程序员来说,只要能有实践的机会,哪怕工资再低,公司情况再一般,只要自己上心努力,就可能在短时间内快速提升,甚至在工作2年后进大厂都有希望,因为项目里真实的开发实践环境是平时学习不能模拟 ...
- uni-app中使用sass
uni-app在创建时,工程目录下会有个uni.scss文件,我们可以直接在里面定制化scss变量. 全局scss中的坑: 1.如果要引用全局外部scss文件,可以考虑在uni.scss这个系统全局s ...
- vmvare workstation虚拟机连接外网
在使用网上的yum源的时候,我们就需要我们的虚拟机能连接外网,在这里记录下配置vmvare workstation虚拟机连接外网的方法. 配置步骤: 1.打开主机的 "网络和Internet ...
- SpringBoot + Layui + JustAuth +Mybatis-plus实现可第三方登录的简单后台管理系统
1. 简介 在之前博客:SpringBoot基于JustAuth实现第三方授权登录 和 SpringBoot + Layui +Mybatis-plus实现简单后台管理系统(内置安全过滤器)上改造 ...