package com.matrix.system.shopXcx.quartz; import com.matrix.component.tools.WxUtils; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.tools.LogUtil; import com.matrix.system.common.constance.AppConstance; import com.matrix.system.hive.plugin.util.CollectionUtils; import com.matrix.system.shopXcx.api.service.WxShopRefundRecordService; import com.matrix.system.shopXcx.bean.*; import com.matrix.system.shopXcx.dao.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 拼团活动自动结束任务 * * @author wzy */ @Configuration public class ShopActivityTimeOutQuartz { @Autowired private ShopActivitiesDao shopActivitiesDao; @Autowired private ShopActivitiesGroupJoinDao shopActivitiesGroupJoinDao; @Autowired private ShopOrderDao shopOrderDao; @Autowired private ShopRefundRecordDao refundRecordDao; @Autowired private WxShopRefundRecordService refundRecordService; @Autowired private ShopActivitiesGroupJoinUserDao shopActivitiesGroupJoinUserDao; @Scheduled(cron = "0 */1 * * * ?") public void executeExt() { LogUtil.info("#拼团活动自动结束任务#"); List actList = shopActivitiesDao.selectShopActivitiesHasEnd(); if (CollectionUtils.isNotEmpty(actList)) { shopActivitiesDao.batchUpdateActStatus(ShopActivities.ACTIVITIES_STATUS_CLOSE, actList); for (ShopActivities shopActivities : actList) { List joins = shopActivitiesGroupJoinDao.selectAllGroupBuyWithUserByActId(shopActivities.getId(), ShopActivitiesGroupJoin.ACTIVITIES_JOIN_ING); if (CollectionUtils.isNotEmpty(joins)) { for (ShopActivitiesGroupJoin groupJoin : joins) { // 需判断虚拟成团 if (shopActivities.getGroupInfo().getGiVirtualGroup() == ShopActivitiesGroupInfo.GROUP_VIRTUAL_Y) { doVirtualGroup(groupJoin); } else { doUnVirtualGroup(groupJoin); } } } } } } /** * 虚拟成团已支付的成团,将未支付的用户的订单取消 * * @param groupJoin */ public void doVirtualGroup(ShopActivitiesGroupJoin groupJoin) { LogUtil.info("#虚拟拼团成团:{}#", groupJoin.getId()); groupJoin.setGjStatus(ShopActivitiesGroupJoin.ACTIVITIES_JOIN_SUCCESS); shopActivitiesGroupJoinDao.updateByModel(groupJoin); List joinUsers = groupJoin.getJoinUserList(); if (CollectionUtils.isNotEmpty(joinUsers)) { List shopOrders = new ArrayList<>(); for (ShopActivitiesGroupJoinUser joinUser : joinUsers) { if (joinUser.getIsHasPay() == ShopActivitiesGroupJoinUser.IS_HAS_PAY_N) { LogUtil.info("#未支付#"); ShopOrder shopOrder = new ShopOrder(); shopOrder.setId(joinUser.getOrderId().intValue()); shopOrder.setOrderStatus(ShopOrder.ORDER_STATUS_CANCEL); shopOrders.add(shopOrder); joinUser.setIsHasCancel(ShopActivitiesGroupJoinUser.IS_HAS_CANCEL_Y); shopActivitiesGroupJoinUserDao.updateByModel(joinUser); } } if (CollectionUtils.isNotEmpty(shopOrders)) { shopOrderDao.batchUpdateOrderStatus(shopOrders); } } } /** * 处理不是虚拟成团的拼团。将未成团的所有用户下的单更新状态为取消,并已付款用户则退款 * * @param groupJoin */ @Transactional public void doUnVirtualGroup(ShopActivitiesGroupJoin groupJoin) { LogUtil.info("#非虚拟拼团逻辑处理#"); groupJoin.setGjStatus(ShopActivitiesGroupJoin.ACTIVITIES_JOIN_FAIL); shopActivitiesGroupJoinDao.updateByModel(groupJoin); List joinUsers = groupJoin.getJoinUserList(); if (CollectionUtils.isNotEmpty(joinUsers)) { List orders = new ArrayList<>(); for (ShopActivitiesGroupJoinUser joinUser : joinUsers) { ShopOrder shopOrder = new ShopOrder(); shopOrder.setId(joinUser.getOrderId().intValue()); ShopOrder hasShopOrder = shopOrderDao.selectById(joinUser.getOrderId().intValue()); shopOrder.setOrderStatus(ShopOrder.ORDER_STATUS_CANCEL); orders.add(shopOrder); // TODO 退款逻辑 if (joinUser.getIsHasPay() == ShopActivitiesGroupJoinUser.IS_HAS_PAY_Y) { LogUtil.info("#已付款退款逻辑#"); ShopRefundRecord refundRecord = new ShopRefundRecord(); refundRecord.setCreateBy(MatrixConstance.SYSTEM_USER); refundRecord.setUpdateBy(MatrixConstance.SYSTEM_USER); refundRecord.setUserId(joinUser.getUserId()); refundRecord.setRefundNo(WxUtils.getOrderNum()); refundRecord.setOrderId(joinUser.getOrderId().intValue()); refundRecord.setApplyTime(new Date()); refundRecord.setAuditStatus(AppConstance.REFUND_NOT_AUDITED); refundRecord.setRefundMoney(hasShopOrder.getOrderMoney()); refundRecord.setRefundStatus(AppConstance.REFUND_PROCESSING); refundRecordDao.insert(refundRecord); refundRecordService.refundToUser(refundRecord.getId().toString(), refundRecord); } // joinUser.setIsHasPay(ShopActivitiesGroupJoinUser.IS_HAS_PAY_TIME_OUT); joinUser.setIsHasCancel(ShopActivitiesGroupJoinUser.IS_HAS_CANCEL_Y); shopActivitiesGroupJoinUserDao.updateByModel(joinUser); } shopOrderDao.batchUpdateOrderStatus(orders); } } }