|
|
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.java110.core.annotation.Java110Transactional;
|
|
|
import com.java110.core.context.DataFlowContext;
|
|
|
+import com.java110.core.factory.CommunitySettingFactory;
|
|
|
import com.java110.core.factory.GenerateCodeFactory;
|
|
|
import com.java110.dto.room.ApplyRoomDiscountDto;
|
|
|
import com.java110.dto.room.ApplyRoomDiscountTypeDto;
|
|
|
@@ -27,6 +28,7 @@ import com.java110.intf.fee.IFeeDiscountRuleInnerServiceSMO;
|
|
|
import com.java110.po.room.ApplyRoomDiscountPo;
|
|
|
import com.java110.po.room.ApplyRoomDiscountTypePo;
|
|
|
import com.java110.po.file.FileRelPo;
|
|
|
+import com.java110.utils.cache.MappingCache;
|
|
|
import com.java110.utils.util.Assert;
|
|
|
import com.java110.utils.util.BeanConvertUtil;
|
|
|
import com.java110.utils.util.StringUtil;
|
|
|
@@ -94,6 +96,12 @@ public class ApplyRoomDiscountApi {
|
|
|
@Autowired
|
|
|
private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
|
|
|
|
|
|
+ //域
|
|
|
+ public static final String DOMAIN_COMMON = "DOMAIN.COMMON";
|
|
|
+
|
|
|
+ //键
|
|
|
+ public static final String TOTAL_FEE_PRICE = "TOTAL_FEE_PRICE";
|
|
|
+
|
|
|
/**
|
|
|
* 优惠申请
|
|
|
*
|
|
|
@@ -309,20 +317,116 @@ public class ApplyRoomDiscountApi {
|
|
|
cashBackAmount = cashBackAmount.add(spec); //计算优惠的金额
|
|
|
}
|
|
|
}
|
|
|
+ //1表示四舍五入后保留小数点后两位;2表示四舍五入后保留小数点后一位;3表示向上取整;4 表示向下取整;5表示 四舍五入后取整 其他情况默认四舍五入后保留小数点后两位
|
|
|
+ String val = CommunitySettingFactory.getValue(reqJson.getString("communityId"), TOTAL_FEE_PRICE);
|
|
|
+ if (StringUtil.isEmpty(val)) {
|
|
|
+ //1表示四舍五入后保留小数点后两位;2表示四舍五入后保留小数点后一位;3表示向上取整;4 表示向下取整;5表示 四舍五入后取整 其他情况默认四舍五入后保留小数点后两位
|
|
|
+ val = MappingCache.getValue(DOMAIN_COMMON, TOTAL_FEE_PRICE);
|
|
|
+ }
|
|
|
DecimalFormat df = new DecimalFormat("0.00");
|
|
|
if (StringUtil.isEmpty(reqJson.getString("refundAmount"))) {
|
|
|
- reqJson.put("cashBackAmount", df.format(cashBackAmount));
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("2")) { //2表示四舍五入后保留小数点后一位
|
|
|
+ BigDecimal bigDecimal = cashBackAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
|
|
|
+ reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("3")) { //3表示向上取整
|
|
|
+ BigDecimal bigDecimal = cashBackAmount.setScale(0, BigDecimal.ROUND_UP);
|
|
|
+ reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("4")) { //4 表示向下取整
|
|
|
+ BigDecimal bigDecimal = cashBackAmount.setScale(0, BigDecimal.ROUND_DOWN);
|
|
|
+ reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("5")) { //5表示 四舍五入后取整
|
|
|
+ BigDecimal bigDecimal = cashBackAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal bigDecimal1 = bigDecimal.setScale(0, BigDecimal.ROUND_DOWN);
|
|
|
+ reqJson.put("cashBackAmount", String.valueOf(bigDecimal1));
|
|
|
+ }
|
|
|
+ if ((!val.equals("2") && !val.equals("3") && !val.equals("4") && !val.equals("5")) || StringUtil.isEmpty(val)) {
|
|
|
+ BigDecimal bigDecimal = cashBackAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
} else {
|
|
|
- reqJson.put("cashBackAmount", reqJson.getString("refundAmount"));
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("2")) { //2表示四舍五入后保留小数点后一位
|
|
|
+ BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
|
|
|
+ BigDecimal bigDecimal = refundAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
|
|
|
+ reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("3")) { //3表示向上取整
|
|
|
+ BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
|
|
|
+ BigDecimal bigDecimal = refundAmount.setScale(0, BigDecimal.ROUND_UP);
|
|
|
+ reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("4")) { //4 表示向下取整
|
|
|
+ BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
|
|
|
+ BigDecimal bigDecimal = refundAmount.setScale(0, BigDecimal.ROUND_DOWN);
|
|
|
+ reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("5")) { //5表示 四舍五入后取整
|
|
|
+ BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
|
|
|
+ BigDecimal bigDecimal = refundAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal bigDecimal1 = bigDecimal.setScale(0, BigDecimal.ROUND_DOWN);
|
|
|
+ reqJson.put("cashBackAmount", String.valueOf(bigDecimal1));
|
|
|
+ }
|
|
|
+ if ((!val.equals("2") && !val.equals("3") && !val.equals("4") && !val.equals("5")) || StringUtil.isEmpty(val)) {
|
|
|
+ BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
|
|
|
+ BigDecimal bigDecimal = refundAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
}
|
|
|
//处理账户返现
|
|
|
JSONArray businesses = new JSONArray();
|
|
|
updateAccountBMOImpl.cashBackAccount(reqJson, dataFlowContext, businesses);
|
|
|
reqJson.put("inUse", 1);
|
|
|
if (StringUtil.isEmpty(reqJson.getString("refundAmount"))) {
|
|
|
- reqJson.put("returnAmount", df.format(cashBackAmount));
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("2")) { //2表示四舍五入后保留小数点后一位
|
|
|
+ BigDecimal bigDecimal = cashBackAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
|
|
|
+ reqJson.put("returnAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("3")) { //3表示向上取整
|
|
|
+ BigDecimal bigDecimal = cashBackAmount.setScale(0, BigDecimal.ROUND_UP);
|
|
|
+ reqJson.put("returnAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("4")) { //4 表示向下取整
|
|
|
+ BigDecimal bigDecimal = cashBackAmount.setScale(0, BigDecimal.ROUND_DOWN);
|
|
|
+ reqJson.put("returnAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("5")) { //5表示 四舍五入后取整
|
|
|
+ BigDecimal bigDecimal = cashBackAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal bigDecimal1 = bigDecimal.setScale(0, BigDecimal.ROUND_DOWN);
|
|
|
+ reqJson.put("returnAmount", String.valueOf(bigDecimal1));
|
|
|
+ }
|
|
|
+ if ((!val.equals("2") && !val.equals("3") && !val.equals("4") && !val.equals("5")) || StringUtil.isEmpty(val)) {
|
|
|
+ BigDecimal bigDecimal = cashBackAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ reqJson.put("returnAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
} else {
|
|
|
- reqJson.put("returnAmount", reqJson.getString("refundAmount"));
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("2")) { //2表示四舍五入后保留小数点后一位
|
|
|
+ BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
|
|
|
+ BigDecimal bigDecimal = refundAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
|
|
|
+ reqJson.put("returnAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("3")) { //3表示向上取整
|
|
|
+ BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
|
|
|
+ BigDecimal bigDecimal = refundAmount.setScale(0, BigDecimal.ROUND_UP);
|
|
|
+ reqJson.put("returnAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("4")) { //4 表示向下取整
|
|
|
+ BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
|
|
|
+ BigDecimal bigDecimal = refundAmount.setScale(0, BigDecimal.ROUND_DOWN);
|
|
|
+ reqJson.put("returnAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
+ if (!StringUtil.isEmpty(val) && val.equals("5")) { //5表示 四舍五入后取整
|
|
|
+ BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
|
|
|
+ BigDecimal bigDecimal = refundAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal bigDecimal1 = bigDecimal.setScale(0, BigDecimal.ROUND_DOWN);
|
|
|
+ reqJson.put("returnAmount", String.valueOf(bigDecimal1));
|
|
|
+ }
|
|
|
+ if ((!val.equals("2") && !val.equals("3") && !val.equals("4") && !val.equals("5")) || StringUtil.isEmpty(val)) {
|
|
|
+ BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
|
|
|
+ BigDecimal bigDecimal = refundAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ reqJson.put("returnAmount", String.valueOf(bigDecimal));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
@@ -333,6 +437,68 @@ public class ApplyRoomDiscountApi {
|
|
|
return updateApplyRoomDiscountBMOImpl.update(applyRoomDiscountPo);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 处理返还金额
|
|
|
+ *
|
|
|
+ * @param reqJson
|
|
|
+ * @return
|
|
|
+ * @serviceCode /applyRoomDiscount/dealWithRefundAmount
|
|
|
+ * @path /app/applyRoomDiscount/dealWithRefundAmount
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "/dealWithRefundAmount", method = RequestMethod.POST)
|
|
|
+ @Java110Transactional
|
|
|
+ public JSONObject dealWithRefundAmount(@RequestBody JSONObject reqJson, @RequestHeader(value = "user-id") String userId, DataFlowContext dataFlowContext) {
|
|
|
+ JSONArray fees = reqJson.getJSONArray("fees");
|
|
|
+ if (fees != null && fees.size() > 0) {
|
|
|
+ JSONObject fee = null;
|
|
|
+ BigDecimal cashBackAmount = new BigDecimal("0.00");//返现总金额
|
|
|
+ for (int index = 0; index < fees.size(); index++) {
|
|
|
+ fee = fees.getJSONObject(index);
|
|
|
+ if (fee.containsKey("checked") && !StringUtil.isEmpty(fee.getString("checked")) && fee.getString("checked").equals("true")) {
|
|
|
+ //获取优惠
|
|
|
+ JSONArray discounts = reqJson.getJSONArray("discounts");
|
|
|
+ for (int i = 0; i < discounts.size(); i++) {
|
|
|
+ JSONObject discountObject = discounts.getJSONObject(i);
|
|
|
+ if (!reqJson.getString("discountId").equals(discountObject.getString("discountId"))) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ JSONArray feeDiscountSpecs = discountObject.getJSONArray("feeDiscountSpecs");
|
|
|
+ //获取规则id
|
|
|
+ String ruleId = discounts.getJSONObject(i).getString("ruleId");
|
|
|
+ FeeDiscountRuleDto feeDiscountRuleDto = new FeeDiscountRuleDto();
|
|
|
+ feeDiscountRuleDto.setRuleId(ruleId);
|
|
|
+ List<FeeDiscountRuleDto> feeDiscountRuleDtos = feeDiscountRuleInnerServiceSMOImpl.queryFeeDiscountRules(feeDiscountRuleDto);
|
|
|
+ Assert.listOnlyOne(feeDiscountRuleDtos, "查询折扣规则错误!");
|
|
|
+ //获取折扣类型(1: 打折 2:减免 3:滞纳金 4:空置房打折 5:空置房减免)
|
|
|
+ String discountSmallType = feeDiscountRuleDtos.get(0).getDiscountSmallType();
|
|
|
+ String specValue = getRateSpecValueByFeeDiscountSpecs(feeDiscountSpecs);
|
|
|
+ if (!StringUtil.isEmpty(discountSmallType) && (discountSmallType.equals("1") || discountSmallType.equals("4"))) { //打折
|
|
|
+ FeeDetailDto feeDetailDto = new FeeDetailDto();
|
|
|
+ feeDetailDto.setDetailId(fee.getString("detailId"));
|
|
|
+ List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
|
|
|
+ Assert.listOnlyOne(feeDetailDtos, "查询费用明细表错误!");
|
|
|
+ BigDecimal receivedAmount = new BigDecimal(feeDetailDtos.get(0).getReceivedAmount());//获取实收金额
|
|
|
+ BigDecimal spec = new BigDecimal(specValue);//折扣
|
|
|
+ //计算打折后的实收金额
|
|
|
+ BigDecimal money = receivedAmount.multiply(spec);
|
|
|
+ cashBackAmount = cashBackAmount.add(receivedAmount.subtract(money)); //计算优惠的金额
|
|
|
+ } else if (!StringUtil.isEmpty(discountSmallType) && (discountSmallType.equals("2") || discountSmallType.equals("5"))) { //减免
|
|
|
+ FeeDetailDto feeDetailDto = new FeeDetailDto();
|
|
|
+ feeDetailDto.setDetailId(fee.getString("detailId"));
|
|
|
+ List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
|
|
|
+ Assert.listOnlyOne(feeDetailDtos, "查询费用明细表错误!");
|
|
|
+ BigDecimal spec = new BigDecimal(specValue);//减免金額
|
|
|
+ cashBackAmount = cashBackAmount.add(spec); //计算优惠的金额
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ DecimalFormat df = new DecimalFormat("0.00");
|
|
|
+ reqJson.put("returnAmount", df.format(cashBackAmount));
|
|
|
+ }
|
|
|
+ return reqJson;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 89002020980001 102020001 月份
|
|
|
* 89002020980002 102020001 打折率
|