算法:
(商品成交金额 / 单据总金额) * 抹零
如果单个商品成交价格,小于单据总金额,那么单个商品成交价等于单据总金额,然后商品成交价/单据总金额*抹零,就是要减去的优惠钱
比如商品标价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); } }