| | |
| | | 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; |
| | |
| | | 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实现 |
| | |
| | | @Autowired |
| | | private GoodsorderMapper goodsorderMapper; |
| | | @Autowired |
| | | private ShopMapper shopMapper; |
| | | @Autowired |
| | | private MemberMapper memberMapper; |
| | | @Autowired |
| | | private GoodsorderDetailMapper goodsorderDetailMapper; |
| | | @Autowired |
| | | private AftersaleJoinMapper aftersaleJoinMapper; |
| | |
| | | @Autowired |
| | | @Lazy |
| | | private IntegralService integralService; |
| | | |
| | | @Autowired |
| | | private MemberCouponJoinMapper memberCouponJoinMapper; |
| | | |
| | | @Autowired |
| | | private FundMapper fundMapper; |
| | |
| | | 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(),"对不起,该售后记录不存在,请返回刷新重试!"); |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | @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()) |
| | | ); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |