11package com .urunov .controller ;
22
3+ import com .google .gson .Gson ;
4+ import com .urunov .kafkaService .Producer ;
5+ import com .urunov .model .Good ;
6+ import com .urunov .model .OrderDetails ;
7+ import com .urunov .model .Orders ;
8+ import com .urunov .model .User ;
9+ import com .urunov .model .enumdto .OrderStatus ;
10+ import com .urunov .model .retailer .Retailer ;
11+ import com .urunov .payload .ApiResponse ;
312import com .urunov .payload .PagedResponse ;
13+ import com .urunov .payload .good .GoodOrderDetailsResponse ;
14+ import com .urunov .payload .order .OrderRequest ;
415import com .urunov .payload .order .OrderResponse ;
16+ import com .urunov .payload .payment .PaymentBtnResponse ;
517import com .urunov .repository .GoodsRepository ;
618import com .urunov .repository .OrderDetailsRepository ;
719import com .urunov .repository .OrderRepository ;
1123import com .urunov .service .order .OrderService ;
1224import com .urunov .service .order .payment .PaymentService ;
1325import com .urunov .service .taxiMaster .TaxiOrderProcess ;
14- import org .springframework .beans .factory .annotation .Autowired ;
15- import org .springframework .boot .autoconfigure .kafka .KafkaProperties ;
16- import org .springframework .web .bind .annotation .GetMapping ;
17- import org .springframework .web .bind .annotation .RequestMapping ;
18- import org .springframework .web .bind .annotation .RequestParam ;
19- import org .springframework .web .bind .annotation .RestController ;
2026import com .urunov .utils .AppConstants ;
27+ import org .springframework .beans .factory .annotation .Autowired ;
28+ import org .springframework .http .HttpStatus ;
29+ import org .springframework .http .ResponseEntity ;
30+ import org .springframework .web .bind .annotation .*;
31+
32+ import java .util .Date ;
33+ import java .util .List ;
34+
2135/**
2236 * Created by:
2337 * User: hamdamboy
@@ -42,7 +56,7 @@ public class OrderController {
4256 private TaxiOrderProcess taxiOrderProcess ;
4357
4458 @ Autowired
45- private KafkaProperties . Producer producer ;
59+ private Producer producer ;
4660
4761 @ Autowired
4862 private OrderService orderService ;
@@ -65,5 +79,122 @@ public PagedResponse<OrderResponse> getAllUserOrders(
6579 return orderService .getAllUserOrders (page , size , sortOrder , isActive , userPrincipal , "status" , sortBy );
6680 }
6781
82+ @ PostMapping ("/order/getPayUrl" )
83+ public ResponseEntity <?> getPayUrl (@ CurrentUser UserPrincipal userPrincipal , @ RequestBody OrderResponse orderResponse ) throws Exception
84+ {
85+ Gson gson = new Gson ();
86+ PaymentBtnResponse paymentBtnResponse = gson .fromJson (paymentService .makeAnonymousPayment (orderResponse ), PaymentBtnResponse .class );
87+ if (paymentBtnResponse .getCode () != null && paymentBtnResponse .getCode ().equals ("1297" ))
88+ return new ResponseEntity (new ApiResponse (true , paymentBtnResponse .getUserMessage (), new Date (), paymentBtnResponse ), HttpStatus .INTERNAL_SERVER_ERROR );
89+ Orders order = orderRepository .findById (orderResponse .getId ()).orElse (null );
90+ if (order != null )
91+ {
92+ order .setPaymentNumber (paymentBtnResponse .getRegPayNum ());
93+ orderRepository .save (order );
94+ return new ResponseEntity (new ApiResponse (true , "Запрос на повторное создание заказа успешно создан!" , new Date (), paymentBtnResponse ), HttpStatus .OK );
95+ }
96+ else
97+ return new ResponseEntity (new ApiResponse (true , "Не удалось оплатить заказ, пожалуйста попробуйте позднее!" , new Date (), paymentBtnResponse ), HttpStatus .INTERNAL_SERVER_ERROR );
98+ }
99+
100+ @ PostMapping ("/order/createOrder" )
101+ public void createOrder (@ CurrentUser UserPrincipal userPrincipal , @ RequestBody OrderRequest orderRequest )
102+ {
103+ User user = userRepository .findById (userPrincipal .getId ()).orElse (null );
104+ Orders userBucket = orderRepository .findFirstByStatusAndUser (OrderStatus .NEW , user ).orElse (null );
105+ Orders order = new Orders ();
106+ order .setStatus (OrderStatus .inProgress );
107+ order .setUser (user );
108+ order .setName (orderRequest .getName ());
109+ order .setAdditionalPhone (orderRequest .getAdditionalPhone ());
110+ order .setDeliveryPrice (orderRequest .getDeliveryPrice ());
111+ order .setEmail (orderRequest .getEmail ());
112+ order .setAddress (orderRequest .getAddress ());
113+ order .setComment (orderRequest .getComment ());
114+ List <OrderDetails > orderDetailsList = orderDetailsRepository .findAllByOrder (userBucket );
115+ orderRepository .save (order );
116+ for (OrderDetails orderDetails : orderDetailsList )
117+ {
118+ orderDetails .setOrder (order );
119+ orderDetailsRepository .save (orderDetails );
120+ }
121+ order .setOrderDetailList (orderDetailsList );
122+ producer .sendOrderRequest (order );
123+ }
68124
125+ @ PostMapping ("/order/getDeliveryPrice" )
126+ public ResponseEntity <?> getDeliveryPrice (@ RequestBody String address , @ CurrentUser UserPrincipal currentUser ) throws Exception
127+ {
128+ User user = userRepository .findById (currentUser .getId ()).orElse (null );
129+ if (user != null )
130+ {
131+ Orders order = orderRepository .findFirstByStatusAndUser (OrderStatus .NEW , user ).orElse (null );
132+ if (order != null )
133+ {
134+ Retailer retailer = order .getOrderDetailsList ().stream ().map (OrderDetails ::getGood ).map (Good ::getRetailer ).findFirst ().orElse (null );
135+ if (retailer != null )
136+ //TODO: тут временная заглушка на getTaxiPropertiesList().get(0), т.к не понятно пока какие проперти выбирать
137+ try
138+ {
139+ return new ResponseEntity (new ApiResponse (false , "Указанный адрес успешно найден!" , new Date (),
140+ taxiOrderProcess .getDeliveryPrice (retailer .getCity (), address , retailer .getShippingAddress (), retailer .getTaxiPropertiesList ().get (0 ))), HttpStatus .OK );
141+ }
142+ catch (Exception e )
143+ {
144+ return new ResponseEntity (new ApiResponse (false , "Не удалось найти указанный адрес!" , new Date (),
145+ taxiOrderProcess .getDeliveryPrice (retailer .getCity (), address , retailer .getShippingAddress (), retailer .getTaxiPropertiesList ().get (0 ))), HttpStatus .INTERNAL_SERVER_ERROR );
146+ }
147+ }
148+ }
149+ return null ;
150+ }
151+
152+ @ PostMapping ("/order/updateOrder" )
153+ public ResponseEntity <?> updateOrder (@ CurrentUser UserPrincipal userPrincipal , @ RequestBody OrderResponse orderResponse )
154+ {
155+ return orderService .statusDelivered (userPrincipal , orderResponse );
156+ }
157+
158+ @ PostMapping ("/order/repeatOrderRequest" )
159+ public ResponseEntity <?> repeatOrder (@ CurrentUser UserPrincipal currentUser , @ RequestBody List <GoodOrderDetailsResponse > detailsResponseList )
160+ {
161+ boolean isGoodExists = true ;
162+ User user = userRepository .findById (currentUser .getId ()).orElse (null );
163+ if (user != null )
164+ {
165+ Orders bucket = orderRepository .findFirstByStatusAndUser (OrderStatus .NEW , user ).orElse (null );
166+ if (bucket == null )
167+ {
168+ bucket = new Orders ();
169+ bucket .setUser (user );
170+ bucket .setStatus (OrderStatus .NEW );
171+ orderRepository .save (bucket );
172+ }
173+ //TODO: если уже есть товары в корзине, то спрашивать перед тем как чистить корзину
174+ List <OrderDetails > bucketGoods = orderDetailsRepository .findAllByOrder (bucket );
175+ for (OrderDetails orderDetails : bucketGoods )
176+ {
177+ orderDetailsRepository .delete (orderDetails );
178+ }
179+ for (GoodOrderDetailsResponse goodOrderDetailsResponse : detailsResponseList )
180+ {
181+ List <Good > goodList = goodsRepository .findAllByInternalCodeAndIsOutdated (goodOrderDetailsResponse .getInternalCode (), false );
182+ if (!goodList .isEmpty ())
183+ {
184+ Good good = goodsRepository .findAllByInternalCodeAndIsOutdated (goodOrderDetailsResponse .getInternalCode (), false ).get (0 );
185+ OrderDetails orderDetails = new OrderDetails ();
186+ orderDetails .setOrder (bucket );
187+ orderDetails .setGood (good );
188+ orderDetails .setQuantity (goodOrderDetailsResponse .getQuantity ());
189+ orderDetailsRepository .save (orderDetails );
190+ }
191+ else
192+ isGoodExists = false ;
193+ }
194+ }
195+ if (!isGoodExists )
196+ return new ResponseEntity (new ApiResponse (false , "Извините, некоторых товаров уже нет в магазине!" ), HttpStatus .INTERNAL_SERVER_ERROR );
197+ else
198+ return new ResponseEntity (new ApiResponse (true , "Запрос на повторное создание заказа успешно создан!" ), HttpStatus .OK );
199+ }
69200}
0 commit comments