/** * 设置房间总价及合同总价(合同总价=房间总价+装修总价) 房间总价的计算方式 (1) 先加附加再优惠减价再折 计算方式:(标准总价+附加价-优惠减价)×折扣 (2) 先折再附加价再优惠减价 * 计算方式:标准总价×折扣+附加价-优惠减价 (3) 先优惠减价再折再附加价 计算方式:(标准总价-优惠减价)×折扣+附加价 * * <p>并设置"建筑成交单价","套内成交单价" * * @param discountId * @param multiply, 具体的折扣 * @param map * @return */ private static Map<String, String> initSumMoneyAndContractMoney( HttpServletRequest request, int discountId, BigDecimal multiply, Map<String, String> map) { UnitDiscount unitDiscount = unitDiscountServices.findUnitDiscountById(discountId); String computeWay = unitDiscount.getComputeWay(); // 折扣方式 BigDecimal addSumPrice = unitDiscount.getAddSumPrice() == null ? new BigDecimal(0) : unitDiscount.getAddSumPrice(); // 附加价 BigDecimal reduceSumPrice = unitDiscount.getReduceSumPrice() == null ? new BigDecimal(0) : unitDiscount.getReduceSumPrice(); // 优惠减价 // PropertyUnit unit = unitServices.findPropertyUnitById(unitDiscount.getUnitId()); //对应的单元 // BigDecimal sumPrice = unit.getSumPrice() == null ? new BigDecimal(0) : unit.getSumPrice(); // //标准总价 // BigDecimal buildPrice = unit.getBuildPrice() == null ? new BigDecimal(0) : // unit.getBuildPrice(); //建筑单价 // BigDecimal insidePrice = unit.getInsidePrice() == null ? new BigDecimal(0) : // unit.getInsidePrice(); //套内单价 // 下面几个字段从页面传过来 BigDecimal sumPrice = new BigDecimal(request.getParameter("sumPrice")); // 标准总价 BigDecimal buildArea = new BigDecimal(request.getParameter("buildArea")); // 建筑面积 BigDecimal insideArea = new BigDecimal(request.getParameter("insideArea")); // 套内面积 BigDecimal sumMoney = new BigDecimal(0); // 成交总价 if ("1".equals(computeWay)) { sumMoney = (sumPrice.add(addSumPrice).subtract(reduceSumPrice)).multiply(multiply); } else if ("2".equals(computeWay)) { sumMoney = sumPrice.multiply(multiply).add(addSumPrice).subtract(reduceSumPrice); } else if ("3".equals(computeWay)) { sumMoney = (sumPrice.subtract(reduceSumPrice)).multiply(multiply).add(addSumPrice); } sumMoney = sumMoney.divide(new BigDecimal(1), 0, BigDecimal.ROUND_HALF_EVEN); // 四舍五入 map.put("sumMoney", sumMoney.toString()); // 成交总价 map.put("buildPrice", CommonUtils.moneyDivide(sumMoney, buildArea, 0)); // 建筑成交单价=成交总价/建筑面积 map.put("insidePrice", CommonUtils.moneyDivide(sumMoney, insideArea, 0)); // 套内成交单价=成交总价/套内面积 return map; }