HouseNumberStateController.java 105 KB

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