Просмотр исходного кода

停车费缴费 开发完成待测试

wuxw лет назад: 6
Родитель
Сommit
7be4c554d5
20 измененных файлов с 821 добавлено и 72 удалено
  1. 160 0
      Api/src/main/java/com/java110/api/listener/fee/QueryFeeByParkingSpaceListener.java
  2. 0 27
      Api/src/main/java/com/java110/api/listener/fee/QueryFeeListener.java
  3. 19 0
      Api/src/main/java/com/java110/api/listener/parkingSpace/QueryParkingSpacesListener.java
  4. 35 0
      WebService/src/main/java/com/java110/web/components/fee/ViewMainParkingSpaceFeeComponent.java
  5. 9 0
      WebService/src/main/java/com/java110/web/smo/IFeeServiceSMO.java
  6. 45 0
      WebService/src/main/java/com/java110/web/smo/impl/FeeServiceSMOImpl.java
  7. 88 0
      WebService/src/main/resources/components/parkingSpace-fee/parkingSpaceFee.html
  8. 82 0
      WebService/src/main/resources/components/parkingSpace-fee/parkingSpaceFee.js
  9. 5 0
      WebService/src/main/resources/components/property-fee/propertyFee.js
  10. 3 1
      WebService/src/main/resources/components/search-parkingSpace/searchParkingSpace.html
  11. 5 2
      WebService/src/main/resources/components/search-parkingSpace/searchParkingSpace.js
  12. 87 0
      WebService/src/main/resources/components/view-main-parkingSpace-fee/viewMainParkingSpaceFee.html
  13. 81 0
      WebService/src/main/resources/components/view-main-parkingSpace-fee/viewMainParkingSpaceFee.js
  14. 34 0
      WebService/src/main/resources/views/parkingSpaceFeeFlow.html
  15. 5 36
      java110-bean/src/main/java/com/java110/vo/api/ApiFeeVo.java
  16. 55 0
      java110-bean/src/main/java/com/java110/vo/api/ApiMainFeeVo.java
  17. 71 0
      java110-bean/src/main/java/com/java110/vo/api/ApiParkingSpaceFeeVo.java
  18. 3 2
      java110-common/src/main/java/com/java110/common/constant/ServiceCodeConstant.java
  19. 16 0
      java110-common/src/main/java/com/java110/common/util/Assert.java
  20. 18 4
      java110-db/src/main/resources/mapper/parkingSpace/ParkingSpaceServiceDaoImplMapper.xml

+ 160 - 0
Api/src/main/java/com/java110/api/listener/fee/QueryFeeByParkingSpaceListener.java

