wuxw лет назад: 6
Родитель
Сommit
e80efd1556

+ 91 - 34
Api/src/main/java/com/java110/api/listener/parkingSpace/SellParkingSpaceListener.java

@@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
 import org.springframework.http.ResponseEntity;
+import org.springframework.util.StringUtils;
 
 import java.util.List;
 
@@ -83,6 +84,8 @@ public class SellParkingSpaceListener extends AbstractServiceApiDataFlowListener
 
         businesses.add(modifyParkingSpaceState(paramObj));
 
+        //计算 费用信息
+        computeFeeInfo(paramObj);
         //添加物业费用信息
         businesses.add(addParkingSpaceFee(paramObj, dataFlowContext));
 
@@ -154,7 +157,7 @@ public class SellParkingSpaceListener extends AbstractServiceApiDataFlowListener
         JSONObject businessParkingSpace = new JSONObject();
 
         businessParkingSpace.putAll(BeanConvertUtil.beanCovertMap(parkingSpaceDto));
-        businessParkingSpace.put("state", "S");
+        businessParkingSpace.put("state", this.isHireParkingSpace(paramInJson) ? "H" : "S");
         business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put("businessParkingSpace", businessParkingSpace);
 
         return business;
@@ -170,18 +173,7 @@ public class SellParkingSpaceListener extends AbstractServiceApiDataFlowListener
      */
     private JSONObject addParkingSpaceFee(JSONObject paramInJson, DataFlowContext dataFlowContext) {
 
-        //根据停车位ID查询是地上还是地下停车位
-        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
-        parkingSpaceDto.setPsId(paramInJson.getString("psId"));
-        parkingSpaceDto.setCommunityId(paramInJson.getString("communityId"));
-        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
-
-        if (parkingSpaceDtos == null || parkingSpaceDtos.size() != 1) {
-            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "未找到或找到多条车位信息");
-        }
 
-        parkingSpaceDto = parkingSpaceDtos.get(0);
-        paramInJson.put("parkingSpaceDto", parkingSpaceDto);
 
         JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
         business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_SAVE_FEE_INFO);
@@ -189,12 +181,11 @@ public class SellParkingSpaceListener extends AbstractServiceApiDataFlowListener
         business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
         JSONObject businessUnit = new JSONObject();
         businessUnit.put("feeId", paramInJson.getString("feeId"));
-        businessUnit.put("feeTypeCd", "1001".equals(parkingSpaceDto.getTypeCd())
-                ? FeeTypeConstant.FEE_TYPE_SELL_UP_PARKING_SPACE : FeeTypeConstant.FEE_TYPE_SELL_DOWN_PARKING_SPACE);
+        businessUnit.put("feeTypeCd", paramInJson.getString("feeTypeCd"));
         businessUnit.put("incomeObjId", paramInJson.getString("storeId"));
-        businessUnit.put("amount", "-1.00");
+        businessUnit.put("amount", paramInJson.getString("amount") );
         businessUnit.put("startTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
-        businessUnit.put("endTime", "2038-01-01 00:00:00");
+        businessUnit.put("endTime", paramInJson.getString("endTime"));
         businessUnit.put("communityId", paramInJson.getString("communityId"));
         businessUnit.put("payerObjId", paramInJson.getString("psId"));
         businessUnit.put("userId", dataFlowContext.getRequestCurrentHeaders().get(CommonConstant.HTTP_USER_ID));
@@ -221,24 +212,8 @@ public class SellParkingSpaceListener extends AbstractServiceApiDataFlowListener
         businessFeeDetail.putAll(paramInJson);
         businessFeeDetail.put("detailId", "-1");
         businessFeeDetail.put("primeRate", "1.00");
-        businessFeeDetail.put("cycles", "1");
-
-        ParkingSpaceDto parkingSpaceDto = (ParkingSpaceDto) paramInJson.get("parkingSpaceDto");
-        String feeTypeCd = "1001".equals(parkingSpaceDto.getTypeCd()) ? FeeTypeConstant.FEE_TYPE_SELL_UP_PARKING_SPACE
-                : FeeTypeConstant.FEE_TYPE_SELL_DOWN_PARKING_SPACE;
-        FeeConfigDto feeConfigDto = new FeeConfigDto();
-        feeConfigDto.setFeeTypeCd(feeTypeCd);
-        feeConfigDto.setCommunityId(paramInJson.getString("communityId"));
-        List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
-        if (feeConfigDtos == null || feeConfigDtos.size() != 1) {
-            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "未查到费用配置信息,查询多条数据");
-        }
-
-        feeConfigDto = feeConfigDtos.get(0);
-
-        double receivableAmount = Double.parseDouble(feeConfigDto.getAdditionalAmount());
-
-        businessFeeDetail.put("receivableAmount", receivableAmount);
+        businessFeeDetail.put("cycles", paramInJson.getString("cycles"));
+        businessFeeDetail.put("receivableAmount", paramInJson.getString("receivableAmount"));
         business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put("businessFeeDetail", businessFeeDetail);
 
         return business;
