doum
9 小时以前 0982a97b0c65e11034b9d6b00cc0e4aba39254be
server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java
@@ -12,13 +12,11 @@
import com.doumee.core.utils.Utils;
import com.doumee.core.wx.WxMiniUtilService;
import com.doumee.dao.admin.response.AftersaleListResponse;
import com.doumee.dao.business.AftersaleMapper;
import com.doumee.dao.business.FundMapper;
import com.doumee.dao.business.GoodsorderDetailMapper;
import com.doumee.dao.business.GoodsorderMapper;
import com.doumee.dao.business.*;
import com.doumee.dao.business.join.AftersaleJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.web.dto.MultiFileDTO;
import com.doumee.dao.web.request.AfterSaleApplyRequest;
import com.doumee.dao.web.request.DealIntegralRequest;
import com.doumee.dao.web.request.goods.AftersaleCancelRequest;
import com.doumee.dao.web.request.goods.AftersaleCreateRequest;
@@ -43,10 +41,7 @@
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * 商品售后信息表Service实现
@@ -64,6 +59,10 @@
    @Autowired
    private GoodsorderMapper goodsorderMapper;
    @Autowired
    private ShopMapper shopMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private GoodsorderDetailMapper goodsorderDetailMapper;
    @Autowired
    private AftersaleJoinMapper aftersaleJoinMapper;
@@ -73,6 +72,9 @@
    @Autowired
    @Lazy
    private IntegralService integralService;
    @Autowired
    private MemberCouponJoinMapper memberCouponJoinMapper;
    @Autowired
    private FundMapper fundMapper;
@@ -223,6 +225,7 @@
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Aftersale model = findJoinById(aftersale.getId(),false);
        aftersale.setMemberId(model.getMemberId());
        aftersale.setMemberId(model.getMemberId());
        if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该售后记录不存在,请返回刷新重试!");
