Files
nuttyreading-java/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java
2023-12-05 16:28:51 +08:00

969 lines
39 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.peanut.modules.book.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.peanut.common.utils.PageUtils;
import com.peanut.common.utils.R;
import com.peanut.config.Constants;
import com.peanut.config.DelayQueueConfig;
import com.peanut.modules.book.entity.*;
import com.peanut.modules.book.service.*;
import com.peanut.modules.book.to.UserOrderDto;
import com.peanut.modules.book.vo.UserAddressVo;
import com.peanut.modules.book.vo.request.BuyOrderListRequestVo;
import com.peanut.modules.book.vo.request.ModifyOrderAddressRequestVo;
import com.peanut.modules.book.vo.request.ProductRequestVo;
import com.peanut.modules.book.vo.request.ProductTransportVo;
import com.peanut.modules.book.vo.response.BuyOrderResponseVo;
import com.peanut.modules.book.vo.response.ExpressQueryResponseVo;
import com.peanut.modules.book.vo.response.OrderAddressResponseVo;
import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo;
import com.peanut.modules.pay.weChatPay.service.WxpayService;
import com.peanut.modules.sys.entity.SysConfigEntity;
import com.peanut.modules.sys.service.SysConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
/**
* 订单表
*
* @author yl
* @email yl328572838@163.com
* @date 2022-08-29 15:27:44
*/
@Slf4j
@RestController
@RequestMapping("book/buyOrder")
public class BuyOrderController {
@Autowired
private BuyOrderService buyOrderService;
@Autowired
private ShopProductService shopProductService;
@Autowired
private BuyOrderDetailService buyOrderDetailService;
@Autowired
private CouponService couponService;
@Autowired
private CouponHistoryService couponHistoryService;
@Autowired
private OrderCartService orderCartService;
@Autowired
private MyUserService myUserService;
@Autowired
private TransactionDetailsService transactionDetailsService;
@Autowired
private UserEbookBuyService userEbookBuyService;
@Autowired
private WxpayService wxpayService;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private ShopProductBookService shopProductBookService;
@Autowired
private ExpressOrderService expressOrderService;
@Autowired
private UserAddressService userAddressService;
@Autowired
private ExpressFeeService expressFeeService;
@Autowired
private SysConfigService sysConfigService;
@Autowired
private BuyOrderProductService buyOrderProductService;
@Autowired
private ProvinceService provinceService;
@Autowired
private CityService cityService;
@Autowired
private CountyService countyService;
@RequestMapping(value = "/decomposeShipment", method = RequestMethod.POST)
public R decomposeShipment(@RequestBody BuyOrderListRequestVo requestVo) {
Map<String, Object> result = buyOrderService.decomposeShipment(requestVo);
return R.ok().put("result", result);
}
// TODO 新版本上线后废弃
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params) throws Exception {
PageUtils page = buyOrderService.list(params);
return R.ok().put("page", page);
}
/**
* 订单列表
*
* @param requestVo request value object
* @return R
*/
@RequestMapping(path = "/orderList", method = RequestMethod.POST)
public R orderList(@RequestBody BuyOrderListRequestVo requestVo) {
Map<String, Object> result = buyOrderService.orderList(requestVo);
return R.ok().put("result", result);
}
/**
* 获取用户订单列表
* @param userOrderDto
* @return
*/
@RequestMapping("/getUserOrderList")
public R getUserOrderList(@RequestBody UserOrderDto userOrderDto){
Page<BuyOrder> userOrderList = buyOrderService.getUserOrderList(userOrderDto);
return R.ok().put("page",userOrderList);
}
/**
* 获取用户订单各个状态的数量
* @param map
* @return
*/
@RequestMapping("/getUserOrderStatusNum")
public R getUserOrderStatusNum(@RequestBody Map<String,Object> map){
Integer userId = Integer.valueOf(map.get("userId").toString());
List<BuyOrder> userOrderStatusNum = buyOrderService.getUserOrderStatusNum(userId);
Map<String, Integer> m = new HashMap<>();
for (BuyOrder b : userOrderStatusNum){
m.put(b.getOrderStatus().toString(),b.getStatusNum());
}
return R.ok().put("map",m);
}
/**
* 订单详情
*
* @param orderSn 订单号
* @return R
*/
@RequestMapping(path = "/orderDetail", method = RequestMethod.GET)
public R orderDetail(@RequestParam("orderSn") String orderSn) {
BuyOrderResponseVo buyOrderResponseVo = buyOrderService.orderDetail(orderSn);
return R.ok().put("result", buyOrderResponseVo);
}
/**
* 下单
* TODO 原下单接口,新版本上线后废弃
*
* @param buyOrder 订单
* @return R
*/
@RequestMapping("/buySave")
@Transactional
public R buySave(@RequestBody BuyOrder buyOrder) throws IOException {
return R.error("app版本太低请升级后再购买");
// 获取订单详情
// List<BuyOrderDetail> buyOrderDetails = buyOrder.getProducts();
// // 订单总金额
// BigDecimal totalPrice = new BigDecimal(0);
// // 遍历商品总价计算
// for (BuyOrderDetail buyOrderDetail : buyOrderDetails) {
// Integer productId = buyOrderDetail.getProductId();
// int quantity = buyOrderDetail.getQuantity();
// ShopProduct product = shopProductService.getById(productId);
// BigDecimal price = getRealPrice(product);
// if (!handleStock(buyOrderDetail, product)) {
// return R.error(500, "库存不足");
// }
// totalPrice = totalPrice.add(price.multiply(BigDecimal.valueOf(quantity)));
// buyOrderDetail.setProductName(product.getProductName());
// buyOrderDetail.setProductPrice(product.getPrice());
// int originWeight = product.getWeight();
// int originWeightIntValue = originWeight / 100;
// int originWeightDecimalValue = originWeightIntValue % 100;
// buyOrderDetail.setWeight(BigDecimal.valueOf(originWeightIntValue).add(BigDecimal.valueOf(originWeightDecimalValue).divide(new BigDecimal(100),
// MathContext.DECIMAL64)));
// buyOrderDetail.setProductUrl(product.getProductImages());
// buyOrderDetail.setOrderStatus(Constants.ORDER_STATUS_TO_BE_PAID);
// }
//
// totalPrice = totalPrice.subtract(useCouponAmount(buyOrder));
// totalPrice = totalPrice.add(getShoppingAmount(buyOrder));
// String orderSn = IdWorker.getTimeId().substring(0, 32);
// buyOrder.setOrderSn(orderSn);
// buyOrder.setPaymentDate(new Date());
// QueryWrapper<UserAddress> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq("id", buyOrder.getAddressId());
// UserAddress userAddress = userAddressService.getOne(queryWrapper);
// UserAddressVo vo = new UserAddressVo();
// vo = userAddressService.getAddressName(vo, userAddress.getRegionCode());
// buyOrder.setProvince(vo.getProvince());
// buyOrder.setCity(vo.getCity());
// buyOrder.setDistrict(vo.getCounty());
// buyOrder.setAddress(vo.getDetailAddress());
// buyOrderService.save(buyOrder);
//
// for (BuyOrderDetail buyOrderDetail : buyOrderDetails) {
// buyOrderDetail.setOrderId(buyOrder.getOrderId());
// buyOrderDetail.setUserId(buyOrder.getUserId());
// if (Constants.BUY_TYPE_CART.equals(buyOrder.getBuyType())) {
// handleBuyCart(buyOrder, buyOrderDetail);
// }
// }
// buyOrderDetailService.saveBatch(buyOrderDetails);
// // 1. 虚拟币支付
// if (Constants.PAYMENT_METHOD_VIRTUAL.equals(buyOrder.getPaymentMethod())) {
// buyOrder.setOrderStatus(Constants.ORDER_STATUS_TO_BE_SHIPPED);
// MyUserEntity user = this.myUserService.getById(buyOrder.getUserId());
// if (usePeanutCoin(user, totalPrice)) {
// // 更新订单状态
// buyOrderService.updateOrderStatus(user.getId(), buyOrder.getOrderSn(), "0");
// recordTransaction(buyOrder, user, totalPrice);
// addEbookToUser(buyOrderDetails, buyOrder);
// } else {
// return R.error(500, "花生币余额不足!");
// }
// }
// // 2. 微信支付
// if (Constants.PAYMENT_METHOD_WECHAT_PAY.equals(buyOrder.getPaymentMethod())) {
// rabbitTemplate.convertAndSend(
// DelayQueueConfig.ORDER_TO_BE_PAY_EXCHANGE,
// DelayQueueConfig.ORDER_TO_BE_PAY_ROUTING_KEY,
// buyOrder.getOrderId(),
// messagePostProcessor()
// );
// WechatPaymentInfo paymentInfo = new WechatPaymentInfo();
// paymentInfo.setOrderSn(orderSn);
// paymentInfo.setBuyOrderId(buyOrder.getOrderId());
// paymentInfo.setTotalAmount(totalPrice);
// wxpayService.prepay(paymentInfo);
// }
// Map<String, Object> result = new HashMap<>();
// result.put("orderSn", buyOrder.getOrderSn());
// result.put("money", totalPrice);
// return R.ok(result);
}
/**
* 下单
*
* @param buyOrder
* @return
* @throws IOException
*/
@RequestMapping(value = "/placeOrder", method = RequestMethod.POST)
@Transactional
public R placeOrder(@RequestBody BuyOrder buyOrder) throws IOException {
List<BuyOrderProduct> buyOrderProductList = buyOrder.getProductList();
// 订单总金额
BigDecimal totalPrice = new BigDecimal(0);
//是否存在手摸或脚模
List<Integer> sjc =Arrays.asList(128,129,130,131);
boolean sj_check = false;
// 遍历商品总价计算
for (BuyOrderProduct buyOrderProduct : buyOrderProductList) {
if(sjc.contains(buyOrderProduct.getProductId())){
sj_check = true;
}
Integer productId = buyOrderProduct.getProductId();
int quantity = buyOrderProduct.getQuantity();
ShopProduct product = shopProductService.getById(productId);
BigDecimal price = getRealPrice(product);
if (!handleStock(buyOrderProduct, product)) {
return R.error(500, "库存不足");
}
totalPrice = totalPrice.add(price.multiply(BigDecimal.valueOf(quantity)));
}
totalPrice = totalPrice.subtract(useCouponAmount(buyOrder));
totalPrice = totalPrice.add(getShoppingAmount(buyOrder));
String orderSn = IdWorker.getTimeId().substring(0, 32);
buyOrder.setOrderSn(orderSn);
QueryWrapper<UserAddress> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id", buyOrder.getAddressId());
UserAddress userAddress = userAddressService.getOne(queryWrapper);
UserAddressVo vo = new UserAddressVo();
vo = userAddressService.getAddressName(vo, userAddress.getRegionCode());
buyOrder.setProvince(vo.getProvince());
buyOrder.setCity(vo.getCity());
buyOrder.setDistrict(vo.getCounty());
buyOrder.setAddress(userAddress.getDetailAddress());
buyOrderService.save(buyOrder);
//解决购物车相关问题
for (BuyOrderProduct buyOrderProduct : buyOrderProductList) {
buyOrderProduct.setOrderId(buyOrder.getOrderId());
if (Constants.BUY_TYPE_CART.equals(buyOrder.getBuyType())) {
handleBuyCart(buyOrder, buyOrderProduct);
}
}
buyOrderProductService.saveBatch(buyOrderProductList);
// 1. 虚拟币支付
if (Constants.PAYMENT_METHOD_VIRTUAL.equals(buyOrder.getPaymentMethod())) {
buyOrder.setOrderStatus(Constants.ORDER_STATUS_TO_BE_SHIPPED);
MyUserEntity user = this.myUserService.getById(buyOrder.getUserId());
if (usePeanutCoin(user, totalPrice,sj_check)) {
// 更新订单状态
buyOrderService.updateOrderStatus(user.getId(), buyOrder.getOrderSn(), "0");
recordTransaction(buyOrder, user, totalPrice);
addEbookToUser(buyOrderProductList, buyOrder, 0);
} else {
return R.error(500, "花生币余额不足!");
}
}
// 2. 微信支付,需要预支付
if (Constants.PAYMENT_METHOD_WECHAT_PAY.equals(buyOrder.getPaymentMethod())) {
rabbitTemplate.convertAndSend(
DelayQueueConfig.ORDER_TO_BE_PAY_EXCHANGE,
DelayQueueConfig.ORDER_TO_BE_PAY_ROUTING_KEY,
buyOrder.getOrderId(),
messagePostProcessor()
);
WechatPaymentInfo paymentInfo = new WechatPaymentInfo();
paymentInfo.setOrderSn(orderSn);
paymentInfo.setBuyOrderId(buyOrder.getOrderId());
paymentInfo.setTotalAmount(totalPrice);
wxpayService.prepay(paymentInfo);
}
Map<String, Object> result = new HashMap<>();
result.put("orderSn", buyOrder.getOrderSn());
result.put("money", totalPrice);
return R.ok(result);
}
@RequestMapping("/llll")
public R ls(){
LambdaQueryWrapper<BuyOrder> wrapper = new LambdaQueryWrapper<>();
ArrayList<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
wrapper.in(BuyOrder::getOrderStatus,integers);
wrapper.eq(BuyOrder::getOrderType,"order");
List<BuyOrder> list = buyOrderService.list(wrapper);
for (BuyOrder b : list){
List<Integer> orderBookId = shopProductBookService.getOrderBookId(b.getOrderSn());
System.out.println(orderBookId);
userEbookBuyService.addBookForUser(b.getUserId(),orderBookId);
}
return R.ok();
}
@RequestMapping("/llll1")
public R ls1(){
Integer[] is = {128,129,130};
List<Integer> collect = buyOrderProductService.getBaseMapper().selectList(new LambdaQueryWrapper<BuyOrderProduct>().in(BuyOrderProduct::getProductId, is)).stream().map(BuyOrderProduct::getOrderId).collect(Collectors.toList());
LambdaQueryWrapper<BuyOrder> wrapper = new LambdaQueryWrapper<>();
ArrayList<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
wrapper.in(BuyOrder::getOrderStatus,integers);
wrapper.in(BuyOrder::getOrderId,collect);
wrapper.eq(BuyOrder::getOrderType,"order");
List<BuyOrder> list = buyOrderService.list(wrapper);
for (BuyOrder b : list){
MyUserEntity byId = myUserService.getById(b.getUserId());
byId.setPointPower(1);
myUserService.updateById(byId);
}
return R.ok();
}
/**
* 计算运费
*
* @param vo
* @return
*/
@RequestMapping(path = "/calculateTransportPrice", method = RequestMethod.POST)
public R getTransportPrice(@RequestBody ProductTransportVo vo) {
//商品列表和收货区域编码
String regionCode = vo.getRegionCode();
List<ProductRequestVo> products = vo.getProducts();
//查询默认快递公司代码 defaultExpress.getParamValue()
QueryWrapper<SysConfigEntity> configQueryWrapper = new QueryWrapper<>();
configQueryWrapper.eq("param_key", "DEFAULT_EXPRESS");
SysConfigEntity defaultExpress = sysConfigService.getOne(configQueryWrapper);
if (defaultExpress == null) {
return R.error("未设置默认快递");
}
//总运费
BigDecimal totalExpressFee = new BigDecimal(0);
BigDecimal totalWeight01 = new BigDecimal(0);
BigDecimal totalWeight02 = new BigDecimal(0);
BigDecimal totalWeight04 = new BigDecimal(0);
for (ProductRequestVo product : products) {
ShopProduct p = shopProductService.getById(product.getProductId());
if (p != null) {
//包邮
if(p.getIsFreeMail()==0){
continue;
}else {
BigDecimal weight = BigDecimal.valueOf(Double.valueOf(p.getWeight()) / 1000.0);
BigDecimal totalWeight = weight.multiply(new BigDecimal(product.getQuantity()));
if ("01".equals(p.getGoodsType())){
totalWeight01 = totalWeight01.add(totalWeight);
}
if ("02".equals(p.getGoodsType())){
totalWeight02 = totalWeight02.add(totalWeight);
}
//预售书单独计算
if ("03".equals(p.getGoodsType())){
totalExpressFee = totalExpressFee.add(
expressFeeService.calculateExpressFee(defaultExpress.getParamValue(), totalWeight.setScale(0, RoundingMode.UP), regionCode));
}
if ("04".equals(p.getGoodsType())){
totalWeight04 = totalWeight04.add(totalWeight);
}
}
}else {
return R.error("未查询到商品");
}
}
if(totalWeight01.compareTo(BigDecimal.ZERO)!=0){
totalExpressFee = totalExpressFee.add(
expressFeeService.calculateExpressFee(defaultExpress.getParamValue(), totalWeight01.setScale(0, RoundingMode.UP), regionCode));
}
if(totalWeight02.compareTo(BigDecimal.ZERO)!=0){
totalExpressFee = totalExpressFee.add(
expressFeeService.calculateExpressFee(defaultExpress.getParamValue(), totalWeight02.setScale(0, RoundingMode.UP), regionCode));
}
if(totalWeight04.compareTo(BigDecimal.ZERO)!=0){
totalExpressFee = totalExpressFee.add(
expressFeeService.calculateExpressFee(defaultExpress.getParamValue(), totalWeight04.setScale(0, RoundingMode.UP), regionCode));
}
return R.ok().put("result", totalExpressFee);
}
/**
* 列表
*/
@RequestMapping("/getMyOrderList")
public R getMyOrderList(@RequestParam Map<String, Object> params) {
PageUtils page = buyOrderService.getMyOrderList(params);
return R.ok().put("page", page);
}
/**
* @param orderSn 订单号
* @return R
*/
@RequestMapping(value = "/cancelOrder", method = RequestMethod.GET)
@Transactional
public R appDelete(@RequestParam("orderSn") String orderSn) {
QueryWrapper<BuyOrder> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("order_sn", orderSn);
BuyOrder buyOrder = buyOrderService.getOne(queryWrapper);
if (buyOrder == null) {
return R.error("订单不存在");
}
if (buyOrder.getCouponId() != null) {
Integer couponId = buyOrder.getCouponId();
CouponHistoryEntity couponHistory = couponHistoryService.getById(couponId);
couponHistory.setUseStatus(0);
couponHistoryService.updateById(couponHistory);
}
// 库存回滚
QueryWrapper<BuyOrderProduct> buyOrderProductQueryWrapper = new QueryWrapper<>();
buyOrderProductQueryWrapper.eq("order_id", buyOrder.getOrderId());
List<BuyOrderProduct> buyOrderProductList = buyOrderProductService.list(buyOrderProductQueryWrapper);
for (BuyOrderProduct buyOrderProduct : buyOrderProductList) {
Integer productId = buyOrderProduct.getProductId();
ShopProduct product = shopProductService.getById(productId);
product.setProductStock(product.getProductStock() + buyOrderProduct.getQuantity());
shopProductService.updateById(product);
}
buyOrderService.removeById(buyOrder.getOrderId());
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody BuyOrder buyOrder) {
buyOrderService.updateById(buyOrder);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody List<String> orderSnList) {
QueryWrapper<BuyOrder> queryWrapper = new QueryWrapper<>();
queryWrapper.in("order_sn", orderSnList);
buyOrderService.remove(queryWrapper);
return R.ok();
}
/**
* app 端 取消订单
* TODO 新版本上线后此方法删除
*/
@RequestMapping("/appDelete")
@Transactional
public R appDelete(@RequestParam("orderId") Integer orderId) {
//1. 判断订单状态
BuyOrder byId = buyOrderService.getById(orderId);
if (byId != null) {
//2. 判断当前订单是否存在优惠券 进行 回显
Integer couponId = byId.getCouponId();
if (couponId != null) {
CouponHistoryEntity byId1 = couponHistoryService.getById(couponId);
byId1.setUseStatus(0);
couponHistoryService.updateById(byId1);
}
// 库存回滚
List<BuyOrderDetail> buyOrderDetailEntities = buyOrderDetailService.getBaseMapper().selectList(new QueryWrapper<BuyOrderDetail>()
.eq("order_id", byId.getOrderId()));
for (BuyOrderDetail buyOrderDetailEntity : buyOrderDetailEntities) {
Integer productId = buyOrderDetailEntity.getProductId();
ShopProduct product = shopProductService.getById(productId);
product.setProductStock(product.getProductStock() + buyOrderDetailEntity.getQuantity());
shopProductService.updateById(product);
}
buyOrderService.removeById(orderId);
}
return R.ok();
}
/**
* 充值专用订单生成接口
*/
@RequestMapping("/rechargeSave")
@Transactional
public R rechargeSave(@RequestBody BuyOrder buyOrder) throws IOException {
String timeId = IdWorker.getTimeId().substring(0, 32);
buyOrder.setOrderSn(timeId);
buyOrderService.save(buyOrder);
//下单微信支付预付款订单
BuyOrder buyOrderEntity = buyOrderService.getBaseMapper().selectOne(new LambdaQueryWrapper<BuyOrder>().eq(BuyOrder::getOrderSn, timeId));
WechatPaymentInfo paymentInfo = new WechatPaymentInfo();
paymentInfo.setOrderSn(buyOrderEntity.getOrderSn());
paymentInfo.setBuyOrderId(Integer.valueOf(buyOrderEntity.getProductId()));
paymentInfo.setTotalAmount(buyOrderEntity.getRealMoney());
wxpayService.prepay(paymentInfo);
rabbitTemplate.convertAndSend(
DelayQueueConfig.ORDER_TO_BE_PAY_EXCHANGE,
DelayQueueConfig.ORDER_TO_BE_PAY_ROUTING_KEY,
buyOrder.getOrderId(),
messagePostProcessor()
);
return R.ok().put("orderSn", timeId);
}
/**
* 获取订单详情
* TODO 新版本上线后删除
*
* @param orderId
* @return
*/
@RequestMapping("/getOrderDetail")
public R getOrderDetail(@RequestParam Integer orderId) {
LambdaQueryWrapper<BuyOrder> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BuyOrder::getOrderId, orderId);
BuyOrder one = buyOrderService.getOne(wrapper);
if (one.equals(null)) {
return R.error("order error:order is null");
}
//添加用户信息
one.setUser(myUserService.getById(one.getUserId()));
//添加商品信息
LambdaQueryWrapper<BuyOrderDetail> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(BuyOrderDetail::getOrderId, orderId);
List<BuyOrderDetail> buyOrderDetailEntities = buyOrderDetailService.getBaseMapper().selectList(wrapper1);
one.setProducts(buyOrderDetailEntities);
return R.ok().put("detail", one);
}
/**
* 获取订单详情
*
* @param orderId 订单 ID
* @return R
* TODO 新版本上线后 该方法删除
*/
@RequestMapping(value = "/getOrderInfo", method = RequestMethod.GET)
public R appGetOrderInfo(@RequestParam("orderId") Integer orderId) {
BuyOrder buyOrder = buyOrderService.getById(orderId);
QueryWrapper<BuyOrderDetail> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("order_id", orderId);
List<BuyOrderDetail> buyOrderDetailList = buyOrderDetailService.list(queryWrapper);
for (BuyOrderDetail buyOrderDetail : buyOrderDetailList) {
ShopProduct prod = shopProductService.getById(buyOrderDetail.getProductId());
if (prod != null) {
buyOrderDetail.setImage(prod.getProductImages());
}
}
return R.ok().put("result", buyOrder);
}
/**
* 修改订单地址
*
* @param addressRequestVo 地址请求 value object
* @return R
*/
@RequestMapping(value = "/modifyConsigneeAddress", method = RequestMethod.POST)
public R modifyOrderAddress(@RequestBody ModifyOrderAddressRequestVo addressRequestVo) {
QueryWrapper<BuyOrder> buyOrderQueryWrapper = new QueryWrapper<>();
buyOrderQueryWrapper.eq("order_sn", addressRequestVo.getOrderSn());
BuyOrder buyOrder = buyOrderService.getOne(buyOrderQueryWrapper);
String provinceCode = addressRequestVo.getProvinceCode();
QueryWrapper<Province> provinceQueryWrapper = new QueryWrapper<>();
provinceQueryWrapper.eq("region_code", provinceCode);
Province province = provinceService.getOne(provinceQueryWrapper);
buyOrder.setProvince(province.getProvName());
String cityCode = addressRequestVo.getCityCode();
QueryWrapper<City> cityQueryWrapper = new QueryWrapper<>();
cityQueryWrapper.eq("region_code", cityCode);
City city = cityService.getOne(cityQueryWrapper);
buyOrder.setCity(city.getCityName());
String countyCode = addressRequestVo.getCountyCode();
QueryWrapper<County> countyQueryWrapper = new QueryWrapper<>();
countyQueryWrapper.eq("region_code", countyCode);
County county = countyService.getOne(countyQueryWrapper);
buyOrder.setDistrict(county.getCountyName());
buyOrder.setShippingUser(addressRequestVo.getConsigneeName());
buyOrder.setUserPhone(addressRequestVo.getConsigneeMobile());
buyOrder.setAddress(addressRequestVo.getAddress());
buyOrderService.updateById(buyOrder);
return R.ok();
}
/**
* 获取订单地址
*
* @param orderSn 订单号
* @return R
*/
@RequestMapping(value = "/getConsigneeAddress", method = RequestMethod.GET)
public R getOrderAddress(@RequestParam("orderSn") String orderSn) {
QueryWrapper<BuyOrder> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("order_sn", orderSn);
BuyOrder buyOrder = buyOrderService.getOne(queryWrapper);
OrderAddressResponseVo responseVo = new OrderAddressResponseVo();
responseVo.setConsigneeMobile(buyOrder.getUserPhone());
responseVo.setConsigneeName(buyOrder.getShippingUser());
responseVo.setDetailAddress(buyOrder.getAddress());
String provinceName = buyOrder.getProvince();
String cityName = buyOrder.getCity();
String countyName = buyOrder.getDistrict();
QueryWrapper<Province> provinceQueryWrapper = new QueryWrapper<>();
provinceQueryWrapper.eq("prov_name", provinceName);
Province province = provinceService.getOne(provinceQueryWrapper);
responseVo.setProvinceCode(province.getRegionCode());
QueryWrapper<City> cityQueryWrapper = new QueryWrapper<>();
cityQueryWrapper.eq("city_name", cityName);
City city = cityService.getOne(cityQueryWrapper);
responseVo.setCityCode(city.getRegionCode());
QueryWrapper<County> countyQueryWrapper = new QueryWrapper<>();
countyQueryWrapper.eq("county_name", countyName);
County county = countyService.getOne(countyQueryWrapper);
responseVo.setCountyCode(county.getRegionCode());
return R.ok().put("result", responseVo);
}
/**
* 查询订单快递
*
* @param expressOrderSn 运单号
* @return R
*/
// @RequestMapping(value = "/queryExpress", method = RequestMethod.GET)
// public R queryExpress(@RequestParam("expressOrderSn") String expressOrderSn,
// @RequestParam("expressCompanyCode") String expressCompanyCode,
// @RequestParam("customerName") String customerName) {
//
// ExpressQueryResponseVo vo = new ExpressQueryResponseVo();
// ExpressQueryResponse expressQueryResponse = expressOrderService.queryExpressOrder(expressCompanyCode, expressOrderSn, customerName);
// vo.setLogisticCode(expressQueryResponse.getLogisticCode());
// vo.setTraces(expressQueryResponse.getTraces());
// return R.ok().put("result", vo);
// }
/**
* 查询快递订单轨迹
* @param expressOrderSn
* @return
*/
@RequestMapping("/searchExpress")
public R searchExpress(@RequestParam String expressOrderSn){
LambdaQueryWrapper<ExpressOrder> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ExpressOrder::getExpressOrderSn,expressOrderSn);
ExpressOrder expressOrder = expressOrderService.getBaseMapper().selectOne(wrapper);
if(expressOrder==null){
return R.error("查询失败");
}
String tel = expressOrder.getConsigneeMobile().substring(expressOrder.getConsigneeMobile().length()-4);
ExpressQueryResponse expressQueryResponse = expressOrderService.queryExpressOrder(expressOrder.getExpressCompanyCode(), expressOrderSn, tel);
return R.ok().put("express",expressQueryResponse);
}
/**
* 检查可合并的订单信息
*
* @return
*/
@RequestMapping("/checkOrder")
public R checkOrder(@RequestParam Map<String, Object> params) {
Page page = buyOrderService.checkOrder(params);
return R.ok().put("page", page);
}
/**
* 检查传来的orderId 是否有可合并的其他订单信息
*
* @param orderIds
* @return
*/
@RequestMapping("/checkMerge")
public R checkMerge(@RequestBody Integer[] orderIds) {
List list = buyOrderService.checkOrder(orderIds);
return R.ok().put("list", list);
}
/**
* 分包发货
*
* @param expressCompanyCode 快递公司编码
* @param buyOrderProductId 订单商品
* @return R
*/
@RequestMapping(value = "/delivery", method = RequestMethod.POST)
public R delivery(@RequestParam("expressCompanyCode") String expressCompanyCode,
@RequestBody List<Integer> buyOrderProductId) throws Exception {
buyOrderService.delivery(expressCompanyCode, buyOrderProductId);
return R.ok();
}
@RequestMapping("/mytest")
public R mytest() throws IOException {
String mytest = buyOrderService.mytest();
return R.ok().put("url",mytest);
}
/**
* 获取商品实际价格
*
* @param product 商品信息
* @return 商品实际价格
*/
private BigDecimal getRealPrice(ShopProduct product) {
BigDecimal activityPrice = product.getActivityPrice();
return (activityPrice == null || activityPrice.equals(BigDecimal.ZERO)) ? product.getPrice() : activityPrice;
}
/**
* 处理商品库存
* TODO 新版本上线后删除此方法
*
* @param buyOrderDetail
* @param product
* @return
*/
private boolean handleStock(BuyOrderDetail buyOrderDetail, ShopProduct product) {
int quantity = buyOrderDetail.getQuantity();
if (product.getProductStock() - quantity < 0) {
return false;
}
product.setProductStock(product.getProductStock() - quantity);
product.setSumSales(product.getSumSales() + quantity);
shopProductService.updateById(product);
return true;
}
/**
* 处理商品库存
*
* @param buyOrderProduct 订单商品信息
* @param product 商品
* @return boolean
*/
private boolean handleStock(BuyOrderProduct buyOrderProduct, ShopProduct product) {
int quantity = buyOrderProduct.getQuantity();
if (product.getProductStock() - quantity < 0) {
return false;
}
product.setProductStock(product.getProductStock() - quantity);
product.setSumSales(product.getSumSales() + quantity);
shopProductService.updateById(product);
return true;
}
/**
* 使用优惠券
*
* @param buyOrder
* @return
*/
private BigDecimal useCouponAmount(BuyOrder buyOrder) {
Integer couponId = buyOrder.getCouponId();
if (couponId != null) {
CouponHistoryEntity couponHistory = couponHistoryService.getById(couponId);
couponHistory.setUseStatus(1);
couponHistory.setUseTime(new Date());
couponHistory.setOrderId(Long.valueOf(buyOrder.getOrderId()));
couponHistory.setOrderSn(buyOrder.getOrderSn());
CouponEntity coupon = couponService.getById(couponHistory.getCouponId());
return coupon.getCouponAmount();
}
return BigDecimal.ZERO;
}
/**
* 计算运费
*
* @param buyOrder
* @return
*/
private BigDecimal getShoppingAmount(BuyOrder buyOrder) {
return buyOrder.getOrderMoney() == null ? BigDecimal.ZERO : buyOrder.getShippingMoney();
}
/**
* 使用虚拟币支付
*
* @param user
* @param totalPrice
* @return
*/
private boolean usePeanutCoin(MyUserEntity user, BigDecimal totalPrice,boolean sj_check) {
if (user.getPeanutCoin().compareTo(totalPrice) >= 0) {
user.setPeanutCoin(user.getPeanutCoin().subtract(totalPrice));
if (sj_check){
user.setPointPower(1);
}
this.myUserService.updateById(user);
return true;
}
return false;
}
/**
* 交易记录
*
* @param buyOrder
* @param user
* @param totalPrice
*/
private void recordTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal totalPrice) {
TransactionDetailsEntity transactionDetailsEntity = new TransactionDetailsEntity();
transactionDetailsEntity.setRemark("订单编号为 - " + buyOrder.getOrderSn());
transactionDetailsEntity.setUserId(user.getId());
transactionDetailsEntity.setUserName(user.getNickname());
transactionDetailsEntity.setChangeAmount(totalPrice.negate());
transactionDetailsEntity.setUserBalance(user.getPeanutCoin());
transactionDetailsEntity.setTel(user.getTel());
transactionDetailsEntity.setOrderType("购买商品");
transactionDetailsService.save(transactionDetailsEntity);
}
/**
* 给用户添加电子书
* TODO 新版本上线删除此接口
* @param products
*
* @param buyOrder
*/
private void addEbookToUser(List<BuyOrderDetail> products, BuyOrder buyOrder) {
List<Integer> productIds = products.stream().map(BuyOrderDetail::getProductId).collect(Collectors.toList());
for (Integer productId : productIds) {
List<Integer> collect = shopProductBookService.getBaseMapper().selectList(new LambdaQueryWrapper<ShopProductBookEntity>()
.eq(ShopProductBookEntity::getProductId, productId)
.eq(ShopProductBookEntity::getDelFlag, 0)).stream().map(ShopProductBookEntity::getBookId).collect(Collectors.toList());
userEbookBuyService.addBookForUser(buyOrder.getUserId(), collect);
}
}
/**
* 给用户添加电子书
* TODO 这里的参数 0 没用 新版本上线后删除
*
* @param products
* @param buyOrder
*/
private void addEbookToUser(List<BuyOrderProduct> products, BuyOrder buyOrder, Integer x) {
List<Integer> productIds = products.stream().map(BuyOrderProduct::getProductId).collect(Collectors.toList());
for (Integer productId : productIds) {
List<Integer> collect = shopProductBookService.getBaseMapper().selectList(new LambdaQueryWrapper<ShopProductBookEntity>()
.eq(ShopProductBookEntity::getProductId, productId)
.eq(ShopProductBookEntity::getDelFlag, 0)).stream().map(ShopProductBookEntity::getBookId).collect(Collectors.toList());
userEbookBuyService.addBookForUser(buyOrder.getUserId(), collect);
}
}
/**
* 购物车
* TODO 新版本上线后删除此方法
*
* @param buyOrder
* @param buyOrderDetail
*/
private void handleBuyCart(BuyOrder buyOrder, BuyOrderDetail buyOrderDetail) {
List<OrderCartEntity> orderCartList = orderCartService.getBaseMapper().selectList(new QueryWrapper<OrderCartEntity>()
.eq("user_id", buyOrder.getUserId()).eq("product_id", buyOrderDetail.getProductId()));
if (orderCartList.size() > 0) {
List<Integer> collect = orderCartList.stream().map(OrderCartEntity::getCartId).collect(Collectors.toList());
orderCartService.removeByIds(collect);
}
}
/**
* 购物车
*
* @param buyOrder 订单
* @param buyOrderProduct
*/
private void handleBuyCart(BuyOrder buyOrder, BuyOrderProduct buyOrderProduct) {
List<OrderCartEntity> orderCartList = orderCartService.getBaseMapper().selectList(new QueryWrapper<OrderCartEntity>()
.eq("user_id", buyOrder.getUserId()).eq("product_id", buyOrderProduct.getProductId()));
if (orderCartList.size() > 0) {
List<Integer> collect = orderCartList.stream().map(OrderCartEntity::getCartId).collect(Collectors.toList());
orderCartService.removeByIds(collect);
}
}
private MessagePostProcessor messagePostProcessor() {
return message -> {
//设置有效期30分钟
message.getMessageProperties().setExpiration(String.valueOf(30 * 60 * 1000));
return message;
};
}
}