@@ -0,0 +1,160 @@
+package com.java110.api.listener.fee;
+
+
+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.fee.IFeeInnerServiceSMO;
+import com.java110.core.smo.floor.IFloorInnerServiceSMO;
+import com.java110.core.smo.owner.IOwnerCarInnerServiceSMO;
+import com.java110.core.smo.owner.IOwnerInnerServiceSMO;
+import com.java110.core.smo.owner.IOwnerRoomRelInnerServiceSMO;
+import com.java110.core.smo.parkingSpace.IParkingSpaceInnerServiceSMO;
+import com.java110.core.smo.room.IRoomInnerServiceSMO;
+import com.java110.core.smo.unit.IUnitInnerServiceSMO;
+import com.java110.dto.FeeDto;
+import com.java110.dto.OwnerCarDto;
+import com.java110.dto.OwnerDto;
+import com.java110.dto.OwnerRoomRelDto;
+import com.java110.dto.ParkingSpaceDto;
+import com.java110.dto.RoomDto;
+import com.java110.event.service.api.ServiceDataFlowEvent;
+import com.java110.vo.api.ApiFeeVo;
+import com.java110.vo.api.ApiParkingSpaceFeeVo;
+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.List;
+
+/**
+ * @ClassName FloorDto
+ * @Description 小区楼数据层侦听类
+ * @Author wuxw
+ * @Date 2019/4/24 8:52
+ * @Version 1.0
+ * add by wuxw 2019/4/24
+ **/
+@Java110Listener("queryFeeByParkingSpace")
+public class QueryFeeByParkingSpaceListener extends AbstractServiceApiDataFlowListener {
+
+    @Autowired
+    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+    @Autowired
+    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
+
+
+    @Autowired
+    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeConstant.SERVICE_CODE_QUERY_FEE_BY_PARKING_SPACE;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return HttpMethod.GET;
+    }
+
+    /**
+     * 业务层数据处理
+     *
+     * @param event 时间对象
+     */
+    @Override
+    public void soService(ServiceDataFlowEvent event) {
+        DataFlowContext dataFlowContext = event.getDataFlowContext();
+        //获取请求数据
+        JSONObject reqJson = dataFlowContext.getReqJson();
+        validateFeeData(reqJson);
+        FeeDto feeDtoParamIn = BeanConvertUtil.covertBean(reqJson, FeeDto.class);
+        feeDtoParamIn.setPayerObjId(reqJson.getString("psId"));
+
+        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDtoParamIn);
+        ResponseEntity<String> responseEntity = null;
+        if (feeDtos == null || feeDtos.size() == 0) {
+            responseEntity = new ResponseEntity<String>("{}", HttpStatus.OK);
+        }
+
+        FeeDto feeDto = feeDtos.get(0);
+
+        ApiParkingSpaceFeeVo apiFeeVo = BeanConvertUtil.covertBean(feeDto, ApiParkingSpaceFeeVo.class);
+
+        //停车位信息
+        ParkingSpaceDto parkingSpaceDto = BeanConvertUtil.covertBean(reqJson, ParkingSpaceDto.class);
+        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
+
+        Assert.listOnlyOne(parkingSpaceDtos, "未查询到或查询多条 车位信息");
+
+        parkingSpaceDto = parkingSpaceDtos.get(0);
+
+        BeanConvertUtil.covertBean(parkingSpaceDto, apiFeeVo);
+
+        //查询车辆信息
+        OwnerCarDto  ownerCarDto = BeanConvertUtil.covertBean(feeDto, OwnerCarDto.class);
+
+        List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+        Assert.listOnlyOne(ownerCarDtos, "未查询到或查询多条 车辆信息");
+        ownerCarDto = ownerCarDtos.get(0);
+
+        BeanConvertUtil.covertBean(ownerCarDto, apiFeeVo);
+
+
+        responseEntity = new ResponseEntity<String>(JSONObject.toJSONString(apiFeeVo), HttpStatus.OK);
+
+
+        dataFlowContext.setResponseEntity(responseEntity);
+    }
+
+    /**
+     * 校验查询条件是否满足条件
+     *
+     * @param reqJson 包含查询条件
+     */
+    private void validateFeeData(JSONObject reqJson) {
+        Assert.jsonObjectHaveKey(reqJson, "communityId", "请求中未包含communityId信息");
+        Assert.jsonObjectHaveKey(reqJson, "psId", "请求中未包含psId信息");
+
+
+    }
+
+    @Override
+    public int getOrder() {
+        return super.DEFAULT_ORDER;
+    }
+
+    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;
+    }
+
+
+    public IOwnerCarInnerServiceSMO getOwnerCarInnerServiceSMOImpl() {
+        return ownerCarInnerServiceSMOImpl;
+    }
+
+    public void setOwnerCarInnerServiceSMOImpl(IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl) {
+        this.ownerCarInnerServiceSMOImpl = ownerCarInnerServiceSMOImpl;
+    }
+}

+ 0 - 27
Api/src/main/java/com/java110/api/listener/fee/QueryFeeListener.java

