@@ -2,21 +2,16 @@ package com.peanut.modules.book.controller;
import java.math.BigDecimal ;
import java.util.* ;
import java.util.concurrent.locks.Lock ;
import java.util.concurrent.locks.ReentrantLock ;
import java.util.stream.Collectors ;
import com.alibaba.fastjson.JSONObject ;
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.conditions.query.QueryChainWrapper ;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page ;
import com.peanut.modules.book.entity.* ;
import com.peanut.modules.book.service.* ;
import lombok.extern.slf4j.Slf4j ;
import lombok.var ;
import org.springframework.beans.BeanUtils ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.web.bind.annotation.PathVariable ;
@@ -28,7 +23,6 @@ import com.peanut.common.utils.PageUtils;
import com.peanut.common.utils.R ;
/**
* 订单表
*
@@ -57,21 +51,9 @@ public class BuyOrderController {
@Autowired
private TransactionDetailsService transactionDetailsService ;
@Autowired
private AuthorService authorService ;
@Autowired
private UserEbookBuyService userEbookBuyService ;
@Autowired
private BookService bookService ;
@Autowired
private BookShelfService bookShelfService ;
@Autowired
private UserRecordService userRecordService ;
@Autowired
private UserFollowUpService userFollowUpService ;
@Autowired
private PayWechatOrderService payWechatOrderService ;
@Autowired
private PayZfbOrderService payZfbOrderService ;
/**
* 订单状态 - 待支付
@@ -85,6 +67,31 @@ public class BuyOrderController {
* 订单状态 - 待收货
*/
private static final String ORDER_STATUS_TO_BE_RECEIVED = " 2 " ;
/**
* 支付方式 - 支付宝 - 支付宝支付
*/
private static final String PAYMENT_METHOD_ALI_PAY = " 1 " ;
/**
* 支付方式 - 微信支付
*/
private static final String PAYMENT_METHOD_WECHAT_PAY = " 2 " ;
/**
* 支付方式 - IOS 内购
*/
private static final String PAYMENT_METHOD_IOS = " 3 " ;
/**
* 支付方式 - 虚拟币支付
*/
private static final String PAYMENT_METHOD_VIRTUAL = " 4 " ;
/**
* 购买方式 - 直接购买
*/
private static final String BUY_TYPE_REDIRECT = " 0 " ;
/**
* 购买方式 - 购物车
*/
private static final String BUY_TYPE_CART = " 1 " ;
@Autowired
private ShopProudictBookService shopProudictBookService ;
@@ -93,7 +100,6 @@ public class BuyOrderController {
* 列表
*/
@RequestMapping ( " /list " )
// @RequiresPermissions("book:buyorder:list")
public R list ( @RequestParam Map < String , Object > params ) throws Exception {
if ( " all " . equals ( params . get ( " orderStatus " ) ) ) {
@@ -105,14 +111,12 @@ public class BuyOrderController {
/**
*
* @param params
* @return 听书未购买页面展示
* (销量最多的书,最先放最前面展示。最新上线的书,预售的书,放最前面展示
* @throws Exception
*/
@RequestMapping ( " /lists " )
// @RequiresPermissions("book:buyorder:list")
public R lists ( @RequestParam Map < String , Object > params ) throws Exception {
if ( " all " . equals ( params . get ( " orderStatus " ) ) ) {
@@ -122,445 +126,84 @@ public class BuyOrderController {
return R . ok ( ) . put ( " page " , page ) ;
}
/**
* 信息
*/
@RequestMapping ( " /info/{orderId} " )
// @RequiresPermissions("book:buyorder:info")
public R info ( @PathVariable ( " orderId " ) Integer orderId ) {
BuyOrderEntity buyOrder = buyOrderService . getById ( orderId ) ;
return R . ok ( ) . put ( " buyOrder " , buyOrder ) ;
}
/**
* 下单
*
* @param buyOrder 订单
* @return R
*/
@RequestMapping ( " /buys ave " )
@RequestMapping ( " /buyS ave " )
@Transactional
public R buys ave ( @RequestBody BuyOrderEntity buyOrder ) {
BigDecimal realMoney = new BigDecimal ( 0 ) ;
Lock l = new ReentrantLock ( ) ;
l . lock ( ) ;
try {
// 根据订单获取订单详情
public R buyS ave ( @RequestBody BuyOrderEntity buyOrder ) {
// 获取订单详情
List < BuyOrderDetailEntity > products = buyOrder . getProducts ( ) ;
BigDecimal bigDecimal1 = new BigDecimal ( 0 ) ;
ArrayList < BuyOrderDetailEntity > list = new ArrayList < > ( ) ;
// 遍历商品 查询价格
// 订单总金额
BigDecimal totalPrice = new BigDecimal ( 0 ) ;
// 遍历商品总价计算
for ( BuyOrderDetailEntity buyOrderDetail : products ) {
BuyOrderDetailEntity buyOrderDetailEntity = new BuyOrderDetailEntity ( ) ;
Integer productId = buyOrderDetail . getProductId ( ) ;
int quantity = buyOrderDetail . getQuantity ( ) ;
ShopProductEntity product = shopProductService . getById ( productId ) ;
BigDecimal activityP rice = product . getActivityPrice ( ) ;
BigDecimal big = new BigDecimal ( 0 ) ;
BigDecimal price = null ;
//activityPrice等于 0, 则原价
if ( activityPrice . equals ( big ) | | activityPrice = = null ) {
price = product . getPrice ( ) ;
} else {
price = product . getActivityPrice ( ) ;
}
Integer quantity = buyOrderDetail . getQuantity ( ) ;
BigDecimal bigDecimal = new BigDecimal ( price . doubleValue ( ) * quantity ) ;
System . out . println ( " bigDecimal=================bigDecimal====================== " + bigDecimal ) ;
bigDecimal1 = bigDecimal1 . add ( bigDecimal ) ;
if ( product . getProductStock ( ) - buyOrderDetail . getQuantity ( ) < 0 ) {
BigDecimal p rice = getRealPrice ( product ) ;
if ( ! handleStock ( buyOrderDetail , product ) ) {
return R . error ( 500 , " 库存不足 " ) ;
}
// 改写 商品库存
product . setProductStock ( product . getProductStock ( ) - buyOrderDetail . getQuantity ( ) ) ;
product . setSumSales ( product . getSumSales ( ) + buyOrderDetail . getQuantity ( ) ) ;
shopProductService . updateById ( product ) ;
BeanUt ils . copyProperties ( buyOrderDetail , buyOrderDetailEntity ) ;
buyOrderDetailEntity . setProductName ( product . getProductName ( ) ) ;
buyOrderDetailEntity . setProductPrice ( product . getPrice ( ) ) ;
buyOrderDetailEntity . setAddressId ( buyOrder . getAddressId ( ) ) ;
buyOrderDetailEntity . setProductUrl ( product . getProductImages ( ) ) ;
buyOrderDetailEntity . setOrderStatus ( " 0 " ) ;
list . add ( buyOrderDetailEntity ) ;
totalPrice = totalPrice . add ( price . multiply ( BigDecimal . valueOf ( quantity ) ) ) ;
buyOrderDetail . setProductName ( product . getProductName ( ) ) ;
buyOrderDetail . setProductPrice ( product . getPrice ( ) ) ;
buyOrderDetail . setAddressId ( buyOrder . getAddressId ( ) ) ;
buyOrderDetail . setProductUrl ( product . getProductImages ( ) ) ;
buyOrderDeta il . setOrderStatus ( ORDER_STATUS_TO_BE_PAID ) ;
}
Integer couponId = buyOrder . getCouponId ( ) ;
if ( couponId ! = null ) {
CouponHistoryEntity byId = couponHistoryService . g etById ( couponId ) ;
CouponEntity coupon = couponService . g etById ( byId . getCouponId ( ) ) ;
BigDecimal amount = coupon . getCouponAmount ( ) ;
bigDecimal1 = bigDecimal1 . subtract ( amount ) ;
totalPrice = totalPrice . subtract ( useCouponAmount ( buyOrder ) ) ;
totalPrice = totalPrice . add ( getShoppingAmount ( buyOrder ) ) ;
String orderSn = IdWorker . getTimeId ( ) . substring ( 0 , 32 ) ;
buyOrder . s etOrderSn ( orderSn ) ;
buyOrder . s etPaymentDate ( new Date ( ) ) ;
buyOrderService . save ( buyOrder ) ;
for ( BuyOrderDetailEntity buyOrderDetail : products ) {
buyOrderDetail . setOrderId ( buyOrder . getOrderId ( ) ) ;
buyOrderDetail . setUserId ( buyOrder . getUserId ( ) ) ;
if ( BUY_TYPE_CART . equals ( buyOrder . getBuyType ( ) ) ) {
handleBuyCart ( buyOrder , buyOrderDetail ) ;
}
if ( buyOrder . getShippingMoney ( ) ! = null ) {
bigDecimal1 = bigDecimal1 . add ( buyOrder . getShippingMoney ( ) ) ;
}
// 减去优惠券金额
realMoney = buyOrder . getRealMoney ( ) ;
if ( bigDecimal1 . compareTo ( realMoney ) = = 0 ) {
//特定格式的时间ID
String timeId = IdWorker . getTimeId ( ) . substring ( 0 , 32 ) ;
buyOrder . setOrderSn ( timeId ) ;
if ( " 4 " . equals ( buyOrder . getPaymentMethod ( ) ) ) {
buyOrderDetailService . saveBatch ( products ) ;
if ( PAYMENT_METHOD_VIRTUAL . equals ( buyOrder . getPaymentMethod ( ) ) ) {
buyOrder . setOrderStatus ( ORDER_STATUS_TO_BE_SHIPPED ) ;
}
buyOrder . setPaymentDate ( new Date ( ) ) ;
buyOrderService . save ( buyOrder ) ;
for ( BuyOrderDetailEntity buyOrderDetailEntity : list ) {
buyOrderDetailEntity . setOrderId ( buyOrder . getOrderId ( ) ) ;
buyOrderDetailEntity . setUserId ( buyOrder . getUserId ( ) ) ;
// 判断结算状态 下单 位置 0- 商品页直接下单 1- 购物车结算
String buyType = buyOrder . getBuyType ( ) ;
if ( buyType . equals ( " 1 " ) ) {
// 更改购物车 状态
List < OrderCartEntity > list1 = orderCartService . getBaseMapper ( ) . selectList ( new QueryWrapper < OrderCartEntity > ( )
. eq ( " user_id " , buyOrder . getUserId ( ) ) . eq ( " product_id " , buyOrderDetailEntity . getProductId ( ) ) ) ;
if ( list1 . size ( ) > 0 ) {
List < Integer > collect = list1 . stream ( ) . map ( orderCartEntity - > {
Integer cartId = orderCartEntity . getCartId ( ) ;
return cartId ;
} ) . collect ( Collectors . toList ( ) ) ;
orderCartService . removeByIds ( collect ) ;
}
}
}
buyOrderDetailService . saveBatch ( list ) ;
if ( couponId ! = null ) {
//更改优惠券状态
CouponHistoryEntity one = couponHistoryService . getById ( couponId ) ;
one . setUseStatus ( 1 ) ;
one . setUseTime ( new Date ( ) ) ;
one . setOrderId ( Long . valueOf ( buyOrder . getOrderId ( ) ) ) ;
one . setOrderSn ( buyOrder . getOrderSn ( ) ) ;
couponHistoryService . updateById ( one ) ;
}
if ( " 4 " . equals ( buyOrder . getPaymentMethod ( ) ) ) {
MyUserEntity user = this . myUserService . getById ( buyOrder . getUserId ( ) ) ;
if ( user . get PeanutCoin ( ) . compareTo ( realMoney ) > = 0 ) {
user . setPeanutCoin ( user . getPeanutCoin ( ) . subtract ( realMoney ) ) ;
this . myUserService . updateById ( us er ) ;
// 添加消费信息
TransactionDetailsEntity transactionDetailsEntity = new TransactionDetailsEntity ( ) ;
transactionDetailsEntity . setRemark ( " 购买健康超市用品!订单编号为《 " + buyOrder . getOrderSn ( ) + " 》 " ) ;
transactionDetailsEntity . setUserId ( user . getId ( ) ) ;
transactionDetailsEntity . setUserName ( user . getNickname ( ) ) ;
transactionDetailsEntity . setChangeAmount ( realMoney . negate ( ) ) ;
transactionDetailsEntity . setUserBalance ( user . getPeanutCoin ( ) ) ;
transactionDetailsEntity . setTel ( user . getTel ( ) ) ;
transactionDetailsEntity . setOrderType ( " 购买健康超市用品! " ) ;
transactionDetailsService . save ( transactionDetailsEntity ) ;
//购买成功后,添加书到个人表中
List < Integer > pros = products . stream ( ) . map ( BuyOrderDetailEntity : : getProductId ) . collect ( Collectors . toList ( ) ) ;
for ( Integer s : pros ) {
List < Integer > collect = shopProudictBookService . getBaseMapper ( ) . selectList ( new LambdaQueryWrapper < ShopProudictBookEntity > ( )
. eq ( ShopProudictBookEntity : : getProudictId , s )
. eq ( ShopProudictBookEntity : : getDelFlag , 0 ) ) . stream ( ) . map ( ShopProudictBookEntity : : getBookId ) . collect ( Collectors . toList ( ) ) ;
userEbookBuyService . addBookForUser ( buyOrder . getUserId ( ) , collect ) ;
}
if ( usePeanutCoin ( user , totalPrice ) ) {
recordTransaction ( buyOrder , user , totalPrice ) ;
addEbookToUser ( products , buyOrd er ) ;
} else {
return R . error ( " 余额不足! " ) ;
return R . error ( 500 , " 花生币 余额不足!" ) ;
}
}
Map < String , Object > result = new HashMap < > ( ) ;
result . put ( " orderSn " , buyOrder . getOrderSn ( ) ) ;
result . put ( " money " , totalPrice ) ;
return R . ok ( result ) ;
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
} finally {
l . unlock ( ) ;
}
return R . ok ( ) . put ( " orderSn " , buyOrder . getOrderSn ( ) ) . put ( " money " , realMoney ) ;
}
/**
* 修改购买书籍(赠送电子书,加鉴权)
* @param buyOrder 订单表
* @return
*/
@RequestMapping ( " /buysave1 " )
@Transactional
public R buysave1 ( @RequestBody BuyOrderEntity buyOrder ) {
BigDecimal realMoney = new BigDecimal ( 0 ) ;
Lock l = new ReentrantLock ( ) ;
l . lock ( ) ;
try {
List < BuyOrderDetailEntity > products = buyOrder . getProducts ( ) ;
BigDecimal bigDecimal1 = new BigDecimal ( 0 ) ;
ArrayList < BuyOrderDetailEntity > list = new ArrayList < > ( ) ;
// 遍历商品 查询价格
for ( BuyOrderDetailEntity buyOrderDetail : products ) {
BuyOrderDetailEntity buyOrderDetailEntity = new BuyOrderDetailEntity ( ) ;
Integer productId = buyOrderDetail . getProductId ( ) ;
ShopProductEntity product = shopProductService . getById ( productId ) ;
// BigDecimal price = product.getPrice();
Integer quantity = buyOrderDetail . getQuantity ( ) ;
BigDecimal activityPrice = product . getActivityPrice ( ) ;
BigDecimal big = new BigDecimal ( 0 ) ;
BigDecimal price = null ;
//activityPrice等于0, 则原价
if ( activityPrice = = big ) {
price = product . getPrice ( ) ;
} else {
price = product . getActivityPrice ( ) ;
}
//价格*数量 = 单价*购买数量赋值给bigDecimal1
BigDecimal bigDecimal = new BigDecimal ( price . doubleValue ( ) * quantity ) ;
System . out . println ( " bigDecimal========bigDecimal=========bigDecimal====================== " + bigDecimal ) ;
bigDecimal1 = bigDecimal1 . add ( bigDecimal ) ;
if ( product . getProductStock ( ) - buyOrderDetail . getQuantity ( ) < 0 ) {
return R . error ( 500 , " 库存不足 " ) ;
}
// 改写 商品库存
product . setProductStock ( product . getProductStock ( ) - buyOrderDetail . getQuantity ( ) ) ;
product . setSumSales ( product . getSumSales ( ) + buyOrderDetail . getQuantity ( ) ) ;
shopProductService . updateById ( product ) ;
//buyOrderDetail 对象中的属性值复制到 buyOrderDetailEntity 对象中的属性值中
BeanUtils . copyProperties ( buyOrderDetail , buyOrderDetailEntity ) ;
buyOrderDetailEntity . setProductName ( product . getProductName ( ) ) ;
buyOrderDetailEntity . setProductPrice ( product . getPrice ( ) ) ;
buyOrderDetailEntity . setAddressId ( buyOrder . getAddressId ( ) ) ;
buyOrderDetailEntity . setProductUrl ( product . getProductImages ( ) ) ;
buyOrderDetailEntity . setOrderStatus ( " 0 " ) ;
list . add ( buyOrderDetailEntity ) ;
}
//优惠券Id couponId
Integer couponId = buyOrder . getCouponId ( ) ;
if ( couponId ! = null ) {
CouponHistoryEntity byId = couponHistoryService . getById ( couponId ) ;
CouponEntity coupon = couponService . getById ( byId . getCouponId ( ) ) ;
BigDecimal amount = coupon . getCouponAmount ( ) ;
bigDecimal1 = bigDecimal1 . subtract ( amount ) ;
}
if ( buyOrder . getShippingMoney ( ) ! = null ) {
bigDecimal1 = bigDecimal1 . add ( buyOrder . getShippingMoney ( ) ) ;
}
// 减去优惠券金额
realMoney = buyOrder . getRealMoney ( ) ;
if ( bigDecimal1 . compareTo ( realMoney ) = = 0 ) {
//特定格式的时间ID
String timeId = IdWorker . getTimeId ( ) . substring ( 0 , 32 ) ;
buyOrder . setOrderSn ( timeId ) ;
if ( " 4 " . equals ( buyOrder . getPaymentMethod ( ) ) ) {
buyOrder . setOrderStatus ( " 1 " ) ;
}
//todo 增加结束时间
buyOrder . setPaymentDate ( new Date ( ) ) ;
buyOrderService . save ( buyOrder ) ;
for ( BuyOrderDetailEntity buyetailEntity : list ) {
buyetailEntity . setOrderId ( buyOrder . getOrderId ( ) ) ;
buyetailEntity . setUserId ( buyOrder . getUserId ( ) ) ;
// 判断结算状态 下单 位置 0- 商品页直接下单 1- 购物车结算
String buyType = buyOrder . getBuyType ( ) ;
if ( buyType . equals ( " 1 " ) ) {
// 更改购物车 状态
List < OrderCartEntity > list1 = orderCartService . getBaseMapper ( ) . selectList ( new QueryWrapper < OrderCartEntity > ( )
. eq ( " user_id " , buyOrder . getUserId ( ) ) . eq ( " product_id " , buyetailEntity . getProductId ( ) ) ) ;
//将购物车列表转换为流,并从中提取每个购物车的 cartId。removeByIds() 方法从数据库中删除这些购物车记录。
if ( list1 . size ( ) > 0 ) {
List < Integer > collect = list1 . stream ( ) . map ( orderCartEntity - > {
Integer cartId = orderCartEntity . getCartId ( ) ;
return cartId ;
} ) . collect ( Collectors . toList ( ) ) ;
orderCartService . removeByIds ( collect ) ;
}
}
}
buyOrderDetailService . saveBatch ( list ) ;
if ( couponId ! = null ) {
//更改优惠券状态
CouponHistoryEntity one = couponHistoryService . getById ( couponId ) ;
one . setUseStatus ( 1 ) ;
one . setUseTime ( new Date ( ) ) ;
one . setOrderId ( Long . valueOf ( buyOrder . getOrderId ( ) ) ) ;
one . setOrderSn ( buyOrder . getOrderSn ( ) ) ;
couponHistoryService . updateById ( one ) ;
}
// 购买书籍直接赠送电子书听书
TransactionDetailsEntity transaction = new TransactionDetailsEntity ( ) ;
//避免重复购买
TransactionDetailsEntity entity = transactionDetailsService . getBaseMapper ( ) . selectOne ( new QueryWrapper < TransactionDetailsEntity > ( ) . eq ( " user_id " , transaction . getUserId ( ) )
. eq ( " relation_id " , transaction . getRelationId ( ) ) ) ;
if ( entity ! = null ) {
return R . error ( " 余额不足,请充值!!!!!!!!!!!!!!!! " ) ;
}
List < BuyOrderDetailEntity > produ = buyOrder . getProducts ( ) ;
// 遍历商品 查询价格
for ( BuyOrderDetailEntity buyOrdr : produ ) {
Integer pId = buyOrdr . getProductId ( ) ;
ShopProductEntity product1 = shopProductService . getById ( pId ) ;
String productName = product1 . getProductName ( ) ;
// 如果是虚拟币购买 减少用户的虚拟币数量
if ( " 4 " . equals ( buyOrder . getPaymentMethod ( ) ) ) {
MyUserEntity user = this . myUserService . getById ( buyOrder . getUserId ( ) ) ;
if ( user . getPeanutCoin ( ) . compareTo ( realMoney ) > = 0 ) {
user . setPeanutCoin ( user . getPeanutCoin ( ) . subtract ( realMoney ) ) ;
this . myUserService . updateById ( user ) ;
// 添加消费信息
TransactionDetailsEntity transactionDetailsEntity = new TransactionDetailsEntity ( ) ;
transactionDetailsEntity . setRemark ( " 购买健康超市用品!订单编号为《 " + buyOrder . getOrderSn ( ) + " 》 " ) ;
transactionDetailsEntity . setUserId ( user . getId ( ) ) ;
transactionDetailsEntity . setUserName ( user . getNickname ( ) ) ;
transactionDetailsEntity . setChangeAmount ( realMoney . negate ( ) ) ;
transactionDetailsEntity . setUserBalance ( user . getPeanutCoin ( ) ) ;
transactionDetailsEntity . setTel ( user . getTel ( ) ) ;
transactionDetailsEntity . setOrderType ( " 购买《 " + productName + " 》赠送本书听书功能 " ) ;
transactionDetailsService . save ( transactionDetailsEntity ) ;
} else {
return R . error ( " 余额不足! " ) ;
}
}
}
// }
for ( BuyOrderDetailEntity buyOrderDetail : products ) {
Integer productId = buyOrderDetail . getProductId ( ) ;
ShopProductEntity product = shopProductService . getById ( productId ) ;
// 如果不等于空 则进行往下走
String authorName = " " ;
String bookId = product . getBookId ( ) ;
if ( null ! = bookId & & ! " " . equals ( bookId ) ) {
List < String > bkids = new ArrayList < String > ( ) ;
if ( bookId . indexOf ( " , " ) = = - 1 ) {
bkids . add ( bookId ) ;
} else {
for ( String idObj : bookId . split ( " , " ) ) {
bkids . add ( idObj ) ;
}
}
for ( String b_id : bkids ) {
if ( b_id ! = null ) {
List < BookEntity > book = bookService . getBaseMapper ( ) . selectList ( new QueryWrapper < BookEntity > ( ) . eq ( " id " , b_id ) ) ;
for ( BookEntity bo : book ) {
Integer id = bo . getId ( ) ;
String name = bo . getName ( ) ;
String images = bo . getImages ( ) ;
String authorId = bo . getAuthorId ( ) ;
if ( book ! = null ) {
UserEbookBuyEntity userEbookBuyEntity = new UserEbookBuyEntity ( ) ;
userEbookBuyEntity . setUserId ( Integer . valueOf ( buyOrder . getUserId ( ) ) ) ;
userEbookBuyEntity . setBookId ( Integer . valueOf ( id ) ) ;
String [ ] authorIds = authorId . split ( " , " ) ;
List < String > authorList = Arrays . asList ( authorIds ) ;
List < AuthorEntity > authorEntities = authorService . getBaseMapper ( ) . selectList ( new QueryWrapper < AuthorEntity > ( ) . in ( " id " , authorList ) ) ;
//购买书籍表 userId bookName 商品订单详情表 userId productName
List < UserEbookBuyEntity > userId = userEbookBuyService . getBaseMapper ( ) . selectList ( new QueryWrapper < UserEbookBuyEntity > ( )
. eq ( " user_Id " , buyOrder . getUserId ( ) )
. eq ( " book_id " , id ) ) ;
for ( AuthorEntity authorEntity : authorEntities ) {
authorName + = " , " + authorEntity . getAuthorName ( ) ;
}
//查询dengyu, 则往下执行赠送电子书详情
if ( userId ! = null & & ! userId . isEmpty ( ) ) {
// 如果userId不等于空则不赠送图书不执行任何方法
// return R.ok("此书已存在于您的书架");
} else {
authorName = authorName . startsWith ( " , " ) ? authorName . substring ( 1 ) : authorName ;
userEbookBuyEntity . setAuthor ( authorName ) ;
userEbookBuyEntity . setImage ( images ) ;
userEbookBuyEntity . setPayStatus ( " 赠送成功 " ) ;
//这里后期需要修改字段内容
userEbookBuyEntity . setPayType ( " point " ) ;
userEbookBuyEntity . setPayTime ( new Date ( ) ) ;
userEbookBuyEntity . setBookName ( name ) ;
userEbookBuyService . save ( userEbookBuyEntity ) ;
//判断是否加入书架如果没有就加入听书书架
Integer integer = bookShelfService . getBaseMapper ( ) . selectCount ( new QueryWrapper < BookShelfEntity > ( )
. eq ( " book_id " , id )
. eq ( " user_id " , userId ) ) ;
//如果integer<0代表数据库没有这条数据, 则添加, 有就不执行下面操作
if ( integer < 0 ) {
//保存到书架表中
BookShelfEntity bookShelfEntity = new BookShelfEntity ( ) ;
bookShelfEntity . setBookId ( id ) ;
bookShelfEntity . setBookName ( name ) ;
bookShelfEntity . setUserId ( buyOrder . getUserId ( ) ) ;
bookShelfEntity . setCreateTime ( new Date ( ) ) ;
bookShelfService . save ( bookShelfEntity ) ;
}
// }
// else {
// return R.error().put("赠送失败",buyOrder.getOrderSn());
// }
}
}
}
}
}
}
}
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
} finally {
l . unlock ( ) ;
}
return R . ok ( ) . put ( " orderSn " , buyOrder . getOrderSn ( ) ) . put ( " money " , realMoney ) ;
}
/**
* 修改
*/
@RequestMapping ( " /update " )
// @RequiresPermissions("book:buyorder:update")
public R update ( @RequestBody BuyOrderEntity buyOrder ) {
buyOrderService . updateById ( buyOrder ) ;
return R . ok ( ) ;
}
@@ -568,10 +211,8 @@ public class BuyOrderController {
* 删除
*/
@RequestMapping ( " /delete " )
// @RequiresPermissions("book:buyorder:delete")
public R delete ( @RequestBody Integer [ ] orderIds ) {
buyOrderService . removeByIds ( Arrays . asList ( orderIds ) ) ;
return R . ok ( ) ;
}
@@ -579,10 +220,8 @@ public class BuyOrderController {
* 列表
*/
@RequestMapping ( " /appUserGetlist " )
// @RequiresPermissions("book:buyorder:list")
public R appUserGetlist ( @RequestParam Map < String , Object > params ) {
PageUtils page = buyOrderService . queryPage1 ( params ) ;
return R . ok ( ) . put ( " page " , page ) ;
}
@@ -591,83 +230,46 @@ public class BuyOrderController {
* app 端 取消订单
*/
@RequestMapping ( " /appDelete " )
// @RequiresPermissions("book:buyorder:delete")
@Transactional
public R appDelete ( @RequestParam ( " orderId " ) Integer orderId ) {
//1. 判断订单状态
BuyOrderEntity 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 < BuyOrderDetailEntity > buyOrderDetailEntities = buyOrderDetailService . getBaseMapper ( ) . selectList ( new QueryWrapper < BuyOrderDetailEntity > ( )
. eq ( " order_id " , byId . getOrderId ( ) ) ) ;
for ( BuyOrderDetailEntity buyOrderDetailEntity : buyOrderDetailEntities ) {
Integer productId = buyOrderDetailEntity . getProductId ( ) ;
ShopProductEntity product = shopProductService . getById ( productId ) ;
product . setProductStock ( product . getProductStock ( ) + buyOrderDetailEntity . getQuantity ( ) ) ;
shopProductService . updateById ( product ) ;
}
// //3. 恢复当前订单 的 购物车商品
//
// List<BuyOrderDetailEntity> products = buyOrderDetailService.getBaseMapper().selectList(new QueryWrapper<BuyOrderDetailEntity>()
// .eq("order_id", orderId));
//
// for (BuyOrderDetailEntity product : products) {
//
// Integer productId = product.getProductId();
//
// OrderCartEntity byId1 = orderCartService.getDeteleOrderCarts(byId.getUserId(),productId);
//
// byId1.setDelFlag(0);
//
// orderCartService.updateById(byId1);
//
// }
buyOrderService . removeById ( orderId ) ;
}
return R . ok ( ) ;
}
@RequestMapping ( " /randomOrderCode " )
@Transactional
public R randomOrderCode ( @RequestBody BuyOrderEntity buyOrder ) {
// String re= String.valueOf(buyOrderService.randomOrderCode(buyOrder));
// buyOrderService.save(re);
return R . ok ( ) ;
}
/**
* 充值专用订单生成接口
*/
@RequestMapping ( " /rechargeSave " )
@Transactional
public R rechargeSave ( @RequestBody BuyOrderEntity buyOrder ) {
String timeId = IdWorker . getTimeId ( ) . substring ( 0 , 32 ) ;
buyOrder . setOrderSn ( timeId ) ;
buyOrderService . save ( buyOrder ) ;
@@ -675,10 +277,6 @@ public class BuyOrderController {
}
/**
* 信息
*/
@@ -692,9 +290,6 @@ public class BuyOrderController {
} else {
orderDetail = buyOrderDetailService . getBaseMapper ( ) . selectList ( new QueryWrapper < BuyOrderDetailEntity > ( )
. eq ( " order_id " , orderId ) ) ;
//TODO 根据shipping_sn快递单号分组, 订单下无快递单号, 我的订单同时无法显示, 暂时注释
//.groupBy("shipping_sn")
}
for ( BuyOrderDetailEntity buyOrderDetailEntity : orderDetail ) {
@@ -702,22 +297,13 @@ public class BuyOrderController {
if ( prod ! = null ) {
buyOrderDetailEntity . setImage ( prod . getProductImages ( ) ) ;
}
}
List < BuyOrderDetailEntity > resultOrder = new ArrayList < BuyOrderDetailEntity > ( ) ;
Set < String > sn_no = new HashSet < String > ( ) ;
for ( BuyOrderDetailEntity buyOrderDetailEntity : orderDetail ) {
resultOrder . add ( buyOrderDetailEntity ) ;
sn_no . add ( buyOrderDetailEntity . getShippingSn ( ) ) ;
}
UserRecordEntity userRecordEntity = userRecordService . getBaseMapper ( ) . selectOne ( new QueryWrapper < UserRecordEntity > ( )
@@ -725,22 +311,12 @@ public class BuyOrderController {
. eq ( " userid " , buyOrder . getUserId ( ) )
. eq ( " orderdid " , buyOrder . getOrderId ( ) )
. last ( " LIMIT 1 " ) ) ;
Integer id = null ;
if ( userRecordEntity ! = null ) {
id = userRecordEntity . getId ( ) ;
}
buyOrder . setProducts ( resultOrder ) ;
Date createDate = buyOrder . getCreateTime ( ) ;
return R . ok ( ) . put ( " buyOrder " , buyOrder ) . put ( " CreateTime " , createDate ) . put ( " userRecordid " , id ) ;
}
@@ -749,20 +325,17 @@ public class BuyOrderController {
*/
@RequestMapping ( " /getTransPrice/{area} " )
public R getTransPrice ( @PathVariable String area , @RequestParam Map < String , Object > productMap ) {
Map < String , Object > params = new HashMap < > ( ) ;
params . put ( " kdCode " , " YD " ) ;
params . put ( " area " , area ) ;
int price = this . buyOrderService . getProductGoodsType ( params , productMap ) ;
return R . ok ( ) . put ( " price " , price ) ;
}
/**
* 后台发货按钮
*
* @Param shipperCode 快递公司编码
* @Param sendType 0: 订单列表发货 1: 商品列表发货
* @Param type 合并发货/拆分发货
@@ -777,9 +350,6 @@ public class BuyOrderController {
}
/**
* 及时查询快递信息
*/
@@ -800,9 +370,9 @@ public class BuyOrderController {
return R . ok ( ) . put ( " rntStr " , jsonList ) ;
}
/**
* 检查可合并的订单信息
*
* @return
*/
@RequestMapping ( " /checkOrder " )
@@ -811,10 +381,7 @@ public class BuyOrderController {
return R . ok ( ) . put ( " page " , page ) ;
}
/**
*
* 检查传来的orderId 是否有可合并的其他订单信息
*
* @param orderIds
@@ -826,9 +393,7 @@ public class BuyOrderController {
return R . ok ( ) . put ( " list " , list ) ;
}
/**
*
* 批量发货功能
*
* @param orderDetailIds 订单详情
@@ -843,8 +408,6 @@ public class BuyOrderController {
}
/**
* 后台取消订单接口
*/
@@ -852,7 +415,6 @@ public class BuyOrderController {
public R cancelFMS ( @RequestParam Map < String , Object > params ) {
buyOrderService . cancelFMS ( params . get ( " orderSn " ) . toString ( ) , params . get ( " shipperCode " ) . toString ( ) ,
params . get ( " expNo " ) . toString ( ) ) ;
// return R.ok()
return R . ok ( ) . put ( " paramsTEXT " , params ) ;
}
@@ -870,4 +432,129 @@ public class BuyOrderController {
return R . ok ( ) . put ( " page " , page ) ;
}
/**
* 获取商品实际价格
*
* @param product 商品信息
* @return 商品实际价格
*/
private BigDecimal getRealPrice ( ShopProductEntity product ) {
BigDecimal activityPrice = product . getActivityPrice ( ) ;
return ( activityPrice = = null | | activityPrice . equals ( BigDecimal . ZERO ) ) ? product . getPrice ( ) : activityPrice ;
}
/**
* 处理商品库存
*
* @param buyOrderDetail
* @param product
* @return
*/
private boolean handleStock ( BuyOrderDetailEntity buyOrderDetail , ShopProductEntity 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 buyOrder
* @return
*/
private BigDecimal useCouponAmount ( BuyOrderEntity 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 ( BuyOrderEntity buyOrder ) {
return buyOrder . getOrderMoney ( ) = = null ? BigDecimal . ZERO : buyOrder . getShippingMoney ( ) ;
}
/**
* 使用虚拟币支付
*
* @param user
* @param totalPrice
* @return
*/
private boolean usePeanutCoin ( MyUserEntity user , BigDecimal totalPrice ) {
if ( user . getPeanutCoin ( ) . compareTo ( totalPrice ) > = 0 ) {
user . setPeanutCoin ( user . getPeanutCoin ( ) . subtract ( totalPrice ) ) ;
this . myUserService . updateById ( user ) ;
return true ;
}
return false ;
}
/**
* 交易记录
*
* @param buyOrder
* @param user
* @param totalPrice
*/
private void recordTransaction ( BuyOrderEntity 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 ) ;
}
/**
* 给用户添加电子书
*
* @param products
* @param buyOrder
*/
private void addEbookToUser ( List < BuyOrderDetailEntity > products , BuyOrderEntity buyOrder ) {
List < Integer > productIds = products . stream ( ) . map ( BuyOrderDetailEntity : : getProductId ) . collect ( Collectors . toList ( ) ) ;
for ( Integer productId : productIds ) {
List < Integer > collect = shopProudictBookService . getBaseMapper ( ) . selectList ( new LambdaQueryWrapper < ShopProudictBookEntity > ( )
. eq ( ShopProudictBookEntity : : getProudictId , productId )
. eq ( ShopProudictBookEntity : : getDelFlag , 0 ) ) . stream ( ) . map ( ShopProudictBookEntity : : getBookId ) . collect ( Collectors . toList ( ) ) ;
userEbookBuyService . addBookForUser ( buyOrder . getUserId ( ) , collect ) ;
}
}
/**
* 购物车
*
* @param buyOrder
* @param buyOrderDetail
*/
private void handleBuyCart ( BuyOrderEntity buyOrder , BuyOrderDetailEntity 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 ) ;
}
}
}