package com.ruoyi.order.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.mapper.RefundPassMapper; import com.ruoyi.order.model.Order; import com.ruoyi.order.model.RefundPass; import com.ruoyi.order.service.OrderService; import com.ruoyi.order.service.RefundPassService; import com.ruoyi.order.vo.*; import com.ruoyi.other.api.domain.BaseSetting; import com.ruoyi.other.api.feignClient.BaseSettingClient; import com.ruoyi.other.api.feignClient.ShopClient; import com.ruoyi.other.api.feignClient.TechnicianClient; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author luodangjia * @since 2024-11-21 */ @Service public class RefundPassServiceImpl extends ServiceImpl implements RefundPassService { @Resource private OrderService orderService; @Resource private BaseSettingClient baseSettingClient; @Resource private AppUserClient appUserClient; @Resource private TokenService tokenService; @Resource private SysUserClient sysUserClient; /** * 申请售后 * @param applyRefundPass * @return */ @Override public R applyRefundPass(ApplyRefundPass applyRefundPass) { RefundPass one = this.getOne(new LambdaQueryWrapper().eq(RefundPass::getOrderId, applyRefundPass.getId()).eq(RefundPass::getDelFlag, 0) .ne(RefundPass::getStatus, 3)); if(null != one){ return R.fail("不能重复提交售后"); } Order order = orderService.getById(applyRefundPass.getId()); //判断是都已经超过售后时间 LocalDateTime afterSaleTime = order.getAfterSaleTime(); if(null != afterSaleTime && afterSaleTime.toEpochSecond(ZoneOffset.UTC) < LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)){ return R.fail("已超过售后期间"); } //构建售后申请数据 RefundPass refundPass = new RefundPass(); refundPass.setOrderId(applyRefundPass.getId()); refundPass.setStatus(1); refundPass.setRefundMethod(applyRefundPass.getRefundMethod()); refundPass.setRefundReason(applyRefundPass.getRefundReason()); refundPass.setUserRemark(applyRefundPass.getUserRemark()); refundPass.setPics(applyRefundPass.getPics()); refundPass.setPassStatus(1); refundPass.setDelFlag(0); refundPass.setCreateTime(LocalDateTime.now()); BaseSetting baseSetting = baseSettingClient.getBaseSetting(5).getData(); JSONObject jsonObject = JSON.parseObject(baseSetting.getContent()); refundPass.setName(jsonObject.getString("name")); refundPass.setPhone(jsonObject.getString("phone")); refundPass.setAddress(jsonObject.getString("address")); this.save(refundPass); order.setOrderStatus(7); orderService.updateById(order); return R.ok(); } /** * 管理后台获取售后管理列表数据 * @return */ @Override public PageInfo getOrderRefundPassList(OrderRefundPassListVo refundPassListVo) { Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserClient.getSysUser(userid).getData(); Integer shopId = null; if(2 == sysUser.getRoleType()){ shopId = sysUser.getObjectId(); } List appUserIds = new ArrayList<>(); //搜索条件,用户姓名 if(StringUtils.isNotEmpty(refundPassListVo.getName())){ List data = appUserClient.getAppUserByName(refundPassListVo.getName()).getData(); List collect = data.stream().map(AppUser::getId).collect(Collectors.toList()); appUserIds.addAll(collect); } //搜索条件,用户电话 if(StringUtils.isNotEmpty(refundPassListVo.getPhone())){ List data = appUserClient.getAppUserByPhone(refundPassListVo.getPhone()).getData(); List collect = data.stream().map(AppUser::getId).collect(Collectors.toList()); appUserIds.addAll(collect); } PageInfo pageInfo = new PageInfo(refundPassListVo.getPageCurr(), refundPassListVo.getPageSize()); List orderRefundPassList = this.baseMapper.getOrderRefundPassList(pageInfo, refundPassListVo.getCode(), appUserIds, shopId, refundPassListVo.getRefundMethod(), refundPassListVo.getStatus()); for (OrderRefundPassList refundPassList : orderRefundPassList) { AppUser appUser = appUserClient.getAppUserById(refundPassList.getAppUserId()); refundPassList.setUserName(appUser.getName()); refundPassList.setPhone(appUser.getPhone()); } return pageInfo.setRecords(orderRefundPassList); } /** * 售后订单审核操作 * @param id * @param status * @param passRemark * @return */ @Override public R authPassStatus(Long id, Integer status, String passRemark) { RefundPass refundPass = this.getById(id); if(refundPass.getPassStatus() != 1){ return R.fail("不能重复操作"); } refundPass.setPassStatus(status); //退货退款 if(refundPass.getRefundMethod() == 1 && 2 == status){ refundPass.setStatus(4); } if(refundPass.getRefundMethod() == 2 && 2 == status){ refundPass.setStatus(2); } refundPass.setPassRemark(passRemark); this.updateById(refundPass); //仅退款的售后需要将支付金额原路返回,然后再扣减支付获得的积分 if(refundPass.getRefundMethod() == 2 && 2 == status){ Order order = orderService.getById(refundPass.getOrderId()); order.setOrderStatus(6); orderService.updateById(order); //返回订单支付金额和回退积分和会员等级 orderService.refundPayMoney(order); } return R.ok(); } /** * 售后确认收货操作 * @param id * @return */ @Override public R refundPassReceive(Long id) { RefundPass refundPass = this.getById(id); if(refundPass.getPassStatus() != 2){ return R.fail("操作失败"); } if(refundPass.getStatus() != 5){ return R.fail("操作失败"); } refundPass.setStatus(2); this.updateById(refundPass); //仅退款的售后需要将支付金额原路返回,然后再扣减支付获得的积分 Order order = orderService.getById(refundPass.getOrderId()); order.setOrderStatus(6); orderService.updateById(order); //返回订单支付金额和回退积分和会员等级 orderService.refundPayMoney(order); return R.ok(); } /** * 获取售后详情 * @param id * @return */ @Override public RefundPassInfo getRefundPassInfo(Long id) { RefundPass refundPass = this.getById(id); OrderInfoVo orderInfo = orderService.getOrderInfo(refundPass.getOrderId()); RefundPassInfo refundPassInfo = new RefundPassInfo(); BeanUtils.copyBeanProp(refundPassInfo, orderInfo); refundPassInfo.setId(id.toString()); refundPassInfo.setPassStatus(refundPassInfo.getPassStatus()); refundPassInfo.setPassRemark(refundPassInfo.getPassRemark()); refundPassInfo.setPassCreateTime(refundPass.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); refundPassInfo.setRefundMethod(refundPass.getRefundMethod()); refundPassInfo.setRefundReason(refundPass.getRefundReason()); refundPassInfo.setUserRemark(refundPass.getUserRemark()); refundPassInfo.setPics(refundPass.getPics()); refundPassInfo.setPassStatus(refundPass.getPassStatus()); refundPassInfo.setPassRemark(refundPass.getPassRemark()); return refundPassInfo; } }