From 22ab448873d921fdcad0eacc20288e8ff17cf5c6 Mon Sep 17 00:00:00 2001
From: 1098226878@qq.com <1098226878@qq.com>
Date: 星期二, 11 一月 2022 16:13:33 +0800
Subject: [PATCH] 优化代码

---
 service-fee/src/main/java/com/java110/fee/cmd/tempCarFee/GetTempCarFeeOrderCmd.java |   79 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 76 insertions(+), 3 deletions(-)

diff --git a/service-fee/src/main/java/com/java110/fee/cmd/tempCarFee/GetTempCarFeeOrderCmd.java b/service-fee/src/main/java/com/java110/fee/cmd/tempCarFee/GetTempCarFeeOrderCmd.java
index c32c32b..fd80a6f 100644
--- a/service-fee/src/main/java/com/java110/fee/cmd/tempCarFee/GetTempCarFeeOrderCmd.java
+++ b/service-fee/src/main/java/com/java110/fee/cmd/tempCarFee/GetTempCarFeeOrderCmd.java
@@ -1,16 +1,29 @@
 package com.java110.fee.cmd.tempCarFee;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.annotation.Java110Cmd;
 import com.java110.core.context.ICmdDataFlowContext;
 import com.java110.core.event.cmd.AbstractServiceCmdListener;
 import com.java110.core.event.cmd.CmdEvent;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.couponUser.CouponUserDto;
 import com.java110.dto.tempCarFeeConfig.TempCarPayOrderDto;
 import com.java110.fee.bmo.tempCarFee.IGetTempCarFeeRules;
+import com.java110.intf.acct.ICouponUserV1InnerServiceSMO;
+import com.java110.utils.cache.CommonCache;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * 绫昏〃杩帮細鍒犻櫎
@@ -24,14 +37,17 @@
  */
 @Java110Cmd(serviceCode = "tempCarFee.getTempCarFeeOrder")
 public class GetTempCarFeeOrderCmd extends AbstractServiceCmdListener {
-
+    @Autowired
+    private ICouponUserV1InnerServiceSMO couponUserV1InnerServiceSMOImpl;
     @Autowired
     private IGetTempCarFeeRules getTempCarFeeRulesImpl;
+
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
 
         Assert.hasKeyAndValue(reqJson, "paId", "paId涓嶈兘涓虹┖");
         Assert.hasKeyAndValue(reqJson, "carNum", "carNum涓嶈兘涓虹┖");
+        Assert.hasKeyAndValue(reqJson, "couponIds", "couponIds涓嶈兘涓虹┖");
 
     }
 
@@ -40,7 +56,64 @@
         TempCarPayOrderDto tempCarPayOrderDto = new TempCarPayOrderDto();
         tempCarPayOrderDto.setPaId(reqJson.getString("paId"));
         tempCarPayOrderDto.setCarNum(reqJson.getString("carNum"));
-       ResponseEntity<String> responseEntity = getTempCarFeeRulesImpl.getTempCarFeeOrder(tempCarPayOrderDto);
-       cmdDataFlowContext.setResponseEntity(responseEntity);
+        ResponseEntity<String> responseEntity = getTempCarFeeRulesImpl.getTempCarFeeOrder(tempCarPayOrderDto);
+
+        if (responseEntity.getStatusCode() != HttpStatus.OK) {
+            cmdDataFlowContext.setResponseEntity(responseEntity);
+            return;
+        }
+        JSONObject orderInfo = JSONObject.parseObject(responseEntity.getBody().toString());
+        if (orderInfo.getIntValue("code") != 0) {
+            cmdDataFlowContext.setResponseEntity(responseEntity);
+            return;
+        }
+
+        JSONObject fee = orderInfo.getJSONObject("data");
+        //double money = fee.getDouble("payCharge");
+        BigDecimal money = new BigDecimal(fee.getDouble("payCharge"));
+        //3.0 鑰冭檻浼樻儬鍗�
+        double couponPrice = checkCouponUser(reqJson);
+        money = money.subtract(new BigDecimal(couponPrice)).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+
+        double receivedAmount = money.doubleValue();
+        //鎵�鏈� 浼樻儬鎶樻墸璁$畻瀹屽悗锛屽鏋滄�婚噾棰濆皬浜庣瓑浜�0锛屽垯杩斿洖鎬绘墸娆句负0
+        if (receivedAmount <= 0) {
+            receivedAmount = 0.0;
+        }
+        fee.put("receivedAmount", receivedAmount);
+        fee.put("oId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_oId));
+        fee.putAll(reqJson);
+        CommonCache.setValue("getTempCarFeeOrder" + fee.getString("oId"), fee.toJSONString(), 24 * 60 * 60);
+        ResponseEntity<String> responseEntitys = new ResponseEntity<>(fee.toJSONString(), HttpStatus.OK);
+        cmdDataFlowContext.setResponseEntity(responseEntitys);
+    }
+
+    private double checkCouponUser(JSONObject paramObj) {
+
+        BigDecimal couponPrice = new BigDecimal(0.0);
+        String couponIds = paramObj.getString("couponIds");
+        if (couponIds == null || "".equals(couponIds)) {
+            paramObj.put("couponPrice", couponPrice.doubleValue());
+            paramObj.put("couponUserDtos", new JSONArray()); //杩欓噷鑰冭檻绌�
+            return couponPrice.doubleValue();
+        }
+
+        List<String> result = Arrays.asList(couponIds.split(","));
+        CouponUserDto couponUserDto = new CouponUserDto();
+        couponUserDto.setCouponIds(result.toArray(new String[result.size()]));
+        List<CouponUserDto> couponUserDtos = couponUserV1InnerServiceSMOImpl.queryCouponUsers(couponUserDto);
+        if (couponUserDtos == null || couponUserDtos.size() < 1) {
+            paramObj.put("couponPrice", couponPrice.doubleValue());
+            return couponPrice.doubleValue();
+        }
+        for (CouponUserDto couponUser : couponUserDtos) {
+            //涓嶈绠楀凡杩囨湡璐墿鍒搁噾棰�
+            if (couponUser.getEndTime().compareTo(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B)) >= 0) {
+                couponPrice = couponPrice.add(new BigDecimal(Double.parseDouble(couponUser.getActualPrice())));
+            }
+        }
+        paramObj.put("couponPrice", couponPrice.doubleValue());
+        paramObj.put("couponUserDtos", BeanConvertUtil.beanCovertJSONArray(couponUserDtos));
+        return couponPrice.doubleValue();
     }
 }

--
Gitblit v1.8.0