From 7da40dfc8536c46b574024c23bcfb5f2504114d9 Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期日, 23 十月 2022 18:03:18 +0800
Subject: [PATCH] 优化代码

---
 service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarPaymentCmd.java |  198 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 185 insertions(+), 13 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 bbf368e..6fa3576 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
@@ -4,13 +4,20 @@
 import com.java110.core.annotation.Java110Cmd;
 import com.java110.core.annotation.Java110Transactional;
 import com.java110.core.context.ICmdDataFlowContext;
-import com.java110.core.event.cmd.AbstractServiceCmdListener;
+import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.CommunityMemberDto;
+import com.java110.dto.carInoutPayment.CarInoutPaymentDto;
 import com.java110.dto.fee.FeeAttrDto;
+import com.java110.dto.fee.FeeConfigDto;
+import com.java110.dto.fee.FeeDetailDto;
 import com.java110.dto.fee.FeeDto;
 import com.java110.dto.machine.CarInoutDto;
 import com.java110.dto.machine.MachineDto;
+import com.java110.dto.owner.OwnerCarDto;
+import com.java110.dto.owner.OwnerDto;
+import com.java110.dto.tempCarFeeConfig.TempCarFeeConfigDto;
 import com.java110.intf.common.ICarInoutPaymentV1InnerServiceSMO;
 import com.java110.intf.common.ICarInoutV1InnerServiceSMO;
 import com.java110.intf.common.IMachineInnerServiceSMO;
@@ -19,17 +26,22 @@
 import com.java110.intf.fee.IFeeDetailInnerServiceSMO;
 import com.java110.intf.fee.IFeeInnerServiceSMO;
 import com.java110.intf.fee.ITempCarFeeConfigInnerServiceSMO;
+import com.java110.intf.user.IBuildingOwnerV1InnerServiceSMO;
 import com.java110.intf.user.IOwnerCarInnerServiceSMO;
 import com.java110.intf.user.IOwnerCarV1InnerServiceSMO;
 import com.java110.po.car.CarInoutPo;
 import com.java110.po.carInoutPayment.CarInoutPaymentPo;
+import com.java110.po.fee.FeeAttrPo;
 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;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -43,8 +55,9 @@
  * // modify by 寮犱笁 at 2021-09-12 绗�10琛屽湪鏌愮鍦烘櫙涓嬪瓨鍦ㄦ煇绉峛ug 闇�瑕佷慨澶嶏紝娉ㄩ噴10鑷�20琛� 鍔犲叆 20琛岃嚦30琛�
  */
 @Java110Cmd(serviceCode = "machineTranslate.machineUploadCarPaymentCmd")