@@ -269,12 +244,94 @@ public class SellParkingSpaceListener extends AbstractServiceApiDataFlowListener
         Assert.jsonObjectHaveKey(paramIn, "storeId", "未包含storeId");
         Assert.jsonObjectHaveKey(paramIn, "storeId", "未包含storeId");
         Assert.jsonObjectHaveKey(paramIn, "receivedAmount", "未包含receivedAmount");
+        Assert.jsonObjectHaveKey(paramIn, "sellOrHire", "未包含sellOrHire");
 
         JSONObject paramInObj = JSONObject.parseObject(paramIn);
         Assert.hasLength(paramInObj.getString("communityId"), "小区ID不能为空");
         Assert.hasLength(paramInObj.getString("ownerId"), "ownerId不能为空");
         Assert.hasLength(paramInObj.getString("psId"), "psId不能为空");
         Assert.isMoney(paramInObj.getString("receivedAmount"), "不是有效的实收金额");
+
+        if(!"H".equals(paramInObj.getString("sellOrHire"))
+                && !"S".equals(paramInObj.getString("sellOrHire"))){
+            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "请求报文中sellOrFire值错误 ,出售为S 出租为H");
+        }
+    }
+
+    /**
+     * 校验 是否是车位出租
+     * @param paramObj
+     * @return
+     */
+    private boolean isHireParkingSpace(JSONObject paramObj){
+        if("H".equals(paramObj.getString("sellOrHire"))){
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 计算费用信息
+     * @param paramInJson 传入数据字段
+     */
+    private void computeFeeInfo(JSONObject paramInJson){
+
+        //根据停车位ID查询是地上还是地下停车位
+        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
+        parkingSpaceDto.setPsId(paramInJson.getString("psId"));
+        parkingSpaceDto.setCommunityId(paramInJson.getString("communityId"));
+        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
+
+        if (parkingSpaceDtos == null || parkingSpaceDtos.size() != 1) {
+            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "未找到或找到多条车位信息");
+        }
+
+        parkingSpaceDto = parkingSpaceDtos.get(0);
+        paramInJson.put("parkingSpaceDto", parkingSpaceDto);
+
+        // 计算feeTypeCd
+
+        String feeTypeCd = "1001".equals(parkingSpaceDto.getTypeCd())
+                ? (this.isHireParkingSpace(paramInJson)
+                        ? FeeTypeConstant.FEE_TYPE_HIRE_UP_PARKING_SPACE
+                        :FeeTypeConstant.FEE_TYPE_SELL_UP_PARKING_SPACE)
+                : (this.isHireParkingSpace(paramInJson)
+                        ? FeeTypeConstant.FEE_TYPE_HIRE_DOWN_PARKING_SPACE
+                        :FeeTypeConstant.FEE_TYPE_SELL_DOWN_PARKING_SPACE);
+
+        paramInJson.put("feeTypeCd", feeTypeCd);
+
+        //计算 receivableAmount
+
+
+        FeeConfigDto feeConfigDto = new FeeConfigDto();
+        feeConfigDto.setFeeTypeCd(feeTypeCd);
+        feeConfigDto.setCommunityId(paramInJson.getString("communityId"));
+        List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
+        if (feeConfigDtos == null || feeConfigDtos.size() != 1) {
+            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "未查到费用配置信息,查询多条数据");
+        }
+
+        feeConfigDto = feeConfigDtos.get(0);
+
+        double receivableAmount = isHireParkingSpace(paramInJson) ? Double.parseDouble(feeConfigDto.getAdditionalAmount())
+                * Double.parseDouble(paramInJson.getString("cycles")) : Double.parseDouble(feeConfigDto.getAdditionalAmount());
+
+        paramInJson.put("receivableAmount", receivableAmount);
+
+        //计算 amount
+        String amount = isHireParkingSpace(paramInJson) ? "-1.00" : String.valueOf(receivableAmount);
+        paramInJson.put("amount", amount);
+
+        //计算 cycles
+        String cycles = isHireParkingSpace(paramInJson) ? paramInJson.getString("cycles") : "1";
+        paramInJson.put("cycles", cycles);
+
+        //计算结束时间
+
+        String endTime = isHireParkingSpace(paramInJson) ? DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A) : "2038-01-01 00:00:00";
+        paramInJson.put("endTime", endTime);
+
     }
 
 

