package org.xmx0632.deliciousfruit.api.v1; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.xmx0632.deliciousfruit.api.v1.bo.CustomerCallbackRequest; import org.xmx0632.deliciousfruit.api.v1.bo.CustomerCallbackResponse; import org.xmx0632.deliciousfruit.api.v1.bo.OrderRequest; import org.xmx0632.deliciousfruit.api.v1.bo.OrderRequest.OrderRequestReceiver; import org.xmx0632.deliciousfruit.api.v1.bo.OrderRequest.Payment.CashCouponPay; import org.xmx0632.deliciousfruit.api.v1.bo.OrderRequest.Payment.DeliveryPeriod; import org.xmx0632.deliciousfruit.api.v1.bo.OrderRequest.Payment.GiftCardPay; import org.xmx0632.deliciousfruit.api.v1.bo.OrderRequest.ReceiverInfo; import org.xmx0632.deliciousfruit.api.v1.bo.OrderResponse; import org.xmx0632.deliciousfruit.api.v1.bo.OrderResponse.DeductionPay; import org.xmx0632.deliciousfruit.api.v1.bo.OrderResponse.PayByCashCoupon; import org.xmx0632.deliciousfruit.api.v1.bo.OrderResponse.PayByEcoupon; import org.xmx0632.deliciousfruit.api.v1.bo.OrderResponse.PayByGiftCard; import org.xmx0632.deliciousfruit.api.v1.bo.QueryOrderResponse; import org.xmx0632.deliciousfruit.api.v1.bo.QueryOrderResponse.DeductionPayRecord; import org.xmx0632.deliciousfruit.api.v1.bo.QueryOrderResponse.OrderProductItem; import org.xmx0632.deliciousfruit.api.v1.bo.Result; import org.xmx0632.deliciousfruit.api.v1.bo.SettlementResponse; import org.xmx0632.deliciousfruit.api.v1.bo.SettlementResponse.ProductFreeInfo; import org.xmx0632.deliciousfruit.api.v1.helper.WebHelper; import org.xmx0632.deliciousfruit.entity.UserAccount; import org.xmx0632.deliciousfruit.service.ConfigService; import org.xmx0632.deliciousfruit.service.ReceiverInfoService; /** * 订购接口 * * @author Jefferson-pengtao */ @Controller @RequestMapping(value = "/api/v1/order") public class OrderApiController { private static Logger log = LoggerFactory .getLogger(OrderApiController.class); @Autowired private ConfigService configService; @Autowired private ReceiverInfoService receiverInfoService; @RequestMapping(value = "/queryorder", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<QueryOrderResponse> queryorder(ServletRequest request) { UserAccount userAccount = WebHelper.getCurrentUser(request); log.debug("UserAccount:{}", userAccount); QueryOrderResponse response = new QueryOrderResponse(); QueryOrderResponse.OrderRecordItem item1 = new QueryOrderResponse.OrderRecordItem(); DeductionPayRecord deductionPay = new DeductionPayRecord(); PayByCashCoupon payByCashCoupon = new PayByCashCoupon(); payByCashCoupon.setDeductionAmount(BigDecimal.valueOf(20.00)); payByCashCoupon.setId("CASHCOUPON0001"); payByCashCoupon.setPayLeftTimes(2); deductionPay.getPayByCashCouponInfo().add(payByCashCoupon); PayByGiftCard payByGiftCard = new PayByGiftCard(); payByGiftCard.setBalance(BigDecimal.valueOf(50.00)); payByGiftCard.setDeductionAmount(BigDecimal.valueOf(20.00)); payByGiftCard.setId("CARD0000001"); deductionPay.getPayByGiftCardInfo().add(payByGiftCard); deductionPay.setPayByPoint(BigDecimal.valueOf(50.00)); deductionPay.setPayFromAccount(BigDecimal.valueOf(50.00)); DeliveryPeriod deliveryPeriod = new DeliveryPeriod(); deliveryPeriod.setDatePeriod("周一至周五"); deliveryPeriod.setTimePeriod("上午8点到下午5点"); item1.setDeliveryPeriod(deliveryPeriod); OrderProductItem orderItem1 = new OrderProductItem(); orderItem1.setProductId("110110"); orderItem1.setQuantity(2); orderItem1.setPrice(BigDecimal.valueOf(25.00)); orderItem1.setProductName("苹果"); orderItem1.setUnit("个"); OrderProductItem orderItem2 = new OrderProductItem(); orderItem2.setProductId("110112"); orderItem2.setQuantity(1); orderItem2.setPrice(BigDecimal.valueOf(25.00)); orderItem2.setProductName("葡萄"); orderItem2.setUnit("串"); item1.getOrderList().add(orderItem1); item1.getOrderList().add(orderItem2); PayByEcoupon eCouponPay = new PayByEcoupon(); eCouponPay.setId("1234567dddddd"); eCouponPay.setAmount(BigDecimal.valueOf(25.00)); deductionPay.getPayByEcouponInfo().add(eCouponPay); ReceiverInfo receiverInfo = new ReceiverInfo(); receiverInfo.setAddress("云桥路133"); receiverInfo.setCity("浦东"); receiverInfo.setDistrict("金桥"); receiverInfo.setName("张三"); receiverInfo.setPhoneNumber("13811118888"); receiverInfo.setProvince("上海"); item1.setReceiverInfo(receiverInfo); item1.setDeductionPay(deductionPay); item1.setFreight(BigDecimal.valueOf(10.00)); item1.setFreightPay(BigDecimal.valueOf(0.00)); item1.setOrderNumber("ORDER10000001"); item1.setPayAmount(BigDecimal.valueOf(300.00)); item1.setPaymentMethod("10"); item1.setOrderTime("2013-03-30 00:00:00+0800"); item1.setOrderStatus("物流配送中"); item1.setGivePoint(100); PayByEcoupon giveE = new PayByEcoupon(); giveE.setId("AAAABBBB"); giveE.setAmount(BigDecimal.valueOf(10.00)); item1.setGiveEcoupon(giveE); SettlementResponse.PromotionDetails promotionDetails = new SettlementResponse.PromotionDetails(); promotionDetails.setPriceOff(BigDecimal.valueOf(50.00)); List<ProductFreeInfo> orderFreeList = new ArrayList<ProductFreeInfo>(); ProductFreeInfo productFreeInfo = new ProductFreeInfo(); productFreeInfo.setProductName("苹果"); productFreeInfo.setQuantity(1); productFreeInfo.setUnit("个"); orderFreeList.add(productFreeInfo); promotionDetails.setProductsFree(orderFreeList); item1.setPromotionDetails(promotionDetails); item1.setTotalPrice(BigDecimal.valueOf(500.00)); response.setResult(Result.SUCCESS_RESULT); response.getOrders().add(item1); log.debug("response:{}", response); return new ResponseEntity<QueryOrderResponse>(response, HttpStatus.OK); } private void addReceiver(OrderRequestReceiver receiverBo, UserAccount userAccount) { org.xmx0632.deliciousfruit.entity.ReceiverInfo receiverInfo = new org.xmx0632.deliciousfruit.entity.ReceiverInfo(); receiverInfo.setAddress(receiverBo.getAddress()); receiverInfo.setCity(receiverBo.getCity()); receiverInfo.setDistrict(receiverBo.getDistrict()); receiverInfo.setProvince(receiverBo.getProvince()); receiverInfo.setReceiver(receiverBo.getName()); receiverInfo.setTelephone(receiverBo.getPhoneNumber()); receiverInfo.setUserAccount(userAccount); receiverInfoService.saveReceiverInfo(receiverInfo); } private void updateReceiver( org.xmx0632.deliciousfruit.entity.ReceiverInfo receiverInfo, OrderRequestReceiver receiverBo, UserAccount userAccount) { receiverInfo.setAddress(receiverBo.getAddress()); receiverInfo.setCity(receiverBo.getCity()); receiverInfo.setDistrict(receiverBo.getDistrict()); receiverInfo.setProvince(receiverBo.getProvince()); receiverInfo.setReceiver(receiverBo.getName()); receiverInfo.setTelephone(receiverBo.getPhoneNumber()); receiverInfo.setUserAccount(userAccount); receiverInfoService.saveReceiverInfo(receiverInfo); } @RequestMapping(value = "/process", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<OrderResponse> process( @RequestBody OrderRequest orderRequest, ServletRequest request) { UserAccount userAccount = WebHelper.getCurrentUser(request); log.debug("UserAccount:{}", userAccount); log.debug("Request:{}", orderRequest); OrderResponse response = new OrderResponse(); OrderRequestReceiver receiverBo = orderRequest.getReceiverInfo(); if (receiverBo != null) { if (receiverBo.getId() != null && receiverBo.getId().longValue() > 0) { org.xmx0632.deliciousfruit.entity.ReceiverInfo receiverInfo = receiverInfoService .getReceiverInfo(receiverBo.getId()); if (receiverInfo != null && receiverInfo.getUserAccount() != null && receiverInfo.getUserAccount().getUsername() .endsWith(userAccount.getUsername())) { updateReceiver(receiverInfo, receiverBo, userAccount); } } else if (receiverBo.getId() == null) { addReceiver(receiverBo, userAccount); } } DeductionPay deductionPay = new DeductionPay(); List<CashCouponPay> cashCoupons = orderRequest.getPayment() .getCashCoupons(); for (CashCouponPay cashCouponPay : cashCoupons) { PayByCashCoupon payByCashCoupon = new PayByCashCoupon(); payByCashCoupon.setDeductionAmount(cashCouponPay.getPayAmount()); payByCashCoupon.setId(cashCouponPay.getId()); payByCashCoupon.setPayLeftTimes(2); deductionPay.getPayByCashCouponInfo().add(payByCashCoupon); } List<GiftCardPay> giftcards = orderRequest.getPayment().getGiftCards(); for (GiftCardPay giftCardPay : giftcards) { PayByGiftCard payByGiftCard = new PayByGiftCard(); payByGiftCard.setBalance(BigDecimal.valueOf(50.00)); payByGiftCard.setDeductionAmount(giftCardPay.getPayAmount()); payByGiftCard.setId(giftCardPay.getId()); deductionPay.getPayByGiftCardInfo().add(payByGiftCard); } deductionPay.setPayByPoint(BigDecimal.valueOf(50.00)); deductionPay.setPayFromAccount(BigDecimal.valueOf(20.00)); PayByEcoupon eCouponPay = new PayByEcoupon(); eCouponPay.setId("1234567dddddd"); eCouponPay.setAmount(BigDecimal.valueOf(25.00)); deductionPay.getPayByEcouponInfo().add(eCouponPay); response.setDeductionPay(deductionPay); response.setFreight(BigDecimal.valueOf(10.00)); response.setFreightPay(BigDecimal.valueOf(0.00)); response.setOrderNumber("ORDER10000001"); response.setPayAmount(BigDecimal.valueOf(300.00)); response.setPaymentMethod(orderRequest.getPayment().getPaymentMethod()); response.setOrderStatus("订单提交成功"); response.setGivePoint(100); PayByEcoupon giveE = new PayByEcoupon(); giveE.setId("AAAABBBB"); giveE.setAmount(BigDecimal.valueOf(10.00)); response.setGiveEcoupon(giveE); SettlementResponse.PromotionDetails promotionDetails = new SettlementResponse.PromotionDetails(); promotionDetails.setPriceOff(BigDecimal.valueOf(50.00)); List<ProductFreeInfo> orderFreeList = new ArrayList<ProductFreeInfo>(); promotionDetails.setProductsFree(orderFreeList); response.setPromotionDetails(promotionDetails); response.setTotalPrice(BigDecimal.valueOf(500.00)); response.setTransactionID(orderRequest.getTransactionID()); response.setResult(Result.SUCCESS_RESULT); return new ResponseEntity<OrderResponse>(response, HttpStatus.OK); } @RequestMapping(value = "/customercallback", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<CustomerCallbackResponse> customercallback( @RequestBody CustomerCallbackRequest callbackrequest, ServletRequest request) { UserAccount userAccount = WebHelper.getCurrentUser(request); log.debug("UserAccount:{}", userAccount); log.debug("Request:{}", callbackrequest); CustomerCallbackResponse response = new CustomerCallbackResponse(); response.setResult(Result.SUCCESS_RESULT); return new ResponseEntity<CustomerCallbackResponse>(response, HttpStatus.OK); } }