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.beans.factory.annotation.Value;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
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;
|
|
@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(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);
|
}
|
}
|
}
|