|
@@ -1,17 +1,27 @@
|
|
|
package com.caimei.modules.order.service.impl;
|
|
|
|
|
|
+import com.caimei.modules.club.dao.CmUserDao;
|
|
|
+import com.caimei.modules.club.entity.CmUser;
|
|
|
import com.caimei.modules.order.dao.*;
|
|
|
import com.caimei.modules.order.entity.*;
|
|
|
import com.caimei.modules.order.service.CmReturnedPurchaseService;
|
|
|
+import com.caimei.modules.order.service.CmUserBalanceRecordService;
|
|
|
import com.caimei.modules.order.service.NewOrderService;
|
|
|
import com.caimei.modules.order.service.NewShopOrderService;
|
|
|
import com.caimei.modules.order.util.OrderUtils;
|
|
|
import com.caimei.utils.AppUtils;
|
|
|
+import com.caimei.utils.MathUtil;
|
|
|
+import com.caimei.utils.NewOrderStatus;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
|
|
|
@Slf4j
|
|
@@ -30,11 +40,19 @@ public class CmReturnedPurchaseServiceImpl implements CmReturnedPurchaseService
|
|
|
@Resource
|
|
|
private NewOrderService orderService;
|
|
|
@Resource
|
|
|
+ private NewOrderDao orderDao;
|
|
|
+ @Resource
|
|
|
+ private CmUserBalanceRecordService cmUserBalanceRecordService;
|
|
|
+ @Resource
|
|
|
private OrderUtils orderUtil;
|
|
|
@Resource
|
|
|
private PayShopDao payShopDao;
|
|
|
@Resource
|
|
|
private NewShopOrderDao shopOrderDao;
|
|
|
+ @Resource
|
|
|
+ private CmUserDao cmUserDao;
|
|
|
+ @Resource
|
|
|
+ private NewOrderProductDao newOrderProductDao;
|
|
|
|
|
|
|
|
|
@Override
|
|
@@ -130,12 +148,12 @@ public class CmReturnedPurchaseServiceImpl implements CmReturnedPurchaseService
|
|
|
@Override
|
|
|
public void toReturnRecord(NewOrder newOrder, CmReturnedPurchase cmReturnedPurchase) {
|
|
|
orderUtil.setReceiverVal(newOrder);
|
|
|
- List<NewShopOrder> shopOrders = cmReturnedPurchaseDao.findReturnShopOrder(cmReturnedPurchase.getId());
|
|
|
- shopOrders.forEach(s -> {
|
|
|
+// List<NewShopOrder> shopOrders = cmReturnedPurchaseDao.findReturnShopOrder(cmReturnedPurchase.getId());
|
|
|
+ newOrder.getNewShopOrders().forEach(s -> {
|
|
|
List<NewOrderProduct> orderProducts = cmReturnedPurchaseProductDao.findProductByShopOrder(s.getShopOrderId(), cmReturnedPurchase.getId());
|
|
|
s.setNewOrderProducts(orderProducts);
|
|
|
});
|
|
|
- newOrder.setNewShopOrders(shopOrders);
|
|
|
+// newOrder.setNewShopOrders(shopOrders);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -165,4 +183,180 @@ public class CmReturnedPurchaseServiceImpl implements CmReturnedPurchaseService
|
|
|
map.put("returns", returns);
|
|
|
return map;
|
|
|
}
|
|
|
+
|
|
|
+ @Transactional(readOnly = false)
|
|
|
+ @Override
|
|
|
+ public void revokeApply(CmReturnedPurchase cmReturnedPurchase) {
|
|
|
+ try {
|
|
|
+ //1.撤销退款退货表审核通过信息
|
|
|
+ cmReturnedPurchase.setConfirmReturnTime(null);
|
|
|
+ cmReturnedPurchase.setReviewImage1(null);
|
|
|
+ cmReturnedPurchase.setReviewImage2(null);
|
|
|
+ cmReturnedPurchase.setReviewImage3(null);
|
|
|
+ cmReturnedPurchase.setReviewImage4(null);
|
|
|
+ cmReturnedPurchase.setReviewImage5(null);
|
|
|
+ cmReturnedPurchase.setStatus("1");
|
|
|
+ cmReturnedPurchase.setReviewUserId(null);
|
|
|
+ cmReturnedPurchase.setReviewRemarks(null);
|
|
|
+ cmReturnedPurchaseDao.updateRevokeApply(cmReturnedPurchase);
|
|
|
+ NewOrder newOrder = orderService.get(cmReturnedPurchase.getOrderId().toString());
|
|
|
+ NewShopOrder newShopOrder = shopOrderDao.get(cmReturnedPurchase.getShopOrderId());
|
|
|
+ //2.查询除本次撤销记录外存在的其他的有效记录
|
|
|
+ CmReturnedPurchase item = new CmReturnedPurchase();
|
|
|
+ item.setStatus("2");
|
|
|
+// item.setOrderId(cmReturnedPurchase.getOrderId());
|
|
|
+ item.setShopOrderId(cmReturnedPurchase.getShopOrderId());
|
|
|
+ List<CmReturnedPurchase> returnedPurchaseRecord = cmReturnedPurchaseDao.findReturnedPurchaseRecord(item);
|
|
|
+ if (CollectionUtils.isNotEmpty(returnedPurchaseRecord)) {
|
|
|
+ //存在退款记录则本次撤销后订单状态为部分退款
|
|
|
+ //部分退货
|
|
|
+ newOrder.setRefundType("1");
|
|
|
+ String status = newShopOrder.getShopStatus();
|
|
|
+ if (StringUtils.equals("5", status)) {//如果之前为交易全退,撤销后则变为
|
|
|
+ if (StringUtils.equals("1", newShopOrder.getReceiptStatus())) {//(收款买家)收款状态:1待收款、2部分收款、3已收款
|
|
|
+ newShopOrder.setShopStatus(NewOrderStatus.DAISHOU_BUFA.getCode());//待收部发
|
|
|
+ }
|
|
|
+ if (StringUtils.equals("2", newShopOrder.getReceiptStatus())) {
|
|
|
+ newShopOrder.setShopStatus(NewOrderStatus.BUSHOU_BUFA.getCode());//部收部发
|
|
|
+ }
|
|
|
+ if (StringUtils.equals("3", newShopOrder.getReceiptStatus())) {
|
|
|
+ newShopOrder.setShopStatus(NewOrderStatus.YISHOU_BUFA.getCode());//已收部发
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //不存在退款记录则本次退款为未退款
|
|
|
+ String status = newShopOrder.getShopStatus();
|
|
|
+ newOrder.setRefundType("");
|
|
|
+ if (StringUtils.equals("5", status)) {//如果之前为交易全退,撤销后则变为
|
|
|
+ if (StringUtils.equals("1", newShopOrder.getReceiptStatus())) {//(收款买家)收款状态:1待收款、2部分收款、3已收款
|
|
|
+ newShopOrder.setShopStatus(NewOrderStatus.DAISHOU_DAIFA.getCode());//待收待发
|
|
|
+ }
|
|
|
+ if (StringUtils.equals("2", newShopOrder.getReceiptStatus())) {
|
|
|
+ newShopOrder.setShopStatus(NewOrderStatus.BUSHOU_DAIFA.getCode());//部收待发
|
|
|
+ }
|
|
|
+ if (StringUtils.equals("3", newShopOrder.getReceiptStatus())) {
|
|
|
+ newShopOrder.setShopStatus(NewOrderStatus.YISHOU_DAIFA.getCode());//已收待发
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ newShopOrder.setRefundStatus("1");//无退款
|
|
|
+ //更新订单信息
|
|
|
+ orderDao.update(newOrder);
|
|
|
+ shopOrderDao.update(newShopOrder);
|
|
|
+
|
|
|
+ //更新用户余额总金额
|
|
|
+ Integer userID = newOrder.getUserId();
|
|
|
+ CmUser cmUser = cmUserDao.get(userID);
|
|
|
+ Double refundBalanceFee = cmReturnedPurchase.getRefundBalanceFee();
|
|
|
+ cmUser.setUserId(userID);
|
|
|
+
|
|
|
+ CmUserBalanceRecord balanceRecord = cmUserBalanceRecordService.getByCmUserBalanceRecord(new CmUserBalanceRecord().setReturnedId(cmReturnedPurchase.getId()));
|
|
|
+ //充值或缴纳订金订单
|
|
|
+ if (balanceRecord != null) {
|
|
|
+ balanceRecord.setRemark("已撤销退款");
|
|
|
+ cmUser.setUserMoney(cmUser.getUserMoney() + cmReturnedPurchase.getRefundFee());
|
|
|
+ } else {
|
|
|
+ cmUser.setAbleUserMoney(cmUser.getAbleUserMoney() - refundBalanceFee);
|
|
|
+ cmUser.setUserMoney(cmUser.getUserMoney() - refundBalanceFee);
|
|
|
+ }
|
|
|
+
|
|
|
+ //撤销审核通过的余额记录
|
|
|
+ if (refundBalanceFee > 0) {//存在余额退款
|
|
|
+ //撤销余额收支记录
|
|
|
+ balanceRecord.setUserId(newOrder.getUserId());
|
|
|
+// balanceRecord.setOrderId(newOrder.getOrderId());
|
|
|
+ balanceRecord.setShopOrderId(cmReturnedPurchase.getShopOrderId());
|
|
|
+ balanceRecord.setReturnedId(cmReturnedPurchase.getId());
|
|
|
+ balanceRecord.setRemark("撤销退款,余额记录无效-后台");
|
|
|
+ balanceRecord.setDelFlag("1");
|
|
|
+ }
|
|
|
+ cmUserDao.update(cmUser);
|
|
|
+ if(balanceRecord!=null){
|
|
|
+ cmUserBalanceRecordService.updateCmUserBalanceRecord(balanceRecord);
|
|
|
+ }
|
|
|
+// //撤销退款采美豆
|
|
|
+// Integer userBeans = Integer.valueOf(cmUser.getUserBeans());
|
|
|
+// Integer num = cmUserbeanshistoryDao.findByBeansType(newOrder.getOrderID());
|
|
|
+// if (num != null && num > 0) {
|
|
|
+// userBeans = userBeans + num;
|
|
|
+// }
|
|
|
+// if (newOrder.getUserBeans() != null && newOrder.getUserBeans() > 0) {
|
|
|
+// userBeans = userBeans - newOrder.getUserBeans();
|
|
|
+// }
|
|
|
+// cmUserbeanshistoryDao.updateBeansHistoryByReturned(newOrder.getOrderID());
|
|
|
+// cmUserDao.updateUserBeans(newOrder.getUserID(), userBeans);
|
|
|
+// //撤销优惠券退款
|
|
|
+// if (newOrder.getCouponAmount() > 0) {
|
|
|
+// cmCouponClubDao.deleteByReturnedId(cmReturnedPurchase.getId());
|
|
|
+// }
|
|
|
+ //修改子订单信息
|
|
|
+ updateShopOrderAmount(newOrder.getOrderId(),cmReturnedPurchase.getShopOrderId(),returnedPurchaseRecord);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public void updateShopOrderAmount(Integer orderId,Integer shopOrderId,List<CmReturnedPurchase> returnedPurchaseRecord) {
|
|
|
+ //修改子订单付供应商金额
|
|
|
+ List<NewShopOrder> shopOrders = shopOrderDao.findListByOrderId(orderId);
|
|
|
+ shopOrders.removeIf(s -> 998 == s.getShopId());
|
|
|
+ for (NewShopOrder shopOrder : shopOrders) {
|
|
|
+ if(shopOrderId!=null&&shopOrderId!=shopOrder.getShopOrderId()){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<NewOrderProduct> orderProducts = newOrderProductDao.findListByShopOrderId(shopOrder.getShopOrderId());
|
|
|
+ BigDecimal totalCostFee = BigDecimal.ZERO;
|
|
|
+ BigDecimal shopTaxFee = BigDecimal.ZERO;
|
|
|
+ for (NewOrderProduct orderProduct : orderProducts) {
|
|
|
+ Integer count = newOrderProductDao.CountReturnedPurchaseProduct(shopOrder.getShopOrderId(), orderProduct.getOrderProductId());
|
|
|
+ count = count == null ? 0 : count;
|
|
|
+ Integer number = orderProduct.getNum() + orderProduct.getPresentNum() - count;
|
|
|
+ totalCostFee = totalCostFee.add(MathUtil.mul(number, orderProduct.getCostPrice()));
|
|
|
+ shopTaxFee = shopTaxFee.add(MathUtil.mul(number, orderProduct.getSingleShouldPayTotalTax()));
|
|
|
+ }
|
|
|
+ // 商品费
|
|
|
+ shopOrder.setShopProductAmount(totalCostFee.doubleValue());
|
|
|
+ // 应付税费
|
|
|
+ shopOrder.setTotalAddedValueTax(shopTaxFee.doubleValue());
|
|
|
+ if (null == shopOrder.getShopPostFee()) {
|
|
|
+ shopOrder.setShopPostFee(0D);
|
|
|
+ }
|
|
|
+ // 付供应商
|
|
|
+ double shouldPayShopAmount = shopOrder.getShopProductAmount() + shopOrder.getShopPostFee() + shopOrder.getTotalAddedValueTax();
|
|
|
+ shopOrder.setShouldPayShopAmount(shouldPayShopAmount);
|
|
|
+ if (CollectionUtils.isNotEmpty(returnedPurchaseRecord)) {
|
|
|
+ //存在退款记录则本次撤销后订单状态为部分退款
|
|
|
+ //部分退货
|
|
|
+ shopOrder.setOrderStatusFlag("2");
|
|
|
+ String status = shopOrder.getShopStatus();
|
|
|
+ if (StringUtils.equals("7", status)) {//如果之前为交易全退,撤销后则变为
|
|
|
+ if (StringUtils.equals("1", shopOrder.getReceiptStatus())) {//(收款买家)收款状态:1待收款、2部分收款、3已收款
|
|
|
+ shopOrder.setShopStatus(NewOrderStatus.DAISHOU_BUFA.getCode());//待收部发
|
|
|
+ }
|
|
|
+ if (StringUtils.equals("2", shopOrder.getReceiptStatus())) {
|
|
|
+ shopOrder.setShopStatus(NewOrderStatus.BUSHOU_BUFA.getCode());//部收部发
|
|
|
+ }
|
|
|
+ if (StringUtils.equals("3", shopOrder.getReceiptStatus())) {
|
|
|
+ shopOrder.setShopStatus(NewOrderStatus.YISHOU_BUFA.getCode());//已收部发
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //不存在退款记录则本次退款为未退款
|
|
|
+ String status = shopOrder.getShopStatus();
|
|
|
+ shopOrder.setOrderStatusFlag("2");
|
|
|
+ if (StringUtils.equals("7", status)) {//如果之前为交易全退,撤销后则变为
|
|
|
+ if (StringUtils.equals("1", shopOrder.getReceiptStatus())) {//(收款买家)收款状态:1待收款、2部分收款、3已收款
|
|
|
+ shopOrder.setShopStatus(NewOrderStatus.DAISHOU_DAIFA.getCode());//待收待发
|
|
|
+ }
|
|
|
+ if (StringUtils.equals("2", shopOrder.getReceiptStatus())) {
|
|
|
+ shopOrder.setShopStatus(NewOrderStatus.BUSHOU_DAIFA.getCode());//部收待发
|
|
|
+ }
|
|
|
+ if (StringUtils.equals("3", shopOrder.getReceiptStatus())) {
|
|
|
+ shopOrder.setShopStatus(NewOrderStatus.YISHOU_DAIFA.getCode());//已收待发
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ shopOrderDao.update(shopOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|