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

Posted 红尘沙漏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据来源编号对明细进行分组 跟库存做对比 用到的技术 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 比较大小的主要内容,如果未能解决你的问题,请参考以下文章

netsuite 库存明细子记录

如何通过在 Laravel 中对库存单位进行分组来找到畅销书?

软件工程实训 服装库存管理系统

SQL如何查询两个表连接明细表结果用分隔符分开?

需要帮助对可用的订单明细表进行分组以得出 count(order_line_item) 、 Qty 和 count(Qty) 的分布

SAS 对变量进行组内编号、循环编号、递增编号和有限重复循环编号