package com.nova.sankuai.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nova.sankuai.domain.api.yangqianguan.YqgUtil; import com.nova.sankuai.domain.api.yangqianguan.dto.RepayResultReturnDto; import com.nova.sankuai.domain.entity.YqgRepayOrder; import com.nova.sankuai.domain.entity.YqgRepayOrderDetail; import com.nova.sankuai.infra.mapper.YqgRepayOrderDetailMapper; import com.nova.sankuai.infra.mapper.YqgRepayOrderMapper; import com.nova.sankuai.service.IYqgRepayOrderService; import lombok.AllArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; /** * @author weikangdi * @create 2022/6/9 */ @Service @AllArgsConstructor public class YqgRepayOrderServiceImpl extends ServiceImpl implements IYqgRepayOrderService { private final YqgRepayOrderDetailMapper yqgRepayOrderDetailMapper; private final YqgRepayOrderMapper yqgRepayOrderMapper; private static final Logger yqgLog = LoggerFactory.getLogger("yqgLogger"); private static final int CLOSE_LIMIT = 30; private final YqgUtil yqgUtil; @Override @Transactional(rollbackFor = Exception.class) public void createRepayOrderDetail(YqgRepayOrder yqgRepayOrder, List termList) { for (String term : termList) { YqgRepayOrderDetail yqgRepayOrderDetail = new YqgRepayOrderDetail(); yqgRepayOrderDetail.setOrderNo(yqgRepayOrder.getOrderNo()); yqgRepayOrderDetail.setCapitalResultId(yqgRepayOrder.getCapitalResultId()); yqgRepayOrderDetail.setStatus(YqgRepayOrderDetail.STATUS_WAIT); yqgRepayOrderDetail.setPeriodNo(term); yqgRepayOrderDetail.setRepayApplyNo(yqgRepayOrder.getRepayApplyNo()); yqgRepayOrderDetail.setRepayNo(yqgRepayOrder.getRepayNo()); yqgRepayOrderDetail.setCreationDate(new Date()); yqgRepayOrderDetail.setLastUpdatedDate(new Date()); yqgRepayOrderDetailMapper.insert(yqgRepayOrderDetail); } } @Override public void closeYqgRepayOrder() { String logNumber = IdUtil.randomUUID(); Date date = DateUtil.offsetMinute(new Date(), -CLOSE_LIMIT); yqgLog.info(logNumber + "定时关闭洋钱罐过期还款申请订单开始: " + "关闭" + date + "之前创建的初始化还款订单"); List yqgRepayOrders = yqgRepayOrderMapper.selectCloseOrder(date); for (YqgRepayOrder yqgRepayOrder : yqgRepayOrders) { try { yqgRepayOrder.setLastUpdatedDate(new Date()); yqgRepayOrder.setStatus(YqgRepayOrder.STATUS_FAIL); yqgRepayOrder.setRemark("短信校验超时,关闭申请"); yqgRepayOrderMapper.update(null, Wrappers.lambdaUpdate() .set(YqgRepayOrder::getLastUpdatedDate, yqgRepayOrder.getLastUpdatedDate()) .set(YqgRepayOrder::getStatus, yqgRepayOrder.getStatus()) .set(YqgRepayOrder::getRemark, yqgRepayOrder.getRemark()) .eq(YqgRepayOrder::getId, yqgRepayOrder.getId())); RepayResultReturnDto feedBackDto = RepayResultReturnDto.parseDto(yqgRepayOrder, null); if (feedBackDto != null) { yqgUtil.repayResultFeedBack(feedBackDto, yqgLog, logNumber); } } catch (Exception e) { yqgLog.error(logNumber + "定时关闭洋钱罐过期还款申请订单失败:" + yqgRepayOrder.toString(), e); } } yqgLog.info(logNumber + "定时关闭洋钱罐过期还款申请订单结束"); } }