Bläddra i källkod

业主停车位查询

吴学文 7 år sedan
förälder
incheckning
a6c0f8f02e
18 ändrade filer med 952 tillägg och 4 borttagningar
  1. 295 0
      Api/src/main/java/com/java110/api/listener/parkingSpace/ExitParkingSpaceListener.java
  2. 143 0
      Api/src/main/java/com/java110/api/listener/parkingSpace/QueryParkingSpacesByOwnerListener.java
  3. 3 3
      Api/src/main/java/com/java110/api/listener/room/ExitRoomListener.java
  4. 39 0
      WebService/src/main/java/com/java110/web/components/parkingSpace/OwnerExitParkingSpaceComponent.java
  5. 37 0
      WebService/src/main/java/com/java110/web/components/parkingSpace/ShowOwnerParkingSpaceComponent.java
  6. 15 0
      WebService/src/main/java/com/java110/web/smo/IParkingSpaceServiceSMO.java
  7. 90 0
      WebService/src/main/java/com/java110/web/smo/impl/PackingSpaceServiceSMOImpl.java
  8. 19 0
      WebService/src/main/resources/components/owner-exit-parkingSpace/ownerExitParkingSpace.html
  9. 44 0
      WebService/src/main/resources/components/owner-exit-parkingSpace/ownerExitParkingSpace.js
  10. 10 0
      WebService/src/main/resources/components/owner-parking-space/ownerParkingSpace.html
  11. 19 0
      WebService/src/main/resources/components/owner-parking-space/ownerParkingSpace.js
  12. 1 1
      WebService/src/main/resources/components/sell-car/sellCar.js
  13. 80 0
      WebService/src/main/resources/components/show-owner-parkingSpaces/showOwnerParkingSpace.html
  14. 72 0
      WebService/src/main/resources/components/show-owner-parkingSpaces/showOwnerParkingSpace.js
  15. 33 0
      WebService/src/main/resources/views/ownerParkingSpaceFlow.html
  16. 38 0
      java110-bean/src/main/java/com/java110/vo/api/ApiParkingSpaceDataVo.java
  17. 5 0
      java110-common/src/main/java/com/java110/common/constant/PrivilegeCodeConstant.java
  18. 9 0
      java110-common/src/main/java/com/java110/common/constant/ServiceCodeConstant.java

+ 295 - 0
Api/src/main/java/com/java110/api/listener/parkingSpace/ExitParkingSpaceListener.java

