瀏覽代碼

优化查询访客功能

Your Name 3 年之前
父節點
當前提交
4063716315

+ 202 - 139
service-community/src/main/java/com/java110/community/cmd/visit/UpdateVisitCmd.java

@@ -8,13 +8,28 @@ import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
 import com.java110.core.factory.CommunitySettingFactory;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.smo.IPhotoSMO;
+import com.java110.dto.RoomDto;
+import com.java110.dto.accessControlWhite.AccessControlWhiteDto;
+import com.java110.dto.machine.CarBlackWhiteDto;
+import com.java110.dto.machine.MachineDto;
+import com.java110.dto.oaWorkflow.OaWorkflowDto;
 import com.java110.dto.owner.OwnerCarDto;
 import com.java110.dto.parking.ParkingSpaceDto;
+import com.java110.dto.visit.VisitDto;
+import com.java110.dto.visitSetting.VisitSettingDto;
+import com.java110.intf.common.IAccessControlWhiteV1InnerServiceSMO;
+import com.java110.intf.common.IMachineInnerServiceSMO;
 import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
+import com.java110.intf.community.IRoomInnerServiceSMO;
+import com.java110.intf.community.IVisitSettingV1InnerServiceSMO;
 import com.java110.intf.community.IVisitV1InnerServiceSMO;
+import com.java110.intf.user.ICarBlackWhiteV1InnerServiceSMO;
 import com.java110.intf.user.IOwnerCarAttrInnerServiceSMO;
 import com.java110.intf.user.IOwnerCarInnerServiceSMO;
 import com.java110.intf.user.IOwnerCarV1InnerServiceSMO;
+import com.java110.po.accessControlWhite.AccessControlWhitePo;
+import com.java110.po.car.CarBlackWhitePo;
 import com.java110.po.car.OwnerCarPo;
 import com.java110.po.owner.VisitPo;
 import com.java110.po.ownerCarAttr.OwnerCarAttrPo;
