| 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<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 | 
|      */ | 
|     @Transactional | 
|     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); | 
|         } | 
|     } | 
| } |