商品如果有抹零[优惠金额],退货的抹零按照商品价格的权重去退

算法:

(商品成交金额 / 单据总金额) * 抹零

如果单个商品成交价格,小于单据总金额,那么单个商品成交价等于单据总金额,然后商品成交价/单据总金额*抹零,就是要减去的优惠钱

比如商品标价550  优惠 50 由于是一个商品  所以单据总金额为500 

要退成交的550这个商品,用成交的商品单价550去和总金额判断,如果小于总金额,那么单据总金额就等于该单个商品的单价

然后用550/550*50=50

再用单据总金额减去50=500,就是要退的钱

例子:

                    //实际成交金额
                    double actualMoney = posTradeBillList.get(pos).getActualMoney();
                    //抹零金额
                    double omittedMoney = posTradeBillList.get(pos).getOmittedMoney();
                    //退货取单时的数据
                    for (ReturnProductListItemData data : dataList) {
                        if (data.isChecked()) {
                            pos = data.getPosition();
                            PosTradeBillItem item = data.getPosTradeBillItem();
                            item.setAmount(-item.getAmount());
                            //当前订单退货有抹零,把抹零按照价格权重进行计算;
                            if (omittedMoney > 0) {
                                 //如果实际成交的金额小于商品的单价
                                if (actualMoney < item.getMoney()) {
                                  //那么实际成交的金额等于单价
                                    actualMoney = item.getMoney();
                                }
                                //当前单个商品的优惠金额,商品单价/实际成交金额*优惠的金额
                                double moMoney = item.getMoney() / actualMoney * omittedMoney;
                                //把当前订单的实际成交金额,更新为减去退掉的物品
                                actualMoney = actualMoney - item.getMoney();
                                //设置本次商品要退的钱-号为负数(代表退款的意思)
                                item.setMoney(-(item.getMoney() - moMoney));
                                //把优惠金额,设置成去除该笔订单后的优惠金额
                                omittedMoney = omittedMoney - moMoney;
                            } else {
                                //没有设置优惠和抹零,有订单多少钱就退多少钱
                                item.setMoney(-item.getMoney());
                            }
                            //以下和算法无关
                            item.setOldAgio(item.getAgio());
                            new PosTradeBill().getBillNumber();
                            PosTradeBillItem parent = new PosTradeBillItem();
                            parent.setId(item.getId());
                            item.setParent(parent);
                            Logger.e("item id", "" + item.getId());

//                   double money = item.getMoney();
//                   if (store!=null && store.getErasureZero()==1){
//                      money = NumberUtils.formatDouble4Rule(money, store.getPrecision(), store.getRounding());
//                   }
//                   totalMoney += Math.abs(money);
                            posList.add(item);
                        }
                    }

猜你喜欢

转载自blog.csdn.net/a1003434346/article/details/84034736
今日推荐