-public class MachineUploadCarPaymentCmd extends AbstractServiceCmdListener {
+public class MachineUploadCarPaymentCmd extends Cmd {
 
+    public static final String TEMP_CAR_OWNER = "涓存椂杞﹁溅涓�";
 
     @Autowired
     private IMachineInnerServiceSMO machineInnerServiceSMOImpl;
@@ -75,6 +88,9 @@
 
     @Autowired
     private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
+
+    @Autowired
+    private IBuildingOwnerV1InnerServiceSMO buildingOwnerV1InnerServiceSMOImpl;
 
     /**
      * data.put("carNum", carInoutDto.getCarNum());
@@ -140,19 +156,85 @@
             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());
+
+        //鏈夎垂鐢� 鎴栬�� 缂磋垂涓�0 鏃剁粨鏉�
+        if (hasFee || realCharge == 0) {
+            return;
         }
 
-        //缂磋垂
+        OwnerCarDto ownerCarDto = new OwnerCarDto();
+        ownerCarDto.setCarNum(reqJson.getString("carNum"));
+        ownerCarDto.setCommunityId(reqJson.getString("communityId"));
+        ownerCarDto.setCarType(OwnerCarDto.CAR_TYPE_TEMP);
+        List<OwnerCarDto> ownerCarDtos = ownerCarV1InnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+
+        if (ownerCarDtos == null || ownerCarDtos.size() < 1) {
+            return;
+        }
+
+        // 鍒ゆ柇鏄惁瀛樺湪 涓存椂杞� 铏氭嫙涓氫富
+        OwnerDto ownerDto = new OwnerDto();
+        ownerDto.setCommunityId(reqJson.getString("communityId"));
+        ownerDto.setOwnerTypeCd(OwnerDto.OWNER_TYPE_CD_OWNER);
+        ownerDto.setOwnerFlag(OwnerDto.OWNER_FLAG_FALSE);
+        ownerDto.setName(TEMP_CAR_OWNER);
+        List<OwnerDto> ownerDtos = buildingOwnerV1InnerServiceSMOImpl.queryBuildingOwners(ownerDto);
+        if (ownerDtos == null || ownerDtos.size() < 1) {
+            return;
+        }
+        JSONObject paramIn = new JSONObject();
+        paramIn.put("inTime", carInoutDtos.get(0).getInTime());
+        paramIn.put("carNum", reqJson.getString("carNum"));
+        paramIn.put("carId", ownerCarDtos.get(0).getCarId());
+        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));
+
+        //鍐嶅幓缂磋垂
         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) {
@@ -179,11 +261,17 @@
 
         PayFeeDetailPo payFeeDetailPo = new PayFeeDetailPo();
         payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
-        payFeeDetailPo.setPrimeRate("1.00");
+        if (CarInoutPaymentDto.PAY_TYPE_CRASH.equals(carInoutPaymentPo.getPayType())) {
+            payFeeDetailPo.setPrimeRate(FeeDetailDto.PRIME_REATE_CRASH);
+        } else if (CarInoutPaymentDto.PAY_TYPE_WECHAT.equals(carInoutPaymentPo.getPayType())) {
+            payFeeDetailPo.setPrimeRate(FeeDetailDto.PRIME_REATE_WECHAT_QRCODE);
+        } else {
+            payFeeDetailPo.setPrimeRate(FeeDetailDto.PRIME_REATE_ALI_QRCODE);
+        }
         FeeDto feeDto = feeDtos.get(0);
         payFeeDetailPo.setStartTime(DateUtil.getFormatTimeString(feeDto.getStartTime(), DateUtil.DATE_FORMATE_STRING_A));
         payFeeDetailPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
-        payFeeDetailPo.setCommunityId(carInoutPaymentPo.getCommunityId());
+        payFeeDetailPo.setCommunityId(carInoutPo.getCommunityId());
         payFeeDetailPo.setCycles("1");
         payFeeDetailPo.setReceivableAmount(carInoutPaymentPo.getPayCharge());
         payFeeDetailPo.setReceivedAmount(carInoutPaymentPo.getRealCharge());
@@ -195,4 +283,88 @@
         }
         return true;
     }
+
+    private void saveTempCarFee(JSONObject reqJson, MachineDto machineDto, CarInoutDto carInoutDto) {
+
+
+        //鍒涘缓璐圭敤
+        TempCarFeeConfigDto tempCarFeeConfigDto = new TempCarFeeConfigDto();
+        tempCarFeeConfigDto.setCommunityId(reqJson.getString("communityId"));
+        tempCarFeeConfigDto.setPaId(carInoutDto.getPaId());
+        List<TempCarFeeConfigDto> tempCarFeeConfigDtos = tempCarFeeConfigInnerServiceSMOImpl.queryTempCarFeeConfigs(tempCarFeeConfigDto);
+
+        if (tempCarFeeConfigDtos == null || tempCarFeeConfigDtos.size() < 1) { // 鍋滆溅鍦烘湭閰嶇疆鏀惰垂瑙勫垯 鍒欎笉鍒涘缓璐圭敤
+            return;
+        }
+
+        CommunityMemberDto communityMemberDto = new CommunityMemberDto();
+        communityMemberDto.setCommunityId(reqJson.getString("communityId"));
+        communityMemberDto.setMemberTypeCd(CommunityMemberDto.MEMBER_TYPE_PROPERTY);
+        communityMemberDto.setAuditStatusCd(CommunityMemberDto.AUDIT_STATUS_NORMAL);
+        List<CommunityMemberDto> communityMemberDtos = communityInnerServiceSMOImpl.getCommunityMembers(communityMemberDto);
+
+        Assert.listOnlyOne(communityMemberDtos, "灏忓尯鎴愬憳涓嶅瓨鍦�");
+        List<PayFeePo> payFeePos = new ArrayList<>();
+        List<FeeAttrPo> feeAttrPos = new ArrayList<>();
+        PayFeePo payFeePo = new PayFeePo();
+        payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
+        payFeePo.setEndTime(reqJson.getString("inTime"));
+        payFeePo.setState(FeeDto.STATE_DOING);
+        payFeePo.setCommunityId(reqJson.getString("communityId"));
+        payFeePo.setConfigId(tempCarFeeConfigDto.getFeeConfigId());
+        payFeePo.setPayerObjId(reqJson.getString("carId"));
+        payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_CAR);
+        payFeePo.setUserId("-1");
+        payFeePo.setIncomeObjId(communityMemberDtos.get(0).getMemberId());
+        payFeePo.setFeeTypeCd(FeeConfigDto.FEE_TYPE_CD_PARKING);
+        payFeePo.setFeeFlag(FeeDto.FEE_FLAG_ONCE);
+        payFeePo.setAmount("-1");
+        payFeePo.setBatchId("-1");
+        //payFeePo.setStartTime(importRoomFee.getStartTime());
+        payFeePo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        payFeePos.add(payFeePo);
+        FeeAttrPo feeAttrPo = new FeeAttrPo();
+        feeAttrPo.setCommunityId(reqJson.getString("communityId"));
+        feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+        feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME);
+        feeAttrPo.setValue(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        feeAttrPo.setFeeId(payFeePo.getFeeId());
+        feeAttrPos.add(feeAttrPo);
+        feeAttrPo = new FeeAttrPo();
+        feeAttrPo.setCommunityId(reqJson.getString("communityId"));
+        feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+        feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_ID);
+        feeAttrPo.setValue(reqJson.getString("ownerId"));
+        feeAttrPo.setFeeId(payFeePo.getFeeId());
+        feeAttrPos.add(feeAttrPo);
+        feeAttrPo = new FeeAttrPo();
+        feeAttrPo.setCommunityId(reqJson.getString("communityId"));
+        feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+        feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_NAME);
+        feeAttrPo.setValue(TEMP_CAR_OWNER);
+        feeAttrPo.setFeeId(payFeePo.getFeeId());
+        feeAttrPos.add(feeAttrPo);
+        feeAttrPo = new FeeAttrPo();
+        feeAttrPo.setCommunityId(reqJson.getString("communityId"));
+        feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+        feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_LINK);
+        feeAttrPo.setValue("11111111111");
+        feeAttrPo.setFeeId(payFeePo.getFeeId());
+        feeAttrPos.add(feeAttrPo);
+        feeAttrPo = new FeeAttrPo();
+        feeAttrPo.setCommunityId(reqJson.getString("communityId"));
+        feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+        feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_CAR_INOUT_ID);
+        feeAttrPo.setValue(reqJson.getString("inoutId"));
+        feeAttrPo.setFeeId(payFeePo.getFeeId());
+        feeAttrPos.add(feeAttrPo);
+        int flag = feeInnerServiceSMOImpl.saveFee(payFeePos);
+        if (flag < 1) {
+            throw new CmdException("淇濆瓨涓存椂杞﹁垂鐢ㄥけ璐�");
+        }
+        flag = feeAttrInnerServiceSMOImpl.saveFeeAttrs(feeAttrPos);
+        if (flag < 1) {
+            throw new CmdException("淇濆瓨涓存椂杞﹁垂鐢ㄥ睘鎬уけ璐�");
+        }
+    }
 }

--
Gitblit v1.8.0