From 12a0dcf99b69ed311f87f06c5b8d3d94c7f99214 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期一, 12 六月 2023 15:16:04 +0800
Subject: [PATCH] optimize code

---
 service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarLogCmd.java |  437 ++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 338 insertions(+), 99 deletions(-)

diff --git a/service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarLogCmd.java b/service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarLogCmd.java
index 7e9a887..0cb37a4 100644
--- a/service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarLogCmd.java
+++ b/service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarLogCmd.java
@@ -1,43 +1,55 @@
 package com.java110.common.cmd.machineTranslate;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 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.fee.FeeAttrDto;
 import com.java110.dto.fee.FeeConfigDto;
 import com.java110.dto.fee.FeeDto;
+import com.java110.dto.machine.CarBlackWhiteDto;
 import com.java110.dto.machine.CarInoutDetailDto;
 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.parking.ParkingBoxAreaDto;
+import com.java110.dto.parkingCoupon.ParkingCouponCarDto;
 import com.java110.dto.tempCarFeeConfig.TempCarFeeConfigDto;
+import com.java110.intf.acct.IParkingCouponCarOrderV1InnerServiceSMO;
+import com.java110.intf.acct.IParkingCouponCarV1InnerServiceSMO;
 import com.java110.intf.common.ICarInoutDetailV1InnerServiceSMO;
 import com.java110.intf.common.ICarInoutPaymentV1InnerServiceSMO;
 import com.java110.intf.common.ICarInoutV1InnerServiceSMO;
 import com.java110.intf.common.IMachineInnerServiceSMO;
 import com.java110.intf.community.ICommunityInnerServiceSMO;
+import com.java110.intf.community.IParkingBoxAreaV1InnerServiceSMO;
 import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
+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.ICarBlackWhiteV1InnerServiceSMO;
 import com.java110.intf.user.IOwnerCarInnerServiceSMO;
 import com.java110.intf.user.IOwnerCarV1InnerServiceSMO;
 import com.java110.po.car.CarInoutDetailPo;
 import com.java110.po.car.CarInoutPo;
 import com.java110.po.car.OwnerCarPo;
-import com.java110.po.carInoutPayment.CarInoutPaymentPo;
 import com.java110.po.fee.FeeAttrPo;
 import com.java110.po.fee.PayFeePo;
 import com.java110.po.owner.OwnerPo;
+import com.java110.po.parkingCouponCar.ParkingCouponCarPo;
+import com.java110.po.parkingCouponCarOrder.ParkingCouponCarOrderPo;
 import com.java110.utils.exception.CmdException;
+import com.java110.utils.lock.DistributedLock;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.ArrayList;
@@ -54,12 +66,12 @@
  * // modify by 寮犱笁 at 2021-09-12 绗�10琛屽湪鏌愮鍦烘櫙涓嬪瓨鍦ㄦ煇绉峛ug 闇�瑕佷慨澶嶏紝娉ㄩ噴10鑷�20琛� 鍔犲叆 20琛岃嚦30琛�
  */
 @Java110Cmd(serviceCode = "machineTranslate.machineUploadCarLog")