@@ -0,0 +1,295 @@
+package com.java110.api.listener.parkingSpace;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.listener.AbstractServiceApiDataFlowListener;
+import com.java110.common.constant.*;
+import com.java110.common.exception.ListenerExecuteException;
+import com.java110.common.util.Assert;
+import com.java110.common.util.BeanConvertUtil;
+import com.java110.common.util.DateUtil;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.core.smo.community.ICommunityInnerServiceSMO;
+import com.java110.core.smo.fee.IFeeInnerServiceSMO;
+import com.java110.core.smo.owner.IOwnerCarInnerServiceSMO;
+import com.java110.core.smo.parkingSpace.IParkingSpaceInnerServiceSMO;
+import com.java110.dto.FeeDto;
+import com.java110.dto.OwnerCarDto;
+import com.java110.dto.ParkingSpaceDto;
+import com.java110.entity.center.AppService;
+import com.java110.event.service.api.ServiceDataFlowEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ * @ClassName SaveUnitListener
+ * @Description TODO 退停车位信息
+ * @Author wuxw
+ * @Date 2019/5/3 11:54
+ * @Version 1.0
+ * add by wuxw 2019/5/3
+ **/
+@Java110Listener("exitParkingSpaceListener")
+public class ExitParkingSpaceListener extends AbstractServiceApiDataFlowListener {
+    private static Logger logger = LoggerFactory.getLogger(ExitParkingSpaceListener.class);
+
+
+    @Autowired
+    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+
+    @Autowired
+    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+
+    @Autowired
+    private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeConstant.SERVICE_CODE_EXIT_PARKING_SPACE;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return HttpMethod.POST;
+    }
+
+    @Override
+    public void soService(ServiceDataFlowEvent event) {
+
+        logger.debug("ServiceDataFlowEvent : {}", event);
+
+        DataFlowContext dataFlowContext = event.getDataFlowContext();
+        AppService service = event.getAppService();
+
+        String paramIn = dataFlowContext.getReqData();
+
+        //校验数据
+        validate(paramIn);
+        JSONObject paramObj = JSONObject.parseObject(paramIn);
+
+        validateHasSellParkingSpace(paramObj);
+
+        HttpHeaders header = new HttpHeaders();
+        dataFlowContext.getRequestCurrentHeaders().put(CommonConstant.HTTP_ORDER_TYPE_CD, "D");
+        JSONArray businesses = new JSONArray();
+
+        //退出 业主和停车位之间关系
+        businesses.add(exitParkingSpace(paramObj, dataFlowContext));
+
+        //将车位状态改为空闲状态
+        businesses.add(modifyParkingSpaceState(paramObj));
+
+
+        //删除费用信息
+        businesses.add(exitPropertyFee(paramObj, dataFlowContext));
+
+        JSONObject paramInObj = super.restToCenterProtocol(businesses, dataFlowContext.getRequestCurrentHeaders());
+
+        //将 rest header 信息传递到下层服务中去
+        super.freshHttpHeader(header, dataFlowContext.getRequestCurrentHeaders());
+
+        ResponseEntity<String> responseEntity = this.callService(dataFlowContext, service.getServiceCode(), paramInObj);
+
+        dataFlowContext.setResponseEntity(responseEntity);
+
+    }
+
+    /**
+     * 售卖房屋信息
+     *
+     * @param paramInJson     接口调用放传入入参
+     * @param dataFlowContext 数据上下文
+     * @return 订单服务能够接受的报文
+     */
+    private JSONObject exitParkingSpace(JSONObject paramInJson, DataFlowContext dataFlowContext) {
+
+
+        OwnerCarDto ownerCarDto = (OwnerCarDto) paramInJson.get("ownerCarDto");
+
+        JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
+        business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_DELETE_OWNER_CAR);
+        business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ);
+        business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
+        JSONObject businessOwnerCar = new JSONObject();
+        //businessUnit.putAll(paramInJson);
+        businessOwnerCar.put("carId", ownerCarDto.getCarId());
+        //businessUnit.put("userId", dataFlowContext.getRequestCurrentHeaders().get(CommonConstant.HTTP_USER_ID));
+        business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put("businessOwnerCar", businessOwnerCar);
+
+        return business;
+    }
+
+    /**
+     * 修改停车位状态信息
+     *
+     * @param paramInJson 接口调用放传入入参
+     * @return 订单服务能够接受的报文
+     */
+    private JSONObject modifyParkingSpaceState(JSONObject paramInJson) {
+
+        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
+        parkingSpaceDto.setCommunityId(paramInJson.getString("communityId"));
+        parkingSpaceDto.setPsId(paramInJson.getString("psId"));
+        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
+
+        if (parkingSpaceDtos == null || parkingSpaceDtos.size() != 1) {
+            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "未查询到停车位信息" + JSONObject.toJSONString(parkingSpaceDto));
+        }
+
+        parkingSpaceDto = parkingSpaceDtos.get(0);
+
+        JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
+        business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_UPDATE_PARKING_SPACE);
+        business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ + 1);
+        business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
+        JSONObject businessParkingSpace = new JSONObject();
+
+        businessParkingSpace.putAll(BeanConvertUtil.beanCovertMap(parkingSpaceDto));
+        businessParkingSpace.put("state", "F");
+        business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put("businessParkingSpace", businessParkingSpace);
+
+        return business;
+    }
+
+    /**
+     * 删除物业费用信息
+     *
+     * @param paramInJson     接口调用放传入入参
+     * @param dataFlowContext 数据上下文
+     * @return 订单服务能够接受的报文
+     */
+    private JSONObject exitPropertyFee(JSONObject paramInJson, DataFlowContext dataFlowContext) {
+
+
+        //校验物业费是否已经交清
+        FeeDto feeDto = new FeeDto();
+        feeDto.setCommunityId(paramInJson.getString("communityId"));
+        feeDto.setIncomeObjId(paramInJson.getString("storeId"));
+        feeDto.setPayerObjId(paramInJson.getString("psId"));
+        feeDto.setFeeTypeCd(FeeTypeConstant.FEE_TYPE_PROPERTY);
+        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+
+        if (feeDtos == null || feeDtos.size() != 1) {
+            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "数据存在问题,物业费对应关系不是一条");
+        }
+
+
+        JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
+        business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_DELETE_FEE_INFO);
+        business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ);
+        business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
+        JSONObject businessFee = new JSONObject();
+        //businessUnit.putAll(paramInJson);
+        businessFee.put("feeId", feeDtos.get(0).getFeeId());
+        //businessUnit.put("userId", dataFlowContext.getRequestCurrentHeaders().get(CommonConstant.HTTP_USER_ID));
+        business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put("businessFee", businessFee);
+
+        return business;
+    }
+
+    /**
+     * 数据校验
+     *
+     * @param paramIn "communityId": "7020181217000001",
+     *                "memberId": "3456789",
+     *                "memberTypeCd": "390001200001"
+     */
+    private void validate(String paramIn) {
+        Assert.jsonObjectHaveKey(paramIn, "communityId", "请求报文中未包含communityId节点");
+        Assert.jsonObjectHaveKey(paramIn, "ownerId", "请求报文中未包含ownerId节点");
+        Assert.jsonObjectHaveKey(paramIn, "psId", "请求报文中未包含psId节点");
+        Assert.jsonObjectHaveKey(paramIn, "storeId", "请求报文中未包含storeId节点");
+
+        JSONObject paramObj = JSONObject.parseObject(paramIn);
+        Assert.hasLength(paramObj.getString("communityId"), "小区ID不能为空");
+        Assert.hasLength(paramObj.getString("ownerId"), "ownerId不能为空");
+        Assert.hasLength(paramObj.getString("psId"), "psId不能为空");
+        Assert.hasLength(paramObj.getString("storeId"), "storeId不能为空");
+        //
+
+        super.communityHasOwner(paramObj, communityInnerServiceSMOImpl);
+
+
+    }
+
+
+    /**
+     * 校验是否存在实例数据
+     *
+     * @param paramObj 请参数 转成json对象
+     */
+    private void validateHasSellParkingSpace(JSONObject paramObj) {
+
+        //校验物业费是否已经交清
+        OwnerCarDto ownerCarDto = new OwnerCarDto();
+        ownerCarDto.setPsId(paramObj.getString("psId"));
+        ownerCarDto.setOwnerId(paramObj.getString("ownerId"));
+        List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+
+        if (ownerCarDtos == null || ownerCarDtos.size() != 1) {
+            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "该停车位没被出售过(出租过) 或 被多次出售过(出租过)");
+        }
+
+        ownerCarDto = ownerCarDtos.get(0);
+
+        Calendar calc = Calendar.getInstance();
+        calc.setTime(ownerCarDto.getCreateTime());
+        calc.add(Calendar.DATE, 7);
+
+        if (calc.getTime().getTime() > DateUtil.getCurrentDate().getTime()) {
+            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "只有在7天内才能退款,现已经过期,无法退款");
+        }
+
+        paramObj.put("ownerCarDto", ownerCarDto);
+    }
+
+
+    public ICommunityInnerServiceSMO getCommunityInnerServiceSMOImpl() {
+        return communityInnerServiceSMOImpl;
+    }
+
+    public void setCommunityInnerServiceSMOImpl(ICommunityInnerServiceSMO communityInnerServiceSMOImpl) {
+        this.communityInnerServiceSMOImpl = communityInnerServiceSMOImpl;
+    }
+
+    @Override
+    public int getOrder() {
+        return DEFAULT_ORDER;
+    }
+
+    public IOwnerCarInnerServiceSMO getOwnerCarInnerServiceSMOImpl() {
+        return ownerCarInnerServiceSMOImpl;
+    }
+
+    public void setOwnerCarInnerServiceSMOImpl(IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl) {
+        this.ownerCarInnerServiceSMOImpl = ownerCarInnerServiceSMOImpl;
+    }
+
+    public IFeeInnerServiceSMO getFeeInnerServiceSMOImpl() {
+        return feeInnerServiceSMOImpl;
+    }
+
+    public void setFeeInnerServiceSMOImpl(IFeeInnerServiceSMO feeInnerServiceSMOImpl) {
+        this.feeInnerServiceSMOImpl = feeInnerServiceSMOImpl;
+    }
+
+    public IParkingSpaceInnerServiceSMO getParkingSpaceInnerServiceSMOImpl() {
+        return parkingSpaceInnerServiceSMOImpl;
+    }
+
+    public void setParkingSpaceInnerServiceSMOImpl(IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl) {
+        this.parkingSpaceInnerServiceSMOImpl = parkingSpaceInnerServiceSMOImpl;
+    }
+}

+ 143 - 0
Api/src/main/java/com/java110/api/listener/parkingSpace/QueryParkingSpacesByOwnerListener.java

@@ -0,0 +1,143 @@
+package com.java110.api.listener.parkingSpace;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.listener.AbstractServiceApiDataFlowListener;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.constant.ServiceCodeConstant;
+import com.java110.common.exception.ListenerExecuteException;
+import com.java110.common.util.Assert;
+import com.java110.common.util.BeanConvertUtil;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.core.smo.owner.IOwnerCarInnerServiceSMO;
+import com.java110.core.smo.parkingSpace.IParkingSpaceInnerServiceSMO;
+import com.java110.dto.OwnerCarDto;
+import com.java110.dto.ParkingSpaceDto;
+import com.java110.event.service.api.ServiceDataFlowEvent;
+import com.java110.vo.api.ApiParkingSpaceDataVo;
+import com.java110.vo.api.ApiParkingSpaceVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ClassName ParkingSpaceDto
+ * @Description 查询业主停车位
+ * @Author wuxw
+ * @Date 2019/4/24 8:52
+ * @Version 1.0
+ * add by wuxw 2019/4/24
+ **/
+@Java110Listener("queryParkingSpacesByOwnerListener")
+public class QueryParkingSpacesByOwnerListener extends AbstractServiceApiDataFlowListener {
+
+    @Autowired
+    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeConstant.SERVICE_CODE_QUERY_PARKING_SPACE_BY_OWNER;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return HttpMethod.GET;
+    }
+
+    /**
+     * 业务层数据处理
+     *
+     * @param event 时间对象
+     */
+    @Override
+    public void soService(ServiceDataFlowEvent event) {
+        DataFlowContext dataFlowContext = event.getDataFlowContext();
+        //获取请求数据
+        JSONObject reqJson = dataFlowContext.getReqJson();
+        validateParkingSpaceData(reqJson);
+
+        ApiParkingSpaceVo apiParkingSpaceVo = new ApiParkingSpaceVo();
+
+        OwnerCarDto ownerCarDto = new OwnerCarDto();
+        ownerCarDto.setOwnerId(reqJson.getString("ownerId"));
+
+        List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+
+        //在没有 停车位的情况下 直接返回空
+        ResponseEntity<String> responseEntity = null;
+        if (ownerCarDtos == null || ownerCarDtos.size() == 0) {
+            responseEntity = new ResponseEntity<String>("[]", HttpStatus.OK);
+            dataFlowContext.setResponseEntity(responseEntity);
+            return;
+        }
+
+        ParkingSpaceDto parkingSpaceDto = null;
+        List<ApiParkingSpaceDataVo> apiParkingSpaceDataVos = new ArrayList<>();
+        for (OwnerCarDto tmpOwnerCarDto : ownerCarDtos) {
+
+            parkingSpaceDto = new ParkingSpaceDto();
+            parkingSpaceDto.setCommunityId(reqJson.getString("communityId"));
+            parkingSpaceDto.setPsId(tmpOwnerCarDto.getPsId());
+            List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
+
+            if (parkingSpaceDtos == null || parkingSpaceDtos.size() != 1) {
+                throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "根据psId 查询存在多条停车位信息" + tmpOwnerCarDto.getPsId());
+            }
+
+            parkingSpaceDto = parkingSpaceDtos.get(0);
+
+            ApiParkingSpaceDataVo apiParkingSpaceDataVo = BeanConvertUtil.covertBean(tmpOwnerCarDto, ApiParkingSpaceDataVo.class);
+
+            apiParkingSpaceDataVo = BeanConvertUtil.covertBean(parkingSpaceDto, apiParkingSpaceDataVo);
+
+            apiParkingSpaceDataVos.add(apiParkingSpaceDataVo);
+
+        }
+
+        apiParkingSpaceVo.setParkingSpaces(apiParkingSpaceDataVos);
+        responseEntity = new ResponseEntity<String>(JSONObject.toJSONString(apiParkingSpaceVo), HttpStatus.OK);
+        dataFlowContext.setResponseEntity(responseEntity);
+    }
+
+
+    /**
+     * 校验查询条件是否满足条件
+     *
+     * @param reqJson 包含查询条件
+     */
+    private void validateParkingSpaceData(JSONObject reqJson) {
+        Assert.jsonObjectHaveKey(reqJson, "communityId", "请求中未包含communityId信息");
+        Assert.jsonObjectHaveKey(reqJson, "ownerId", "请求中未包含ownerId信息");
+
+    }
+
+    @Override
+    public int getOrder() {
+        return super.DEFAULT_ORDER;
+    }
+
+
+    public IParkingSpaceInnerServiceSMO getParkingSpaceInnerServiceSMOImpl() {
+        return parkingSpaceInnerServiceSMOImpl;
+    }
+
+    public void setParkingSpaceInnerServiceSMOImpl(IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl) {
+        this.parkingSpaceInnerServiceSMOImpl = parkingSpaceInnerServiceSMOImpl;
+    }
+
+    public IOwnerCarInnerServiceSMO getOwnerCarInnerServiceSMOImpl() {
+        return ownerCarInnerServiceSMOImpl;
+    }
+
+    public void setOwnerCarInnerServiceSMOImpl(IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl) {
+        this.ownerCarInnerServiceSMOImpl = ownerCarInnerServiceSMOImpl;
+    }
+}

