|
@@ -10,7 +10,6 @@ import com.caimei365.order.model.ResponseJson;
|
|
|
import com.caimei365.order.model.po.*;
|
|
|
import com.caimei365.order.model.vo.*;
|
|
|
import com.caimei365.order.service.OrderRefundService;
|
|
|
-import com.caimei365.order.utils.MathUtil;
|
|
|
import com.caimei365.order.utils.helipay.Disguiser;
|
|
|
import com.caimei365.order.utils.helipay.HttpClientService;
|
|
|
import com.caimei365.order.utils.helipay.MessageHandle;
|
|
@@ -18,10 +17,10 @@ import com.caimei365.order.utils.helipay.MyBeanUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.httpclient.HttpStatus;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Propagation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.math.BigDecimal;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
@@ -57,7 +56,18 @@ public class OrderRefundServiceImpl implements OrderRefundService {
|
|
|
List<OrderReceiptRelationPo> relationPos = refundMapper.findPayWays(shopOrderId);
|
|
|
CmReturnedPurchase cmReturnedPurchase = new CmReturnedPurchase();
|
|
|
String returnNo = "T" + System.currentTimeMillis() + new Random().nextInt(1000);
|
|
|
+ String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
|
|
cmReturnedPurchase.setReturnedNo(returnNo);
|
|
|
+ cmReturnedPurchase.setShopOrderId(shopOrderId);
|
|
|
+ cmReturnedPurchase.setUserId(order.getUserId());
|
|
|
+ cmReturnedPurchase.setOrderId(order.getOrderId());
|
|
|
+ cmReturnedPurchase.setStatus("2");
|
|
|
+ cmReturnedPurchase.setOperatingOrderStatus(order.getStatus().toString());
|
|
|
+ cmReturnedPurchase.setReturnTime(format);
|
|
|
+ cmReturnedPurchase.setConfirmReturnTime(format);
|
|
|
+ cmReturnedPurchase.setDelFlag(1);
|
|
|
+ refundMapper.insertReturns(cmReturnedPurchase);
|
|
|
+
|
|
|
|
|
|
AtomicReference<Double> refundBalanceFee = new AtomicReference<>(0d);
|
|
|
AtomicReference<Double> refundOnlineFee = new AtomicReference<>(0d);
|
|
@@ -70,7 +80,7 @@ public class OrderRefundServiceImpl implements OrderRefundService {
|
|
|
refundOnlineFee.updateAndGet(v -> v + relationPo.getAssociateAmount());
|
|
|
break;
|
|
|
case 2:
|
|
|
- returnOffline(relationPo, cmReturnedPurchase);
|
|
|
+ returnOffline(relationPo);
|
|
|
refundOfflineFee.updateAndGet(v -> v + relationPo.getAssociateAmount());
|
|
|
break;
|
|
|
case 3:
|
|
@@ -81,11 +91,27 @@ public class OrderRefundServiceImpl implements OrderRefundService {
|
|
|
throw new IllegalStateException("payWay Unexpected ------>" + relationPo.getPayWay());
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ user.setUserMoney(user.getUserMoney() + refundBalanceFee.get());
|
|
|
+ user.setAbleUserMoney(user.getAbleUserMoney() + refundBalanceFee.get());
|
|
|
+ cmReturnedPurchase.setRefundBalanceFee(refundBalanceFee.get());
|
|
|
+ cmReturnedPurchase.setRefundOnlineFee(refundOnlineFee.get());
|
|
|
+ cmReturnedPurchase.setRefundOfflineFee(refundOfflineFee.get());
|
|
|
+ cmReturnedPurchase.setRefundFee(refundBalanceFee.get() + refundOnlineFee.get() + refundOfflineFee.get());
|
|
|
+ cmReturnedPurchase.setReturnedPurchaseFee(refundBalanceFee.get() + refundOnlineFee.get() + refundOfflineFee.get());
|
|
|
+ cmReturnedPurchase.setDelFlag(0);
|
|
|
+ refundMapper.updateReturnMoney(cmReturnedPurchase);
|
|
|
+ /**
|
|
|
+ * 为与旧数据兼容,保持cm_returned_purchase_product数据,当前版本退款为原路退回且只能全退,
|
|
|
+ * cm_returned_purchase_product表数据无实际意义,可直接取cm_order_product,
|
|
|
+ * cm_returned_purchase_product后续版本可删除
|
|
|
+ */
|
|
|
+ refundMapper.insertReturnProduct(cmReturnedPurchase.getId(), shopOrderId);
|
|
|
// 修改子订单信息
|
|
|
+ refundMapper.updateShopOrder(shopOrderId);
|
|
|
// 修改订单信息 refundType
|
|
|
-
|
|
|
-
|
|
|
+ Integer count = refundMapper.findShopOrderRefundCount(order.getOrderId());
|
|
|
+ Integer refundType = count > 0 ? 1 : 2;
|
|
|
+ refundMapper.updateOrderRefund(order.getOrderId(), refundType);
|
|
|
// 二手订单交易全退,标记未售
|
|
|
if (1 == order.getSecondHandOrderFlag() && 7 == order.getStatus()) {
|
|
|
refundMapper.updateSecondProduct(shopOrderId);
|
|
@@ -93,7 +119,6 @@ public class OrderRefundServiceImpl implements OrderRefundService {
|
|
|
|
|
|
//采美豆退款相关
|
|
|
if (7 == order.getStatus()) {
|
|
|
- int userBeans = null == user.getUserBeans() ? 0 : user.getUserBeans();
|
|
|
/** todo
|
|
|
* 抵扣运费需退回,当前版本暂取消抵扣运费
|
|
|
*/
|
|
@@ -105,6 +130,7 @@ public class OrderRefundServiceImpl implements OrderRefundService {
|
|
|
*/
|
|
|
Integer num = refundMapper.findByBeansType(order.getOrderId());
|
|
|
if (num != null && num > 0) {
|
|
|
+ int userBeans = null == user.getUserBeans() ? 0 : user.getUserBeans();
|
|
|
UserBeansHistoryPo beansHistory = new UserBeansHistoryPo();
|
|
|
beansHistory.setBeansType(11);
|
|
|
beansHistory.setType(2);
|
|
@@ -116,9 +142,9 @@ public class OrderRefundServiceImpl implements OrderRefundService {
|
|
|
}
|
|
|
//订单低于1000扣500豆子退回
|
|
|
if (order.getPayTotalFee() != null && order.getPayTotalFee() < 1000) {
|
|
|
- // 查本单是否扣豆子,所有子订单全退的情况下,有就返回
|
|
|
+ // 查本单是否扣豆子,有且订单交易全退就返回
|
|
|
UserBeansHistoryPo bean = refundMapper.findLowOrder(order.getOrderId());
|
|
|
- if (bean != null) {
|
|
|
+ if (bean != null && 0 == count) {
|
|
|
//有扣豆子记录
|
|
|
UserBeansHistoryPo beanHistory = new UserBeansHistoryPo();
|
|
|
beanHistory.setUserId(order.getUserId());
|
|
@@ -134,27 +160,41 @@ public class OrderRefundServiceImpl implements OrderRefundService {
|
|
|
}
|
|
|
}
|
|
|
// 修改user信息
|
|
|
-
|
|
|
+ refundMapper.updateUser(user);
|
|
|
return ResponseJson.success();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public ResponseJson initShopOrder() {
|
|
|
+ /**
|
|
|
+ * 退款单数据拆分
|
|
|
+ * 查询有多个子订单退款的主订单,把有多个子订单的退款单拆分成以子订单为退款单
|
|
|
+ */
|
|
|
+ List<CmReturnedPurchase> shopOrders = refundMapper.findRefundShopOrder();
|
|
|
+ shopOrders.forEach(s -> {
|
|
|
+ // 有几个子订单,复制count-1数量的退款单
|
|
|
+ CmReturnedPurchase returns = refundMapper.findReturnd(s.getId());
|
|
|
+ // 拿到当前退款单的绑定子订单,循环次数=子订单数量-1,最后一个子订单不动,前置子订单退款单id变更为复制品
|
|
|
+ List<Integer> shopOrderIds = refundMapper.findReturnShops(returns.getId());
|
|
|
+ int count = shopOrderIds.size() - 1;
|
|
|
+ log.info("-------原退款单id--------" + returns.getId() + "------去重的子订单--------------" + shopOrderIds);
|
|
|
+ if (null != shopOrderIds && shopOrderIds.size() > 1) {
|
|
|
+ for (int i = 0; i < count; i++) {
|
|
|
+ log.info("-------退款单" + returns.getId() + "第" + (i + 1) + "次复制------");
|
|
|
+ // 拿到复制退款单,把cm_returned_purchase_product表中子订单换绑returnedID到新单
|
|
|
+ returns.setId(null);
|
|
|
+ refundMapper.insertReturns(returns);
|
|
|
+ log.info("--------复制品Id--------- " + returns.getId() + "修改子订单Id-------------------- " + shopOrderIds.get(i));
|
|
|
+ refundMapper.updateReturn(shopOrderIds.get(i), returns.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("====================退款单复制结束===========================");
|
|
|
+ });
|
|
|
+ return ResponseJson.success();
|
|
|
+ }
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
|
|
|
public void returnOnline(OrderReceiptRelationPo relationPo) throws Exception {
|
|
|
String splitCode = payOrderMapper.getSplitCodeByShopOrderId(relationPo.getShopOrderId());
|
|
|
/** 网银
|
|
@@ -170,10 +210,14 @@ public class OrderRefundServiceImpl implements OrderRefundService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void returnOffline(OrderReceiptRelationPo relationPo, CmReturnedPurchase cmReturnedPurchase) {
|
|
|
-
|
|
|
+ @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
|
|
|
+ public void returnOffline(OrderReceiptRelationPo relationPo) {
|
|
|
+ /**
|
|
|
+ * todo 线下转账当前版本无操作
|
|
|
+ */
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
|
|
|
public void returnBalance(OrderReceiptRelationPo relationPo, CmReturnedPurchase cmReturnedPurchase, OrderVo order) {
|
|
|
//添加余额收支记录
|
|
|
BalanceRecordPo cmUserBalanceRecord = new BalanceRecordPo();
|
|
@@ -190,13 +234,13 @@ public class OrderRefundServiceImpl implements OrderRefundService {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* attention:网银退款不退手续费!
|
|
|
* 1.本方法内转账手续费等待到账再发起退款请求 todo 暂未转
|
|
|
* 2.异步
|
|
|
* 3.回调
|
|
|
*/
|
|
|
+ @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
|
|
|
public void unionRefund(String orderRequestNo, String money, Integer shopOrderId, String splitCode) throws Exception {
|
|
|
Map<String, String> sPara = new HashMap<String, String>();
|
|
|
sPara.put("P1_bizType", "OnlineRefund");
|
|
@@ -234,6 +278,7 @@ public class OrderRefundServiceImpl implements OrderRefundService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
|
|
|
public void onlinePay(OrderReceiptRelationPo relationPo, String splitCode) throws Exception {
|
|
|
AppPayRefundOrderVo orderVo = new AppPayRefundOrderVo();
|
|
|
orderVo.setP1_bizType("AppPayRefund");
|
|
@@ -285,6 +330,8 @@ public class OrderRefundServiceImpl implements OrderRefundService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
|
|
|
public void quickRefund(OrderReceiptRelationPo relationPo, String splitCode) throws Exception {
|
|
|
//快捷支付
|
|
|
QuickPaySpRefundVo quickPaySpRefundVo = new QuickPaySpRefundVo();
|