@@ -115,33 +115,6 @@ public class QueryFeeListener extends AbstractServiceApiDataFlowListener {
         apiFeeVo.setRoomNum(roomDto.getRoomNum());*/
         apiFeeVo = BeanConvertUtil.covertBean(roomDto,apiFeeVo);
 
-        //查询单元信息
-        /*UnitDto unitDto = new UnitDto();
-        unitDto.setUnitId(roomDto.getUnitId());
-        List<UnitDto> unitDtos = unitInnerServiceSMOImpl.queryUnits(unitDto);
-
-        if (unitDtos == null || unitDtos.size() != 1) {
-            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "数据错误,未找到单元信息 unitId" + roomDto.getUnitId());
-        }
-
-        unitDto = unitDtos.get(0);
-
-        apiFeeVo.setUnitId(unitDto.getUnitId());
-        apiFeeVo.setUnitNum(unitDto.getUnitNum());*/
-
-       /* //查询 小区楼信息
-        FloorDto floorDto = new FloorDto();
-        floorDto.setFloorId(unitDto.getFloorId());
-        List<FloorDto> floorDtos = floorInnerServiceSMOImpl.queryFloors(floorDto);
-
-        if (floorDtos == null || floorDtos.size() != 1) {
-            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "数据错误,未找到小区楼信息 floorId" + unitDto.getFloorId());
-        }
-
-        floorDto = floorDtos.get(0);
-        apiFeeVo.setFloorNum(floorDto.getFloorNum());
-        apiFeeVo.setFloorId(floorDto.getFloorId());*/
-
         // 业主信息
         OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
         ownerRoomRelDto.setRoomId(roomDto.getRoomId());

+ 19 - 0
Api/src/main/java/com/java110/api/listener/parkingSpace/QueryParkingSpacesListener.java

@@ -56,6 +56,8 @@ public class QueryParkingSpacesListener extends AbstractServiceApiDataFlowListen
         JSONObject reqJson = dataFlowContext.getReqJson();
         validateParkingSpaceData(reqJson);
 
+        refreshReqJson(reqJson);
+
 
         int row = reqJson.getInteger("row");
 
@@ -75,6 +77,23 @@ public class QueryParkingSpacesListener extends AbstractServiceApiDataFlowListen
         dataFlowContext.setResponseEntity(responseEntity);
     }
 
+    /**
+     * 请求数据处理
+     *
+     * @param reqJson 请求数据对象
+     */
+    private void refreshReqJson(JSONObject reqJson) {
+
+        if (!reqJson.containsKey("state")) {
+            return;
+        }
+
+        if("SH".equals(reqJson.getString("state"))){
+            reqJson.put("states", new String[] {"S","H"});
+            reqJson.remove("state");
+        }
+    }
+
 
     /**
      * 校验查询条件是否满足条件

+ 35 - 0
WebService/src/main/java/com/java110/web/components/fee/ViewMainParkingSpaceFeeComponent.java

@@ -0,0 +1,35 @@
+package com.java110.web.components.fee;
+
+import com.java110.core.context.IPageData;
+import com.java110.web.smo.IFeeServiceSMO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * @ClassName ViewPropertyFeeConfigComponent
+ * @Description 查询主费用信息
+ * @Author wuxw
+ * @Date 2019/6/1 14:33
+ * @Version 1.0
+ * add by wuxw 2019/6/1
+ **/
+@Component("viewMainParkingSpaceFee")
+public class ViewMainParkingSpaceFeeComponent {
+
+    @Autowired
+    private IFeeServiceSMO feeServiceSMOImpl;
+
+    public ResponseEntity<String> getFee(IPageData pd) {
+        return feeServiceSMOImpl.loadFeeByPsId(pd);
+    }
+
+
+    public IFeeServiceSMO getFeeServiceSMOImpl() {
+        return feeServiceSMOImpl;
+    }
+
+    public void setFeeServiceSMOImpl(IFeeServiceSMO feeServiceSMOImpl) {
+        this.feeServiceSMOImpl = feeServiceSMOImpl;
+    }
+}

+ 9 - 0
WebService/src/main/java/com/java110/web/smo/IFeeServiceSMO.java

@@ -42,6 +42,15 @@ public interface IFeeServiceSMO {
      */
     ResponseEntity<String> loadFeeByRoomId(IPageData pd);
 
+
+    /**
+     * 查询主费用
+     *
+     * @param pd 页面数据封装对象
+     * @return 返回 ResponseEntity对象包含 http状态 信息 body信息
+     */
+    ResponseEntity<String> loadFeeByPsId(IPageData pd);
+
     /**
      * 查询费用明细
      *

+ 45 - 0
WebService/src/main/java/com/java110/web/smo/impl/FeeServiceSMOImpl.java

@@ -181,6 +181,39 @@ public class FeeServiceSMOImpl extends BaseComponentSMO implements IFeeServiceSM
         return responseEntity;
     }
 
+
+    /**
+     * 查询主费用
+     *
+     * @param pd 页面数据封装对象
+     * @return
+     */
+    @Override
+    public ResponseEntity<String> loadFeeByPsId(IPageData pd) {
+        validateLoadParkingSpaceFee(pd);
+
+        //校验员工是否有权限操作
+        super.checkUserHasPrivilege(pd, restTemplate, PrivilegeCodeConstant.PRIVILEGE_PARKING_SPACE);
+
+        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);
+        responseEntity = this.callCenterService(restTemplate, pd, "",
+                ServiceConstant.SERVICE_API_URL + "/api/fee.queryFeeByParkingSpace" + mapToUrlParam(paramIn),
+                HttpMethod.GET);
+        return responseEntity;
+    }
+
     @Override
     public ResponseEntity<String> loadFeeDetail(IPageData pd) {
         validateLoadFeeDetail(pd);
@@ -296,6 +329,18 @@ public class FeeServiceSMOImpl extends BaseComponentSMO implements IFeeServiceSM
         Assert.hasLength(paramIn.getString("feeTypeCd"), "费用类型不能为空");
     }
 
