| | |
| | | |
| | | 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.file.FileDto; |
| | | import com.java110.dto.owner.OwnerCarDto; |
| | | import com.java110.core.smo.IPhotoSMO; |
| | | import com.java110.dto.oaWorkflow.OaWorkflowDto; |
| | | import com.java110.dto.oaWorkflowXml.OaWorkflowXmlDto; |
| | | import com.java110.dto.parking.ParkingSpaceDto; |
| | | import com.java110.dto.visit.VisitDto; |
| | | import com.java110.intf.common.IFileInnerServiceSMO; |
| | | import com.java110.intf.common.IFileRelInnerServiceSMO; |
| | | import com.java110.intf.community.IParkingSpaceInnerServiceSMO; |
| | | import com.java110.intf.community.IVisitInnerServiceSMO; |
| | | 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.file.FileRelPo; |
| | | import com.java110.dto.visitSetting.VisitSettingDto; |
| | | import com.java110.intf.common.*; |
| | | import com.java110.intf.community.*; |
| | | import com.java110.intf.oa.IOaWorkflowInnerServiceSMO; |
| | | import com.java110.intf.oa.IOaWorkflowXmlInnerServiceSMO; |
| | | 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.DateUtil; |
| | | import com.java110.utils.util.StringUtil; |
| | | import com.java110.vo.ResultVo; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | 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.text.ParseException; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 访客登记 |
| | | * |
| | | * @author fqz |
| | | * @date 2023-02-27 10:23 |
| | | */ |
| | | @Java110Cmd(serviceCode = "visit.saveVisit") |
| | | public class SaveVisitCmd extends Cmd { |
| | | |
| | |
| | | private IVisitV1InnerServiceSMO visitV1InnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl; |
| | | private IPhotoSMO photoSMOImpl; |
| | | |
| | | @Autowired |
| | | private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl; |
| | | private IVisitSettingV1InnerServiceSMO visitSettingV1InnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IOwnerCarAttrInnerServiceSMO ownerCarAttrInnerServiceSMOImpl; |
| | | private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl; |
| | | private IOaWorkflowActivitiInnerServiceSMO oaWorkflowActivitiInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IFileInnerServiceSMO fileInnerServiceSMOImpl; |
| | | private IOaWorkflowXmlInnerServiceSMO oaWorkflowXmlInnerServiceSMOImpl; |
| | | |
| | | public static final String CODE_PREFIX_ID = "10"; |
| | | |
| | | //键 |
| | | public static final String IS_NEED_REVIEW = "IS_NEED_REVIEW"; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException { |
| | | @Java110Transactional |
| | | public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { |
| | | String userId = context.getReqHeaders().get("user-id"); |
| | | String storeId = context.getReqHeaders().get("store-id"); |
| | | reqJson.put("vId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_vId)); |
| | | //是否需要审核 |
| | | String isNeedReviewFlag = CommunitySettingFactory.getValue(reqJson.getString("communityId"), IS_NEED_REVIEW); |
| | | //是否有空闲车位 false 有空闲 true无空闲 |
| | | boolean freeSpace = false; |
| | | //是否超过规定次数 |
| | | boolean specifiedTimes = false; |
| | | //是否存在车辆 |
| | | boolean existCar = false; |
| | | if (!StringUtils.isEmpty(isNeedReviewFlag) && isNeedReviewFlag.equals("true") && reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) { |
| | | reqJson.put("state", "0"); //0表示未审核;1表示审核通过;2表示审核拒绝 |
| | | } else { |
| | | reqJson.put("state", "1"); |
| | | } |
| | | //随行人数 |
| | | if (reqJson.containsKey("entourage") && reqJson.getString("entourage").equals("")) { |
| | | if (StringUtil.isEmpty(reqJson.getString("entourage"))) { |
| | | reqJson.put("entourage", "0"); |
| | | } |
| | | reqJson.put("recordState", "0"); |
| | | if (reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) { |
| | | //获取预约车免费时长的值 |
| | | 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); |
| | | if (!StringUtils.isEmpty(isNeedReviewFlag) && isNeedReviewFlag.equals("false")) { //不需要审核就随机自动分配车位 |
| | | //获取小区配置里配置的停车场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); |
| | | } |
| | | } |
| | | } else { //需要审核就在审核通过时才分配车位 |
| | | reqJson.put("psId", "-1"); |
| | | } |
| | | //查询预约车辆登记次数 |
| | | String visitNumber = CommunitySettingFactory.getValue(reqJson.getString("communityId"), VISIT_NUMBER); |
| | | if (StringUtil.isEmpty(visitNumber)) { |
| | | visitNumber = "10000"; |
| | | } |
| | | int number = Integer.parseInt(visitNumber); |
| | | |
| | | VisitDto visitDto = new VisitDto(); |
| | | //查询当天车辆登记次数 |
| | | visitDto.setOwnerId(reqJson.getString("ownerId")); |
| | | visitDto.setCarNumNoEmpty("1"); |
| | | visitDto.setSameDay("1"); |
| | | List<VisitDto> visitDtos = visitInnerServiceSMOImpl.queryVisits(visitDto); |
| | | int count = visitDtos.size(); |
| | | //预约车辆登记次数0不做限制 |
| | | if (count >= number && number > 0) { |
| | | if (!StringUtils.isEmpty(isNeedReviewFlag) && isNeedReviewFlag.equals("false")) { |
| | | reqJson.put("state", "0"); |
| | | reqJson.put("psId", null); |
| | | reqJson.put("freeTime", null); |
| | | } |
| | | specifiedTimes = true; |
| | | } |
| | | //校验车牌号是否存在 |
| | | OwnerCarDto ownerCarDto1 = new OwnerCarDto(); |
| | | ownerCarDto1.setCommunityId(reqJson.getString("communityId")); |
| | | ownerCarDto1.setCarNum(reqJson.getString("carNum")); |
| | | int existCarCount = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(ownerCarDto1); |
| | | if (existCarCount > 0) { |
| | | existCar = true; |
| | | reqJson.put("psId", "-1"); |
| | | } |
| | | } |
| | | String result = ""; |
| | | if (existCar) { |
| | | result = "访客信息登记成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!"; |
| | | } |
| | | if (specifiedTimes) { |
| | | result = "访客信息登记成功,您已经超过预约车辆登记次数限制,车辆将无法自动审核!"; |
| | | } |
| | | if (freeSpace) { |
| | | result = "访客信息登记成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。"; |
| | | } |
| | | reqJson.put("stateRemark", result); |
| | | addVisit(reqJson); |
| | | if (reqJson.containsKey("photo") && !StringUtils.isEmpty(reqJson.getString("photo"))) { |
| | | if(reqJson.getString("photo").length()>512){ //说明是图片 |
| | | FileDto fileDto = new FileDto(); |
| | | fileDto.setFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_file_id)); |
| | | fileDto.setFileName(fileDto.getFileId()); |
| | | fileDto.setContext(reqJson.getString("photo")); |
| | | fileDto.setSuffix("jpeg"); |
| | | fileDto.setCommunityId(reqJson.getString("communityId")); |
| | | String fileName = fileInnerServiceSMOImpl.saveFile(fileDto); |
| | | reqJson.put("photo", fileName); |
| | | |
| | | } |
| | | JSONObject businessUnit = new JSONObject(); |
| | | businessUnit.put("fileRelId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_fileRelId)); |
| | | businessUnit.put("relTypeCd", "11000"); |
| | | businessUnit.put("saveWay", "table"); |
| | | businessUnit.put("objId", reqJson.getString("vId")); |
| | | businessUnit.put("fileRealName", reqJson.getString("photo")); |
| | | businessUnit.put("fileSaveName", reqJson.getString("photo")); |
| | | FileRelPo fileRelPo = BeanConvertUtil.covertBean(businessUnit, FileRelPo.class); |
| | | fileRelInnerServiceSMOImpl.saveFileRel(fileRelPo); |
| | | } |
| | | if ("1".equals(reqJson.getString("state")) |
| | | && reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum")) |
| | | && !existCar && !StringUtil.isEmpty(reqJson.getString("psId")) && !"-1".equals(reqJson.getString("psId"))) { //审核通过且有车位就更新车位状态 |
| | | ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto(); |
| | | parkingSpaceDto.setPsId(reqJson.getString("psId")); |
| | | //查询停车位 |
| | | List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto); |
| | | Assert.listOnlyOne(parkingSpaceDtos, "访客登记,查询停车位错误!"); |
| | | //添加车辆信息 |
| | | 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(OwnerCarDto.LEASE_TYPE_RESERVE); //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); |
| | | } |
| | | if (existCar) { |
| | | ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "访客信息登记成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!"); |
| | | context.setResponseEntity(responseEntity); |
| | | return; |
| | | } |
| | | if (specifiedTimes) { |
| | | ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "访客信息登记成功,您已经超过预约车辆登记次数限制,车辆将无法自动审核!"); |
| | | context.setResponseEntity(responseEntity); |
| | | return; |
| | | } |
| | | if (freeSpace) { |
| | | ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "访客信息登记成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。"); |
| | | context.setResponseEntity(responseEntity); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 添加小区信息 |
| | | * |
| | | * @param paramInJson 接口调用放传入入参 |
| | | * @return 订单服务能够接受的报文 |
| | | */ |
| | | public void addVisit(JSONObject paramInJson) { |
| | | |
| | | JSONObject businessVisit = new JSONObject(); |
| | | businessVisit.putAll(paramInJson); |
| | | |
| | | VisitPo visitPo = BeanConvertUtil.covertBean(businessVisit, VisitPo.class); |
| | | VisitPo visitPo = BeanConvertUtil.covertBean(reqJson, VisitPo.class); |
| | | visitPo.setState(VisitDto.STATE_W); |
| | | visitPo.setUserId(userId); |
| | | int flag = visitV1InnerServiceSMOImpl.saveVisit(visitPo); |
| | | if (flag < 1) { |
| | | throw new CmdException("保存访客失败"); |
| | | } |
| | | photoSMOImpl.savePhoto(reqJson, reqJson.getString("vId"), reqJson.getString("communityId")); |
| | | // 访客记录是否需要审核 |
| | | if (hasAuditVisit(visitPo, reqJson, storeId, userId)) { |
| | | return; // 需要审核结束,审核时处理 相应 送图片 和车牌数据 |
| | | } |
| | | //查询访客配置信息 |
| | | VisitSettingDto visitSettingDto = new VisitSettingDto(); |
| | | visitSettingDto.setCommunityId(reqJson.getString("communityId")); |
| | | List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto); |
| | | //有车辆信息的情况下判断车辆是否需要审核 |
| | | if (reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) { //有车辆 |
| | | if (visitSettingDtos != null && visitSettingDtos.size() == 1 && visitSettingDtos.get(0).getCarNumWay().equals("Y")) { //车辆同步 Y 是 N 否 |
| | | //获取预约车辆停车场ID、预约车辆免费时长、预约车限制次数、预约车是否审核 |
| | | JSONObject visitJson = getVisitCarOperate(reqJson); |
| | | //车辆是否需要审核 |
| | | // String isNeedReview = CommunitySettingFactory.getValue(reqJson.getString("communityId"), IS_NEED_REVIEW); //获取小区配置里车辆是否需要审核的值 |
| | | String isNeedReview = visitJson.getString("isNeedReview"); //获取车辆是否需要审核的值 |
| | | if (!StringUtil.isEmpty(isNeedReview) && isNeedReview.equals("0")) { //0表示需要审核 1表示不需要审核 |
| | | visitPo = new VisitPo(); |
| | | visitPo.setCarState(VisitDto.CAR_STATE_W); //车辆状态为待审核状态 |
| | | visitPo.setState(VisitDto.STATE_C); //访客记录为审核通过状态 |
| | | visitPo.setvId(reqJson.getString("vId")); |
| | | visitPo.setCommunityId(reqJson.getString("communityId")); |
| | | flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo); |
| | | if (flag < 1) { |
| | | throw new CmdException("修改访客状态失败"); |
| | | } |
| | | } else { //其他情况默认为车辆审核通过 |
| | | visitPo = new VisitPo(); |
| | | visitPo.setState(VisitDto.STATE_C); //访客记录状态变为审核通过 |
| | | visitPo.setvId(reqJson.getString("vId")); |
| | | visitPo.setCommunityId(reqJson.getString("communityId")); |
| | | JSONObject param = dealVisitorRegistrationTimes(visitJson); //判断是否超过访客登记次数 |
| | | if (param.containsKey("specifiedTimes") && !StringUtil.isEmpty(param.getString("specifiedTimes")) && param.getString("specifiedTimes").equals("true")) { //超过车辆登记次数 |
| | | visitPo.setStateRemark("访客信息登记成功,您已经超过预约车辆登记次数限制,车辆将无法审核!"); |
| | | visitPo.setCarStateRemark("访客信息登记成功,您已经超过预约车辆登记次数限制,车辆将无法审核!"); |
| | | visitPo.setCarState(VisitDto.CAR_STATE_F); //车辆状态变为审核拒绝 |
| | | ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "访客信息登记成功,您已经超过预约车辆登记次数限制,车辆将无法自动审核!"); |
| | | context.setResponseEntity(responseEntity); |
| | | flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo); |
| | | if (flag < 1) { |
| | | throw new CmdException("保存访客失败"); |
| | | } |
| | | } else { //未超过车辆登记次数 |
| | | //获取车位 |
| | | JSONObject paramJson = dealParkingSpace(visitJson); |
| | | if (paramJson.containsKey("freeSpace") && !StringUtil.isEmpty(paramJson.getString("freeSpace")) && paramJson.getString("freeSpace").equals("true")) { //无空闲车位 |
| | | visitPo.setStateRemark("访客信息登记成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。"); |
| | | visitPo.setCarStateRemark("访客信息登记成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。"); |
| | | visitPo.setCarState(VisitDto.CAR_STATE_F); //车辆状态为审核拒绝状态 |
| | | ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "访客信息登记成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。"); |
| | | context.setResponseEntity(responseEntity); |
| | | flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo); |
| | | if (flag < 1) { |
| | | throw new CmdException("保存访客失败"); |
| | | } |
| | | } else { //有空闲车位 |
| | | visitPo.setPsId(paramJson.getString("psId")); |
| | | //处理预约车免费时长 |
| | | String freeTime = dealVisitCarFreeTime(visitJson); |
| | | reqJson.put("freeTime", freeTime); |
| | | visitPo.setFreeTime(freeTime); //预约车免费时长 |
| | | visitPo.setCarState(VisitDto.CAR_STATE_C); //车辆状态为审核通过状态 |
| | | flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo); |
| | | if (flag < 1) { |
| | | throw new CmdException("修改访客状态失败"); |
| | | } |
| | | //修改车位状态 |
| | | modifyParkingSpaceSate(paramJson); |
| | | } |
| | | } |
| | | } |
| | | } else if (visitSettingDtos != null && visitSettingDtos.size() == 1 && visitSettingDtos.get(0).getCarNumWay().equals("N")) { //车辆不同步 |
| | | visitPo = new VisitPo(); |
| | | visitPo.setState(VisitDto.STATE_C); |
| | | visitPo.setCarState(VisitDto.CAR_STATE_C); //车辆审核通过 |
| | | visitPo.setCarStateRemark("车辆不同步!"); |
| | | visitPo.setvId(reqJson.getString("vId")); |
| | | visitPo.setCommunityId(reqJson.getString("communityId")); |
| | | flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo); |
| | | if (flag < 1) { |
| | | throw new CmdException("修改访客状态失败"); |
| | | } |
| | | } |
| | | } else { //无车辆 |
| | | visitPo = new VisitPo(); |
| | | visitPo.setState(VisitDto.STATE_C); |
| | | visitPo.setvId(reqJson.getString("vId")); |
| | | visitPo.setCommunityId(reqJson.getString("communityId")); |
| | | flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo); |
| | | if (flag < 1) { |
| | | throw new CmdException("修改访客状态失败"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 是否需要审核 |
| | | * |
| | | * @param visitPo |
| | | * @param reqJson |
| | | */ |
| | | private boolean hasAuditVisit(VisitPo visitPo, JSONObject reqJson, String storeId, String userId) { |
| | | 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; |
| | | } |
| | | //触发 审批流程 |
| | | OaWorkflowDto oaWorkflowDto = new OaWorkflowDto(); |
| | | oaWorkflowDto.setStoreId(storeId); |
| | | oaWorkflowDto.setFlowId(visitSettingDtos.get(0).getFlowId()); |
| | | List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto); |
| | | Assert.listOnlyOne(oaWorkflowDtos, "流程不存在"); |
| | | if (!OaWorkflowDto.STATE_COMPLAINT.equals(oaWorkflowDtos.get(0).getState())) { |
| | | throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "流程未部署"); |
| | | } |
| | | if (StringUtil.isEmpty(oaWorkflowDtos.get(0).getProcessDefinitionKey())) { |
| | | throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "流程未部署"); |
| | | } |
| | | //启动任务 |
| | | JSONObject flowJson = new JSONObject(); |
| | | flowJson.put("processDefinitionKey", oaWorkflowDtos.get(0).getProcessDefinitionKey()); |
| | | flowJson.put("createUserId", userId); |
| | | flowJson.put("flowId", oaWorkflowDtos.get(0).getFlowId()); |
| | | flowJson.put("id", visitPo.getvId()); |
| | | flowJson.put("auditMessage", "提交审核"); |
| | | flowJson.put("storeId", storeId); |
| | | reqJson.put("processDefinitionKey", oaWorkflowDtos.get(0).getProcessDefinitionKey()); |
| | | JSONObject result = oaWorkflowActivitiInnerServiceSMOImpl.startProcess(flowJson); |
| | | //提交者提交 |
| | | flowJson = new JSONObject(); |
| | | flowJson.put("processInstanceId", result.getString("processInstanceId")); |
| | | flowJson.put("createUserId", userId); |
| | | flowJson.put("nextUserId", nextAuditStaff(storeId, visitSettingDtos.get(0).getFlowId())); // 这里要求流程 下一处理人必须要指定 |
| | | flowJson.put("storeId", storeId); |
| | | flowJson.put("id", visitPo.getvId()); |
| | | flowJson.put("flowId", oaWorkflowDtos.get(0).getFlowId()); |
| | | oaWorkflowActivitiInnerServiceSMOImpl.autoFinishFirstTask(flowJson); |
| | | visitPo = new VisitPo(); |
| | | visitPo.setState(VisitDto.STATE_D); |
| | | visitPo.setvId(reqJson.getString("vId")); |
| | | visitPo.setCommunityId(reqJson.getString("communityId")); |
| | | if (reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) { |
| | | visitPo.setCarState(VisitDto.CAR_STATE_D); |
| | | } |
| | | int flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo); |
| | | if (flag < 1) { |
| | | throw new CmdException("修改访客状态失败"); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | private String nextAuditStaff(String storeId, String flowId) { |
| | | OaWorkflowDto oaWorkflowDto = new OaWorkflowDto(); |
| | | oaWorkflowDto.setFlowId(flowId); |
| | | oaWorkflowDto.setStoreId(storeId); |
| | | List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto); |
| | | Assert.listOnlyOne(oaWorkflowDtos, "流程不存在"); |
| | | OaWorkflowXmlDto oaWorkflowXmlDto = new OaWorkflowXmlDto(); |
| | | oaWorkflowXmlDto.setFlowId(oaWorkflowDtos.get(0).getFlowId()); |
| | | List<OaWorkflowXmlDto> oaWorkflowXmlDtos = oaWorkflowXmlInnerServiceSMOImpl.queryOaWorkflowXmls(oaWorkflowXmlDto); |
| | | Assert.listOnlyOne(oaWorkflowXmlDtos, "流程不存在"); |
| | | List<JSONObject> tasks = oaWorkflowActivitiInnerServiceSMOImpl.queryFirstAuditStaff(oaWorkflowXmlDtos.get(0)); |
| | | if (tasks == null || tasks.size() < 1) { |
| | | throw new CmdException("流程未设置下一步审核人"); |
| | | } |
| | | String assignee = tasks.get(0).getString("assignee"); |
| | | if (assignee.startsWith("-")) { |
| | | throw new CmdException("流程未设置下一步审核人"); |
| | | } |
| | | return assignee; |
| | | } |
| | | |
| | | //处理车位id |
| | | public JSONObject dealParkingSpace(JSONObject reqJson) { |
| | | //是否有空闲车位 false 有空闲 true无空闲 |
| | | boolean freeSpace = false; |
| | | //获取访客配置里配置的停车场id |
| | | // String parkingAreaId = CommunitySettingFactory.getValue(reqJson.getString("communityId"), ASCRIPTION_CAR_AREA_ID); |
| | | String ascriptionCarAreaId = reqJson.getString("ascriptionCarAreaId"); |
| | | if (StringUtil.isEmpty(ascriptionCarAreaId)) { //如果没有配置停车场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(ascriptionCarAreaId); //停车场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); |
| | | } |
| | | } |
| | | reqJson.put("freeSpace", freeSpace); |
| | | return reqJson; |
| | | } |
| | | |
| | | //更改车位状态 |
| | | public void modifyParkingSpaceSate(JSONObject reqJson) { |
| | | ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto(); |
| | | parkingSpaceDto.setPsId(reqJson.getString("psId")); |
| | | List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto); |
| | | Assert.listOnlyOne(parkingSpaceDtos, "查询车位错误!"); |
| | | ParkingSpacePo parkingSpacePo = new ParkingSpacePo(); |
| | | parkingSpacePo.setPsId(parkingSpaceDtos.get(0).getPsId()); |
| | | parkingSpacePo.setState("H"); //车位状态 出售 S,出租 H ,空闲 F |
| | | parkingSpaceInnerServiceSMOImpl.updateParkingSpace(parkingSpacePo); |
| | | } |
| | | |
| | | //判断是否超过访客登记次数 |
| | | public JSONObject dealVisitorRegistrationTimes(JSONObject reqJson) { |
| | | //是否超过规定次数 |
| | | boolean specifiedTimes = false; |
| | | //查询预约车辆登记次数 |
| | | // String visitNumber = CommunitySettingFactory.getValue(reqJson.getString("communityId"), VISIT_NUMBER); |
| | | String visitNumber = reqJson.getString("visitNumber"); //预约车限制次数 |
| | | if (StringUtil.isEmpty(visitNumber)) { |
| | | reqJson.put("specifiedTimes", specifiedTimes); |
| | | return reqJson; |
| | | } |
| | | int number = Integer.parseInt(visitNumber); |
| | | VisitDto visitDto = new VisitDto(); |
| | | //查询当天车辆登记次数 |
| | | visitDto.setOwnerId(reqJson.getString("ownerId")); |
| | | visitDto.setCommunityId(reqJson.getString("communityId")); |
| | | visitDto.setCarNumNoEmpty("1"); |
| | | visitDto.setSameDay("1"); |
| | | visitDto.setCarState("1"); //车辆审核通过 |
| | | visitDto.setSign(reqJson.getString("vId")); |
| | | List<VisitDto> visitDtos = visitInnerServiceSMOImpl.queryVisits(visitDto); |
| | | int count = visitDtos.size(); |
| | | //预约车辆登记次数0不做限制 |
| | | if (count >= number && number > 0) { |
| | | reqJson.put("psId", null); |
| | | reqJson.put("freeTime", null); |
| | | specifiedTimes = true; |
| | | } |
| | | reqJson.put("specifiedTimes", specifiedTimes); |
| | | return reqJson; |
| | | } |
| | | |
| | | //处理预约车免费时长 |
| | | public String dealVisitCarFreeTime(JSONObject reqJson) { |
| | | //获取预约车免费时长的值 |
| | | // String freeTime = CommunitySettingFactory.getValue(reqJson.getString("communityId"), CAR_FREE_TIME); |
| | | String carFreeTime = reqJson.getString("carFreeTime"); |
| | | if (StringUtil.isEmpty(carFreeTime)) { |
| | | carFreeTime = "120"; |
| | | } |
| | | Date time = DateUtil.getDateFromStringA(reqJson.getString("visitTime")); |
| | | Calendar newTime = Calendar.getInstance(); |
| | | newTime.setTime(time); |
| | | newTime.add(Calendar.MINUTE, Integer.parseInt(carFreeTime));//日期加上分钟 |
| | | Date newDate = newTime.getTime(); |
| | | String finishFreeTime = DateUtil.getFormatTimeString(newDate, DateUtil.DATE_FORMATE_STRING_A); |
| | | return finishFreeTime; |
| | | } |
| | | |
| | | //获取预约车辆停车场ID、预约车辆免费时长、预约车限制次数、预约车是否审核 |
| | | public JSONObject getVisitCarOperate(JSONObject reqJson) { |
| | | VisitSettingDto visitSettingDto = new VisitSettingDto(); |
| | | visitSettingDto.setCommunityId(reqJson.getString("communityId")); |
| | | List<VisitSettingDto> visitSettingDtos = visitSettingV1InnerServiceSMOImpl.queryVisitSettings(visitSettingDto); |
| | | if (visitSettingDtos != null && visitSettingDtos.size() > 0) { |
| | | reqJson.put("ascriptionCarAreaId", visitSettingDtos.get(0).getPaId()); //预约车辆归属停车场ID |
| | | reqJson.put("carFreeTime", visitSettingDtos.get(0).getCarFreeTime()); //预约车辆免费时长(单位为分钟) |
| | | reqJson.put("visitNumber", visitSettingDtos.get(0).getVisitNumber()); //预约车限制次数 |
| | | reqJson.put("isNeedReview", visitSettingDtos.get(0).getIsNeedReview()); //预约车是否审核 0表示需要审核 1表示不需要审核 |
| | | } |
| | | return reqJson; |
| | | } |
| | | } |