From e20c58a63d3827d9c55cd5f387568fb0916b9590 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: 星期五, 17 三月 2023 23:37:12 +0800
Subject: [PATCH] Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity

---
 service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarPaymentCmd.java |   63 +++++++++++++++++++++++--------
 1 files changed, 46 insertions(+), 17 deletions(-)

diff --git a/service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarPaymentCmd.java b/service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarPaymentCmd.java
index df48c2b..e8f2e25 100644
--- a/service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarPaymentCmd.java
+++ b/service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarPaymentCmd.java
@@ -35,7 +35,9 @@
 import com.java110.po.fee.PayFeeDetailPo;
 import com.java110.po.fee.PayFeePo;
 import com.java110.utils.exception.CmdException;
+import com.java110.utils.lock.DistributedLock;
 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;
 
@@ -131,6 +133,7 @@
         carInoutDto.setPaId(machineDto.getLocationObjId());
         carInoutDto.setStates(new String[]{
                 CarInoutDto.STATE_IN,
+                CarInoutDto.STATE_PAY,
                 CarInoutDto.STATE_REPAY
         });
         List<CarInoutDto> carInoutDtos = carInoutV1InnerServiceSMOImpl.queryCarInouts(carInoutDto);
@@ -154,18 +157,9 @@
             throw new CmdException("鏇存柊璐圭敤澶辫触");
         }
 
-        CarInoutPo carInoutPo = new CarInoutPo();
-        carInoutPo.setPaId(carInoutDtos.get(0).getPaId());
-        carInoutPo.setInoutId(carInoutDtos.get(0).getInoutId());
-        carInoutPo.setCommunityId(carInoutDtos.get(0).getCommunityId());
-        carInoutPo.setState(CarInoutDto.STATE_PAY);
-        flag = carInoutV1InnerServiceSMOImpl.updateCarInout(carInoutPo);
+        CarInoutPo carInoutPo = updateCarInoutState(reqJson,machineDto,carInoutDtos.get(0));
 
-        if (flag < 1) {
-            throw new CmdException("鏇存柊鍑哄満鏃堕棿澶辫触");
-        }
-
-                //濡傛灉鏈夎垂鐢� 鍒欑即璐�
+        //濡傛灉鏈夎垂鐢� 鍒欑即璐�
         boolean hasFee = hasFeeAndPayFee(carInoutPo, carInoutPaymentPo);
 
         double realCharge = Double.parseDouble(carInoutPaymentPo.getRealCharge());
@@ -202,10 +196,46 @@
         paramIn.put("communityId", carInoutDtos.get(0).getCommunityId());
         paramIn.put("inoutId", carInoutDtos.get(0).getInoutId());
         paramIn.put("ownerId", ownerDtos.get(0).getMemberId());
-        saveTempCarFee(paramIn, machineDto,carInoutDtos.get(0));
+        saveTempCarFee(paramIn, machineDto, carInoutDtos.get(0));
 
         //鍐嶅幓缂磋垂
         hasFeeAndPayFee(carInoutPo, carInoutPaymentPo);
+    }
+
+    private CarInoutPo updateCarInoutState(JSONObject reqJson,MachineDto machineDto,CarInoutDto carInoutDto) {
+        int flag;
+
+        String requestId = DistributedLock.getLockUUID();
+        String key = "updateInoutState_" + carInoutDto.getInoutId();
+        try {
+            DistributedLock.waitGetDistributedLock(key, requestId);
+
+            CarInoutDto newCarInoutDto = new CarInoutDto();
+            newCarInoutDto.setCommunityId(reqJson.getString("communityId"));
+            newCarInoutDto.setCarNum(reqJson.getString("carNum"));
+            newCarInoutDto.setPaId(machineDto.getLocationObjId());
+            newCarInoutDto.setStates(new String[]{
+                    CarInoutDto.STATE_IN,
+                    CarInoutDto.STATE_REPAY
+            });
+            List<CarInoutDto> carInoutDtos = carInoutV1InnerServiceSMOImpl.queryCarInouts(newCarInoutDto);
+            if(carInoutDtos == null || carInoutDtos.size()<1){
+                return BeanConvertUtil.covertBean(carInoutDto,CarInoutPo.class);
+            }
+            CarInoutPo carInoutPo = new CarInoutPo();
+            carInoutPo.setInoutId(carInoutDto.getInoutId());
+            carInoutPo.setPaId(carInoutDto.getPaId());
+            carInoutPo.setCommunityId(carInoutDto.getCommunityId());
+            carInoutPo.setState(CarInoutDto.STATE_PAY);
+            flag = carInoutV1InnerServiceSMOImpl.updateCarInout(carInoutPo);
+            if (flag < 1) {
+                throw new CmdException("鏇存柊鍑哄満鏃堕棿澶辫触");
+            }
+            return carInoutPo;
+        } finally {
+            DistributedLock.releaseDistributedLock(requestId, key);
+        }
+
     }
 
     private boolean hasFeeAndPayFee(CarInoutPo carInoutPo, CarInoutPaymentPo carInoutPaymentPo) {
@@ -232,11 +262,11 @@
 
         PayFeeDetailPo payFeeDetailPo = new PayFeeDetailPo();
         payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
-        if(CarInoutPaymentDto.PAY_TYPE_CRASH.equals(carInoutPaymentPo.getPayType())) {
+        if (CarInoutPaymentDto.PAY_TYPE_CRASH.equals(carInoutPaymentPo.getPayType())) {
             payFeeDetailPo.setPrimeRate(FeeDetailDto.PRIME_REATE_CRASH);
-        }else if(CarInoutPaymentDto.PAY_TYPE_WECHAT.equals(carInoutPaymentPo.getPayType())){
+        } else if (CarInoutPaymentDto.PAY_TYPE_WECHAT.equals(carInoutPaymentPo.getPayType())) {
             payFeeDetailPo.setPrimeRate(FeeDetailDto.PRIME_REATE_WECHAT_QRCODE);
-        }else{
+        } else {
             payFeeDetailPo.setPrimeRate(FeeDetailDto.PRIME_REATE_ALI_QRCODE);
         }
         FeeDto feeDto = feeDtos.get(0);
@@ -255,8 +285,7 @@
         return true;
     }
 
-    private void saveTempCarFee(JSONObject reqJson, MachineDto machineDto,CarInoutDto carInoutDto) {
-
+    private void saveTempCarFee(JSONObject reqJson, MachineDto machineDto, CarInoutDto carInoutDto) {
 
 
         //鍒涘缓璐圭敤

--
Gitblit v1.8.0