TsfOrderController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. package com.style24.front.biz.web;
  2. import java.util.Collection;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.ResponseBody;
  9. import org.springframework.web.servlet.ModelAndView;
  10. import org.springframework.web.servlet.mvc.support.RedirectAttributes;
  11. import com.gagaframework.web.parameter.GagaMap;
  12. import com.style24.core.biz.service.TscFreegiftService;
  13. import com.style24.core.biz.service.TscOrderService;
  14. import com.style24.core.support.message.TscMessageByLocale;
  15. import com.style24.front.biz.service.TsfCartService;
  16. import com.style24.front.biz.service.TsfOrderService;
  17. import com.style24.front.support.controller.TsfBaseController;
  18. import com.style24.front.support.security.session.TsfSession;
  19. import com.style24.persistence.domain.Order;
  20. import com.style24.persistence.domain.Payment;
  21. import lombok.extern.slf4j.Slf4j;
  22. /**
  23. * 주문 Controller
  24. *
  25. * @author gagamel
  26. * @since 2020. 12. 29
  27. */
  28. @Controller
  29. @RequestMapping("/order")
  30. @Slf4j
  31. public class TsfOrderController extends TsfBaseController {
  32. @Autowired
  33. private TscMessageByLocale message;
  34. @Autowired
  35. private TscOrderService coreOrderService;
  36. @Autowired
  37. private TsfOrderService orderService;
  38. @Autowired
  39. private TscFreegiftService coreFreegiftService;
  40. @Autowired
  41. private TsfCartService cartService;
  42. /**
  43. * 회원, 비회원 주문페이지
  44. *
  45. * @param
  46. * @return
  47. * @author jsh77b
  48. * @since 2021. 02. 02
  49. */
  50. @RequestMapping(value = "/noMember")
  51. public ModelAndView orderNoMember(Order order, RedirectAttributes redirectAttributes) {
  52. ModelAndView mav = new ModelAndView();
  53. String rtnView = "";
  54. // 비회원 주문시 로직 정리
  55. // @ web 인 경우에는 고객정보 입력 화면 후 주문서 이동 후 본인인중
  56. // @ web 의 경우에는 입력한 고객정보와 인증받은 고객정보가 다른경우 고객정보 업데이트
  57. // @ mobile 인 경우에는 본인인증 후 주문서 이동
  58. // 배송완료 후 14일 자동구매확정
  59. // TODO 임시 장바구니
  60. // 2. 장바구니시퀀스 배열 등록 (장바구니 상품 정보 조회)
  61. int[] arr = {11,77,8};
  62. order.setCartSqArr(arr);
  63. order.setShotDelvYn("Y");
  64. mav.addObject("order" , order); // 주문정보
  65. mav.addObject("isLogin" , TsfSession.isLogin()); // 로그인여부
  66. mav.setViewName(super.getDeviceViewName("order/OrderNoMember")); // 비회원주문서화면
  67. return mav;
  68. }
  69. /**
  70. * 주문페이지
  71. *
  72. * @param
  73. * @return
  74. * @author jsh77b
  75. * @since 2021. 02. 02
  76. */
  77. @SuppressWarnings({ "unchecked", "null" })
  78. @RequestMapping(value = "/form")
  79. public ModelAndView orderForm(Order order) {
  80. ModelAndView mav = new ModelAndView();
  81. // TODO
  82. // 1.비회주문, 회원 주문 판단 로직, 고객정보 세션 판단
  83. // 세션고객정보가 존재하면 회원주문 없으면 비회원 주문
  84. // 임시 jsessionId
  85. String jsessionId = "aaec62cc-5f91-47bb-ba65-ebc9a61385cf";
  86. Boolean noMember = true;
  87. // TODO 로그인체크 로직 추가
  88. // 1.0 회원, 비회원 여부 판단
  89. if (TsfSession.getInfo().getCustNo() == null) {
  90. order.setJsessionId(jsessionId);
  91. } else {
  92. noMember = false;
  93. order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
  94. }
  95. // TODO
  96. // 1.1 카트시퀀스가 없을때 처리 장바구니로 이동
  97. if (order.getCartSqArr() == null) {
  98. mav.setViewName("redirect:/order/noMember"); // 비회원주문서화면
  99. return mav;
  100. }
  101. Order custemerInfo = new Order();
  102. Order deliveryAddrInfo = new Order();
  103. // TODO 로그인체크 로직 추가
  104. if (noMember) {
  105. // 1.1 주문고객 정보조회
  106. custemerInfo.setCustNm(order.getCustNm());
  107. custemerInfo.setCellPhnno(order.getCellPhnno());
  108. custemerInfo.setEmail(order.getEmail());
  109. // 1.2 배송지 정보조회 (기본배송지)
  110. deliveryAddrInfo.setDelvAddrNm(order.getCustNm());
  111. deliveryAddrInfo.setRecipZipcode(order.getRecipZipcode());
  112. deliveryAddrInfo.setRecipBaseAddr(order.getRecipBaseAddr());
  113. deliveryAddrInfo.setRecipDtlAddr(order.getRecipDtlAddr());
  114. deliveryAddrInfo.setDelvMemo("직접받고 부재시 문 앞");
  115. } else {
  116. // 1.1 주문고객 정보조회
  117. custemerInfo = coreOrderService.getCustemerInfo(order);
  118. // 1.2 배송지 정보조회 (기본배송지)
  119. deliveryAddrInfo = coreOrderService.getDeliveryAddrInfo(order);
  120. if (deliveryAddrInfo == null) {
  121. deliveryAddrInfo = new Order();
  122. deliveryAddrInfo.setDelvAddrNm(custemerInfo.getCustNm());
  123. deliveryAddrInfo.setRecipZipcode("");
  124. deliveryAddrInfo.setRecipBaseAddr("");
  125. deliveryAddrInfo.setRecipDtlAddr("");
  126. deliveryAddrInfo.setDelvMemo("직접받고 부재시 문 앞");
  127. }
  128. }
  129. // TODO 임시 장바구니
  130. // 2. 장바구니시퀀스 배열 등록 (장바구니 상품 정보 조회)
  131. // 2.1 배송단위별 상품 목록 조회 (장바구니)
  132. Collection<Order> tmtbGoodsApplyList = cartService.getMoreBetterAmtList(order);
  133. // 2.1.0 상품금액, 선포인트, 다다익선할인금액
  134. GagaMap goodsDcAmtMap = coreOrderService.getGoodsDcAmt(tmtbGoodsApplyList);
  135. // 2.2 배송단위별 장바구니 상품 건수 조회 (장바구니상품)
  136. GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList);
  137. // 3. 할인구간정보조회
  138. // 3.2 상품쿠폰, 장바구니쿠폰 목록 조회
  139. GagaMap goodsCartCpnMap = coreOrderService.getGoodsCartCpnApplyGoodsList(order);
  140. Collection<Order> goodsCpnList = (Collection<Order>) goodsCartCpnMap.get("goodsCpnList");
  141. Collection<Order> cartCpnList = (Collection<Order>) goodsCartCpnMap.get("cartCpnList");
  142. // 3.2.1 상품기준 ---> 상품쿠폰 적용된 상품 목록
  143. Collection<Order> goodsApplyCpnList = coreOrderService.getGoodsCpnApplyList(tmtbGoodsApplyList, goodsCpnList);
  144. // 3.2.2 장바구니쿠폰기준 ---> 상품목록
  145. cartCpnList = coreOrderService.getCartCpnApplyList(tmtbGoodsApplyList, cartCpnList);
  146. // 3.3 배송비쿠폰목록 조회
  147. Collection<Order> delvCpnList = coreOrderService.getDelvCpnList(order);
  148. // 3.4 고객 보유 포인트 정보 조회
  149. int rmPntAmt = coreOrderService.getCustPointInfo(order);
  150. // 3.5 고객 보유 상품권 정보 조회
  151. int rmGfcdAmt = coreOrderService.getGiftcardInfo(order);
  152. // 4. 사은품 정보
  153. // 4.1 장바구니상품 사음품 적용 정보 조회
  154. GagaMap resultMap = coreFreegiftService.getOrderFreegift(order);
  155. // 101. 상품정보
  156. mav.addObject("cartGoodsList" , tmtbGoodsApplyList); // 장바구니상품목록 (즉시할인쿠폰적용)
  157. mav.addObject("delvTotCnt" , delvOrderMap.get("delvTotCnt")); // 총상품건수
  158. mav.addObject("delvFeeTotCnt" , delvOrderMap.get("delvFeeTotCnt")); // 총배송타입건수
  159. mav.addObject("wmsCnt" , delvOrderMap.get("wmsCnt")); // 자사상품건수
  160. mav.addObject("resCnt" , delvOrderMap.get("resCnt")); // 자사예약상품건수
  161. mav.addObject("delvCnt" , delvOrderMap.get("delvCnt")); // 입점업체상품건수
  162. mav.addObject("shotCartList" , delvOrderMap.get("shotCartList")); // 자사총알배송상품목록
  163. mav.addObject("wmsCartList" , delvOrderMap.get("wmsCartList")); // 자사일반배송상품목록
  164. mav.addObject("delvCartList" , delvOrderMap.get("delvCartList")); // 입점업체상품목록
  165. mav.addObject("resCartList" , delvOrderMap.get("resCartList")); // 자사예약배송상품목록
  166. mav.addObject("delvAllCartList" , delvOrderMap.get("delvAllCartList")); // 전체배송목록
  167. mav.addObject("sumDelvFee" , delvOrderMap.get("sumDelvFee")); // 배송비합계
  168. // 102. 고객정보
  169. mav.addObject("custemerInfo" , custemerInfo); // 고객정보
  170. mav.addObject("deliveryAddrInfo" , deliveryAddrInfo); // 배송지정보
  171. mav.addObject("shotDelvYn" , order.getShotDelvYn()); // 장바구니 총알배송여부
  172. // 103. 할인정보
  173. mav.addObject("tmtbGoodsApplyList" , tmtbGoodsApplyList); // 다다익선상품 적용목록
  174. mav.addObject("goodsApplyCpnList" , goodsApplyCpnList); // 상품적용쿠폰
  175. mav.addObject("cartCpnList" , cartCpnList); // 장바구니쿠폰목록
  176. mav.addObject("delvCpnList" , delvCpnList); // 배송비쿠폰목록
  177. mav.addObject("prePntDcAmt" , goodsDcAmtMap.get("prePntDcAmt")); // 선포인트정보
  178. mav.addObject("goodsSumAmt" , goodsDcAmtMap.get("goodsSumAmt")); // 상품금액합계
  179. mav.addObject("tmtbDcSumAmt" , goodsDcAmtMap.get("tmtbDcSumAmt")); // 다다익선할인금액합계
  180. mav.addObject("rmPntAmt" , rmPntAmt); // 고객포인트정보
  181. mav.addObject("rmGfcdAmt" , rmGfcdAmt); // 고객상품권정보
  182. // 104. 사은품정보
  183. mav.addObject("freegiftGoodsList" , resultMap.get("freegiftGoodsList")); // 사은품상품정보 목록
  184. mav.addObject("freegiftList" , resultMap.get("freegiftList")); // 사은품정보 목록
  185. mav.setViewName(super.getDeviceViewName("order/OrderForm"));
  186. return mav;
  187. }
  188. /**
  189. * 총알배송 가능 지역 체크
  190. *
  191. * @param
  192. * @return
  193. * @author jsh77b
  194. * @since 2021. 02. 08
  195. */
  196. @ResponseBody
  197. @RequestMapping(value = "/create/order")
  198. public ModelAndView createOrder(Order order) {
  199. ModelAndView mav = new ModelAndView();
  200. mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
  201. return mav;
  202. }
  203. /**
  204. * 주문페이지
  205. *
  206. * @param
  207. * @return
  208. * @author jsh77b
  209. * @since 2021. 02. 02
  210. */
  211. @SuppressWarnings({ "unchecked", "null" })
  212. @RequestMapping(value = "/pay/result/response")
  213. public ModelAndView payResultResponse(Payment param, HttpServletRequest request, HttpServletResponse response) {
  214. ModelAndView mav = new ModelAndView();
  215. orderService.kcpTest(param, request, response);
  216. mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
  217. return mav;
  218. }
  219. /**
  220. * 총알배송 가능 지역 체크
  221. *
  222. * @param
  223. * @return
  224. * @author jsh77b
  225. * @since 2021. 02. 08
  226. */
  227. @ResponseBody
  228. @RequestMapping(value = "/getDailyDeliveryCheck")
  229. public int getDailyDeliveryCheck(Order order) {
  230. // 1. 총알배송가능 지역, 총알배송 가능 시간 체크
  231. int rtn = coreOrderService.getDailyDeliveryCheck(order);
  232. return rtn;
  233. }
  234. /**
  235. * 배송지정보변경팝업
  236. *
  237. * @param
  238. * @return
  239. * @author jsh77b
  240. * @since 2021. 02. 17
  241. */
  242. @ResponseBody
  243. @RequestMapping(value = "/delvAddrChangePop")
  244. public ModelAndView delvAddrChangePop(Order order) {
  245. ModelAndView mav = new ModelAndView();
  246. mav.setViewName(super.getDeviceViewName("order/OrderDelvAddrChangePop"));
  247. return mav;
  248. }
  249. /**
  250. * 배송지정보수정팝업
  251. *
  252. * @param
  253. * @return
  254. * @author jsh77b
  255. * @since 2021. 02. 17
  256. */
  257. @ResponseBody
  258. @RequestMapping(value = "/delvAddrModifyPop")
  259. public ModelAndView delvAddrModifyPop(Order order) {
  260. ModelAndView mav = new ModelAndView();
  261. mav.setViewName(super.getDeviceViewName("order/OrderDelvAddrModifyPop"));
  262. return mav;
  263. }
  264. /**
  265. * 배송지정보추가팝업
  266. *
  267. * @param
  268. * @return
  269. * @author jsh77b
  270. * @since 2021. 02. 17
  271. */
  272. @ResponseBody
  273. @RequestMapping(value = "/delvAddrAddPop")
  274. public ModelAndView delvAddrAddPop(Order order) {
  275. ModelAndView mav = new ModelAndView();
  276. mav.setViewName(super.getDeviceViewName("order/OrderDelvAddrAddPop"));
  277. return mav;
  278. }
  279. /**
  280. * 배송지메모변경팝업
  281. *
  282. * @param
  283. * @return
  284. * @author jsh77b
  285. * @since 2021. 02. 17
  286. */
  287. @ResponseBody
  288. @RequestMapping(value = "/delvMemoChangePop")
  289. public ModelAndView delvMemoChangePop(Order order) {
  290. ModelAndView mav = new ModelAndView();
  291. mav.setViewName(super.getDeviceViewName("order/OrderDelvMemoChangePop"));
  292. return mav;
  293. }
  294. /**
  295. * 사은품안내팝업
  296. *
  297. * @param
  298. * @return
  299. * @author jsh77b
  300. * @since 2021. 02. 17
  301. */
  302. @ResponseBody
  303. @RequestMapping(value = "/freegiftInfoPop")
  304. public ModelAndView freegiftInfoPop(Order order) {
  305. ModelAndView mav = new ModelAndView();
  306. mav.setViewName(super.getDeviceViewName("order/OrderFreegiftInfoPop"));
  307. return mav;
  308. }
  309. }