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);
}
}