From db689e5e2cb730b2cf08796fa224084f00758a71 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期六, 12 三月 2022 17:05:17 +0800
Subject: [PATCH] Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity
---
service-fee/src/main/java/com/java110/fee/api/ApplyRoomDiscountApi.java | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 175 insertions(+), 4 deletions(-)
diff --git a/service-fee/src/main/java/com/java110/fee/api/ApplyRoomDiscountApi.java b/service-fee/src/main/java/com/java110/fee/api/ApplyRoomDiscountApi.java
index 0bea20e..cf92855 100755
--- a/service-fee/src/main/java/com/java110/fee/api/ApplyRoomDiscountApi.java
+++ b/service-fee/src/main/java/com/java110/fee/api/ApplyRoomDiscountApi.java
@@ -1,8 +1,16 @@
package com.java110.fee.api;
+import com.alibaba.fastjson.JSON;
+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.dto.applyRoomDiscount.ApplyRoomDiscountDto;
import com.java110.dto.applyRoomDiscountType.ApplyRoomDiscountTypeDto;
+import com.java110.dto.fee.FeeDetailDto;
+import com.java110.dto.feeDiscount.FeeDiscountRuleDto;
+import com.java110.fee.bmo.account.ISaveAccountBMO;
+import com.java110.fee.bmo.account.IUpdateAccountBMO;
import com.java110.fee.bmo.applyRoomDiscount.IAuditApplyRoomDiscountBMO;
import com.java110.fee.bmo.applyRoomDiscount.IDeleteApplyRoomDiscountBMO;
import com.java110.fee.bmo.applyRoomDiscount.IGetApplyRoomDiscountBMO;
@@ -12,7 +20,11 @@
import com.java110.fee.bmo.applyRoomDiscountType.IGetApplyRoomDiscountTypeBMO;
import com.java110.fee.bmo.applyRoomDiscountType.ISaveApplyRoomDiscountTypeBMO;
import com.java110.fee.bmo.applyRoomDiscountType.IUpdateApplyRoomDiscountTypeBMO;
+import com.java110.intf.acct.IAccountInnerServiceSMO;
import com.java110.intf.fee.IApplyRoomDiscountInnerServiceSMO;
+import com.java110.intf.fee.IFeeDetailInnerServiceSMO;
+import com.java110.intf.fee.IFeeDiscountRuleInnerServiceSMO;
+import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
import com.java110.po.applyRoomDiscount.ApplyRoomDiscountPo;
import com.java110.po.applyRoomDiscountType.ApplyRoomDiscountTypePo;
import com.java110.utils.util.Assert;
@@ -20,8 +32,15 @@
import com.java110.utils.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -30,6 +49,8 @@
@RestController
@RequestMapping(value = "/applyRoomDiscount")
public class ApplyRoomDiscountApi {
+
+ private static final String SPEC_RATE = "89002020980013"; // 鎵撴姌鐜�
@Autowired
private ISaveApplyRoomDiscountBMO saveApplyRoomDiscountBMOImpl;
@@ -61,6 +82,24 @@
@Autowired
private IApplyRoomDiscountInnerServiceSMO applyRoomDiscountInnerServiceSMOImpl;
+ @Autowired
+ private IFeeDiscountRuleInnerServiceSMO feeDiscountRuleInnerServiceSMOImpl;
+
+ @Autowired
+ private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
+
+ @Autowired
+ private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl;
+
+ @Autowired
+ private IAccountInnerServiceSMO accountInnerServiceSMOImpl;
+
+ @Autowired
+ private ISaveAccountBMO saveAccountBMOImpl;
+
+ @Autowired
+ private IUpdateAccountBMO updateAccountBMOImpl;
+
/**
* 浼樻儬鐢宠
*
@@ -78,21 +117,34 @@
Assert.hasKeyAndValue(reqJson, "startTime", "璇锋眰鎶ユ枃涓湭鍖呭惈startTime");
Assert.hasKeyAndValue(reqJson, "endTime", "璇锋眰鎶ユ枃涓湭鍖呭惈endTime");
Assert.hasKeyAndValue(reqJson, "applyType", "璇锋眰鎶ユ枃涓湭鍖呭惈applyType");
+ if (!StringUtil.isEmpty(reqJson.getString("startTime"))) {
+ String startTime = reqJson.getString("startTime") + " 00:00:00";
+ reqJson.put("startTime", startTime);
+ }
+ if (!StringUtil.isEmpty(reqJson.getString("endTime"))) {
+ String endTime = reqJson.getString("endTime") + " 23:59:59";
+ reqJson.put("endTime", endTime);
+ }
ApplyRoomDiscountPo applyRoomDiscountPo = BeanConvertUtil.covertBean(reqJson, ApplyRoomDiscountPo.class);
ApplyRoomDiscountDto applyRoomDiscountDto = new ApplyRoomDiscountDto();
applyRoomDiscountDto.setCommunityId(applyRoomDiscountPo.getCommunityId());
applyRoomDiscountDto.setRoomId(applyRoomDiscountPo.getRoomId());
+ applyRoomDiscountDto.setFeeId(applyRoomDiscountPo.getFeeId());
//鏌ヨ鎶樻墸鐢宠琛ㄤ腑璇ユ埧灞嬩笅绗﹀悎鏉′欢鐨勬渶鏂扮殑涓�鏉℃暟鎹�
List<ApplyRoomDiscountDto> applyRoomDiscountDtos = applyRoomDiscountInnerServiceSMOImpl.queryFirstApplyRoomDiscounts(applyRoomDiscountDto);
//鑾峰彇鏈濉啓鐨勫紑濮嬫椂闂�
Date startDate = simpleDateFormat.parse(applyRoomDiscountPo.getStartTime());
if (applyRoomDiscountDtos.size() == 0) {
+ //绌虹疆鎴夸紭鎯犲彲鐢�
+ applyRoomDiscountPo.setInUse("0");
return saveApplyRoomDiscountBMOImpl.save(applyRoomDiscountPo);
} else if (applyRoomDiscountDtos.size() > 0) {
//鍙栧嚭缁撴潫鏃堕棿
String endTime = applyRoomDiscountDtos.get(0).getEndTime();
Date finishTime = simpleDateFormat.parse(endTime);
if (startDate.getTime() - finishTime.getTime() >= 0) {
+ //绌虹疆鎴夸紭鎯犲彲鐢�
+ applyRoomDiscountPo.setInUse("0");
return saveApplyRoomDiscountBMOImpl.save(applyRoomDiscountPo);
} else {
throw new UnsupportedOperationException("璇ユ椂闂存宸茬粡鐢宠杩囩┖缃埧锛岃閲嶆柊杈撳叆绌虹疆鎴跨敵璇峰紑濮嬪拰缁撴潫鏃堕棿");
@@ -134,6 +186,25 @@
}
/**
+ * 淇敼浼樻儬鐢宠
+ *
+ * @param reqJson
+ * @return
+ * @serviceCode /applyRoomDiscount/editApplyRoomDiscount
+ * @path /app/applyRoomDiscount/editApplyRoomDiscount
+ */
+ @RequestMapping(value = "/editApplyRoomDiscount", method = RequestMethod.POST)
+ public ResponseEntity<String> editApplyRoomDiscount(@RequestBody JSONObject reqJson, @RequestHeader(value = "user-id") String userId) {
+ Assert.hasKeyAndValue(reqJson, "communityId", "璇锋眰鎶ユ枃涓湭鍖呭惈communityId");
+ Assert.hasKeyAndValue(reqJson, "state", "璇锋眰鎶ユ枃涓湭鍖呭惈楠屾埧鐘舵��");
+ Assert.hasKeyAndValue(reqJson, "startTime", "璇锋眰鎶ユ枃涓湭鍖呭惈寮�濮嬫椂闂�");
+ Assert.hasKeyAndValue(reqJson, "endTime", "璇锋眰鎶ユ枃涓湭鍖呭惈缁撴潫鏃堕棿");
+ Assert.hasKeyAndValue(reqJson, "ardId", "ardId涓嶈兘涓虹┖");
+ ApplyRoomDiscountPo applyRoomDiscountPo = BeanConvertUtil.covertBean(reqJson, ApplyRoomDiscountPo.class);
+ return updateApplyRoomDiscountBMOImpl.update(applyRoomDiscountPo);
+ }
+
+ /**
* 瀹℃壒鎺ュ彛
*
* @param reqJson
@@ -142,13 +213,13 @@
* @path /app/applyRoomDiscount/updateReviewApplyRoomDiscount
*/
@RequestMapping(value = "/updateReviewApplyRoomDiscount", method = RequestMethod.POST)
- public ResponseEntity<String> updateReviewApplyRoomDiscount(@RequestBody JSONObject reqJson, @RequestHeader(value = "user-id") String userId) {
+ @Java110Transactional
+ public ResponseEntity<String> updateReviewApplyRoomDiscount(@RequestBody JSONObject reqJson, @RequestHeader(value = "user-id") String userId, DataFlowContext dataFlowContext) {
Assert.hasKeyAndValue(reqJson, "communityId", "璇锋眰鎶ユ枃涓湭鍖呭惈communityId");
Assert.hasKeyAndValue(reqJson, "state", "璇锋眰鎶ユ枃涓湭鍖呭惈楠屾埧鐘舵��");
Assert.hasKeyAndValue(reqJson, "startTime", "璇锋眰鎶ユ枃涓湭鍖呭惈寮�濮嬫椂闂�");
Assert.hasKeyAndValue(reqJson, "endTime", "璇锋眰鎶ユ枃涓湭鍖呭惈缁撴潫鏃堕棿");
Assert.hasKeyAndValue(reqJson, "reviewRemark", "璇锋眰鎶ユ枃涓湭鍖呭惈楠屾埧璇存槑");
-// Assert.hasKeyAndValue(reqJson, "discountId", "璇锋眰鎶ユ枃涓湭鍖呭惈鎶樻墸");
Assert.hasKeyAndValue(reqJson, "ardId", "ardId涓嶈兘涓虹┖");
ApplyRoomDiscountDto applyRoomDiscountDto = new ApplyRoomDiscountDto();
applyRoomDiscountDto.setArdId(reqJson.getString("ardId"));
@@ -157,8 +228,68 @@
Assert.listOnlyOne(applyRoomDiscountDtos, "鏌ヨ鎴垮眿浼樻儬淇℃伅閿欒锛�");
//鑾峰彇鎴垮眿浼樻儬瀹℃牳鐘舵��
String state = applyRoomDiscountDtos.get(0).getState();
- if (!StringUtil.isEmpty(state) && !state.equals("2")) {
+ String stateNow = reqJson.getString("state");
+ String returnWay = reqJson.getString("returnWay");
+ if (!StringUtil.isEmpty(state) && state.equals("4")) {
throw new IllegalArgumentException("璇ユ埧灞嬪凡瀹℃牳杩囷紝鏃犳硶鍐嶆杩涜瀹℃牳锛�");
+ }
+ if (reqJson.containsKey("selectedFees") && !StringUtil.isEmpty(reqJson.getString("selectedFees")) && stateNow.equals("4") && "1002".equals(returnWay)) {
+ //鑾峰彇鍓嶇浼犳潵鐨勭即璐瑰巻鍙�
+ String selectedFees = reqJson.getString("selectedFees");
+ JSONArray feeDetailIds = JSON.parseArray(selectedFees);
+ //鑾峰彇浼樻儬
+ JSONArray discounts = reqJson.getJSONArray("discounts");
+ BigDecimal cashBackAmount = new BigDecimal("0.00");//杩旂幇鎬婚噾棰�
+ for (int i = 0; i < discounts.size(); i++) {
+ JSONObject discountObject = discounts.getJSONObject(i);
+ 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 = feeDiscountSpecs.getJSONObject(1).getString("specValue");
+ String specValue = getRateSpecValueByFeeDiscountSpecs(feeDiscountSpecs);
+ if (!StringUtil.isEmpty(discountSmallType) && (discountSmallType.equals("1") || discountSmallType.equals("4"))) { //鎵撴姌
+ for (int index = 0; index < feeDetailIds.size(); index++) {
+ String feeDetailId = String.valueOf(feeDetailIds.get(index));
+ FeeDetailDto feeDetailDto = new FeeDetailDto();
+ feeDetailDto.setDetailId(feeDetailId);
+ 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"))) { //鍑忓厤
+ for (int index = 0; index < feeDetailIds.size(); index++) {
+ String feeDetailId = String.valueOf(feeDetailIds.get(index));
+ FeeDetailDto feeDetailDto = new FeeDetailDto();
+ feeDetailDto.setDetailId(feeDetailId);
+ 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("cashBackAmount", df.format(cashBackAmount));
+ //澶勭悊璐︽埛杩旂幇
+ JSONArray businesses = new JSONArray();
+ updateAccountBMOImpl.cashBackAccount(reqJson, dataFlowContext, businesses);
+ reqJson.put("inUse", 1);
+ reqJson.put("returnAmount", df.format(cashBackAmount));
+ }
+ } else {
+ reqJson.put("inUse", 0);
}
reqJson.put("reviewUserId", userId);
ApplyRoomDiscountPo applyRoomDiscountPo = BeanConvertUtil.covertBean(reqJson, ApplyRoomDiscountPo.class);
@@ -166,6 +297,46 @@
}
/**
+ * 89002020980001 102020001 鏈堜唤
+ * 89002020980002 102020001 鎵撴姌鐜�
+ * 89002020980003 102020002 鏈堜唤
+ * 89002020980004 102020002 鍑忓厤閲戦
+ * 89002020980005 102020003 婊炵撼閲�
+ * 89002020980006 102020004 婊炵撼閲�
+ * 89002020980007 102020005 鏈堜唤
+ * 89002020980008 102020005 鎵撴姌鐜�
+ * 89002020980009 102020005 娆犺垂鏃堕暱
+ * 89002020980010 102020006 鏈堜唤
+ * 89002020980011 102020006 鍑忓厤閲戦
+ * 89002020980012 102020007 鏈堜唤
+ * 89002020980013 102020007 鎵撴姌鐜�
+ * @param feeDiscountSpecs
+ * @return
+ */
+ private String getRateSpecValueByFeeDiscountSpecs(JSONArray feeDiscountSpecs) {
+
+ for (int specIndex = 0; specIndex < feeDiscountSpecs.size(); specIndex++) {
+ if (SPEC_RATE.equals(feeDiscountSpecs.getJSONObject(specIndex).getString("specId"))) {
+ return feeDiscountSpecs.getJSONObject(specIndex).getString("specValue");
+ }
+ if ("89002020980002".equals(feeDiscountSpecs.getJSONObject(specIndex).getString("specId"))) {
+ return feeDiscountSpecs.getJSONObject(specIndex).getString("specValue");
+ }
+ if ("89002020980004".equals(feeDiscountSpecs.getJSONObject(specIndex).getString("specId"))) {
+ return feeDiscountSpecs.getJSONObject(specIndex).getString("specValue");
+ }
+ if ("89002020980008".equals(feeDiscountSpecs.getJSONObject(specIndex).getString("specId"))) {
+ return feeDiscountSpecs.getJSONObject(specIndex).getString("specValue");
+ }
+ if ("89002020980011".equals(feeDiscountSpecs.getJSONObject(specIndex).getString("specId"))) {
+ return feeDiscountSpecs.getJSONObject(specIndex).getString("specValue");
+ }
+ }
+
+ throw new IllegalArgumentException("鏈壘鍒� 鎵撴姌绯绘暟");
+ }
+
+ /**
* 楠屾埧鎺ュ彛
*
* @param reqJson
--
Gitblit v1.8.0