935090232@qq.com
2021-01-09 2e3c12ca3a7241f498c32121cb1572502c998d0d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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);
        }
    }
}