+
+    private void validateLoadParkingSpaceFee(IPageData pd) {
+        Assert.jsonObjectHaveKey(pd.getReqData(), "communityId", "请求报文中未包含communityId节点");
+        Assert.jsonObjectHaveKey(pd.getReqData(), "psId", "请求报文中未包含psId节点");
+
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+        Assert.hasLength(paramIn.getString("communityId"), "小区ID不能为空");
+        Assert.hasLength(paramIn.getString("psId"), "停车位ID不能为空");
+    }
+
+
+
     /**
      * 校验缴费参数
      *

+ 88 - 0
WebService/src/main/resources/components/parkingSpace-fee/parkingSpaceFee.html

@@ -0,0 +1,88 @@
+<div id="component" class="wrapper wrapper-content animated fadeInRight ecommerce">
+    <vc:create name="viewMainParkingSpaceFee"
+               feeName="停车费"
+               payName="propertyPay"
+    ></vc:create>
+    <div class="row">
+        <div class="col-lg-12">
+            <div class="ibox">
+                <div class="ibox-title">
+                    <h5>缴费历史</h5>
+                </div>
+                <div class="ibox-content">
+
+                    <div class="row">
+                        <div class="col-sm-3 input-group">
+                            <input size="16" type="text" placeholder="请选择开始时间"   readonly class="form-control form-control-sm start_time">
+                        </div>
+                        <div class="col-sm-2">
+
+                        </div>
+                        <div class="col-sm-3 input-group">
+                            <input size="16" type="text" placeholder="请选择结束时间"  readonly class="form-control form-control-sm end_time">
+                        </div>
+
+                        <div class="col-sm-2">
+
+                        </div>
+
+                        <div class="col-sm-2">
+                            <button type="button" class="btn btn-primary btn-sm" v-on:click="queryFeeDetailMethod()">
+                                <i class="glyphicon glyphicon-search"></i> 马上查询</button>
+                        </div>
+
+                        </div>
+
+                    <table class="footable table table-stripped toggle-arrow-tiny" style="margin-top:10px" data-page-size="10">
+                        <thead>
+                        <tr>
+                            <th>缴费ID</th>
+                            <th data-hide="phone">周期</th>
+                            <th data-hide="phone">应收金额</th>
+                            <th data-hide="phone">实收金额</th>
+                            <th data-hide="phone">打折率</th>
+                            <th data-hide="phone" >备注</th>
+                            <th data-hide="phone">缴费时间</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr v-for="feeDetail in feeDetailInfo.feeDetails">
+                            <td>
+                                {{feeDetail.detailId}}
+                            </td>
+                            <td>
+                                {{feeDetail.cycles}} 月
+                            </td>
+                            <td>
+                                {{feeDetail.receivableAmount}} 元
+                            </td>
+                            <td>
+                                {{feeDetail.receivedAmount}} 元
+                            </td>
+                            <td>
+                                {{feeDetail.primeRate}}
+                            </td>
+                            <td>
+                                {{feeDetail.remark}}
+                            </td>
+                            <td>
+                                {{feeDetail.createTime}}
+                            </td>
+                        </tr>
+                        </tbody>
+                        <tfoot>
+                        <tr>
+                            <td colspan="7">
+                                <ul class="pagination float-right"></ul>
+                            </td>
+                        </tr>
+                        </tfoot>
+                    </table>
+                    <!-- 分页 -->
+                    <vc:create name="pagination"></vc:create>
+
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 82 - 0
WebService/src/main/resources/components/parkingSpace-fee/parkingSpaceFee.js

@@ -0,0 +1,82 @@
+/**
+    入驻小区
+**/
+(function(vc){
+    var DEFAULT_PAGE = 1;
+    var DEFAULT_ROW = 10;
+    vc.extends({
+        data:{
+            feeDetailInfo:{
+                feeDetails:[],
+                total:0,
+                records:1,
+                feeId:'',
+                startTime:'',
+                endTime:''
+            }
+        },
+        _initMethod:function(){
+            vc.component.initDate();
+        },
+        _initEvent:function(){
+            vc.on('propertyFee','listFeeDetail',function(_param){
+                  vc.component.feeDetailInfo.feeId = _param.feeId;
+                  vc.component.listFeeDetail(DEFAULT_PAGE,DEFAULT_ROW);
+            });
+
+            vc.on('pagination','page_event',function(_currentPage){
+                vc.component.listRoom(_currentPage,DEFAULT_ROW);
+            });
+        },
+        methods:{
+            initDate:function(){
+                $(".start_time").datetimepicker({format: 'yyyy-mm-dd', language: 'zh-CN',minView: "day"});
+                $(".end_time").datetimepicker({format: 'yyyy-mm-dd', language: 'zh-CN',minView: "hour"});
+                $('.start_time').datetimepicker()
+                          .on('changeDate', function (ev) {
+                            var value = $(".start_time").val();
+                            vc.component.feeDetailInfo.startTime = value ;
+                          });
+                $('.end_time').datetimepicker()
+                              .on('changeDate', function (ev) {
+                                var value = $(".end_time").val();
+                                vc.component.feeDetailInfo.endTime = value ;
+                              });
+            },
+            listFeeDetail:function(_page,_row){
+                var param = {
+                    params:{
+                        page:_page,
+                        row:_row,
+                        communityId:vc.getCurrentCommunity().communityId,
+                        feeId:vc.component.feeDetailInfo.feeId,
+                        startTime:vc.component.feeDetailInfo.startTime,
+                        endTime:vc.component.feeDetailInfo.endTime
+                    }
+                }
+               //发送get请求
+               vc.http.get('propertyFee',
+                            'listFeeDetail',
+                             param,
+                             function(json,res){
+                                var listFeeDetailData =JSON.parse(json);
+
+                                vc.component.feeDetailInfo.total = listFeeDetailData.total;
+                                vc.component.feeDetailInfo.records = listFeeDetailData.records;
+                                vc.component.feeDetailInfo.feeDetails = listFeeDetailData.feeDetails;
+
+                                vc.emit('pagination','init',{
+                                    total:vc.component.feeDetailInfo.records,
+                                    currentPage:_page
+                                });
+                             },function(errInfo,error){
+                                console.log('请求失败处理');
+                             }
+                           );
+            },
+            queryFeeDetailMethod:function(){
+                vc.component.listFeeDetail(DEFAULT_PAGE,DEFAULT_ROW);
+            }
+        }
+    });
+})(window.vc);

