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.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 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 deleteWrapper = new UpdateWrapper<>(refund); refundMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } refundMapper.deleteBatchIds(ids); } @Override public void updateById(Refund refund) { refundMapper.updateById(refund); } @Override public void updateByIdInBatch(List 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 wrapper = new QueryWrapper<>(refund); return refundMapper.selectOne(wrapper.last(" limit 1")); } @Override public List findList(Refund refund) { QueryWrapper wrapper = new QueryWrapper<>(refund); return refundMapper.selectList(wrapper); } @Override public PageData findPlatPage(PageWrap 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 page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = initQueryParamByModel(pageWrap.getModel()); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCreatorName()) ,SystemUser::getRealname ,pageWrap.getModel().getCreatorName()); IPage 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 void autoCancelRefunOrder(){ Date date = new Date(System.currentTimeMillis()-5*60L*1000L); refundMapper.update(null, new UpdateWrapper().lambda() .eq(Refund::getStatus,Constants.ZERO) .lt(Refund::getCreateDate,date) .set(Refund::getStatus,Constants.ONE) .set(Refund::getEditDate,new Date()) .set(Refund::getInfo,"超时未回调,自动取消") ); } @Override public List 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 queryWrapper = initQueryParamByModel(pageWrap); List list = refundJoinMapper.selectJoinList( Refund.class,queryWrapper); List 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 initQueryParamByModel(Refund model) { MPJLambdaWrapper 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 findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = initQueryParamByModel(pageWrap.getModel()); return PageData.from(refundJoinMapper.selectJoinPage(page, Refund.class,queryWrapper)); } @Override public long count(Refund refund) { QueryWrapper wrapper = new QueryWrapper<>(refund); return refundMapper.selectCount(wrapper); } }