HouseNumberStateController.java 99 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248
  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.toolkit.ObjectUtils;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.template.api.HouseNumberStateAPI;
  7. import com.template.common.utils.DateUtil;
  8. import com.template.common.utils.OrderNumber;
  9. import com.template.component.WeiXiaoComponent;
  10. import com.template.config.DoorLockConfig;
  11. import com.template.model.dto.*;
  12. import com.template.model.pojo.*;
  13. import com.template.model.result.CommonResult;
  14. import com.template.model.result.PageUtils;
  15. import com.template.model.vo.*;
  16. import com.template.services.*;
  17. import org.springframework.beans.BeanUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.transaction.annotation.Transactional;
  20. import org.springframework.web.bind.annotation.RestController;
  21. import java.math.BigDecimal;
  22. import java.text.SimpleDateFormat;
  23. import java.time.Duration;
  24. import java.time.LocalDateTime;
  25. import java.time.ZoneId;
  26. import java.time.format.DateTimeFormatter;
  27. import java.util.*;
  28. import java.util.stream.Collectors;
  29. /**
  30. * <p>
  31. * 前端控制器
  32. * </p>
  33. *
  34. * @author ceshi
  35. * @since 2023-11-20
  36. */
  37. @RestController
  38. public class HouseNumberStateController implements HouseNumberStateAPI {
  39. @Autowired
  40. HouseNumberStateService houseNumberStateService;
  41. @Autowired
  42. HouseService houseService;
  43. @Autowired
  44. HouseNumberService houseNumberService;
  45. @Autowired
  46. HousePriceService housePriceService;
  47. @Autowired
  48. HouseOrderService houseOrderService;
  49. @Autowired
  50. HouseLockService houseLockService;
  51. @Autowired
  52. HouseOrderBillService houseOrderBillService;
  53. @Autowired
  54. DoorLockConfig doorLockConfig;
  55. @Autowired
  56. PermissionSettingService permissionSettingService;
  57. @Autowired
  58. UnlockingService unlockingService;
  59. @Autowired
  60. PasswordIssController passwordIssController;
  61. @Autowired
  62. private WeiXiaoComponent weiXiaoComponent;
  63. @Autowired
  64. UsersService usersService;
  65. @Autowired
  66. OperatingRecordService operatingRecordService;
  67. @Autowired
  68. AdminService adminService;
  69. @Autowired
  70. WaterEquipmentService waterEquipmentService;
  71. @Autowired
  72. ElectricEquipmentService electricEquipmentService;
  73. @Autowired
  74. ApartmentSettingService apartmentSettingService;
  75. @Override
  76. public CommonResult page(String keyWord, String houseType,Integer houseId,Integer buildingId,Integer status) {
  77. // if (ObjectUtils.isEmpty(page) && page <= 0) {
  78. // page = 1;
  79. // }
  80. //
  81. // if (ObjectUtils.isEmpty(size) && size <= 0) {
  82. // size = 10;
  83. // }
  84. // 当时时间
  85. // Date date = new Date();
  86. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  87. List<House> list = houseService.list(new LambdaQueryWrapper<>());
  88. LocalDateTime start = LocalDateTime.now();
  89. LocalDateTime end = start.withHour(23).withMinute(59).withSecond(59);
  90. List<HouseStateVo> pageVo1 = houseNumberService.houseStatePage(keyWord, houseType, start, end,houseId,buildingId,status);
  91. HashMap<Integer, HouseStateVo> map = new HashMap<>();
  92. for (HouseStateVo houseStateVo : pageVo1) {
  93. Integer houseNumberId = houseStateVo.getHouseNumberId();
  94. if (map.containsKey(houseNumberId)) {
  95. String reserveLiveTime = houseStateVo.getReserveLiveTime();
  96. HouseStateVo houseStateVo1 = map.get(houseNumberId);
  97. String reserveLiveTime1 = houseStateVo1.getReserveLiveTime();
  98. LocalDateTime parse = LocalDateTime.parse(reserveLiveTime, dateTimeFormatter1);
  99. LocalDateTime parse1 = LocalDateTime.parse(reserveLiveTime1, dateTimeFormatter1);
  100. if (parse1.isAfter(parse)) {
  101. map.put(houseNumberId, houseStateVo);
  102. }
  103. } else {
  104. map.put(houseNumberId, houseStateVo);
  105. }
  106. }
  107. List<HouseStateVo> pageVo = new ArrayList<>();
  108. Set<Integer> integers = map.keySet();
  109. for (Integer integer : integers) {
  110. HouseStateVo houseStateVo = map.get(integer);
  111. pageVo.add(houseStateVo);
  112. }
  113. ArrayList<HouseStateManagementVo> vos = new ArrayList<>();
  114. for (House house : list) {
  115. HouseStateManagementVo vo = new HouseStateManagementVo();
  116. vo.setId(house.getId());
  117. vo.setName(house.getRoomName());
  118. vo.setRoomType(house.getRoomType());
  119. List<HouseStateVo> ownerClasses = pageVo.stream().filter(e -> e.getHouseId().equals(house.getId() + "")).collect(Collectors.toList());
  120. if (ownerClasses != null && ownerClasses.size() > 0) {
  121. vo.setVos(ownerClasses);
  122. }
  123. vos.add(vo);
  124. }
  125. return CommonResult.ok(vos);
  126. }
  127. @Override
  128. public CommonResult calendarPage(String dateTime, String keyWord, String houseType, int page, int size,Integer houseId,Integer buildingId) {
  129. if (ObjectUtils.isEmpty(page) && page <= 0) {
  130. page = 1;
  131. }
  132. if (ObjectUtils.isEmpty(size) && size <= 0) {
  133. size = 10;
  134. }
  135. // 返回格式
  136. HashMap<String, Object> map = new HashMap<>();
  137. // 获取当时时间
  138. LocalDateTime localDateTime;
  139. // DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  140. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  141. if (ObjectUtils.isEmpty(dateTime)) {
  142. localDateTime = LocalDateTime.now();
  143. } else {
  144. localDateTime = LocalDateTime.parse(dateTime, dateTimeFormatter1);
  145. }
  146. // 需获取21天内的所有改价信息
  147. LocalDateTime endLocalDateTime = localDateTime.plusDays(20);
  148. // 获取所有房间号
  149. List<HouseNumber> houseNumberList = houseNumberService.list(new LambdaQueryWrapper<HouseNumber>());
  150. // 获取当前房型的所有id
  151. String houseNumberIds = "";
  152. for (int i = 0; i < houseNumberList.size(); i++) {
  153. String houseNumber = houseNumberList.get(i).getId() + "";
  154. if (i == 0) {
  155. houseNumberIds = houseNumberIds + houseNumber;
  156. } else {
  157. houseNumberIds = houseNumberIds + "," + houseNumber;
  158. }
  159. }
  160. System.out.println("houseNumberIds = " + houseNumberIds);
  161. // 通过房型id获取21天内的所有房态状态
  162. List<HouseNumberState> houseNumberStates = houseNumberStateService.houseNumberStateList(localDateTime, endLocalDateTime, houseNumberIds);
  163. // 房间总数
  164. int totalCount = houseNumberList.size();
  165. // 时间日期
  166. ArrayList<HouseNumberStateDateVo> list = new ArrayList<>();
  167. for (int i = 0; i < 21; i++) {
  168. LocalDateTime localDate1 = localDateTime.plusDays(i);
  169. String format = localDate1.format(dateTimeFormatter1);
  170. HouseNumberStateDateVo houseNumberStateDateVo = new HouseNumberStateDateVo();
  171. houseNumberStateDateVo.setDate(format);
  172. int count = totalCount;
  173. for (HouseNumberState houseNumberState : houseNumberStates) {
  174. if (houseNumberState.getStatus() != 1) {
  175. // 开始时间
  176. String startTime = houseNumberState.getStartTime();
  177. // 结束时间
  178. String endTime = houseNumberState.getEndTime();
  179. Date startDate = DateUtil.parseDateOnly(startTime);
  180. Date endDate = DateUtil.parseDateOnly(endTime);
  181. Date date1 = Date.from(localDate1.atZone(ZoneId.systemDefault()).toInstant());
  182. boolean effectiveDate = DateUtil.isEffectiveDate(date1, startDate, endDate);
  183. if (effectiveDate) {
  184. count = count - 1;
  185. }
  186. }
  187. }
  188. houseNumberStateDateVo.setCount(count);
  189. list.add(houseNumberStateDateVo);
  190. }
  191. // 时间格式
  192. map.put("dateTime", list);
  193. PageUtils<CalendarPageVo> pageVo = houseNumberService.houseStateCalendarPage(keyWord, houseType, page, size,houseId,buildingId);
  194. List<CalendarPageVo> listVo = pageVo.getList();
  195. if (ObjectUtils.isEmpty(listVo) && listVo.size() <= 0) {
  196. map.put("page", pageVo);
  197. return CommonResult.ok(map);
  198. }
  199. // 获取当前房型的所有id
  200. String houseIds = "";
  201. for (int i = 0; i < listVo.size(); i++) {
  202. String id = listVo.get(i).getHouseId();
  203. if (i == 0) {
  204. houseIds = houseIds + id;
  205. } else {
  206. houseIds = houseIds + "," + id;
  207. }
  208. }
  209. System.out.println("houseIds = " + houseIds);
  210. // 获取在这时间内所属房型的所有改价记录
  211. List<HousePrice> housePrices = housePriceService.housePrice(localDateTime, endLocalDateTime, houseIds);
  212. ArrayList<HouseNumberStatePageVo> pageVos = new ArrayList<>();
  213. // 数据组合
  214. for (CalendarPageVo calendarPageVo : listVo) {
  215. HouseNumberStatePageVo houseNumberStatePageVo1 = new HouseNumberStatePageVo();
  216. houseNumberStatePageVo1.setCalendarPageVo(calendarPageVo);
  217. ArrayList<HouseStustaVo> houseStustaVos = new ArrayList<>();
  218. for (int i = 0; i < 21; i++) {
  219. HouseStustaVo houseNumberStatePageVo = new HouseStustaVo();
  220. LocalDateTime localDate1 = localDateTime.plusDays(i);
  221. String format = localDate1.format(dateTimeFormatter1);
  222. houseNumberStatePageVo.setDate(format);
  223. houseNumberStatePageVo.setPrice(calendarPageVo.getPrice());
  224. // 判断这个时间内是否有
  225. for (HousePrice housePrice : housePrices) {
  226. if (housePrice.getHouseId().equals(calendarPageVo.getHouseId())) {
  227. String setDate = housePrice.getSetDate();
  228. String[] split = setDate.split(",");
  229. Date startDate = DateUtil.parseDateOnly(split[0]);
  230. Date endDate = DateUtil.parseDateOnly(split[1]);
  231. Date date1 = Date.from(localDate1.atZone(ZoneId.systemDefault()).toInstant());
  232. // 判断当前时间是否在[startTime, endTime]区间
  233. assert startDate != null;
  234. boolean effectiveDate = DateUtil.isEffectiveDate(date1, startDate, endDate);
  235. if (effectiveDate) {
  236. BigDecimal price = housePrice.getPrice();
  237. houseNumberStatePageVo.setPrice(price);
  238. }
  239. }
  240. }
  241. houseNumberStatePageVo.setStatus(calendarPageVo.getHouseStatus());
  242. // 房态数据
  243. for (HouseNumberState houseNumberState : houseNumberStates) {
  244. if (houseNumberState.getHouseNumberId().equals(calendarPageVo.getHouseNumberId())) {
  245. // 开始时间
  246. String startTime = houseNumberState.getStartTime();
  247. // 结束时间
  248. String endTime = houseNumberState.getEndTime();
  249. LocalDateTime start = LocalDateTime.parse(startTime, dateTimeFormatter1);
  250. Date startDate = Date.from(start.atZone(ZoneId.systemDefault()).toInstant());
  251. // Date startDate = DateUtil.parseDateOnly(startTime);
  252. LocalDateTime end = LocalDateTime.parse(endTime, dateTimeFormatter1);
  253. Date endDate = Date.from(end.atZone(ZoneId.systemDefault()).toInstant());
  254. // Date endDate = DateUtil.parseDateOnly(endTime);
  255. Date date1 = Date.from(localDate1.atZone(ZoneId.systemDefault()).toInstant());
  256. boolean effectiveDate = DateUtil.isEffectiveDate(date1, startDate, endDate);
  257. if (effectiveDate) {
  258. houseNumberStatePageVo.setStatus(houseNumberState.getStatus());
  259. houseNumberStatePageVo.setHouseNumberStateId(houseNumberState.getId());
  260. // 判断是否有订单
  261. String orderNumber = houseNumberState.getOrderNumber();
  262. if (ObjectUtils.isNotEmpty(orderNumber)) {
  263. LambdaQueryWrapper<HouseOrder> wrapperHo = new LambdaQueryWrapper<>();
  264. wrapperHo.eq(HouseOrder::getOrderNumber, orderNumber);
  265. HouseOrder houseOrder = houseOrderService.getOne(wrapperHo);
  266. houseNumberStatePageVo.setReserveLiveTime(houseOrder.getReserveLiveTime());
  267. houseNumberStatePageVo.setReserveLeaveTime(houseOrder.getReserveLeaveTime());
  268. houseNumberStatePageVo.setReserveName(houseOrder.getReserveName());
  269. // 订单号
  270. houseNumberStatePageVo.setOrderNumber(orderNumber);
  271. } else {
  272. houseNumberStatePageVo.setReserveLiveTime(houseNumberState.getStartTime());
  273. houseNumberStatePageVo.setReserveLeaveTime(houseNumberState.getEndTime());
  274. }
  275. }
  276. }
  277. }
  278. houseStustaVos.add(houseNumberStatePageVo);
  279. }
  280. houseNumberStatePageVo1.setHouseStustaVos(houseStustaVos);
  281. pageVos.add(houseNumberStatePageVo1);
  282. }
  283. Page<HouseNumberStatePageVo> houseNumberStatePageVoPage = new Page<>();
  284. BeanUtils.copyProperties(pageVo, houseNumberStatePageVoPage);
  285. houseNumberStatePageVoPage.setTotal(pageVo.getTotalCount());
  286. houseNumberStatePageVoPage.setPages(pageVo.getTotalPage());
  287. houseNumberStatePageVoPage.setRecords(pageVos);
  288. map.put("page", houseNumberStatePageVoPage);
  289. return CommonResult.ok(map);
  290. }
  291. @Override
  292. public CommonResult particular(String houseNumberId, String dateTime) {
  293. if (ObjectUtils.isEmpty(houseNumberId)) {
  294. return CommonResult.fail("参数异常");
  295. }
  296. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  297. ParticularHouseNumberStatusVo vo = new ParticularHouseNumberStatusVo();
  298. vo.setHouseNumber(houseNumber.getRoomNumber());
  299. House house = houseService.getById(houseNumber.getHouseId());
  300. vo.setHouseName(house.getRoomName());
  301. vo.setHouseType(house.getRoomType());
  302. // 状态 1.空闲 2.正在使用
  303. LambdaQueryWrapper<HouseNumberState> wrapperHNS = new LambdaQueryWrapper<>();
  304. wrapperHNS.eq(HouseNumberState::getHouseNumberId, houseNumberId)
  305. .le(HouseNumberState::getStartTime, dateTime)
  306. .ge(HouseNumberState::getEndTime, dateTime);
  307. HouseNumberState houseNumberState = houseNumberStateService.getOne(wrapperHNS);
  308. if (ObjectUtils.isNotEmpty(houseNumberState)) {
  309. // 状态 1空闲、2脏房、3预定、4入住、5锁定、6维修
  310. Integer status1 = houseNumberState.getStatus();
  311. // 订单号
  312. String bookingId = houseNumberState.getOrderNumber();
  313. vo.setHouseStatus(status1);
  314. // 预定
  315. if (status1 == 3) {
  316. // 预定
  317. String statusBar = "2,5,11";
  318. vo.setStatusBar(statusBar);
  319. if (ObjectUtils.isNotEmpty(bookingId)) {
  320. LambdaQueryWrapper<HouseOrder> wrapperHo = new LambdaQueryWrapper<>();
  321. wrapperHo.eq(HouseOrder::getOrderNumber, bookingId);
  322. HouseOrder houseOrder = houseOrderService.getOne(wrapperHo);
  323. String reserveName = houseOrder.getReserveName();
  324. vo.setName(reserveName);
  325. // 入住时间
  326. vo.setLiveTime(houseOrder.getReserveLiveTime());
  327. // 预定离店时间
  328. vo.setLeaveTime(houseOrder.getReserveLeaveTime());
  329. }
  330. } else if (status1 == 4) {
  331. // 入住
  332. if (ObjectUtils.isNotEmpty(bookingId)) {
  333. LambdaQueryWrapper<HouseOrder> wrapperHo = new LambdaQueryWrapper<>();
  334. wrapperHo.eq(HouseOrder::getOrderNumber, bookingId);
  335. HouseOrder houseOrder = houseOrderService.getOne(wrapperHo);
  336. String liveName = houseOrder.getLiveName();
  337. vo.setName(liveName);
  338. String statusBar = "7,8,9,10,11";
  339. vo.setStatusBar(statusBar);
  340. Date liveTime = houseOrder.getLiveTime();
  341. // 入住时间
  342. vo.setLiveTime(houseOrder.getReserveLiveTime());
  343. // 预定离店时间
  344. vo.setLeaveTime(houseOrder.getReserveLeaveTime());
  345. // 付款
  346. vo.setPayPrice(houseOrder.getPayPrice());
  347. // 密码
  348. vo.setPassWord(houseOrder.getKeyPassWord());
  349. // 已入住时间
  350. LocalDateTime now = LocalDateTime.now();
  351. LocalDateTime stateEnd = LocalDateTime.ofInstant(liveTime.toInstant(), ZoneId.systemDefault());
  352. Duration duration = Duration.between(stateEnd, now);
  353. long l = duration.toMinutes();
  354. Double m = Double.valueOf(l);
  355. Integer days = (int) (m / (60 * 24)); //天
  356. Integer hours = (int) (m / (60) - days * 24); //小时
  357. Integer minutes = (int) (m - hours * 60 - days * 24 * 60); //分钟
  358. String checkTime = days + "天" + hours + "小时" + minutes + "分钟";
  359. vo.setCheckTime(checkTime);
  360. // 电起码,水起码
  361. LambdaQueryWrapper<HouseOrderBill> wrapperHOB = new LambdaQueryWrapper<>();
  362. wrapperHOB.eq(HouseOrderBill::getHotelOrderId, houseOrder.getId());
  363. HouseOrderBill houseOrderBill = houseOrderBillService.getOne(wrapperHOB);
  364. if (ObjectUtils.isNotEmpty(houseOrderBill)) {
  365. String startOfWater = houseOrderBill.getStartOfWater();
  366. vo.setStartWater(startOfWater);
  367. String startOfElectric = houseOrderBill.getStartOfElectric();
  368. vo.setStartElectric(startOfElectric);
  369. }
  370. }
  371. } else if (status1 == 2) {
  372. // 脏房
  373. String statusBar = "11,12";
  374. vo.setStatusBar(statusBar);
  375. } else if (status1 == 5) {
  376. // 锁定
  377. String statusBar = "6,11";
  378. vo.setStatusBar(statusBar);
  379. String startTime = houseNumberState.getStartTime();
  380. String endTime = houseNumberState.getEndTime();
  381. // 开始时间,结束时间
  382. vo.setStateTime(startTime);
  383. vo.setEndTime(endTime);
  384. } else if (status1 == 6) {
  385. // 维修
  386. String statusBar = "5,11";
  387. vo.setStatusBar(statusBar);
  388. String startTime = houseNumberState.getStartTime();
  389. String endTime = houseNumberState.getEndTime();
  390. // 开始时间,结束时间
  391. vo.setStateTime(startTime);
  392. vo.setEndTime(endTime);
  393. }
  394. } else {
  395. // 空闲
  396. String statusBar = "1,2,3,4,11,13";
  397. vo.setStatusBar(statusBar);
  398. vo.setHouseStatus(1);
  399. }
  400. // 获取该房间电量
  401. LambdaQueryWrapper<HouseLock> wrapperHL = new LambdaQueryWrapper<>();
  402. wrapperHL.eq(HouseLock::getHouseNumberId, houseNumberId);
  403. HouseLock houseLock = houseLockService.getOne(wrapperHL);
  404. // String battery = "";
  405. if (ObjectUtils.isNotEmpty(houseLock)) {
  406. String equipmentType = houseLock.getEquipmentType();
  407. String battery = passwordIssController.getDeviceInfo(equipmentType);
  408. vo.setElectricQuantity(battery + "%");
  409. }
  410. // HashMap<String, String> map = new HashMap<>();
  411. // map.put("categoryId", doorLockConfig.getCategoryId());//"d0c248256f8346d2a19afa296562b319");//设备分类ID 所有蓝牙wifi锁默认统一值
  412. // map.put("luid", equipmentType);//"047863CA78E0"
  413. //
  414. // String jsonContent = JSONObject.toJSONString(map);
  415. //
  416. //
  417. // JSONObject jsonObject = null;
  418. // try {
  419. // jsonObject = queryData(jsonContent, PasswordUrlEnum.Device_Info.getUrl());
  420. // } catch (Exception e) {
  421. // throw new RuntimeException(e);
  422. // }
  423. //
  424. // JSONObject data = jsonObject.getJSONObject("data");
  425. // 电量
  426. // String battery = data.getString("battery");
  427. return CommonResult.ok(vo);
  428. }
  429. @Override
  430. public CommonResult reserveDay(String houseNumberId, String startTime, String endTime, int adminId) {
  431. if (ObjectUtils.isEmpty(houseNumberId) && ObjectUtils.isEmpty(startTime) && ObjectUtils.isEmpty(endTime)) {
  432. return CommonResult.fail();
  433. }
  434. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  435. if (ObjectUtils.isEmpty(permissionSetting)) {
  436. return CommonResult.fail("非法进入");
  437. }
  438. // 判断该用户是否拥有权限
  439. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  440. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("1")) {
  441. return CommonResult.fail("此账号暂无该权限");
  442. }
  443. // 获取预定时间和离店时间
  444. List<ApartmentSetting> list = apartmentSettingService.list(new LambdaQueryWrapper<>());
  445. ApartmentSetting apartmentSetting = list.get(0);
  446. String liveTime = apartmentSetting.getLiveTime();
  447. String leaveTime = apartmentSetting.getLeaveTime();
  448. startTime = startTime + " " + liveTime;
  449. endTime = endTime + " " + leaveTime;
  450. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  451. LocalDateTime start = LocalDateTime.parse(startTime, dateTimeFormatter1);
  452. LocalDateTime end = LocalDateTime.parse(endTime, dateTimeFormatter1);
  453. ArrayList<ReserveDayVo> reserveDayVos = new ArrayList<>();
  454. for (int i = 0; i <= 8; i++) {
  455. LocalDateTime localDateTime=null;
  456. if (i==0) {
  457. localDateTime=LocalDateTime.now();
  458. }else {
  459. localDateTime = start.plusDays(i);
  460. }
  461. ReserveDayVo reserveDayVo = new ReserveDayVo();
  462. // LocalDateTime localDateTime = start.plusDays(i);
  463. LocalDateTime localDateTime2 = end.plusDays(i);
  464. String format = localDateTime.format(dateTimeFormatter1);
  465. String format2 = localDateTime2.format(dateTimeFormatter1);
  466. reserveDayVo.setDate(format + "至" + format2);
  467. // 获取该时间段内的房态的使用情况
  468. List<HouseNumberState> houseNumberStateList = houseNumberStateService.beBooked(houseNumberId, format, format2);
  469. if (ObjectUtils.isNotEmpty(houseNumberStateList) && houseNumberStateList.size() > 0) {
  470. reserveDayVo.setStatus("不可用");
  471. } else {
  472. reserveDayVo.setStatus("可用");
  473. }
  474. reserveDayVos.add(reserveDayVo);
  475. }
  476. return CommonResult.ok(reserveDayVos);
  477. }
  478. @Override
  479. public CommonResult reservePrice(String houseId, String cardNumber, String liveTime, String leaveTime) {
  480. if (ObjectUtils.isEmpty(houseId) && ObjectUtils.isEmpty(liveTime) && ObjectUtils.isEmpty(leaveTime)) {
  481. return CommonResult.fail();
  482. }
  483. House house = houseService.getById(houseId);
  484. if (ObjectUtils.isEmpty(house)) {
  485. return CommonResult.fail("无该房型");
  486. }
  487. // 管理端 计算总金额
  488. PriceVo priceVo = houseOrderService.reservePrice(houseId, cardNumber, liveTime, leaveTime);
  489. return CommonResult.ok(priceVo);
  490. }
  491. @Override
  492. @Transactional(rollbackFor = Exception.class)
  493. public CommonResult reserve(ReserveDto reserveDto) {
  494. if (ObjectUtils.isEmpty(reserveDto)) {
  495. return CommonResult.fail();
  496. }
  497. int adminId = reserveDto.getAdminId();
  498. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  499. if (ObjectUtils.isEmpty(permissionSetting)) {
  500. return CommonResult.fail("非法进入");
  501. }
  502. // 判断该用户是否拥有权限
  503. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  504. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("1")) {
  505. return CommonResult.fail("此账号暂无该权限");
  506. }
  507. String cardNumber = reserveDto.getCardNumber();
  508. String reserveLiveTime = reserveDto.getReserveLiveTime();
  509. String reserveLeaveTime = reserveDto.getReserveLeaveTime();
  510. String houseId = reserveDto.getHouseId();
  511. // 判断传过来的时间和当前时间比较
  512. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  513. LocalDateTime now = LocalDateTime.now();
  514. LocalDateTime date = LocalDateTime.parse(reserveLiveTime, dateTimeFormatter1);
  515. if (now.isAfter(date)) {
  516. reserveLiveTime = now.format(dateTimeFormatter1);
  517. }
  518. // 管理端 计算总金额
  519. PriceVo priceVo = houseOrderService.reservePrice(houseId, cardNumber, reserveLiveTime, reserveLeaveTime);
  520. BigDecimal totalPrice = priceVo.getTotalPrice();
  521. BigDecimal payPrice = reserveDto.getPayPrice();
  522. // 返回的结果是int类型,-1表示小于,0是等于,1是大于。
  523. if (payPrice.compareTo(totalPrice) != 0) {
  524. return CommonResult.fail("需付金额异常");
  525. }
  526. // 获取房间号
  527. String houseNumberId = reserveDto.getHouseNumberId();
  528. // 判断房型是钟点房还是全日房
  529. House house = houseService.getById(houseId);
  530. if (ObjectUtils.isEmpty(house)) {
  531. return CommonResult.fail("无该房型");
  532. }
  533. Integer roomType = house.getRoomType();
  534. if (roomType == 1) {
  535. // 获取该时间段内的该房间的使用情况
  536. List<HouseNumberState> houseNumberStateList = houseNumberStateService.beBooked(houseNumberId, reserveLiveTime, reserveLeaveTime);
  537. if (ObjectUtils.isNotEmpty(houseNumberStateList) && houseNumberStateList.size() > 0) {
  538. return CommonResult.fail("该时间段无法预定");
  539. }
  540. } else {
  541. LocalDateTime localDateTime = LocalDateTime.parse(reserveLiveTime, dateTimeFormatter1);
  542. LocalDateTime localDateTime2 = LocalDateTime.parse(reserveLeaveTime, dateTimeFormatter1);
  543. // 先判断时间是否在可用时间范围内
  544. LocalDateTime start1 = localDateTime.withHour(23).withMinute(59).withSecond(59);
  545. String format3 = start1.format(dateTimeFormatter1);
  546. String[] s1 = reserveLiveTime.split(" ");
  547. String startStr = s1[0];
  548. String[] s2 = reserveLeaveTime.split(" ");
  549. String endStr = s2[0];
  550. // 获取钟点房可用时间段
  551. List<ApartmentSetting> list = apartmentSettingService.list(new LambdaQueryWrapper<>());
  552. ApartmentSetting apartmentSetting = list.get(0);
  553. String hourTime = apartmentSetting.getHourTime();
  554. String[] split = hourTime.split(",");
  555. Integer status = 1;
  556. for (int j = 0; j < split.length; j++) {
  557. String s = split[j];
  558. String[] split1 = s.split("-");
  559. String start2 = split1[0];
  560. String end2 = split1[1];
  561. String start3 = startStr + " " + start2;
  562. String end3 = startStr + " " + end2;
  563. LocalDateTime localStart = LocalDateTime.parse(start3, dateTimeFormatter1);
  564. LocalDateTime localEnd = LocalDateTime.parse(end3, dateTimeFormatter1);
  565. // 该天最后时间小于结束时间则需要分为2个时间段
  566. if (start1.isBefore(localDateTime2)) {
  567. String start4 = endStr + " " + start2;
  568. String end4 = endStr + " " + end2;
  569. LocalDateTime localStart4 = LocalDateTime.parse(start4, dateTimeFormatter1);
  570. LocalDateTime localEnd4 = LocalDateTime.parse(end4, dateTimeFormatter1);
  571. if ((localStart.isBefore(localDateTime) || reserveLiveTime.equals(start3)) && (start1.isBefore(localEnd) || format3.equals(end3)) && (localStart4.isBefore(start1) || start4.equals(format3)) && (start1.isBefore(localEnd4) || end4.equals(format3))) {
  572. // 可用
  573. status = 2;
  574. break;
  575. }
  576. } else {
  577. if ((localStart.isBefore(localDateTime) || reserveLiveTime.equals(start3)) && (localDateTime2.isBefore(localEnd) || reserveLeaveTime.equals(end3))) {
  578. // 可用
  579. status = 2;
  580. break;
  581. }
  582. }
  583. }
  584. if (status == 2) {
  585. // 获取该时间段内的房态的使用情况
  586. List<HouseNumberState> houseNumberStateList = houseNumberStateService.beBooked(houseNumberId, reserveLiveTime, reserveLeaveTime);
  587. if (ObjectUtils.isNotEmpty(houseNumberStateList) && houseNumberStateList.size() > 0) {
  588. return CommonResult.fail("该时间段无法预定");
  589. }
  590. } else {
  591. return CommonResult.fail("当前时间不可预定");
  592. }
  593. }
  594. try {
  595. HouseOrder houseOrder = new HouseOrder();
  596. // 判断是否存在该用户,不存在则添加
  597. String name = reserveDto.getName();
  598. String phone = reserveDto.getPhone();
  599. LambdaQueryWrapper<Users> wrapperU = new LambdaQueryWrapper<>();
  600. wrapperU.eq(Users::getUserName, name)
  601. .eq(Users::getPhone, phone)
  602. .eq(ObjectUtils.isNotEmpty(cardNumber), Users::getCardNumber, cardNumber);
  603. Users users = usersService.getOne(wrapperU);
  604. if (ObjectUtils.isEmpty(users)) {
  605. Users users1 = new Users();
  606. users1.setUserName(name);
  607. users1.setPhone(phone);
  608. users1.setCardNumber(cardNumber);
  609. // users1.setUserMenuId("4");
  610. users1.setDepartment("7");
  611. boolean save = usersService.save(users1);
  612. houseOrder.setReserveUserId(users1.getId() + "");
  613. } else {
  614. houseOrder.setReserveUserId(users.getId() + "");
  615. }
  616. // 订单号
  617. // String orderNumber = UUID.randomUUID().toString();
  618. // orderNumber = orderNumber.replace("-", "");
  619. String orderNumber = OrderNumber.getOrderNumber();
  620. houseOrder.setOrderNumber(orderNumber);
  621. // 待支付状态
  622. houseOrder.setOrderStatus("1");
  623. houseOrder.setHouseId(houseId);
  624. houseOrder.setHouseNumberId(houseNumberId);
  625. houseOrder.setReserveName(reserveDto.getName());
  626. houseOrder.setReservePhone(reserveDto.getPhone());
  627. houseOrder.setReserveLiveTime(reserveLiveTime);
  628. houseOrder.setReserveLeaveTime(reserveLeaveTime);
  629. houseOrder.setHouseOrderNumber(1);
  630. // 需支付金额
  631. houseOrder.setPayPrice(payPrice);
  632. // 入住天数
  633. DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  634. LocalDateTime start = LocalDateTime.parse(reserveLiveTime, dateTimeFormatter);
  635. LocalDateTime end = LocalDateTime.parse(reserveLeaveTime, dateTimeFormatter);
  636. int dayOfYear = start.getDayOfYear();
  637. int dayOfYear1 = end.getDayOfYear();
  638. int diff = dayOfYear1 - dayOfYear;
  639. houseOrder.setLiveDay(String.valueOf(diff));
  640. // 房间单价
  641. houseOrder.setPrice(priceVo.getPrice());
  642. // 订单渠道
  643. houseOrder.setOrderChannel("2");
  644. // 超时时间
  645. houseOrder.setTimeOut(reserveDto.getTimeOut());
  646. // 添加房态表
  647. HouseNumberState houseNumberState = new HouseNumberState();
  648. houseNumberState.setOrderNumber(orderNumber);
  649. houseNumberState.setHouseNumberId(houseNumberId);
  650. houseNumberState.setStatus(3);
  651. houseNumberState.setStartTime(reserveLiveTime);
  652. houseNumberState.setEndTime(reserveLeaveTime);
  653. houseOrderService.save(houseOrder);
  654. houseNumberStateService.save(houseNumberState);
  655. return CommonResult.ok();
  656. } catch (Exception e) {
  657. e.printStackTrace();
  658. return CommonResult.fail();
  659. }
  660. }
  661. @Override
  662. @Transactional(rollbackFor = Exception.class)
  663. public CommonResult checkIdCard(CheckIdCardDto checkIdCardDto) {
  664. if (ObjectUtils.isEmpty(checkIdCardDto)) {
  665. return CommonResult.fail();
  666. }
  667. String adminMenuId = checkIdCardDto.getAdminMenuId();
  668. PermissionSetting permissionSetting = permissionSettingService.getById(adminMenuId);
  669. if (ObjectUtils.isEmpty(permissionSetting)) {
  670. return CommonResult.fail("非法进入");
  671. }
  672. // 判断该用户是否拥有权限
  673. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  674. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("8")) {
  675. return CommonResult.fail("此账号暂无该权限");
  676. }
  677. String houseNumberId = checkIdCardDto.getHouseNumberId();
  678. String houseId = checkIdCardDto.getHouseId();
  679. String liveTime = checkIdCardDto.getLiveTime();
  680. String leaveTime = checkIdCardDto.getLeaveTime();
  681. // // 管理端 计算总金额
  682. // PriceVo priceVo = houseOrderService.reservePrice(houseId, cardNumber, liveTime, leaveTime);
  683. // BigDecimal totalPrice = priceVo.getTotalPrice();
  684. //
  685. // BigDecimal payPrice = checkIdCardDto.getPayPrice();
  686. //// 返回的结果是int类型,-1表示小于,0是等于,1是大于。
  687. // if (payPrice.compareTo(totalPrice) != 0) {
  688. // return CommonResult.fail("需付金额异常");
  689. // }
  690. // 获取该时间段内的该房间的使用情况
  691. // List<HouseNumberState> houseNumberStateList = houseNumberStateService.beBooked(houseNumberId, liveTime, leaveTime);
  692. // if (ObjectUtils.isNotEmpty(houseNumberStateList) && houseNumberStateList.size() > 0) {
  693. // return CommonResult.fail("该时间段无法预定");
  694. // }
  695. // 入住人
  696. String liveName = checkIdCardDto.getLiveName();
  697. // 电话
  698. // String phone = checkIdCardDto.getPhone();
  699. // 指纹特殊编码
  700. String fingerprint = checkIdCardDto.getFingerprint();
  701. // 身份证
  702. String idCard = checkIdCardDto.getIdCard();
  703. // 身份证特殊编码
  704. String idCardInformation = checkIdCardDto.getIdCardInformation();
  705. try {
  706. // 判断是否有用户
  707. LambdaQueryWrapper<Users> wrapperU = new LambdaQueryWrapper<>();
  708. wrapperU.eq(Users::getIdCard, idCard);
  709. Users users = usersService.getOne(wrapperU);
  710. // 判断是否有订单,没有订单需先添加订单
  711. String orderNumber = checkIdCardDto.getOrderNumber();
  712. LambdaQueryWrapper<HouseOrder> wrapperHo = new LambdaQueryWrapper<>();
  713. wrapperHo.eq(HouseOrder::getOrderNumber, orderNumber);
  714. HouseOrder houseOrder = houseOrderService.getOne(wrapperHo);
  715. // 入住人id
  716. if (ObjectUtils.isEmpty(users)) {
  717. Users users1 = new Users();
  718. users1.setUserName(liveName);
  719. // users1.setPhone(phone);
  720. // users1.setCardNumber(cardNumber);
  721. users1.setFingerprint(fingerprint);
  722. users1.setIdCard(idCard);
  723. users1.setIdCardInformation(idCardInformation);
  724. // users1.setUserMenuId("1");
  725. boolean save = usersService.save(users1);
  726. // houseOrder.setLiveUsersId(users1.getId() + "");
  727. } else {
  728. // users.setCardNumber(cardNumber);
  729. users.setFingerprint(fingerprint);
  730. users.setIdCard(idCard);
  731. users.setIdCardInformation(idCardInformation);
  732. usersService.updateById(users);
  733. // houseOrder.setLiveUsersId(users.getId() + "");
  734. }
  735. houseOrder.setLiveUsersId(users.getId() + "");
  736. houseOrder.setLiveUsersId(houseOrder.getReserveUserId());
  737. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  738. Date liveDate = Date.from(LocalDateTime.parse(liveTime, dateTimeFormatter1).atZone(ZoneId.systemDefault()).toInstant());
  739. Date leaveDate = Date.from(LocalDateTime.parse(leaveTime, dateTimeFormatter1).atZone(ZoneId.systemDefault()).toInstant());
  740. // 订单状态 入住状态
  741. houseOrder.setOrderStatus("4");
  742. houseOrder.setLiveTime(liveDate);
  743. houseOrder.setLeaveTime(leaveDate);
  744. houseOrder.setLiveName(liveName);
  745. // 退房时才获取电起码,水起码
  746. // 添加房态或修改房态
  747. LambdaQueryWrapper<HouseNumberState> wrapperHns = new LambdaQueryWrapper<>();
  748. wrapperHns.eq(HouseNumberState::getOrderNumber, houseOrder.getOrderNumber())
  749. .eq(HouseNumberState::getHouseNumberId, houseNumberId);
  750. HouseNumberState houseNumberState = houseNumberStateService.getOne(wrapperHns);
  751. if (ObjectUtils.isEmpty(houseNumberState)) {
  752. return CommonResult.fail("缺少入住房态");
  753. }
  754. houseNumberState.setStatus(4);
  755. houseNumberState.setStartTime(liveTime);
  756. // 修改房间状态
  757. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  758. // 开电
  759. // Boolean aBoolean = electricEquipmentService.openMeterControl(houseNumber.getElectricEquipmentId());
  760. // if (!aBoolean) {
  761. // return CommonResult.fail("开电失败");
  762. // }
  763. houseNumber.setElectricType("1");
  764. String roomNumber = houseNumber.getRoomNumber();
  765. String start = String.valueOf(liveDate.getTime());
  766. String end = String.valueOf(leaveDate.getTime());
  767. // 发放密码
  768. Integer lockStatus = checkIdCardDto.getLockStatus();
  769. // 添加锁的操作记录
  770. Admin byId = adminService.getById(checkIdCardDto.getAdminId());
  771. OperatingRecord operatingRecord = new OperatingRecord();
  772. operatingRecord.setHouseNumberId(houseNumber.getId());
  773. operatingRecord.setRoomNumber(roomNumber);
  774. operatingRecord.setOperatorName(byId.getName());
  775. operatingRecord.setDataTime(LocalDateTime.now().format(dateTimeFormatter1));
  776. operatingRecord.setContent("姓名:" + liveName);
  777. houseOrder.setKeyType(lockStatus);
  778. if (5==lockStatus) {
  779. // 默认未归还
  780. houseOrder.setGiveBack(2);
  781. }else {
  782. // 获取设备id
  783. LambdaQueryWrapper<HouseLock> wrapperHl = new LambdaQueryWrapper<>();
  784. wrapperHl.eq(HouseLock::getHouseNumberId, houseNumberId);
  785. HouseLock houseLock = houseLockService.getOne(wrapperHl);
  786. if (ObjectUtils.isEmpty(houseLock)) {
  787. return CommonResult.fail("请先绑定门锁设备");
  788. }
  789. String equipmentState = houseLock.getEquipmentType();
  790. if (1==lockStatus) {
  791. PasswordDto pr = new PasswordDto();
  792. pr.setLuid(equipmentState);
  793. pr.setStartTime(start);
  794. pr.setEndTime(end);
  795. pr.setHouseNumberId(houseNumberId);
  796. pr.setOrderNumber(houseOrder.getOrderNumber());
  797. Unlocking unlocking = passwordIssController.addPassword(pr);
  798. // 添加锁的操作记录类型
  799. operatingRecord.setType("添加密码钥匙");
  800. unlockingService.save(unlocking);
  801. String passWord = unlocking.getPassWord();
  802. houseOrder.setKeyPassWord(passWord);
  803. // ArrayList<String> strings = new ArrayList<>();
  804. // strings.add(cardNumber);
  805. // weiXiaoComponent.sendNotice(strings, "公寓办理入住成功", "办理入住成功", "您的房间号为:" + roomNumber + ",密码是:" + passWord + "离店时间为:" + liveTime + ",欢迎您入住张玉玲酒店,我们全体员工很荣幸能为您服务,如有任何需要请致电张玉玲,期待为你服务。祝你生活愉快!", null);
  806. } else if (2==lockStatus) {
  807. CardInfoDto cid = new CardInfoDto();
  808. cid.setCard(idCardInformation);
  809. cid.setLuid(equipmentState);
  810. cid.setCardType(0);
  811. cid.setStartTime(start);
  812. cid.setEndTime(end);
  813. cid.setHouseNumberId(houseNumberId);
  814. cid.setOrderNumber(houseOrder.getOrderNumber());
  815. Unlocking unlocking = passwordIssController.addCardInfo(cid);
  816. unlockingService.save(unlocking);
  817. // 添加锁的操作记录类型
  818. operatingRecord.setType("添加卡片钥匙");
  819. // 默认未归还
  820. houseOrder.setGiveBack(2);
  821. } else if (3==lockStatus) {
  822. FingerprintDataDto fd = new FingerprintDataDto();
  823. fd.setLuid(equipmentState);
  824. fd.setHouseNumberId(houseNumberId);
  825. fd.setOrderNumber(houseOrder.getOrderNumber());
  826. fd.setStartTime(start);
  827. fd.setEndTime(end);
  828. fd.setFingerprintData(fingerprint);
  829. Unlocking unlocking = passwordIssController.addFingerprintData(fd);
  830. unlockingService.save(unlocking);
  831. // 添加锁的操作记录类型
  832. operatingRecord.setType("添加指纹钥匙");
  833. }else if (4==lockStatus){
  834. CardInfoDto cid = new CardInfoDto();
  835. cid.setCard(idCardInformation);
  836. cid.setLuid(equipmentState);
  837. cid.setCardType(1);
  838. cid.setStartTime(start);
  839. cid.setEndTime(end);
  840. cid.setHouseNumberId(houseNumberId);
  841. cid.setOrderNumber(houseOrder.getOrderNumber());
  842. Unlocking unlocking = passwordIssController.addCardInfo(cid);
  843. unlockingService.save(unlocking);
  844. // 添加锁的操作记录类型
  845. operatingRecord.setType("添加身份证钥匙");
  846. // 默认未归还
  847. houseOrder.setGiveBack(2);
  848. }
  849. }
  850. houseOrderService.updateById(houseOrder);
  851. houseNumberStateService.updateById(houseNumberState);
  852. houseNumberService.updateById(houseNumber);
  853. operatingRecordService.save(operatingRecord);
  854. return CommonResult.ok();
  855. } catch (Exception e) {
  856. e.printStackTrace();
  857. return CommonResult.fail();
  858. }
  859. }
  860. @Override
  861. public CommonResult roomChangePage(String liveTime, String leaveTime, String houseNumberId, int adminId) {
  862. if (ObjectUtils.isEmpty(leaveTime) && ObjectUtils.isEmpty(leaveTime) && ObjectUtils.isEmpty(houseNumberId)) {
  863. return CommonResult.fail();
  864. }
  865. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  866. if (ObjectUtils.isEmpty(permissionSetting)) {
  867. return CommonResult.fail("非法进入");
  868. }
  869. // 判断该用户是否拥有权限
  870. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  871. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("11")) {
  872. return CommonResult.fail("此账号暂无该权限");
  873. }
  874. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  875. if (ObjectUtils.isEmpty(houseNumber)) {
  876. return CommonResult.fail("该房间不存在");
  877. }
  878. // LambdaQueryWrapper<HouseNumber> wrapperHn = new LambdaQueryWrapper<>();
  879. // wrapperHn.eq(HouseNumber::getHouseId, houseNumber.getHouseId());
  880. //// 房间必须是净房
  881. // wrapperHn.eq(HouseNumber::getHouseStatus, 1);
  882. //
  883. // List<HouseNumber> houseNumberList2 = houseNumberService.list(wrapperHn);
  884. List<HouseNumberVo> houseNumberList = houseNumberService.roomChangePage(houseNumber.getHouseId());
  885. String houseNumberIds = "";
  886. for (int i = 0; i < houseNumberList.size(); i++) {
  887. HouseNumberVo number = houseNumberList.get(i);
  888. String id = number.getId() + "";
  889. if (i == 0) {
  890. houseNumberIds = id;
  891. } else {
  892. houseNumberIds = houseNumberIds + "," + id;
  893. }
  894. }
  895. // 该时间段内使用的房间号
  896. List<HouseNumberState> houseNumberStateList = houseNumberStateService.beBooked(houseNumberIds, liveTime, leaveTime);
  897. // 重新组合没有使用过的房间
  898. ArrayList<HouseNumberVo> list = new ArrayList<>();
  899. for (HouseNumberVo houseNumber2 : houseNumberList) {
  900. String id = houseNumber2.getId() + "";
  901. if (!houseNumberStateList.stream().anyMatch(houseNumberState -> houseNumberState.getHouseNumberId().equals(id))) {
  902. list.add(houseNumber2);
  903. }
  904. }
  905. return CommonResult.ok(list);
  906. }
  907. @Override
  908. @Transactional(rollbackFor = Exception.class)
  909. public CommonResult roomChange(RoomChangeDto roomChangeDto) {
  910. if (ObjectUtils.isEmpty(roomChangeDto)) {
  911. return CommonResult.fail();
  912. }
  913. int adminMenuId = roomChangeDto.getAdminMenuId();
  914. PermissionSetting permissionSetting = permissionSettingService.getById(adminMenuId);
  915. if (ObjectUtils.isEmpty(permissionSetting)) {
  916. return CommonResult.fail("非法进入");
  917. }
  918. // 判断该用户是否拥有权限
  919. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  920. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("11")) {
  921. return CommonResult.fail("此账号暂无该权限");
  922. }
  923. // 初始房间号
  924. String initialHouseNumberId = roomChangeDto.getInitialHouseNumberId();
  925. // 换的房间号
  926. String houseNumberId = roomChangeDto.getHouseNumberId();
  927. // 订单号
  928. String orderNumber = roomChangeDto.getOrderNumber();
  929. LambdaQueryWrapper<HouseOrder> wrapperHo = new LambdaQueryWrapper<>();
  930. wrapperHo.eq(HouseOrder::getOrderNumber, orderNumber);
  931. HouseOrder houseOrder = houseOrderService.getOne(wrapperHo);
  932. if (ObjectUtils.isEmpty(houseOrder)) {
  933. return CommonResult.fail("无该订单");
  934. }
  935. Date liveTime = houseOrder.getLiveTime();
  936. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  937. String format = sdf.format(liveTime);
  938. // 判断该房间在该订单的时间内是否有使用
  939. List<HouseNumberState> houseNumberStateList = houseNumberStateService.beBooked(houseNumberId, format, houseOrder.getReserveLeaveTime());
  940. if (ObjectUtils.isNotEmpty(houseNumberStateList) && houseNumberStateList.size() > 0) {
  941. return CommonResult.fail("此时间段内,该房间已被使用");
  942. }
  943. try {
  944. // 修改订单
  945. houseOrder.setHouseNumberId(houseNumberId);
  946. // 获取水电消费金额和额度
  947. // 获取初始房间号的水电表设备id
  948. HouseNumber initialHouseNumber = houseNumberService.getById(initialHouseNumberId);
  949. String electricEquipmentId = initialHouseNumber.getElectricEquipmentId();
  950. String waterEquipmentId = initialHouseNumber.getWaterEquipmentId();
  951. ElectricEquipment electricEquipment = electricEquipmentService.getById(electricEquipmentId);
  952. WaterEquipment waterEquipment = waterEquipmentService.getById(waterEquipmentId);
  953. if (ObjectUtils.isNotEmpty(electricEquipment) && ObjectUtils.isNotEmpty(waterEquipment)) {
  954. String electricEquipmentRoomId = electricEquipment.getRoomId();
  955. String waterEquipmentRoomId = waterEquipment.getRoomId();
  956. String live = sdf.format(liveTime);
  957. String leave = sdf.format(new Date());
  958. // 获取电的消费金额和额度
  959. JSONObject jsonObjectElectric = electricEquipmentService.roomCostRecord(electricEquipmentRoomId, live, leave);
  960. BigDecimal costElectric = jsonObjectElectric.getBigDecimal("cost");
  961. BigDecimal consumeElectric = jsonObjectElectric.getBigDecimal("consume");
  962. BigDecimal electricCost = houseOrder.getElectricCost();
  963. if (ObjectUtils.isNotEmpty(electricCost)) {
  964. costElectric = costElectric.add(electricCost);
  965. }
  966. BigDecimal electricConsume = houseOrder.getElectricConsume();
  967. if (ObjectUtils.isNotEmpty(electricConsume)) {
  968. consumeElectric = consumeElectric.add(electricConsume);
  969. }
  970. houseOrder.setElectricCost(costElectric);
  971. houseOrder.setElectricConsume(consumeElectric);
  972. // 获取水的消费金额和额度
  973. JSONObject jsonObjectWater = waterEquipmentService.roomCostRecord(waterEquipmentRoomId, live, leave);
  974. BigDecimal costWater = jsonObjectWater.getBigDecimal("cost");
  975. BigDecimal consumeWater = jsonObjectWater.getBigDecimal("consume");
  976. BigDecimal waterCost = houseOrder.getWaterCost();
  977. if (ObjectUtils.isNotEmpty(waterCost)) {
  978. costWater = costWater.add(waterCost);
  979. }
  980. BigDecimal waterConsume = houseOrder.getWaterConsume();
  981. if (ObjectUtils.isNotEmpty(waterConsume)) {
  982. consumeWater = consumeWater.add(waterConsume);
  983. }
  984. houseOrder.setWaterCost(costWater);
  985. houseOrder.setWaterConsume(consumeWater);
  986. }
  987. houseOrderService.updateById(houseOrder);
  988. // 添加状态表,修改状态表
  989. HouseNumberState houseNumberState = new HouseNumberState();
  990. houseNumberState.setStatus(4);
  991. houseNumberState.setHouseNumberId(houseNumberId);
  992. houseNumberState.setStartTime(format);
  993. houseNumberState.setEndTime(houseOrder.getReserveLeaveTime());
  994. houseNumberState.setOrderNumber(orderNumber);
  995. houseNumberStateService.save(houseNumberState);
  996. // 找到订单之前的房态,并修改
  997. LambdaQueryWrapper<HouseNumberState> wrapperHns = new LambdaQueryWrapper<>();
  998. wrapperHns.eq(HouseNumberState::getOrderNumber, orderNumber)
  999. .eq(HouseNumberState::getHouseNumberId, initialHouseNumberId);
  1000. HouseNumberState one = houseNumberStateService.getOne(wrapperHns);
  1001. one.setEndTime(sdf.format(new Date()));
  1002. houseNumberStateService.updateById(one);
  1003. houseNumberStateService.removeById(one);
  1004. // 修改换的房间
  1005. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  1006. // 房间置脏需退房后
  1007. // houseNumber.setHouseStatus(2);
  1008. // 开电
  1009. // Boolean aBoolean = electricEquipmentService.openMeterControl(houseNumber.getElectricEquipmentId());
  1010. // if (!aBoolean) {
  1011. // return CommonResult.fail("开电失败");
  1012. // }
  1013. houseNumber.setElectricType("1");
  1014. houseNumberService.updateById(houseNumber);
  1015. // 之前的房间需要置脏,不需要关电,置净才需要关电
  1016. HouseNumber houseNumber1 = houseNumberService.getById(initialHouseNumberId);
  1017. // 房间置脏
  1018. houseNumber1.setHouseStatus(2);
  1019. houseNumberService.updateById(houseNumber1);
  1020. // 旧房间密码删除,添加新房间密码
  1021. Admin byId = adminService.getById(roomChangeDto.getAdminId());
  1022. LambdaQueryWrapper<Unlocking> wrapperU = new LambdaQueryWrapper<>();
  1023. wrapperU.eq(Unlocking::getOrderNumber, orderNumber)
  1024. .eq(Unlocking::getHouseNumberId, initialHouseNumberId);
  1025. Unlocking unlocking = unlockingService.getOne(wrapperU);
  1026. if (ObjectUtils.isNotEmpty(unlocking)) {
  1027. // 删除房间密码
  1028. passwordIssController.deleteLockUser(unlocking.getLuid(), unlocking.getLockUserId());
  1029. unlockingService.removeById(unlocking);
  1030. OperatingRecord operatingRecord = new OperatingRecord();
  1031. operatingRecord.setHouseNumberId(houseNumber1.getId());
  1032. operatingRecord.setRoomNumber(houseNumber1.getRoomNumber());
  1033. operatingRecord.setOperatorName(byId.getName());
  1034. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  1035. operatingRecord.setDataTime(LocalDateTime.now().format(dateTimeFormatter1));
  1036. operatingRecord.setContent("姓名:" + houseOrder.getLiveName());
  1037. operatingRecord.setType("删除锁钥匙");
  1038. operatingRecordService.save(operatingRecord);
  1039. }
  1040. LambdaQueryWrapper<HouseLock> wrapperHl = new LambdaQueryWrapper<>();
  1041. wrapperHl.eq(HouseLock::getHouseNumberId, houseNumberId);
  1042. HouseLock houseLock = houseLockService.getOne(wrapperHl);
  1043. String equipmentState = houseLock.getEquipmentType();
  1044. // 入住人id
  1045. String liveUsersId = houseOrder.getLiveUsersId();
  1046. Users users = usersService.getById(liveUsersId);
  1047. // 判断是什么类型的开锁方式
  1048. String lockStatus = unlocking.getLockStatus();
  1049. // 添加锁的操作记录
  1050. OperatingRecord operatingRecord = new OperatingRecord();
  1051. operatingRecord.setHouseNumberId(houseNumber.getId());
  1052. operatingRecord.setRoomNumber(houseNumber.getRoomNumber());
  1053. operatingRecord.setOperatorName(byId.getName());
  1054. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  1055. operatingRecord.setDataTime(LocalDateTime.now().format(dateTimeFormatter1));
  1056. operatingRecord.setContent("姓名:" + houseOrder.getLiveName());
  1057. if ("1".equals(lockStatus)) {
  1058. PasswordDto pr = new PasswordDto();
  1059. pr.setLuid(houseLock.getEquipmentType());
  1060. // 开始时间
  1061. pr.setStartTime(String.valueOf(liveTime.getTime()));
  1062. // 结束时间
  1063. String reserveLeaveTime = houseOrder.getReserveLeaveTime();
  1064. Date leaveTime = Date.from(LocalDateTime.parse(reserveLeaveTime, dateTimeFormatter1).atZone(ZoneId.systemDefault()).toInstant());
  1065. pr.setEndTime(String.valueOf(leaveTime.getTime()));
  1066. pr.setHouseNumberId(houseNumberId);
  1067. pr.setOrderNumber(orderNumber);
  1068. Unlocking unlocking1 = passwordIssController.addPassword(pr);
  1069. unlockingService.save(unlocking1);
  1070. String passWord = unlocking1.getPassWord();
  1071. ArrayList<String> strings = new ArrayList<>();
  1072. strings.add(users.getCardNumber());
  1073. weiXiaoComponent.sendNotice(strings, "公寓办理入住成功", "办理入住成功", "您的房间号为:" + houseNumber.getRoomNumber() + ",密码是:" + passWord + "离店时间为:" + liveTime + ",欢迎您入住张玉玲酒店,我们全体员工很荣幸能为您服务,如有任何需要请致电张玉玲,期待为你服务。祝你生活愉快!", null);
  1074. operatingRecord.setType("添加密码钥匙");
  1075. } else if ("2".equals(lockStatus)) {
  1076. CardInfoDto cid = new CardInfoDto();
  1077. cid.setCard(users.getIdCardInformation());
  1078. cid.setLuid(equipmentState);
  1079. cid.setCardType(1);
  1080. cid.setStartTime(String.valueOf(liveTime.getTime()));
  1081. // 结束时间
  1082. String reserveLeaveTime = houseOrder.getReserveLeaveTime();
  1083. Date leaveTime = Date.from(LocalDateTime.parse(reserveLeaveTime, dateTimeFormatter1).atZone(ZoneId.systemDefault()).toInstant());
  1084. cid.setEndTime(String.valueOf(leaveTime.getTime()));
  1085. cid.setHouseNumberId(houseNumberId);
  1086. cid.setOrderNumber(houseOrder.getOrderNumber());
  1087. Unlocking unlocking1 = passwordIssController.addCardInfo(cid);
  1088. unlockingService.save(unlocking1);
  1089. operatingRecord.setType("添加卡片钥匙");
  1090. } else if ("3".equals(lockStatus)) {
  1091. FingerprintDataDto fd = new FingerprintDataDto();
  1092. fd.setLuid(equipmentState);
  1093. fd.setHouseNumberId(houseNumberId);
  1094. fd.setOrderNumber(houseOrder.getOrderNumber());
  1095. fd.setStartTime(String.valueOf(liveTime.getTime()));
  1096. // 结束时间
  1097. String reserveLeaveTime = houseOrder.getReserveLeaveTime();
  1098. Date leaveTime = Date.from(LocalDateTime.parse(reserveLeaveTime, dateTimeFormatter1).atZone(ZoneId.systemDefault()).toInstant());
  1099. fd.setEndTime(String.valueOf(leaveTime.getTime()));
  1100. fd.setFingerprintData(users.getFingerprint());
  1101. Unlocking unlocking1 = passwordIssController.addFingerprintData(fd);
  1102. unlockingService.save(unlocking1);
  1103. operatingRecord.setType("添加指纹钥匙");
  1104. }
  1105. operatingRecordService.save(operatingRecord);
  1106. return CommonResult.ok();
  1107. } catch (Exception e) {
  1108. e.printStackTrace();
  1109. return CommonResult.fail();
  1110. }
  1111. }
  1112. @Override
  1113. @Transactional(rollbackFor = Exception.class)
  1114. public CommonResult checkOut(CheckOutDto checkOutDto) {
  1115. int adminId = checkOutDto.getAdminId();
  1116. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  1117. if (ObjectUtils.isEmpty(permissionSetting)) {
  1118. return CommonResult.fail("非法进入");
  1119. }
  1120. // 判断该用户是否拥有权限
  1121. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  1122. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("2")) {
  1123. return CommonResult.fail("此账号暂无该权限");
  1124. }
  1125. String houseNumberId = checkOutDto.getHouseNumberId();
  1126. String orderNumber = checkOutDto.getOrderNumber();
  1127. if (ObjectUtils.isEmpty(houseNumberId) && ObjectUtils.isEmpty(orderNumber)) {
  1128. return CommonResult.fail();
  1129. }
  1130. LambdaQueryWrapper<HouseOrder> wrapperHo = new LambdaQueryWrapper<>();
  1131. wrapperHo.eq(HouseOrder::getOrderNumber, orderNumber);
  1132. HouseOrder houseOrder = houseOrderService.getOne(wrapperHo);
  1133. if (ObjectUtils.isEmpty(houseOrder)) {
  1134. return CommonResult.fail("无该订单");
  1135. }
  1136. try {
  1137. houseOrder.setOrderStatus("8");
  1138. // 判断退房在不在预定的时间段中,不在的话则判断是否有人在使用,没有的话按之前的步骤走,有的话则只改订单状态。
  1139. DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  1140. String reserveLeaveTime = houseOrder.getReserveLeaveTime();
  1141. // Date liveTime = houseOrder.getLiveTime();
  1142. // LocalDateTime localDateTime = LocalDateTime.parse(reserveLeaveTime, dateTimeFormatter).plusMinutes(30);
  1143. // Date endTime = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
  1144. // boolean effectiveDate = DateUtil.isEffectiveDate(new Date(), liveTime, endTime);
  1145. // if (!effectiveDate) {
  1146. HouseNumberState houseNumberStateData = houseNumberStateService.getData(new Date(), houseNumberId);
  1147. if (ObjectUtils.isEmpty(houseNumberStateData)) {
  1148. houseOrder.setLeaveTime(Date.from(LocalDateTime.parse(reserveLeaveTime, dateTimeFormatter).atZone(ZoneId.systemDefault()).toInstant()));
  1149. // 获取水电消费金额和额度
  1150. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  1151. String electricEquipmentId = houseNumber.getElectricEquipmentId();
  1152. String waterEquipmentId = houseNumber.getWaterEquipmentId();
  1153. ElectricEquipment electricEquipment = electricEquipmentService.getById(electricEquipmentId);
  1154. WaterEquipment waterEquipment = waterEquipmentService.getById(waterEquipmentId);
  1155. if (ObjectUtils.isNotEmpty(electricEquipment) && ObjectUtils.isNotEmpty(waterEquipment)) {
  1156. String electricEquipmentRoomId = electricEquipment.getRoomId();
  1157. String waterEquipmentRoomId = waterEquipment.getRoomId();
  1158. Date liveTime = houseOrder.getLiveTime();
  1159. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1160. String live = sdf.format(liveTime);
  1161. String leave = sdf.format(new Date());
  1162. // 获取电的消费金额和额度
  1163. JSONObject jsonObjectElectric = electricEquipmentService.roomCostRecord(electricEquipmentRoomId, live, leave);
  1164. BigDecimal costElectric = jsonObjectElectric.getBigDecimal("cost");
  1165. BigDecimal consumeElectric = jsonObjectElectric.getBigDecimal("consume");
  1166. BigDecimal electricCost = houseOrder.getElectricCost();
  1167. if (ObjectUtils.isNotEmpty(electricCost)) {
  1168. costElectric = costElectric.add(electricCost);
  1169. }
  1170. BigDecimal electricConsume = houseOrder.getElectricConsume();
  1171. if (ObjectUtils.isNotEmpty(electricConsume)) {
  1172. consumeElectric = consumeElectric.add(electricConsume);
  1173. }
  1174. houseOrder.setElectricCost(costElectric);
  1175. houseOrder.setElectricConsume(consumeElectric);
  1176. // 获取水的消费金额和额度
  1177. JSONObject jsonObjectWater = waterEquipmentService.roomCostRecord(waterEquipmentRoomId, live, leave);
  1178. BigDecimal costWater = jsonObjectWater.getBigDecimal("cost");
  1179. BigDecimal consumeWater = jsonObjectWater.getBigDecimal("consume");
  1180. BigDecimal waterCost = houseOrder.getWaterCost();
  1181. if (ObjectUtils.isNotEmpty(waterCost)) {
  1182. costWater = costWater.add(waterCost);
  1183. }
  1184. BigDecimal waterConsume = houseOrder.getWaterConsume();
  1185. if (ObjectUtils.isNotEmpty(waterConsume)) {
  1186. consumeWater = consumeWater.add(waterConsume);
  1187. }
  1188. houseOrder.setWaterCost(costWater);
  1189. houseOrder.setWaterConsume(consumeWater);
  1190. }
  1191. houseOrderService.updateById(houseOrder);
  1192. return CommonResult.ok("该时间段已超过退房时间,已修改其订单状态");
  1193. }
  1194. // }
  1195. LambdaQueryWrapper<Unlocking> wrapperU = new LambdaQueryWrapper<>();
  1196. wrapperU.eq(Unlocking::getOrderNumber, orderNumber)
  1197. .eq(Unlocking::getHouseNumberId, houseNumberId);
  1198. Unlocking unlocking = unlockingService.getOne(wrapperU);
  1199. if (ObjectUtils.isNotEmpty(unlocking)) {
  1200. // 删除房间密码
  1201. passwordIssController.deleteLockUser(unlocking.getLuid(), unlocking.getLockUserId());
  1202. unlockingService.removeById(unlocking);
  1203. }
  1204. // 获取水电消费金额和额度
  1205. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  1206. String electricEquipmentId = houseNumber.getElectricEquipmentId();
  1207. String waterEquipmentId = houseNumber.getWaterEquipmentId();
  1208. ElectricEquipment electricEquipment = electricEquipmentService.getById(electricEquipmentId);
  1209. WaterEquipment waterEquipment = waterEquipmentService.getById(waterEquipmentId);
  1210. if (ObjectUtils.isNotEmpty(electricEquipment) && ObjectUtils.isNotEmpty(waterEquipment)) {
  1211. String electricEquipmentRoomId = electricEquipment.getRoomId();
  1212. String waterEquipmentRoomId = waterEquipment.getRoomId();
  1213. Date liveTime = houseOrder.getLiveTime();
  1214. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1215. String live = sdf.format(liveTime);
  1216. String leave = sdf.format(new Date());
  1217. // 获取电的消费金额和额度
  1218. JSONObject jsonObjectElectric = electricEquipmentService.roomCostRecord(electricEquipmentRoomId, live, leave);
  1219. BigDecimal costElectric = jsonObjectElectric.getBigDecimal("cost");
  1220. BigDecimal consumeElectric = jsonObjectElectric.getBigDecimal("consume");
  1221. BigDecimal electricCost = houseOrder.getElectricCost();
  1222. if (ObjectUtils.isNotEmpty(electricCost)) {
  1223. costElectric = costElectric.add(electricCost);
  1224. }
  1225. BigDecimal electricConsume = houseOrder.getElectricConsume();
  1226. if (ObjectUtils.isNotEmpty(electricConsume)) {
  1227. consumeElectric = consumeElectric.add(electricConsume);
  1228. }
  1229. houseOrder.setElectricCost(costElectric);
  1230. houseOrder.setElectricConsume(consumeElectric);
  1231. // 获取水的消费金额和额度
  1232. JSONObject jsonObjectWater = waterEquipmentService.roomCostRecord(waterEquipmentRoomId, live, leave);
  1233. BigDecimal costWater = jsonObjectWater.getBigDecimal("cost");
  1234. BigDecimal consumeWater = jsonObjectWater.getBigDecimal("consume");
  1235. BigDecimal waterCost = houseOrder.getWaterCost();
  1236. if (ObjectUtils.isNotEmpty(waterCost)) {
  1237. costWater = costWater.add(waterCost);
  1238. }
  1239. BigDecimal waterConsume = houseOrder.getWaterConsume();
  1240. if (ObjectUtils.isNotEmpty(waterConsume)) {
  1241. consumeWater = consumeWater.add(waterConsume);
  1242. }
  1243. houseOrder.setWaterCost(costWater);
  1244. houseOrder.setWaterConsume(consumeWater);
  1245. }
  1246. // 修改订单
  1247. houseOrder.setLeaveTime(new Date());
  1248. // 修改房态
  1249. LambdaQueryWrapper<HouseNumberState> wrapperHns = new LambdaQueryWrapper<>();
  1250. wrapperHns.eq(HouseNumberState::getOrderNumber, orderNumber);
  1251. wrapperHns.eq(HouseNumberState::getHouseNumberId, houseNumberId);
  1252. HouseNumberState houseNumberState = houseNumberStateService.getOne(wrapperHns);
  1253. if (ObjectUtils.isEmpty(houseNumberState)) {
  1254. return CommonResult.fail("房间号有误");
  1255. }
  1256. dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  1257. // 设置房态的结束时间
  1258. houseNumberState.setEndTime(LocalDateTime.now().format(dateTimeFormatter));
  1259. // 修改房间状态(置脏)
  1260. // HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  1261. houseNumber.setHouseStatus(2);
  1262. // 判断该房间是否免费的房间,是则需要支付水电费,并改成带结账状态
  1263. BigDecimal payPrice = houseOrder.getPayPrice();
  1264. if (ObjectUtils.isNotEmpty(payPrice) && payPrice.doubleValue() <= 0) {
  1265. houseOrder.setOrderStatus("5");
  1266. BigDecimal electricCost = houseOrder.getElectricCost();
  1267. BigDecimal waterCost = houseOrder.getWaterCost();
  1268. BigDecimal total = electricCost.add(waterCost);
  1269. houseOrder.setPayPrice(total);
  1270. }
  1271. houseOrderService.updateById(houseOrder);
  1272. houseNumberStateService.updateById(houseNumberState);
  1273. houseNumberStateService.removeById(houseNumberState);
  1274. houseNumberService.updateById(houseNumber);
  1275. return CommonResult.ok();
  1276. } catch (Exception e) {
  1277. e.printStackTrace();
  1278. return CommonResult.fail();
  1279. }
  1280. }
  1281. @Override
  1282. public CommonResult refund() {
  1283. return null;
  1284. }
  1285. @Override
  1286. @Transactional(rollbackFor = Exception.class)
  1287. public CommonResult maintain(MaintainDto maintainDto) {
  1288. int adminId = maintainDto.getAdminId();
  1289. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  1290. if (ObjectUtils.isEmpty(permissionSetting)) {
  1291. return CommonResult.fail("非法进入");
  1292. }
  1293. // 判断该用户是否拥有权限
  1294. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  1295. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("3")) {
  1296. return CommonResult.fail("此账号暂无该权限");
  1297. }
  1298. String startTime = maintainDto.getStartTime();
  1299. String endTime = maintainDto.getEndTime();
  1300. String houseNumberId = maintainDto.getHouseNumberId();
  1301. if (ObjectUtils.isEmpty(startTime) && ObjectUtils.isEmpty(endTime) && ObjectUtils.isEmpty(houseNumberId)) {
  1302. return CommonResult.fail();
  1303. }
  1304. List<HouseNumberState> houseNumberStates = houseNumberStateService.beBooked(houseNumberId, startTime, endTime);
  1305. if (ObjectUtils.isNotEmpty(houseNumberStates) && houseNumberStates.size() > 0) {
  1306. return CommonResult.fail("该时间断内已有其他状态");
  1307. }
  1308. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  1309. if (ObjectUtils.isEmpty(houseNumber)) {
  1310. return CommonResult.fail("无该房间");
  1311. }
  1312. // 开电
  1313. // Boolean aBoolean = electricEquipmentService.openMeterControl(houseNumber.getElectricEquipmentId());
  1314. // if (!aBoolean) {
  1315. // return CommonResult.fail("开电失败");
  1316. // }
  1317. // 开电
  1318. houseNumber.setElectricType("1");
  1319. houseNumberService.updateById(houseNumber);
  1320. // 添加房态
  1321. HouseNumberState houseNumberState = new HouseNumberState();
  1322. houseNumberState.setHouseNumberId(houseNumberId);
  1323. houseNumberState.setStartTime(startTime);
  1324. houseNumberState.setEndTime(endTime);
  1325. houseNumberState.setStatus(6);
  1326. houseNumberStateService.save(houseNumberState);
  1327. return CommonResult.ok();
  1328. }
  1329. @Override
  1330. @Transactional(rollbackFor = Exception.class)
  1331. public CommonResult lockRoom(LockRoomDto lockRoomDto) {
  1332. int adminId = lockRoomDto.getAdminId();
  1333. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  1334. if (ObjectUtils.isEmpty(permissionSetting)) {
  1335. return CommonResult.fail("非法进入");
  1336. }
  1337. // 判断该用户是否拥有权限
  1338. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  1339. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("9")) {
  1340. return CommonResult.fail("此账号暂无该权限");
  1341. }
  1342. String startTime = lockRoomDto.getStartTime();
  1343. String endTime = lockRoomDto.getEndTime();
  1344. String houseNumberId = lockRoomDto.getHouseNumberId();
  1345. if (ObjectUtils.isEmpty(startTime) && ObjectUtils.isEmpty(endTime) && ObjectUtils.isEmpty(houseNumberId)) {
  1346. return CommonResult.fail();
  1347. }
  1348. List<HouseNumberState> houseNumberStates = houseNumberStateService.beBooked(houseNumberId, startTime, endTime);
  1349. if (ObjectUtils.isNotEmpty(houseNumberStates) && houseNumberStates.size() > 0) {
  1350. return CommonResult.fail("该时间断内已有其他状态");
  1351. }
  1352. // 添加房态
  1353. HouseNumberState houseNumberState = new HouseNumberState();
  1354. houseNumberState.setHouseNumberId(houseNumberId);
  1355. houseNumberState.setStartTime(startTime);
  1356. houseNumberState.setEndTime(endTime);
  1357. houseNumberState.setStatus(5);
  1358. houseNumberStateService.save(houseNumberState);
  1359. return CommonResult.ok();
  1360. }
  1361. @Override
  1362. public CommonResult dirtyRoom(DirtyRoomDto dirtyRoomDto) {
  1363. int adminId = dirtyRoomDto.getAdminId();
  1364. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  1365. if (ObjectUtils.isEmpty(permissionSetting)) {
  1366. return CommonResult.fail("非法进入");
  1367. }
  1368. // 判断该用户是否拥有权限
  1369. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  1370. if (!"0".equals(houseTypeManagement) && !"9".equals(houseTypeManagement)) {
  1371. return CommonResult.fail("此账号暂无该权限");
  1372. }
  1373. String houseNumberId = dirtyRoomDto.getHouseNumberId();
  1374. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  1375. if (ObjectUtils.isEmpty(houseNumber)) {
  1376. return CommonResult.fail("无该房间");
  1377. }
  1378. // 开电
  1379. // Boolean aBoolean = electricEquipmentService.openMeterControl(houseNumber.getElectricEquipmentId());
  1380. // if (!aBoolean) {
  1381. // return CommonResult.fail("开电失败");
  1382. // }
  1383. // 开电
  1384. houseNumber.setElectricType("1");
  1385. houseNumber.setHouseStatus(2);
  1386. houseNumberService.updateById(houseNumber);
  1387. return CommonResult.ok();
  1388. }
  1389. @Override
  1390. public CommonResult cleanRoom(CleanRoomDto cleanRoomDto) {
  1391. int adminId = cleanRoomDto.getAdminId();
  1392. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  1393. if (ObjectUtils.isEmpty(permissionSetting)) {
  1394. return CommonResult.fail("非法进入");
  1395. }
  1396. // 判断该用户是否拥有权限
  1397. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  1398. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("9")) {
  1399. return CommonResult.fail("此账号暂无该权限");
  1400. }
  1401. String houseNumberId = cleanRoomDto.getHouseNumberId();
  1402. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  1403. if (ObjectUtils.isEmpty(houseNumber)) {
  1404. return CommonResult.fail("无该房间");
  1405. }
  1406. houseNumber.setHouseStatus(1);
  1407. // 关电
  1408. houseNumber.setElectricType("2");
  1409. // 关电
  1410. // Boolean aBoolean = electricEquipmentService.closeMeterControl(houseNumber.getElectricEquipmentId());
  1411. // if (!aBoolean) {
  1412. // return CommonResult.fail("关电失败");
  1413. // }
  1414. houseNumberService.updateById(houseNumber);
  1415. return CommonResult.ok();
  1416. }
  1417. @Override
  1418. @Transactional(rollbackFor = Exception.class)
  1419. public CommonResult dirtyRooms(DirtyRoomDtos dirtyRoomDtos) {
  1420. int adminId = dirtyRoomDtos.getAdminId();
  1421. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  1422. if (ObjectUtils.isEmpty(permissionSetting)) {
  1423. return CommonResult.fail("非法进入");
  1424. }
  1425. // 判断该用户是否拥有权限
  1426. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  1427. if (!"0".equals(houseTypeManagement) && !"9".equals(houseTypeManagement)) {
  1428. return CommonResult.fail("此账号暂无该权限");
  1429. }
  1430. List<String> list = dirtyRoomDtos.getHouseNumberIds();
  1431. try {
  1432. for (String s : list) {
  1433. HouseNumber houseNumber = houseNumberService.getById(s);
  1434. if (ObjectUtils.isEmpty(houseNumber)) {
  1435. return CommonResult.fail("房间异常");
  1436. }
  1437. // 开电
  1438. // Boolean aBoolean = electricEquipmentService.openMeterControl(houseNumber.getElectricEquipmentId());
  1439. // if (!aBoolean) {
  1440. // return CommonResult.fail("开电失败");
  1441. // }
  1442. // 开电
  1443. houseNumber.setElectricType("1");
  1444. houseNumber.setHouseStatus(2);
  1445. boolean update = houseNumberService.updateById(houseNumber);
  1446. if (!update) {
  1447. return CommonResult.fail();
  1448. }
  1449. }
  1450. } catch (Exception e) {
  1451. e.printStackTrace();
  1452. return CommonResult.fail();
  1453. }
  1454. return CommonResult.ok();
  1455. }
  1456. @Override
  1457. @Transactional(rollbackFor = Exception.class)
  1458. public CommonResult cleanRooms(CleanRoomDtos cleanRoomDtos) {
  1459. int adminId = cleanRoomDtos.getAdminId();
  1460. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  1461. if (ObjectUtils.isEmpty(permissionSetting)) {
  1462. return CommonResult.fail("非法进入");
  1463. }
  1464. // 判断该用户是否拥有权限
  1465. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  1466. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("9")) {
  1467. return CommonResult.fail("此账号暂无该权限");
  1468. }
  1469. List<String> houseNumberIds = cleanRoomDtos.getHouseNumberIds();
  1470. try {
  1471. for (String houseNumberId : houseNumberIds) {
  1472. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  1473. if (ObjectUtils.isEmpty(houseNumber)) {
  1474. return CommonResult.fail("房间异常");
  1475. }
  1476. houseNumber.setHouseStatus(1);
  1477. // 关电
  1478. houseNumber.setElectricType("2");
  1479. // 关电
  1480. // Boolean aBoolean = electricEquipmentService.closeMeterControl(houseNumber.getElectricEquipmentId());
  1481. // if (!aBoolean) {
  1482. // return CommonResult.fail("关电失败");
  1483. // }
  1484. boolean update = houseNumberService.updateById(houseNumber);
  1485. if (!update) {
  1486. return CommonResult.fail();
  1487. }
  1488. }
  1489. } catch (Exception e) {
  1490. e.printStackTrace();
  1491. return CommonResult.fail();
  1492. }
  1493. return CommonResult.ok();
  1494. }
  1495. @Override
  1496. public CommonResult lockRoom(LockRoomDtos lockRoomDtos) {
  1497. int adminId = lockRoomDtos.getAdminId();
  1498. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  1499. if (ObjectUtils.isEmpty(permissionSetting)) {
  1500. return CommonResult.fail("非法进入");
  1501. }
  1502. // 判断该用户是否拥有权限
  1503. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  1504. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("9")) {
  1505. return CommonResult.fail("此账号暂无该权限");
  1506. }
  1507. List<String> houseNumberIds = lockRoomDtos.getHouseNumberIds();
  1508. LocalDateTime start = LocalDateTime.now();
  1509. LocalDateTime end = start.plusYears(100);
  1510. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  1511. String startTime = start.format(dateTimeFormatter1);
  1512. String endTime = end.format(dateTimeFormatter1);
  1513. ArrayList<HouseNumberState> list = new ArrayList<>();
  1514. for (String houseNumberId : houseNumberIds) {
  1515. List<HouseNumberState> houseNumberStates = houseNumberStateService.beBooked(houseNumberId, startTime, endTime);
  1516. if (ObjectUtils.isNotEmpty(houseNumberStates) && houseNumberStates.size() > 0) {
  1517. return CommonResult.fail("所选房间已有其他状态");
  1518. }
  1519. // 添加房态
  1520. HouseNumberState houseNumberState = new HouseNumberState();
  1521. houseNumberState.setHouseNumberId(houseNumberId);
  1522. houseNumberState.setStartTime(startTime);
  1523. houseNumberState.setEndTime(endTime);
  1524. houseNumberState.setStatus(5);
  1525. list.add(houseNumberState);
  1526. }
  1527. houseNumberStateService.saveBatch(list);
  1528. return CommonResult.ok();
  1529. }
  1530. @Override
  1531. public CommonResult openRooms(OpenRoomsDto openRoomsDto) {
  1532. int adminId = openRoomsDto.getAdminId();
  1533. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  1534. if (ObjectUtils.isEmpty(permissionSetting)) {
  1535. return CommonResult.fail("非法进入");
  1536. }
  1537. // 判断该用户是否拥有权限
  1538. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  1539. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("12")) {
  1540. return CommonResult.fail("此账号暂无该权限");
  1541. }
  1542. List<String> houseNumberIds = openRoomsDto.getHouseNumberIds();
  1543. LocalDateTime now = LocalDateTime.now();
  1544. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  1545. String format = now.format(dateTimeFormatter1);
  1546. ArrayList<HouseNumberState> list = new ArrayList<>();
  1547. for (String houseNumberId : houseNumberIds) {
  1548. // 查找房间对应的锁房状态
  1549. HouseNumberState houseNumberState = houseNumberStateService.getLockHouseNumberState(houseNumberId, now);
  1550. if (ObjectUtils.isNotEmpty(houseNumberState)) {
  1551. houseNumberState.setEndTime(format);
  1552. list.add(houseNumberState);
  1553. }
  1554. }
  1555. if (ObjectUtils.isEmpty(list) || list.size() <= 0) {
  1556. return CommonResult.fail("无锁定房间");
  1557. }
  1558. houseNumberStateService.updateBatchById(list);
  1559. ArrayList<Integer> ids = new ArrayList<>();
  1560. for (HouseNumberState houseNumberState : list) {
  1561. ids.add(houseNumberState.getId());
  1562. }
  1563. houseNumberStateService.removeByIds(ids);
  1564. return CommonResult.ok();
  1565. }
  1566. @Override
  1567. public CommonResult reserveHour(String houseNumberId, String startTime, int liveTime, int adminId) {
  1568. if (ObjectUtils.isEmpty(houseNumberId) && ObjectUtils.isEmpty(startTime) && ObjectUtils.isEmpty(liveTime)) {
  1569. return CommonResult.fail();
  1570. }
  1571. PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
  1572. if (ObjectUtils.isEmpty(permissionSetting)) {
  1573. return CommonResult.fail("非法进入");
  1574. }
  1575. // 判断该用户是否拥有权限
  1576. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  1577. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("1")) {
  1578. return CommonResult.fail("此账号暂无该权限");
  1579. }
  1580. // 获取钟点房可用时间段
  1581. List<ApartmentSetting> list = apartmentSettingService.list(new LambdaQueryWrapper<>());
  1582. ApartmentSetting apartmentSetting = list.get(0);
  1583. String hourTime = apartmentSetting.getHourTime();
  1584. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  1585. LocalDateTime start = LocalDateTime.parse(startTime, dateTimeFormatter1);
  1586. start=start.withSecond(0).withMinute(0);
  1587. LocalDateTime end = start.plusHours(liveTime);
  1588. String endTime = end.format(dateTimeFormatter1);
  1589. String[] split = hourTime.split(",");
  1590. ArrayList<ReserveDayVo> reserveDayVos = new ArrayList<>();
  1591. for (int i = 0; i < 13; i++) {
  1592. LocalDateTime localDateTime=null;
  1593. LocalDateTime localDateTime2 =null;
  1594. if (i==0) {
  1595. localDateTime = LocalDateTime.parse(startTime, dateTimeFormatter1);
  1596. localDateTime2 = localDateTime.plusHours(liveTime);
  1597. }else {
  1598. localDateTime = start.plusHours(i);
  1599. localDateTime2 = end.plusHours(i);
  1600. }
  1601. // LocalDateTime localDateTime = start.plusHours(i);
  1602. // LocalDateTime localDateTime2 = end.plusHours(i);
  1603. ReserveDayVo reserveDayVo = new ReserveDayVo();
  1604. // LocalDateTime localDateTime = start.plusHours(i);
  1605. // LocalDateTime localDateTime2 = end.plusHours(i);
  1606. String format = localDateTime.format(dateTimeFormatter1);
  1607. String format2 = localDateTime2.format(dateTimeFormatter1);
  1608. reserveDayVo.setDate(format + "至" + format2);
  1609. // 先判断时间是否在可用时间范围内
  1610. LocalDateTime start1 = localDateTime.withHour(23).withMinute(59).withSecond(59);
  1611. String format3 = start1.format(dateTimeFormatter1);
  1612. String[] s1 = format.split(" ");
  1613. String startStr = s1[0];
  1614. String[] s2 = format2.split(" ");
  1615. String endStr = s2[0];
  1616. Integer status = 1;
  1617. for (int j = 0; j < split.length; j++) {
  1618. String s = split[j];
  1619. String[] split1 = s.split("-");
  1620. String start2 = split1[0];
  1621. String end2 = split1[1];
  1622. String start3 = startStr + " " + start2;
  1623. String end3 = startStr + " " + end2;
  1624. LocalDateTime localStart = LocalDateTime.parse(start3, dateTimeFormatter1);
  1625. LocalDateTime localEnd = LocalDateTime.parse(end3, dateTimeFormatter1);
  1626. // 该天最后时间小于结束时间则需要分为2个时间段
  1627. if (start1.isBefore(localDateTime2)) {
  1628. String start4 = endStr + " " + start2;
  1629. String end4 = endStr + " " + end2;
  1630. LocalDateTime localStart4 = LocalDateTime.parse(start4, dateTimeFormatter1);
  1631. LocalDateTime localEnd4 = LocalDateTime.parse(end4, dateTimeFormatter1);
  1632. if ((localStart.isBefore(localDateTime) || format.equals(start3)) && (start1.isBefore(localEnd) || format3.equals(end3)) && (localStart4.isBefore(start1) || start4.equals(format3)) && (start1.isBefore(localEnd4) || end4.equals(format3))) {
  1633. // 可用
  1634. status = 2;
  1635. break;
  1636. }
  1637. } else {
  1638. if ((localStart.isBefore(localDateTime) || format.equals(start3)) && (localDateTime2.isBefore(localEnd) || format2.equals(end3))) {
  1639. // 可用
  1640. status = 2;
  1641. break;
  1642. }
  1643. }
  1644. }
  1645. if (status == 2) {
  1646. // 获取该时间段内的房态的使用情况
  1647. List<HouseNumberState> houseNumberStateList = houseNumberStateService.beBooked(houseNumberId, format, format2);
  1648. if (ObjectUtils.isNotEmpty(houseNumberStateList) && houseNumberStateList.size() > 0) {
  1649. reserveDayVo.setStatus("不可用");
  1650. } else {
  1651. reserveDayVo.setStatus("可用");
  1652. }
  1653. } else {
  1654. reserveDayVo.setStatus("不可用");
  1655. }
  1656. reserveDayVos.add(reserveDayVo);
  1657. }
  1658. return CommonResult.ok(reserveDayVos);
  1659. }
  1660. @Override
  1661. public CommonResult checkInShow(String orderNumber) {
  1662. HouseOrderCheckInShowVo vo = houseOrderService.getOrderNumbre(orderNumber);
  1663. return CommonResult.ok(vo);
  1664. }
  1665. @Override
  1666. public CommonResult freeDropDownShow() {
  1667. List<House> houses = houseService.list(new LambdaQueryWrapper<>());
  1668. Date date = new Date();
  1669. // 获取已被订阅的房间
  1670. List<Integer> ids = houseNumberService.getNumberState(date);
  1671. // 查询所有房间
  1672. List<HouseNumber> houseNumberList = houseNumberService.list(new LambdaQueryWrapper<>());
  1673. // 重新组合没有使用过的房间
  1674. ArrayList<HouseNumber> list = new ArrayList<>();
  1675. for (HouseNumber houseNumber : houseNumberList) {
  1676. Integer houseNumberId = houseNumber.getId();
  1677. if (!ids.stream().anyMatch(id -> id.equals(houseNumberId))) {
  1678. list.add(houseNumber);
  1679. }
  1680. }
  1681. String houseNumberIds = "";
  1682. for (int i = 0; i < list.size(); i++) {
  1683. HouseNumber number = list.get(i);
  1684. String id = number.getId() + "";
  1685. if (i == 0) {
  1686. houseNumberIds = id;
  1687. } else {
  1688. houseNumberIds = houseNumberIds + "," + id;
  1689. }
  1690. }
  1691. List<FreeVo> freeVos = houseNumberService.freeDropDownShow(houseNumberIds);
  1692. ArrayList<FreeDropDownShowVo> vos = new ArrayList<>();
  1693. for (int i = 0; i < houses.size(); i++) {
  1694. House house = houses.get(i);
  1695. Integer id = house.getId();
  1696. FreeDropDownShowVo vo = new FreeDropDownShowVo();
  1697. vo.setId(id+1000000);
  1698. vo.setName(house.getRoomName());
  1699. vo.setRoomType(house.getRoomType());
  1700. List<FreeVo> ownerClasses = freeVos.stream().filter(e -> e.getHouseId().equals(id+ "")).collect(Collectors.toList());
  1701. if (ownerClasses != null && ownerClasses.size() > 0) {
  1702. vo.setVos(ownerClasses);
  1703. }
  1704. vos.add(vo);
  1705. }
  1706. return CommonResult.ok(vos);
  1707. }
  1708. @Override
  1709. public CommonResult dirtyDropDownShow() {
  1710. List<House> houses = houseService.list(new LambdaQueryWrapper<>());
  1711. List<FreeVo> freeVos = houseNumberService.dirtyDropDownShow();
  1712. ArrayList<FreeDropDownShowVo> vos = new ArrayList<>();
  1713. for (int i = 0; i < houses.size(); i++) {
  1714. House house = houses.get(i);
  1715. Integer id = house.getId();
  1716. FreeDropDownShowVo vo = new FreeDropDownShowVo();
  1717. vo.setId(id+1000000);
  1718. vo.setName(house.getRoomName());
  1719. vo.setRoomType(house.getRoomType());
  1720. List<FreeVo> ownerClasses = freeVos.stream().filter(e -> e.getHouseId().equals(id+ "")).collect(Collectors.toList());
  1721. if (ownerClasses != null && ownerClasses.size() > 0) {
  1722. vo.setVos(ownerClasses);
  1723. }
  1724. vos.add(vo);
  1725. }
  1726. return CommonResult.ok(vos);
  1727. }
  1728. @Override
  1729. public CommonResult lockDropDownShow() {
  1730. List<House> houses = houseService.list(new LambdaQueryWrapper<>());
  1731. Date date = new Date();
  1732. // 获取已被锁定的房间
  1733. List<FreeVo> freeVos = houseNumberService.lockDropDownShow(date);
  1734. ArrayList<FreeDropDownShowVo> vos = new ArrayList<>();
  1735. for (int i = 0; i < houses.size(); i++) {
  1736. House house = houses.get(i);
  1737. Integer id = house.getId();
  1738. FreeDropDownShowVo vo = new FreeDropDownShowVo();
  1739. vo.setId(id+1000000);
  1740. vo.setName(house.getRoomName());
  1741. vo.setRoomType(house.getRoomType());
  1742. List<FreeVo> ownerClasses = freeVos.stream().filter(e -> e.getHouseId().equals(id+ "")).collect(Collectors.toList());
  1743. if (ownerClasses != null && ownerClasses.size() > 0) {
  1744. vo.setVos(ownerClasses);
  1745. }
  1746. vos.add(vo);
  1747. }
  1748. return CommonResult.ok(vos);
  1749. }
  1750. @Override
  1751. @Transactional(rollbackFor = Exception.class)
  1752. public CommonResult cancelMaintain(CancelMaintainDto cancelMaintainDto) {
  1753. int permissionSettingId = cancelMaintainDto.getPermissionSettingId();
  1754. PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
  1755. if (ObjectUtils.isEmpty(permissionSetting)) {
  1756. return CommonResult.fail("非法进入");
  1757. }
  1758. // 判断该用户是否拥有权限
  1759. String houseTypeManagement = permissionSetting.getHouseStatusManagement();
  1760. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("3")) {
  1761. return CommonResult.fail("此账号暂无该权限");
  1762. }
  1763. String houseNumberId = cancelMaintainDto.getHouseNumberId();
  1764. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  1765. if (ObjectUtils.isEmpty(houseNumber)) {
  1766. return CommonResult.fail("房间不存在");
  1767. }
  1768. LocalDateTime date = LocalDateTime.now();
  1769. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  1770. String format = date.format(dateTimeFormatter1);
  1771. // 查找房间对应的维修房状态
  1772. HouseNumberState houseNumberState = houseNumberStateService.getMaintainHouseNumberState(houseNumberId, date);
  1773. if (ObjectUtils.isEmpty(houseNumberState)) {
  1774. return CommonResult.fail("无维修房间");
  1775. }
  1776. houseNumberState.setEndTime(format);
  1777. houseNumberStateService.updateById(houseNumberState);
  1778. houseNumberStateService.removeById(houseNumberState);
  1779. houseNumber.setHouseStatus(1);
  1780. // 关电
  1781. houseNumber.setElectricType("2");
  1782. // 关电
  1783. // Boolean aBoolean = electricEquipmentService.closeMeterControl(houseNumber.getElectricEquipmentId());
  1784. // if (!aBoolean) {
  1785. // return CommonResult.fail("关电失败");
  1786. // }
  1787. houseNumberService.updateById(houseNumber);
  1788. return CommonResult.ok();
  1789. }
  1790. @Override
  1791. public CommonResult shutDropDownShow() {
  1792. List<House> houses = houseService.list(new LambdaQueryWrapper<>());
  1793. Date date = new Date();
  1794. // 获取已被订阅的房间
  1795. List<Integer> ids = houseNumberService.getNumberState(date);
  1796. // 查询所有房间
  1797. List<HouseNumber> houseNumberList = houseNumberService.list(new LambdaQueryWrapper<>());
  1798. // 重新组合没有使用过的房间
  1799. ArrayList<HouseNumber> list = new ArrayList<>();
  1800. for (HouseNumber houseNumber : houseNumberList) {
  1801. Integer houseNumberId = houseNumber.getId();
  1802. if (!ids.stream().anyMatch(id -> id.equals(houseNumberId))) {
  1803. list.add(houseNumber);
  1804. }
  1805. }
  1806. String houseNumberIds = "";
  1807. for (int i = 0; i < list.size(); i++) {
  1808. HouseNumber number = list.get(i);
  1809. String id = number.getId() + "";
  1810. if (i == 0) {
  1811. houseNumberIds = id;
  1812. } else {
  1813. houseNumberIds = houseNumberIds + "," + id;
  1814. }
  1815. }
  1816. List<FreeVo> freeVos = houseNumberService.shutDropDownShow(houseNumberIds);
  1817. ArrayList<FreeDropDownShowVo> vos = new ArrayList<>();
  1818. for (int i = 0; i < houses.size(); i++) {
  1819. House house = houses.get(i);
  1820. Integer id = house.getId();
  1821. FreeDropDownShowVo vo = new FreeDropDownShowVo();
  1822. vo.setId(id+1000000);
  1823. vo.setName(house.getRoomName());
  1824. vo.setRoomType(house.getRoomType());
  1825. List<FreeVo> ownerClasses = freeVos.stream().filter(e -> e.getHouseId().equals(id+ "")).collect(Collectors.toList());
  1826. if (ownerClasses != null && ownerClasses.size() > 0) {
  1827. vo.setVos(ownerClasses);
  1828. }
  1829. vos.add(vo);
  1830. }
  1831. return CommonResult.ok(vos);
  1832. }
  1833. @Override
  1834. public CommonResult openDropDownShow() {
  1835. List<House> houses = houseService.list(new LambdaQueryWrapper<>());
  1836. Date date = new Date();
  1837. // 获取已被订阅的房间
  1838. List<Integer> ids = houseNumberService.getNumberState(date);
  1839. // 查询所有房间
  1840. List<HouseNumber> houseNumberList = houseNumberService.list(new LambdaQueryWrapper<>());
  1841. // 重新组合没有使用过的房间
  1842. ArrayList<HouseNumber> list = new ArrayList<>();
  1843. for (HouseNumber houseNumber : houseNumberList) {
  1844. Integer houseNumberId = houseNumber.getId();
  1845. if (!ids.stream().anyMatch(id -> id.equals(houseNumberId))) {
  1846. list.add(houseNumber);
  1847. }
  1848. }
  1849. String houseNumberIds = "";
  1850. for (int i = 0; i < list.size(); i++) {
  1851. HouseNumber number = list.get(i);
  1852. String id = number.getId() + "";
  1853. if (i == 0) {
  1854. houseNumberIds = id;
  1855. } else {
  1856. houseNumberIds = houseNumberIds + "," + id;
  1857. }
  1858. }
  1859. List<FreeVo> freeVos = houseNumberService.opneDropDownShow(houseNumberIds);
  1860. ArrayList<FreeDropDownShowVo> vos = new ArrayList<>();
  1861. for (int i = 0; i < houses.size(); i++) {
  1862. House house = houses.get(i);
  1863. Integer id = house.getId();
  1864. FreeDropDownShowVo vo = new FreeDropDownShowVo();
  1865. vo.setId(id+1000000);
  1866. vo.setName(house.getRoomName());
  1867. vo.setRoomType(house.getRoomType());
  1868. List<FreeVo> ownerClasses = freeVos.stream().filter(e -> e.getHouseId().equals(id+ "")).collect(Collectors.toList());
  1869. if (ownerClasses != null && ownerClasses.size() > 0) {
  1870. vo.setVos(ownerClasses);
  1871. }
  1872. vos.add(vo);
  1873. }
  1874. return CommonResult.ok(vos);
  1875. }
  1876. @Override
  1877. public CommonResult shutRooms(LockRoomDtos dtos) {
  1878. List<String> houseNumberIds = dtos.getHouseNumberIds();
  1879. ArrayList<HouseNumber> list = new ArrayList<>();
  1880. for (String houseNumberId : houseNumberIds) {
  1881. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  1882. // 关电
  1883. houseNumber.setElectricType("2");
  1884. // 关电
  1885. // Boolean aBoolean = electricEquipmentService.closeMeterControl(houseNumber.getElectricEquipmentId());
  1886. // if (!aBoolean) {
  1887. // return CommonResult.fail("关电失败");
  1888. // }
  1889. list.add(houseNumber);
  1890. }
  1891. houseNumberService.updateBatchById(list);
  1892. return CommonResult.ok();
  1893. }
  1894. @Override
  1895. public CommonResult openERooms(OpenRoomsDto openRoomsDto) {
  1896. List<String> houseNumberIds = openRoomsDto.getHouseNumberIds();
  1897. ArrayList<HouseNumber> list = new ArrayList<>();
  1898. for (String houseNumberId : houseNumberIds) {
  1899. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  1900. // 开电
  1901. // Boolean aBoolean = electricEquipmentService.openMeterControl(houseNumber.getElectricEquipmentId());
  1902. // if (!aBoolean) {
  1903. // return CommonResult.fail("开电失败");
  1904. // }
  1905. houseNumber.setElectricType("1");
  1906. list.add(houseNumber);
  1907. }
  1908. houseNumberService.updateBatchById(list);
  1909. return CommonResult.ok();
  1910. }
  1911. }