AppHotelCouponAction.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. package com.happy.action;
  2. import com.happy.Model.Booking;
  3. import com.happy.Model.HotelCoupon;
  4. import com.happy.Model.HotelCouponStatus;
  5. import com.happy.Until.DateUtil;
  6. import com.happy.Until.Func;
  7. import com.happy.Until.GetHttpParam;
  8. import com.happy.Until.ResUtil;
  9. import com.happy.dto.*;
  10. import com.happy.service.*;
  11. import com.happy.vo.*;
  12. import com.opensymphony.xwork2.ActionSupport;
  13. import net.sf.json.JSONObject;
  14. import org.apache.struts2.ServletActionContext;
  15. import org.apache.struts2.interceptor.ServletRequestAware;
  16. import org.springframework.util.ObjectUtils;
  17. import javax.annotation.Resource;
  18. import javax.servlet.http.HttpServletRequest;
  19. import javax.servlet.http.HttpServletResponse;
  20. import java.math.BigDecimal;
  21. import java.util.Date;
  22. import java.util.List;
  23. public class AppHotelCouponAction extends ActionSupport implements ServletRequestAware {
  24. public HttpServletRequest request;
  25. public HttpServletResponse response;
  26. public HttpServletRequest getRequest() {
  27. return request;
  28. }
  29. public void setRequest(HttpServletRequest request) {
  30. this.request = request;
  31. }
  32. @Override
  33. public void setServletRequest(HttpServletRequest request) {
  34. this.request = request;
  35. }
  36. public HttpServletResponse getResponse() {
  37. return response;
  38. }
  39. public void setResponse(HttpServletResponse response) {
  40. this.response = response;
  41. }
  42. @Resource
  43. HotelCoupomService hotelCoupomService;
  44. public int page; // 当前页
  45. public int rows;// 每页显示的行数rows
  46. public String types; //状态,1,2显示全部,1带金券,2折扣券
  47. public int getPage() {
  48. return page;
  49. }
  50. public void setPage(int page) {
  51. this.page = page;
  52. }
  53. public int getRows() {
  54. return rows;
  55. }
  56. public void setRows(int rows) {
  57. this.rows = rows;
  58. }
  59. public String getTypes() {
  60. return types;
  61. }
  62. public void setTypes(String types) {
  63. this.types = types;
  64. }
  65. public String hotelIds;
  66. public String getHotelIds() {
  67. return hotelIds;
  68. }
  69. public void setHotelIds(String hotelIds) {
  70. this.hotelIds = hotelIds;
  71. }
  72. public String userId;
  73. public int type;
  74. public String getUserId() {
  75. return userId;
  76. }
  77. public void setUserId(String userId) {
  78. this.userId = userId;
  79. }
  80. public int getType() {
  81. return type;
  82. }
  83. public void setType(int type) {
  84. this.type = type;
  85. }
  86. private String hotelId;
  87. public String getHotelId() {
  88. return hotelId;
  89. }
  90. public void setHotelId(String hotelId) {
  91. this.hotelId = hotelId;
  92. }
  93. private String complaintId;
  94. private String bookingId;
  95. public String getComplaintId() {
  96. return complaintId;
  97. }
  98. public void setComplaintId(String complaintId) {
  99. this.complaintId = complaintId;
  100. }
  101. public String getBookingId() {
  102. return bookingId;
  103. }
  104. public void setBookingId(String bookingId) {
  105. this.bookingId = bookingId;
  106. }
  107. public Double totalPrice;
  108. public Double getTotalPrice() {
  109. return totalPrice;
  110. }
  111. public void setTotalPrice(Double totalPrice) {
  112. this.totalPrice = totalPrice;
  113. }
  114. @Resource
  115. BookService bookService;
  116. @Resource
  117. HotelCoupomStatusService hotelCoupomStatusService;
  118. /**
  119. * 我的卡券
  120. *
  121. * @return
  122. */
  123. public JSONObject cardCouponPage() {
  124. JSONObject jsonObject = new JSONObject();
  125. System.out.println("进入我的卡券接口");
  126. if (Func.checkNull(types) || Func.checkNull(userId)) {
  127. jsonObject.put("code", 400);
  128. jsonObject.put("success", false);
  129. jsonObject.put("message", "未传入usersId数据---complaintPage");
  130. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  131. return null;
  132. }
  133. System.out.println("进入我的卡券接口1");
  134. if (page <= 0 || rows <= 0) {
  135. jsonObject.put("code", 400);
  136. jsonObject.put("success", false);
  137. jsonObject.put("message", "未传入page,rows数据---evaluatePage");
  138. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  139. return null;
  140. }
  141. System.out.println("进入我的卡券接口2");
  142. IPage<CardCouponPageVo> iPage = hotelCoupomService.cardCouponPage(types, userId, page, rows);
  143. System.out.println("进入我的卡券接口3");
  144. jsonObject.put("code", 200);
  145. jsonObject.put("success", true);
  146. jsonObject.put("message", "成功");
  147. jsonObject.put("page", iPage);
  148. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  149. return null;
  150. }
  151. /**
  152. * 领券中心
  153. *
  154. * @return
  155. */
  156. public JSONObject couponCollection() {
  157. JSONObject jsonObject = new JSONObject();
  158. if (page <= 0 || rows <= 0||Func.checkNull(userId)) {
  159. jsonObject.put("code", 400);
  160. jsonObject.put("success", false);
  161. jsonObject.put("message", "未传入page,rows数据---evaluatePage");
  162. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  163. return null;
  164. }
  165. String date = DateUtil.getFormatPaternDate(new Date());
  166. IPage<CouponCollectionVo> iPage = hotelCoupomService.couponCollection(date, page, rows,userId);
  167. jsonObject.put("code", 200);
  168. jsonObject.put("success", true);
  169. jsonObject.put("message", "成功");
  170. jsonObject.put("page", iPage);
  171. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  172. return null;
  173. }
  174. /**
  175. * 指定名宿
  176. *
  177. * @return
  178. */
  179. public JSONObject designatedHotel() {
  180. JSONObject jsonObject = new JSONObject();
  181. if (Func.checkNull(hotelIds)) {
  182. jsonObject.put("code", 400);
  183. jsonObject.put("success", false);
  184. jsonObject.put("message", "未传入hotelIds数据---designatedHotel");
  185. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  186. return null;
  187. }
  188. //根据id找对应的名字
  189. DesignatedHotelVo vo = hotelCoupomService.designatedHotel(hotelIds);
  190. jsonObject.put("code", 200);
  191. jsonObject.put("success", true);
  192. jsonObject.put("message", "成功");
  193. jsonObject.put("data", vo);
  194. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  195. return null;
  196. }
  197. /**
  198. * 领券
  199. *
  200. * @return
  201. */
  202. public JSONObject getCoupon() {
  203. com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
  204. com.alibaba.fastjson.JSONObject json = GetHttpParam.getHttpParam(request);
  205. if (json == null) {
  206. jsonObject.put("code", 400);
  207. jsonObject.put("success", false);
  208. jsonObject.put("message", "缺少数据---getCoupon");
  209. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  210. return null;
  211. }
  212. HotelCouponStatus hotelCouponStatus = com.alibaba.fastjson.JSONObject.parseObject(json.toString(), HotelCouponStatus.class);
  213. String complaintId = hotelCouponStatus.getComplaintId();
  214. if (hotelCouponStatus == null || Func.checkNull(complaintId)) {
  215. jsonObject.put("code", 400);
  216. jsonObject.put("success", false);
  217. jsonObject.put("message", "缺少数据---getCoupon");
  218. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  219. return null;
  220. }
  221. // 通过优惠券id判断领券的张数是否大于等于每人限领次数,并且剩余张数不能为0
  222. Boolean quota = hotelCoupomService.quota(complaintId);
  223. if (!quota) {
  224. jsonObject.put("code", 400);
  225. jsonObject.put("success", false);
  226. jsonObject.put("message", "此券领取次数已达上限");
  227. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  228. return null;
  229. }
  230. // 领取优惠券
  231. int num = hotelCoupomService.coupon(hotelCouponStatus);
  232. if (num > 0) {
  233. jsonObject.put("code", 200);
  234. jsonObject.put("message", "领取成功");
  235. jsonObject.put("success", true);
  236. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  237. return null;
  238. }
  239. jsonObject.put("message", "未知异常");
  240. jsonObject.put("success", false);
  241. jsonObject.put("code", 205);
  242. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  243. return null;
  244. }
  245. /**
  246. * 可用优惠券
  247. *
  248. * @return
  249. */
  250. public JSONObject usefulCoupon() {
  251. JSONObject jsonObject = new JSONObject();
  252. if (Func.checkNull(hotelId) || Func.checkNull(userId) || totalPrice==null) {
  253. jsonObject.put("code", 400);
  254. jsonObject.put("success", false);
  255. jsonObject.put("message", "缺少数据hotelId,userId,totalPrice---usefulCoupon");
  256. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  257. return null;
  258. }
  259. if (page <= 0 || rows <= 0) {
  260. jsonObject.put("code", 400);
  261. jsonObject.put("success", false);
  262. jsonObject.put("message", "未传入page,rows数据---usefulCoupon");
  263. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  264. return null;
  265. }
  266. IPage<UsefulCouponVo> iPage = hotelCoupomService.usefulCoupon(hotelId, userId, page, rows,totalPrice);
  267. jsonObject.put("code", 200);
  268. jsonObject.put("success", true);
  269. jsonObject.put("message", "成功");
  270. jsonObject.put("page", iPage);
  271. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  272. return null;
  273. }
  274. /**
  275. * 使用优惠券
  276. *
  277. * @return
  278. */
  279. public JSONObject useCoupons() {
  280. JSONObject jsonObject = new JSONObject();
  281. com.alibaba.fastjson.JSONObject json = GetHttpParam.getHttpParam(request);
  282. if (json == null) {
  283. jsonObject.put("code", 400);
  284. jsonObject.put("success", false);
  285. jsonObject.put("message", "缺少数据---getCoupon");
  286. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  287. return null;
  288. }
  289. UseCouponsDto dto = com.alibaba.fastjson.JSONObject.parseObject(json.toString(), UseCouponsDto.class);
  290. if (dto == null) {
  291. jsonObject.put("code", 400);
  292. jsonObject.put("success", false);
  293. jsonObject.put("message", "缺少数据---useCoupons");
  294. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  295. return null;
  296. }
  297. String id = dto.getId();
  298. Double totalPrice = dto.getTotalPrice();
  299. String complaintId = dto.getComplaintId();
  300. if (Func.checkNull(complaintId) && totalPrice <= 0 && totalPrice == null && Func.checkNull(id)) {
  301. jsonObject.put("code", 400);
  302. jsonObject.put("success", false);
  303. jsonObject.put("message", "缺少数据id,complaintId,bookingId---useCoupons");
  304. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  305. return null;
  306. }
  307. UseCouponsVo useCouponsVo = new UseCouponsVo();
  308. useCouponsVo.setComplaintId(complaintId);
  309. useCouponsVo.setId(id);
  310. // 优惠券
  311. HotelCoupon hotelCoupon = hotelCoupomService.getById(complaintId);
  312. // 优惠券状态,1.优惠卷,需看是否满足满减 2.折扣卷,需判断是否大于最大减免金额
  313. Integer type1 = hotelCoupon.getType();
  314. // 订单金额
  315. BigDecimal houseTotalPriceBigDecimal = new BigDecimal(totalPrice);
  316. useCouponsVo.setCapitalSum(totalPrice);
  317. if (1 == type1) {
  318. // 满减金额
  319. Double meetPrice = hotelCoupon.getMeetPrice();
  320. BigDecimal meetPriceBigDecimal = new BigDecimal(meetPrice);
  321. if (meetPrice > totalPrice) {
  322. BigDecimal subtract = meetPriceBigDecimal.subtract(houseTotalPriceBigDecimal);
  323. double v = subtract.doubleValue();
  324. jsonObject.put("code", 400);
  325. jsonObject.put("success", false);
  326. jsonObject.put("message", "还差" + v + "元可使用");
  327. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  328. return null;
  329. }
  330. // 减免金额
  331. Double deductionPrice = hotelCoupon.getDeductionPrice();
  332. BigDecimal deductionPriceBigDecimal = new BigDecimal(deductionPrice);
  333. // 实付金额
  334. BigDecimal subtract = houseTotalPriceBigDecimal.subtract(deductionPriceBigDecimal);
  335. useCouponsVo.setTypeName("优惠卷");
  336. useCouponsVo.setHotelCouponName(hotelCoupon.getName());
  337. useCouponsVo.setDiscountAmount(deductionPrice);
  338. } else if (2 == type1) {
  339. // 满减金额
  340. Double meetPrice = hotelCoupon.getMeetPrice();
  341. if (meetPrice==null||meetPrice<0) {
  342. meetPrice=0.0;
  343. }
  344. BigDecimal meetPriceBigDecimal = new BigDecimal(meetPrice);
  345. if (meetPrice > totalPrice) {
  346. BigDecimal subtract = meetPriceBigDecimal.subtract(houseTotalPriceBigDecimal);
  347. double v = subtract.doubleValue();
  348. jsonObject.put("code", 400);
  349. jsonObject.put("success", false);
  350. jsonObject.put("message", "还差" + v + "元可使用");
  351. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  352. return null;
  353. }
  354. // 享受的折扣
  355. Double rebatePrice = hotelCoupon.getRebatePrice();
  356. BigDecimal rebatePriceBigDecimal = new BigDecimal(rebatePrice/10);
  357. // 最大减免金额
  358. Double maxDeduction = hotelCoupon.getMaxDeduction();
  359. BigDecimal maxDeductionBigDecimal = new BigDecimal(maxDeduction);
  360. // 折扣后的价格
  361. BigDecimal bigDecimal = houseTotalPriceBigDecimal.multiply(rebatePriceBigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP);
  362. double v = bigDecimal.doubleValue();
  363. // 减去最大折扣后的价格
  364. BigDecimal subtract = houseTotalPriceBigDecimal.subtract(maxDeductionBigDecimal);
  365. double v1 = subtract.doubleValue();
  366. if (v > v1) {
  367. BigDecimal subtract1 = houseTotalPriceBigDecimal.subtract(bigDecimal);
  368. useCouponsVo.setDiscountAmount(subtract1.doubleValue());
  369. } else if (v < v1) {
  370. useCouponsVo.setDiscountAmount(maxDeduction);
  371. }else if (v==v1){
  372. useCouponsVo.setDiscountAmount(maxDeduction);
  373. }
  374. useCouponsVo.setTypeName("折扣卷");
  375. useCouponsVo.setHotelCouponName(hotelCoupon.getName());
  376. } else {
  377. jsonObject.put("message", "未知异常");
  378. jsonObject.put("success", false);
  379. jsonObject.put("code", 205);
  380. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  381. return null;
  382. }
  383. jsonObject.put("code", 200);
  384. jsonObject.put("success", true);
  385. jsonObject.put("message", "成功");
  386. jsonObject.put("data", useCouponsVo);
  387. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  388. return null;
  389. }
  390. /**
  391. * 锁定优惠券
  392. *
  393. * @return
  394. */
  395. public JSONObject lockCoupon() {
  396. JSONObject jsonObject = new JSONObject();
  397. com.alibaba.fastjson.JSONObject json = GetHttpParam.getHttpParam(request);
  398. if (json == null) {
  399. jsonObject.put("code", 400);
  400. jsonObject.put("success", false);
  401. jsonObject.put("message", "缺少数据---getCoupon");
  402. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  403. return null;
  404. }
  405. CancelUseCouponsDto dto = com.alibaba.fastjson.JSONObject.parseObject(json.toString(), CancelUseCouponsDto.class);
  406. if (dto == null) {
  407. jsonObject.put("code", 400);
  408. jsonObject.put("success", false);
  409. jsonObject.put("message", "缺少数据---cancelUseCoupons");
  410. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  411. return null;
  412. }
  413. //无优惠券金额
  414. Double discountAmount = dto.getCapitalSum();
  415. // 优惠券id
  416. String complaintId = dto.getComplaintId();
  417. // 领取的优惠券id
  418. String id = dto.getId();
  419. if (discountAmount != null && discountAmount > 0 && Func.checkNull(complaintId) && Func.checkNull(id)) {
  420. jsonObject.put("code", 400);
  421. jsonObject.put("success", false);
  422. jsonObject.put("message", "缺少bookingId,discountAmount,complaintId,id数据---cancelUseCoupons");
  423. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  424. return null;
  425. }
  426. // 优惠券
  427. HotelCoupon hotelCoupon = hotelCoupomService.getById(complaintId);
  428. // 领取的优惠
  429. HotelCouponStatus hotelCouponStatus = hotelCoupomStatusService.getById(id);
  430. hotelCoupon.setReversedNumber(hotelCoupon.getReversedNumber() + 1);
  431. hotelCouponStatus.setStatus(2);
  432. int i = hotelCoupomService.useCoupons( hotelCoupon, hotelCouponStatus);
  433. if (i > 0) {
  434. jsonObject.put("code", 200);
  435. jsonObject.put("success", true);
  436. jsonObject.put("message", "成功");
  437. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  438. return null;
  439. }
  440. jsonObject.put("message", "未知异常");
  441. jsonObject.put("success", false);
  442. jsonObject.put("code", 205);
  443. ResUtil.writeJson(ServletActionContext.getResponse(), jsonObject.toString());
  444. return null;
  445. }
  446. }