Browse Source

加入 退房功能

吴学文 7 years ago
parent
commit
f3b2f5b18b

+ 25 - 4
Api/src/main/java/com/java110/api/listener/AbstractServiceApiDataFlowListener.java

@@ -2,13 +2,14 @@ package com.java110.api.listener;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.java110.common.constant.CommonConstant;
-import com.java110.common.constant.ResponseConstant;
-import com.java110.common.constant.ServiceCodeConstant;
+import com.java110.common.constant.*;
+import com.java110.common.exception.ListenerExecuteException;
 import com.java110.common.util.Assert;
 import com.java110.common.util.StringUtil;
 import com.java110.core.context.DataFlowContext;
 import com.java110.core.factory.DataFlowFactory;
+import com.java110.core.smo.community.ICommunityInnerServiceSMO;
+import com.java110.dto.CommunityMemberDto;
 import com.java110.entity.center.AppService;
 import com.java110.event.service.api.ServiceDataFlowEvent;
 import com.java110.event.service.api.ServiceDataFlowListener;
@@ -23,6 +24,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.client.HttpStatusCodeException;
 import org.springframework.web.client.RestTemplate;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -276,7 +278,7 @@ public abstract class AbstractServiceApiDataFlowListener implements ServiceDataF
      * 将rest 协议转为 订单协议
      *
      * @param businesses 多个业务
-     * @param headers 订单头信息
+     * @param headers    订单头信息
      * @return
      */
     protected JSONObject restToCenterProtocol(JSONArray businesses, Map<String, String> headers) {
@@ -346,6 +348,25 @@ public abstract class AbstractServiceApiDataFlowListener implements ServiceDataF
 
     }
 
+    /**
+     * 校验小区和业主是否有关系
+     *
+     * @param paramInJson                  请求报文
+     * @param communityInnerServiceSMOImpl 小区内部调用接口
+     */
+    protected void communityHasOwner(JSONObject paramInJson, ICommunityInnerServiceSMO communityInnerServiceSMOImpl) {
+        CommunityMemberDto communityMemberDto = new CommunityMemberDto();
+        communityMemberDto.setMemberId(paramInJson.getString("ownerId"));
+        communityMemberDto.setCommunityId(paramInJson.getString("communityId"));
+        communityMemberDto.setStatusCd(StatusConstant.STATUS_CD_VALID);
+        communityMemberDto.setMemberTypeCd(CommunityMemberTypeConstant.OWNER);
+        List<CommunityMemberDto> communityMemberDtoList = communityInnerServiceSMOImpl.getCommunityMembers(communityMemberDto);
+
+        if (communityMemberDtoList == null || communityMemberDtoList.size() != 1) {
+            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "业主和小区存在关系存在异常,请检查");
+        }
+    }
+
 
     public RestTemplate getRestTemplate() {
         return restTemplate;

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

@@ -0,0 +1,163 @@
+package com.java110.api.listener.room;
+
+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.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.core.smo.community.ICommunityInnerServiceSMO;
+import com.java110.core.smo.owner.IOwnerRoomRelInnerServiceSMO;
+import com.java110.dto.CommunityMemberDto;
+import com.java110.dto.OwnerRoomRelDto;
+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.List;
+
+/**
+ * @ClassName SaveUnitListener
+ * @Description TODO 退屋信息
+ * @Author wuxw
+ * @Date 2019/5/3 11:54
+ * @Version 1.0
+ * add by wuxw 2019/5/3
+ **/
+@Java110Listener("exitRoomListener")
+public class ExitRoomListener extends AbstractServiceApiDataFlowListener {
+    private static Logger logger = LoggerFactory.getLogger(ExitRoomListener.class);
+
+
+    @Autowired
+    private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl;
+
+
+    @Autowired
+    private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeConstant.SERVICE_CODE_EXIT_ROOM;
+    }
+
+    @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);
+
+        HttpHeaders header = new HttpHeaders();
+        dataFlowContext.getRequestCurrentHeaders().put(CommonConstant.HTTP_ORDER_TYPE_CD, "D");
+        JSONArray businesses = new JSONArray();
+
+        //添加单元信息
+        businesses.add(exitRoom(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 exitRoom(JSONObject paramInJson, DataFlowContext dataFlowContext) {
+
+        //根据ownerId 和 roomId 查询relId 删除
+        OwnerRoomRelDto ownerRoomRelDto = BeanConvertUtil.covertBean(paramInJson, OwnerRoomRelDto.class);
+        List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
+
+        if (ownerRoomRelDtos == null || ownerRoomRelDtos.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_OWNER_ROOM_REL);
+        business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ);
+        business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
+        JSONObject businessUnit = new JSONObject();
+        //businessUnit.putAll(paramInJson);
+        businessUnit.put("relId", ownerRoomRelDtos.get(0).getRelId());
+        //businessUnit.put("userId", dataFlowContext.getRequestCurrentHeaders().get(CommonConstant.HTTP_USER_ID));
+        business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put("businessOwnerRoomRel", businessUnit);
+
+        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, "roomId", "请求报文中未包含roomId节点");
+
+        JSONObject paramObj = JSONObject.parseObject(paramIn);
+        Assert.hasLength(paramObj.getString("communityId"), "小区ID不能为空");
+        Assert.hasLength(paramObj.getString("ownerId"), "ownerId不能为空");
+        Assert.hasLength(paramObj.getString("roomId"), "roomId不能为空");
+        //
+
+        super.communityHasOwner(paramObj, communityInnerServiceSMOImpl);
+
+
+    }
+
+    public ICommunityInnerServiceSMO getCommunityInnerServiceSMOImpl() {
+        return communityInnerServiceSMOImpl;
+    }
+
+    public void setCommunityInnerServiceSMOImpl(ICommunityInnerServiceSMO communityInnerServiceSMOImpl) {
+        this.communityInnerServiceSMOImpl = communityInnerServiceSMOImpl;
+    }
+
+    @Override
+    public int getOrder() {
+        return DEFAULT_ORDER;
+    }
+
+    public IOwnerRoomRelInnerServiceSMO getOwnerRoomRelInnerServiceSMOImpl() {
+        return ownerRoomRelInnerServiceSMOImpl;
+    }
+
+    public void setOwnerRoomRelInnerServiceSMOImpl(IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl) {
+        this.ownerRoomRelInnerServiceSMOImpl = ownerRoomRelInnerServiceSMOImpl;
+    }
+}

