wuxw 3 lat temu
rodzic
commit
67c6ce8bda

+ 62 - 32
service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarLogCmd.java

@@ -42,6 +42,7 @@ import com.java110.po.fee.PayFeeDetailPo;
 import com.java110.po.fee.PayFeePo;
 import com.java110.po.owner.OwnerPo;
 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 org.springframework.beans.factory.annotation.Autowired;
@@ -127,7 +128,7 @@ public class MachineUploadCarLogCmd extends Cmd {
 
         //是否是临时车
         String tempCar = OwnerCarDto.LEASE_TYPE_TEMP;
-        String tempCarName ="临时车";
+        String tempCarName = "临时车";
 
 
         //查询设备信息
@@ -142,8 +143,8 @@ public class MachineUploadCarLogCmd extends Cmd {
         ParkingBoxAreaDto parkingBoxAreaDto = new ParkingBoxAreaDto();
         parkingBoxAreaDto.setBoxId(machineDto.getLocationObjId());
         List<ParkingBoxAreaDto> parkingBoxAreaDtos = parkingBoxAreaV1InnerServiceSMOImpl.queryParkingBoxAreas(parkingBoxAreaDto);
-        if (parkingBoxAreaDtos != null && parkingBoxAreaDtos.size() >0) {
-            for(ParkingBoxAreaDto parkingBoxAreaDto1 : parkingBoxAreaDtos){
+        if (parkingBoxAreaDtos != null && parkingBoxAreaDtos.size() > 0) {
+            for (ParkingBoxAreaDto parkingBoxAreaDto1 : parkingBoxAreaDtos) {
                 paIds.add(parkingBoxAreaDto1.getPaId());
             }
         }
@@ -163,10 +164,10 @@ public class MachineUploadCarLogCmd extends Cmd {
             reqJson.put("carId", ownerCarDtos.get(0).getCarId());
             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;
+            if (ownerCarDtos.size() > 1) {
+                for (OwnerCarDto tmpOwnerCarDto : ownerCarDtos) {
+                    if (OwnerCarDto.LEASE_TYPE_TEMP.equals(tmpOwnerCarDto.getLeaseType())) {
+                        continue;
                     }
                     tempCar = tmpOwnerCarDto.getLeaseType();
                     tempCarName = tmpOwnerCarDto.getLeaseTypeName();
@@ -177,9 +178,9 @@ public class MachineUploadCarLogCmd extends Cmd {
 
         //进场处理
         if (MachineDto.DIRECTION_IN.equals(machineDtos.get(0).getDirection())) {
-            carIn(reqJson, machineDtos.get(0), tempCar,tempCarName);
+            carIn(reqJson, machineDtos.get(0), tempCar, tempCarName);
         } else {
-            carOut(reqJson, machineDtos.get(0), tempCar,tempCarName);
+            carOut(reqJson, machineDtos.get(0), tempCar, tempCarName);
         }
 
     }
@@ -191,7 +192,7 @@ public class MachineUploadCarLogCmd extends Cmd {
      * @param machineDto
      * @param tempCar
      */
-    private void carOut(JSONObject reqJson, MachineDto machineDto, String tempCar,String tempCarName) {
+    private void carOut(JSONObject reqJson, MachineDto machineDto, String tempCar, String tempCarName) {
 
         String state = CarInoutDto.STATE_OUT;
         //进场失败记录
@@ -265,7 +266,7 @@ public class MachineUploadCarLogCmd extends Cmd {
         carInoutDetailPo.setRemark(reqJson.getString("remark"));
         carInoutDetailPo.setPhotoJpg(reqJson.getString("photoJpg"));
         carInoutDetailPo.setState(state);
-        if(CAR_TYPE_NO_DATA.equals(tempCar)){
+        if (CAR_TYPE_NO_DATA.equals(tempCar)) {
             carInoutDetailPo.setCarType(OwnerCarDto.LEASE_TYPE_TEMP);
             carInoutDetailPo.setCarTypeName("临时车");
             //检查是否为黑白名单
@@ -274,16 +275,16 @@ public class MachineUploadCarLogCmd extends Cmd {
             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())){
+            if (carBlackWhiteDtos != null && carBlackWhiteDtos.size() > 0) {
+                if (CarBlackWhiteDto.BLACK_WHITE_BLACK.equals(carBlackWhiteDtos.get(0).getBlackWhite())) {
                     carInoutDetailPo.setCarType("B");
                     carInoutDetailPo.setCarTypeName("黑名单");
-                }else{
+                } else {
                     carInoutDetailPo.setCarType("W");
                     carInoutDetailPo.setCarTypeName("白名单");
                 }
             }
-        }else{
+        } else {
             carInoutDetailPo.setCarType(tempCar);
             carInoutDetailPo.setCarTypeName(tempCarName);
         }
@@ -300,17 +301,7 @@ public class MachineUploadCarLogCmd extends Cmd {
 
         //将状态更新为 出场状态
 
-        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);
-
-        if (flag < 1) {
-            throw new CmdException("更新出场时间失败");
-        }
+        updateCarInoutState(reqJson, carInoutDtos.get(0));
 
         //写支付记录
 //        CarInoutPaymentPo carInoutPaymentPo = new CarInoutPaymentPo();
@@ -362,6 +353,45 @@ public class MachineUploadCarLogCmd extends Cmd {
 //        hasFeeAndPayFee(carInoutDtos.get(0), reqJson, carInoutPo, carInoutPaymentPo);
     }
 
+    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);
+        }
+    }
+
     private boolean hasFeeAndPayFee(CarInoutDto carInoutDto, JSONObject reqJson, CarInoutPo carInoutPo, CarInoutPaymentPo carInoutPaymentPo) {
 
         FeeAttrDto feeAttrDto = new FeeAttrDto();
@@ -410,7 +440,7 @@ public class MachineUploadCarLogCmd extends Cmd {
      * @param machineDto
      * @param tempCar
      */
-    private void carIn(JSONObject reqJson, MachineDto machineDto, String tempCar,String tempCarName) {
+    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"))) {
@@ -458,7 +488,7 @@ public class MachineUploadCarLogCmd extends Cmd {
         carInoutDetailPo.setState(state);
         carInoutDetailPo.setRemark(reqJson.getString("remark"));
         carInoutDetailPo.setPhotoJpg(reqJson.getString("photoJpg"));
-        if(CAR_TYPE_NO_DATA.equals(tempCar)){
+        if (CAR_TYPE_NO_DATA.equals(tempCar)) {
             carInoutDetailPo.setCarType(OwnerCarDto.LEASE_TYPE_TEMP);
             carInoutDetailPo.setCarTypeName("临时车");
             //检查是否为黑白名单
@@ -467,16 +497,16 @@ public class MachineUploadCarLogCmd extends Cmd {
             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())){
+            if (carBlackWhiteDtos != null && carBlackWhiteDtos.size() > 0) {
+                if (CarBlackWhiteDto.BLACK_WHITE_BLACK.equals(carBlackWhiteDtos.get(0).getBlackWhite())) {
                     carInoutDetailPo.setCarType("B");
                     carInoutDetailPo.setCarTypeName("黑名单");
-                }else{
+                } else {
                     carInoutDetailPo.setCarType("W");
                     carInoutDetailPo.setCarTypeName("白名单");
                 }
             }
-        }else{
+        } else {
             carInoutDetailPo.setCarType(tempCar);
             carInoutDetailPo.setCarTypeName(tempCarName);
         }

+ 45 - 17
service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarPaymentCmd.java

@@ -35,7 +35,9 @@ 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;
 
@@ -154,18 +156,9 @@ public class MachineUploadCarPaymentCmd extends Cmd {
             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,12 +195,48 @@ public class MachineUploadCarPaymentCmd extends Cmd {
         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) {
 
         FeeAttrDto feeAttrDto = new FeeAttrDto();
@@ -232,11 +261,11 @@ public class MachineUploadCarPaymentCmd extends Cmd {
 
         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 +284,7 @@ public class MachineUploadCarPaymentCmd extends Cmd {
         return true;
     }
 
-    private void saveTempCarFee(JSONObject reqJson, MachineDto machineDto,CarInoutDto carInoutDto) {
-
+    private void saveTempCarFee(JSONObject reqJson, MachineDto machineDto, CarInoutDto carInoutDto) {
 
 
         //创建费用