| | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DateUnit; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.xcong.excoin.common.contants.AppContants; |
| | | import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao; |
| | | import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; |
| | | import com.xcong.excoin.modules.otc.dao.OtcEntrustOrderDao; |
| | | import com.xcong.excoin.modules.otc.dao.OtcMarketBussinessDao; |
| | | import com.xcong.excoin.modules.otc.dao.OtcOrderDao; |
| | | import com.xcong.excoin.modules.otc.dao.OtcSettingDao; |
| | | import com.xcong.excoin.modules.otc.entity.OtcEntrustOrder; |
| | | import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness; |
| | | import com.xcong.excoin.modules.otc.entity.OtcOrder; |
| | | import com.xcong.excoin.modules.otc.entity.OtcSetting; |
| | | import com.xcong.excoin.modules.otc.service.OtcOrderService; |
| | | import com.xcong.excoin.utils.RedisUtils; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | |
| | | private OtcMarketBussinessDao otcMarketBussinessDao; |
| | | @Autowired |
| | | private MemberWalletCoinDao memberWalletCoinDao; |
| | | |
| | | @Autowired |
| | | private OtcSettingDao otcSettingDao; |
| | | @Autowired |
| | | private RedisUtils redisUtils; |
| | | |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | public void autoCancelOrder() { |
| | | List<OtcOrder> otcOrders = otcOrderDao.selectOrderListWithStatusAndType(OtcEntrustOrder.ORDER_TYPE_B, OtcOrder.STATUS_SUBMIT); |
| | | if (CollUtil.isNotEmpty(otcOrders)) { |
| | | for (OtcOrder otcOrder : otcOrders) { |
| | | long between = DateUtil.between(new Date(), DateUtil.offsetMinute(otcOrder.getCreateTime(), 30), DateUnit.SECOND, false); |
| | | long between = DateUtil.between(new Date(), DateUtil.offsetMinute(otcOrder.getCreateTime(), 3), DateUnit.SECOND, false); |
| | | |
| | | if (between <= 0) { |
| | | OtcOrder saleOrder = otcOrderDao.selectOrderByOrderNoAndType(otcOrder.getOrderNo(), OtcEntrustOrder.ORDER_TYPE_S); |
| | |
| | | |
| | | otcEntrustOrderDao.updateRemainAmount(otcOrder.getEntrustOrderId(), otcOrder.getCoinAmount()); |
| | | otcOrderDao.updateOrderStatusByOrderNo(OtcOrder.STATUS_CANCEL, null, otcOrder.getOrderNo()); |
| | | |
| | | Long memberId; |
| | | if (otcOrder.getMemberId().equals(otcOrder.getEntrustMemberId())) { |
| | | memberId = otcOrder.getOppositeMemberId(); |
| | | } else { |
| | | memberId = otcOrder.getMemberId(); |
| | | } |
| | | |
| | | OtcSetting setting = otcSettingDao.selectById(1L); |
| | | String times = redisUtils.getString(AppContants.OTC_ORDER_CANCEL_TIMES + memberId); |
| | | if (StrUtil.isNotBlank(times)) { |
| | | int i = Integer.parseInt(times); |
| | | i++; |
| | | if (i >= setting.getCancellNum()) { |
| | | redisUtils.set(AppContants.OTC_ORDER_CANCEL_TIMES + memberId, i, 86400); |
| | | } else { |
| | | redisUtils.set(AppContants.OTC_ORDER_CANCEL_TIMES + memberId, i); |
| | | } |
| | | } else { |
| | | redisUtils.set(AppContants.OTC_ORDER_CANCEL_TIMES + memberId, 1, 86400); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | Integer totalCnt = otcOrderDao.selectTotalOrderCount(mb.getMemberId(), null); |
| | | // 完成率 |
| | | Integer finishCnt = otcOrderDao.selectTotalOrderCount(mb.getMemberId(), OtcOrder.STATUS_FINISH); |
| | | if (totalCnt != null) { |
| | | if (totalCnt != null && totalCnt != 0) { |
| | | BigDecimal finishRatio = BigDecimal.valueOf(finishCnt).divide(BigDecimal.valueOf(totalCnt), 4, BigDecimal.ROUND_DOWN); |
| | | mb.setFinishRatio(finishRatio); |
| | | } |