-public class MachineUploadCarLogCmd extends AbstractServiceCmdListener {
+public class MachineUploadCarLogCmd extends Cmd {
 
-    public static final int CAR_TYPE_MONTH = 0; //鏈堢杞�
+    public static final int CAR_TYPE_MONTH = 1001; //鏈堢杞�
     public static final int CAR_TYPE_SUB = 1; //鎴愬憳杞﹁締
-    public static final int CAR_TYPE_TEMP = 2; //涓存椂杞﹁締
-    public static final int CAR_TYPE_NO_DATA = 3; //娌℃湁鏁版嵁
+    public static final int CAR_TYPE_TEMP = 1003; //涓存椂杞﹁締
+    public static final String CAR_TYPE_NO_DATA = "3"; //娌℃湁鏁版嵁
 
     public static final String TEMP_CAR_OWNER = "涓存椂杞﹁溅涓�";
 
@@ -99,6 +111,21 @@
     @Autowired
     private ICarInoutPaymentV1InnerServiceSMO carInoutPaymentV1InnerServiceSMOImpl;
 
+    @Autowired
+    private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
+
+    @Autowired
+    private IParkingBoxAreaV1InnerServiceSMO parkingBoxAreaV1InnerServiceSMOImpl;
+
+    @Autowired
+    private ICarBlackWhiteV1InnerServiceSMO carBlackWhiteV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IParkingCouponCarV1InnerServiceSMO parkingCouponCarV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IParkingCouponCarOrderV1InnerServiceSMO parkingCouponCarOrderV1InnerServiceSMOImpl;
+
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
         Assert.hasKeyAndValue(reqJson, "machineCode", "蹇呭~锛岃濉啓璁惧缂栫爜");
@@ -111,40 +138,120 @@
     public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
 
         //鏄惁鏄复鏃惰溅
-        int tempCar = CAR_TYPE_MONTH;
+        String tempCar = OwnerCarDto.LEASE_TYPE_TEMP;
+        String tempCarName = "涓存椂杞�";
 
 
         //鏌ヨ璁惧淇℃伅
         MachineDto machineDto = new MachineDto();
         machineDto.setMachineCode(reqJson.getString("machineCode"));
         machineDto.setCommunityId(reqJson.getString("communityId"));
-        machineDto.setMachineTypeCd(MachineDto.MACHINE_TYPE_CAR);
         List<MachineDto> machineDtos = machineInnerServiceSMOImpl.queryMachines(machineDto);
 
         Assert.listOnlyOne(machineDtos, "璁惧涓嶅瓨鍦�");
+
+        List<String> paIds = new ArrayList<>();
+        ParkingBoxAreaDto parkingBoxAreaDto = new ParkingBoxAreaDto();
+        parkingBoxAreaDto.setBoxId(machineDto.getLocationObjId());
+        List<ParkingBoxAreaDto> parkingBoxAreaDtos = parkingBoxAreaV1InnerServiceSMOImpl.queryParkingBoxAreas(parkingBoxAreaDto);
+        if (parkingBoxAreaDtos != null && parkingBoxAreaDtos.size() > 0) {
+            for (ParkingBoxAreaDto parkingBoxAreaDto1 : parkingBoxAreaDtos) {
+                paIds.add(parkingBoxAreaDto1.getPaId());
+            }
+        }
 
         //鏌ヨ杞﹁締
         OwnerCarDto ownerCarDto = new OwnerCarDto();
         ownerCarDto.setCarNum(reqJson.getString("carNum"));
         ownerCarDto.setCommunityId(reqJson.getString("communityId"));
+        ownerCarDto.setPaIds(paIds.toArray(new String[paIds.size()]));
         List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
 
         //璇存槑鏄复鏃惰溅
         if (ownerCarDtos == null || ownerCarDtos.size() == 0) {
             tempCar = CAR_TYPE_NO_DATA;
+            tempCarName = "涓存椂杞�";
         } else {
             reqJson.put("carId", ownerCarDtos.get(0).getCarId());
-            if (OwnerCarDto.CAR_TYPE_TEMP.equals(ownerCarDtos.get(0).getCarTypeCd())) {
-                tempCar = CAR_TYPE_TEMP;
+            tempCar = ownerCarDtos.get(0).getLeaseType();
+            tempCarName = ownerCarDtos.get(0).getLeaseTypeName();
+            if (ownerCarDtos.size() > 1) {
+                for (OwnerCarDto tmpOwnerCarDto : ownerCarDtos) {
+                    if (OwnerCarDto.LEASE_TYPE_TEMP.equals(tmpOwnerCarDto.getLeaseType())) {
+                        continue;
+                    }
+                    tempCar = tmpOwnerCarDto.getLeaseType();
+                    tempCarName = tmpOwnerCarDto.getLeaseTypeName();
+                }
+            }
+
+            //涓诲壇杞﹁締涓� 鏈変竴涓溅杈嗗湪鍦猴紝杩欎釜杞﹀満褰撳仛涓存椂杞﹀鐞�
+            if (hasInParkingArea(ownerCarDtos.get(0).getCarId(), reqJson.getString("carNum"), reqJson.getString("communityId"), paIds)) {
+                tempCar = CAR_TYPE_NO_DATA;
+                tempCarName = "涓存椂杞�";
+            }
+
+            int day = DateUtil.differentDaysUp(DateUtil.getCurrentDate(),ownerCarDtos.get(0).getEndTime());
+
+            if(day <= -5){
+                tempCar = CAR_TYPE_NO_DATA;
+                tempCarName = "涓存椂杞�";
             }
         }
 
+
+
+
         //杩涘満澶勭悊
         if (MachineDto.DIRECTION_IN.equals(machineDtos.get(0).getDirection())) {
-            carIn(reqJson, machineDtos.get(0), tempCar);
+            carIn(reqJson, machineDtos.get(0), tempCar, tempCarName);
         } else {
-            carOut(reqJson, machineDtos.get(0), tempCar);
+            carOut(reqJson, machineDtos.get(0), tempCar, tempCarName);
         }
+
+    }
+
+    private boolean hasInParkingArea(String carId, String carNum, String communityId, List<String> paIds) {
+        if (StringUtil.isEmpty(carId) || "-1".equals(carId)) {
+            return false;
+        }
+
+        // 鍒ゆ柇鏄惁涓轰富鍓溅杈�
+        OwnerCarDto carDto = new OwnerCarDto();
+        carDto.setPaIds(paIds.toArray(new String[paIds.size()]));
+        carDto.setCarNum(carNum);
+        carDto.setCarId(carId);
+        List<OwnerCarDto> tmpCarDtos = ownerCarV1InnerServiceSMOImpl.queryOwnerCars(carDto);
+        if (tmpCarDtos == null || tmpCarDtos.size() < 2) {
+            return false;
+        }
+
+        List<String> otherCarNums = new ArrayList<>();
+
+        for (OwnerCarDto tempCarDto : tmpCarDtos) {
+            if (tempCarDto.getCarNum().equals(carNum)) {
+                continue;
+            }
+            otherCarNums.add(tempCarDto.getCarNum());
+        }
+
+        if (otherCarNums.size() < 1) {
+            return false;
+        }
+
+        for (String otherCarNum : otherCarNums) {
+            //鍒ゆ柇杞﹁締鏄惁鍦� 鍦哄唴
+            CarInoutDto inoutDto = new CarInoutDto();
+            inoutDto.setCarNum(otherCarNum);
+            inoutDto.setPaIds(paIds.toArray(new String[paIds.size()]));
+            inoutDto.setState(CarInoutDto.STATE_IN);
+            List<CarInoutDto> carInoutDtos = carInoutV1InnerServiceSMOImpl.queryCarInouts(inoutDto);
+            if (carInoutDtos != null && carInoutDtos.size() > 0) {
+                return true;
+            }
+        }
+
+        return false;
 
     }
 
@@ -155,12 +262,31 @@
      * @param machineDto
      * @param tempCar
      */
-    private void carOut(JSONObject reqJson, MachineDto machineDto, int tempCar) {
+    private void carOut(JSONObject reqJson, MachineDto machineDto, String tempCar, String tempCarName) {
+
+        String state = CarInoutDto.STATE_OUT;
+        //杩涘満澶辫触璁板綍
+        if (reqJson.containsKey("state") && "5".equals(reqJson.getString("state"))) {
+            state = CarInoutDto.STATE_IN_FAIL;
+        }
+
+
+        String paId = "";
+        if (MachineDto.MACHINE_TYPE_CAR.equals(machineDto.getMachineTypeCd())) {
+            ParkingBoxAreaDto parkingBoxAreaDto = new ParkingBoxAreaDto();
+            parkingBoxAreaDto.setBoxId(machineDto.getLocationObjId());
+            parkingBoxAreaDto.setDefaultArea(ParkingBoxAreaDto.DEFAULT_AREA_TRUE);
+            List<ParkingBoxAreaDto> parkingBoxAreaDtos = parkingBoxAreaV1InnerServiceSMOImpl.queryParkingBoxAreas(parkingBoxAreaDto);
+            if (parkingBoxAreaDtos == null || parkingBoxAreaDtos.size() < 1) {
+                throw new CmdException("宀椾涵鏈厤缃仠杞﹀満" + machineDto.getLocationObjId());
+            }
+            paId = parkingBoxAreaDtos.get(0).getPaId();
+        }
 
         CarInoutDto carInoutDto = new CarInoutDto();
         carInoutDto.setCommunityId(reqJson.getString("communityId"));
         carInoutDto.setCarNum(reqJson.getString("carNum"));
-        carInoutDto.setPaId(machineDto.getLocationObjId());
+        carInoutDto.setPaId(paId);
         carInoutDto.setStates(new String[]{
                 CarInoutDto.STATE_IN,
                 CarInoutDto.STATE_PAY,
@@ -168,20 +294,36 @@
         });
         List<CarInoutDto> carInoutDtos = carInoutV1InnerServiceSMOImpl.queryCarInouts(carInoutDto);
 
+        // 娌℃湁杩涘満璁板綍
         if (carInoutDtos == null || carInoutDtos.size() < 1) {
-            //鍙兘杞﹁締寮傚父鎯呭喌 娌℃湁 杩涘満 璁板綍 琛ヤ竴鏉� carInout
-            CarInoutPo carInoutPo = new CarInoutPo();
-            carInoutPo.setCarNum(reqJson.getString("carNum"));
-            carInoutPo.setCommunityId(reqJson.getString("communityId"));
-            carInoutPo.setInoutId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
-            carInoutPo.setInTime(reqJson.getString("outTime"));
-            carInoutPo.setState(CarInoutDto.STATE_IN);
-            carInoutPo.setPaId(machineDto.getLocationObjId());
-            int flag = carInoutV1InnerServiceSMOImpl.saveCarInout(carInoutPo);
+            //鍙兘杞﹁締寮傚父鎯呭喌 娌℃湁 杩涘満 琛ュ厖杩涘満璁板綍
+            reqJson.put("inTime", reqJson.getString("outTime"));
+            //carIn(reqJson, machineDto, tempCar);
+            //淇濆瓨鍑哄満鏄庣粏
+            CarInoutDetailPo carInoutDetailPo = new CarInoutDetailPo();
+            carInoutDetailPo.setCarInout(CarInoutDetailDto.CAR_INOUT_OUT);
+            carInoutDetailPo.setCarNum(reqJson.getString("carNum"));
+            carInoutDetailPo.setCommunityId(reqJson.getString("communityId"));
+            carInoutDetailPo.setDetailId(GenerateCodeFactory.getDetailId(CODE_PREFIX_ID));
+            carInoutDetailPo.setInoutId("-1");
+            carInoutDetailPo.setMachineCode(machineDto.getMachineCode());
+            carInoutDetailPo.setMachineId(machineDto.getMachineId());
+            carInoutDetailPo.setPaId(paId);
+            carInoutDetailPo.setRemark(reqJson.getString("remark"));
+            carInoutDetailPo.setState(state);
+            carInoutDetailPo.setCarType(CAR_TYPE_NO_DATA.equals(tempCar) ? OwnerCarDto.LEASE_TYPE_TEMP + "" : tempCar + "");
+            carInoutDetailPo.setCarTypeName(CAR_TYPE_NO_DATA.equals(tempCar) ? "涓存椂杞�" : tempCarName);
+            int flag = carInoutDetailV1InnerServiceSMOImpl.saveCarInoutDetail(carInoutDetailPo);
             if (flag < 1) {
-                throw new CmdException("鍑哄満淇濆瓨璁板綍澶辫触");
+                throw new CmdException("淇濆瓨鍑鸿褰曟槑缁嗗け璐�");
             }
+            //鍑哄満澶辫触浜�
+            if (CarInoutDto.STATE_IN_FAIL.equals(state)) {
+                return;
+            }
+
             carInoutDtos = carInoutV1InnerServiceSMOImpl.queryCarInouts(carInoutDto);
+
         }
 
         //淇濆瓨鍑哄満鏄庣粏
@@ -189,75 +331,120 @@
         carInoutDetailPo.setCarInout(CarInoutDetailDto.CAR_INOUT_OUT);
         carInoutDetailPo.setCarNum(reqJson.getString("carNum"));
         carInoutDetailPo.setCommunityId(reqJson.getString("communityId"));
-        carInoutDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
+        carInoutDetailPo.setDetailId(GenerateCodeFactory.getDetailId(CODE_PREFIX_ID));
         carInoutDetailPo.setInoutId(carInoutDtos.get(0).getInoutId());
         carInoutDetailPo.setMachineCode(machineDto.getMachineCode());
         carInoutDetailPo.setMachineId(machineDto.getMachineId());
-        carInoutDetailPo.setPaId(machineDto.getLocationObjId());
+        carInoutDetailPo.setPaId(carInoutDtos.get(0).getPaId());
+        carInoutDetailPo.setRemark(reqJson.getString("remark"));
+        carInoutDetailPo.setPhotoJpg(reqJson.getString("photoJpg"));
+        carInoutDetailPo.setState(state);
+        if (CAR_TYPE_NO_DATA.equals(tempCar)) {
+            carInoutDetailPo.setCarType(OwnerCarDto.LEASE_TYPE_TEMP);
+            carInoutDetailPo.setCarTypeName("涓存椂杞�");
+            //妫�鏌ユ槸鍚︿负榛戠櫧鍚嶅崟
+            CarBlackWhiteDto carBlackWhiteDto = new CarBlackWhiteDto();
+            carBlackWhiteDto.setCarNum(reqJson.getString("carNum"));
+            carBlackWhiteDto.setPaId(carInoutDtos.get(0).getPaId());
+            carBlackWhiteDto.setValidity("Y");
+            List<CarBlackWhiteDto> carBlackWhiteDtos = carBlackWhiteV1InnerServiceSMOImpl.queryCarBlackWhites(carBlackWhiteDto);
+            if (carBlackWhiteDtos != null && carBlackWhiteDtos.size() > 0) {
+                if (CarBlackWhiteDto.BLACK_WHITE_BLACK.equals(carBlackWhiteDtos.get(0).getBlackWhite())) {
+                    carInoutDetailPo.setCarType("B");
+                    carInoutDetailPo.setCarTypeName("榛戝悕鍗�");
+                } else {
+                    carInoutDetailPo.setCarType("W");
+                    carInoutDetailPo.setCarTypeName("鐧藉悕鍗�");
+                }
+            }
+        } else {
+            carInoutDetailPo.setCarType(tempCar);
+            carInoutDetailPo.setCarTypeName(tempCarName);
+        }
         int flag = carInoutDetailV1InnerServiceSMOImpl.saveCarInoutDetail(carInoutDetailPo);
 
         if (flag < 1) {
             throw new CmdException("淇濆瓨鍑鸿褰曟槑缁嗗け璐�");
         }
 
+        //鍑哄満澶辫触浜�
+        if (CarInoutDto.STATE_IN_FAIL.equals(state)) {
+            return;
+        }
+
         //灏嗙姸鎬佹洿鏂颁负 鍑哄満鐘舵��
 
-        CarInoutPo carInoutPo = new CarInoutPo();
-        carInoutPo.setPaId(carInoutDtos.get(0).getPaId());
-        carInoutPo.setOutTime(reqJson.getString("outTime"));
-        carInoutPo.setInoutId(carInoutDtos.get(0).getInoutId());
-        carInoutPo.setCommunityId(carInoutDtos.get(0).getCommunityId());
-        carInoutPo.setState(CarInoutDto.STATE_OUT);
-        flag = carInoutV1InnerServiceSMOImpl.updateCarInout(carInoutPo);
+        updateCarInoutState(reqJson, carInoutDtos.get(0));
 
-        if (flag < 1) {
-            throw new CmdException("鏇存柊鍑哄満鏃堕棿澶辫触");
-        }
-
-        //鍐欐敮浠樿褰�
-        CarInoutPaymentPo carInoutPaymentPo = new CarInoutPaymentPo();
-        carInoutPaymentPo.setPaymentId(GenerateCodeFactory.getGeneratorId("10"));
-        carInoutPaymentPo.setCommunityId(carInoutDtos.get(0).getCommunityId());
-        carInoutPaymentPo.setInoutId(carInoutDtos.get(0).getInoutId());
-        carInoutPaymentPo.setPaId(carInoutDtos.get(0).getPaId());
-        carInoutPaymentPo.setPayCharge(reqJson.getString("payCharge"));
-        carInoutPaymentPo.setPayType(reqJson.getString("payType"));
-        carInoutPaymentPo.setRealCharge(reqJson.getString("realCharge"));
-        flag = carInoutPaymentV1InnerServiceSMOImpl.saveCarInoutPayment(carInoutPaymentPo);
-        if (flag < 1) {
-            throw new CmdException("鏇存柊鍑哄満鏃堕棿澶辫触");
-        }
-
-        //鏈堢杞�
-        if (tempCar != CAR_TYPE_NO_DATA && tempCar != CAR_TYPE_TEMP) {
+        //澶勭悊鍋滆溅鍔�
+        if (!reqJson.containsKey("pccIds") || reqJson.getJSONArray("pccIds").size() < 1) {
             return;
         }
 
-        //涓存椂杞︽椂鏌ョ湅 鏄惁鏈夎垂鐢ㄦ病鏈夌粨鏉燂紝鍙兘鏄崐灏忔椂鍏嶈垂 闂 鎴栬�呮椂 鍏朵粬鍘熷洜 灏嗚垂鐢ㄧ粨鏉�
-        FeeAttrDto feeAttrDto = new FeeAttrDto();
-        feeAttrDto.setSpecCd(FeeAttrDto.SPEC_CD_CAR_INOUT_ID);
-        feeAttrDto.setValue(carInoutPo.getInoutId());
-        feeAttrDto.setCommunityId(carInoutDtos.get(0).getCommunityId());
-        List<FeeAttrDto> feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto);
+        JSONArray pccIds = reqJson.getJSONArray("pccIds");
+        String pccId = "";
+        ParkingCouponCarPo parkingCouponCarPo = null;
+        ParkingCouponCarOrderPo parkingCouponCarOrderPo = null;
+        for (int pccIdIndex = 0; pccIdIndex < pccIds.size(); pccIdIndex++) {
+            pccId = pccIds.getString(pccIdIndex);
 
-        if (feeAttrDtos == null || feeAttrDtos.size() < 1) {
-            return;
+            parkingCouponCarPo = new ParkingCouponCarPo();
+            parkingCouponCarPo.setPccId(pccId);
+            parkingCouponCarPo.setState(ParkingCouponCarDto.STATE_FINISH);
+            parkingCouponCarV1InnerServiceSMOImpl.updateParkingCouponCar(parkingCouponCarPo);
+
+            parkingCouponCarOrderPo = new ParkingCouponCarOrderPo();
+            parkingCouponCarOrderPo.setOrderId(GenerateCodeFactory.getGeneratorId("11"));
+            parkingCouponCarOrderPo.setCarNum(reqJson.getString("carNum"));
+            parkingCouponCarOrderPo.setCarOutId(carInoutDetailPo.getDetailId());
+            parkingCouponCarOrderPo.setCommunityId(reqJson.getString("communityId"));
+            parkingCouponCarOrderPo.setMachineId(machineDto.getMachineId());
+            parkingCouponCarOrderPo.setMachineName(machineDto.getMachineName());
+            parkingCouponCarOrderPo.setPaId(carInoutDtos.get(0).getPaId());
+            parkingCouponCarOrderPo.setPccId(pccId);
+            parkingCouponCarOrderPo.setRemark("杞﹁締鍑哄彛鏍搁攢鍋滆溅鍔�");
+
+            parkingCouponCarOrderV1InnerServiceSMOImpl.saveParkingCouponCarOrder(parkingCouponCarOrderPo);
         }
-        FeeDto feeDto = new FeeDto();
-        feeDto.setCommunityId(carInoutDtos.get(0).getCommunityId());
-        feeDto.setFeeId(feeAttrDtos.get(0).getFeeId());
-        feeDto.setState(FeeDto.STATE_DOING);
-        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
-        if (feeDtos == null || feeDtos.size() < 1) {
-            return;
-        }
-        PayFeePo payFeePo = new PayFeePo();
-        payFeePo.setState(FeeDto.STATE_FINISH);
-        payFeePo.setFeeId(feeDtos.get(0).getFeeId());
-        payFeePo.setCommunityId(feeDtos.get(0).getCommunityId());
-        flag = feeInnerServiceSMOImpl.updateFee(payFeePo);
-        if (flag < 1) {
-            throw new CmdException("鏇存柊鍑哄満鏃堕棿澶辫触");
+
+    }
+
+    private void updateCarInoutState(JSONObject reqJson, 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(carInoutDto.getPaId());
+            newCarInoutDto.setStates(new String[]{
+                    CarInoutDto.STATE_IN,
+                    CarInoutDto.STATE_PAY,
+                    CarInoutDto.STATE_REPAY
+            });
+            List<CarInoutDto> carInoutDtos = carInoutV1InnerServiceSMOImpl.queryCarInouts(newCarInoutDto);
+
+            if (carInoutDtos == null || carInoutDtos.size() < 1) {
+                return;
+            }
+
+            CarInoutPo carInoutPo = new CarInoutPo();
+            carInoutPo.setPaId(carInoutDto.getPaId());
+            carInoutPo.setOutTime(reqJson.getString("outTime"));
+            carInoutPo.setInoutId(carInoutDto.getInoutId());
+            carInoutPo.setCommunityId(carInoutDto.getCommunityId());
+            carInoutPo.setState(CarInoutDto.STATE_OUT);
+            flag = carInoutV1InnerServiceSMOImpl.updateCarInout(carInoutPo);
+
+            if (flag < 1) {
+                throw new CmdException("鏇存柊鍑哄満鏃堕棿澶辫触");
+            }
+        } finally {
+            DistributedLock.releaseDistributedLock(requestId, key);
         }
     }
 
@@ -268,15 +455,34 @@
      * @param machineDto
      * @param tempCar
      */
-    private void carIn(JSONObject reqJson, MachineDto machineDto, int tempCar) {
+    private void carIn(JSONObject reqJson, MachineDto machineDto, String tempCar, String tempCarName) {
+        String state = CarInoutDto.STATE_IN;
+        //杩涘満澶辫触璁板綍
+        if (reqJson.containsKey("state") && "5".equals(reqJson.getString("state"))) {
+            state = CarInoutDto.STATE_IN_FAIL;
+        }
+
+        String paId = machineDto.getLocationObjId();
+
+        if (MachineDto.MACHINE_TYPE_CAR.equals(machineDto.getMachineTypeCd())) {
+            ParkingBoxAreaDto parkingBoxAreaDto = new ParkingBoxAreaDto();
+            parkingBoxAreaDto.setBoxId(machineDto.getLocationObjId());
+            parkingBoxAreaDto.setDefaultArea(ParkingBoxAreaDto.DEFAULT_AREA_TRUE);
+            List<ParkingBoxAreaDto> parkingBoxAreaDtos = parkingBoxAreaV1InnerServiceSMOImpl.queryParkingBoxAreas(parkingBoxAreaDto);
+            if (parkingBoxAreaDtos == null || parkingBoxAreaDtos.size() < 1) {
+                throw new CmdException("宀椾涵鏈厤缃仠杞﹀満" + machineDto.getLocationObjId());
+            }
+            paId = parkingBoxAreaDtos.get(0).getPaId();
+        }
+
         //淇濆瓨
         CarInoutPo carInoutPo = new CarInoutPo();
         carInoutPo.setCarNum(reqJson.getString("carNum"));
         carInoutPo.setCommunityId(reqJson.getString("communityId"));
         carInoutPo.setInoutId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
         carInoutPo.setInTime(reqJson.getString("inTime"));
-        carInoutPo.setState(CarInoutDto.STATE_IN);
-        carInoutPo.setPaId(machineDto.getLocationObjId());
+        carInoutPo.setState(state);
+        carInoutPo.setPaId(paId);
         int flag = carInoutV1InnerServiceSMOImpl.saveCarInout(carInoutPo);
 
         if (flag < 1) {
@@ -289,18 +495,43 @@
         carInoutDetailPo.setCarInout(CarInoutDetailDto.CAR_INOUT_IN);
         carInoutDetailPo.setCarNum(reqJson.getString("carNum"));
         carInoutDetailPo.setCommunityId(reqJson.getString("communityId"));
-        carInoutDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
+        carInoutDetailPo.setDetailId(GenerateCodeFactory.getDetailId(CODE_PREFIX_ID));
         carInoutDetailPo.setInoutId(carInoutPo.getInoutId());
         carInoutDetailPo.setMachineCode(machineDto.getMachineCode());
         carInoutDetailPo.setMachineId(machineDto.getMachineId());
-        carInoutDetailPo.setPaId(machineDto.getLocationObjId());
+        carInoutDetailPo.setPaId(paId);
+        carInoutDetailPo.setState(state);
+        carInoutDetailPo.setRemark(reqJson.getString("remark"));
+        carInoutDetailPo.setPhotoJpg(reqJson.getString("photoJpg"));
+        if (CAR_TYPE_NO_DATA.equals(tempCar)) {
+            carInoutDetailPo.setCarType(OwnerCarDto.LEASE_TYPE_TEMP);
+            carInoutDetailPo.setCarTypeName("涓存椂杞�");
+            //妫�鏌ユ槸鍚︿负榛戠櫧鍚嶅崟
+            CarBlackWhiteDto carBlackWhiteDto = new CarBlackWhiteDto();
+            carBlackWhiteDto.setCarNum(reqJson.getString("carNum"));
+            carBlackWhiteDto.setPaId(paId);
+            carBlackWhiteDto.setValidity("Y");
+            List<CarBlackWhiteDto> carBlackWhiteDtos = carBlackWhiteV1InnerServiceSMOImpl.queryCarBlackWhites(carBlackWhiteDto);
+            if (carBlackWhiteDtos != null && carBlackWhiteDtos.size() > 0) {
+                if (CarBlackWhiteDto.BLACK_WHITE_BLACK.equals(carBlackWhiteDtos.get(0).getBlackWhite())) {
+                    carInoutDetailPo.setCarType("B");
+                    carInoutDetailPo.setCarTypeName("榛戝悕鍗�");
+                } else {
+                    carInoutDetailPo.setCarType("W");
+                    carInoutDetailPo.setCarTypeName("鐧藉悕鍗�");
+                }
+            }
+        } else {
+            carInoutDetailPo.setCarType(tempCar);
+            carInoutDetailPo.setCarTypeName(tempCarName);
+        }
         flag = carInoutDetailV1InnerServiceSMOImpl.saveCarInoutDetail(carInoutDetailPo);
 
         if (flag < 1) {
             throw new CmdException("淇濆瓨鍏ヨ褰曟槑缁嗗け璐�");
         }
         //鏈堢杞�
-        if (tempCar != CAR_TYPE_NO_DATA && tempCar != CAR_TYPE_TEMP) {
+        if (!OwnerCarDto.LEASE_TYPE_TEMP.equals(carInoutDetailPo.getCarType())) {
             return;
         }
 
@@ -322,22 +553,11 @@
         } else {
             reqJson.put("ownerId", ownerDtos.get(0).getMemberId());
         }
-        if (tempCar == CAR_TYPE_NO_DATA) {
+        if (CAR_TYPE_NO_DATA.equals(tempCar)) {
             saveTempCar(reqJson, machineDto);
         }
 
-        //鍒涘缓璐圭敤
-        TempCarFeeConfigDto tempCarFeeConfigDto = new TempCarFeeConfigDto();
-        tempCarFeeConfigDto.setCommunityId(reqJson.getString("communityId"));
-        tempCarFeeConfigDto.setPaId(machineDto.getLocationObjId());
-
-        List<TempCarFeeConfigDto> tempCarFeeConfigDtos = tempCarFeeConfigInnerServiceSMOImpl.queryTempCarFeeConfigs(tempCarFeeConfigDto);
-
-        if (tempCarFeeConfigDtos == null || tempCarFeeConfigDtos.size() < 1) { // 鍋滆溅鍦烘湭閰嶇疆鏀惰垂瑙勫垯 鍒欎笉鍒涘缓璐圭敤
-            return;
-        }
-
-        saveTempCarFee(reqJson, machineDto, tempCarFeeConfigDtos.get(0));
+        saveTempCarFee(reqJson, machineDto);
     }
 
     /**
@@ -345,9 +565,19 @@
      *
      * @param reqJson
      * @param machineDto
-     * @param tempCarFeeConfigDto
      */
-    private void saveTempCarFee(JSONObject reqJson, MachineDto machineDto, TempCarFeeConfigDto tempCarFeeConfigDto) {
+    private void saveTempCarFee(JSONObject reqJson, MachineDto machineDto) {
+
+        //鍒涘缓璐圭敤
+        TempCarFeeConfigDto tempCarFeeConfigDto = new TempCarFeeConfigDto();
+        tempCarFeeConfigDto.setCommunityId(reqJson.getString("communityId"));
+        tempCarFeeConfigDto.setPaId(machineDto.getLocationObjId());
+        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);
@@ -457,6 +687,16 @@
      */
     private void saveTempCar(JSONObject reqJson, MachineDto machineDto) {
 
+        OwnerCarDto ownerCarDto = new OwnerCarDto();
+        ownerCarDto.setCarNum(reqJson.getString("carNum"));
+        ownerCarDto.setCommunityId(reqJson.getString("communityId"));
+        List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+
+        if (ownerCarDtos != null && ownerCarDtos.size() > 0) {
+            reqJson.put("carId", ownerCarDtos.get(0).getCarId());
+            return;
+        }
+
         OwnerCarPo ownerCarPo = new OwnerCarPo();
         ownerCarPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
         ownerCarPo.setCarId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_carId));
@@ -473,6 +713,7 @@
         ownerCarPo.setRemark("涓存椂杞� 鐗╄仈缃戝悓姝�");
         ownerCarPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
         ownerCarPo.setUserId("-1");
+        ownerCarPo.setLeaseType(OwnerCarDto.LEASE_TYPE_TEMP);
         int flag = ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
 
         if (flag < 1) {
@@ -480,7 +721,5 @@
         }
 
         reqJson.put("carId", ownerCarPo.getCarId());
-
-
     }
 }

--
Gitblit v1.8.0