package com.matrix.system.shopXcx.quartz; 
 | 
  
 | 
import com.matrix.component.tools.WxUtils; 
 | 
import com.matrix.core.tools.LogUtil; 
 | 
import com.matrix.core.tools.WebUtil; 
 | 
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.beans.factory.annotation.Value; 
 | 
import org.springframework.context.annotation.Configuration; 
 | 
import org.springframework.scheduling.annotation.EnableScheduling; 
 | 
import org.springframework.scheduling.annotation.Scheduled; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 拼团活动自动结束任务 
 | 
 * 
 | 
 * @author wzy 
 | 
 */ 
 | 
@Configuration 
 | 
@EnableScheduling 
 | 
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; 
 | 
  
 | 
    @Value("${scheduling.enabled}") 
 | 
    private boolean taskSwitch; 
 | 
  
 | 
  
 | 
    @Scheduled(cron = "0 */1 * * * ?") 
 | 
    public void executeExt() { 
 | 
        if (taskSwitch) { 
 | 
            LogUtil.info("#拼团活动自动结束任务#"); 
 | 
            List<ShopActivities> actList = shopActivitiesDao.selectShopActivitiesHasEnd(); 
 | 
            if (CollectionUtils.isNotEmpty(actList)) { 
 | 
                shopActivitiesDao.batchUpdateActStatus(ShopActivities.ACTIVITIES_STATUS_CLOSE, actList); 
 | 
                for (ShopActivities shopActivities : actList) { 
 | 
                    List<ShopActivitiesGroupJoin> 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<ShopActivitiesGroupJoinUser> joinUsers = groupJoin.getJoinUserList(); 
 | 
        if (CollectionUtils.isNotEmpty(joinUsers)) { 
 | 
            List<ShopOrder> 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 
 | 
     */ 
 | 
    public void doUnVirtualGroup(ShopActivitiesGroupJoin groupJoin) { 
 | 
        LogUtil.info("#非虚拟拼团逻辑处理#"); 
 | 
        groupJoin.setGjStatus(ShopActivitiesGroupJoin.ACTIVITIES_JOIN_FAIL); 
 | 
        shopActivitiesGroupJoinDao.updateByModel(groupJoin); 
 | 
        List<ShopActivitiesGroupJoinUser> joinUsers = groupJoin.getJoinUserList(); 
 | 
        if (CollectionUtils.isNotEmpty(joinUsers)) { 
 | 
            List<ShopOrder> 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(joinUser.getUserId()); 
 | 
                    refundRecord.setUpdateBy(joinUser.getUserId()); 
 | 
                    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); 
 | 
        } 
 | 
    } 
 | 
} 
 |