+ 3 - 3
Api/src/main/java/com/java110/api/listener/room/ExitRoomListener.java

@@ -198,16 +198,16 @@ public class ExitRoomListener extends AbstractServiceApiDataFlowListener {
             throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "未包含物业费,数据异常");
         }
 
-        if(feeDtos.size() > 1){
+        if (feeDtos.size() > 1) {
             throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "包含多条物业费,数据异常");
         }
 
         FeeDto feeDtoData = feeDtos.get(0);
 
-        Calendar calc =Calendar.getInstance();
+        Calendar calc = Calendar.getInstance();
         calc.setTime(feeDtoData.getEndTime());
         calc.add(Calendar.DATE, 30);
-        if(calc.getTime().getTime() < DateUtil.getCurrentDate().getTime()){
+        if (calc.getTime().getTime() < DateUtil.getCurrentDate().getTime()) {
             throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "你还有物业费没有缴清,请先缴清欠款");
         }
 

+ 39 - 0
WebService/src/main/java/com/java110/web/components/parkingSpace/OwnerExitParkingSpaceComponent.java

@@ -0,0 +1,39 @@
+package com.java110.web.components.parkingSpace;
+
+
+import com.java110.core.context.IPageData;
+import com.java110.web.smo.IParkingSpaceServiceSMO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * 退房
+ *
+ * add by wuxw 2019-05-22
+ */
+@Component("ownerExitParkingSpace")
+public class OwnerExitParkingSpaceComponent {
+
+    @Autowired
+    private IParkingSpaceServiceSMO parkingSpaceServiceSMOImpl;
+
+    /**
+     * 售卖房屋
+     *
+     * @param pd 包含floorId 和小区ID 页面封装对象
+     * @return 单元信息
+     */
+    public ResponseEntity<String> exit(IPageData pd) {
+        return parkingSpaceServiceSMOImpl.exitParkingSpace(pd);
+    }
+
+
+    public IParkingSpaceServiceSMO getParkingSpaceServiceSMOImpl() {
+        return parkingSpaceServiceSMOImpl;
+    }
+
+    public void setParkingSpaceServiceSMOImpl(IParkingSpaceServiceSMO parkingSpaceServiceSMOImpl) {
+        this.parkingSpaceServiceSMOImpl = parkingSpaceServiceSMOImpl;
+    }
+}

