From a4e5cf9180a6111d9037738c78f167ec3efae8a0 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期日, 30 五月 2021 14:21:17 +0800
Subject: [PATCH] 优化删除合同校验

---
 service-store/src/main/java/com/java110/store/bmo/contract/impl/DeleteContractBMOImpl.java |  127 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 124 insertions(+), 3 deletions(-)

diff --git a/service-store/src/main/java/com/java110/store/bmo/contract/impl/DeleteContractBMOImpl.java b/service-store/src/main/java/com/java110/store/bmo/contract/impl/DeleteContractBMOImpl.java
index d882775..3c66c72 100755
--- a/service-store/src/main/java/com/java110/store/bmo/contract/impl/DeleteContractBMOImpl.java
+++ b/service-store/src/main/java/com/java110/store/bmo/contract/impl/DeleteContractBMOImpl.java
@@ -1,19 +1,47 @@
 package com.java110.store.bmo.contract.impl;
 
 import com.java110.core.annotation.Java110Transactional;
+import com.java110.dto.RoomDto;
+import com.java110.dto.contractRoom.ContractRoomDto;
+import com.java110.dto.fee.FeeDto;
+import com.java110.dto.owner.OwnerRoomRelDto;
+import com.java110.intf.community.IRoomInnerServiceSMO;
+import com.java110.intf.fee.IFeeInnerServiceSMO;
 import com.java110.intf.store.IContractInnerServiceSMO;
+import com.java110.intf.store.IContractRoomInnerServiceSMO;
+import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
 import com.java110.po.contract.ContractPo;
+import com.java110.po.owner.OwnerRoomRelPo;
+import com.java110.po.room.RoomPo;
 import com.java110.store.bmo.contract.IDeleteContractBMO;
+import com.java110.utils.constant.StatusConstant;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 @Service("deleteContractBMOImpl")
 public class DeleteContractBMOImpl implements IDeleteContractBMO {
 
     @Autowired
     private IContractInnerServiceSMO contractInnerServiceSMOImpl;
+
+    @Autowired
+    private IContractRoomInnerServiceSMO contractRoomInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl;
+
+    @Autowired
+    private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
+
+
+    @Autowired
+    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
 
     /**
      * @param contractPo 鏁版嵁
@@ -24,11 +52,104 @@
 
         int flag = contractInnerServiceSMOImpl.deleteContract(contractPo);
 
-        if (flag > 0) {
-            return ResultVo.createResponseEntity(ResultVo.CODE_OK, "淇濆瓨鎴愬姛");
+        if (flag < 1) {
+            return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "淇濆瓨澶辫触");
         }
 
-        return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "淇濆瓨澶辫触");
+        deleteContractRoomRel(contractPo);
+
+        return ResultVo.createResponseEntity(ResultVo.CODE_OK, "淇濆瓨鎴愬姛");
+
+    }
+
+
+    private void deleteContractRoomRel(ContractPo contractPo) {
+
+        // 鏌ヨ鍚堝悓鍏宠仈鎴垮眿
+        ContractRoomDto contractRoomDto = new ContractRoomDto();
+        contractRoomDto.setContractId(contractPo.getContractId());
+        contractRoomDto.setStoreId(contractPo.getStoreId());
+        List<ContractRoomDto> contractRoomDtos = contractRoomInnerServiceSMOImpl.queryContractRooms(contractRoomDto);
+
+        if (contractRoomDtos == null || contractRoomDtos.size() < 1) {
+            return;
+        }
+        List<ContractRoomDto> tmpContractRoomDtos = null;
+        OwnerRoomRelPo ownerRoomRelPo = null;
+        for (ContractRoomDto tmpContractRoomDto : contractRoomDtos) {
+
+            //鍒ゆ柇鎴垮眿鏄惁杩樼璁簡鍏朵粬鐨勫悎鍚�
+            contractRoomDto = new ContractRoomDto();
+            contractRoomDto.setRoomId(tmpContractRoomDto.getRoomId());
+            contractRoomDto.setStoreId(contractPo.getStoreId());
+            tmpContractRoomDtos = contractRoomInnerServiceSMOImpl.queryContractRooms(contractRoomDto);
+
+            //杩樻湁鍏朵粬鐨勫悎鍚� 鍏堜笉澶勭悊
+            if (tmpContractRoomDtos != null && tmpContractRoomDtos.size() > 1) {
+                continue;
+            }
+
+            validateRoom(tmpContractRoomDto);
+
+            //鍒蜂笟涓�
+            OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
+            ownerRoomRelDto.setRoomId(tmpContractRoomDto.getRoomId());
+            List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
+
+            if (ownerRoomRelDtos == null || ownerRoomRelDtos.size() < 1) { // 璇存槑鎴垮眿娌℃湁涓氫富
+                continue;
+            }
+
+
+            //淇敼鎴垮眿鐘舵��
+            RoomPo roomPo = new RoomPo();
+            roomPo.setRoomId(ownerRoomRelDtos.get(0).getRoomId());
+            roomPo.setState(RoomDto.STATE_FREE);
+            roomPo.setStatusCd(StatusConstant.STATUS_CD_VALID);
+            roomInnerServiceSMOImpl.updateRooms(roomPo);
+
+            //鍒犻櫎鍏崇郴
+            ownerRoomRelPo = new OwnerRoomRelPo();
+            ownerRoomRelPo.setStatusCd(StatusConstant.STATUS_CD_INVALID);
+            ownerRoomRelPo.setRelId(ownerRoomRelDtos.get(0).getRelId());
+            ownerRoomRelInnerServiceSMOImpl.updateOwnerRoomRels(ownerRoomRelPo);
+
+            //鎻掑叆鍒犻櫎鍏崇郴
+            ownerRoomRelPo = BeanConvertUtil.covertBean(ownerRoomRelDtos.get(0), OwnerRoomRelPo.class);
+            ownerRoomRelPo.setbId("-1");
+            ownerRoomRelPo.setOperate("DEL");
+            ownerRoomRelInnerServiceSMOImpl.saveBusinessOwnerRoomRels(ownerRoomRelPo);
+        }
+
+    }
+
+    /**
+     * 鎴垮眿鏄惁娆犺垂鏍¢獙
+     *
+     * @param tmpContractRoomDto
+     */
+    private void validateRoom(ContractRoomDto tmpContractRoomDto) {
+        //鏍¢獙 鎴垮眿涓婃槸鍚︽湁璐圭敤瀛樺湪
+
+
+        //鍒ゆ柇鎴垮眿鏄惁瀛樺湪
+        RoomDto roomDto = new RoomDto();
+        roomDto.setRoomId(tmpContractRoomDto.getRoomId());
+        roomDto.setCommunityId(tmpContractRoomDto.getCommunityId());
+        List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
+
+        Assert.listOnlyOne(roomDtos, "鎴垮眿涓嶅瓨鍦�");
+
+        //鏌ヨ鎴垮眿鏃跺�欐湁娆犺垂
+        FeeDto feeDto = new FeeDto();
+        feeDto.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
+        feeDto.setPayerObjId(tmpContractRoomDto.getRoomId());
+        feeDto.setState(FeeDto.STATE_DOING);
+        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+        if (feeDtos != null && feeDtos.size() > 0) {
+            throw new IllegalArgumentException(roomDtos.get(0).getRoomNum() + "鎴垮眿瀛樺湪鏈粨鏉熺殑璐圭敤 璇峰厛澶勭悊");
+        }
+
     }
 
 }

--
Gitblit v1.8.0