package com.doumee.service.business.impl; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.RedisUtil; 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.join.AftersaleJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.web.dto.MultiFileDTO; import com.doumee.dao.web.request.DealIntegralRequest; import com.doumee.dao.web.request.goods.AftersaleCancelRequest; import com.doumee.dao.web.request.goods.AftersaleCreateRequest; import com.doumee.dao.web.request.goods.AftersalePostRequest; import com.doumee.service.business.AftersaleService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.service.business.IntegralService; import com.doumee.service.business.MultifileService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.checkerframework.checker.units.qual.C; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; 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; /** * 商品售后信息表Service实现 * @author 江蹄蹄 * @date 2023/04/03 17:54 */ @Service public class AftersaleServiceImpl implements AftersaleService { @Autowired private RedisTemplate redisTemplate; @Autowired SystemDictDataBiz systemDictDataBiz; @Autowired private AftersaleMapper aftersaleMapper; @Autowired private GoodsorderMapper goodsorderMapper; @Autowired private GoodsorderDetailMapper goodsorderDetailMapper; @Autowired private AftersaleJoinMapper aftersaleJoinMapper; @Autowired @Lazy private MultifileService multifileService; @Autowired @Lazy private IntegralService integralService; @Autowired private FundMapper fundMapper; @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public Integer create(AftersaleCreateRequest model) { //校验请求参数 GoodsorderDetail detail = isParamValid(model); Date date = new Date(); Aftersale aftersale = new Aftersale(); aftersale.setType(model.getType()); aftersale.setContent(model.getContent()); aftersale.setDetailId(model.getDetailId()); aftersale.setIsdeleted(Constants.ZERO); aftersale.setCreateDate(date); aftersale.setOrderId(detail.getOrderId()); aftersale.setStatus(Constants.AftersaleStatus.APPLY_ING.getKey()); aftersale.setInfo(model.getInfo()); aftersale.setMoney(model.getMoney()); //平台收货地址信息,字典 配置 aftersale.setShopAddrInfo(systemDictDataBiz.queryByCode(Constants.PLAT_ADDR,Constants.ADDR_INFO).getCode()); aftersale.setShopAddrName(systemDictDataBiz.queryByCode(Constants.PLAT_ADDR,Constants.ADDR_NAME).getCode()); aftersale.setShopAddrPhone(systemDictDataBiz.queryByCode(Constants.PLAT_ADDR,Constants.ADDR_PHONE).getCode()); //插入数据 aftersale.setCode(getNextInCode()); aftersaleMapper.insert(aftersale); //处理附件信息 dealMultifiles(model.getApplyFileList(),aftersale,Constants.MultiFile.AFTERSALE_APPLY.getKey(),date); return aftersale.getId(); } private GoodsorderDetail isParamValid(AftersaleCreateRequest model) { if(model.getDetailId() == null ||model.getMemberId() == null ||StringUtils.isBlank(model.getContent()) ||model.getType() == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(Constants.equalsInteger(model.getType(),Constants.AftersaleType.TK.getKey())){ if(Constants.formatBigdecimal(model.getMoney()).compareTo(new BigDecimal(0)) !=1 ){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"退款金额必须大于0哦"); } }else if(Constants.equalsInteger(model.getType(),Constants.AftersaleType.THTK.getKey())){ if(Constants.formatBigdecimal(model.getMoney()).compareTo(new BigDecimal(0)) !=1 ){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"退款金额必须大于哦"); } }else if(Constants.equalsInteger(model.getType(),Constants.AftersaleType.HH.getKey())){ }else{ throw new BusinessException(ResponseStatus.BAD_REQUEST); } //查询订单明细信息 GoodsorderDetail detail = goodsorderDetailMapper.selectById(model.getDetailId()); if(detail == null || Constants.equalsInteger(detail.getIsdeleted(), Constants.ONE) ) { throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该售后订单信息不存在,请返回刷新重试!"); } //查询订单信息 Goodsorder goodsorder = goodsorderMapper.selectById(detail.getOrderId()); if(goodsorder == null || Constants.equalsInteger(goodsorder.getIsdeleted(), Constants.ONE) || !Constants.equalsInteger(goodsorder.getType(), Constants.OrderType.ADMINPLAT.getKey()) ||!Constants.equalsInteger(goodsorder.getMemberId(),model.getMemberId())) { throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该售后订单记录不存在,请返回刷新重试!"); } //只有已发货和订单交易完成,才能进行售后 if(!Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.DONE.getKey()) &&!Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_RECEIVE.getKey())){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该订单记录当前不支持售后哦!"); } if(Constants.equalsInteger(model.getType(),Constants.AftersaleType.TK.getKey()) ||Constants.equalsInteger(model.getType(),Constants.AftersaleType.THTK.getKey())){ //如果有退款,计算退款金额是否合法 //检查退款金额是否合法 isBackMoneyValid(model.getMoney(),detail.getPrice(),detail.getGoodsNum(),goodsorder.getPrice(),goodsorder.getIntegral(),goodsorder.getCouponPrice()); } QueryWrapper param = new QueryWrapper<>(); param.lambda().notIn(Aftersale::getStatus,Constants.AftersaleStatus.CANCEL.getKey(),Constants.AftersaleStatus.SHOP_REFUSE.getKey()); param.lambda().eq(Aftersale::getIsdeleted,Constants.ZERO) ; param.lambda().eq(Aftersale::getOrderId,goodsorder.getId()) ; param.lambda().eq(Aftersale::getDetailId,detail.getId()); if(aftersaleMapper.selectCount(param) >0){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该订单已在售后处理中,不能重复申请!"); } return detail; } private void dealMultifiles(List fileList, Aftersale aftersale, int key,Date date) { if(fileList !=null && fileList.size()>0){ int num =0; for(MultiFileDTO f : fileList){ if(StringUtils.isBlank(f.getFileurl())){ continue; } Multifile file = new Multifile(); file.setObjType(key); file.setIsdeleted(Constants.ZERO); file.setFileurl(f.getFileurl()); file.setType(Constants.ZERO); file.setObjId(aftersale.getId()); file.setName(f.getName()); file.setCreateDate(date); file.setSortnum(num); multifileService.create(file); num++; } } } @Override public void deleteById(Integer id) { aftersaleMapper.deleteById(id); } @Override public void delete(Aftersale aftersale) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(aftersale); aftersaleMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } aftersaleMapper.deleteBatchIds(ids); } @Override public void updateById(Aftersale aftersale) { aftersaleMapper.updateById(aftersale); } /** * 退款-待处理操作 * @param aftersale */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void tkDealBack(Aftersale aftersale,Integer optUserId){ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(aftersale.getId() == null || aftersale.getStatus() == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } Aftersale model = findJoinById(aftersale.getId(),false); aftersale.setMemberId(model.getMemberId()); if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该售后记录不存在,请返回刷新重试!"); } if(!Constants.equalsInteger(Constants.AftersaleStatus.APPLY_ING.getKey(),model.getStatus())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该售后记录状态已流转,不支持当前操作,请刷新页面查看!"); } if(!Constants.equalsInteger(Constants.AftersaleType.TK.getKey(),model.getType())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,非退款售后服务,不支持当前操作,请刷新页面查看!"); } Date date = new Date(); Aftersale updateModel = new Aftersale(); updateModel.setId(model.getId()); updateModel.setEditor(user.getId()); updateModel.setDealDate(date); updateModel.setEditDate(date); updateModel.setDealInfo(aftersale.getDealInfo()); updateModel.setDealUser(user.getId()); if(Constants.equalsInteger(Constants.AftersaleStatus.REFUND.getKey(),aftersale.getStatus())){ //如果是同意退款,状态为已退款 if(Constants.formatBigdecimal(aftersale.getActMoney()).compareTo(new BigDecimal(0)) != 1){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,退款金额不正确!"); } //退款金额 BigDecimal actmoney = aftersale.getActMoney(); //退现金,默认全现金退 BigDecimal wxMoney = Constants.formatBigdecimal(aftersale.getDetailMoney()); //退余额 BigDecimal integral = Constants.formatBigdecimal( aftersale.getDetailIntegral()); if(actmoney.compareTo(wxMoney.add(integral)) >0 ){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该订单可退款金额上限为【"+(wxMoney.add(integral)).doubleValue()+"元】"); } //检查退款金额是否合法 /* isBackMoneyValid(actmoney,model.getDetailPrice(),model.getGoodsNum(),model.getOrderPrice(),model.getOrderIntegral(),model.getOrderCouponPrice()); //查询订单信息,计算退现金多少、退余额多少 //退现金,默认全现金退 BigDecimal wxMoney = aftersale.getActMoney(); //退余额 BigDecimal integral = new BigDecimal(0); if(Constants.formatBigdecimal(model.getOrderIntegral()).compareTo(new BigDecimal(0)) >0){ //如果使用了余额支付,折算优惠价格,计算实际退现金和余额的部分 //订单总金额 BigDecimal total = model.getOrderIntegral().add(Constants.formatBigdecimal(model.getOrderPrice())).add(Constants.formatBigdecimal(model.getOrderCouponPrice())); BigDecimal rate = Constants.formatBigdecimal(model.getDetailPrice() )//商品单价 .multiply(new BigDecimal(Constants.formatIntegerNum(model.getGoodsNum())))//商品数量 .divide(total,4,BigDecimal.ROUND_HALF_UP); //可退现金金额 BigDecimal canWxMoney = Constants.formatBigdecimal(model.getOrderPrice()).multiply(rate); if(canWxMoney.compareTo(actmoney) <0){ //按比例退款的金额 wxMoney = canWxMoney; } integral =actmoney.subtract(wxMoney); }*/ if(wxMoney.compareTo(new BigDecimal(0)) >0){ //进行微信现金退款 String backOrder = WxMiniUtilService.wxRefund(model.getOrderCode()+"" ,model.getOrderPrice(),wxMoney); updateModel.setDrawbackNo(backOrder); //添加平台收支明细 updateFund(backOrder,model.getOrderId(),model.getMemberId(),wxMoney,optUserId,model.getOrderCode()); } if(integral.compareTo(new BigDecimal(0)) >0){ //进行余额退款 updateModel.setIntegral(integral); //更新用户余额数量 updateMemberInteger(aftersale,integral); } updateModel.setStatus(Constants.AftersaleStatus.REFUND.getKey()); updateModel.setDrawbackDate(date); updateModel.setDrawbackInfo(aftersale.getDrawbackInfo()); updateModel.setDrawbackUser(user.getId()); updateModel.setActMoney(aftersale.getActMoney()); }else if(Constants.equalsInteger(Constants.AftersaleStatus.SHOP_REFUSE.getKey(),aftersale.getStatus())){ //如果是不同意退款 updateModel.setStatus(Constants.AftersaleStatus.SHOP_REFUSE.getKey()); }else{ throw new BusinessException(ResponseStatus.BAD_REQUEST); } aftersaleMapper.updateById(updateModel); } private void updateMemberInteger(Aftersale aftersale, BigDecimal integral) { DealIntegralRequest param = new DealIntegralRequest(); param.setMemberId(aftersale.getMemberId()); param.setObjId(aftersale.getId()); param.setDealType(Constants.ZERO); param.setIntegralNum(integral); param.setIntegralObjType(Constants.IntegralObjType.AFTERSALE_BACK); integralService.dealIntegral(param); } private void isBackMoneyValid(BigDecimal actmoney, BigDecimal perPrice, Integer goodsNum, BigDecimal orderPrice,BigDecimal orderIntegral, BigDecimal orderCouponPrice) { BigDecimal detailPrice = Constants.formatBigdecimal(perPrice).multiply(new BigDecimal(goodsNum)); if(Constants.formatBigdecimal(orderCouponPrice).compareTo(new BigDecimal(0)) >0){ //如果存在优惠券数据,折算优惠价格,计算实际支付(可退款)价格 BigDecimal total =orderCouponPrice.add(Constants.formatBigdecimal(orderPrice)).add(Constants.formatBigdecimal(orderIntegral)); BigDecimal rate = orderCouponPrice.divide(total,4,BigDecimal.ROUND_HALF_UP); detailPrice =detailPrice.subtract(detailPrice.multiply(rate)); } if(actmoney.compareTo(detailPrice) >0 ){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该订单可退款金额上限为【"+detailPrice.doubleValue()+"元】"); } } public void updateFund(String refundCode,Integer orderId,Integer memberId,BigDecimal actmoney,Integer optUserId,Long orderCode){ Fund fund = new Fund(); fund.setOrderCode(refundCode); fund.setCreator(optUserId); fund.setCreateDate(new Date()); fund.setIsdeleted(Constants.ZERO); fund.setRemark(orderCode+""); fund.setMemberId(memberId); fund.setTitle("后端售后退款"); fund.setContent("后端售后退款"); fund.setObjId(orderId); fund.setObjType(Constants.ONE); fund.setType(Constants.ONE); fund.setNum(actmoney); fundMapper.insert(fund); } /** * 退货退款-退款操作 * @param aftersale */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void thtkDrawback(Aftersale aftersale,Integer optUserId){ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(aftersale.getId() == null ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } //状态为已退款 if(Constants.formatBigdecimal(aftersale.getActMoney()).compareTo(new BigDecimal(0)) != 1){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,退款金额不正确!"); } //查询售后详情 Aftersale model = findJoinById(aftersale.getId(),false); aftersale.setMemberId(model.getMemberId()); if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该售后记录不存在,请返回刷新重试!"); } if(!Constants.equalsInteger(Constants.AftersaleStatus.SENDED.getKey(),model.getStatus())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该售后记录状态已流转,不支持当前操作,请刷新页面查看!"); } if(!Constants.equalsInteger(Constants.AftersaleType.THTK.getKey(),model.getType())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,非退货退款售后服务,不支持当前操作,请刷新页面查看!"); } Date date = new Date(); Aftersale updateModel = new Aftersale(); updateModel.setId(model.getId()); updateModel.setEditor(user.getId()); updateModel.setEditDate(date); //如果是同意退款,状态为已退款 if(Constants.formatBigdecimal(aftersale.getActMoney()).compareTo(new BigDecimal(0)) != 1){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,退款金额不正确!"); } //退款金额 BigDecimal actmoney = aftersale.getActMoney(); //-----------------------------新逻辑-----------start------------- //退现金,默认全现金退 BigDecimal wxMoney = Constants.formatBigdecimal(aftersale.getDetailMoney()); //退余额 BigDecimal integral = Constants.formatBigdecimal( aftersale.getDetailIntegral()); if(actmoney.compareTo(wxMoney.add(integral)) >0 ){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该订单可退款金额上限为【"+(wxMoney.add(integral)).doubleValue()+"元】"); } //-----------------------------新逻辑----------------end-------- //检查退款金额是否合法 /*isBackMoneyValid(actmoney,model.getDetailPrice(),model.getGoodsNum(),model.getOrderPrice(),model.getOrderIntegral(),model.getOrderCouponPrice()); //查询订单信息,计算退现金多少、退余额多少 //退现金,默认全现金退 BigDecimal wxMoney = aftersale.getActMoney(); //退余额 BigDecimal integral = new BigDecimal(0); if(Constants.formatBigdecimal(model.getOrderIntegral()).compareTo(new BigDecimal(0)) >0){ //如果使用了余额支付,折算优惠价格,计算实际退现金和余额的部分 //订单总金额 BigDecimal total = model.getOrderIntegral().add(Constants.formatBigdecimal(model.getOrderPrice())).add(Constants.formatBigdecimal(model.getOrderCouponPrice())); BigDecimal rate = Constants.formatBigdecimal(model.getDetailPrice() )//商品单价 .multiply(new BigDecimal(Constants.formatIntegerNum(model.getGoodsNum())))//商品数量 .divide(total,4,BigDecimal.ROUND_HALF_UP); //可退现金金额 BigDecimal canWxMoney = Constants.formatBigdecimal(model.getOrderPrice()).multiply(rate); if(canWxMoney.compareTo(actmoney) <0){ //按比列退款的金额 wxMoney = canWxMoney; } integral =actmoney.subtract(wxMoney); }*/ if(wxMoney.compareTo(new BigDecimal(0)) >0){ //进行微信现金退款 String backOrder = WxMiniUtilService.wxRefund(model.getOrderCode()+"" ,model.getOrderPrice(),wxMoney); updateModel.setDrawbackNo(backOrder); //添加平台收支明细 updateFund(backOrder,model.getOrderId(),model.getMemberId(),wxMoney,optUserId,model.getOrderCode()); } if(integral.compareTo(new BigDecimal(0)) >0){ //进行余额退款 updateModel.setIntegral(integral); //更新用户余额数量 updateMemberInteger(aftersale,integral); } //商家已退款 自动表示订单已完成 updateModel.setStatus(Constants.AftersaleStatus.DONE.getKey()); updateModel.setDrawbackDate(date); updateModel.setDrawbackInfo(aftersale.getDrawbackInfo()); updateModel.setDrawbackUser(user.getId()); updateModel.setActMoney(aftersale.getActMoney()); aftersaleMapper.updateById(updateModel); } /** * 退货退款-同意或拒绝退货 * @param aftersale */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void thtkDealApply(Aftersale aftersale){ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(aftersale.getId() == null || aftersale.getStatus() == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } Aftersale model = findJoinById(aftersale.getId(),false); if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该售后记录不存在,请返回刷新重试!"); } if(!Constants.equalsInteger(Constants.AftersaleStatus.APPLY_ING.getKey(),model.getStatus())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该售后记录状态已流转,不支持当前操作,请刷新页面查看!"); } if(!Constants.equalsInteger(Constants.AftersaleType.THTK.getKey(),model.getType())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,非退货退款售后服务,不支持当前操作,请刷新页面查看!"); } Date date = new Date(); Aftersale updateModel = new Aftersale(); updateModel.setId(model.getId()); updateModel.setEditor(user.getId()); updateModel.setEditDate(date); updateModel.setStatus(aftersale.getStatus()); updateModel.setDealUser(user.getId()); updateModel.setDealDate(date); updateModel.setDealInfo(aftersale.getDealInfo()); if( !Constants.equalsInteger(aftersale.getStatus(),Constants.AftersaleStatus.WAIT_SEND.getKey()) &&!Constants.equalsInteger(aftersale.getStatus(),Constants.AftersaleStatus.SHOP_REFUSE.getKey()) ){ //只能同意或者不同退货 throw new BusinessException(ResponseStatus.BAD_REQUEST); } aftersaleMapper.updateById(updateModel); } /** * 退货退款-取消操作 * @param aftersale */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void thtkShopCancel(Aftersale aftersale){ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(aftersale.getId() == null ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } Aftersale model = findJoinById(aftersale.getId(),false); if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该售后记录不存在,请返回刷新重试!"); } if(!Constants.equalsInteger(Constants.AftersaleStatus.WAIT_SEND.getKey(),model.getStatus()) && !Constants.equalsInteger(Constants.AftersaleStatus.APPLY_ING.getKey(),model.getStatus())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该售后记录状态已流转,不支持当前操作,请刷新页面查看!"); } if(!Constants.equalsInteger(Constants.AftersaleType.THTK.getKey(),model.getType())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,非退货退款售后服务,不支持当前操作,请刷新页面查看!"); } Date date = new Date(); Aftersale updateModel = new Aftersale(); updateModel.setId(model.getId()); updateModel.setEditor(user.getId()); updateModel.setEditDate(date); updateModel.setStatus(Constants.AftersaleStatus.CANCEL.getKey()); updateModel.setCancelType(Constants.ONE); updateModel.setCancelUser(user.getId()); updateModel.setCancelDate(date); updateModel.setCancelInfo(aftersale.getCancelInfo()); aftersaleMapper.updateById(updateModel); } /** * 用户自行-取消操作 * @param aftersale */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void memberCancel(AftersaleCancelRequest aftersale){ if(aftersale.getId() == null ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } Aftersale model = findJoinById(aftersale.getId(),false); if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE) || !Constants.equalsInteger(model.getMemberId(),aftersale.getMemberId())){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该售后记录不存在,请返回刷新重试!"); } if(!Constants.equalsInteger(Constants.AftersaleStatus.WAIT_SEND.getKey(),model.getStatus()) && !Constants.equalsInteger(Constants.AftersaleStatus.APPLY_ING.getKey(),model.getStatus())){ // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该售后记录状态已流转,不支持当前操作,请刷新页面查看!"); throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前售后订单状态已流转,操作失败,请刷新重试"); } Date date = new Date(); Aftersale updateModel = new Aftersale(); updateModel.setId(model.getId()); updateModel.setEditDate(date); updateModel.setStatus(Constants.AftersaleStatus.CANCEL.getKey()); updateModel.setCancelType(Constants.ZERO); updateModel.setCancelUser(aftersale.getMemberId()); updateModel.setCancelDate(date); updateModel.setCancelInfo("用户取消"); aftersaleMapper.updateById(updateModel); } /** * 用户邮寄 * @param aftersale */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void memberPost(AftersalePostRequest aftersale){ if(aftersale.getId() == null ||StringUtils.isBlank(aftersale.getBackKd()) ||StringUtils.isBlank(aftersale.getBackKdName())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } Aftersale model = findJoinById(aftersale.getId(),false); if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE) || !Constants.equalsInteger(model.getMemberId(),aftersale.getMemberId())){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该售后记录不存在,请返回刷新重试!"); } if(!Constants.equalsInteger(Constants.AftersaleStatus.WAIT_SEND.getKey(),model.getStatus())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该售后记录状态已流转,不支持当前操作,请刷新页面查看!"); } Date date = new Date(); Aftersale updateModel = new Aftersale(); updateModel.setId(model.getId()); updateModel.setEditDate(date); updateModel.setStatus(Constants.AftersaleStatus.SENDED.getKey()); updateModel.setKdDate(date); updateModel.setBackKdName(aftersale.getBackKdName()); updateModel.setBackKd(aftersale.getBackKd()); updateModel.setBackKdPhone(aftersale.getBackKdPhone()); updateModel.setKdInfo(aftersale.getKdInfo()); //处理附件信息 dealMultifiles(aftersale.getKdFileList(),updateModel,Constants.MultiFile.AFTERSALE_KD.getKey(),date); aftersaleMapper.updateById(updateModel); } /** * 换货-同意或拒绝换货 * @param aftersale */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void hhDealApply(Aftersale aftersale){ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(aftersale.getId() == null || aftersale.getStatus() == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } Aftersale model = findJoinById(aftersale.getId(),false); if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该售后记录不存在,请返回刷新重试!"); } if(!Constants.equalsInteger(Constants.AftersaleStatus.APPLY_ING.getKey(),model.getStatus())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该售后记录状态已流转,不支持当前操作,请刷新页面查看!"); } if(!Constants.equalsInteger(Constants.AftersaleType.HH.getKey(),model.getType())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,非换货售后服务,不支持当前操作,请刷新页面查看!"); } Date date = new Date(); Aftersale updateModel = new Aftersale(); updateModel.setId(model.getId()); updateModel.setEditor(user.getId()); updateModel.setEditDate(date); updateModel.setStatus(aftersale.getStatus()); updateModel.setDealUser(user.getId()); updateModel.setDealDate(date); updateModel.setDealInfo(aftersale.getDealInfo()); if( !Constants.equalsInteger(aftersale.getStatus(),Constants.AftersaleStatus.WAIT_SEND.getKey()) &&!Constants.equalsInteger(aftersale.getStatus(),Constants.AftersaleStatus.SHOP_REFUSE.getKey()) ){ //只能同意或者不同退货 throw new BusinessException(ResponseStatus.BAD_REQUEST); } aftersaleMapper.updateById(updateModel); } /** * 换货-平台发货 * @param aftersale */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void hhShopSend(Aftersale aftersale){ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(aftersale.getId() == null ||StringUtils.isBlank(aftersale.getShopBackKd()) ||StringUtils.isBlank(aftersale.getShopBackKdName())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } Aftersale model = findJoinById(aftersale.getId(),false); if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该售后记录不存在,请返回刷新重试!"); } if(!Constants.equalsInteger(Constants.AftersaleStatus.SENDED.getKey(),model.getStatus())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该售后记录状态已流转,不支持当前操作,请刷新页面查看!"); } if(!Constants.equalsInteger(Constants.AftersaleType.HH.getKey(),model.getType())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,非换货售后服务,不支持当前操作,请刷新页面查看!"); } Date date = new Date(); Aftersale updateModel = new Aftersale(); updateModel.setId(model.getId()); updateModel.setEditor(user.getId()); updateModel.setEditDate(date); //平台已发货 updateModel.setStatus(Constants.AftersaleStatus.SHOP_SENDED.getKey()); updateModel.setShopKdUser(user.getId()); updateModel.setShopKdDate(date); updateModel.setShopBackKd(aftersale.getShopBackKd()); updateModel.setShopBackKdName(aftersale.getShopBackKdName()); aftersaleMapper.updateById(updateModel); } public static boolean ISAUTO_RUNNING = false; /** * 超过7天发货,自动完成 */ @Override public void autoDone(){ if(ISAUTO_RUNNING){ return; } ISAUTO_RUNNING =true; try { UpdateWrapper param = new UpdateWrapper<>(); param.lambda().eq(true,Aftersale::getIsdeleted,Constants.ZERO) ; param.lambda().eq(true,Aftersale::getStatus,Constants.AftersaleStatus.SHOP_SENDED.getKey()) ; param.apply(true, "TO_DAYS(NOW())>=TO_DAYS(create_date)+7"); param.lambda().set(true,Aftersale::getStatus,Constants.AftersaleStatus.DONE.getKey()); param.lambda().set(true,Aftersale::getDoneDate,new Date()); param.lambda().set(true,Aftersale::getDoneInfo,"平台发货,超出7天系统自动完成收货"); aftersaleMapper.update(null,param); }catch (Exception e){ e.printStackTrace(); }finally { ISAUTO_RUNNING = false; } } @Override public void updateByIdInBatch(List aftersales) { if (CollectionUtils.isEmpty(aftersales)) { return; } for (Aftersale aftersale: aftersales) { this.updateById(aftersale); } } @Override public Aftersale findById(Integer id) { return aftersaleMapper.selectById(id); } @Override public Aftersale findOne(Aftersale aftersale) { QueryWrapper wrapper = new QueryWrapper<>(aftersale); return aftersaleMapper.selectOne(wrapper); } @Override public List findList(Aftersale aftersale) { QueryWrapper wrapper = new QueryWrapper<>(aftersale); return aftersaleMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().eq(Aftersale::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getCreator() != null) { queryWrapper.lambda().eq(Aftersale::getCreator, pageWrap.getModel().getCreator()); } if (pageWrap.getModel().getCreateDate() != null) { queryWrapper.lambda().ge(Aftersale::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); queryWrapper.lambda().le(Aftersale::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); } if (pageWrap.getModel().getEditor() != null) { queryWrapper.lambda().eq(Aftersale::getEditor, pageWrap.getModel().getEditor()); } if (pageWrap.getModel().getEditDate() != null) { queryWrapper.lambda().ge(Aftersale::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); queryWrapper.lambda().le(Aftersale::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); } if (pageWrap.getModel().getIsdeleted() != null) { queryWrapper.lambda().eq(Aftersale::getIsdeleted, pageWrap.getModel().getIsdeleted()); } if (pageWrap.getModel().getRemark() != null) { queryWrapper.lambda().eq(Aftersale::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getOrderId() != null) { queryWrapper.lambda().eq(Aftersale::getOrderId, pageWrap.getModel().getOrderId()); } if (pageWrap.getModel().getDetailId() != null) { queryWrapper.lambda().eq(Aftersale::getDetailId, pageWrap.getModel().getDetailId()); } if (pageWrap.getModel().getType() != null) { queryWrapper.lambda().eq(Aftersale::getType, pageWrap.getModel().getType()); } if (pageWrap.getModel().getContent() != null) { queryWrapper.lambda().eq(Aftersale::getContent, pageWrap.getModel().getContent()); } if (pageWrap.getModel().getCoupon() != null) { queryWrapper.lambda().eq(Aftersale::getCoupon, pageWrap.getModel().getCoupon()); } if (pageWrap.getModel().getMoney() != null) { queryWrapper.lambda().eq(Aftersale::getMoney, pageWrap.getModel().getMoney()); } if (pageWrap.getModel().getInfo() != null) { queryWrapper.lambda().eq(Aftersale::getInfo, pageWrap.getModel().getInfo()); } if (pageWrap.getModel().getBackType() != null) { queryWrapper.lambda().eq(Aftersale::getBackType, pageWrap.getModel().getBackType()); } if (pageWrap.getModel().getBackKd() != null) { queryWrapper.lambda().eq(Aftersale::getBackKd, pageWrap.getModel().getBackKd()); } if (pageWrap.getModel().getBackKdName() != null) { queryWrapper.lambda().eq(Aftersale::getBackKdName, pageWrap.getModel().getBackKdName()); } if (pageWrap.getModel().getBackKdPhone() != null) { queryWrapper.lambda().eq(Aftersale::getBackKdPhone, pageWrap.getModel().getBackKdPhone()); } if (pageWrap.getModel().getShopAddrName() != null) { queryWrapper.lambda().eq(Aftersale::getShopAddrName, pageWrap.getModel().getShopAddrName()); } if (pageWrap.getModel().getShopAddrPhone() != null) { queryWrapper.lambda().eq(Aftersale::getShopAddrPhone, pageWrap.getModel().getShopAddrPhone()); } if (pageWrap.getModel().getShopAddrInfo() != null) { queryWrapper.lambda().eq(Aftersale::getShopAddrInfo, pageWrap.getModel().getShopAddrInfo()); } if (pageWrap.getModel().getAddrName() != null) { queryWrapper.lambda().eq(Aftersale::getAddrName, pageWrap.getModel().getAddrName()); } if (pageWrap.getModel().getAddrPhone() != null) { queryWrapper.lambda().eq(Aftersale::getAddrPhone, pageWrap.getModel().getAddrPhone()); } if (pageWrap.getModel().getAddrInfo() != null) { queryWrapper.lambda().eq(Aftersale::getAddrInfo, pageWrap.getModel().getAddrInfo()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.lambda().eq(Aftersale::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getDrawbackDate() != null) { queryWrapper.lambda().ge(Aftersale::getDrawbackDate, Utils.Date.getStart(pageWrap.getModel().getDrawbackDate())); queryWrapper.lambda().le(Aftersale::getDrawbackDate, Utils.Date.getEnd(pageWrap.getModel().getDrawbackDate())); } if (pageWrap.getModel().getDrawbackNo() != null) { queryWrapper.lambda().eq(Aftersale::getDrawbackNo, pageWrap.getModel().getDrawbackNo()); } if (pageWrap.getModel().getDrawbackInfo() != null) { queryWrapper.lambda().eq(Aftersale::getDrawbackInfo, pageWrap.getModel().getDrawbackInfo()); } if (pageWrap.getModel().getKdDate() != null) { queryWrapper.lambda().ge(Aftersale::getKdDate, Utils.Date.getStart(pageWrap.getModel().getKdDate())); queryWrapper.lambda().le(Aftersale::getKdDate, Utils.Date.getEnd(pageWrap.getModel().getKdDate())); } if (pageWrap.getModel().getKdInfo() != null) { queryWrapper.lambda().eq(Aftersale::getKdInfo, pageWrap.getModel().getKdInfo()); } if (pageWrap.getModel().getDealDate() != null) { queryWrapper.lambda().ge(Aftersale::getDealDate, Utils.Date.getStart(pageWrap.getModel().getDealDate())); queryWrapper.lambda().le(Aftersale::getDealDate, Utils.Date.getEnd(pageWrap.getModel().getDealDate())); } if (pageWrap.getModel().getDealInfo() != null) { queryWrapper.lambda().eq(Aftersale::getDealInfo, pageWrap.getModel().getDealInfo()); } if (pageWrap.getModel().getShopKdDate() != null) { queryWrapper.lambda().ge(Aftersale::getShopKdDate, Utils.Date.getStart(pageWrap.getModel().getShopKdDate())); queryWrapper.lambda().le(Aftersale::getShopKdDate, Utils.Date.getEnd(pageWrap.getModel().getShopKdDate())); } if (pageWrap.getModel().getShopKdInfo() != null) { queryWrapper.lambda().eq(Aftersale::getShopKdInfo, pageWrap.getModel().getShopKdInfo()); } if (pageWrap.getModel().getDoneDate() != null) { queryWrapper.lambda().ge(Aftersale::getDoneDate, Utils.Date.getStart(pageWrap.getModel().getDoneDate())); queryWrapper.lambda().le(Aftersale::getDoneDate, Utils.Date.getEnd(pageWrap.getModel().getDoneDate())); } if (pageWrap.getModel().getDoneInfo() != null) { queryWrapper.lambda().eq(Aftersale::getDoneInfo, pageWrap.getModel().getDoneInfo()); } if (pageWrap.getModel().getRefuseDate() != null) { queryWrapper.lambda().ge(Aftersale::getRefuseDate, Utils.Date.getStart(pageWrap.getModel().getRefuseDate())); queryWrapper.lambda().le(Aftersale::getRefuseDate, Utils.Date.getEnd(pageWrap.getModel().getRefuseDate())); } if (pageWrap.getModel().getRefuseInfo() != null) { queryWrapper.lambda().eq(Aftersale::getRefuseInfo, pageWrap.getModel().getRefuseInfo()); } if (pageWrap.getModel().getCancelDate() != null) { queryWrapper.lambda().ge(Aftersale::getCancelDate, Utils.Date.getStart(pageWrap.getModel().getCancelDate())); queryWrapper.lambda().le(Aftersale::getCancelDate, Utils.Date.getEnd(pageWrap.getModel().getCancelDate())); } if (pageWrap.getModel().getCancelInfo() != null) { queryWrapper.lambda().eq(Aftersale::getCancelInfo, pageWrap.getModel().getCancelInfo()); } if (pageWrap.getModel().getCancelType() != null) { queryWrapper.lambda().eq(Aftersale::getCancelType, pageWrap.getModel().getCancelType()); } if (pageWrap.getModel().getCode() != null) { queryWrapper.lambda().eq(Aftersale::getCode, pageWrap.getModel().getCode()); } for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(aftersaleMapper.selectPage(page, queryWrapper)); } /** * 后台分页查询接口 * @param pageWrap * @return */ @Override public PageData findJoinPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.selectAll(Aftersale.class); //订单明细商品sku信息 queryWrapper.selectAs(GoodsorderDetail::getImgurl,Aftersale::getImgurl); queryWrapper.selectAs(GoodsorderDetail::getSkuName,Aftersale::getSkuName); queryWrapper.selectAs(GoodsorderDetail::getGoodsNum,Aftersale::getGoodsNum); queryWrapper.selectAs(GoodsorderDetail::getName,Aftersale::getGoodsName); queryWrapper.selectAs(GoodsorderDetail::getPrice,Aftersale::getDetailPrice); //订单编号 queryWrapper.selectAs(Goodsorder::getCode,Aftersale::getOrderCode); queryWrapper.selectAs(Goodsorder::getMemberId,Aftersale::getMemberId); //收件人信息 queryWrapper.selectAs(Goodsorder::getLinkname,Aftersale::getMemberName); queryWrapper.selectAs(Goodsorder::getLinkphone,Aftersale::getMemberPhone); queryWrapper.selectAs(Goodsorder::getLinkaddr,Aftersale::getAddrInfo); queryWrapper.selectAs(Goodsorder::getCode,Aftersale::getOrderCode); queryWrapper.selectAs(GoodsorderDetail::getPrice,Aftersale::getDetailPrice); queryWrapper.selectAs(Goods::getImgurl,Aftersale::getGoodsImgurl); queryWrapper.leftJoin(GoodsorderDetail.class,GoodsorderDetail::getId,Aftersale::getDetailId); queryWrapper.leftJoin(Goodsorder.class,Goodsorder::getId,Aftersale::getOrderId); queryWrapper.leftJoin(GoodsSku.class,GoodsSku::getId,GoodsorderDetail::getGoodsSkuId); queryWrapper.leftJoin(Goods.class,Goods::getId,GoodsSku::getGoodsId); //售后单状态查询 queryWrapper.eq(pageWrap.getModel().getStatus() !=null,Aftersale::getStatus,pageWrap.getModel().getStatus()); //查询指定用户的 queryWrapper.eq(pageWrap.getModel().getMemberId() !=null,Goodsorder::getMemberId,pageWrap.getModel().getMemberId()); //售后单号查询 queryWrapper.eq(pageWrap.getModel().getCode() !=null,Aftersale::getCode, pageWrap.getModel().getCode()); //收货人昵称或手机号 queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), wrapper -> wrapper.like(Goodsorder::getLinkphone,pageWrap.getModel().getMemberName()).or().like(Goodsorder::getLinkname,pageWrap.getModel().getMemberName())); //售后单开始时间 queryWrapper.ge(pageWrap.getModel().getStartDate() !=null,Aftersale::getCreateDate, pageWrap.getModel().getStartDate()); //售后单截止时间 queryWrapper.le(pageWrap.getModel().getEndDate() !=null,Aftersale::getCreateDate, pageWrap.getModel().getEndDate()); queryWrapper.eq(Aftersale::getIsdeleted,Constants.ZERO); queryWrapper.orderByDesc(Aftersale::getCreateDate); IPage list = aftersaleJoinMapper.selectJoinPage(page, Aftersale.class, queryWrapper); PageData result = new PageData<>(list.getCurrent(), list.getSize()); result.setTotal(list.getTotal()); result.setRecords(new ArrayList<>()); if(list.getRecords()!=null){ String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode(); list.getRecords().stream().forEach(item -> { AftersaleListResponse model = new AftersaleListResponse(); BeanUtils.copyProperties(item,model); model.setPrice(item.getDetailPrice()); model.setStatusStr(Constants.AftersaleStatus.getName(model.getStatus())); model.setTypeStr(Constants.AftersaleType.getName(model.getType())); if(StringUtils.isNotBlank(model.getImgurl())){ //商品sku完整图片地址 model.setImgurl(path + model.getImgurl()); }else{ model.setImgurl(path + model.getGoodsImgurl()); } result.getRecords().add(model); }); } return result; } /** * 查询详情接口 * @param id * @return */ @Override public Aftersale findJoinById(Integer id,boolean detail) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Aftersale.class); //订单明细商品sku信息 queryWrapper.selectAs(GoodsorderDetail::getImgurl,Aftersale::getImgurl); queryWrapper.selectAs(GoodsorderDetail::getSkuName,Aftersale::getSkuName); queryWrapper.selectAs(GoodsorderDetail::getGoodsNum,Aftersale::getGoodsNum); queryWrapper.selectAs(GoodsorderDetail::getName,Aftersale::getGoodsName); queryWrapper.selectAs(GoodsorderDetail::getPrice,Aftersale::getDetailPrice); queryWrapper.selectAs(GoodsorderDetail::getMoney,Aftersale::getDetailMoney); queryWrapper.selectAs(GoodsorderDetail::getIntegral,Aftersale::getDetailIntegral); //订单编号 queryWrapper.selectAs(Goodsorder::getCode,Aftersale::getOrderCode); queryWrapper.selectAs(Goodsorder::getMemberId,Aftersale::getMemberId); queryWrapper.selectAs(Goodsorder::getPrice,Aftersale::getOrderPrice); queryWrapper.selectAs(Goodsorder::getIntegral,Aftersale::getOrderIntegral); queryWrapper.selectAs(Goodsorder::getCouponPrice,Aftersale::getOrderCouponPrice); //收件人信息 queryWrapper.selectAs(Goodsorder::getLinkname,Aftersale::getMemberName); queryWrapper.selectAs(Goodsorder::getLinkphone,Aftersale::getMemberPhone); queryWrapper.selectAs(Goodsorder::getLinkaddr,Aftersale::getAddrInfo); queryWrapper.selectAs(Goodsorder::getCode,Aftersale::getOrderCode); queryWrapper.selectAs(Goodsorder::getPayOrderId,Aftersale::getOrderPayNo); queryWrapper.leftJoin(GoodsorderDetail.class,GoodsorderDetail::getId,Aftersale::getDetailId); queryWrapper.leftJoin(Goodsorder.class,Goodsorder::getId,Aftersale::getOrderId); //根据ID查询 queryWrapper.eq(Aftersale::getId,id); queryWrapper.last(" limit 1"); Aftersale model = aftersaleJoinMapper.selectJoinOne( Aftersale.class, queryWrapper); if(model != null && detail){ model.setStatusStr(Constants.AftersaleStatus.getName(model.getStatus())); model.setTypeStr(Constants.AftersaleType.getName(model.getType())); //查詢售后记录对应的附件信息 Map> fileList = multifileService.getOBJAllFileUrl(model.getId(),null, null,Constants.AFTERSALE_FILE); if(fileList!= null){ model.setApplyFileList(fileList.get(Constants.MultiFile.AFTERSALE_APPLY.getKey())); model.setKdFileList(fileList.get(Constants.MultiFile.AFTERSALE_KD.getKey())); } if(StringUtils.isNotBlank(model.getImgurl())){ //商品sku完整图片地址 String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode(); model.setImgurl(path + model.getImgurl()); } } return model; } @Override public long count(Aftersale aftersale) { QueryWrapper wrapper = new QueryWrapper<>(aftersale); return aftersaleMapper.selectCount(wrapper); } public synchronized Long getNextInCode(){ String prefix = DateUtil.getDate(new Date(),"yyyyMMdd"); Integer countNum = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.AFTERSALE_KEY,Integer.class); countNum = Constants.formatIntegerNum(countNum)+1; //更新缓存 RedisUtil.addObject(redisTemplate,Constants.RedisKeys.AFTERSALE_KEY,countNum); String nextIndex =Long.toString( countNum); return Long.parseLong(prefix + StringUtils.leftPad(nextIndex,4,"0")); } }