+ 65 - 0
WebService/src/main/java/com/java110/web/components/parkingSpace/HireParkingSpaceComponent.java

@@ -0,0 +1,65 @@
+package com.java110.web.components.parkingSpace;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.FeeTypeConstant;
+import com.java110.core.context.IPageData;
+import com.java110.web.smo.ICarServiceSMO;
+import com.java110.web.smo.IFeeServiceSMO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * 车辆管理
+ */
+@Component("hireParkingSpace")
+public class HireParkingSpaceComponent {
+
+    @Autowired
+    private ICarServiceSMO carServiceSMOImpl;
+
+
+    @Autowired
+    private IFeeServiceSMO feeServiceSMOImpl;
+
+    /**
+     * 查询小区楼信息
+     *
+     * @param pd 页面封装对象 包含页面请求数据
+     * @return ResponseEntity对象返回给页面
+     */
+    public ResponseEntity<String> sell(IPageData pd) {
+
+        return carServiceSMOImpl.saveCar(pd);
+    }
+
+    /**
+     * 查询出售费用配置
+     *
+     * @param pd 页面封装对象 包含页面请求数据
+     * @return ResponseEntity对象返回给页面
+     */
+    public ResponseEntity<String> loadSellParkingSpaceConfigData(IPageData pd) {
+        String paramIn = pd.getReqData();
+        JSONObject paramObj = JSONObject.parseObject(paramIn);
+        return feeServiceSMOImpl.loadPropertyConfigFee(pd, "1001".equals(paramObj.getString("typeCd"))
+                ? FeeTypeConstant.FEE_TYPE_SELL_UP_PARKING_SPACE : FeeTypeConstant.FEE_TYPE_SELL_DOWN_PARKING_SPACE);
+    }
+
+
+    public ICarServiceSMO getCarServiceSMOImpl() {
+        return carServiceSMOImpl;
+    }
+
+    public void setCarServiceSMOImpl(ICarServiceSMO carServiceSMOImpl) {
+        this.carServiceSMOImpl = carServiceSMOImpl;
+    }
+
+    public IFeeServiceSMO getFeeServiceSMOImpl() {
+        return feeServiceSMOImpl;
+    }
+
+    public void setFeeServiceSMOImpl(IFeeServiceSMO feeServiceSMOImpl) {
+        this.feeServiceSMOImpl = feeServiceSMOImpl;
+    }
+}

+ 11 - 0
WebService/src/main/java/com/java110/web/smo/impl/CarServiceSMOImpl.java

@@ -228,12 +228,23 @@ public class CarServiceSMOImpl extends BaseComponentSMO implements ICarServiceSM
         Assert.jsonObjectHaveKey(pd.getReqData(), "carColor", "未包含carColor");
         Assert.jsonObjectHaveKey(pd.getReqData(), "psId", "未包含psId");
         Assert.jsonObjectHaveKey(pd.getReqData(), "receivedAmount", "未包含receivedAmount");
+        Assert.jsonObjectHaveKey(pd.getReqData(), "sellOrHire", "未包含sellOrHire");
 
         JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
         Assert.hasLength(paramIn.getString("communityId"), "小区ID不能为空");
         Assert.hasLength(paramIn.getString("ownerId"), "ownerId不能为空");
         Assert.hasLength(paramIn.getString("psId"), "psId不能为空");
         Assert.hasLength(paramIn.getString("receivedAmount"), "receivedAmount不能为空");
