Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f47bca3a8b | |||
| 7cb2d42662 | |||
| 5422fe0140 | |||
| 4e672f7e1d | |||
| 594c99b4dc | |||
| a4edccc7de | |||
| 6bc3f33d3d | |||
| f50e17aa87 | |||
| 43d0340593 | |||
| f57f5dc9d9 | |||
| dca56c9493 | |||
| 9b8b818ad1 |
@@ -26,6 +26,14 @@ public class Constants {
|
||||
* 订单状态 - 交易失败
|
||||
*/
|
||||
public static final String ORDER_STATUS_FAIL = "4";
|
||||
/**
|
||||
* 订单状态 - 退款
|
||||
*/
|
||||
public static final String ORDER_STATUS_REFUND = "6";
|
||||
/**
|
||||
* 订单状态 - 退款中
|
||||
*/
|
||||
public static final String ORDER_STATUS_REFUNDING = "7";
|
||||
|
||||
/**
|
||||
* 订单状态 - 全部
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.peanut.common.utils.DateUtils;
|
||||
import com.peanut.common.utils.PageUtils;
|
||||
import com.peanut.common.utils.R;
|
||||
@@ -33,11 +34,14 @@ import com.peanut.modules.common.dao.UserCourseBuyDao;
|
||||
import com.peanut.modules.common.entity.*;
|
||||
import com.peanut.modules.common.service.*;
|
||||
import com.peanut.modules.master.service.CourseCatalogueService;
|
||||
import com.peanut.modules.pay.alipay.service.AliPayService;
|
||||
import com.peanut.modules.pay.weChatPay.dto.WeChatRefundInfo;
|
||||
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.apache.http.HttpException;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
@@ -118,6 +122,12 @@ public class BuyOrderController {
|
||||
private UserCourseBuyLogService userCourseBuyLogService;
|
||||
@Autowired
|
||||
private CourseCatalogueService courseCatalogueService;
|
||||
@Autowired
|
||||
private BuyOrderRefundService buyOrderRefundService;
|
||||
@Autowired
|
||||
private BuyOrderRefundLogService buyOrderRefundLogService;
|
||||
@Autowired
|
||||
private AliPayService aliPayService;
|
||||
|
||||
@RequestMapping(value = "/decomposeShipment", method = RequestMethod.POST)
|
||||
public R decomposeShipment(@RequestBody BuyOrderListRequestVo requestVo) {
|
||||
@@ -580,7 +590,188 @@ public class BuyOrderController {
|
||||
result.put("money", totalPrice);
|
||||
return R.ok(result);
|
||||
}
|
||||
//订单退款进度
|
||||
@RequestMapping("/refundDetail")
|
||||
public R refundOrderDetail(@RequestBody Map params){
|
||||
Object orderIdObj = params.get("orderId");
|
||||
if(orderIdObj == null || orderIdObj.toString().trim().equals("")){
|
||||
return R.error("orderId不能为空");
|
||||
}
|
||||
int order_id = Integer.parseInt(orderIdObj.toString().trim());
|
||||
QueryWrapper<BuyOrderRefund> wapper = new QueryWrapper<>();
|
||||
wapper.eq("order_id",order_id);
|
||||
BuyOrderRefund refundInfo = buyOrderRefundService.getOne(wapper);
|
||||
if(refundInfo==null){
|
||||
return R.error("退款信息不存在");
|
||||
}
|
||||
QueryWrapper<BuyOrderRefundLog> wapper2 = new QueryWrapper<>();
|
||||
wapper2.eq("refund_id",refundInfo.getId()).orderByDesc("id");
|
||||
List<BuyOrderRefundLog> list = buyOrderRefundLogService.list(wapper2);
|
||||
for (BuyOrderRefundLog log : list){
|
||||
if(log.getType()==4){
|
||||
log.setTitle("天医币已退还");
|
||||
log.setContent("天医币已退还到账户,可在我的->天医币中查看明细");
|
||||
}else if(log.getType()==5){
|
||||
log.setTitle("积分已退还");
|
||||
log.setContent("积分已退还到账户,可在我的->积分中查看明细");
|
||||
}else if(log.getType()==2){
|
||||
log.setTitle(log.getStatus()==1?"到账成功":(log.getStatus()==2?"支付宝处理中":"提交支付宝处理"));
|
||||
log.setContent(log.getStatus()==1?"已退到您的支付宝,到账时间以支付宝处理时间为准,可前往「支付宝-账单」查看":(log.getStatus()==2?"已将退款提交给支付宝处理":"支付宝处理中,通常情况下,退款会原路退回您的支付账户,预计会在1-7天内到账"));
|
||||
}else if(log.getType()==1){
|
||||
log.setTitle(log.getStatus()==1?"到账成功":(log.getStatus()==2?"微信处理中":"提交微信处理"));
|
||||
log.setContent(log.getStatus()==1?"已退到您的微信,到账时间以微信处理时间为准,可前往「微信-账单」查看":(log.getStatus()==2?"已将退款提交给微信处理":"微信处理中,通常情况下,退款会原路退回您的支付账户,预计会在1-7天内到账"));
|
||||
}else if(log.getType()==0){
|
||||
log.setTitle("发起退款");
|
||||
log.setContent("系统会在1-2天内提交处理");
|
||||
}
|
||||
|
||||
}
|
||||
/* BuyOrderRefundLog log = new BuyOrderRefundLog();
|
||||
log.setId(0);
|
||||
log.setRefundId(refundInfo.getId());
|
||||
log.setType(0);
|
||||
log.setStatus(1);
|
||||
log.setCreateTime(refundInfo.getCreateTime());
|
||||
log.setTitle("发起退款");
|
||||
log.setContent("系统会在1-2天内提交处理");
|
||||
list.add(log);*/
|
||||
|
||||
Map<String,Object> result = new HashMap<>();
|
||||
BigDecimal shippingMoney = refundInfo.getDeductShipping()==1?refundInfo.getShippingMoney():BigDecimal.ZERO;
|
||||
result.put("orderMoney",refundInfo.getFee().add(refundInfo.getJfDeduction().add(shippingMoney)));
|
||||
result.put("refundFee",refundInfo.getFee());
|
||||
result.put("payType",refundInfo.getPayType());
|
||||
result.put("refundJf",refundInfo.getJfDeduction());
|
||||
result.put("shippingMoney",shippingMoney);
|
||||
result.put("list",list);
|
||||
return R.ok().put("info",result);
|
||||
}
|
||||
@RequestMapping(value = "/refundOrder", method = RequestMethod.POST)
|
||||
@Transactional
|
||||
public R refundOrder(@RequestBody Map<String, Object> params) {
|
||||
Object orderIdObject = params.get("orderId");
|
||||
if(orderIdObject == null || orderIdObject.toString().trim().equals("")){
|
||||
return R.error("orderId不能为空");
|
||||
}
|
||||
int orderId = Integer.parseInt(orderIdObject.toString());
|
||||
QueryWrapper<BuyOrder> queryWapper = new QueryWrapper<>();
|
||||
queryWapper.eq("order_id",orderId);
|
||||
BuyOrder buyOrder = buyOrderService.getOne(queryWapper);
|
||||
if(buyOrder==null){
|
||||
return R.error("订单不存在");
|
||||
}
|
||||
MyUserEntity user = myUserService.getById(buyOrder.getUserId());
|
||||
if (user == null) {
|
||||
return R.error("订单对应用户不存在");
|
||||
}
|
||||
if(Constants.ORDER_STATUS_REFUND.equals(buyOrder.getOrderStatus())
|
||||
|| Constants.ORDER_STATUS_REFUNDING.equals(buyOrder.getOrderStatus())){
|
||||
return R.error("请勿重复提交退款");
|
||||
}else if (Constants.ORDER_STATUS_TO_BE_PAID.equals(buyOrder.getOrderStatus())
|
||||
|| Constants.ORDER_STATUS_FAIL.equals(buyOrder.getOrderStatus())
|
||||
|| Constants.ORDER_STATUS_OUT_OF_TIME.equals(buyOrder.getOrderStatus())) {
|
||||
return R.error("当前订单状态不支持退单");
|
||||
}
|
||||
if(Constants.PAYMENT_METHOD_ALI_PAY.equals(buyOrder.getPaymentMethod())){
|
||||
return R.error("当前订单支付方式暂不支持退单");
|
||||
}
|
||||
//设置状态为退款中
|
||||
buyOrder.setOrderStatus(Constants.ORDER_STATUS_REFUNDING);
|
||||
buyOrderService.updateById(buyOrder);
|
||||
|
||||
BigDecimal refundFee = buyOrder.getRealMoney();
|
||||
BigDecimal shippingMoney = buyOrder.getShippingMoney()==null?BigDecimal.ZERO:buyOrder.getShippingMoney();
|
||||
int deductShipping = params.containsKey("deductShipping") && params.get("deductShipping")!=null?Integer.parseInt(params.get("deductShipping").toString()):0;
|
||||
if(refundFee.compareTo(BigDecimal.ZERO)>0 && shippingMoney.compareTo(BigDecimal.ZERO)>0 && deductShipping==1){
|
||||
refundFee = refundFee.subtract(shippingMoney);
|
||||
refundFee = refundFee.compareTo(BigDecimal.ZERO)>0?refundFee:BigDecimal.ZERO;
|
||||
}
|
||||
String remark = params.containsKey("remark") && params.get("remark").toString()!=null?params.get("remark").toString():"";
|
||||
|
||||
BuyOrderRefund buyOrderRefund = new BuyOrderRefund();
|
||||
String refundNo = buyOrderRefundService.genRefundNo();
|
||||
buyOrderRefund.setRefundNo(refundNo);
|
||||
buyOrderRefund.setOrderId(buyOrder.getOrderId());
|
||||
buyOrderRefund.setOrderSn(buyOrder.getOrderSn());
|
||||
buyOrderRefund.setUserId(buyOrder.getUserId());
|
||||
buyOrderRefund.setType(params.containsKey("deductShipping")?"后台":"线上"); //id
|
||||
buyOrderRefund.setPayType(buyOrder.getPaymentMethod());
|
||||
buyOrderRefund.setFee(refundFee);
|
||||
buyOrderRefund.setJfDeduction(buyOrder.getJfDeduction());
|
||||
buyOrderRefund.setShippingMoney(deductShipping==1?buyOrder.getShippingMoney():BigDecimal.ZERO);
|
||||
buyOrderRefund.setDeductShipping(deductShipping);
|
||||
buyOrderRefund.setRemark(remark);
|
||||
buyOrderRefundService.save(buyOrderRefund);
|
||||
|
||||
buyOrderRefundLogService.insertRefundLog(buyOrderRefund.getId(),0,1);
|
||||
|
||||
int refundId = buyOrderRefund.getId();
|
||||
if (Constants.PAYMENT_METHOD_VIRTUAL.equals(buyOrder.getPaymentMethod())) {
|
||||
//if(refundFee.compareTo(BigDecimal.ZERO)>0){
|
||||
//退还虚拟币
|
||||
transactionDetailsService.refundRecord(buyOrder,user,refundFee);
|
||||
user.setPeanutCoin(user.getPeanutCoin().add(refundFee));
|
||||
myUserService.updateById(user);
|
||||
//记录退款进度
|
||||
buyOrderRefundLogService.insertRefundLog(refundId,4,1);
|
||||
//积分、其他权益退回
|
||||
buyOrderService.refundOrder(buyOrder,user,refundId);
|
||||
//更改订单状态为已退款
|
||||
buyOrder.setOrderStatus(Constants.ORDER_STATUS_REFUND);
|
||||
buyOrderService.updateById(buyOrder);
|
||||
return R.ok("ok");
|
||||
//}
|
||||
} else if (Constants.PAYMENT_METHOD_WECHAT_PAY.equals(buyOrder.getPaymentMethod())) {
|
||||
buyOrderRefundLogService.insertRefundLog(refundId,1,0);
|
||||
if (refundFee.compareTo(BigDecimal.ZERO) > 0) {
|
||||
WeChatRefundInfo weChatRefundInfo = new WeChatRefundInfo();
|
||||
weChatRefundInfo.setOrderSn(buyOrder.getOrderSn());
|
||||
weChatRefundInfo.setOrderId(buyOrder.getOrderId());
|
||||
weChatRefundInfo.setOrderType(buyOrder.getOrderType());
|
||||
weChatRefundInfo.setRefundNo(buyOrderRefund.getRefundNo());
|
||||
weChatRefundInfo.setTotalAmount(buyOrder.getRealMoney());
|
||||
weChatRefundInfo.setRefundAmount(buyOrderRefund.getFee());
|
||||
weChatRefundInfo.setRemark("用户申请退款");
|
||||
weChatRefundInfo.setRefundId(buyOrderRefund.getId());
|
||||
if(buyOrder.getCome()==null||buyOrder.getCome()==0){
|
||||
weChatRefundInfo.setAppName(buyOrder.getAppName());
|
||||
} else if (buyOrder.getCome()==2){
|
||||
weChatRefundInfo.setAppName("wumen");
|
||||
} else if (buyOrder.getCome()==1) {
|
||||
weChatRefundInfo.setAppName("zmzm");
|
||||
} else if (buyOrder.getCome()==3) {
|
||||
weChatRefundInfo.setAppName("xlkj");
|
||||
} else if (buyOrder.getCome()==4) {
|
||||
weChatRefundInfo.setAppName("thyy");
|
||||
}
|
||||
try {
|
||||
wxpayService.refund(weChatRefundInfo);
|
||||
} catch (Exception e) {
|
||||
System.out.println("msg=" + e.getMessage()); // 👈 关键
|
||||
}
|
||||
}
|
||||
}
|
||||
// else if (Constants.PAYMENT_METHOD_ALI_PAY.equals(buyOrder.getPaymentMethod())) {
|
||||
// buyOrderRefundLogService.insertRefundLog(refundId,2,0);
|
||||
// if (refundFee.compareTo(BigDecimal.ZERO) > 0) {
|
||||
// Map<String, Object> refundParams = new HashMap<>();
|
||||
// refundParams.put("orderSn", buyOrder.getOrderSn());
|
||||
// refundParams.put("refundFee", refundFee);
|
||||
// String refundResult = aliPayService.refund(refundParams);
|
||||
// JSONObject resultJson = JSONObject.parseObject(refundResult);
|
||||
// JSONObject responseJson = resultJson.getJSONObject("alipay_trade_refund_response");
|
||||
// if (responseJson == null
|
||||
// || !"10000".equals(responseJson.getString("code"))
|
||||
// || !"Y".equals(responseJson.getString("fund_change"))) {
|
||||
// return R.error("支付宝退款申请失败");
|
||||
// }else{
|
||||
// buyOrderRefundLogService.insertRefundLog(refundId,3,2);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
return R.ok("ok");
|
||||
|
||||
}
|
||||
@RequestMapping("/llll")
|
||||
public R ls(){
|
||||
|
||||
@@ -1166,7 +1357,7 @@ public class BuyOrderController {
|
||||
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);
|
||||
userEbookBuyService.addBookForUser(buyOrder, buyOrder.getUserId(), collect);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,9 +9,11 @@ import com.peanut.modules.book.to.UserOrderDto;
|
||||
import com.peanut.modules.book.vo.UserOrderVo;
|
||||
import com.peanut.modules.book.vo.request.BuyOrderListRequestVo;
|
||||
import com.peanut.modules.book.vo.response.BuyOrderResponseVo;
|
||||
import com.peanut.modules.common.entity.MyUserEntity;
|
||||
import com.peanut.modules.common.entity.ShopProductCourseEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -68,4 +70,8 @@ public interface BuyOrderService extends IService<BuyOrder> {
|
||||
void addCourseToUser(String payType,BuyOrder orderEntity);
|
||||
|
||||
boolean checkWlOrder(String orderSn);
|
||||
|
||||
BigDecimal getRefundFee(Map<String, Object> params, BuyOrder buyOrder);
|
||||
|
||||
void refundOrder(BuyOrder buyOrder, MyUserEntity user, int refundId);
|
||||
}
|
||||
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.peanut.common.utils.PageUtils;
|
||||
import com.peanut.common.utils.R;
|
||||
import com.peanut.modules.common.entity.BookForumArticlesEntity;
|
||||
import com.peanut.modules.common.entity.BuyOrder;
|
||||
import com.peanut.modules.common.entity.BuyOrderProduct;
|
||||
import com.peanut.modules.common.entity.MyUserEntity;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -33,5 +35,7 @@ public interface MyUserService extends IService<MyUserEntity> {
|
||||
|
||||
boolean checkUserTelOrEmail(MyUserEntity user);
|
||||
|
||||
void rollbackUserPowers(BuyOrder order, List<BuyOrderProduct> orderProducts);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.peanut.modules.book.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.peanut.common.utils.PageUtils;
|
||||
import com.peanut.modules.common.entity.BuyOrder;
|
||||
import com.peanut.modules.common.entity.ShopProduct;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@@ -37,6 +38,6 @@ public interface ShopProductService extends IService<ShopProduct> {
|
||||
PageUtils queryPageactivityprice(Map<String, Object> params);
|
||||
|
||||
|
||||
|
||||
void rollbackStock(BuyOrder buyOrder);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,6 @@ public interface TransactionDetailsService extends IService<TransactionDetailsEn
|
||||
|
||||
void rechargeRecord(MyUserEntity user,String money,int payXxxOrderId,String AppName,String orderSn);
|
||||
|
||||
|
||||
void refundRecord(BuyOrder buyOrder, MyUserEntity user, BigDecimal totalPrice);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.peanut.modules.book.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.peanut.common.utils.PageUtils;
|
||||
import com.peanut.modules.common.entity.BuyOrder;
|
||||
import com.peanut.modules.common.entity.BuyOrderProduct;
|
||||
import com.peanut.modules.common.entity.UserEbookBuyEntity;
|
||||
|
||||
import java.util.List;
|
||||
@@ -23,6 +25,11 @@ public interface UserEbookBuyService extends IService<UserEbookBuyEntity> {
|
||||
List<Integer> getUserBookId(Integer userId);
|
||||
|
||||
void addBookForUser(Integer userId, List<Integer> bookIds);
|
||||
|
||||
void addBookForUser(BuyOrder buyOrder, Integer userId, List<Integer> bookIds);
|
||||
|
||||
void rollbackUserEbooks(BuyOrder order, List<BuyOrderProduct> orderProducts);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.peanut.common.utils.*;
|
||||
import com.peanut.config.Constants;
|
||||
import com.peanut.modules.book.service.BuyOrderService;
|
||||
import com.peanut.modules.book.service.CityService;
|
||||
import com.peanut.modules.book.service.CountyService;
|
||||
import com.peanut.modules.book.service.ExpressOrderService;
|
||||
import com.peanut.modules.book.service.MyUserService;
|
||||
import com.peanut.modules.book.service.ProvinceService;
|
||||
import com.peanut.modules.common.dao.*;
|
||||
import com.peanut.modules.book.service.*;
|
||||
import com.peanut.modules.book.to.UserOrderDto;
|
||||
@@ -19,8 +25,7 @@ import com.peanut.modules.book.vo.UserOrderVo;
|
||||
import com.peanut.modules.book.vo.request.BuyOrderListRequestVo;
|
||||
import com.peanut.modules.book.vo.response.*;
|
||||
import com.peanut.modules.common.entity.*;
|
||||
import com.peanut.modules.common.service.UserVipService;
|
||||
import com.peanut.modules.common.service.VipBuyConfigService;
|
||||
import com.peanut.modules.common.service.*;
|
||||
import com.peanut.modules.common.vo.CourseCatalogueVo;
|
||||
import com.peanut.modules.oss.service.OssService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -35,6 +40,7 @@ import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Instant;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -92,8 +98,24 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
private UserCourseBuyDao userCourseBuyDao;
|
||||
@Autowired
|
||||
private UserCourseBuyLogDao userCourseBuyLogDao;
|
||||
@Autowired
|
||||
private CouponService couponService;
|
||||
@Autowired
|
||||
private UserEbookBuyService userEbookBuyService;
|
||||
|
||||
protected Logger logger = LoggerFactory.getLogger(BuyOrderServiceImpl.class);
|
||||
@Autowired
|
||||
private JfTransactionDetailsService jfTransactionDetailsService;
|
||||
@Autowired
|
||||
private BuyOrderRefundLogService buyOrderRefundLogService;
|
||||
@Autowired
|
||||
private BuyOrderRefundService buyOrderRefundService;
|
||||
@Autowired
|
||||
private UserVipLogService userVipLogService;
|
||||
@Autowired
|
||||
private UserVipLogDao userVipLogDao;
|
||||
@Autowired
|
||||
private UserVipDao userVipDao;
|
||||
|
||||
// TODO 新版本上线后删除
|
||||
@Override
|
||||
@@ -198,6 +220,8 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
} else if (type.equals("2")) {
|
||||
orderEntity.setPaymentDate(new Date());
|
||||
orderEntity.setOrderStatus("3");
|
||||
}else if (type.equals("6")) {
|
||||
orderEntity.setOrderStatus("6");
|
||||
}
|
||||
updateById(orderEntity);
|
||||
}
|
||||
@@ -412,12 +436,22 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
user.setUserVips(userVipService.list(new LambdaQueryWrapper<UserVip>()
|
||||
.eq(UserVip::getUserId,user.getId()).eq(UserVip::getState,0)));
|
||||
b.setUser(user);
|
||||
boolean refundableStatus = false;
|
||||
long timestamp = Instant.now().toEpochMilli();
|
||||
long paymentDateTime = b.getPaymentDate()==null?0: b.getPaymentDate().getTime();
|
||||
if (b.getVipBuyConfigId()!=0){
|
||||
if(paymentDateTime > timestamp-7*24*60*60*1000){
|
||||
refundableStatus = true;
|
||||
}
|
||||
b.setVipBuyConfigEntity(vipBuyConfigService.getById(b.getVipBuyConfigId()));
|
||||
}
|
||||
//添加商品信息
|
||||
List<BuyOrderProduct> buyOrderProducts = buyOrderProductDao.selectList(new LambdaQueryWrapper<BuyOrderProduct>().eq(BuyOrderProduct::getOrderId, b.getOrderId()));
|
||||
for (BuyOrderProduct b1:buyOrderProducts){
|
||||
|
||||
if(buyOrderProducts.size()>0){
|
||||
boolean[] refundableStatusArr = new boolean[buyOrderProducts.size()];
|
||||
for (int i=0;i<buyOrderProducts.size();i++){
|
||||
BuyOrderProduct b1 = buyOrderProducts.get(i);
|
||||
MPJLambdaWrapper<ShopProduct> shopProductWrapper = new MPJLambdaWrapper<>();
|
||||
//关掉本次查询del_flg = 0的条件,查询删除商品
|
||||
shopProductWrapper.disableLogicDel().eq(ShopProduct::getProductId,b1.getProductId());
|
||||
@@ -425,7 +459,28 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
byId.setBooks(shopProductBookService.getBookByProductId(byId.getProductId()));
|
||||
b1.setProduct(byId);
|
||||
b1.setExpressOrder(expressOrderDao.selectById(b1.getExpressOrderId()));
|
||||
boolean refundableStatusProduct = false;
|
||||
if(b1.getProduct().getGoodsType().equals("05") && (paymentDateTime > timestamp-7*24*60*60*1000)){
|
||||
refundableStatusProduct = true;
|
||||
}else if(!b1.getProduct().getGoodsType().equals("05") && b.getOrderStatus().equals("1")){
|
||||
refundableStatusProduct = true;
|
||||
}
|
||||
refundableStatusArr[i] = refundableStatusProduct;
|
||||
}
|
||||
for (boolean rs : refundableStatusArr){
|
||||
if(!rs){
|
||||
refundableStatus = false;
|
||||
break;
|
||||
}else{
|
||||
refundableStatus = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(b.getOrderStatus().equals(Constants.ORDER_STATUS_REFUND)){
|
||||
BuyOrderRefund refundInfo = buyOrderRefundService.getRefundInfoByOrderId(b.getOrderId());
|
||||
b.setRefundRemark(refundInfo.getRemark());
|
||||
}
|
||||
b.setRefundableStatus(b.getOrderStatus().equals("6")|| b.getOrderStatus().equals("7")||Constants.PAYMENT_METHOD_ALI_PAY.equals(b.getPaymentMethod())?false:refundableStatus);
|
||||
b.setProductList(buyOrderProducts);
|
||||
//设置快递信息传递给前端
|
||||
ConsigneeVo consigneeVo = new ConsigneeVo();
|
||||
@@ -481,7 +536,7 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
wrapper.eq(BuyOrder::getUserId,userOrderDto.getUserId());
|
||||
// wrapper.eq(BuyOrder::getOrderType,"order");//这里有点问题
|
||||
if(userOrderDto.getOrderStatus()==null){
|
||||
Integer[] sts = {0,1,2,3};
|
||||
Integer[] sts = {0,1,2,3,6,7};
|
||||
wrapper.in(BuyOrder::getOrderStatus,sts);
|
||||
}else{
|
||||
wrapper.eq(BuyOrder::getOrderStatus,userOrderDto.getOrderStatus());
|
||||
@@ -497,7 +552,13 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
//组装商品
|
||||
List<BuyOrderProduct> buyOrderProducts = buyOrderProductService.getBaseMapper().selectList(new LambdaQueryWrapper<BuyOrderProduct>()
|
||||
.eq(BuyOrderProduct::getOrderId, b.getOrderId()));
|
||||
for (BuyOrderProduct bb : buyOrderProducts){
|
||||
Boolean refundableStatus = false;
|
||||
long paymentDateTime = b.getPaymentDate()==null?0:b.getPaymentDate().getTime();
|
||||
long timestamp = Instant.now().toEpochMilli();
|
||||
if (buyOrderProducts.size() > 0) {
|
||||
boolean[] refundableStatusArr = new boolean[buyOrderProducts.size()];
|
||||
for (int i=0;i<buyOrderProducts.size();i++){
|
||||
BuyOrderProduct bb = buyOrderProducts.get(i);
|
||||
bb.setProduct(shopProductService.getOne(new LambdaQueryWrapper<ShopProduct>().select(ShopProduct::getProductId, ShopProduct::getProductName, ShopProduct::getProductImages, ShopProduct::getPrice, ShopProduct::getActivityPrice, ShopProduct::getIsVipPrice, ShopProduct::getGoodsType)
|
||||
.eq(ShopProduct::getProductId, bb.getProductId())));
|
||||
UserRecord userRecord = userRecordDao.selectOne(new QueryWrapper<UserRecord>()
|
||||
@@ -507,7 +568,24 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
if (userRecord != null) {
|
||||
bb.setRecordId(userRecord.getId());
|
||||
}
|
||||
boolean refundableStatusProduct = false;
|
||||
if (bb.getProduct().getGoodsType().equals("05") && paymentDateTime > timestamp - 7 * 24 * 60 * 60 * 1000) {
|
||||
refundableStatusProduct = true;
|
||||
} else if (!bb.getProduct().getGoodsType().equals("05") && b.getOrderStatus().equals(Constants.ORDER_STATUS_TO_BE_SHIPPED)){
|
||||
refundableStatusProduct = true;
|
||||
}
|
||||
refundableStatusArr[i] = refundableStatusProduct;
|
||||
}
|
||||
for (boolean rs : refundableStatusArr){
|
||||
if(!rs){
|
||||
refundableStatus = false;
|
||||
break;
|
||||
}else{
|
||||
refundableStatus = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
b.setRefundableStatus(b.getOrderStatus().equals("6") || b.getOrderStatus().equals("7") || Constants.PAYMENT_METHOD_ALI_PAY.equals(b.getPaymentMethod())?false:refundableStatus);
|
||||
b.setProductList(buyOrderProducts);
|
||||
b.setTimestamp(b.getCreateTime().getTime()/1000);
|
||||
//充值订单填充充值商品信息
|
||||
@@ -653,7 +731,19 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
List<ShopProductCourseEntity> shopProductCourseEntities = this.getBaseMapper().selectJoinList(ShopProductCourseEntity.class, wrapper);
|
||||
return shopProductCourseEntities;
|
||||
}
|
||||
|
||||
public void removeCourseToUser(BuyOrder orderEntity){
|
||||
QueryWrapper<UserCourseBuyLog> buyLogQueryWrapper = new QueryWrapper<>();
|
||||
buyLogQueryWrapper.eq("order_sn",orderEntity.getOrderSn());
|
||||
log.info("order+sn===="+orderEntity.getOrderSn());
|
||||
List<UserCourseBuyLog> userCourseBuyLogList = userCourseBuyLogDao.selectList(buyLogQueryWrapper);
|
||||
log.info("size===="+userCourseBuyLogList.size());
|
||||
for (UserCourseBuyLog userCourseBuyLog:userCourseBuyLogList){
|
||||
log.info("===delete====="+userCourseBuyLog.getUserCourseBuyId());
|
||||
log.info("===delete2====="+userCourseBuyLog.getId());
|
||||
userCourseBuyDao.realDeleteById(userCourseBuyLog.getUserCourseBuyId());
|
||||
userCourseBuyLogDao.realDeleteById(userCourseBuyLog.getId());
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void addCourseToUser(String payType,BuyOrder orderEntity){
|
||||
List<ShopProductCourseEntity> orderCourse = getOrderCourse(orderEntity.getOrderSn());
|
||||
@@ -951,5 +1041,58 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
return responseVo;
|
||||
}
|
||||
|
||||
public BigDecimal getRefundFee(Map<String, Object> params, BuyOrder buyOrder) {
|
||||
|
||||
Object userRefundFeeObj = params.get("refundFee");
|
||||
BigDecimal refundFee = new BigDecimal(0);
|
||||
if(userRefundFeeObj!=null && !userRefundFeeObj.toString().trim().equals("")){
|
||||
refundFee = new BigDecimal(userRefundFeeObj.toString().trim());
|
||||
}
|
||||
|
||||
BigDecimal realMoney = buyOrder.getRealMoney() == null ? BigDecimal.ZERO : buyOrder.getRealMoney();
|
||||
BigDecimal shippingMoney = buyOrder.getShippingMoney() == null ? BigDecimal.ZERO : buyOrder.getShippingMoney();
|
||||
BigDecimal maxRefundMoney = realMoney.subtract(shippingMoney);
|
||||
if (maxRefundMoney.compareTo(BigDecimal.ZERO) < 0) {
|
||||
maxRefundMoney = BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
if(refundFee.compareTo(maxRefundMoney)>0){
|
||||
refundFee = maxRefundMoney;
|
||||
}
|
||||
|
||||
return refundFee;
|
||||
}
|
||||
@Override
|
||||
public void refundOrder(BuyOrder buyOrder, MyUserEntity user, int refundId){
|
||||
if(buyOrder.getCouponId()!=null && buyOrder.getCouponId()!=0){
|
||||
couponService.rollbackCoupon(buyOrder.getCouponId());
|
||||
}
|
||||
QueryWrapper<BuyOrderProduct> productQueryWrapper = new QueryWrapper<>();
|
||||
productQueryWrapper.eq("order_id",buyOrder.getOrderId());
|
||||
List<BuyOrderProduct> orderProducts = buyOrderProductService.list(productQueryWrapper);
|
||||
|
||||
//积分恢复
|
||||
BigDecimal jf = buyOrder.getJfDeduction()==null?BigDecimal.ZERO : buyOrder.getJfDeduction();
|
||||
if(jf.compareTo(BigDecimal.ZERO)>0){
|
||||
jfTransactionDetailsService.refundJfTransaction(buyOrder,user);
|
||||
user.setJf(jf.add(user.getJf()));
|
||||
myUserService.updateById(user);
|
||||
buyOrderRefundLogService.insertRefundLog(refundId,5,1);
|
||||
}
|
||||
if(buyOrder.getOrderType().equals("vip")){
|
||||
userVipService.refundVip(buyOrder);
|
||||
}else{
|
||||
//撤回本订单购买赠送的优惠券
|
||||
couponService.refundZSCouponHistoryByOrder(buyOrder);
|
||||
/*//恢复用户权益(点穴/时辰取穴/五运六气/肿瘤古方)
|
||||
myUserService.rollbackUserPowers(buyOrder, orderProducts);*/
|
||||
//撤回电子书权限
|
||||
userEbookBuyService.rollbackUserEbooks(buyOrder, orderProducts);
|
||||
//撤回课程权限
|
||||
log.info("====remove========="+buyOrder.getOrderSn());
|
||||
removeCourseToUser(buyOrder);
|
||||
//回滚库存
|
||||
shopProductService.rollbackStock(buyOrder);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -102,4 +102,27 @@ public class MyUserServiceImpl extends ServiceImpl<MyUserDao, MyUserEntity> impl
|
||||
MyUserEntity one = getOne(wrapper);
|
||||
return one == null;
|
||||
}
|
||||
|
||||
public void rollbackUserPowers(BuyOrder order, List<BuyOrderProduct> orderProducts) {
|
||||
MyUserEntity user = getById(order.getUserId());
|
||||
if(user == null){
|
||||
return;
|
||||
}
|
||||
for (BuyOrderProduct buyOrderProduct : orderProducts){
|
||||
Integer productId = buyOrderProduct.getProductId();
|
||||
if(Arrays.asList(128, 129, 130, 131, 136, 137, 139, 1612).contains(productId)){
|
||||
user.setPointPower(0);
|
||||
}
|
||||
if(Arrays.asList(133, 134, 135).contains(productId)){
|
||||
user.setTgdzPower(0);
|
||||
}
|
||||
if(Arrays.asList(39, 62, 123, 127).contains(productId)){
|
||||
user.setWylqPower(0);
|
||||
}
|
||||
if(Arrays.asList(43, 62, 124).contains(productId)){
|
||||
user.setPrescriptBPower(0);
|
||||
}
|
||||
}
|
||||
updateById(user);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,9 @@
|
||||
package com.peanut.modules.book.service.impl;
|
||||
import com.peanut.common.utils.ExcludeEmptyQueryWrapper;
|
||||
import com.peanut.common.utils.ShiroUtils;
|
||||
import com.peanut.modules.book.service.BuyOrderProductService;
|
||||
import com.peanut.modules.common.entity.BuyOrder;
|
||||
import com.peanut.modules.common.entity.BuyOrderProduct;
|
||||
import com.peanut.modules.common.service.UserVipService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -24,6 +27,8 @@ public class ShopProductServiceImpl extends ServiceImpl<ShopProductDao, ShopProd
|
||||
|
||||
@Autowired
|
||||
private UserVipService userVipService;
|
||||
@Autowired
|
||||
private BuyOrderProductService buyOrderProductService;
|
||||
|
||||
@Override
|
||||
public PageUtils queryPage(Map<String, Object> params) {
|
||||
@@ -135,5 +140,17 @@ public class ShopProductServiceImpl extends ServiceImpl<ShopProductDao, ShopProd
|
||||
return new PageUtils(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rollbackStock(BuyOrder buyOrder){
|
||||
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 = this.getById(productId);
|
||||
product.setProductStock(product.getProductStock() + buyOrderProduct.getQuantity());
|
||||
this.updateById(product);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -84,13 +84,19 @@ public class TransactionDetailsServiceImpl extends ServiceImpl<TransactionDetail
|
||||
getBaseMapper().insert(transactionDetailsEntity);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public void refundRecord(BuyOrder buyOrder, MyUserEntity user, BigDecimal refundPrice){
|
||||
TransactionDetailsEntity transactionDetailsEntity = new TransactionDetailsEntity();
|
||||
transactionDetailsEntity.setUserId(user.getId());
|
||||
transactionDetailsEntity.setOrderType("订单退款");
|
||||
transactionDetailsEntity.setPayNo(buyOrder.getOrderSn());
|
||||
transactionDetailsEntity.setChangeAmount(refundPrice);
|
||||
transactionDetailsEntity.setUserBalance(user.getPeanutCoin().add(refundPrice));
|
||||
transactionDetailsEntity.setRelationId(buyOrder.getOrderId());
|
||||
transactionDetailsEntity.setUserName(user.getNickname());
|
||||
transactionDetailsEntity.setTel(user.getTel());
|
||||
transactionDetailsEntity.setNote("订单号:" + buyOrder.getOrderSn() + " 虚拟币退款");
|
||||
getBaseMapper().insert(transactionDetailsEntity);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.peanut.common.utils.PageUtils;
|
||||
import com.peanut.common.utils.Query;
|
||||
import com.peanut.modules.book.service.ShopProductBookService;
|
||||
import com.peanut.modules.common.dao.UserEbookBuyDao;
|
||||
import com.peanut.modules.common.entity.BuyOrder;
|
||||
import com.peanut.modules.common.entity.BuyOrderProduct;
|
||||
import com.peanut.modules.common.entity.ShopProductBookEntity;
|
||||
import com.peanut.modules.common.entity.UserEbookBuyEntity;
|
||||
import com.peanut.modules.book.service.UserEbookBuyService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -16,6 +20,7 @@ import org.springframework.stereotype.Service;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service("userEbookBuyService")
|
||||
@@ -23,6 +28,8 @@ public class UserEbookBuyServiceImpl extends ServiceImpl<UserEbookBuyDao, UserEb
|
||||
|
||||
@Autowired
|
||||
private UserEbookBuyDao userEbookBuyDao;
|
||||
@Autowired
|
||||
private ShopProductBookService shopProductBookService;
|
||||
|
||||
@Override
|
||||
public PageUtils queryPage(Map<String, Object> params) {
|
||||
@@ -68,4 +75,34 @@ public class UserEbookBuyServiceImpl extends ServiceImpl<UserEbookBuyDao, UserEb
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addBookForUser(BuyOrder buyOrder, Integer userId, List<Integer> bookIds) {
|
||||
for (Integer i:bookIds){
|
||||
List<UserEbookBuyEntity> userEbookBuyEntities = this.getBaseMapper().selectList(new LambdaQueryWrapper<UserEbookBuyEntity>().eq(UserEbookBuyEntity::getUserId, userId).eq(UserEbookBuyEntity::getBookId, i));
|
||||
if(userEbookBuyEntities.size()==0){
|
||||
UserEbookBuyEntity userEbookBuyEntity = new UserEbookBuyEntity();
|
||||
userEbookBuyEntity.setUserId(userId);
|
||||
userEbookBuyEntity.setBookId(i);
|
||||
userEbookBuyEntity.setPayTime(new Date());
|
||||
userEbookBuyEntity.setOrdersn(buyOrder.getOrderSn());
|
||||
this.save(userEbookBuyEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rollbackUserEbooks(BuyOrder order, List<BuyOrderProduct> orderProducts) {
|
||||
for (BuyOrderProduct buyOrderProduct : orderProducts){
|
||||
List<Integer> bookIds = shopProductBookService.getBaseMapper().selectList(new LambdaQueryWrapper<ShopProductBookEntity>()
|
||||
.eq(ShopProductBookEntity::getProductId,buyOrderProduct.getProductId())
|
||||
.eq(ShopProductBookEntity::getDelFlag,0)
|
||||
).stream().map(ShopProductBookEntity::getBookId).collect(Collectors.toList());
|
||||
for (Integer bookId:bookIds){
|
||||
QueryWrapper<UserEbookBuyEntity> removeWrapper = new QueryWrapper<>();
|
||||
removeWrapper.eq("user_id", order.getUserId());
|
||||
removeWrapper.eq("ordersn", order.getOrderSn());
|
||||
this.remove(removeWrapper);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
44
src/main/java/com/peanut/modules/book/vo/UserVipYearVo.java
Normal file
44
src/main/java/com/peanut/modules/book/vo/UserVipYearVo.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package com.peanut.modules.book.vo;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
public class UserVipYearVo implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private Integer id;
|
||||
private Integer year;
|
||||
private Date endTime;
|
||||
private Date startTime;
|
||||
|
||||
public Integer getYear() {
|
||||
return year;
|
||||
}
|
||||
|
||||
public void setYear(Integer year) {
|
||||
this.year = year;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Date getEndTime() {
|
||||
return endTime;
|
||||
}
|
||||
|
||||
public void setEndTime(Date endTime) {
|
||||
this.endTime = endTime;
|
||||
}
|
||||
|
||||
public Date getStartTime() {
|
||||
return startTime;
|
||||
}
|
||||
|
||||
public void setStartTime(Date startTime) {
|
||||
this.startTime = startTime;
|
||||
}
|
||||
}
|
||||
@@ -55,7 +55,7 @@ public class TransactionDetailsController {
|
||||
BuyOrder buyOrder = buyOrderService.getOne(new LambdaQueryWrapper<BuyOrder>()
|
||||
.eq(BuyOrder::getOrderSn,orderSn));
|
||||
if (buyOrder!=null){
|
||||
if ("购买商品".equals(detail.getOrderType())){
|
||||
if ("购买商品".equals(detail.getOrderType())||"订单退款".equals(detail.getOrderType())){
|
||||
List<BuyOrderProduct> products = buyOrderProductService.list(new LambdaQueryWrapper<BuyOrderProduct>()
|
||||
.eq(BuyOrderProduct::getOrderId,buyOrder.getOrderId()));
|
||||
for (BuyOrderProduct buyOrderProduct : products) {
|
||||
|
||||
@@ -380,6 +380,7 @@ public class UserVipController {
|
||||
MyUserEntity user = myUserDao.selectById(buyOrder.getUserId());
|
||||
if (usePeanutCoin(user, totalPrice)&&useJfCoin(user,buyOrder.getJfDeduction())) {
|
||||
// 更新订单状态
|
||||
buyOrder.setPaymentDate(new Date());
|
||||
buyOrderService.updateOrderStatus(user.getId(), buyOrder.getOrderSn(), "2");
|
||||
//记录用户虚拟币消费
|
||||
if(totalPrice.compareTo(BigDecimal.ZERO)>0){
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.peanut.modules.common.dao;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.peanut.modules.common.entity.BuyOrderRefund;
|
||||
import com.peanut.modules.common.entity.BuyOrderRefundLog;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface BuyOrderRefundLogDao extends MPJBaseMapper<BuyOrderRefundLog> {
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.peanut.modules.common.dao;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.peanut.modules.common.entity.UserCourseBuyEntity;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@@ -18,4 +19,7 @@ public interface UserCourseBuyDao extends MPJBaseMapper<UserCourseBuyEntity> {
|
||||
List<Map<String,Object>> getIncome(@Param("date") String date);
|
||||
|
||||
List<Map<String,Object>> getCoursePurchaseDetails(int courseId,int catalogueId,Integer limit,Integer offset);
|
||||
|
||||
@Delete("DELETE FROM user_course_buy WHERE id = #{userCourseBuyId}")
|
||||
int realDeleteById(int userCourseBuyId);
|
||||
}
|
||||
|
||||
@@ -2,8 +2,11 @@ package com.peanut.modules.common.dao;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.peanut.modules.common.entity.UserCourseBuyLog;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface UserCourseBuyLogDao extends MPJBaseMapper<UserCourseBuyLog> {
|
||||
@Delete("DELETE FROM user_course_buy_log WHERE id = #{userCourseBuyLogId}")
|
||||
int realDeleteById(int userCourseBuyLogId);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.peanut.modules.common.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.peanut.modules.common.entity.UserVipLog;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@@ -9,7 +9,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Mapper
|
||||
public interface UserVipLogDao extends BaseMapper<UserVipLog> {
|
||||
public interface UserVipLogDao extends MPJBaseMapper<UserVipLog> {
|
||||
|
||||
List<Map<String,Object>> getUserVipLogInfo(@Param("date") String date);
|
||||
|
||||
|
||||
@@ -124,6 +124,7 @@ public class BuyOrder implements Serializable {
|
||||
* 3:已完成
|
||||
* 4: 交易失败
|
||||
* 5: 已过期
|
||||
* 6: 已退款
|
||||
*/
|
||||
private String orderStatus;
|
||||
/**
|
||||
@@ -223,4 +224,9 @@ public class BuyOrder implements Serializable {
|
||||
private BookEntity bookEntity;
|
||||
@TableField(exist = false)
|
||||
private String trainingClassIdentity;
|
||||
@TableField(exist = false)
|
||||
private Boolean refundableStatus;
|
||||
@TableField(exist = false)
|
||||
private String refundRemark;
|
||||
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ public class BuyOrderRefund implements Serializable {
|
||||
|
||||
@TableId
|
||||
private Integer id;
|
||||
private String refundNo;
|
||||
private Integer userId;
|
||||
//订单类型 线上 线下
|
||||
private String type;
|
||||
@@ -23,8 +24,13 @@ public class BuyOrderRefund implements Serializable {
|
||||
private String orderSn;
|
||||
private String payType;
|
||||
private BigDecimal fee;
|
||||
private BigDecimal jfDeduction;
|
||||
private BigDecimal shippingMoney;
|
||||
private int deductShipping;
|
||||
//商品名称
|
||||
private String title;
|
||||
private int status;
|
||||
private String remark;
|
||||
private Date createTime;
|
||||
private String wxRefundNo;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.peanut.modules.common.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 订单退款进度日志表
|
||||
*
|
||||
* @author yl
|
||||
* @email yl328572838@163.com
|
||||
* @date 2022-08-29 15:27:44
|
||||
*/
|
||||
@Data
|
||||
@TableName("buy_order_refund_log")
|
||||
public class BuyOrderRefundLog implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
private Integer id;
|
||||
private Integer refundId;
|
||||
private Date createTime;
|
||||
private int type;
|
||||
private int status;
|
||||
private int reason;
|
||||
@TableField(exist = false)
|
||||
private String title;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String content;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.peanut.modules.common.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.peanut.modules.common.entity.BuyOrderRefund;
|
||||
import com.peanut.modules.common.entity.BuyOrderRefundLog;
|
||||
|
||||
public interface BuyOrderRefundLogService extends IService<BuyOrderRefundLog> {
|
||||
void insertRefundLog(int buyOrderRefundId, int type, int status);
|
||||
void insertRefundLog(int buyOrderRefundId, int type, int status, String reason);
|
||||
}
|
||||
@@ -1,7 +1,14 @@
|
||||
package com.peanut.modules.common.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.peanut.modules.common.entity.BuyOrder;
|
||||
import com.peanut.modules.common.entity.BuyOrderRefund;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public interface BuyOrderRefundService extends IService<BuyOrderRefund> {
|
||||
int insertBuyOrderRefund(BuyOrder buyOrder, BigDecimal refundFee, int deductShipping,String remark);
|
||||
String genRefundNo();
|
||||
|
||||
BuyOrderRefund getRefundInfoByOrderId(int orderId);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,8 @@ public interface CouponService extends IService<CouponEntity> {
|
||||
|
||||
R insertCouponHistory(int couponId, int userId,int getType,int status,String remark);
|
||||
|
||||
R insertCouponHistory(BuyOrder buyOrder, int couponId, int userId, int getType, int status, String remark);
|
||||
|
||||
List<CouponHistory> getCouponListPayment(Map<String,Object> params);
|
||||
|
||||
//使用优惠卷
|
||||
@@ -28,6 +30,8 @@ public interface CouponService extends IService<CouponEntity> {
|
||||
//回滚优惠卷
|
||||
void rollbackCoupon(int couponHistoryId);
|
||||
|
||||
void refundZSCouponHistoryByOrder(BuyOrder order);
|
||||
|
||||
//通过商品发放优惠卷
|
||||
void insertCouponHistoryByProductId(BuyOrder order);
|
||||
|
||||
|
||||
@@ -10,4 +10,7 @@ public interface JfTransactionDetailsService extends IService<JfTransactionDetai
|
||||
|
||||
void recordJfTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal jf);
|
||||
|
||||
void refundJfTransaction(BuyOrder buyOrder, MyUserEntity user);
|
||||
|
||||
void recordZsJfTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal refundJF);
|
||||
}
|
||||
|
||||
@@ -29,4 +29,5 @@ public interface UserVipService extends IService<UserVip> {
|
||||
|
||||
void openVipForUser(BuyOrder buyOrder);
|
||||
|
||||
void refundVip(BuyOrder buyOrder);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.peanut.modules.common.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.peanut.modules.common.dao.BuyOrderRefundLogDao;
|
||||
import com.peanut.modules.common.entity.BuyOrder;
|
||||
import com.peanut.modules.common.entity.BuyOrderRefund;
|
||||
import com.peanut.modules.common.entity.BuyOrderRefundLog;
|
||||
import com.peanut.modules.common.service.BuyOrderRefundLogService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Slf4j
|
||||
@Service("commonBuyOrderRefundLogService")
|
||||
public class BuyOrderRefundLogServiceImpl extends ServiceImpl<BuyOrderRefundLogDao, BuyOrderRefundLog> implements BuyOrderRefundLogService {
|
||||
@Override
|
||||
public void insertRefundLog(int refundId, int type, int status){
|
||||
BuyOrderRefundLog log = new BuyOrderRefundLog();
|
||||
log.setRefundId(refundId);
|
||||
log.setType(type);
|
||||
log.setStatus(status);
|
||||
this.save(log);
|
||||
}
|
||||
@Override
|
||||
public void insertRefundLog(int refundId, int type, int status, String reason){
|
||||
BuyOrderRefundLog log = new BuyOrderRefundLog();
|
||||
log.setRefundId(refundId);
|
||||
log.setType(type);
|
||||
log.setStatus(status);
|
||||
this.save(log);
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,48 @@
|
||||
package com.peanut.modules.common.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.peanut.modules.common.dao.BuyOrderRefundDao;
|
||||
import com.peanut.modules.common.entity.BuyOrder;
|
||||
import com.peanut.modules.common.entity.BuyOrderRefund;
|
||||
import com.peanut.modules.common.service.BuyOrderRefundService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Random;
|
||||
|
||||
@Slf4j
|
||||
@Service("commonBuyOrderRefundService")
|
||||
public class BuyOrderRefundServiceImpl extends ServiceImpl<BuyOrderRefundDao, BuyOrderRefund> implements BuyOrderRefundService {
|
||||
|
||||
@Override
|
||||
public int insertBuyOrderRefund(BuyOrder buyOrder, BigDecimal refundFee, int deductShipping,String remark){
|
||||
BuyOrderRefund buyOrderRefund = new BuyOrderRefund();
|
||||
buyOrderRefund.setOrderId(buyOrder.getOrderId());
|
||||
buyOrderRefund.setType("线上"); //id
|
||||
buyOrderRefund.setUserId(buyOrder.getUserId());
|
||||
buyOrderRefund.setOrderSn(buyOrder.getOrderSn());
|
||||
buyOrderRefund.setPayType(buyOrder.getPaymentMethod());
|
||||
buyOrderRefund.setFee(refundFee);
|
||||
buyOrderRefund.setJfDeduction(buyOrder.getJfDeduction());
|
||||
buyOrderRefund.setShippingMoney(deductShipping==1?buyOrder.getShippingMoney():BigDecimal.ZERO);
|
||||
buyOrderRefund.setDeductShipping(deductShipping);
|
||||
buyOrderRefund.setRemark(remark);
|
||||
this.save(buyOrderRefund);
|
||||
return buyOrderRefund.getId();
|
||||
}
|
||||
@Override
|
||||
public String genRefundNo() {
|
||||
long time = System.currentTimeMillis();
|
||||
int random = new Random().nextInt(900) + 100; // 100~999
|
||||
return "RF" + time + random;
|
||||
}
|
||||
@Override
|
||||
public BuyOrderRefund getRefundInfoByOrderId(int orderId){
|
||||
QueryWrapper<BuyOrderRefund> wrapperRefund = new QueryWrapper<>();
|
||||
wrapperRefund.eq("order_id",orderId).last("LIMIT 1");
|
||||
BuyOrderRefund refundInfo = this.getOne(wrapperRefund);
|
||||
return refundInfo;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.peanut.common.utils.ExpressOrderUtil;
|
||||
import com.peanut.common.utils.Query;
|
||||
import com.peanut.config.Constants;
|
||||
import com.peanut.modules.common.dao.*;
|
||||
import com.peanut.modules.common.entity.*;
|
||||
import com.peanut.modules.common.service.BuyOrderRefundService;
|
||||
import com.peanut.modules.common.service.BuyOrderService;
|
||||
import com.peanut.modules.common.to.PrepareOrderDto;
|
||||
import com.peanut.modules.common.vo.UserBaseVo;
|
||||
@@ -16,6 +18,8 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -42,6 +46,8 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
private AiBuyConfigDao aiBuyConfigDao;
|
||||
@Autowired
|
||||
private ShopProductCourseDao shopProductCourseDao;
|
||||
@Autowired
|
||||
private BuyOrderRefundService buyOrderRefundService;
|
||||
|
||||
@Override
|
||||
public Map<String, Object> initPrepareOrder(PrepareOrderDto prepareOrderDto) {
|
||||
@@ -73,7 +79,7 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
wrapper.eq(BuyOrder::getUserId,params.get("userId"));
|
||||
wrapper.eq(BuyOrder::getCome,params.get("come"));
|
||||
if(StringUtils.isEmpty(params.get("orderStatus").toString())){
|
||||
Integer[] sts = {0,1,2,3};
|
||||
Integer[] sts = {0,1,2,3,6,7};
|
||||
wrapper.in(BuyOrder::getOrderStatus,sts);
|
||||
}else{
|
||||
wrapper.eq(BuyOrder::getOrderStatus,params.get("orderStatus").toString());
|
||||
@@ -88,6 +94,7 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
}
|
||||
//组装购买人
|
||||
b.setUser(userDao.selectById(b.getUserId()));
|
||||
boolean refundableStatus = false;
|
||||
//组装充值配置详情
|
||||
if (b.getProductId()!=null){
|
||||
BookBuyConfigEntity bookBuyConfigEntity = bookBuyConfigDao.selectById(b.getProductId());
|
||||
@@ -97,7 +104,12 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
}
|
||||
b.setBookBuyConfigEntity(bookBuyConfigEntity);
|
||||
}
|
||||
long timestamp = Instant.now().toEpochMilli();
|
||||
long paymentDateTime = b.getPaymentDate()==null?0: b.getPaymentDate().getTime();
|
||||
if (b.getVipBuyConfigId()!=0){
|
||||
if(paymentDateTime > timestamp-7*24*60*60*1000){
|
||||
refundableStatus = true;
|
||||
}
|
||||
b.setVipBuyConfigEntity(vipBuyConfigDao.selectById(b.getVipBuyConfigId()));
|
||||
}
|
||||
if (b.getAiBuyConfigId()!=0){
|
||||
@@ -107,10 +119,27 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
List<BuyOrderProduct> buyOrderProducts = buyOrderProductDao.selectList(
|
||||
new LambdaQueryWrapper<BuyOrderProduct>().eq(BuyOrderProduct::getOrderId, b.getOrderId()));
|
||||
if (buyOrderProducts.size() > 0) {
|
||||
for (BuyOrderProduct bb : buyOrderProducts){
|
||||
boolean[] refundableStatusArr = new boolean[buyOrderProducts.size()];
|
||||
for (int i=0;i<buyOrderProducts.size();i++){
|
||||
BuyOrderProduct bb = buyOrderProducts.get(i);
|
||||
MPJLambdaWrapper<ShopProduct> w = new MPJLambdaWrapper<>();
|
||||
w.disableLogicDel().eq(ShopProduct::getProductId,bb.getProductId());
|
||||
bb.setProduct(shopProductDao.selectOne(w));
|
||||
boolean refundableStatusProduct = false;
|
||||
if(bb.getProduct().getGoodsType().equals("05") && (paymentDateTime > timestamp-7*24*60*60*1000)){
|
||||
refundableStatusProduct = true;
|
||||
}else if(!bb.getProduct().getGoodsType().equals("05") && b.getOrderStatus().equals("1")){
|
||||
refundableStatusProduct = true;
|
||||
}
|
||||
refundableStatusArr[i] = refundableStatusProduct;
|
||||
}
|
||||
for (boolean rs : refundableStatusArr){
|
||||
if(!rs){
|
||||
refundableStatus = false;
|
||||
break;
|
||||
}else{
|
||||
refundableStatus = true;
|
||||
}
|
||||
}
|
||||
b.setProductList(buyOrderProducts);
|
||||
b.setTimestamp(b.getCreateTime().getTime()/1000);
|
||||
@@ -122,6 +151,7 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
|
||||
b.setExpressList(expressOrders);
|
||||
}
|
||||
}
|
||||
b.setRefundableStatus(b.getOrderStatus().equals("6") || b.getOrderStatus().equals("7")|| Constants.PAYMENT_METHOD_ALI_PAY.equals(b.getPaymentMethod())?false:refundableStatus);
|
||||
}
|
||||
}
|
||||
return page;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.peanut.modules.common.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.peanut.common.utils.DateUtils;
|
||||
@@ -8,7 +9,9 @@ import com.peanut.common.utils.R;
|
||||
import com.peanut.common.utils.ShiroUtils;
|
||||
import com.peanut.modules.common.dao.*;
|
||||
import com.peanut.modules.common.entity.*;
|
||||
import com.peanut.modules.common.service.CouponHistoryService;
|
||||
import com.peanut.modules.common.service.CouponService;
|
||||
import com.peanut.modules.common.service.JfTransactionDetailsService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -41,6 +44,10 @@ public class CouponServiceImpl extends ServiceImpl<CouponDao, CouponEntity> impl
|
||||
private ShopProductDao shopProductDao;
|
||||
@Autowired
|
||||
private JfTransactionDetailsDao jfTransactionDetailsDao;
|
||||
@Autowired
|
||||
private JfTransactionDetailsService jfTransactionDetailsService;
|
||||
@Autowired
|
||||
private CouponHistoryService couponHistoryService;
|
||||
|
||||
@Override
|
||||
public CouponEntity getByIdSetRange(int id) {
|
||||
@@ -116,7 +123,50 @@ public class CouponServiceImpl extends ServiceImpl<CouponDao, CouponEntity> impl
|
||||
return R.error("优惠券暂未开始发放");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public R insertCouponHistory(BuyOrder buyOrder, int couponId, int userId, int getType, int status, String remark) {
|
||||
CouponEntity couponEntity = couponDao.selectById(couponId);
|
||||
if (couponEntity.getCurrentState()==0){
|
||||
int historyCount = couponHistoryDao.selectCount(new LambdaQueryWrapper<CouponHistory>()
|
||||
.eq(CouponHistory::getCouponId,couponId)).intValue();
|
||||
//是否超出总发行量
|
||||
if (historyCount<couponEntity.getTotalCirculation()){
|
||||
List<CouponHistory> historyList = couponHistoryDao.selectList(new LambdaQueryWrapper<CouponHistory>()
|
||||
.eq(CouponHistory::getUserId,userId)
|
||||
.eq(CouponHistory::getCouponId,couponId));
|
||||
//是否超出可持有张数
|
||||
if (historyList.size()<couponEntity.getLimitedCollar()){
|
||||
CouponHistory couponHistory = new CouponHistory();
|
||||
couponHistory.setCouponId(couponId);
|
||||
couponHistory.setUserId(userId);
|
||||
couponHistory.setGetType(getType);
|
||||
couponHistory.setStatus(status);
|
||||
couponHistory.setRemark(remark);
|
||||
couponHistory.setEffectType(couponEntity.getEffectType());
|
||||
Date date = new Date();
|
||||
if (couponEntity.getEffectType()==1){
|
||||
couponHistory.setStartTime(date);
|
||||
couponHistory.setEndTime(DateUtils.addDateDays(date,couponEntity.getValidity()));
|
||||
}else if (couponEntity.getEffectType()==2){
|
||||
couponHistory.setStartTime(couponEntity.getEffectTime());
|
||||
couponHistory.setEndTime(couponEntity.getExpireTime());
|
||||
}
|
||||
if (couponHistory.getStatus()==1){
|
||||
couponHistory.setUseTime(date);
|
||||
}
|
||||
couponHistory.setOrderId(buyOrder.getOrderId());
|
||||
couponHistoryDao.insert(couponHistory);
|
||||
return R.ok();
|
||||
}else {
|
||||
return R.error("每人限领"+couponEntity.getLimitedCollar()+"张");
|
||||
}
|
||||
}else {
|
||||
return R.error("优惠券已放完");
|
||||
}
|
||||
}else {
|
||||
return R.error("优惠券暂未开始发放");
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public List<CouponHistory> getCouponListPayment(Map<String, Object> params) {
|
||||
List<CouponHistory> res = new ArrayList<>();
|
||||
@@ -252,6 +302,67 @@ public class CouponServiceImpl extends ServiceImpl<CouponDao, CouponEntity> impl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refundZSCouponHistoryByOrder(BuyOrder order){
|
||||
MPJLambdaWrapper<CouponToProduct> wrapper = new MPJLambdaWrapper();
|
||||
wrapper.leftJoin(BuyOrderProduct.class,BuyOrderProduct::getProductId,CouponToProduct::getProductId);
|
||||
wrapper.leftJoin(CouponEntity.class,CouponEntity::getId,CouponToProduct::getCouponId);
|
||||
wrapper.eq(CouponEntity::getCurrentState,0);
|
||||
wrapper.eq(BuyOrderProduct::getOrderId,order.getOrderId());
|
||||
wrapper.select(CouponToProduct::getCouponId);
|
||||
wrapper.select(BuyOrderProduct::getProductId);
|
||||
wrapper.select(BuyOrderProduct::getQuantity);
|
||||
List<Map<String,Object>> buyOrderProducts = couponToProductDao.selectJoinMaps(wrapper);
|
||||
|
||||
MyUserEntity userEntity = userDao.selectById(order.getUserId());
|
||||
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>()
|
||||
.eq(UserVip::getUserId, userEntity.getId())
|
||||
.eq(UserVip::getState,0)
|
||||
.lt(UserVip::getStartTime,order.getPaymentDate()));
|
||||
boolean isVip = false;
|
||||
if (userVipList.size() > 0) {
|
||||
isVip = true;
|
||||
}
|
||||
System.out.println("isVip:"+isVip);
|
||||
BigDecimal refundAllJF = BigDecimal.ZERO;
|
||||
Boolean isRefundCoupon = false;
|
||||
for (Map<String,Object> map : buyOrderProducts) {
|
||||
ShopProduct shopProduct = shopProductDao.selectById(map.get("product_id").toString());
|
||||
System.out.println("goodsType:"+shopProduct.getGoodsType());
|
||||
if ("03".equals(shopProduct.getGoodsType())){
|
||||
int couponId = Integer.parseInt(map.get("coupon_id").toString());
|
||||
CouponEntity couponEntity = couponDao.selectById(couponId);
|
||||
//现金券
|
||||
if (couponEntity.getCouponType()==0 && isVip){
|
||||
BigDecimal quantity = new BigDecimal(map.get("quantity").toString());
|
||||
BigDecimal sumRefundJF = couponEntity.getCouponAmount().multiply(quantity);
|
||||
refundAllJF = refundAllJF.add(sumRefundJF);
|
||||
|
||||
QueryWrapper<CouponHistory> couponHistoryRemoveWrapper = new QueryWrapper<>();
|
||||
couponHistoryRemoveWrapper.eq("order_id",order.getOrderId());
|
||||
couponHistoryRemoveWrapper.eq("status",1);
|
||||
couponHistoryService.remove(couponHistoryRemoveWrapper);
|
||||
}else{
|
||||
isRefundCoupon = true;
|
||||
}
|
||||
}else{
|
||||
isRefundCoupon = true;
|
||||
}
|
||||
}
|
||||
if(refundAllJF.compareTo(BigDecimal.ZERO)>0 && userEntity.getJf().compareTo(refundAllJF)>=0){
|
||||
BigDecimal userJF = userEntity.getJf().subtract(refundAllJF);
|
||||
userEntity.setJf(userJF.compareTo(BigDecimal.ZERO)>=0?userJF:BigDecimal.ZERO);
|
||||
userDao.updateById(userEntity);
|
||||
jfTransactionDetailsService.recordZsJfTransaction(order,userEntity, refundAllJF);
|
||||
}
|
||||
if(isRefundCoupon){
|
||||
QueryWrapper<CouponHistory> couponHistoryRemoveWrapper = new QueryWrapper<>();
|
||||
couponHistoryRemoveWrapper.eq("order_id",order.getOrderId());
|
||||
couponHistoryRemoveWrapper.eq("status",0);
|
||||
couponHistoryService.remove(couponHistoryRemoveWrapper);
|
||||
}
|
||||
|
||||
}
|
||||
@Override
|
||||
public void insertCouponHistoryByProductId(BuyOrder order) {
|
||||
MPJLambdaWrapper<CouponToProduct> wrapper = new MPJLambdaWrapper();
|
||||
@@ -278,7 +389,7 @@ public class CouponServiceImpl extends ServiceImpl<CouponDao, CouponEntity> impl
|
||||
if (couponEntity.getCouponType()==0){
|
||||
BigDecimal jf = BigDecimal.ZERO;
|
||||
for (int i=0;i<Integer.parseInt(map.get("quantity").toString());i++){
|
||||
R res = insertCouponHistory(couponId,order.getUserId(), 1,1,
|
||||
R res = insertCouponHistory(order,couponId,order.getUserId(), 1,1,
|
||||
"购买商品"+shopProduct.getProductName()+"赠送;vip用户购买预售书优惠券换积分。");
|
||||
if (Integer.parseInt(res.get("code").toString())==0&&couponEntity.getCouponAmount() != null && couponEntity.getCouponAmount().compareTo(BigDecimal.ZERO)>0) {
|
||||
jf = jf.add(couponEntity.getCouponAmount());
|
||||
|
||||
@@ -22,4 +22,26 @@ public class JfTransactionDetailsServiceImpl extends ServiceImpl<JfTransactionDe
|
||||
jfTransactionDetails.setRemark("消费积分抵扣:"+jf.toString()+",订单号:"+buyOrder.getOrderSn());
|
||||
getBaseMapper().insert(jfTransactionDetails);
|
||||
}
|
||||
@Override
|
||||
public void refundJfTransaction(BuyOrder buyOrder, MyUserEntity user) {
|
||||
JfTransactionDetails jfTransactionDetails = new JfTransactionDetails();
|
||||
jfTransactionDetails.setUserId(user.getId());
|
||||
jfTransactionDetails.setChangeAmount(buyOrder.getJfDeduction());
|
||||
jfTransactionDetails.setActType(0);
|
||||
jfTransactionDetails.setUserBalance(user.getJf().add(buyOrder.getJfDeduction()));
|
||||
jfTransactionDetails.setRelationId(buyOrder.getOrderId());
|
||||
jfTransactionDetails.setRemark("订单退款:"+buyOrder.getJfDeduction().toString()+",订单号:"+buyOrder.getOrderSn());
|
||||
getBaseMapper().insert(jfTransactionDetails);
|
||||
}
|
||||
@Override
|
||||
public void recordZsJfTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal refundJF) {
|
||||
JfTransactionDetails jfTransactionDetails = new JfTransactionDetails();
|
||||
jfTransactionDetails.setUserId(buyOrder.getUserId());
|
||||
jfTransactionDetails.setChangeAmount(refundJF);
|
||||
jfTransactionDetails.setActType(1);
|
||||
jfTransactionDetails.setUserBalance(user.getJf());
|
||||
jfTransactionDetails.setRelationId(buyOrder.getOrderId());
|
||||
jfTransactionDetails.setRemark("订单退款,赠送积分退回:"+refundJF.toString()+",订单号:"+buyOrder.getOrderSn());
|
||||
getBaseMapper().insert(jfTransactionDetails);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package com.peanut.modules.common.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.peanut.common.utils.ShiroUtils;
|
||||
import com.peanut.modules.book.vo.UserVipYearVo;
|
||||
import com.peanut.modules.common.dao.*;
|
||||
import com.peanut.modules.common.entity.*;
|
||||
import com.peanut.modules.common.service.UserVipLogService;
|
||||
@@ -12,7 +15,6 @@ import org.apache.commons.lang.time.DateUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
|
||||
@Slf4j
|
||||
@@ -33,6 +35,8 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
|
||||
private VipBuyConfigDao vipBuyConfigDao;
|
||||
@Autowired
|
||||
private UserVipLogService userVipLogService;
|
||||
@Autowired
|
||||
private UserVipLogDao userVipLogDao;
|
||||
|
||||
@Override
|
||||
public boolean isVip() {
|
||||
@@ -401,5 +405,26 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refundVip(BuyOrder buyOrder){
|
||||
MPJLambdaWrapper<UserVipLog> UserVipLogMPJLambdaWrapper = new MPJLambdaWrapper<>();
|
||||
UserVipLogMPJLambdaWrapper.leftJoin(UserVip.class,UserVip::getId,UserVipLog::getUserVipId);
|
||||
UserVipLogMPJLambdaWrapper.leftJoin(BuyOrder.class,BuyOrder::getOrderSn,UserVipLog::getOrderSn);
|
||||
UserVipLogMPJLambdaWrapper.leftJoin(VipBuyConfigEntity.class,VipBuyConfigEntity::getId,BuyOrder::getVipBuyConfigId);
|
||||
UserVipLogMPJLambdaWrapper.selectAll(UserVip.class);
|
||||
UserVipLogMPJLambdaWrapper.select(VipBuyConfigEntity::getYear);
|
||||
UserVipLogMPJLambdaWrapper.eq(UserVipLog::getOrderSn,buyOrder.getOrderSn()).eq(UserVip::getState,0);
|
||||
List<UserVipYearVo> userVipYearList = userVipLogDao.selectJoinList(UserVipYearVo.class, UserVipLogMPJLambdaWrapper);
|
||||
for (UserVipYearVo userVipYearVo:userVipYearList){
|
||||
UserVip userVip = userVipDao.selectById(userVipYearVo.getId());
|
||||
userVip.setEndTime(DateUtils.addYears(userVip.getEndTime(),-userVipYearVo.getYear()));
|
||||
if(userVip.getStartTime().compareTo(userVip.getEndTime())==0){
|
||||
this.removeById(userVip);
|
||||
}else{
|
||||
this.updateById(userVip);
|
||||
}
|
||||
}
|
||||
userVipLogService.remove(new QueryWrapper<UserVipLog>().eq("order_sn",buyOrder.getOrderSn()).eq("user_id",buyOrder.getUserId()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.peanut.common.utils.CopyUtils;
|
||||
import com.peanut.common.utils.OrderUtils;
|
||||
import com.peanut.config.Constants;
|
||||
import com.peanut.modules.book.service.BookBuyConfigService;
|
||||
import com.peanut.modules.book.service.BuyOrderService;
|
||||
import com.peanut.modules.book.service.MyUserService;
|
||||
@@ -81,6 +82,10 @@ public class AliPayServiceImpl implements AliPayService {
|
||||
private TrainingClassService trainingClassService;
|
||||
@Autowired
|
||||
private AiVipLogService aiVipLogService;
|
||||
@Autowired
|
||||
private BuyOrderRefundService buyOrderRefundService;
|
||||
@Autowired
|
||||
private BuyOrderRefundLogService buyOrderRefundLogService;
|
||||
|
||||
@Override
|
||||
public String pay(AlipayDTO payDto) {
|
||||
@@ -367,8 +372,18 @@ public class AliPayServiceImpl implements AliPayService {
|
||||
refund.setOutTradeNo(((Map)res.get("alipay_trade_refund_response")).get("out_trade_no").toString());
|
||||
refund.setRefundFee(((Map)res.get("alipay_trade_refund_response")).get("refund_fee").toString());
|
||||
refundOrderService.save(refund);
|
||||
if (Constants.ORDER_STATUS_REFUND.equals(order.getOrderStatus())) {
|
||||
BuyOrderRefund buyOrderRefund = buyOrderRefundService.getOne(new LambdaQueryWrapper<BuyOrderRefund>()
|
||||
.eq(BuyOrderRefund::getOrderId, order.getOrderId())
|
||||
.orderByDesc(BuyOrderRefund::getId)
|
||||
.last("limit 1"));
|
||||
if (buyOrderRefund != null) {
|
||||
buyOrderRefundLogService.insertRefundLog(buyOrderRefund.getId(),3,1);
|
||||
}
|
||||
} else {
|
||||
refundOrderService.businessOpt(order);
|
||||
}
|
||||
}
|
||||
return resJson;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,9 @@ public class PayRefundOrder implements Serializable {
|
||||
|
||||
|
||||
@TableId
|
||||
private Integer refundId;
|
||||
private Integer id;
|
||||
|
||||
private String refundId;
|
||||
|
||||
/**
|
||||
* 支付方式 1微信,2支付宝,3虚拟币
|
||||
@@ -29,8 +31,9 @@ public class PayRefundOrder implements Serializable {
|
||||
/**
|
||||
* BuyOrder
|
||||
*/
|
||||
private Integer orderId;
|
||||
private String orderSn;
|
||||
|
||||
private Integer orderId;
|
||||
/**
|
||||
* 微信支付宝订单号
|
||||
*/
|
||||
|
||||
@@ -126,6 +126,7 @@ public class WeChatPayController {
|
||||
*/
|
||||
@RequestMapping("/refund" )
|
||||
public R refund(@RequestBody Map<String,Object> map){
|
||||
|
||||
return R.ok(wxpayService.refund(map));
|
||||
}
|
||||
|
||||
@@ -135,10 +136,13 @@ public class WeChatPayController {
|
||||
*/
|
||||
@PostMapping("/refundNotify")
|
||||
public void refundNotify(HttpServletRequest request){
|
||||
|
||||
wxpayService.refundNotify(request);
|
||||
}
|
||||
|
||||
@PostMapping("/lsRefundNotify")
|
||||
public void lsRefundNotify(HttpServletRequest request){
|
||||
|
||||
wxpayService.lsRefundNotify(request);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.peanut.modules.pay.weChatPay.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class WeChatRefundInfo implements Serializable {
|
||||
private String orderSn;
|
||||
private Integer orderId;
|
||||
private String orderType;
|
||||
private String refundNo;
|
||||
private BigDecimal totalAmount;
|
||||
private BigDecimal refundAmount;
|
||||
private String remark;
|
||||
private String appName;
|
||||
private String currency;
|
||||
private String notify_url;
|
||||
private int refundId;
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.peanut.modules.pay.weChatPay.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.peanut.modules.common.entity.PayWechatOrderEntity;
|
||||
import com.peanut.modules.pay.weChatPay.dto.WeChatRefundInfo;
|
||||
import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -19,6 +20,8 @@ public interface WxpayService extends IService<PayWechatOrderEntity> {
|
||||
|
||||
String refund(Map<String,Object> map);
|
||||
|
||||
void refund(WeChatRefundInfo refundInfo);
|
||||
|
||||
void refundNotify(HttpServletRequest request);
|
||||
|
||||
void lsRefundNotify(HttpServletRequest request);
|
||||
|
||||
@@ -20,11 +20,13 @@ import com.peanut.modules.master.service.UserCourseBuyService;
|
||||
import com.peanut.modules.pay.refund.entity.PayRefundOrder;
|
||||
import com.peanut.modules.pay.refund.service.PayRefundOrderService;
|
||||
import com.peanut.modules.pay.weChatPay.config.WechatPayConfig;
|
||||
import com.peanut.modules.pay.weChatPay.dto.WeChatRefundInfo;
|
||||
import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo;
|
||||
import com.peanut.modules.pay.weChatPay.service.WxpayService;
|
||||
import com.peanut.modules.pay.weChatPay.util.HttpUtils;
|
||||
import com.peanut.modules.pay.weChatPay.util.WechatPayValidator;
|
||||
import com.peanut.modules.pay.weChatPay.util.WxPayUtil;
|
||||
import com.qiniu.util.Json;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -89,6 +91,12 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
|
||||
private AiVipLogService aiVipLogService;
|
||||
@Autowired
|
||||
private UserCourseBuyLogDao userCourseBuyLogDao;
|
||||
@Autowired
|
||||
private BuyOrderRefundLogService buyOrderRefundLogService;
|
||||
@Autowired
|
||||
private MyUserService myUserService;
|
||||
@Autowired
|
||||
private BuyOrderRefundService buyOrderRefundService;
|
||||
|
||||
@Override
|
||||
public void prepay(WechatPaymentInfo paymentInfo){
|
||||
@@ -136,6 +144,7 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
|
||||
}else {
|
||||
responseJson = wxPayUtil.doPostWexinV3(wechatPayConfig.getPayUrl(), json.toJSONString(),"");
|
||||
}
|
||||
System.out.println(responseJson);
|
||||
String prepayId = responseJson.getString("prepay_id");
|
||||
if (paymentInfo.getBuyOrderId() == null) {
|
||||
payWechatOrderService.add(paymentInfo.getOrderSn(), prepayId);
|
||||
@@ -350,6 +359,68 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
|
||||
return responseJson.toJSONString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refund(WeChatRefundInfo refundInfo) {
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
|
||||
BigDecimal refund = new BigDecimal(refundInfo.getRefundAmount().toString());
|
||||
//原订单总金额
|
||||
BigDecimal total = refundInfo.getTotalAmount();
|
||||
// 这里 * 100,微信支付单位为 ‘分’
|
||||
BigDecimal hand = new BigDecimal("100");
|
||||
Map<String, Object> amountMap = new HashMap<>();
|
||||
amountMap.put("refund", refund.multiply(hand).intValue());
|
||||
amountMap.put("total", total.multiply(hand).intValue());
|
||||
amountMap.put("currency", "CNY");
|
||||
paramMap.put("amount", amountMap);
|
||||
paramMap.put("out_refund_no", refundInfo.getRefundNo());
|
||||
//微信支付订单号
|
||||
paramMap.put("out_trade_no", refundInfo.getOrderSn());
|
||||
//退款原因
|
||||
paramMap.put("reason", refundInfo.getRemark());
|
||||
|
||||
String appid = "";
|
||||
if (refundInfo.getAppName()==null||"".equals(refundInfo.getAppName())){
|
||||
appid = wechatPayConfig.getAppId();
|
||||
}else if ("zmzm".equals(refundInfo.getAppName())){
|
||||
appid = wechatPayConfig.getZmzmappId();
|
||||
} else if ("wumen".equals(refundInfo.getAppName())) {
|
||||
appid = wechatPayConfig.getWumenappId();
|
||||
} else if ("xlkj".equals(refundInfo.getAppName())) {
|
||||
appid = wechatPayConfig.getXlkjappId();
|
||||
} else if ("thyy".equals(refundInfo.getAppName())) {
|
||||
appid = wechatPayConfig.getThyyappId();
|
||||
}
|
||||
// app id
|
||||
// paramMap.put("appid", appid);
|
||||
|
||||
String notify_url = wechatPayConfig.getRefundNotifyUrl();
|
||||
String mchName = "";
|
||||
|
||||
String mchid = wechatPayConfig.getMchId();
|
||||
if ("trainingClass".equals(refundInfo.getOrderType())||"lsorder".equals(refundInfo.getOrderType())) {
|
||||
mchName = "LS";
|
||||
mchid = wechatPayConfig.getLsMchId();
|
||||
notify_url = wechatPayConfig.getLsRefundNotifyUrl();
|
||||
}
|
||||
// paramMap.put("mchid", mchid);
|
||||
paramMap.put("notify_url", notify_url);
|
||||
|
||||
JSONObject json = JSONObject.parseObject(JSON.toJSONString(paramMap));
|
||||
log.info("=======微信退款申请请求参数:{}", json.toJSONString());
|
||||
log.info(">>>>>>>>>>App请求微信退款申请接口");
|
||||
|
||||
JSONObject responseJson = wxPayUtil.doPostWexinV3(wechatPayConfig.getRefundUrl(), json.toJSONString(),mchName);
|
||||
|
||||
System.out.println(responseJson);
|
||||
log.info(">>>>>>>>>>>微信退款返回的信息是 resJson = {}", responseJson.toJSONString());
|
||||
buyOrderRefundLogService.insertRefundLog(refundInfo.getRefundId(),1,2);
|
||||
if ("PROCESSING".equals(responseJson.get("status"))){
|
||||
BuyOrderRefund buyOrderRefund = buyOrderRefundService.getById(refundInfo.getRefundId());
|
||||
buyOrderRefund.setWxRefundNo(responseJson.getString("refund_id"));
|
||||
buyOrderRefundService.updateById(buyOrderRefund);
|
||||
}
|
||||
}
|
||||
private void userCoinJf(BuyOrder order){
|
||||
MyUserEntity userEntity = userService.getById(order.getUserId());
|
||||
userEntity.setJf(userEntity.getJf().subtract(order.getJfDeduction()));
|
||||
@@ -373,6 +444,18 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
|
||||
// 解密resource中的通知数据
|
||||
String resource = bodyMap.get("resource").toString();
|
||||
Map<String, Object> resourceMap = WechatPayValidator.decryptFromResource(resource, wechatPayConfig.getApiV3Key(), 2);
|
||||
/*BuyOrder orderFalse = buyOrderService.getOne(new QueryWrapper<BuyOrder>().eq("user_id",149299).orderByDesc("order_id"));
|
||||
BuyOrderRefund refundFalse = buyOrderRefundService.getOne(new QueryWrapper<BuyOrderRefund>().eq("user_id",149299).orderByDesc("id"));
|
||||
Map<String, Object> resourceMap = new HashMap<>();
|
||||
resourceMap.put("refund_status","SUCCESS");
|
||||
resourceMap.put("out_trade_no",orderFalse.getOrderSn());
|
||||
resourceMap.put("refund_id",System.currentTimeMillis());
|
||||
resourceMap.put("out_refund_no",refundFalse.getRefundNo());
|
||||
Map<String,BigDecimal> amount = new HashMap<>();
|
||||
amount.put("refund",orderFalse.getRealMoney());
|
||||
resourceMap.put("amount",amount);*/
|
||||
|
||||
|
||||
log.info("微信退款回调结果 msg={}",resourceMap);
|
||||
if ("SUCCESS".equals(resourceMap.get("refund_status").toString())){
|
||||
log.info(">>>>>>>>>>>微信退款成功!<<<<<<<<<<<<<");
|
||||
@@ -381,14 +464,39 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
|
||||
w.leftJoin(PayWechatOrderEntity.class,PayWechatOrderEntity::getOrderSn, BuyOrder::getOrderSn);
|
||||
w.eq("t1.order_id",resourceMap.get("transaction_id").toString());
|
||||
BuyOrder order = buyOrderService.getOne(w);
|
||||
|
||||
PayRefundOrder refund = new PayRefundOrder();
|
||||
refund.setPayType("1");
|
||||
refund.setOrderId(order.getOrderId());
|
||||
refund.setRefundId(resourceMap.get("refund_id").toString());
|
||||
refund.setTradeNo(resourceMap.get("transaction_id").toString());
|
||||
refund.setOutTradeNo(resourceMap.get("out_trade_no").toString());
|
||||
refund.setOrderSn(resourceMap.get("out_trade_no").toString());
|
||||
refund.setRefundFee(((Map)resourceMap.get("amount")).get("refund").toString());
|
||||
refundOrderService.save(refund);
|
||||
refundOrderService.businessOpt(order);
|
||||
|
||||
MyUserEntity user = myUserService.getById(order.getUserId());
|
||||
|
||||
BuyOrderRefund refundInfo = buyOrderRefundService.getOne(new QueryWrapper<BuyOrderRefund>().eq("order_id",order.getOrderId()));
|
||||
refundInfo.setStatus(1);
|
||||
refundInfo.setWxRefundNo( resourceMap.get("refund_id").toString());
|
||||
buyOrderRefundService.updateById(refundInfo);
|
||||
|
||||
buyOrderService.refundOrder(order,user,refundInfo.getId());
|
||||
|
||||
buyOrderRefundLogService.insertRefundLog(refundInfo.getId(),1,1);
|
||||
|
||||
buyOrderService.updateOrderStatus(order.getUserId(),order.getOrderSn(),"6");
|
||||
// refundOrderService.businessOpt(order);
|
||||
}else{
|
||||
if(resourceMap.containsKey("out_refund_no")){
|
||||
String refundNo = resourceMap.get("out_refund_no").toString();
|
||||
BuyOrderRefund refundInfo = buyOrderRefundService.getOne(new QueryWrapper<BuyOrderRefund>().eq("refund_no",refundNo));
|
||||
refundInfo.setStatus(2);
|
||||
refundInfo.setWxRefundNo( resourceMap.get("refund_id").toString());
|
||||
buyOrderRefundService.updateById(refundInfo);
|
||||
|
||||
// buyOrderRefundLogService.insertRefundLog(refundInfo.getId(),1,3,resourceMap.get("reason").toString());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@Override
|
||||
@@ -408,14 +516,40 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
|
||||
w.leftJoin(PayWechatOrderEntity.class,PayWechatOrderEntity::getOrderSn, BuyOrder::getOrderSn);
|
||||
w.eq("t1.order_id",resourceMap.get("transaction_id").toString());
|
||||
BuyOrder order = buyOrderService.getOne(w);
|
||||
|
||||
PayRefundOrder refund = new PayRefundOrder();
|
||||
refund.setPayType("1");
|
||||
refund.setOrderId(order.getOrderId());
|
||||
refund.setRefundId(resourceMap.get("refund_id").toString());
|
||||
refund.setTradeNo(resourceMap.get("transaction_id").toString());
|
||||
refund.setOutTradeNo(resourceMap.get("out_trade_no").toString());
|
||||
refund.setOrderSn(resourceMap.get("out_trade_no").toString());
|
||||
refund.setRefundFee(((Map)resourceMap.get("amount")).get("refund").toString());
|
||||
refundOrderService.save(refund);
|
||||
refundOrderService.businessOpt(order);
|
||||
|
||||
//refundOrderService.businessOpt(order);
|
||||
|
||||
MyUserEntity user = myUserService.getById(order.getUserId());
|
||||
|
||||
BuyOrderRefund refundInfo = buyOrderRefundService.getOne(new QueryWrapper<BuyOrderRefund>().eq("order_id",order.getOrderId()));
|
||||
refundInfo.setStatus(1);
|
||||
refundInfo.setWxRefundNo( resourceMap.get("refund_id").toString());
|
||||
buyOrderRefundService.updateById(refundInfo);
|
||||
|
||||
buyOrderService.refundOrder(order,user,refundInfo.getId());
|
||||
|
||||
buyOrderRefundLogService.insertRefundLog(refundInfo.getId(),1,1);
|
||||
|
||||
buyOrderService.updateOrderStatus(order.getUserId(),order.getOrderSn(),"6");
|
||||
}else{
|
||||
if(resourceMap.containsKey("out_refund_no")){
|
||||
String refundNo = resourceMap.get("out_refund_no").toString();
|
||||
BuyOrderRefund refundInfo = buyOrderRefundService.getOne(new QueryWrapper<BuyOrderRefund>().eq("refund_no",refundNo));
|
||||
refundInfo.setStatus(2);
|
||||
refundInfo.setWxRefundNo( resourceMap.get("refund_id").toString());
|
||||
buyOrderRefundService.updateById(refundInfo);
|
||||
|
||||
// buyOrderRefundLogService.insertRefundLog(refundInfo.getId(),1,3,resourceMap.get("reason").toString());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ wxpay:
|
||||
mchId: 1612860909
|
||||
serialNo: 679AECB2F7AC4183033F713828892BA640E4EEE3
|
||||
apiV3Key: 4aYFklzaULeGlr7oJPZ6rHWKcxjihZUF
|
||||
wechatPayCertificateUrl: F:\hs\nuttyreading-java\src\main\resources\cent\wechatpay_7B5676E3CDF56680D0414A009CE501C844DBE2D6.pem
|
||||
wechatPayCertificateUrl: F:\hs\nuttyreading-server\src\main\resources\cent\wechatpay_7B5676E3CDF56680D0414A009CE501C844DBE2D6.pem
|
||||
privateKeyUrl: F:\hs\nuttyreading-java\src\main\resources\cent\apiclient_key.pem
|
||||
keyPemPath: F:\hs\nuttyreading-java\src\main\resources\cent\apiclient_key.pem
|
||||
notifyUrl: http://z6f8f828.natappfree.cc/pb/pay/payNotify
|
||||
@@ -107,9 +107,9 @@ wxpay:
|
||||
lsMchId: 1700371158
|
||||
lsSerialNo: 3132D23C3130B74B87890DC6E7C80256C75113B9
|
||||
lsApiV3Key: 4aYFklzaULeGlr7oJPZ6rHWKcxjihZUF
|
||||
lsWechatPayCertificateUrl: F:\hs\nuttyreading-java\src\main\resources\cent\lscent\wechatpay_30CFE19A12EDB4D9E0C7DF01DBF457C657566D04.pem
|
||||
lsPrivateKeyUrl: F:\hs\nuttyreading-java\src\main\resources\cent\lscent\apiclient_key.pem
|
||||
lsKeyPemPath: F:\hs\nuttyreading-java\src\main\resources\cent\lscent\apiclient_key.pem
|
||||
lsWechatPayCertificateUrl: F:\hs\nuttyreading-server\src\main\resources\cent\lscent\wechatpay_30CFE19A12EDB4D9E0C7DF01DBF457C657566D04.pem
|
||||
lsPrivateKeyUrl: F:\hs\nuttyreading-server\src\main\resources\cent\lscent\apiclient_key.pem
|
||||
lsKeyPemPath: F:\hs\nuttyreading-server\src\main\resources\cent\lscent\apiclient_key.pem
|
||||
lsNotifyUrl: http://z6f8f828.natappfree.cc/pb/pay/lsPayNotify
|
||||
lsRefundNotifyUrl: https://testapi.nuttyreading.com/pay/refundNotify
|
||||
|
||||
|
||||
@@ -210,8 +210,9 @@
|
||||
|
||||
<!-- <!– 4.2 生产环境:输出到文档–>-->
|
||||
<springProfile name="test,prod">
|
||||
<logger name="com.peanut" level="ERROR" additivity="false">
|
||||
<logger name="com.peanut" level="INFO" additivity="false">
|
||||
<!-- <appender-ref ref="DEBUG_FILE"/>-->
|
||||
<appender-ref ref="INFO_FILE"/>
|
||||
<appender-ref ref="ERROR_FILE"/>
|
||||
</logger>
|
||||
<root level="info">
|
||||
|
||||
Reference in New Issue
Block a user