+ 37 - 0
WebService/src/main/java/com/java110/web/components/parkingSpace/ShowOwnerParkingSpaceComponent.java

@@ -0,0 +1,37 @@
+package com.java110.web.components.parkingSpace;
+
+import com.java110.core.context.IPageData;
+import com.java110.web.smo.IParkingSpaceServiceSMO;
+import com.java110.web.smo.IRoomServiceSMO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * 查询业主停车位
+ */
+@Component("showOwnerParkingSpace")
+public class ShowOwnerParkingSpaceComponent {
+
+    @Autowired
+    private IParkingSpaceServiceSMO parkingSpaceServiceSMOImpl;
+
+    /**
+     * 售卖房屋
+     *
+     * @param pd 包含floorId 和小区ID 页面封装对象
+     * @return 单元信息
+     */
+    public ResponseEntity<String> list(IPageData pd) {
+        return parkingSpaceServiceSMOImpl.listParkingSpaceByOwner(pd);
+    }
+
+
+    public IParkingSpaceServiceSMO getParkingSpaceServiceSMOImpl() {
+        return parkingSpaceServiceSMOImpl;
+    }
+
+    public void setParkingSpaceServiceSMOImpl(IParkingSpaceServiceSMO parkingSpaceServiceSMOImpl) {
+        this.parkingSpaceServiceSMOImpl = parkingSpaceServiceSMOImpl;
+    }
+}

+ 15 - 0
WebService/src/main/java/com/java110/web/smo/IParkingSpaceServiceSMO.java

@@ -40,4 +40,19 @@ public interface IParkingSpaceServiceSMO {
      * @return 返回 ResponseEntity对象包含 http状态 信息 body信息
      */
     ResponseEntity<String> deleteParkingSpace(IPageData pd);
+
+    /**
+     * 查询业主 停车位
+     *
+     * @param pd 页面数据封装
+     * @return 返回停车位信息
+     */
+    ResponseEntity<String> listParkingSpaceByOwner(IPageData pd);
+
+    /**
+     * 退停车位
+     * @param pd
+     * @return
+     */
+    ResponseEntity<String> exitParkingSpace(IPageData pd);
 }

+ 90 - 0
WebService/src/main/java/com/java110/web/smo/impl/PackingSpaceServiceSMOImpl.java

@@ -173,6 +173,81 @@ public class PackingSpaceServiceSMOImpl extends BaseComponentSMO implements IPar
         return responseEntity;
     }
 
