package com.doumee.service.business.impl; 
 | 
  
 | 
import com.doumee.core.constants.Constants; 
 | 
import com.doumee.core.model.PageData; 
 | 
import com.doumee.core.model.PageWrap; 
 | 
import com.doumee.core.utils.Utils; 
 | 
import com.doumee.core.wx.WxMiniUtilService; 
 | 
import com.doumee.dao.business.RefundMapper; 
 | 
import com.doumee.dao.business.TransactionsMapper; 
 | 
import com.doumee.dao.business.join.RefundJoinMapper; 
 | 
import com.doumee.dao.business.model.*; 
 | 
import com.doumee.dao.business.model.RefundPlatExportVO; 
 | 
import com.doumee.dao.business.vo.GoodsorderExportVO; 
 | 
import com.doumee.dao.system.model.SystemUser; 
 | 
import com.doumee.service.business.RefundService; 
 | 
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.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import com.wechat.pay.java.service.refund.model.RefundNotification; 
 | 
import io.swagger.models.auth.In; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.sql.Ref; 
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.Objects; 
 | 
  
 | 
/** 
 | 
 * 退款信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/09/27 18:06 
 | 
 */ 
 | 
@Service 
 | 
public class RefundServiceImpl implements RefundService { 
 | 
  
 | 
    @Autowired 
 | 
    private RefundMapper refundMapper; 
 | 
    @Autowired 
 | 
    private RefundJoinMapper refundJoinMapper; 
 | 
    @Autowired 
 | 
    private TransactionsMapper transactionsMapper; 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public String create(Refund refund) { 
 | 
        refundMapper.insert(refund); 
 | 
        return refund.getId(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(String id) { 
 | 
        refundMapper.deleteById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(Refund refund) { 
 | 
        UpdateWrapper<Refund> deleteWrapper = new UpdateWrapper<>(refund); 
 | 
        refundMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<String> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        refundMapper.deleteBatchIds(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(Refund refund) { 
 | 
        refundMapper.updateById(refund); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateByIdInBatch(List<Refund> refunds) { 
 | 
        if (CollectionUtils.isEmpty(refunds)) { 
 | 
            return; 
 | 
        } 
 | 
        for (Refund refund: refunds) { 
 | 
            this.updateById(refund); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Refund findById(String id) { 
 | 
        return refundMapper.selectById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Refund findOne(Refund refund) { 
 | 
        QueryWrapper<Refund> wrapper = new QueryWrapper<>(refund); 
 | 
        return refundMapper.selectOne(wrapper.last(" limit 1")); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Refund> findList(Refund refund) { 
 | 
        QueryWrapper<Refund> wrapper = new QueryWrapper<>(refund); 
 | 
        return refundMapper.selectList(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PageData<Refund>  findPlatPage(PageWrap<Refund> pageWrap) { 
 | 
        pageWrap.getModel().setTypeList(new ArrayList<>()); 
 | 
        //强制结算退款 和 结算后退款 
 | 
        pageWrap.getModel().getTypeList().add(Constants.REFUND_TYPE.PLAT_FORCE.getKey()); 
 | 
        pageWrap.getModel().getTypeList().add(Constants.REFUND_TYPE.BACK.getKey()); 
 | 
        pageWrap.getModel().setStatus(Constants.TWO); 
 | 
        IPage<Goodsorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        MPJLambdaWrapper<Refund> queryWrapper = initQueryParamByModel(pageWrap.getModel()); 
 | 
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCreatorName()) 
 | 
                ,SystemUser::getRealname 
 | 
                ,pageWrap.getModel().getCreatorName()); 
 | 
        IPage<Refund> refundIPage = refundJoinMapper.selectJoinPage(page, Refund.class, queryWrapper); 
 | 
        if (!CollectionUtils.isEmpty(refundIPage.getRecords())){ 
 | 
            refundIPage.getRecords().forEach(s->{ 
 | 
                    s.setMoney(Constants.translateMoney(s.getMoney())); 
 | 
                    s.setCanBalance(Constants.translateMoney(s.getCanBalance())); 
 | 
            }); 
 | 
        } 
 | 
        return PageData.from(refundIPage); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<RefundPlatExportVO>  findPlatExportPage( Refund pageWrap) { 
 | 
        pageWrap.setTypeList(new ArrayList<>()); 
 | 
        //强制结算退款 和 结算后退款 
 | 
        pageWrap.getTypeList().add(Constants.REFUND_TYPE.PLAT_FORCE.getKey()); 
 | 
        pageWrap.getTypeList().add(Constants.REFUND_TYPE.BACK.getKey()); 
 | 
        pageWrap.setStatus(Constants.TWO); 
 | 
        MPJLambdaWrapper<Refund> queryWrapper = initQueryParamByModel(pageWrap); 
 | 
  
 | 
        List<Refund> list = refundJoinMapper.selectJoinList(  Refund.class,queryWrapper); 
 | 
        List<RefundPlatExportVO> result = new ArrayList<>(); 
 | 
  
 | 
        if(list!=null){ 
 | 
            for(Refund order : list){ 
 | 
                RefundPlatExportVO vo = new RefundPlatExportVO(); 
 | 
                vo.setId(order.getId()); 
 | 
                vo.setObjId(order.getObjId()); 
 | 
                vo.setOpenid(order.getOpenid()); 
 | 
                vo.setDoneDate(order.getDoneDate()); 
 | 
                vo.setMoney(Constants.formatDecimalNum(order.getMoney()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP)); 
 | 
                vo.setCanBanlance(Constants.formatDecimalNum(order.getCanBalance()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP)); 
 | 
                vo.setOnlineOrderid(order.getOnlineOrderid()); 
 | 
                vo.setPayOnlineOrderid(order.getPayOnlineOrderid()); 
 | 
                vo.setCreatorName(order.getCreatorName()); 
 | 
                vo.setReason(order.getReason()); 
 | 
                result.add(vo); 
 | 
            } 
 | 
        } 
 | 
        return  result; 
 | 
    } 
 | 
  
 | 
    private MPJLambdaWrapper<Refund> initQueryParamByModel(Refund model) { 
 | 
        MPJLambdaWrapper<Refund> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        Utils.MP.blankToNull(model); 
 | 
        //只查询支付成功的 
 | 
        queryWrapper.selectAll(Refund.class); 
 | 
        queryWrapper.selectAs(SystemUser::getRealname, Refund::getCreatorName); 
 | 
        queryWrapper.selectAs(Member::getOpenid, Refund::getOpenid); 
 | 
        queryWrapper.leftJoin(Goodsorder.class, Goodsorder::getId  ,Refund::getObjId); 
 | 
        queryWrapper.leftJoin(Member.class, Member::getId  ,Goodsorder::getMemberId); 
 | 
        queryWrapper.leftJoin(SystemUser.class, SystemUser::getId  ,Refund::getCreator); 
 | 
        //时间段筛选 
 | 
        if (Objects.nonNull(model.getStartDate())) { 
 | 
            queryWrapper.ge(Refund::getDoneDate, Utils.Date.getStart(model.getStartDate())); 
 | 
        } 
 | 
        if (Objects.nonNull(model.getEndDate())) { 
 | 
            queryWrapper.le(Refund::getDoneDate, Utils.Date.getEnd(model.getEndDate())); 
 | 
        } 
 | 
//        queryWrapper.ge(model.getStartDate()!=null, Refund::getDoneDate, model.getStartDate()); 
 | 
//        queryWrapper.le(model.getEndDate()!=null, Refund::getDoneDate, model.getEndDate()); 
 | 
        queryWrapper.eq(model.getCreator() !=null,Refund::getCreator,model.getCreator()); 
 | 
        queryWrapper.eq(model.getStatus() !=null,Refund::getStatus,model.getStatus()); 
 | 
        queryWrapper.in(model.getTypeList() !=null,Refund::getType,model.getTypeList()); 
 | 
        queryWrapper.eq(model.getType() !=null,Refund::getType,model.getType()); 
 | 
        queryWrapper.like(model.getPayOnlineOrderid() !=null,Goodsorder::getOnlineOrderid,model.getPayOnlineOrderid()); 
 | 
        queryWrapper.like(model.getOnlineOrderid() !=null,Refund::getOnlineOrderid,model.getOnlineOrderid()); 
 | 
        queryWrapper.like(model.getOpenid() !=null,Member::getOpenid,model.getOpenid()); 
 | 
        queryWrapper.like(model.getCreatorName() !=null,SystemUser::getRealname,model.getCreatorName()); 
 | 
        queryWrapper.eq(Goodsorder::getIsdeleted,Constants.ZERO); 
 | 
        queryWrapper.orderByDesc(Refund::getDoneDate); 
 | 
        return  queryWrapper; 
 | 
    } 
 | 
    @Override 
 | 
    public PageData<Refund> findPage(PageWrap<Refund> pageWrap) { 
 | 
        IPage<Goodsorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        MPJLambdaWrapper<Refund> queryWrapper = initQueryParamByModel(pageWrap.getModel()); 
 | 
        return PageData.from(refundJoinMapper.selectJoinPage(page, Refund.class,queryWrapper)); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public long count(Refund refund) { 
 | 
        QueryWrapper<Refund> wrapper = new QueryWrapper<>(refund); 
 | 
        return refundMapper.selectCount(wrapper); 
 | 
    } 
 | 
} 
 |