+
+        if(!"H".equals(paramIn.getString("sellOrHire"))
+                && !"S".equals(paramIn.getString("sellOrHire"))){
+            throw new IllegalArgumentException("入参错误,无法识别该操作");
+        }
+
+        if("H".equals(paramIn.getString("sellOrHire"))){
+            Assert.jsonObjectHaveKey(pd.getReqData(), "cycles", "未包含cycles");
+            Assert.hasLength(paramIn.getString("cycles"), "cycles不能为空");
+        }
     }
 
     /**

+ 63 - 0
WebService/src/main/resources/components/hire-parking-space/hireParkingSpace.html

@@ -0,0 +1,63 @@
+<div id="component" class="wrapper wrapper-content animated fadeInRight ecommerce">
+
+    <vc:create name="addCar"></vc:create>
+
+    <!-- 选择 业主信息 -->
+    <vc:create name="sellRoomSelectOwner"
+               callBackComponent = "sellCar"
+    ></vc:create>
+
+    <!-- 选择停车位 -->
+    <vc:create name="viewSelectParkingSpace"
+               callBackComponent="hireParkingSpace"
+    ></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>
+                        <div>
+                            <div class="form-group row">
+                                <label class="col-sm-2 col-form-label">缴费周期</label>
+                                <div class="col-sm-10">
+                                    <select class="custom-select" v-model="hireParkingSpace.cycles">
+                                        <option selected  disabled value="">必填,请选择缴费周期</option>
+                                        <option value="1">1个月</option>
+                                        <option value="2">2个月</option>
+                                        <option value="3">3个月</option>
+                                        <option value="4">4个月</option>
+                                        <option value="5">5个月</option>
+                                        <option value="6">6个月</option>
+                                        <option value="12">一年</option>
+                                        <option value="24">两年</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="form-group row">
+                                <label class="col-sm-2 col-form-label">应收费用</label>
+                                <div class="col-sm-10">
+                                    <input v-model="hireParkingSpace.receivableAmount" type="text" disabled class="form-control">
+                                </div>
+                            </div>
+                            <div class="form-group row">
+                                <label class="col-sm-2 col-form-label">实收费用</label>
+                                <div class="col-sm-10">
+                                    <input v-model="hireParkingSpace.receivedAmount" type="text" placeholder="必填,请填写实际收取费用" class="form-control">
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="">
+        <button class="btn btn-primary float-right" type="button" v-on:click="doHireParkingSpace()" ><i class="fa fa-check"></i>&nbsp;我要出租</button>
+    </div>
+
+</div>

+ 209 - 0
WebService/src/main/resources/components/hire-parking-space/hireParkingSpace.js

@@ -0,0 +1,209 @@
+/**
+    入驻小区
+**/
+(function(vc){
+    vc.extends({
+        data:{
+            hireParkingSpace:{
+                ownerId:'',
+                carNum:'',
+                carBrand:'',
+                carType:'',
+                carColor:'',
+                carRemark:"",
+                cycles:"",
+                psId:'',
+                typeCd:'',
+                additionalAmount:'0.00',
+                receivableAmount: "0.00",
+                receivedAmount:"0.00",
+                sellOrHire:"H",
+                ownerInfo:{
+                    ownerId:"",
+                    name:"",
+                    age:"",
+                    sex:"",
+                    userName:"",
+                    remark:"",
+                    link:"",
+                },
+            }
+        },
+        _initMethod:function(){
+
+        },
+        watch:{
+                    "propertyPayInfo.cycles":{//深度监听,可监听到对象、数组的变化
+                        handler(val, oldVal){
+                            vc.component.computeReceivableAmount(val);
+                        },
+                        deep:true
+                    }
+        },
+        _initEvent:function(){
+            vc.on('sellCar','notify',function(_param){
+                  vc.copyObject(_param,vc.component.hireParkingSpace);
+                  vc.copyObject(_param,vc.component.hireParkingSpace.ownerInfo);
+
+
+                  if(_param.hasOwnProperty("typeCd")){
+                        vc.component._loadFireParkingSpaceFee();
+                  }
+
+            });
+        },
+        methods:{
+            sellCarValidate:function(){
+                        return vc.validate.validate({
+                            hireParkingSpace:vc.component.hireParkingSpace
+                        },{
+                            'hireParkingSpace.ownerId':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"未选择业主"
+                                }
+                            ],
+                            'hireParkingSpace.psId':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"未选择停车位"
+                                }
+                            ],
+                            'hireParkingSpace.carNum':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"车牌号不能为空"
+                                },
+                                {
+                                    limit:"maxin",
+                                    param:"2,12",
+                                    errInfo:"车牌号不正确"
+                                }
+                            ],
+                            'hireParkingSpace.carBrand':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"车品牌不能为空"
+                                },
+                                {
+                                    limit:"maxLength",
+                                    param:"50",
+                                    errInfo:"车品牌超出限制"
+                                }
+                            ],
+                            'hireParkingSpace.carType':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"车类型不能为空"
+                                }
+                            ],
+                            'hireParkingSpace.carColor':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"车颜色不能为空"
+                                },
+                                {
+                                    limit:"maxLength",
+                                    param:"12",
+                                    errInfo:"车颜色超出限制"
+                                }
+                            ],
+                            'hireParkingSpace.cycles':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"缴费周期不能为空"
+                                }
+                            ],
+                            'hireParkingSpace.receivedAmount':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"实收金额不能为空"
+                                },
+                                {
+                                    limit:"money",
+                                    param:"",
+                                    errInfo:"实收金额格式错误,如3.00"
+                                }
+                            ]
+                        });
+             },
+
+            doHireParkingSpace:function(){
+                //
+                if(!vc.component.sellCarValidate()){
+                    vc.message(vc.validate.errInfo);
+                    return ;
+                }
+                //改remark
+                vc.component.hireParkingSpace.remark = vc.component.hireParkingSpace.carRemark;
+
+                vc.component.hireParkingSpace.communityId=vc.getCurrentCommunity().communityId;
+            vc.http.post(
+                    'hireParkingSpace',
+                    'sell',
+                    JSON.stringify(vc.component.hireParkingSpace),
+                    {
+                        emulateJSON:true
+                     },
+                     function(json,res){
+                        //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
+                        if(res.status == 200){
+                            //关闭model
+                            vc.jumpToPage("/flow/ownerParkingSpaceFlow?" + vc.objToGetParam(vc.component.hireParkingSpace.ownerInfo));
+                            return ;
+                        }
+                        vc.message(json);
+                     },
+                     function(errInfo,error){
+                        console.log('请求失败处理');
+
+                        vc.message(errInfo);
+                     });
+
+            },
+            _loadFireParkingSpaceFee:function(){
+                //
+                var param = {
+                        params:{
+                            communityId:vc.getCurrentCommunity().communityId,
+                            typeCd:vc.component.hireParkingSpace.typeCd
+                        }
+                    };
+                    vc.http.get(
+                        'hireParkingSpace',
+                        'loadSellParkingSpaceConfigData',
+                         param,
+                         function(json,res){
+                            //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
+                            if(res.status == 200){
+                                //关闭model
+                                var configFee = JSON.parse(json);
+                                vc.component.hireParkingSpace.additionalAmount = configFee.additionalAmount;
+                                //重新算费
+                                vc.component.computeReceivableAmount(vc.component.hireParkingSpace.cycles);
+                                return ;
+                            }
+                            vc.message(json);
+                         },
+                         function(errInfo,error){
+                            console.log('请求失败处理');
+
+                            vc.message(errInfo);
+                         });
+
+            },
+            computeReceivableAmount:function(_cycles){
+                        vc.component.hireParkingSpace.receivableAmount = (parseFloat(vc.component.hireParkingSpace.additionalAmount) * parseFloat(_cycles)).toFixed(2);
+                        vc.component.hireParkingSpace.receivedAmount = vc.component.hireParkingSpace.receivableAmount;
+            }
+        }
+    });
+})(window.vc);

+ 0 - 1
WebService/src/main/resources/components/property-pay/propertyPay.js

@@ -119,7 +119,6 @@
                      },
                      function(errInfo,error){
                         console.log('请求失败处理');
-
                         vc.message(errInfo);
                      });
             },

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

@@ -15,6 +15,7 @@
                 typeCd:'',
                 receivableAmount: "0.00",
                 receivedAmount:"0.00",
+                sellOrHire:"S",
                 ownerInfo:{
                     ownerId:"",
                     name:"",