+ 5 - 0
WebService/src/main/resources/components/property-fee/propertyFee.js

@@ -24,6 +24,11 @@
                   vc.component.listFeeDetail(DEFAULT_PAGE,DEFAULT_ROW);
             });
 
+            vc.on('propertyFee','listParkingSpaceData',function(_param){
+                  vc.component.feeDetailInfo.feeId = _param.feeId;
+                  vc.component.listFeeDetail(DEFAULT_PAGE,DEFAULT_ROW);
+            });
+
             vc.on('pagination','page_event',function(_currentPage){
                 vc.component.listRoom(_currentPage,DEFAULT_ROW);
             });

+ 3 - 1
WebService/src/main/resources/components/search-parkingSpace/searchParkingSpace.html

@@ -14,7 +14,9 @@
                             <div class="row">
 
                                 <div class="col-sm-6 m-b-xs">
-
+                                    <div class="input-group" v-if="searchParkingSpaceInfo.psFlag == 'SH'">
+                                        <input placeholder="输入车牌号" type="text" v-model="searchParkingSpaceInfo.carNum" class="form-control form-control-sm">
+                                    </div>
                                 </div>
                                 <div class="col-sm-6">
                                     <div class="input-group">

+ 5 - 2
WebService/src/main/resources/components/search-parkingSpace/searchParkingSpace.js

