QueryRoomsCmd.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package com.java110.community.cmd.room;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.java110.core.annotation.Java110Cmd;
  4. import com.java110.core.context.ICmdDataFlowContext;
  5. import com.java110.core.event.cmd.AbstractServiceCmdListener;
  6. import com.java110.core.event.cmd.CmdEvent;
  7. import com.java110.dto.FloorDto;
  8. import com.java110.dto.RoomDto;
  9. import com.java110.dto.basePrivilege.BasePrivilegeDto;
  10. import com.java110.dto.owner.OwnerDto;
  11. import com.java110.dto.owner.OwnerRoomRelDto;
  12. import com.java110.intf.community.IFloorInnerServiceSMO;
  13. import com.java110.intf.community.IMenuInnerServiceSMO;
  14. import com.java110.intf.community.IRoomInnerServiceSMO;
  15. import com.java110.intf.community.IUnitInnerServiceSMO;
  16. import com.java110.intf.user.IOwnerInnerServiceSMO;
  17. import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
  18. import com.java110.utils.constant.ResponseConstant;
  19. import com.java110.utils.exception.CmdException;
  20. import com.java110.utils.exception.SMOException;
  21. import com.java110.utils.util.Assert;
  22. import com.java110.utils.util.BeanConvertUtil;
  23. import com.java110.vo.api.ApiRoomDataVo;
  24. import com.java110.vo.api.ApiRoomVo;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.http.HttpStatus;
  27. import org.springframework.http.ResponseEntity;
  28. import java.util.ArrayList;
  29. import java.util.List;
  30. import java.util.Map;
  31. @Java110Cmd(serviceCode = "room.queryRooms")
  32. public class QueryRoomsCmd extends AbstractServiceCmdListener {
  33. @Autowired
  34. private IUnitInnerServiceSMO unitInnerServiceSMOImpl;
  35. @Autowired
  36. private IFloorInnerServiceSMO floorInnerServiceSMOImpl;
  37. @Autowired
  38. private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
  39. @Autowired
  40. private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl;
  41. @Autowired
  42. private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl;
  43. @Autowired
  44. private IMenuInnerServiceSMO menuInnerServiceSMOImpl;
  45. protected static final int MAX_ROW = 10000;
  46. @Override
  47. public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
  48. Assert.jsonObjectHaveKey(reqJson, "communityId", "请求中未包含communityId信息");
  49. //Assert.jsonObjectHaveKey(reqJson, "floorId", "请求中未包含floorId信息");
  50. Assert.jsonObjectHaveKey(reqJson, "page", "请求报文中未包含page节点");
  51. Assert.jsonObjectHaveKey(reqJson, "row", "请求报文中未包含row节点");
  52. Assert.isInteger(reqJson.getString("page"), "page不是数字");
  53. Assert.isInteger(reqJson.getString("row"), "row不是数字");
  54. Assert.hasLength(reqJson.getString("communityId"), "小区ID不能为空");
  55. int row = Integer.parseInt(reqJson.getString("row"));
  56. if (row > MAX_ROW) {
  57. throw new SMOException(ResponseConstant.RESULT_CODE_ERROR, "row 数量不能大于50");
  58. }
  59. //校验小区楼ID和小区是否有对应关系
  60. int total = floorInnerServiceSMOImpl.queryFloorsCount(BeanConvertUtil.covertBean(reqJson, FloorDto.class));
  61. if (total < 1) {
  62. throw new IllegalArgumentException("传入小区楼ID不是该小区的楼");
  63. }
  64. }
  65. @Override
  66. public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
  67. RoomDto roomDto = BeanConvertUtil.covertBean(reqJson, RoomDto.class);
  68. ApiRoomVo apiRoomVo = new ApiRoomVo();
  69. //查询总记录数
  70. int total = roomInnerServiceSMOImpl.queryRoomsCount(BeanConvertUtil.covertBean(reqJson, RoomDto.class));
  71. apiRoomVo.setTotal(total);
  72. List<RoomDto> roomDtoList = null;
  73. if (total > 0) {
  74. roomDtoList = roomInnerServiceSMOImpl.queryRooms(roomDto);
  75. refreshRoomOwners(reqJson.getString("loginUserId"), reqJson.getString("communityId"), roomDtoList);
  76. } else {
  77. roomDtoList = new ArrayList<>();
  78. }
  79. apiRoomVo.setRooms(BeanConvertUtil.covertBeanList(roomDtoList, ApiRoomDataVo.class));
  80. int row = reqJson.getInteger("row");
  81. apiRoomVo.setRecords((int) Math.ceil((double) total / (double) row));
  82. ResponseEntity<String> responseEntity = new ResponseEntity<String>(JSONObject.toJSONString(apiRoomVo), HttpStatus.OK);
  83. cmdDataFlowContext.setResponseEntity(responseEntity);
  84. }
  85. /**
  86. * 刷入房屋业主信息
  87. *
  88. * @param roomDtos
  89. */
  90. private void refreshRoomOwners(String userId, String communityId, List<RoomDto> roomDtos) {
  91. /**
  92. * 量太大时 查询 会比较慢,如果其他地方有bug 切换 查询报表去,不能靠这个接口查询大量数据
  93. */
  94. if (roomDtos == null || roomDtos.size() > 20) {
  95. return;
  96. }
  97. List<String> roomIds = new ArrayList<>();
  98. for (RoomDto roomDto : roomDtos) {
  99. roomIds.add(roomDto.getRoomId());
  100. }
  101. OwnerDto ownerDto = new OwnerDto();
  102. ownerDto.setCommunityId(communityId);
  103. ownerDto.setRoomIds(roomIds.toArray(new String[roomIds.size()]));
  104. List<Map> mark = getPrivilegeOwnerList("/roomCreateFee", userId);
  105. List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwnersByRoom(ownerDto);
  106. for (RoomDto roomDto : roomDtos) {
  107. for (OwnerDto tmpOwnerDto : ownerDtos) {
  108. if (roomDto.getRoomId().equals(tmpOwnerDto.getRoomId())) {
  109. roomDto.setOwnerId(tmpOwnerDto.getOwnerId());
  110. roomDto.setOwnerName(tmpOwnerDto.getName());
  111. //对业主身份证号隐藏处理
  112. String idCard = tmpOwnerDto.getIdCard();
  113. if (mark.size() == 0 && idCard != null && !idCard.equals("") && idCard.length() > 15) {
  114. idCard = idCard.substring(0, 6) + "**********" + idCard.substring(16);
  115. }
  116. //对业主手机号隐藏处理
  117. String link = tmpOwnerDto.getLink();
  118. if (mark.size() == 0 && link != null && !link.equals("") && link.length() > 10) {
  119. link = link.substring(0, 3) + "****" + link.substring(7);
  120. }
  121. roomDto.setIdCard(idCard);
  122. roomDto.setLink(link);
  123. }
  124. //商铺类型查询起租时间
  125. if (roomDto.getRoomType().equals(RoomDto.ROOM_TYPE_SHOPS)) {
  126. OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
  127. ownerRoomRelDto.setRoomId(roomDto.getRoomId());
  128. ownerRoomRelDto.setStatusCd("0");
  129. List<OwnerRoomRelDto> ownerRoomRelDtoList = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
  130. if (ownerRoomRelDtoList != null && ownerRoomRelDtoList.size() == 1) {
  131. roomDto.setStartTime(ownerRoomRelDtoList.get(0).getStartTime());
  132. roomDto.setEndTime(ownerRoomRelDtoList.get(0).getEndTime());
  133. }
  134. }
  135. }
  136. }
  137. }
  138. /**
  139. * 脱敏处理
  140. *
  141. * @return
  142. */
  143. public List<Map> getPrivilegeOwnerList(String resource, String userId) {
  144. BasePrivilegeDto basePrivilegeDto = new BasePrivilegeDto();
  145. basePrivilegeDto.setResource(resource);
  146. basePrivilegeDto.setUserId(userId);
  147. List<Map> privileges = menuInnerServiceSMOImpl.checkUserHasResource(basePrivilegeDto);
  148. return privileges;
  149. }
  150. }