+    @Override
+    public ResponseEntity<String> listParkingSpaceByOwner(IPageData pd) {
+        validateListParkingSpaceByOwner(pd);
+
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+        String communityId = paramIn.getString("communityId");
+
+        //校验用户是否有权限
+        super.checkUserHasPrivilege(pd, restTemplate, PrivilegeCodeConstant.PRIVILEGE_PARKING_SPACE_FOR_OWNER);
+
+        ResponseEntity responseEntity = super.getStoreInfo(pd, restTemplate);
+        if (responseEntity.getStatusCode() != HttpStatus.OK) {
+            return responseEntity;
+        }
+        Assert.jsonObjectHaveKey(responseEntity.getBody().toString(), "storeId", "根据用户ID查询商户ID失败,未包含storeId节点");
+        Assert.jsonObjectHaveKey(responseEntity.getBody().toString(), "storeTypeCd", "根据用户ID查询商户类型失败,未包含storeTypeCd节点");
+
+        String storeId = JSONObject.parseObject(responseEntity.getBody().toString()).getString("storeId");
+        String storeTypeCd = JSONObject.parseObject(responseEntity.getBody().toString()).getString("storeTypeCd");
+        //数据校验是否 商户是否入驻该小区
+        super.checkStoreEnterCommunity(pd, storeId, storeTypeCd, communityId, restTemplate);
+        String apiUrl = ServiceConstant.SERVICE_API_URL + "/api/parkingSpace.queryParkingSpacesByOwner" + mapToUrlParam(paramIn);
+
+
+        responseEntity = this.callCenterService(restTemplate, pd, "",
+                apiUrl,
+                HttpMethod.GET);
+        return responseEntity;
+    }
+
+    @Override
+    public ResponseEntity<String> exitParkingSpace(IPageData pd) {
+        validateExitParkingSpace(pd);
+        //校验员工是否有权限操作
+        super.checkUserHasPrivilege(pd, restTemplate, PrivilegeCodeConstant.PRIVILEGE_OWNER_ROOM);
+
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+        String communityId = paramIn.getString("communityId");
+        ResponseEntity responseEntity = super.getStoreInfo(pd, restTemplate);
+        if (responseEntity.getStatusCode() != HttpStatus.OK) {
+            return responseEntity;
+        }
+        Assert.jsonObjectHaveKey(responseEntity.getBody().toString(), "storeId", "根据用户ID查询商户ID失败,未包含storeId节点");
+        Assert.jsonObjectHaveKey(responseEntity.getBody().toString(), "storeTypeCd", "根据用户ID查询商户类型失败,未包含storeTypeCd节点");
+
+        String storeId = JSONObject.parseObject(responseEntity.getBody().toString()).getString("storeId");
+        String storeTypeCd = JSONObject.parseObject(responseEntity.getBody().toString()).getString("storeTypeCd");
+        //数据校验是否 商户是否入驻该小区
+        super.checkStoreEnterCommunity(pd, storeId, storeTypeCd, communityId, restTemplate);
+        paramIn.put("userId", pd.getUserId());
+        paramIn.put("storeId", storeId);
+        responseEntity = this.callCenterService(restTemplate, pd, paramIn.toJSONString(),
+                ServiceConstant.SERVICE_API_URL + "/api/parkingSpace.exitParkingSpace",
+                HttpMethod.POST);
+
+        return responseEntity;
+    }
+
+    /**
+     * 数据合规性校验
+     * @param pd 页面数据封装
+     */
+    private void validateExitParkingSpace(IPageData pd) {
+
+        Assert.jsonObjectHaveKey(pd.getReqData(), "communityId", "请求报文中未包含communityId节点");
+        Assert.jsonObjectHaveKey(pd.getReqData(), "ownerId", "请求报文中未包含ownerId节点");
+        Assert.jsonObjectHaveKey(pd.getReqData(), "psId", "请求报文中未包含psId节点");
+
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+        Assert.hasLength(paramIn.getString("communityId"), "小区ID不能为空");
+        Assert.hasLength(paramIn.getString("ownerId"), "ownerId不能为空");
+        Assert.hasLength(paramIn.getString("psId"), "psId不能为空");
+    }
+
+
     /**
      * 删除小区楼 校验
      *
@@ -233,6 +308,21 @@ public class PackingSpaceServiceSMOImpl extends BaseComponentSMO implements IPar
 
     }
 
+    /**
+     * 校验查询小区楼信息
+     *
+     * @param pd 页面封装对象
+     */
+    private void validateListParkingSpaceByOwner(IPageData pd) {
+        Assert.jsonObjectHaveKey(pd.getReqData(), "communityId", "请求报文中未包含communityId节点");
+        Assert.jsonObjectHaveKey(pd.getReqData(), "ownerId", "请求报文中未包含ownerId节点");
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+        Assert.hasLength(paramIn.getString("communityId"), "小区ID不能为空");
+        Assert.hasLength(paramIn.getString("ownerId"), "业主ID不能为空");
+
+
+    }
+
 
 
     public RestTemplate getRestTemplate() {

+ 19 - 0
WebService/src/main/resources/components/owner-exit-parkingSpace/ownerExitParkingSpace.html

@@ -0,0 +1,19 @@
+<div class="modal fade" id="exitParkingSpaceModel" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="exampleModalLabel">请确认您的操作!</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <tr align="center"><th>确认是否退车位,退车位后可以再次售卖或出租</th></tr>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal" >点错了</button>
+                <button type="button" class="btn btn-primary" v-on:click="doOwnerExitParkingSpace()">确认退出</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 44 - 0
WebService/src/main/resources/components/owner-exit-parkingSpace/ownerExitParkingSpace.js

@@ -0,0 +1,44 @@
+(function(vc){
+    vc.extends({
+        data:{
+            exitParkingSpaceInfo:{}
+        },
+        _initEvent:function(){
+             vc.on('ownerExitParkingSpace','openExitParkingSpaceModel',function(_parkingSpaceInfo){
+                    vc.component.exitParkingSpaceInfo = _parkingSpaceInfo;
+                    $('#exitParkingSpaceModel').modal('show');
+                });
+        },
+        methods:{
+            closeExitParkingSpaceModel:function(){
+                $('#exitParkingSpaceModel').modal('hide');
+            },
+            doOwnerExitParkingSpace:function(){
+
+                vc.component.exitParkingSpaceInfo.communityId = vc.getCurrentCommunity().communityId;
+                vc.http.post(
+                    'ownerExitParkingSpace',
+                    'exit',
+                    JSON.stringify(vc.component.exitParkingSpaceInfo),
+                    {
+                        emulateJSON:true
+                     },
+                     function(json,res){
+                        //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
+                        if(res.status == 200){
+                            //关闭model
+                            $('#exitParkingSpaceModel').modal('hide');
+                            vc.emit('showOwnerParkingSpace','notify',vc.component.exitParkingSpaceInfo);
+                            return ;
+                        }
+                        vc.message(json);
+                     },
+                     function(errInfo,error){
+                        console.log('请求失败处理');
+
+                        vc.message(errInfo);
+                     });
+            }
+        }
+    });
+})(window.vc);

+ 10 - 0
WebService/src/main/resources/components/owner-parking-space/ownerParkingSpace.html

@@ -0,0 +1,10 @@
+<div id="component" class="wrapper wrapper-content animated fadeInRight ecommerce">
+    <vc:create name="sellRoomSelectOwner"
+               callBackComponent = "showOwnerParkingSpace"
+    ></vc:create>
+
+    <vc:create name="showOwnerParkingSpace"
+    ></vc:create>
+
+
+</div>

+ 19 - 0
WebService/src/main/resources/components/owner-parking-space/ownerParkingSpace.js

@@ -0,0 +1,19 @@
+/**
+    入驻小区
+**/
+(function(vc){
+    vc.extends({
+        data:{
+
+        },
+        _initMethod:function(){
+            //根据请求参数查询 查询 业主信息
+        },
+        _initEvent:function(){
+
+        },
+        methods:{
+
+        }
+    });
+})(window.vc);

+ 1 - 1
WebService/src/main/resources/components/sell-car/sellCar.js

@@ -128,7 +128,7 @@
                         //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
                         if(res.status == 200){
                             //关闭model
-                            vc.jumpToPage("/flow/ownerCarFlow?" + vc.objToGetParam(vc.component.sellCarInfo.ownerInfo));
+                            vc.jumpToPage("/flow/ownerParkingSpaceFlow?" + vc.objToGetParam(vc.component.sellCarInfo.ownerInfo));
                             return ;
                         }
                         vc.message(json);

+ 80 - 0
WebService/src/main/resources/components/show-owner-parkingSpaces/showOwnerParkingSpace.html

@@ -0,0 +1,80 @@
+<div class="row" v-for=" parkingSpaceInfo in showOwnerParkingSpaceInfo.parkingSpaces">
+    <div class="col-lg-12">
+        <div class="ibox ">
+            <div class="ibox-title">
+                <h5>{{parkingSpaceInfo.num}}车位信息</h5>
+                <div class="ibox-tools" style="top:10px;">
+                    <button type="button" class="btn btn-primary btn-sm" v-on:click="ownerExitParkingSpaceModel(parkingSpaceInfo.psId)">
+                        <i class="glyphicon glyphicon-remove"></i> 我要退货</button>
+                </div>
+            </div>
+            <div class="ibox-content">
+                <div class="row">
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label" >车位ID:</label>
+                            <label class="">{{parkingSpaceInfo.psId}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label">车位编号:</label>
+                            <label class="">{{parkingSpaceInfo.num}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label" >车位类型:</label>
+                            <label class="">{{parkingSpaceInfo.typeCd}}</label>
+                        </div>
+                    </div>
+
+                </div>
+
+                <div class="row">
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label" >车位状态:</label>
+                            <label class="">{{parkingSpaceInfo.state}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label">车位面积:</label>
+                            <label class="">{{parkingSpaceInfo.area}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label" >车辆ID:</label>
+                            <label class="">{{parkingSpaceInfo.carId}}</label>
+                        </div>
+                    </div>
+
+                </div>
+                <div class="row">
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label" >车牌号:</label>
+                            <label class="">{{parkingSpaceInfo.carNum}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label">车品牌:</label>
+                            <label class="">{{parkingSpaceInfo.carBrand}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label" >车类型:</label>
+                            <label class="">{{parkingSpaceInfo.carType}}</label>
+                        </div>
+                    </div>
+
+                </div>
+            </div>
+        </div>
+    </div>
+    <vc:create name="ownerExitParkingSpace"></vc:create>
+</div>

+ 72 - 0
WebService/src/main/resources/components/show-owner-parkingSpaces/showOwnerParkingSpace.js

@@ -0,0 +1,72 @@
+/**
+    权限组
+**/
+(function(vc){
+
+    vc.extends({
+        data:{
+            showOwnerParkingSpaceInfo:{
+                ownerId:'',
+                parkingSpaces:[]
+            }
+        },
+        _initMethod:function(){
+
+        },
+        _initEvent:function(){
+            vc.on('showOwnerParkingSpace','notify',function(_owner){
+                vc.component.showOwnerParkingSpaceInfo.ownerId = _owner.ownerId;
+
+                //查询 根据业主查询房屋信息
+                vc.component.loadParkingSpaces();
+            });
+
+        },
+        methods:{
+
+            loadParkingSpaces:function(){
+                var param = {
+                    params:{
+                        communityId:vc.getCurrentCommunity().communityId,
+                        ownerId:vc.component.showOwnerParkingSpaceInfo.ownerId
+                    }
+                };
+
+                //发送get请求
+                vc.http.get('showOwnerParkingSpace',
+                            'list',
+                             param,
+                             function(json){
+                                var _parkingSpaceInfo = JSON.parse(json);
+                                vc.component.showOwnerParkingSpaceInfo.parkingSpaces = _parkingSpaceInfo.parkingSpaces;
+                             },function(){
+                                console.log('请求失败处理');
+                             }
+                           );
+            },
+
+            ownerExitParkingSpaceModel:function(_psId){
+                vc.emit('ownerExitParkingSpace','openExitParkingSpaceModel',{
+                    ownerId:vc.component.showOwnerParkingSpaceInfo.ownerId,
+                    psId:_psId
+                });
+            },
+
+            showState:function(_state){
+                if(_state == '2001'){
+                    return "房屋已售";
+                }else if(_state == '2002'){
+                    return "房屋未售";
+                }else if(_state == '2003'){
+                    return "已交定金";
+                }
+                else if(_state == '2004'){
+                    return "已出租";
+                }else{
+                    return "未知";
+                }
+            }
+        }
+    });
+
+})(window.vc);

+ 33 - 0
WebService/src/main/resources/views/ownerParkingSpaceFlow.html

@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en"
+      xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:th="http://www.thymeleaf.org"
+      xmlns:vc="http://www.thymeleaf.org">
+<head>
+    <meta charset="UTF-8"/>
+    <title>业主停车位|java110</title>
+    <vc:create name="commonTop"></vc:create>
+</head>
+<body>
+<vc:create name="bodyTop"></vc:create>
+<div id="wrapper">
+    <vc:create name="menu"></vc:create>
+
+
+    <div id="page-wrapper" class="gray-bg dashbard-1">
+        <div class="row border-bottom">
+            <vc:create name="nav"></vc:create>
+        </div>
+        <!-- id="component" -->
+        <div class="wrapper wrapper-content animated fadeInRight">
+            <vc:create name="ownerParkingSpace"></vc:create>
+        </div>
+
+        <vc:create name="copyright"></vc:create>
+
+    </div>
+</div>
+
+<vc:create name="commonBottom"></vc:create>
+</body>
+</html>

+ 38 - 0
java110-bean/src/main/java/com/java110/vo/api/ApiParkingSpaceDataVo.java

@@ -28,6 +28,12 @@ public class ApiParkingSpaceDataVo extends Vo {
 
     private String createTime;
 
+    private String carId;
+    private String carNum;
+
+    private String carBrand;
+    private String carType;
+
     public String getArea() {
         return area;
     }
@@ -107,4 +113,36 @@ public class ApiParkingSpaceDataVo extends Vo {
     public void setCreateTime(String createTime) {
         this.createTime = createTime;
     }
+
+    public String getCarId() {
+        return carId;
+    }
+
+    public void setCarId(String carId) {
+        this.carId = carId;
+    }
+
+    public String getCarNum() {
+        return carNum;
+    }
+
+    public void setCarNum(String carNum) {
+        this.carNum = carNum;
+    }
+
+    public String getCarBrand() {
+        return carBrand;
+    }
+
+    public void setCarBrand(String carBrand) {
+        this.carBrand = carBrand;
+    }
+
+    public String getCarType() {
+        return carType;
+    }
+
+    public void setCarType(String carType) {
+        this.carType = carType;
+    }
 }

+ 5 - 0
java110-common/src/main/java/com/java110/common/constant/PrivilegeCodeConstant.java

@@ -42,6 +42,11 @@ public final class PrivilegeCodeConstant {
 
     //物业停车位权限
     public static final String PRIVILEGE_PARKING_SPACE = "500201906017";
+
+    //业主停车位
+    public static final String PRIVILEGE_PARKING_SPACE_FOR_OWNER = "500201906020";
+
+
     //车位出售
     public static final String PRIVILEGE_CAR = "500201906019";
 }

+ 9 - 0
java110-common/src/main/java/com/java110/common/constant/ServiceCodeConstant.java

@@ -448,6 +448,10 @@ public class ServiceCodeConstant {
     public static final String SERVICE_CODE_QUERY_PARKING_SPACE = "parkingSpace.queryParkingSpaces";
 
 
+    //查询停车位
+    public static final String SERVICE_CODE_QUERY_PARKING_SPACE_BY_OWNER = "parkingSpace.queryParkingSpacesByOwner";
+
+
     // 保存停车位信息
     public static final String SERVICE_CODE_SAVE_PARKING_SPACE = "parkingSpace.saveParkingSpace";
 
@@ -461,4 +465,9 @@ public class ServiceCodeConstant {
     // 保存停车位信息
     public static final String SERVICE_CODE_SELL_PARKING_SPACE = "parkingSpace.sellParkingSpace";
 
+
+
+    // 保存停车位信息
+    public static final String SERVICE_CODE_EXIT_PARKING_SPACE = "parkingSpace.exitParkingSpace";
+
 }