@@ -3,14 +3,16 @@
         propTypes: {
            emitChooseParkingSpace:vc.propTypes.string,
            emitLoadData:vc.propTypes.string,
-           parkingSpaceFlag:vc.propTypes.string // 如果 S 表示查询售卖停车位 H 出租停车位 F 表示查询未售卖未出租停车位
+           parkingSpaceFlag:vc.propTypes.string // 如果 S 表示查询售卖停车位 H 出租停车位 SH 查询出租和出售车位 F 表示查询未售卖未出租停车位
         },
         data:{
             searchParkingSpaceInfo:{
                 parkingSpaces:[],
                 total:0,
                 records:1,
-                num:''
+                num:'',
+                carNum:'',
+                psFlag:$props.parkingSpaceFlag
             }
         },
         _initMethod:function(){
@@ -33,6 +35,7 @@
                         row:_row,
                         communityId:vc.getCurrentCommunity().communityId,
                         num:vc.component.searchParkingSpaceInfo.num,
+                        carNum:vc.component.searchParkingSpaceInfo.carNum,
                         state:$props.parkingSpaceFlag
                     }
                 };

+ 87 - 0
WebService/src/main/resources/components/view-main-parkingSpace-fee/viewMainParkingSpaceFee.html

@@ -0,0 +1,87 @@
+<div class="row">
+    <div class="col-lg-12">
+        <div class="ibox ">
+            <div class="ibox-title">
+                <h5>{{mainParkingSpaceFeeInfo.feeName}}信息</h5>
+                <div class="ibox-tools" style="top:10px;">
+                    <button type="button" class="btn btn-primary btn-sm" v-on:click="openSearchRoomModel()">
+                        <i class="glyphicon glyphicon-search"></i> 选择停车位</button>
+                    <button type="button" class="btn btn-primary btn-sm"
+                            v-if="mainParkingSpaceFeeInfo.feeId != null && mainParkingSpaceFeeInfo.feeId != ''"
+                            style="margin-left:10px" v-on:click="openPayModel()">
+                        <i class="glyphicon glyphicon-plus" ></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="">{{mainParkingSpaceFeeInfo.feeId}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label">停车位编号:</label>
+                            <label class="">{{mainParkingSpaceFeeInfo.num}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label" >车位类型:</label>
+                            <label class="">{{mainParkingSpaceFeeInfo.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="">{{mainParkingSpaceFeeInfo.carNum}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label" >车品牌:</label>
+                            <label class="">{{mainParkingSpaceFeeInfo.carBrand}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label">车类型:</label>
+                            <label class="">{{mainParkingSpaceFeeInfo.carType}}</label>
+                        </div>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label" >费用开始时间:</label>
+                            <label class="">{{mainParkingSpaceFeeInfo.startTime}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group">
+                            <label class="col-form-label" >费用到期时间:</label>
+                            <label class="">{{mainParkingSpaceFeeInfo.endTime}}</label>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="form-group" v-if="mainParkingSpaceFeeInfo.amount != '-1.00'">
+                            <label class="col-form-label">费用金额:</label>
+                            <label class="">{{mainParkingSpaceFeeInfo.amount}}</label>
+                        </div>
+                    </div>
+                </div>
+
+            </div>
+        </div>
+    </div>
+    <vc:create name="searchParkingSpace"
+               emitChooseRoom="viewMainParkingSpaceFee"
+               emitLoadData="propertyFee"
+               parkingSpaceFlag="SH"
+    ></vc:create>
+    <vc:create name="propertyPay"></vc:create>
+</div>

+ 81 - 0
WebService/src/main/resources/components/view-main-parkingSpace-fee/viewMainParkingSpaceFee.js

@@ -0,0 +1,81 @@
+/**
+    权限组
+**/
+(function(vc){
+
+    vc.extends({
+        propTypes: {
+            feeName:vc.propTypes.string,
+            payName:vc.propTypes.string
+        },
+        data:{
+            mainParkingSpaceFeeInfo:{
+                feeName:$props.feeName,
+                feeId:"",
+                psId:"",
+                num:"",
+                typeCd:"",
+                carNum:"",
+                carBrand:"",
+                carType:"",
+                startTime:"",
+                endTime:"",
+                amount:"-1.00"
+            }
+        },
+        _initMethod:function(){
+
+        },
+        _initEvent:function(){
+            vc.on('viewMainParkingSpaceFee','chooseParkingSpace',function(_parkingSPace){
+                  vc.component.loadMainParkingSpaceFeeInfo(_parkingSPace);
+            });
+
+            vc.on('viewMainFee','reloadFee',function(_room){
+                if(vc.component.mainParkingSpaceFeeInfo.roomId != ''){
+                      vc.component.loadMainFeeInfo({
+                            roomId:vc.component.mainParkingSpaceFeeInfo.roomId
+                      });
+
+                }
+            });
+        },
+        methods:{
+
+            openSearchRoomModel:function(){
+                vc.emit('searchRoom','openSearchRoomModel',{});
+            },
+            openPayModel:function(){
+                vc.emit($props.payName,'openPayModel',{
+                    feeId:vc.component.mainParkingSpaceFeeInfo.feeId
+                });
+            },
+            loadMainParkingSpaceFeeInfo:function(_parkingSPace){
+                //vc.copyObject(_fee,vc.component.mainParkingSpaceFeeInfo);
+                var param = {
+                    params:{
+                        communityId:vc.getCurrentCommunity().communityId,
+                        psId:_parkingSPace.psId,
+                    }
+                };
+
+                //发送get请求
+               vc.http.get('viewMainParkingSpaceFee',
+                            'getFee',
+                             param,
+                             function(json,res){
+                               var _fee =JSON.parse(json);
+                               vc.copyObject(_fee,vc.component.mainParkingSpaceFeeInfo);
+                               vc.emit('propertyFee','listFeeDetail',{
+                                    feeId:_fee.feeId
+                               });
+                             },function(errInfo,error){
+                                console.log('请求失败处理');
+                             }
+                           );
+            }
+
+        }
+    });
+
+})(window.vc);

+ 34 - 0
WebService/src/main/resources/views/parkingSpaceFeeFlow.html

@@ -0,0 +1,34 @@
+<!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>
+    <link rel="stylesheet" href="/css/bootstrap/bootstrap-datetimepicker.min.css"/>
+</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="parkingSpaceFee"></vc:create>
+        </div>
+
+        <vc:create name="copyright"></vc:create>
+
+    </div>
+</div>
+<script src="/js/bootstrap/bootstrap-datetimepicker.min.js"></script>
+<vc:create name="commonBottom"></vc:create>
+</body>
+</html>

+ 5 - 36
java110-bean/src/main/java/com/java110/vo/api/ApiFeeVo.java

@@ -10,10 +10,10 @@ import com.java110.vo.Vo;
  * @Version 1.0
  * add by wuxw 2019/6/2
  **/
-public class ApiFeeVo extends Vo {
+public class ApiFeeVo extends ApiMainFeeVo {
+
 
 
-   private String feeId;
    private String floorNum;
    private String floorId;
    private String unitId;
@@ -23,20 +23,8 @@ public class ApiFeeVo extends Vo {
    private String ownerId;
    private String ownerName;
    private String link;
-   private String startTime;
-   private String endTime;
-   private String amount;
    private String builtUpArea;
 
-
-    public String getFeeId() {
-        return feeId;
-    }
-
-    public void setFeeId(String feeId) {
-        this.feeId = feeId;
-    }
-
     public String getFloorNum() {
         return floorNum;
     }
@@ -85,29 +73,7 @@ public class ApiFeeVo extends Vo {
         this.link = link;
     }
 
-    public String getStartTime() {
-        return startTime;
-    }
 
-    public void setStartTime(String startTime) {
-        this.startTime = startTime;
-    }
-
-    public String getEndTime() {
-        return endTime;
-    }
-
-    public void setEndTime(String endTime) {
-        this.endTime = endTime;
-    }
-
-    public String getAmount() {
-        return amount;
-    }
-
-    public void setAmount(String amount) {
-        this.amount = amount;
-    }
 
     public String getUnitId() {
         return unitId;
@@ -140,4 +106,7 @@ public class ApiFeeVo extends Vo {
     public void setBuiltUpArea(String builtUpArea) {
         this.builtUpArea = builtUpArea;
     }
+
+
+
 }

+ 55 - 0
java110-bean/src/main/java/com/java110/vo/api/ApiMainFeeVo.java

@@ -0,0 +1,55 @@
+package com.java110.vo.api;
+
+import com.java110.vo.Vo;
+
+/**
+ * @ClassName ApiMainFeeVo
+ * @Description TODO
+ * @Author wuxw
+ * @Date 2019/6/12 21:59
+ * @Version 1.0
+ * add by wuxw 2019/6/12
+ **/
+public class ApiMainFeeVo extends Vo {
+
+    private String feeId;
+
+    private String startTime;
+    private String endTime;
+    private String amount;
+
+    public String getFeeId() {
+        return feeId;
+    }
+
+    public void setFeeId(String feeId) {
+        this.feeId = feeId;
+    }
+
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+
+}

+ 71 - 0
java110-bean/src/main/java/com/java110/vo/api/ApiParkingSpaceFeeVo.java

@@ -0,0 +1,71 @@
+package com.java110.vo.api;
+
+/**
+ * @ClassName ApiFeeVo
+ * @Description TODO
+ * @Author wuxw
+ * @Date 2019/6/2 18:05
+ * @Version 1.0
+ * add by wuxw 2019/6/2
+ **/
+public class ApiParkingSpaceFeeVo extends ApiMainFeeVo {
+
+
+
+
+   private String psId;
+   private String num;
+   private String typeCd;
+   private String carNum;
+   private String carBrand;
+   private String carType;
+
+
+    public String getPsId() {
+        return psId;
+    }
+
+    public void setPsId(String psId) {
+        this.psId = psId;
+    }
+
+    public String getNum() {
+        return num;
+    }
+
+    public void setNum(String num) {
+        this.num = num;
+    }
+
+    public String getTypeCd() {
+        return typeCd;
+    }
+
+    public void setTypeCd(String typeCd) {
+        this.typeCd = typeCd;
+    }
+
+    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;
+    }
+}

+ 3 - 2
java110-common/src/main/java/com/java110/common/constant/ServiceCodeConstant.java

@@ -429,11 +429,12 @@ public class ServiceCodeConstant {
     public static final String SERVICE_CODE_QUERY_FEE_CONFIG = "fee.queryFeeConfig";
     public static final String SERVICE_CODE_QUERY_FEE_DETAIL = "fee.queryFeeDetail";
 
-
-
     //查询费用配置
     public static final String SERVICE_CODE_QUERY_FEE = "fee.queryFee";
 
+    //查询费用配置 根据停车位
+    public static final String SERVICE_CODE_QUERY_FEE_BY_PARKING_SPACE = "fee.queryFeeByParkingSpace";
+
     //保存费用配置
     public static final String SERVICE_CODE_SAVE_FEE_CONFIG = "fee.saveFeeConfig";
 

+ 16 - 0
java110-common/src/main/java/com/java110/common/util/Assert.java

@@ -111,6 +111,22 @@ public class Assert extends org.springframework.util.Assert {
         }
     }
 
+
+    /**
+     * 数组只有一条数据
+     *
+     * @param jsonArray
+     * @param message
+     */
+    public static void listOnlyOne(List jsonArray, String message) {
+
+        Assert.notNull(jsonArray, message);
+
+        if (jsonArray.size() != 1) {
+            throw new IllegalArgumentException(message);
+        }
+    }
+
     /**
      * 判断list 是否为空
      *

+ 18 - 4
java110-db/src/main/resources/mapper/parkingSpace/ParkingSpaceServiceDaoImplMapper.xml

@@ -39,7 +39,8 @@ where 1 =1
 </if> 
 <if test="state !=null and state != ''">
    and t.state= #{state}
-</if> 
+</if>
+
 <if test="communityId !=null and communityId != ''">
    and t.community_id= #{communityId}
 </if> 
@@ -119,7 +120,13 @@ where 1 =1
 </if> 
 <if test="state !=null and state != ''">
    and t.state= #{state}
-</if> 
+</if>
+<if test="states != null and states != null">
+    and t.state in
+    <foreach collection="states" item="item" open="(" close=")" separator=",">
+        #{item}
+    </foreach>
+</if>
 <if test="communityId !=null and communityId != ''">
    and t.community_id= #{communityId}
 </if> 
@@ -128,7 +135,8 @@ where 1 =1
 </if> 
 <if test="userId !=null and userId != ''">
    and t.user_id= #{userId}
-</if> 
+</if>
+
 <if test="page != -1 and page != null ">
    limit #{page}, #{row}
 </if> 
@@ -199,7 +207,13 @@ where 1 =1
 </if> 
 <if test="state !=null and state != ''">
    and t.state= #{state}
-</if> 
+</if>
+ <if test="states != null and states != null">
+     and t.state in
+     <foreach collection="states" item="item" open="(" close=")" separator=",">
+         #{item}
+     </foreach>
+ </if>
 <if test="communityId !=null and communityId != ''">
    and t.community_id= #{communityId}
 </if>