HouseNumberStateController.java 100 KB

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