HouseNumberStateController.java 101 KB

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