@@ -28,10 +43,7 @@ import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
+import java.util.*;
 
 @Java110Cmd(serviceCode = "visit.updateVisit")
 public class UpdateVisitCmd extends Cmd {
@@ -51,6 +63,27 @@ public class UpdateVisitCmd extends Cmd {
     @Autowired
     private IVisitV1InnerServiceSMO visitV1InnerServiceSMOImpl;
 
+    @Autowired
+    private IPhotoSMO photoSMOImpl;
+
+    @Autowired
+    private IVisitSettingV1InnerServiceSMO visitSettingV1InnerServiceSMOImpl;
+
+    @Autowired
+    private ICarBlackWhiteV1InnerServiceSMO carBlackWhiteV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IAccessControlWhiteV1InnerServiceSMO accessControlWhiteV1InnerServiceSMOImpl;
+
+
+    @Autowired
+    private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
+
+    @Autowired
+    private IMachineInnerServiceSMO machineInnerServiceSMOImpl;
+
+    public static final String CODE_PREFIX_ID = "10";
+
     //键
     public static final String CAR_FREE_TIME = "CAR_FREE_TIME";
 
@@ -60,168 +93,198 @@ public class UpdateVisitCmd extends Cmd {
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
         Assert.hasKeyAndValue(reqJson, "vId", "访客记录ID不能为空");
+        Assert.hasKeyAndValue(reqJson, "communityId", "小区ID不能为空");
         Assert.hasKeyAndValue(reqJson, "vName", "必填,请填写访客姓名");
-        Assert.hasKeyAndValue(reqJson, "visitGender", "必填,请填写访客姓名");
-        Assert.hasKeyAndValue(reqJson, "phoneNumber", "必填,请填写访客联系方式");
-        Assert.hasKeyAndValue(reqJson, "visitTime", "必填,请填写访客拜访时间");
     }
 
     @Override
     @Java110Transactional
     public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
         String userId = context.getReqHeaders().get("user-id");
-        //是否有空闲车位
-        boolean freeSpace = false;
-        //是否存在车辆
-        boolean existCar = false;
-        //校验车牌号是否存在
-        OwnerCarDto ownerCarDto1 = new OwnerCarDto();
-        ownerCarDto1.setCommunityId(reqJson.getString("communityId"));
-        ownerCarDto1.setCarNum(reqJson.getString("carNum"));
-        int count = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(ownerCarDto1);
-        if (count > 0) {
-            existCar = true;
-            reqJson.put("psId", "-1");
+        String storeId = context.getReqHeaders().get("store-id");
+        VisitDto visitDto = new VisitDto();
+        visitDto.setvId(reqJson.getString("vId"));
+        visitDto.setCommunityId(reqJson.getString("communityId"));
+        List<VisitDto> visitDtos = visitV1InnerServiceSMOImpl.queryVisits(visitDto);
+        Assert.listOnlyOne(visitDtos, "访客不存在");
+
+        VisitPo visitPo = BeanConvertUtil.covertBean(reqJson, VisitPo.class);
+        visitPo.setState(visitDtos.get(0).getState());
+        int flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+        if (flag < 1) {
+            throw new CmdException("保存访客失败");
+        }
+        photoSMOImpl.savePhoto(reqJson, reqJson.getString("vId"), reqJson.getString("communityId"));
+
+        if(!VisitDto.STATE_C.equals(visitDtos.get(0).getState())){
+            return ;
+        }
+        String faceWay = "Y";
+        String carNumWay = "N";
+
+        // 查询访客设置
+        VisitSettingDto visitSettingDto = new VisitSettingDto();
+        visitSettingDto.setCommunityId(reqJson.getString("communityId"));
+        List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto);
+
+        if (visitSettingDtos != null && visitSettingDtos.size() > 0) {
+            faceWay = visitSettingDtos.get(0).getFaceWay();
+            carNumWay = visitSettingDtos.get(0).getCarNumWay();
+            // 同步车牌 这里需要停车场,所以没有配置访客设置,不同步
+            synchronizedVisitCarNum(visitPo, carNumWay, visitSettingDtos.get(0));
+        }
+
+        // 同步访客人脸
+        synchronousVisitFace(visitPo, faceWay, reqJson.getString("photo"));
+
+    }
+
+    private void synchronousVisitFace(VisitPo visitPo, String faceWay, String photo) {
+        if (VisitSettingDto.FACE_WAY_NO.equals(faceWay) || StringUtil.isEmpty(photo)) {
+            return;
         }
-        //flag审核操作 并且 审核通过 state=1 并且业主车辆不存在的情况先existCar=false
-        if ("1".equals(reqJson.getString("flag"))
-                && "1".equals(reqJson.getString("state"))
-                && !existCar) {
-            //获取预约车免费时长的值
-            String freeTime = CommunitySettingFactory.getValue(reqJson.getString("communityId"), CAR_FREE_TIME);
-            if (StringUtil.isEmpty(freeTime)) {
-                freeTime = "120";
+
+        if(StringUtil.isEmpty(visitPo.getOwnerId())){
+            return;
+        }
+
+        // 查询 访问业主可以访问的门禁设备
+        RoomDto roomDto = new RoomDto();
+        roomDto.setOwnerId(visitPo.getOwnerId());
+        //这种情况说明 业主已经删掉了 需要查询状态为 1 的数据
+        List<RoomDto> rooms = roomInnerServiceSMOImpl.queryRoomsByOwner(roomDto);
+
+        //拿到小区ID
+        String communityId = visitPo.getCommunityId();
+        //根据小区ID查询现有设备
+        MachineDto machineDto = new MachineDto();
+        machineDto.setCommunityId(communityId);
+        //String[] locationObjIds = new String[]{communityId};
+        List<String> locationObjIds = new ArrayList<>();
+        locationObjIds.add(communityId);
+        for (RoomDto tRoomDto : rooms) {
+            locationObjIds.add(tRoomDto.getUnitId());
+            locationObjIds.add(tRoomDto.getRoomId());
+            locationObjIds.add(tRoomDto.getFloorId());
+        }
+
+        machineDto.setLocationObjIds(locationObjIds.toArray(new String[locationObjIds.size()]));
+        List<MachineDto> machineDtos = machineInnerServiceSMOImpl.queryMachines(machineDto);
+        if (machineDtos == null || machineDtos.size() < 1) {
+            return;
+        }
+
+        // 同步到 门禁白名单中
+        for (MachineDto tmpMachineDto : machineDtos) {
+            if (!"9999".equals(tmpMachineDto.getMachineTypeCd())) {
+                continue;
             }
-            Date time = DateUtil.getDateFromStringA(reqJson.getString("visitTime"));
-            Calendar newTime = Calendar.getInstance();
-            newTime.setTime(time);
-            newTime.add(Calendar.MINUTE, Integer.parseInt(freeTime));//日期加上分钟
-            Date newDate = newTime.getTime();
-            String finishFreeTime = DateUtil.getFormatTimeString(newDate, DateUtil.DATE_FORMATE_STRING_A);
-            reqJson.put("freeTime", finishFreeTime);
-            //获取小区配置里配置的停车场id
-            String parkingAreaId = CommunitySettingFactory.getValue(reqJson.getString("communityId"), ASCRIPTION_CAR_AREA_ID);
-            if (StringUtil.isEmpty(parkingAreaId)) { //如果没有配置停车场id,就随便分配该小区下一个空闲车位
-                ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
-                parkingSpace.setCommunityId(reqJson.getString("communityId"));
-                parkingSpace.setState("F"); //车位状态 出售 S,出租 H ,空闲 F
-                parkingSpace.setParkingType("1"); //1:普通车位  2:子母车位  3:豪华车位
-                List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
-                if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
-                    freeSpace = true;
-                } else {
-                    //随机生成一个不大于集合长度的整数
-                    Random random = new Random();
-                    int i = random.nextInt(parkingSpaceDtos.size());
-                    //获取车位id
-                    String psId = parkingSpaceDtos.get(i).getPsId();
-                    reqJson.put("psId", psId);
+            AccessControlWhiteDto accessControlWhiteDto = new AccessControlWhiteDto();
+            accessControlWhiteDto.setCommunityId(communityId);
+            accessControlWhiteDto.setTel(visitPo.getPhoneNumber());
+            accessControlWhiteDto.setMachineId(tmpMachineDto.getMachineId());
+            List<AccessControlWhiteDto> accessControlWhiteDtos = accessControlWhiteV1InnerServiceSMOImpl.queryAccessControlWhites(accessControlWhiteDto);
+            AccessControlWhitePo accessControlWhitePo = new AccessControlWhitePo();
+            if (accessControlWhiteDtos == null || accessControlWhiteDtos.size() < 1) {
+                accessControlWhitePo.setAcwId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
+                accessControlWhitePo.setCommunityId(visitPo.getCommunityId());
+                accessControlWhitePo.setEndTime(visitPo.getDepartureTime());
+                accessControlWhitePo.setIdCard("");
+                accessControlWhitePo.setMachineId(tmpMachineDto.getMachineId());
+                accessControlWhitePo.setPersonName(visitPo.getvName());
+                accessControlWhitePo.setPersonType(AccessControlWhiteDto.PERSON_TYPE_VISIT);
+                accessControlWhitePo.setStartTime(visitPo.getVisitTime());
+                accessControlWhitePo.setTel(visitPo.getPhoneNumber());
+                accessControlWhitePo.setThirdId(visitPo.getvId());
+                int flag = accessControlWhiteV1InnerServiceSMOImpl.saveAccessControlWhite(accessControlWhitePo);
+                if (flag < 1) {
+                    throw new CmdException("同步门禁白名单失败");
                 }
             } else {
-                ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
-                parkingSpace.setCommunityId(reqJson.getString("communityId"));
-                parkingSpace.setPaId(parkingAreaId); //停车场id
-                parkingSpace.setState("F"); //车位状态 出售 S,出租 H ,空闲 F
-                parkingSpace.setParkingType("1"); //1:普通车位  2:子母车位  3:豪华车位
-                List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
-                if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
-                    freeSpace = true;
-                } else {
-                    //随机生成一个不大于集合长度的整数
-                    Random random = new Random();
-                    int i = random.nextInt(parkingSpaceDtos.size());
-                    //获取车位id
-                    String psId = parkingSpaceDtos.get(i).getPsId();
-                    reqJson.put("psId", psId);
+                accessControlWhitePo.setAcwId(accessControlWhiteDtos.get(0).getAcwId());
+                accessControlWhitePo.setStartTime(visitPo.getVisitTime());
+                accessControlWhitePo.setEndTime(visitPo.getDepartureTime());
+                int flag = accessControlWhiteV1InnerServiceSMOImpl.updateAccessControlWhite(accessControlWhitePo);
+                if (flag < 1) {
+                    throw new CmdException("保存数据失败");
                 }
             }
+
+            photoSMOImpl.savePhoto(photo, accessControlWhitePo.getAcwId(), accessControlWhitePo.getCommunityId());
+
         }
-        String result = "";
-        if ("1".equals(reqJson.getString("state"))) {
-            result = "审核通过!";
-        } else if ("2".equals(reqJson.getString("state"))) {
-            result = "审核不通过!";
-        }
-        if (existCar) {
-            result = "访客信息审核成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!";
-        }
-        if (freeSpace) {
-            result = "访客信息审核成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。";
-        }
-        reqJson.put("stateRemark", result);
-        updateVisit(reqJson);
+    }
 
-        if (existCar) {
-            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "访客信息审核成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!");
-            context.setResponseEntity(responseEntity);
+    /**
+     * 预约车辆 加入 白名单 是最合适的
+     * 不应该加入到业主车辆中
+     *
+     * @param visitPo
+     * @param carNumWay
+     * @param visitSettingDto
+     */
+    private void synchronizedVisitCarNum(VisitPo visitPo, String carNumWay, VisitSettingDto visitSettingDto) {
+        if (VisitSettingDto.CAR_NUM_WAY_NO.equals(carNumWay)) {
             return;
         }
-        if (freeSpace) {
-            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "访客信息审核成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。");
-            context.setResponseEntity(responseEntity);
+
+        if(StringUtil.isEmpty(visitPo.getCarNum())){
             return;
         }
-        //审核通过且有车位就更新车位状态
-        if (reqJson.containsKey("state") && "1".equals(reqJson.getString("state"))
-                && "1".equals(reqJson.getString("flag"))
-                && !existCar) {
-            ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
-            parkingSpace.setPsId(reqJson.getString("psId"));
-            //查询停车位
-            List<ParkingSpaceDto> parkingSpaces = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
-            Assert.listOnlyOne(parkingSpaces, "查询停车位错误!");
-            //添加车辆信息
-            OwnerCarPo ownerCarPo = new OwnerCarPo();
-            ownerCarPo.setCarId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_carId));
-            ownerCarPo.setOwnerId(reqJson.getString("ownerId"));
-            ownerCarPo.setbId("-1");
-            ownerCarPo.setCarNum(reqJson.getString("carNum"));
-            ownerCarPo.setCarBrand("无(预约车)");
-            ownerCarPo.setCarType("9901");
-            ownerCarPo.setCarColor("无(预约车)");
-            ownerCarPo.setPsId(reqJson.getString("psId"));
-            ownerCarPo.setUserId(userId);
-            ownerCarPo.setRemark("访客登记预约车");
-            ownerCarPo.setCommunityId(reqJson.getString("communityId"));
-            ownerCarPo.setStartTime(reqJson.getString("visitTime"));
-            ownerCarPo.setEndTime(reqJson.getString("freeTime"));
-            ownerCarPo.setState(OwnerCarDto.STATE_NORMAL); //1001 正常状态,2002 车位释放欠费状态  3003 车位释放
-            ownerCarPo.setCarTypeCd(OwnerCarDto.CAR_TYPE_TEMP); //1001 业主车辆 1002 成员车辆 1003 临时车
-            ownerCarPo.setMemberId(reqJson.getString("ownerId"));
-            ownerCarPo.setLeaseType("R"); //H 月租车  S 出售车  I 内部车  NM 免费车  R 预约车
-            ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
-            //添加车辆属性
-            OwnerCarAttrPo ownerCarAttrPo = new OwnerCarAttrPo();
-            ownerCarAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_cartId));
-            ownerCarAttrPo.setCarId(ownerCarPo.getCarId());
-            ownerCarAttrPo.setCommunityId(ownerCarPo.getCommunityId());
-            ownerCarAttrPo.setSpecCd("6443000036"); //6443000036业主车辆
-            ownerCarAttrPo.setValue("true"); //预约车
-            ownerCarAttrPo.setbId("-1");
-            ownerCarAttrInnerServiceSMOImpl.saveOwnerCarAttr(ownerCarAttrPo);
-            //更新车位状态
-            ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
-            parkingSpacePo.setPsId(reqJson.getString("psId"));
-            parkingSpacePo.setState("H"); //车位状态 出售 S,出租 H ,空闲 F
-            parkingSpaceInnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
+
+        CarBlackWhiteDto carBlackWhiteDto = new CarBlackWhiteDto();
+        carBlackWhiteDto.setBlackWhite(CarBlackWhiteDto.BLACK_WHITE_WHITE);
+        carBlackWhiteDto.setCarNum(visitPo.getCarNum());
+        carBlackWhiteDto.setPaId(visitSettingDto.getPaId());
+        List<CarBlackWhiteDto> carBlackWhiteDtos = carBlackWhiteV1InnerServiceSMOImpl.queryCarBlackWhites(carBlackWhiteDto);
+        CarBlackWhitePo carBlackWhitePo = new CarBlackWhitePo();
+        carBlackWhitePo.setCarNum(visitPo.getCarNum());
+        carBlackWhitePo.setBlackWhite(CarBlackWhiteDto.BLACK_WHITE_WHITE);
+        carBlackWhitePo.setCommunityId(visitPo.getCommunityId());
+        carBlackWhitePo.setPaId(visitSettingDto.getPaId());
+        carBlackWhitePo.setStartTime(visitPo.getVisitTime());
+        carBlackWhitePo.setEndTime(visitPo.getDepartureTime());
+        int flag = 0;
+        if(carBlackWhiteDtos == null || carBlackWhiteDtos.size() < 1){
+            carBlackWhitePo.setBwId(GenerateCodeFactory.getGeneratorId("11"));
+            flag = carBlackWhiteV1InnerServiceSMOImpl.saveCarBlackWhite(carBlackWhitePo);
+        }else {
+            carBlackWhitePo.setBwId(carBlackWhiteDtos.get(0).getBwId());
+            flag = carBlackWhiteV1InnerServiceSMOImpl.updateCarBlackWhite(carBlackWhitePo);
+        }
+
+        if (flag < 1) {
+            throw new CmdException("预约车辆添加白名单失败");
         }
+
+
     }
 
     /**
-     * 添加小区信息
+     * 是否需要审核
      *
-     * @param paramInJson 接口调用放传入入参
-     * @return 订单服务能够接受的报文
+     * @param visitPo
+     * @param reqJson
      */
-    public void updateVisit(JSONObject paramInJson) {
+    private boolean hasAuditVisit(VisitPo visitPo, JSONObject reqJson, String storeId, String userId) {
 
-        JSONObject businessVisit = new JSONObject();
-        businessVisit.putAll(paramInJson);
 
-        VisitPo visitPo = BeanConvertUtil.covertBean(businessVisit, VisitPo.class);
-        int flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
-        if (flag < 1) {
-            throw new CmdException("修改访客失败");
+        VisitSettingDto visitSettingDto = new VisitSettingDto();
+        visitSettingDto.setCommunityId(reqJson.getString("communityId"));
+        List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto);
+
+        if (visitSettingDtos == null || visitSettingDtos.size() < 1) {
+            return false;
+        }
+
+        // 需要审核
+        if (!VisitSettingDto.AUDIT_WAY_YES.equals(visitSettingDtos.get(0).getAuditWay())) {
+            return false;
         }
+
+        return true;
+
     }
+
+
 }

+ 229 - 0
service-community/src/main/java/com/java110/community/cmd/visit/UpdateVisitSdCmd.java

@@ -0,0 +1,229 @@
+package com.java110.community.cmd.visit;
+
+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.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.core.factory.CommunitySettingFactory;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.owner.OwnerCarDto;
+import com.java110.dto.parking.ParkingSpaceDto;
+import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
+import com.java110.intf.community.IVisitV1InnerServiceSMO;
+import com.java110.intf.user.IOwnerCarAttrInnerServiceSMO;
+import com.java110.intf.user.IOwnerCarInnerServiceSMO;
+import com.java110.intf.user.IOwnerCarV1InnerServiceSMO;
+import com.java110.po.car.OwnerCarPo;
+import com.java110.po.owner.VisitPo;
+import com.java110.po.ownerCarAttr.OwnerCarAttrPo;
+import com.java110.po.parking.ParkingSpacePo;
+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 com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+
+//@Java110Cmd(serviceCode = "visit.updateVisit")
+public class UpdateVisitSdCmd extends Cmd {
+
+    @Autowired
+    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarAttrInnerServiceSMO ownerCarAttrInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+
+    @Autowired
+    private IVisitV1InnerServiceSMO visitV1InnerServiceSMOImpl;
+
+
+
+    //键
+    public static final String CAR_FREE_TIME = "CAR_FREE_TIME";
+
+    //键
+    public static final String ASCRIPTION_CAR_AREA_ID = "ASCRIPTION_CAR_AREA_ID";
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
+        Assert.hasKeyAndValue(reqJson, "vId", "访客记录ID不能为空");
+        Assert.hasKeyAndValue(reqJson, "vName", "必填,请填写访客姓名");
+        Assert.hasKeyAndValue(reqJson, "visitGender", "必填,请填写访客姓名");
+        Assert.hasKeyAndValue(reqJson, "phoneNumber", "必填,请填写访客联系方式");
+        Assert.hasKeyAndValue(reqJson, "visitTime", "必填,请填写访客拜访时间");
+    }
+
+    @Override
+    @Java110Transactional
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
+        String userId = context.getReqHeaders().get("user-id");
+        //是否有空闲车位
+        boolean freeSpace = false;
+        //是否存在车辆
+        boolean existCar = false;
+        //校验车牌号是否存在
+        OwnerCarDto ownerCarDto1 = new OwnerCarDto();
+        ownerCarDto1.setCommunityId(reqJson.getString("communityId"));
+        ownerCarDto1.setCarNum(reqJson.getString("carNum"));
+        int count = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(ownerCarDto1);
+        if (count > 0) {
+            existCar = true;
+            reqJson.put("psId", "-1");
+        }
+        //flag审核操作 并且 审核通过 state=1 并且业主车辆不存在的情况先existCar=false
+        if ("1".equals(reqJson.getString("flag"))
+                && "1".equals(reqJson.getString("state"))
+                && !existCar) {
+            //获取预约车免费时长的值
+            String freeTime = CommunitySettingFactory.getValue(reqJson.getString("communityId"), CAR_FREE_TIME);
+            if (StringUtil.isEmpty(freeTime)) {
+                freeTime = "120";
+            }
+            Date time = DateUtil.getDateFromStringA(reqJson.getString("visitTime"));
+            Calendar newTime = Calendar.getInstance();
+            newTime.setTime(time);
+            newTime.add(Calendar.MINUTE, Integer.parseInt(freeTime));//日期加上分钟
+            Date newDate = newTime.getTime();
+            String finishFreeTime = DateUtil.getFormatTimeString(newDate, DateUtil.DATE_FORMATE_STRING_A);
+            reqJson.put("freeTime", finishFreeTime);
+            //获取小区配置里配置的停车场id
+            String parkingAreaId = CommunitySettingFactory.getValue(reqJson.getString("communityId"), ASCRIPTION_CAR_AREA_ID);
+            if (StringUtil.isEmpty(parkingAreaId)) { //如果没有配置停车场id,就随便分配该小区下一个空闲车位
+                ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
+                parkingSpace.setCommunityId(reqJson.getString("communityId"));
+                parkingSpace.setState("F"); //车位状态 出售 S,出租 H ,空闲 F
+                parkingSpace.setParkingType("1"); //1:普通车位  2:子母车位  3:豪华车位
+                List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
+                if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
+                    freeSpace = true;
+                } else {
+                    //随机生成一个不大于集合长度的整数
+                    Random random = new Random();
+                    int i = random.nextInt(parkingSpaceDtos.size());
+                    //获取车位id
+                    String psId = parkingSpaceDtos.get(i).getPsId();
+                    reqJson.put("psId", psId);
+                }
+            } else {
+                ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
+                parkingSpace.setCommunityId(reqJson.getString("communityId"));
+                parkingSpace.setPaId(parkingAreaId); //停车场id
+                parkingSpace.setState("F"); //车位状态 出售 S,出租 H ,空闲 F
+                parkingSpace.setParkingType("1"); //1:普通车位  2:子母车位  3:豪华车位
+                List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
+                if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
+                    freeSpace = true;
+                } else {
+                    //随机生成一个不大于集合长度的整数
+                    Random random = new Random();
+                    int i = random.nextInt(parkingSpaceDtos.size());
+                    //获取车位id
+                    String psId = parkingSpaceDtos.get(i).getPsId();
+                    reqJson.put("psId", psId);
+                }
+            }
+        }
+        String result = "";
+        if ("1".equals(reqJson.getString("state"))) {
+            result = "审核通过!";
+        } else if ("2".equals(reqJson.getString("state"))) {
+            result = "审核不通过!";
+        }
+        if (existCar) {
+            result = "访客信息审核成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!";
+        }
+        if (freeSpace) {
+            result = "访客信息审核成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。";
+        }
+        reqJson.put("stateRemark", result);
+        updateVisit(reqJson);
+
+        if (existCar) {
+            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "访客信息审核成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!");
+            context.setResponseEntity(responseEntity);
+            return;
+        }
+        if (freeSpace) {
+            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "访客信息审核成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。");
+            context.setResponseEntity(responseEntity);
+            return;
+        }
+        //审核通过且有车位就更新车位状态
+        if (reqJson.containsKey("state") && "1".equals(reqJson.getString("state"))
+                && "1".equals(reqJson.getString("flag"))
+                && !existCar) {
+            ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
+            parkingSpace.setPsId(reqJson.getString("psId"));
+            //查询停车位
+            List<ParkingSpaceDto> parkingSpaces = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
+            Assert.listOnlyOne(parkingSpaces, "查询停车位错误!");
+            //添加车辆信息
+            OwnerCarPo ownerCarPo = new OwnerCarPo();
+            ownerCarPo.setCarId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_carId));
+            ownerCarPo.setOwnerId(reqJson.getString("ownerId"));
+            ownerCarPo.setbId("-1");
+            ownerCarPo.setCarNum(reqJson.getString("carNum"));
+            ownerCarPo.setCarBrand("无(预约车)");
+            ownerCarPo.setCarType("9901");
+            ownerCarPo.setCarColor("无(预约车)");
+            ownerCarPo.setPsId(reqJson.getString("psId"));
+            ownerCarPo.setUserId(userId);
+            ownerCarPo.setRemark("访客登记预约车");
+            ownerCarPo.setCommunityId(reqJson.getString("communityId"));
+            ownerCarPo.setStartTime(reqJson.getString("visitTime"));
+            ownerCarPo.setEndTime(reqJson.getString("freeTime"));
+            ownerCarPo.setState(OwnerCarDto.STATE_NORMAL); //1001 正常状态,2002 车位释放欠费状态  3003 车位释放
+            ownerCarPo.setCarTypeCd(OwnerCarDto.CAR_TYPE_TEMP); //1001 业主车辆 1002 成员车辆 1003 临时车
+            ownerCarPo.setMemberId(reqJson.getString("ownerId"));
+            ownerCarPo.setLeaseType("R"); //H 月租车  S 出售车  I 内部车  NM 免费车  R 预约车
+            ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
+            //添加车辆属性
+            OwnerCarAttrPo ownerCarAttrPo = new OwnerCarAttrPo();
+            ownerCarAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_cartId));
+            ownerCarAttrPo.setCarId(ownerCarPo.getCarId());
+            ownerCarAttrPo.setCommunityId(ownerCarPo.getCommunityId());
+            ownerCarAttrPo.setSpecCd("6443000036"); //6443000036业主车辆
+            ownerCarAttrPo.setValue("true"); //预约车
+            ownerCarAttrPo.setbId("-1");
+            ownerCarAttrInnerServiceSMOImpl.saveOwnerCarAttr(ownerCarAttrPo);
+            //更新车位状态
+            ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
+            parkingSpacePo.setPsId(reqJson.getString("psId"));
+            parkingSpacePo.setState("H"); //车位状态 出售 S,出租 H ,空闲 F
+            parkingSpaceInnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
+        }
+    }
+
+    /**
+     * 添加小区信息
+     *
+     * @param paramInJson 接口调用放传入入参
+     * @return 订单服务能够接受的报文
+     */
+    public void updateVisit(JSONObject paramInJson) {
+
+        JSONObject businessVisit = new JSONObject();
+        businessVisit.putAll(paramInJson);
+
+        VisitPo visitPo = BeanConvertUtil.covertBean(businessVisit, VisitPo.class);
+        int flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
+        if (flag < 1) {
+            throw new CmdException("修改访客失败");
+        }
+    }
+}