+ 15 - 0
Api/src/main/java/com/java110/api/listener/room/SellRoomListener.java

@@ -9,6 +9,7 @@ import com.java110.common.constant.ServiceCodeConstant;
 import com.java110.common.util.Assert;
 import com.java110.core.annotation.Java110Listener;
 import com.java110.core.context.DataFlowContext;
+import com.java110.core.smo.community.ICommunityInnerServiceSMO;
 import com.java110.core.smo.unit.IUnitInnerServiceSMO;
 import com.java110.entity.center.AppService;
 import com.java110.event.service.api.ServiceDataFlowEvent;
@@ -35,6 +36,9 @@ public class SellRoomListener extends AbstractServiceApiDataFlowListener {
     @Autowired
     private IUnitInnerServiceSMO unitInnerServiceSMOImpl;
 
+    @Autowired
+    private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
+
     @Override
     public String getServiceCode() {
         return ServiceCodeConstant.SERVICE_CODE_SELL_ROOM;
@@ -118,6 +122,17 @@ public class SellRoomListener extends AbstractServiceApiDataFlowListener {
         Assert.hasLength(paramObj.getString("ownerId"), "ownerId不能为空");
         Assert.hasLength(paramObj.getString("roomId"), "roomId不能为空");
         Assert.hasLength(paramObj.getString("state"), "state不能为空");
+
+        super.communityHasOwner(paramObj, communityInnerServiceSMOImpl);
+    }
+
+
+    public ICommunityInnerServiceSMO getCommunityInnerServiceSMOImpl() {
+        return communityInnerServiceSMOImpl;
+    }
+
+    public void setCommunityInnerServiceSMOImpl(ICommunityInnerServiceSMO communityInnerServiceSMOImpl) {
+        this.communityInnerServiceSMOImpl = communityInnerServiceSMOImpl;
     }
 
     @Override

+ 39 - 0
WebService/src/main/java/com/java110/web/components/room/OwnerExitRoomComponent.java

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

+ 8 - 0
WebService/src/main/java/com/java110/web/smo/IRoomServiceSMO.java

@@ -63,4 +63,12 @@ public interface IRoomServiceSMO {
      * @return 返回 ResponseEntity对象包含 http状态 信息 body信息
      */
     ResponseEntity<String> sellRoom(IPageData pd);
+
+
+    /**
+     * 退房处理
+     * @param pd 页面数据封装对象
+     * @return 返回 ResponseEntity对象包含 http状态 信息 body信息
+     */
+    ResponseEntity<String> exitRoom(IPageData pd);
 }

+ 47 - 0
WebService/src/main/java/com/java110/web/smo/impl/RoomServiceSMOImpl.java

@@ -237,6 +237,53 @@ public class RoomServiceSMOImpl extends BaseComponentSMO implements IRoomService
         return responseEntity;
     }
 
+    @Override
+    public ResponseEntity<String> exitRoom(IPageData pd) {
+
+        validateExitRoom(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());
+        responseEntity = this.callCenterService(restTemplate, pd, paramIn.toJSONString(),
+                ServiceConstant.SERVICE_API_URL + "/api/room.exitRoom",
+                HttpMethod.POST);
+
+        return responseEntity;
+
+    }
+
+
+    /**
+     * 小区房屋查询数据校验
+     *
+     * @param pd 页面数据封装对象
+     */
+    private void validateExitRoom(IPageData pd) {
+        Assert.jsonObjectHaveKey(pd.getReqData(), "communityId", "请求报文中未包含communityId节点");
+        Assert.jsonObjectHaveKey(pd.getReqData(), "ownerId", "请求报文中未包含ownerId节点");
+        Assert.jsonObjectHaveKey(pd.getReqData(), "roomId", "请求报文中未包含roomId节点");
+
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+        Assert.hasLength(paramIn.getString("communityId"), "小区ID不能为空");
+        Assert.hasLength(paramIn.getString("ownerId"), "ownerId不能为空");
+        Assert.hasLength(paramIn.getString("roomId"), "roomId不能为空");
+
+    }
+
     /**
      * 小区房屋查询数据校验
      *

+ 19 - 0
WebService/src/main/resources/components/owner-exit-room/ownerExitRoom.html

@@ -0,0 +1,19 @@
+<div class="modal fade" id="exitRoomModel" 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="exitRoom()">确认退出</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 44 - 0
WebService/src/main/resources/components/owner-exit-room/ownerExitRoom.js

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

+ 5 - 0
WebService/src/main/resources/components/show-owner-rooms/showOwnerRoom.html

@@ -3,6 +3,10 @@
         <div class="ibox ">
             <div class="ibox-title">
                 <h5>{{roomInfo.roomNum}}房屋信息</h5>
+                <div class="ibox-tools" style="top:10px;">
+                    <button type="button" class="btn btn-primary btn-sm" v-on:click="ownerExitRoomModel(roomInfo.roomId)">
+                        <i class="glyphicon glyphicon-search"></i>退房</button>
+                </div>
             </div>
             <div class="ibox-content">
                 <div class="row">
@@ -72,4 +76,5 @@
             </div>
         </div>
     </div>
+    <vc:create name="ownerExitRoom"></vc:create>
 </div>

+ 7 - 0
WebService/src/main/resources/components/show-owner-rooms/showOwnerRoom.js

@@ -45,6 +45,13 @@
                            );
             },
 
+            ownerExitRoomModel:function(_roomId){
+                vc.emit('ownerExitRoom','openExitRoomModel',{
+                    ownerId:vc.component.showOwnerRoomInfo.ownerId,
+                    roomId:_roomId
+                });
+            },
+
             showState:function(_state){
                 if(_state == '2001'){
                     return "房屋已售";

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

@@ -387,6 +387,8 @@ public class ServiceCodeConstant {
 
     //售卖房屋
     public static final String SERVICE_CODE_SELL_ROOM = "room.sellRoom";
+    //退房
+    public static final String SERVICE_CODE_EXIT_ROOM = "room.exitRoom";
 
 
     //查询房屋信息

+ 1 - 0
java110-core/src/main/java/com/java110/core/smo/owner/IOwnerInnerServiceSMO.java

@@ -68,4 +68,5 @@ public interface IOwnerInnerServiceSMO {
      */
     @RequestMapping(value = "/queryOwnersByCondition", method = RequestMethod.POST)
     List<OwnerDto> queryOwnersByCondition(@RequestBody OwnerDto ownerDto);
+
 }