|
@@ -36,6 +36,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.github.pagehelper.Page;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.Collection;
|
|
|
import java.util.Collections;
|
|
@@ -176,6 +177,8 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
|
|
|
add.setRefundSn(out_trade_no);
|
|
|
add.setRefundFee(orderGoods.getGoodsReceived());
|
|
|
add.setUserId(order.getUserId());
|
|
|
+ add.setType(OrderGoodsRefund.TYPE_SMALL);
|
|
|
+ add.setOrderGoodsId(orderGoods.getOrderGoodsId());
|
|
|
this.save(add);
|
|
|
}
|
|
|
Map<String, String> payResult = iWxPayService.refund(out_trade_no,order.getTransid(),add.getRefundFee(),order.getPayPrice());
|
|
@@ -186,6 +189,71 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean placeRefundInputOrder(List<OrderGoodsRefundAddBo> bos) {
|
|
|
+ for(OrderGoodsRefundAddBo bo : bos){
|
|
|
+ OrderGoods orderGoods = iOrderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>().eq(OrderGoods::getOrderSn,bo.getOrderSn())
|
|
|
+ .eq(OrderGoods::getGoodsId, bo.getGoodsId()));
|
|
|
+ if(Validator.isEmpty(orderGoods)){
|
|
|
+ throw new CustomException("订单商品数据错误");
|
|
|
+ }
|
|
|
+ if(orderGoods.getPayStatus()!=3||orderGoods.getPayStatus()!=2){
|
|
|
+ throw new CustomException("订单商品尚未收费");
|
|
|
+ }
|
|
|
+ if(orderGoods.getRefundStatus()==2){
|
|
|
+ throw new CustomException("订单商品已退款");
|
|
|
+ }
|
|
|
+ if(orderGoods.getRefundStatus()!=0){
|
|
|
+ throw new CustomException("订单商品目前正在退款中");
|
|
|
+ }
|
|
|
+ //订单商品
|
|
|
+ Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn,bo.getOrderSn()));
|
|
|
+ if(order.getStatus()==0){
|
|
|
+ throw new CustomException("订单无效");
|
|
|
+ }
|
|
|
+ if(order.getOrderFrom()!=2){
|
|
|
+ throw new CustomException("不支持非小程序订单退款");
|
|
|
+ }
|
|
|
+ //订单商品
|
|
|
+ Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId,bo.getGoodsId()));
|
|
|
+ if(goods.getGoodsType()==1){
|
|
|
+ //视频商品
|
|
|
+ UserStudyRecordQueryBo userStudyRecordQueryBo = new UserStudyRecordQueryBo();
|
|
|
+ userStudyRecordQueryBo.setGoodsId(goods.getGoodsId());
|
|
|
+ userStudyRecordQueryBo.setUserId(order.getUserId());
|
|
|
+ userStudyRecordQueryBo.setGradeId(orderGoods.getGradeId());
|
|
|
+ Long userSeeTime = iUserStudyRecordService.getUserSeeTime(userStudyRecordQueryBo);
|
|
|
+ if(userSeeTime.longValue()>=(30*60)){ //超30分钟不满足退款
|
|
|
+ throw new CustomException("不满足退款");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(goods.getGoodsType()==2){
|
|
|
+ //题库商品
|
|
|
+ UserExamRecordQueryBo userExamRecordQueryBo = new UserExamRecordQueryBo();
|
|
|
+ userExamRecordQueryBo.setGoodsId(goods.getGoodsId());
|
|
|
+ userExamRecordQueryBo.setUserId(order.getUserId());
|
|
|
+ Long doQuestionNum = iUserExamRecordService.getUserDoQuestionNum(userExamRecordQueryBo);
|
|
|
+ if(doQuestionNum.longValue()>=30){ //超30道题不满足退款
|
|
|
+ throw new CustomException("不满足退款");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ OrderGoodsRefund add = BeanUtil.toBean(bo, OrderGoodsRefund.class);
|
|
|
+ validEntityBeforeSave(add);
|
|
|
+ add.setCreateTime(DateUtils.getNowTime());
|
|
|
+ add.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ //退款单号
|
|
|
+ String out_trade_no = DateUtils.getDateOrderSn();
|
|
|
+ add.setRefundSn(out_trade_no);
|
|
|
+ add.setRefundFee(orderGoods.getGoodsReceived());
|
|
|
+ add.setUserId(order.getUserId());
|
|
|
+ add.setType(OrderGoodsRefund.TYPE_INPUT);
|
|
|
+ add.setOrderGoodsId(orderGoods.getOrderGoodsId());
|
|
|
+ this.save(add);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
public Boolean refundCall(String WxpayRefundId,Long refundId,Long orderGoodsId,Order order,Long goodsType,Long gradeId,Long userId,Long goodsId){
|
|
|
OrderGoodsRefund update = new OrderGoodsRefund();
|
|
|
update.setRefundId(refundId);
|