HouseController.java 19 KB

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