TsfOrderController.java 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996
  1. package com.style24.front.biz.web;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.core.env.Environment;
  8. import org.springframework.stereotype.Controller;
  9. import org.springframework.ui.Model;
  10. import org.springframework.web.bind.annotation.PostMapping;
  11. import org.springframework.web.bind.annotation.RequestBody;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestParam;
  14. import org.springframework.web.bind.annotation.ResponseBody;
  15. import org.springframework.web.servlet.ModelAndView;
  16. import org.springframework.web.servlet.mvc.support.RedirectAttributes;
  17. import org.thymeleaf.util.StringUtils;
  18. import com.gagaframework.web.parameter.GagaMap;
  19. import com.gagaframework.web.rest.server.GagaResponseStatus;
  20. import com.style24.core.biz.service.TscFreegiftService;
  21. import com.style24.core.biz.service.TscKakaoPayService;
  22. import com.style24.core.biz.service.TscNaverPayService;
  23. import com.style24.core.biz.service.TscOrderService;
  24. import com.style24.core.biz.thirdparty.KakaoPayApi;
  25. import com.style24.core.support.env.TscConstants;
  26. import com.style24.core.support.message.TscMessageByLocale;
  27. import com.style24.front.biz.service.TsfCartService;
  28. import com.style24.front.biz.service.TsfOrderService;
  29. import com.style24.front.support.controller.TsfBaseController;
  30. import com.style24.front.support.security.session.TsfSession;
  31. import com.style24.persistence.domain.KakaoPay;
  32. import com.style24.persistence.domain.Order;
  33. import com.style24.persistence.domain.Payment;
  34. import lombok.extern.slf4j.Slf4j;
  35. /**
  36. * 주문 Controller
  37. *
  38. * @author gagamel
  39. * @since 2020. 12. 29
  40. */
  41. @Controller
  42. @RequestMapping("/order")
  43. @Slf4j
  44. public class TsfOrderController extends TsfBaseController {
  45. @Autowired
  46. private TscMessageByLocale message;
  47. @Autowired
  48. private TscOrderService coreOrderService;
  49. @Autowired
  50. private TsfOrderService orderService;
  51. @Autowired
  52. private TscFreegiftService coreFreegiftService;
  53. @Autowired
  54. private TsfCartService cartService;
  55. @Autowired
  56. private TscKakaoPayService kakaoPayService;
  57. @Autowired
  58. private TscNaverPayService naverPayService;
  59. @Autowired
  60. private Environment env;
  61. /**
  62. * 회원, 비회원 주문페이지
  63. *
  64. * @param
  65. * @return
  66. * @author jsh77b
  67. * @since 2021. 02. 02
  68. */
  69. @RequestMapping(value = "/noMember")
  70. public ModelAndView orderNoMember(Order order, RedirectAttributes redirectAttributes) {
  71. ModelAndView mav = new ModelAndView();
  72. // 비회원 주문시 로직 정리
  73. // @ web 인 경우에는 고객정보 입력 화면 후 주문서 이동 후 본인인중
  74. // @ web 의 경우에는 입력한 고객정보와 인증받은 고객정보가 다른경우 고객정보 업데이트
  75. // @ mobile 인 경우에는 본인인증 후 주문서 이동
  76. // 배송완료 후 14일 자동구매확정
  77. // TODO 임시 장바구니
  78. // 2. 장바구니시퀀스 배열 등록 (장바구니 상품 정보 조회)
  79. int[] arr = {11,77,8};
  80. order.setCartSqArr(arr);
  81. order.setShotDelvYn("Y");
  82. mav.addObject("order" , order); // 주문정보
  83. mav.addObject("isLogin" , TsfSession.isLogin()); // 로그인여부
  84. mav.setViewName(super.getDeviceViewName("order/OrderNoMember")); // 비회원주문서화면
  85. return mav;
  86. }
  87. /**
  88. * 주문페이지
  89. *
  90. * @param
  91. * @return
  92. * @author jsh77b
  93. * @since 2021. 02. 02
  94. */
  95. @SuppressWarnings({ "unchecked", "null" })
  96. @RequestMapping(value = "/form")
  97. public ModelAndView orderForm(Order order) {
  98. ModelAndView mav = new ModelAndView();
  99. // TODO
  100. // 1.비회주문, 회원 주문 판단 로직, 고객정보 세션 판단
  101. // 세션고객정보가 존재하면 회원주문 없으면 비회원 주문
  102. // 1. 로그인체크 후 custNo 설정
  103. if (TsfSession.isLogin()) {
  104. order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
  105. } else {
  106. order.setJsessionId(TsfSession.getSessionId());
  107. }
  108. // TODO
  109. // 1.1 카트시퀀스가 정보가 없을때 처리 장바구니로 이동
  110. if (order.getCartSqArr() == null) {
  111. mav.setViewName("redirect:/order/noMember"); // 비회원주문서화면
  112. return mav;
  113. }
  114. // 2. 로그인정보 체크 후 비회원 고객정보 설정
  115. if (TsfSession.isLogin()) {
  116. order.setCustNm("");
  117. order.setCellPhnno("");
  118. order.setEmail("");
  119. order.setDelvAddrNm("");
  120. order.setRecipZipcode("");
  121. order.setRecipBaseAddr("");
  122. order.setRecipDtlAddr("");
  123. }
  124. // TODO 임시 장바구니
  125. // 2. 장바구니시퀀스 배열 등록 (장바구니 상품 정보 조회)
  126. // 2.1 배송단위별 상품 목록 조회 (장바구니)
  127. Collection<Order> tmtbGoodsApplyList = cartService.getMoreBetterAmtList(order);
  128. // 2.1.0 상품금액, 선포인트, 다다익선할인금액
  129. GagaMap goodsDcAmtMap = coreOrderService.getGoodsDcAmt(tmtbGoodsApplyList);
  130. // 2.2 배송단위별 장바구니 상품 건수 조회 (장바구니상품)
  131. GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList);
  132. // 3. 할인구간정보조회
  133. // 3.2 상품쿠폰, 장바구니쿠폰 목록 조회
  134. GagaMap goodsCartCpnMap = coreOrderService.getGoodsCartCpnApplyGoodsList(order);
  135. Collection<Order> goodsCpnList = (Collection<Order>) goodsCartCpnMap.get("goodsCpnList");
  136. Collection<Order> cartCpnList = (Collection<Order>) goodsCartCpnMap.get("cartCpnList");
  137. // 3.2.1 상품기준 ---> 상품쿠폰 적용된 상품 목록
  138. Collection<Order> goodsApplyCpnList = coreOrderService.getGoodsCpnApplyList(tmtbGoodsApplyList, goodsCpnList);
  139. // 3.2.2 장바구니쿠폰기준 ---> 상품목록
  140. cartCpnList = coreOrderService.getCartCpnApplyList(tmtbGoodsApplyList, cartCpnList);
  141. // 3.3 배송비쿠폰목록 조회
  142. Collection<Order> delvCpnList = coreOrderService.getDelvCpnList(order);
  143. Collection<Order> delvFeeCdList = (Collection<Order>) delvOrderMap.get("delvFeeCdList");
  144. // 3.3.1 배소업체기준 ---> 배송비쿠폰
  145. delvCpnList = coreOrderService.getDelvCpnApplyList(delvFeeCdList, delvCpnList);
  146. // 3.4 고객 보유 포인트 정보 조회
  147. int rmPntAmt = coreOrderService.getCustPointInfo(order);
  148. // 3.5 고객 보유 상품권 정보 조회
  149. int rmGfcdAmt = coreOrderService.getGiftcardInfo(order);
  150. // 101. 상품정보
  151. mav.addObject("cartGoodsList" , tmtbGoodsApplyList); // 장바구니상품목록 (즉시할인쿠폰적용)
  152. mav.addObject("delvTotCnt" , delvOrderMap.get("delvTotCnt")); // 총상품건수
  153. mav.addObject("delvFeeTotCnt" , delvOrderMap.get("delvFeeTotCnt")); // 총배송타입건수
  154. mav.addObject("wmsCnt" , delvOrderMap.get("wmsCnt")); // 자사상품건수
  155. mav.addObject("resCnt" , delvOrderMap.get("resCnt")); // 자사예약상품건수
  156. mav.addObject("delvCnt" , delvOrderMap.get("delvCnt")); // 입점업체상품건수
  157. mav.addObject("shotCartList" , delvOrderMap.get("shotCartList")); // 자사총알배송상품목록
  158. mav.addObject("wmsCartList" , delvOrderMap.get("wmsCartList")); // 자사일반배송상품목록
  159. mav.addObject("delvCartList" , delvOrderMap.get("delvCartList")); // 입점업체상품목록
  160. mav.addObject("resCartList" , delvOrderMap.get("resCartList")); // 자사예약배송상품목록
  161. mav.addObject("delvAllCartList" , delvOrderMap.get("delvAllCartList")); // 전체배송목록
  162. mav.addObject("sumDelvFee" , delvOrderMap.get("sumDelvFee")); // 배송비합계
  163. // 102. 주문정보
  164. mav.addObject("order" , order); // 주문정보
  165. // 103. 할인정보
  166. mav.addObject("tmtbGoodsApplyList" , tmtbGoodsApplyList); // 다다익선상품 적용목록
  167. mav.addObject("orgGoodsSumAmt" , goodsDcAmtMap.get("orgGoodsSumAmt")); // 상품금액합계
  168. mav.addObject("cpn1DcSumAmt" , goodsDcAmtMap.get("cpn1DcSumAmt")); // 즉시할인금액합계
  169. mav.addObject("tmtbDcSumAmt" , goodsDcAmtMap.get("tmtbDcSumAmt")); // 다다익선할인금액합계
  170. mav.addObject("prePntDcAmt" , goodsDcAmtMap.get("prePntDcAmt")); // 선포인트사용가능금액
  171. mav.addObject("rmPntAmt" , rmPntAmt); // 고객포인트정보
  172. mav.addObject("rmGfcdAmt" , rmGfcdAmt); // 고객상품권정보
  173. mav.addObject("savePntSumAmt" , goodsDcAmtMap.get("savePntSumAmt")); // 적립예정포인트합계
  174. mav.setViewName(super.getDeviceViewName("order/OrderForm"));
  175. return mav;
  176. }
  177. /**
  178. * 고객정보조회
  179. *
  180. * @param
  181. * @return
  182. * @author jsh77b
  183. * @since 2021. 02. 17
  184. */
  185. @ResponseBody
  186. @PostMapping("/custemerInfo")
  187. public ModelAndView custemerInfo(@RequestBody Order order) {
  188. Order custemerInfo = new Order();
  189. // 1. 로그인체크 후 custNo 설정
  190. if (TsfSession.isLogin()) {
  191. order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
  192. } else {
  193. order.setJsessionId(TsfSession.getSessionId());
  194. }
  195. // 2. 로그인체크 후 고객정보 설정
  196. if (TsfSession.isLogin()) {
  197. // 2.1 주문고객 정보조회
  198. custemerInfo = coreOrderService.getCustemerInfo(order);
  199. } else {
  200. // 2.1 주문고객 정보조회
  201. custemerInfo.setCustNm(order.getCustNm());
  202. custemerInfo.setCellPhnno(order.getCellPhnno());
  203. custemerInfo.setEmail(order.getEmail());
  204. }
  205. ModelAndView mav = new ModelAndView();
  206. mav.addObject("custemerInfo" , custemerInfo); // 고객정보
  207. mav.addObject("order" , order); // 파라미터
  208. mav.setViewName(super.getDeviceViewName("order/OrderCustemerInfo"));
  209. return mav;
  210. }
  211. /**
  212. * 배송정보조회
  213. *
  214. * @param
  215. * @return
  216. * @author jsh77b
  217. * @since 2021. 02. 17
  218. */
  219. @ResponseBody
  220. @PostMapping("/deliveryAddrInfo")
  221. public ModelAndView deliveryAddrInfo(@RequestBody Order order) {
  222. Order deliveryAddrInfo = new Order();
  223. // 1. 로그인체크 후 custNo 설정
  224. if (TsfSession.isLogin()) {
  225. order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
  226. } else {
  227. order.setJsessionId(TsfSession.getSessionId());
  228. }
  229. // 2. 로그인체크 후 고객정보 설정
  230. if (TsfSession.isLogin()) {
  231. // 2.1 주문고객 정보조회
  232. deliveryAddrInfo = coreOrderService.getDeliveryAddrInfo(order);
  233. if (deliveryAddrInfo == null) {
  234. deliveryAddrInfo = new Order();
  235. deliveryAddrInfo.setDelvAddrNm(deliveryAddrInfo.getCustNm());
  236. deliveryAddrInfo.setRecipZipcode("");
  237. deliveryAddrInfo.setRecipBaseAddr("");
  238. deliveryAddrInfo.setRecipDtlAddr("");
  239. deliveryAddrInfo.setDelvMemo("직접받고 부재시 문 앞");
  240. }
  241. } else {
  242. // 2.1 주문고객 정보조회
  243. deliveryAddrInfo.setDelvAddrNm(order.getCustNm());
  244. deliveryAddrInfo.setRecipZipcode(order.getRecipZipcode());
  245. deliveryAddrInfo.setRecipBaseAddr(order.getRecipBaseAddr());
  246. deliveryAddrInfo.setRecipDtlAddr(order.getRecipDtlAddr());
  247. deliveryAddrInfo.setDelvMemo("직접받고 부재시 문 앞");
  248. }
  249. ModelAndView mav = new ModelAndView();
  250. mav.addObject("deliveryAddrInfo", deliveryAddrInfo); // 배송지정보
  251. mav.addObject("order" , order); // 파라미터
  252. mav.setViewName(super.getDeviceViewName("order/OrderDeliveryAddrInfo"));
  253. return mav;
  254. }
  255. /**
  256. * 사은품정보조회
  257. *
  258. * @param
  259. * @return
  260. * @author jsh77b
  261. * @since 2021. 02. 17
  262. */
  263. @ResponseBody
  264. @PostMapping("/freegiftInfo")
  265. public ModelAndView freegiftInfo(@RequestBody Order order) {
  266. GagaMap resultMap = new GagaMap();
  267. // 1. 로그인체크 후 custNo 설정
  268. if (TsfSession.isLogin()) {
  269. order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
  270. } else {
  271. order.setJsessionId(TsfSession.getSessionId());
  272. }
  273. // 2. 로그인체크 후 정보 설정
  274. if (TsfSession.isLogin()) {
  275. // 4. 사은품 정보 (장바구니상품 사음품 적용 정보 조회)
  276. resultMap = coreFreegiftService.getOrderFreegift(order);
  277. }
  278. ModelAndView mav = new ModelAndView();
  279. mav.addObject("freegiftGoodsList" , resultMap.get("freegiftGoodsList")); // 사은품상품정보 목록
  280. mav.addObject("freegiftList" , resultMap.get("freegiftList")); // 사은품정보 목록
  281. mav.addObject("order" , order); // 파라미터
  282. mav.setViewName(super.getDeviceViewName("order/OrderFreegiftInfo"));
  283. return mav;
  284. }
  285. /**
  286. * 할인정보조회
  287. *
  288. * @param
  289. * @return
  290. * @author jsh77b
  291. * @since 2021. 02. 17
  292. */
  293. @SuppressWarnings("unchecked")
  294. @ResponseBody
  295. @PostMapping("/dcAmtInfo")
  296. public ModelAndView dcAmtInfo(@RequestBody Order order) {
  297. GagaMap goodsDcAmtMap = new GagaMap();
  298. Collection<Order> goodsApplyCpnList = new ArrayList<Order>();
  299. Collection<Order> goodsCpnList = new ArrayList<Order>();
  300. Collection<Order> cartCpnList = new ArrayList<Order>();
  301. Collection<Order> delvCpnList = new ArrayList<Order>();
  302. Collection<Order> delvFeeCdList = new ArrayList<Order>();
  303. int rmPntAmt = 0;
  304. int rmGfcdAmt = 0;
  305. // 1. 로그인체크 후 custNo 설정
  306. if (TsfSession.isLogin()) {
  307. order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
  308. } else {
  309. order.setJsessionId(TsfSession.getSessionId());
  310. }
  311. // 2. 로그인체크 후 정보 설정 (할인구간정보조회)
  312. if (TsfSession.isLogin()) {
  313. // 2.1 배송단위별 상품 목록 조회 (장바구니)
  314. Collection<Order> tmtbGoodsApplyList = cartService.getMoreBetterAmtList(order);
  315. // 2.2 상품금액, 선포인트, 다다익선할인금액
  316. goodsDcAmtMap = coreOrderService.getGoodsDcAmt(tmtbGoodsApplyList);
  317. // 2.3 배송단위별 장바구니 상품 건수 조회 (장바구니상품)
  318. GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList);
  319. // 2.4 상품쿠폰, 장바구니쿠폰 목록 조회
  320. GagaMap goodsCartCpnMap = coreOrderService.getGoodsCartCpnApplyGoodsList(order);
  321. goodsCpnList = (Collection<Order>) goodsCartCpnMap.get("goodsCpnList");
  322. cartCpnList = (Collection<Order>) goodsCartCpnMap.get("cartCpnList");
  323. // 2.5 상품쿠폰 적용된 상품 목록(상품기준)
  324. goodsApplyCpnList = coreOrderService.getGoodsCpnApplyList(tmtbGoodsApplyList, goodsCpnList);
  325. // 2.6 장바구니쿠폰(장바구니기준 상품목록)
  326. cartCpnList = coreOrderService.getCartCpnApplyList(tmtbGoodsApplyList, cartCpnList);
  327. // 2.7 배송비쿠폰목록 조회
  328. delvCpnList = coreOrderService.getDelvCpnList(order);
  329. delvFeeCdList = (Collection<Order>) delvOrderMap.get("delvFeeCdList");
  330. // 2.8 배송비쿠폰(배송업체기준)
  331. delvCpnList = coreOrderService.getDelvCpnApplyList(delvFeeCdList, delvCpnList);
  332. // 2.9 고객 보유 포인트 정보 조회
  333. rmPntAmt = coreOrderService.getCustPointInfo(order);
  334. // 2.10 고객 보유 상품권 정보 조회
  335. rmGfcdAmt = coreOrderService.getGiftcardInfo(order);
  336. }
  337. ModelAndView mav = new ModelAndView();
  338. mav.addObject("goodsApplyCpnList" , goodsApplyCpnList); // 상품적용쿠폰
  339. mav.addObject("cartCpnList" , cartCpnList); // 장바구니쿠폰목록
  340. mav.addObject("delvCpnList" , delvCpnList); // 배송비쿠폰목록
  341. mav.addObject("orgGoodsSumAmt" , goodsDcAmtMap.get("orgGoodsSumAmt")); // 상품금액합계
  342. mav.addObject("cpn1DcSumAmt" , goodsDcAmtMap.get("cpn1DcSumAmt")); // 즉시할인금액합계
  343. mav.addObject("tmtbDcSumAmt" , goodsDcAmtMap.get("tmtbDcSumAmt")); // 다다익선할인금액합계
  344. mav.addObject("prePntDcAmt" , goodsDcAmtMap.get("prePntDcAmt")); // 선포인트사용가능금액
  345. mav.addObject("rmPntAmt" , rmPntAmt); // 고객포인트정보
  346. mav.addObject("rmGfcdAmt" , rmGfcdAmt); // 고객상품권정보
  347. mav.addObject("savePntSumAmt" , goodsDcAmtMap.get("savePntSumAmt")); // 적립예정포인트합계
  348. mav.addObject("order" , order); // 파라미터
  349. mav.setViewName(super.getDeviceViewName("order/OrderDcAmtInfo"));
  350. return mav;
  351. }
  352. /**
  353. * 할인정보조회
  354. *
  355. * @param
  356. * @return
  357. * @author jsh77b
  358. * @since 2021. 02. 17
  359. */
  360. @ResponseBody
  361. @PostMapping("/paymentInfo")
  362. public ModelAndView paymentInfo(@RequestBody Order order) {
  363. // 1. 로그인체크 후 custNo 설정
  364. if (TsfSession.isLogin()) {
  365. order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
  366. } else {
  367. order.setJsessionId(TsfSession.getSessionId());
  368. }
  369. // 2. 로그인체크 후 정보 설정
  370. if (TsfSession.isLogin()) {
  371. }
  372. ModelAndView mav = new ModelAndView();
  373. mav.addObject("order" , order); // 파라미터
  374. mav.setViewName(super.getDeviceViewName("order/OrderPaymentInfo"));
  375. return mav;
  376. }
  377. /**
  378. * 주문페이지
  379. *
  380. * @param
  381. * @return
  382. * @author xodud1202
  383. * @since 2021. 03. 05
  384. */
  385. @ResponseBody
  386. @RequestMapping(value = "/pay/result/response")
  387. public ModelAndView payResultResponse(Payment param, HttpServletRequest request, HttpServletResponse response) {
  388. ModelAndView mav = new ModelAndView();
  389. param.setPayGb("KCP");
  390. param = orderService.orderPgPayResult(param, request, response);
  391. mav.addObject("payment", param);
  392. mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
  393. return mav;
  394. }
  395. /**
  396. * 총알배송 가능 지역 체크
  397. *
  398. * @param
  399. * @return
  400. * @author jsh77b
  401. * @since 2021. 02. 08
  402. */
  403. @ResponseBody
  404. @PostMapping(value = "/getDailyDeliveryCheck")
  405. public int getDailyDeliveryCheck(Order order) {
  406. // 1. 총알배송가능 지역, 총알배송 가능 시간 체크
  407. int rtn = coreOrderService.getDailyDeliveryCheck(order);
  408. return rtn;
  409. }
  410. /**
  411. * 배송지정보변경팝업
  412. *
  413. * @param
  414. * @return
  415. * @author jsh77b
  416. * @since 2021. 02. 17
  417. */
  418. @ResponseBody
  419. @PostMapping(value = "/delvAddrChangePop")
  420. public ModelAndView delvAddrChangePop(Order order) {
  421. ModelAndView mav = new ModelAndView();
  422. mav.setViewName(super.getDeviceViewName("order/OrderDelvAddrChangePop"));
  423. return mav;
  424. }
  425. /**
  426. * 배송지정보수정팝업
  427. *
  428. * @param
  429. * @return
  430. * @author jsh77b
  431. * @since 2021. 02. 17
  432. */
  433. @ResponseBody
  434. @RequestMapping(value = "/delvAddrModifyPop")
  435. public ModelAndView delvAddrModifyPop(Order order) {
  436. ModelAndView mav = new ModelAndView();
  437. mav.setViewName(super.getDeviceViewName("order/OrderDelvAddrModifyPop"));
  438. return mav;
  439. }
  440. /**
  441. * 배송지정보추가팝업
  442. *
  443. * @param
  444. * @return
  445. * @author jsh77b
  446. * @since 2021. 02. 17
  447. */
  448. @ResponseBody
  449. @RequestMapping(value = "/delvAddrAddPop")
  450. public ModelAndView delvAddrAddPop(Order order) {
  451. ModelAndView mav = new ModelAndView();
  452. mav.setViewName(super.getDeviceViewName("order/OrderDelvAddrAddPop"));
  453. return mav;
  454. }
  455. /**
  456. * 배송지메모변경팝업
  457. *
  458. * @param
  459. * @return
  460. * @author jsh77b
  461. * @since 2021. 02. 17
  462. */
  463. @ResponseBody
  464. @RequestMapping(value = "/delvMemoChangePop")
  465. public ModelAndView delvMemoChangePop(Order order) {
  466. ModelAndView mav = new ModelAndView();
  467. mav.setViewName(super.getDeviceViewName("order/OrderDelvMemoChangePop"));
  468. return mav;
  469. }
  470. /**
  471. * 사은품안내팝업
  472. *
  473. * @param
  474. * @return
  475. * @author jsh77b
  476. * @since 2021. 02. 17
  477. */
  478. @ResponseBody
  479. @RequestMapping(value = "/freegiftInfoPop")
  480. public ModelAndView freegiftInfoPop(Order order) {
  481. ModelAndView mav = new ModelAndView();
  482. mav.setViewName(super.getDeviceViewName("order/OrderFreegiftInfoPop"));
  483. return mav;
  484. }
  485. /**
  486. * 주문페이지
  487. *
  488. * @param
  489. * @return
  490. * @author jsh77b
  491. * @since 2021. 02. 02
  492. */
  493. @SuppressWarnings({ "unchecked", "null" })
  494. @RequestMapping(value = "/form20210304")
  495. public ModelAndView orderForm20210304(Order order) {
  496. ModelAndView mav = new ModelAndView();
  497. // TODO
  498. // 1.비회주문, 회원 주문 판단 로직, 고객정보 세션 판단
  499. // 세션고객정보가 존재하면 회원주문 없으면 비회원 주문
  500. // 임시 jsessionId
  501. String jsessionId = "aaec62cc-5f91-47bb-ba65-ebc9a61385cf";
  502. Boolean noMember = true;
  503. // TODO 로그인체크 로직 추가
  504. // 1.0 회원, 비회원 여부 판단
  505. if (TsfSession.getInfo().getCustNo() == null) {
  506. order.setJsessionId(jsessionId);
  507. } else {
  508. noMember = false;
  509. order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
  510. }
  511. // TODO
  512. // 1.1 카트시퀀스가 없을때 처리 장바구니로 이동
  513. if (order.getCartSqArr() == null) {
  514. mav.setViewName("redirect:/order/noMember"); // 비회원주문서화면
  515. return mav;
  516. }
  517. Order custemerInfo = new Order();
  518. Order deliveryAddrInfo = new Order();
  519. // TODO 로그인체크 로직 추가
  520. if (noMember) {
  521. // 1.1 주문고객 정보조회
  522. custemerInfo.setCustNm(order.getCustNm());
  523. custemerInfo.setCellPhnno(order.getCellPhnno());
  524. custemerInfo.setEmail(order.getEmail());
  525. // 1.2 배송지 정보조회 (기본배송지)
  526. deliveryAddrInfo.setDelvAddrNm(order.getCustNm());
  527. deliveryAddrInfo.setRecipZipcode(order.getRecipZipcode());
  528. deliveryAddrInfo.setRecipBaseAddr(order.getRecipBaseAddr());
  529. deliveryAddrInfo.setRecipDtlAddr(order.getRecipDtlAddr());
  530. deliveryAddrInfo.setDelvMemo("직접받고 부재시 문 앞");
  531. } else {
  532. // 1.1 주문고객 정보조회
  533. custemerInfo = coreOrderService.getCustemerInfo(order);
  534. // 1.2 배송지 정보조회 (기본배송지)
  535. deliveryAddrInfo = coreOrderService.getDeliveryAddrInfo(order);
  536. if (deliveryAddrInfo == null) {
  537. deliveryAddrInfo = new Order();
  538. deliveryAddrInfo.setDelvAddrNm(custemerInfo.getCustNm());
  539. deliveryAddrInfo.setRecipZipcode("");
  540. deliveryAddrInfo.setRecipBaseAddr("");
  541. deliveryAddrInfo.setRecipDtlAddr("");
  542. deliveryAddrInfo.setDelvMemo("직접받고 부재시 문 앞");
  543. }
  544. }
  545. // TODO 임시 장바구니
  546. // 2. 장바구니시퀀스 배열 등록 (장바구니 상품 정보 조회)
  547. // 2.1 배송단위별 상품 목록 조회 (장바구니)
  548. Collection<Order> tmtbGoodsApplyList = cartService.getMoreBetterAmtList(order);
  549. // 2.1.0 상품금액, 선포인트, 다다익선할인금액
  550. GagaMap goodsDcAmtMap = coreOrderService.getGoodsDcAmt(tmtbGoodsApplyList);
  551. // 2.2 배송단위별 장바구니 상품 건수 조회 (장바구니상품)
  552. GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList);
  553. // 3. 할인구간정보조회
  554. // 3.2 상품쿠폰, 장바구니쿠폰 목록 조회
  555. GagaMap goodsCartCpnMap = coreOrderService.getGoodsCartCpnApplyGoodsList(order);
  556. Collection<Order> goodsCpnList = (Collection<Order>) goodsCartCpnMap.get("goodsCpnList");
  557. Collection<Order> cartCpnList = (Collection<Order>) goodsCartCpnMap.get("cartCpnList");
  558. // 3.2.1 상품기준 ---> 상품쿠폰 적용된 상품 목록
  559. Collection<Order> goodsApplyCpnList = coreOrderService.getGoodsCpnApplyList(tmtbGoodsApplyList, goodsCpnList);
  560. // 3.2.2 장바구니쿠폰기준 ---> 상품목록
  561. cartCpnList = coreOrderService.getCartCpnApplyList(tmtbGoodsApplyList, cartCpnList);
  562. // 3.3 배송비쿠폰목록 조회
  563. Collection<Order> delvCpnList = coreOrderService.getDelvCpnList(order);
  564. Collection<Order> delvFeeCdList = (Collection<Order>) delvOrderMap.get("delvFeeCdList");
  565. // 3.3.1 배소업체기준 ---> 배송비쿠폰
  566. delvCpnList = coreOrderService.getDelvCpnApplyList(delvFeeCdList, delvCpnList);
  567. // 3.4 고객 보유 포인트 정보 조회
  568. int rmPntAmt = coreOrderService.getCustPointInfo(order);
  569. // 3.5 고객 보유 상품권 정보 조회
  570. int rmGfcdAmt = coreOrderService.getGiftcardInfo(order);
  571. // 4. 사은품 정보
  572. // 4.1 장바구니상품 사음품 적용 정보 조회
  573. GagaMap resultMap = coreFreegiftService.getOrderFreegift(order);
  574. // 101. 상품정보
  575. mav.addObject("cartGoodsList" , tmtbGoodsApplyList); // 장바구니상품목록 (즉시할인쿠폰적용)
  576. mav.addObject("delvTotCnt" , delvOrderMap.get("delvTotCnt")); // 총상품건수
  577. mav.addObject("delvFeeTotCnt" , delvOrderMap.get("delvFeeTotCnt")); // 총배송타입건수
  578. mav.addObject("wmsCnt" , delvOrderMap.get("wmsCnt")); // 자사상품건수
  579. mav.addObject("resCnt" , delvOrderMap.get("resCnt")); // 자사예약상품건수
  580. mav.addObject("delvCnt" , delvOrderMap.get("delvCnt")); // 입점업체상품건수
  581. mav.addObject("shotCartList" , delvOrderMap.get("shotCartList")); // 자사총알배송상품목록
  582. mav.addObject("wmsCartList" , delvOrderMap.get("wmsCartList")); // 자사일반배송상품목록
  583. mav.addObject("delvCartList" , delvOrderMap.get("delvCartList")); // 입점업체상품목록
  584. mav.addObject("resCartList" , delvOrderMap.get("resCartList")); // 자사예약배송상품목록
  585. mav.addObject("delvAllCartList" , delvOrderMap.get("delvAllCartList")); // 전체배송목록
  586. mav.addObject("sumDelvFee" , delvOrderMap.get("sumDelvFee")); // 배송비합계
  587. // 102. 고객정보
  588. mav.addObject("custemerInfo" , custemerInfo); // 고객정보
  589. mav.addObject("deliveryAddrInfo" , deliveryAddrInfo); // 배송지정보
  590. mav.addObject("shotDelvYn" , order.getShotDelvYn()); // 장바구니 총알배송여부
  591. // 103. 할인정보
  592. mav.addObject("tmtbGoodsApplyList" , tmtbGoodsApplyList); // 다다익선상품 적용목록
  593. mav.addObject("goodsApplyCpnList" , goodsApplyCpnList); // 상품적용쿠폰
  594. mav.addObject("cartCpnList" , cartCpnList); // 장바구니쿠폰목록
  595. mav.addObject("delvCpnList" , delvCpnList); // 배송비쿠폰목록
  596. mav.addObject("orgGoodsSumAmt" , goodsDcAmtMap.get("orgGoodsSumAmt")); // 상품금액합계
  597. mav.addObject("cpn1DcSumAmt" , goodsDcAmtMap.get("cpn1DcSumAmt")); // 즉시할인금액합계
  598. mav.addObject("tmtbDcSumAmt" , goodsDcAmtMap.get("tmtbDcSumAmt")); // 다다익선할인금액합계
  599. mav.addObject("prePntDcAmt" , goodsDcAmtMap.get("prePntDcAmt")); // 선포인트사용가능금액
  600. mav.addObject("rmPntAmt" , rmPntAmt); // 고객포인트정보
  601. mav.addObject("rmGfcdAmt" , rmGfcdAmt); // 고객상품권정보
  602. mav.addObject("savePntSumAmt" , goodsDcAmtMap.get("savePntSumAmt")); // 적립예정포인트합계
  603. // 104. 사은품정보
  604. mav.addObject("freegiftGoodsList" , resultMap.get("freegiftGoodsList")); // 사은품상품정보 목록
  605. mav.addObject("freegiftList" , resultMap.get("freegiftList")); // 사은품정보 목록
  606. mav.setViewName(super.getDeviceViewName("order/OrderForm"));
  607. return mav;
  608. }
  609. /**
  610. * 주문 데이터 생성
  611. *
  612. * @param
  613. * @return
  614. * @author xodud1202
  615. * @since 2021. 03. 04
  616. */
  617. @PostMapping("/create/order")
  618. public ModelAndView createOrder(Order order) {
  619. ModelAndView mav = new ModelAndView();
  620. // TODO 주문 시작 데이터 처리
  621. // TODO PG 데이터 세팅 처리
  622. // order.ordNo, order.goodsName
  623. // order.payType > 2 Menas, gb > 이니시스, 카드
  624. // KCP CARD 전송 데이터
  625. Payment payment = new Payment();
  626. // KCP 주문요청 공통 데이터
  627. payment.setReqTx("pay"); // 필수 (주문시 only "pay")
  628. payment.setOrdrIdxx(order.getOrdNo()); // 필수
  629. payment.setPayMethod("010000000000"); // 필수 결제수단코드(신용카드 : 100000000000, 계좌이체 : 010000000000, 가상계좌 : 001000000000, 포인트 : 000100000000, 휴대폰 : 000010000000, 상품권 : 000000001000, ARS : 000000000010)
  630. payment.setGoodName("LTY_TEST_GOODS_NAME"); // 필수
  631. payment.setGoodMny(1779); // 필수
  632. payment.setBuyrName("LTY"); // 필수
  633. payment.setBuyrMail("xodud1202@naver.com"); // 선택
  634. payment.setBuyrTel1(""); // 선택, 일반 전화번호
  635. payment.setBuyrTel2("010-7111-4489"); // 필수, 휴대폰번호
  636. payment.setCurrency("WON"); // 필수, 원화 : WON, 달러 : USD
  637. payment.setShopUserId(1000006); // 필수, 쇼핑몰회원ID (CUST_NO)
  638. // KCP 공통 변경되지 않는 값
  639. payment.setSiteCd(env.getProperty("pg.kcp.site.cd")); // 상점코드
  640. payment.setSiteName(env.getProperty("pg.kcp.site.name")); // 상점 이름 (영문 작성 권장)
  641. payment.setModuleType(env.getProperty("pg.kcp.module.type"));
  642. payment.setGoodExpr("0"); // 제공 기간 설정 0:일회성 1:기간설정(ex 1:2012010120120131)
  643. // KCP 신용카드 옵션
  644. payment.setQuotaopt(12); // 최대 할부 개월 수
  645. // KCP 무통장입금 옵션
  646. /*payment.setVcntExpireTerm(3); */ // 무통장입금 유효기간
  647. // KCP PAYCO 호출
  648. if(!StringUtils.isEmpty(payment.getPgGb()) && TscConstants.PgGb.PAYCO.value().equals(payment.getPgGb())) { // PAYCO일경우
  649. payment.setPaycoDirect("Y");
  650. payment.setPayMthod("100000000000"); // PAYCO일때 payMethod 뿐 아니라 payMthod도 송부해야함. cart와 동일하게 송부하면됨.
  651. payment.setPayMethod("100000000000"); // CARD로 변경
  652. }
  653. mav.addObject("payment", payment);
  654. //model.addAttribute("payment", payment);
  655. mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
  656. return mav;
  657. //return super.getDeviceViewName("pg/kcpOrder");
  658. }
  659. /**
  660. * 카카오페이 결제준비 처리
  661. *
  662. * @param Order
  663. * @return KakaoPay
  664. * @author card007
  665. * @since 2021. 03. 03
  666. */
  667. @RequestMapping(value = "/kakao/payment/ready")
  668. @ResponseBody
  669. public GagaMap kakaoPaymentReady(@RequestBody Order order) {
  670. GagaMap result = new GagaMap();
  671. if (TsfSession.getInfo().getCustNo() == null) {
  672. order.setCustNo(0);
  673. } else {
  674. order.setCustNo(TsfSession.getInfo().getCustNo());
  675. }
  676. result.set("kakaoPay", kakaoPayService.kakaoPaymentReady(order));
  677. result.set("status", GagaResponseStatus.SUCCESS.getCode());
  678. return result;
  679. }
  680. /**
  681. * 카카오페이 결제 요청 처리
  682. *
  683. * @param Order
  684. * @return GagaMap
  685. * @author card007
  686. * @since 2021. 03. 04
  687. */
  688. @RequestMapping(value = "/kakao/payment/request")
  689. @ResponseBody
  690. public ModelAndView kakaoPaymentRequest(@RequestParam(value = "pg_token", required = false) String pgToken) {
  691. ModelAndView mav = new ModelAndView();
  692. mav.addObject("pgToken", pgToken);
  693. mav.setViewName(super.getDeviceViewName("/pg/KakaoPaymentRequest"));
  694. return mav;
  695. }
  696. /**
  697. * 카카오페이 결제 승인 처리
  698. *
  699. * @param Order
  700. * @return GagaMap
  701. * @author card007
  702. * @since 2021. 03. 04
  703. */
  704. @RequestMapping(value = "/kakao/payment/approve")
  705. @ResponseBody
  706. public GagaMap approveKakaoPayment(@RequestBody Order order) {
  707. GagaMap result = new GagaMap();
  708. if (TsfSession.getInfo().getCustNo() == null) {
  709. order.setCustNo(0);
  710. } else {
  711. order.setCustNo(TsfSession.getInfo().getCustNo());
  712. }
  713. result.set("payment", kakaoPayService.approveKakaoPayment(order));
  714. result.set("status", GagaResponseStatus.SUCCESS.getCode());
  715. return result;
  716. }
  717. /**
  718. * 카카오페이 결제 조회
  719. *
  720. * @param Order
  721. * @return GagaMap
  722. * @author card007
  723. * @since 2021. 03. 04
  724. */
  725. @RequestMapping(value = "/kakao/payment/order")
  726. @ResponseBody
  727. public GagaMap kakaoPaymentOrder(@RequestBody Order order) {
  728. GagaMap result = new GagaMap();
  729. if (TsfSession.getInfo().getCustNo() == null) {
  730. order.setCustNo(0);
  731. } else {
  732. order.setCustNo(TsfSession.getInfo().getCustNo());
  733. }
  734. result.set("kakaoPay", kakaoPayService.getKakaoPaymentOrder(order));
  735. result.set("status", GagaResponseStatus.SUCCESS.getCode());
  736. return result;
  737. }
  738. /**
  739. * 카카오페이 결제 취소
  740. *
  741. * @param Order
  742. * @return GagaMap
  743. * @author card007
  744. * @since 2021. 03. 04
  745. */
  746. @RequestMapping(value = "/kakao/payment/cancel")
  747. @ResponseBody
  748. public GagaMap cancelKakaoPayment(@RequestBody Order order) {
  749. GagaMap result = new GagaMap();
  750. if (TsfSession.getInfo().getCustNo() == null) {
  751. order.setCustNo(0);
  752. } else {
  753. order.setCustNo(TsfSession.getInfo().getCustNo());
  754. }
  755. result.set("kakaoPay", kakaoPayService.cancelKakaoPayment(order));
  756. result.set("status", GagaResponseStatus.SUCCESS.getCode());
  757. return result;
  758. }
  759. /**
  760. * 네이버페이 결제 요청 처리
  761. *
  762. * @param Order
  763. * @return GagaMap
  764. * @author card007
  765. * @since 2021. 03. 04
  766. */
  767. @RequestMapping(value = "/naver/payment/request")
  768. @ResponseBody
  769. public ModelAndView naverPaymentRequest(@RequestParam(value = "reserveId", required = false) String reserveId) {
  770. ModelAndView mav = new ModelAndView();
  771. mav.addObject("reserveId", reserveId);
  772. mav.setViewName(super.getDeviceViewName("/pg/NaverPaymentRequest"));
  773. return mav;
  774. }
  775. /**
  776. * 네이버페이 결제준비 처리
  777. *
  778. * @param Order
  779. * @return NaverPay
  780. * @author card007
  781. * @since 2021. 03. 07
  782. */
  783. @RequestMapping(value = "/naver/payment/ready")
  784. @ResponseBody
  785. public GagaMap naverPaymentReady(@RequestBody Order order) {
  786. GagaMap result = new GagaMap();
  787. if (TsfSession.getInfo().getCustNo() == null) {
  788. order.setCustNo(0);
  789. } else {
  790. order.setCustNo(TsfSession.getInfo().getCustNo());
  791. }
  792. result.set("naverPay", naverPayService.naverPaymentReady(order));
  793. result.set("status", GagaResponseStatus.SUCCESS.getCode());
  794. return result;
  795. }
  796. }