@@ -1003,4 +1006,170 @@
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void afterSaleApply(AfterSaleApplyRequest afterSaleApplyRequest, Integer userId){
        if(Objects.isNull(afterSaleApplyRequest)
            || Objects.isNull(afterSaleApplyRequest.getOrderId())
                || Objects.isNull(afterSaleApplyRequest.getReturnUseIntegralStatus())
                || Objects.isNull(afterSaleApplyRequest.getReturnUseCouponStatus())
                || Objects.isNull(afterSaleApplyRequest.getReturnShopSettlementStatus())
                || Objects.isNull(afterSaleApplyRequest.getReturnShopIntegralStatus())
                || Objects.isNull(afterSaleApplyRequest.getReturnIntegralStatus())
                || Objects.isNull(afterSaleApplyRequest.getMoney())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Goodsorder goodsorder = goodsorderMapper.selectById(afterSaleApplyRequest.getOrderId());
        if(Objects.isNull(goodsorder)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!(Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_RECEIVE.getKey())
            || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.DONE.getKey()))){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"订单状态已流转,无法进行该操作!");
        }
        Aftersale aftersale = new Aftersale();
        aftersale.setCreateDate(new Date());
        aftersale.setIsdeleted(Constants.ZERO);
        aftersale.setOrderId(goodsorder.getId());
        aftersale.setType(Constants.ZERO);
        aftersale.setContent(afterSaleApplyRequest.getRemark());
        aftersale.setStatus(Constants.AftersaleStatus.DONE.getKey());
        aftersale.setInfo(afterSaleApplyRequest.getRemark());
        aftersale.setMoney(afterSaleApplyRequest.getMoney());
        aftersale.setCoupon(goodsorder.getCouponPrice());
        aftersale.setReturnShopIntegral(BigDecimal.ZERO);
        aftersale.setReturnIntegral(BigDecimal.ZERO);
        aftersale.setReturnShopSettlement(BigDecimal.ZERO);
        aftersale.setCode(getNextInCode());
        //订单退回 返回给经销商的积分
        if(Objects.nonNull(goodsorder.getDistributionShopId())&&goodsorder.getReturnCustomerIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            Shop shop = shopMapper.selectById(goodsorder.getDistributionShopId());
            //经销商存在剩余积分
            if(Objects.nonNull(shop)&&shop.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
                //开启了扣除返还经销商积分
                if(Constants.equalsInteger(afterSaleApplyRequest.getReturnShopIntegralStatus(),Constants.ONE)){
                    //记录扣除经销商积分值
                    aftersale.setReturnShopIntegral(shop.getIntegral().compareTo(goodsorder.getReturnCustomerIntegral())>Constants.ZERO
                            ?goodsorder.getReturnCustomerIntegral():shop.getIntegral());
                    DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
                    dealIntegralRequest.setIntegralNum(aftersale.getReturnShopIntegral());
                    dealIntegralRequest.setDealType(Constants.ONE);
                    dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
                    dealIntegralRequest.setObjId(goodsorder.getId());
                    dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
                    dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_REFUND_INTEGRAL);
                    integralService.dealShopIntegral(dealIntegralRequest);
                }
            }
        }
        //订单退回 经销商结算余额
        if(Objects.nonNull(goodsorder.getDistributionShopId())&&goodsorder.getShopSettlement().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            Shop shop = shopMapper.selectById(goodsorder.getDistributionShopId());
            //经销商存在剩余积分
            if(Objects.nonNull(shop)&&shop.getAmount().compareTo(BigDecimal.ZERO)>Constants.ZERO){
                //开启了扣除返还经销商积分
                if(Constants.equalsInteger(afterSaleApplyRequest.getReturnShopSettlementStatus(),Constants.ONE)){
                    //记录扣除经销商积分值
                    aftersale.setReturnShopSettlement(shop.getAmount().compareTo(goodsorder.getShopSettlement())>Constants.ZERO
                            ?goodsorder.getShopSettlement():shop.getAmount());
                    DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
                    dealIntegralRequest.setIntegralNum(aftersale.getReturnShopIntegral());
                    dealIntegralRequest.setDealType(Constants.ONE);
                    dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
                    dealIntegralRequest.setObjId(goodsorder.getId());
                    dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
                    dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_REFUND_CASH);
                    integralService.dealShopAmount(dealIntegralRequest);
                }
            }
        }
        //订单退回 返还给客户的积分
        if(Objects.nonNull(goodsorder.getDistributionShopId())&&goodsorder.getReturnMemberIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            Member member = memberMapper.selectById(goodsorder.getMemberId());
            //客户存在剩余积分
            if(Objects.nonNull(member)&&member.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
                //开启了扣除返还客户积分
                if(Constants.equalsInteger(afterSaleApplyRequest.getReturnIntegralStatus(),Constants.ONE)){
                    //记录扣除经销商积分值
                    aftersale.setReturnIntegral(member.getIntegral().compareTo(goodsorder.getReturnCustomerIntegral())>Constants.ZERO
                            ?goodsorder.getReturnCustomerIntegral():member.getIntegral());
                    DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
                    dealIntegralRequest.setIntegralNum(aftersale.getReturnShopIntegral());
                    dealIntegralRequest.setDealType(Constants.ONE);
                    dealIntegralRequest.setMemberId(member.getId());
                    dealIntegralRequest.setObjId(goodsorder.getId());
                    dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
                    dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER_REFUND_RETURN);
                    integralService.dealIntegral(dealIntegralRequest);
                }
            }
        }
        //订单退款 返还客户使用的积分
        if(Constants.equalsInteger(afterSaleApplyRequest.getReturnIntegralStatus(),Constants.ONE)
            && goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(aftersale.getReturnShopIntegral());
            dealIntegralRequest.setDealType(Constants.ZERO);
            dealIntegralRequest.setMemberId(goodsorder.getMemberId());
            dealIntegralRequest.setObjId(goodsorder.getId());
            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER_REFUND);
            integralService.dealIntegral(dealIntegralRequest);
        }
        //订单退款 退回客户使用的优惠券
        if(Constants.equalsInteger(afterSaleApplyRequest.getReturnUseCouponStatus(),Constants.ONE)
            && Objects.nonNull(goodsorder.getCouponId())){
            memberCouponJoinMapper.update(new UpdateWrapper<MemberCoupon>().lambda()
                    .set(MemberCoupon::getStatus, Constants.ZERO)
                    .eq(MemberCoupon::getId, goodsorder.getCouponId())
            );
        }
        if(afterSaleApplyRequest.getMoney().compareTo(BigDecimal.ZERO)>Constants.ZERO
             && afterSaleApplyRequest.getMoney().compareTo(goodsorder.getPrice())<=Constants.ZERO){
            //订单退款
            String refundCode = WxMiniUtilService.wxRefund(goodsorder.getCode().toString(), goodsorder.getPrice(), afterSaleApplyRequest.getMoney());
            Fund fund = new Fund();
            fund.setOrderCode(refundCode);
            fund.setCreator(userId);
            fund.setCreateDate(new Date());
            fund.setIsdeleted(Constants.ZERO);
            fund.setRemark(userId.toString());
            fund.setMemberId(goodsorder.getCreator());
            fund.setTitle("订单退款");
            fund.setContent(afterSaleApplyRequest.getRemark());
            fund.setObjId(goodsorder.getId());
            fund.setObjType(Constants.ONE);
            fund.setType(Constants.ZERO);
            fund.setNum(goodsorder.getPrice());
            fundMapper.insert(fund);
            aftersale.setDrawbackNo(refundCode);
            aftersale.setDrawbackDate(new Date());
            aftersale.setDrawbackInfo(afterSaleApplyRequest.getRemark());
            aftersale.setDrawbackNo(refundCode);
        }
        aftersaleMapper.insert(aftersale);
        goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda()
                .set(Goodsorder::getStatus, Constants.OrderStatus.REFUND.getKey())
                .eq(Goodsorder::getId, goodsorder.getId())
        );
    }
}