HouseController.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.template.annotation.Encrypt;
  8. import com.template.api.HouseAPI;
  9. import com.template.common.utils.DateUtil;
  10. import com.template.model.dto.HouseDto;
  11. import com.template.model.pojo.*;
  12. import com.template.model.result.CommonResult;
  13. import com.template.model.result.PageUtils;
  14. import com.template.model.vo.*;
  15. import com.template.services.*;
  16. import org.springframework.beans.BeanUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import org.springframework.web.bind.annotation.RequestBody;
  20. import org.springframework.web.bind.annotation.RestController;
  21. import java.math.BigDecimal;
  22. import java.time.LocalDateTime;
  23. import java.time.format.DateTimeFormatter;
  24. import java.util.ArrayList;
  25. import java.util.Date;
  26. import java.util.HashSet;
  27. import java.util.List;
  28. /**
  29. * <p>
  30. * 前端控制器
  31. * </p>
  32. *
  33. * @author ceshi
  34. * @since 2023-11-06
  35. */
  36. @RestController
  37. //加密
  38. //@DESRespondSecret
  39. public class HouseController implements HouseAPI {
  40. @Autowired
  41. HouseService houseService;
  42. @Autowired
  43. HouseNumberService houseNumberService;
  44. @Autowired
  45. HouseNumberStateService houseNumberStateService;
  46. @Autowired
  47. PermissionSettingService permissionSettingService;
  48. @Autowired
  49. HousePriceService housePriceService;
  50. @Autowired
  51. FacilityServicesService facilityServicesService;
  52. @Override
  53. @Encrypt
  54. @Transactional(rollbackFor = Exception.class)//1
  55. public CommonResult save(@RequestBody HouseDto houseDto) {
  56. if (ObjectUtils.isEmpty(houseDto) && ObjectUtils.isEmpty(houseDto.getAdminId())) {
  57. return CommonResult.fail("参数异常");
  58. }
  59. PermissionSetting permissionSetting = permissionSettingService.getById(houseDto.getAdminId());
  60. if (ObjectUtils.isEmpty(permissionSetting)) {
  61. return CommonResult.fail("非法进入");
  62. }
  63. // 判断该用户是否拥有权限
  64. String houseTypeManagement = permissionSetting.getHouseTypeManagement();
  65. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("1")) {
  66. return CommonResult.fail("此账号暂无该权限");
  67. }
  68. House house = houseDto.getHouse();
  69. // List<String> roomNumbers = houseDto.getRoomNumbers();
  70. //
  71. // Integer number = house.getNumber();
  72. //
  73. // if (number != roomNumbers.size()) {
  74. // return CommonResult.fail("房间数量不一致");
  75. // }
  76. LambdaQueryWrapper<House> wrapper = new LambdaQueryWrapper<>();
  77. wrapper.eq(House::getRoomName, house.getRoomName())
  78. .eq(House::getRoomType, house.getRoomType());
  79. House one = houseService.getOne(wrapper);
  80. if (ObjectUtils.isNotEmpty(one)) {
  81. return CommonResult.fail("该房型已存在");
  82. }
  83. houseService.save(house);
  84. // ArrayList<HouseNumber> houseNumbers = new ArrayList<>();
  85. // for (String roomNumber : roomNumbers) {
  86. //// 修改房间
  87. // HouseNumber byId = houseNumberService.getById(roomNumber);
  88. // byId.setHouseId(house.getId()+"");
  89. // houseNumbers.add(byId);
  90. // }
  91. // boolean b = houseNumberService.updateBatchById(houseNumbers);
  92. //
  93. // if (b) {
  94. // return CommonResult.ok();
  95. // }
  96. return CommonResult.ok();
  97. }
  98. @Override
  99. public CommonResult getPage(int page, int size, int type, String keyWord) {
  100. if (ObjectUtils.isEmpty(page) && page <= 0) {
  101. page = 1;
  102. }
  103. if (ObjectUtils.isEmpty(size) && size <= 0) {
  104. size = 10;
  105. }
  106. // if (!(type == 1 || type == 2)) {
  107. // return CommonResult.fail("参数异常");
  108. // }
  109. PageUtils<HouseVo> pageDto = houseService.getPage(page, size, type, keyWord);
  110. List<HouseVo> list = pageDto.getList();
  111. System.out.println("list = " + list);
  112. return CommonResult.ok(pageDto);
  113. }
  114. @Override
  115. public CommonResult details(String houseId) {
  116. if (ObjectUtils.isEmpty(houseId)) {
  117. return CommonResult.fail("参数异常");
  118. }
  119. HousedetailsVo housedetailsVo = houseService.details(houseId);
  120. if (ObjectUtils.isNotEmpty(housedetailsVo)) {
  121. String roomIds = housedetailsVo.getRoomIds();
  122. if (ObjectUtils.isNotEmpty(roomIds)) {
  123. String[] split = roomIds.split(",");
  124. ArrayList<BuildingHouseNumberVo> vos = new ArrayList<>();
  125. for (int i = 0; i < split.length; i++) {
  126. String s = split[i];
  127. HouseNumber byId = houseNumberService.getById(s);
  128. BuildingHouseNumberVo vo = new BuildingHouseNumberVo();
  129. vo.setHouseNumberId(byId.getId());
  130. // 跟下拉列表的楼栋单元id一样
  131. vo.setBuildingId(byId.getBuildingId() + 1000000);
  132. vos.add(vo);
  133. }
  134. housedetailsVo.setList(vos);
  135. }
  136. }
  137. return CommonResult.ok(housedetailsVo);
  138. }
  139. @Override
  140. @Transactional(rollbackFor = Exception.class)//1
  141. public CommonResult update(HouseDto houseDto) {
  142. if (ObjectUtils.isEmpty(houseDto) && ObjectUtils.isEmpty(houseDto.getHouse().getId()) && ObjectUtils.isEmpty(houseDto.getAdminId())) {
  143. return CommonResult.fail("参数异常");
  144. }
  145. PermissionSetting permissionSetting = permissionSettingService.getById(houseDto.getAdminId());
  146. if (ObjectUtils.isEmpty(permissionSetting)) {
  147. return CommonResult.fail("非法进入");
  148. }
  149. // 判断该用户是否拥有权限
  150. String houseTypeManagement = permissionSetting.getHouseTypeManagement();
  151. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("2")) {
  152. return CommonResult.fail("此账号暂无该权限");
  153. }
  154. House house = houseDto.getHouse();
  155. // List<String> roomNumbers = houseDto.getRoomNumbers();
  156. //
  157. // Integer number = house.getNumber();
  158. //
  159. // if (number != roomNumbers.size()) {
  160. // return CommonResult.fail("房间数量不一致");
  161. // }
  162. // 判断修改的房型名称和房型类型是是否已存在
  163. House byId = houseService.getById(house.getId());
  164. String roomName = byId.getRoomName();
  165. Integer type = byId.getRoomType();
  166. if (!house.getRoomName().equals(roomName) || !type.equals(house.getRoomType())) {
  167. LambdaQueryWrapper<House> wrapper = new LambdaQueryWrapper<>();
  168. wrapper.eq(House::getRoomName, house.getRoomName())
  169. .eq(House::getRoomType, house.getRoomType());
  170. House one = houseService.getOne(wrapper);
  171. if (ObjectUtils.isNotEmpty(one)) {
  172. return CommonResult.fail("该房型已存在");
  173. }
  174. }
  175. houseService.updateById(house);
  176. return CommonResult.ok();
  177. // try {
  178. // // 通过houseId,找到房间号
  179. //// LambdaQueryWrapper<HouseNumber> wrapperHn = new LambdaQueryWrapper<>();
  180. //// wrapperHn.eq(HouseNumber::getHouseId, house.getId());
  181. //// List<HouseNumber> list = houseNumberService.list(wrapperHn);
  182. //// for (HouseNumber houseNumber : list) {
  183. ////// 判断房间号是否还存在
  184. //// String roomNumber = houseNumber.getRoomNumber();
  185. ////// 不存在则删除
  186. //// if (!roomNumbers.contains(roomNumber)) {
  187. ////// 判断房间是否有订单,有则不能删除
  188. //// LambdaQueryWrapper<HouseNumberState> wrapperHNS = new LambdaQueryWrapper<>();
  189. //// wrapperHNS.eq(HouseNumberState::getHouseNumberId, houseNumber.getId())
  190. //// .ge(HouseNumberState::getEndTime, new Date());
  191. //// List<HouseNumberState> houseNumberStates = houseNumberStateService.list(wrapperHNS);
  192. //// if (ObjectUtils.isNotEmpty(houseNumberStates) && houseNumberStates.size() > 0) {
  193. //// return CommonResult.fail(roomNumber + "房间在使用");
  194. //// }
  195. //// houseNumberService.removeById(houseNumber);
  196. ////
  197. //// } else {
  198. ////// 存在则在集合删除这个
  199. //// roomNumbers.remove(roomNumber);
  200. //// }
  201. //// }
  202. ////
  203. //// houseService.updateById(house);
  204. //// if (ObjectUtils.isNotEmpty(roomNumbers) && roomNumbers.size() > 0) {
  205. //// ArrayList<HouseNumber> houseNumbers = new ArrayList<>();
  206. //// for (String roomNumber : roomNumbers) {
  207. ////// 添加
  208. //// HouseNumber houseNumber = new HouseNumber();
  209. //// houseNumber.setRoomNumber(roomNumber);
  210. //// houseNumber.setHouseId(house.getId() + "");
  211. ////// 默认净房
  212. //// houseNumber.setHouseStatus(1);
  213. //////// 默认空闲
  214. ////// houseNumber.setStatus(1);
  215. ////// 默认关电
  216. //// houseNumber.setElectricType("2");
  217. ////
  218. //// houseNumbers.add(houseNumber);
  219. //// }
  220. //// boolean b = houseNumberService.saveOrUpdateBatch(houseNumbers);
  221. //// }
  222. // return CommonResult.ok();
  223. //
  224. // } catch (Exception e) {
  225. // return CommonResult.fail();
  226. // }
  227. }
  228. @Override
  229. @Transactional(rollbackFor = Exception.class)//1
  230. public CommonResult delete(String houseId, int adminId) {
  231. if (ObjectUtils.isEmpty(houseId) && ObjectUtils.isEmpty(adminId)) {
  232. return CommonResult.fail();
  233. }
  234. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  235. if (ObjectUtils.isEmpty(permissionSetting)) {
  236. return CommonResult.fail("非法进入");
  237. }
  238. // 判断该用户是否拥有权限
  239. String houseTypeManagement = permissionSetting.getHouseTypeManagement();
  240. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("3")) {
  241. return CommonResult.fail("此账号暂无该权限");
  242. }
  243. // 删除房型需先删除房间号
  244. // 通过houseId,找到房间号
  245. // LambdaQueryWrapper<HouseNumber> wrapperHn = new LambdaQueryWrapper<>();
  246. // wrapperHn.eq(HouseNumber::getHouseId, houseId);
  247. // List<HouseNumber> list = houseNumberService.list(wrapperHn);
  248. // for (HouseNumber houseNumber : list) {
  249. //// 判断房间是否有订单,有则不能删除
  250. // LambdaQueryWrapper<HouseNumberState> wrapperHNS = new LambdaQueryWrapper<>();
  251. // wrapperHNS.eq(HouseNumberState::getHouseNumberId, houseNumber.getId())
  252. // .ge(HouseNumberState::getEndTime, new Date());
  253. // List<HouseNumberState> houseNumberStates = houseNumberStateService.list(wrapperHNS);
  254. // if (ObjectUtils.isNotEmpty(houseNumberStates) && houseNumberStates.size() > 0) {
  255. // return CommonResult.fail(houseNumber.getRoomNumber() + "房间在使用,无法删除");
  256. // }
  257. // }
  258. // for (HouseNumber houseNumber : list) {
  259. // Integer id = houseNumber.getId();
  260. // houseNumberService.removeById(id);
  261. // }
  262. House byId = houseService.getById(houseId);
  263. if (ObjectUtils.isEmpty(byId)) {
  264. return CommonResult.fail("参数异常");
  265. }
  266. List<HouseNumber> houseNumberList = houseNumberService.getHouseId(houseId);
  267. if (ObjectUtils.isNotEmpty(houseNumberList) || houseNumberList.size() > 0) {
  268. return CommonResult.fail("该房型下还有房间");
  269. }
  270. houseService.removeById(Integer.valueOf(houseId));
  271. return CommonResult.ok();
  272. }
  273. @Override
  274. public CommonResult roomNameType() {
  275. List<String> roomNameList = houseService.group();
  276. return CommonResult.ok(roomNameList);
  277. }
  278. public static void main(String[] args) {
  279. LocalDateTime now = LocalDateTime.now();
  280. LocalDateTime start = now.withHour(0).withMinute(0).withSecond(0);
  281. LocalDateTime end = now.withHour(23).withMinute(59).withSecond(59);
  282. System.out.println("start = " + start);
  283. System.out.println("end = " + end);
  284. }
  285. @Override
  286. public CommonResult getAppletPage(int page, int size, int type, String startTime, String endTime) {
  287. if (ObjectUtils.isEmpty(page) && page <= 0) {
  288. page = 1;
  289. }
  290. if (ObjectUtils.isEmpty(size) && size <= 0) {
  291. size = 10;
  292. }
  293. if (ObjectUtils.isEmpty(startTime) && ObjectUtils.isEmpty(endTime)) {
  294. return CommonResult.fail("参数异常");
  295. }
  296. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  297. // 判断传过来的时间和当前时间比较
  298. LocalDateTime now = LocalDateTime.now();
  299. LocalDateTime date = LocalDateTime.parse(startTime, dateTimeFormatter1);
  300. if (now.isAfter(date)) {
  301. startTime = now.format(dateTimeFormatter1);
  302. }
  303. LambdaQueryWrapper<House> wrapper = new LambdaQueryWrapper<>();
  304. wrapper.eq(House::getRoomType, type);
  305. // 上架
  306. wrapper.eq(House::getIsAdded, 1);
  307. IPage<House> page1 = houseService.page(new Page<>(page, size), wrapper);
  308. List<House> records = page1.getRecords();
  309. String houseIds = "";
  310. for (int i = 0; i < records.size(); i++) {
  311. String id = String.valueOf(records.get(i).getId());
  312. if (i == 0) {
  313. houseIds = houseIds + id;
  314. } else {
  315. houseIds = houseIds + "," + id;
  316. }
  317. }
  318. // 获取今天的所有的改价记录
  319. // LocalDateTime now = LocalDateTime.now();
  320. LocalDateTime now2 = LocalDateTime.parse(startTime, dateTimeFormatter1);
  321. LocalDateTime start = now2.withHour(0).withMinute(0).withSecond(0);
  322. LocalDateTime end = now2.withHour(23).withMinute(59).withSecond(59);
  323. List<HousePrice> housePrices = housePriceService.housePrice(start, end, houseIds);
  324. ArrayList<HouseAppletPageVo> houseAppletPageVos = new ArrayList<>();
  325. for (House record : records) {
  326. HouseAppletPageVo houseAppletPageVo = new HouseAppletPageVo();
  327. BeanUtils.copyProperties(record, houseAppletPageVo);
  328. // 获取设置图片
  329. String roomConfiguration = record.getRoomConfiguration();
  330. String[] split1 = roomConfiguration.split(",");
  331. ArrayList<FacilityServices> strings = new ArrayList<>();
  332. for (int i = 0; i < split1.length; i++) {
  333. String name = split1[i];
  334. LambdaQueryWrapper<FacilityServices> wrapperRC = new LambdaQueryWrapper<>();
  335. wrapperRC.eq(FacilityServices::getHouseService, name);
  336. FacilityServices one = facilityServicesService.getOne(wrapperRC);
  337. if (ObjectUtils.isNotEmpty(one)) {
  338. strings.add(one);
  339. }
  340. }
  341. houseAppletPageVo.setRoomConfigurationPicture(strings);
  342. String id = String.valueOf(record.getId());
  343. // 判断这个时间内是否有
  344. for (HousePrice housePrice : housePrices) {
  345. if (housePrice.getHouseId().equals(id)) {
  346. String setDate = housePrice.getSetDate();
  347. String[] split = setDate.split(",");
  348. Date startDate = DateUtil.parseDateOnly(split[0]);
  349. Date endDate = DateUtil.parseDateOnly(split[1]);
  350. // 判断当前时间是否在[startTime, endTime]区间
  351. assert startDate != null;
  352. boolean effectiveDate = DateUtil.isEffectiveDate(new Date(), startDate, endDate);
  353. if (effectiveDate) {
  354. BigDecimal price = housePrice.getPrice();
  355. houseAppletPageVo.setRoomPrice(price);
  356. }
  357. }
  358. }
  359. // 判断该房型是否还有房间
  360. LambdaQueryWrapper<HouseNumber> wrapperHN = new LambdaQueryWrapper<>();
  361. wrapperHN.eq(HouseNumber::getHouseId, id);
  362. List<HouseNumber> houseNumberList = houseNumberService.list(wrapperHN);
  363. // 获取当前房型的所有id
  364. String houseNumberIds = "";
  365. for (int i = 0; i < houseNumberList.size(); i++) {
  366. String houseNumber = houseNumberList.get(i).getId() + "";
  367. if (i == 0) {
  368. houseNumberIds = houseNumberIds + houseNumber;
  369. } else {
  370. houseNumberIds = houseNumberIds + "," + houseNumber;
  371. }
  372. }
  373. // LocalDateTime localDateTime = LocalDateTime.parse(startTime, dateTimeFormatter1);
  374. // LocalDateTime endLocalDateTime = LocalDateTime.parse(endTime, dateTimeFormatter1);
  375. List<String> houseNumberStates = houseNumberStateService.getHouseNumber(startTime, endTime, houseNumberIds);
  376. LambdaQueryWrapper<HouseNumber> wrapperHN2 = new LambdaQueryWrapper<>();
  377. wrapperHN2.eq(HouseNumber::getHouseId, id);
  378. wrapperHN2.eq(HouseNumber::getHouseStatus, 2);
  379. List<HouseNumber> list = houseNumberService.list(wrapperHN2);
  380. // 将房态和脏房合一起
  381. HashSet<String> houseNumberIdList = new HashSet<>(houseNumberStates);
  382. for (HouseNumber houseNumber : list) {
  383. Integer houseNumberId = houseNumber.getId();
  384. houseNumberIdList.add(houseNumberId+"");
  385. }
  386. if (houseNumberList.size() - houseNumberIdList.size() > 0) {
  387. houseAppletPageVo.setHouseStatus("1");
  388. // houseAppletPageVo.setSurplusCount(houseNumberList.size() - houseNumberStates.size() - list.size());
  389. houseAppletPageVo.setSurplusCount(houseNumberList.size() - houseNumberIdList.size());
  390. } else {
  391. houseAppletPageVo.setHouseStatus("2");
  392. houseAppletPageVo.setSurplusCount(0);
  393. }
  394. houseAppletPageVos.add(houseAppletPageVo);
  395. }
  396. IPage<HouseAppletPageVo> houseAppletPageVoPage = new Page<>();
  397. BeanUtils.copyProperties(page1, houseAppletPageVoPage);
  398. houseAppletPageVoPage.setRecords(houseAppletPageVos);
  399. return CommonResult.ok(houseAppletPageVoPage);
  400. }
  401. @Override
  402. public CommonResult getappletParticulars(Integer houseId) {
  403. if (ObjectUtils.isEmpty(houseId)) {
  404. return CommonResult.fail("参数异常");
  405. }
  406. House house = houseService.getById(houseId);
  407. if (ObjectUtils.isEmpty(house)) {
  408. return CommonResult.fail("参数异常");
  409. }
  410. JSONObject jsonObject = new JSONObject();
  411. jsonObject.put("housePicture", house.getHousePicture());
  412. jsonObject.put("introductory", house.getIntroductory());
  413. return CommonResult.ok(jsonObject);
  414. }
  415. @Override
  416. public CommonResult displayBar(Integer type) {
  417. List<HouseDisplayBarVo> list = houseService.displayBar(type);
  418. return CommonResult.ok(list);
  419. }
  420. }