|
@@ -171,6 +171,7 @@ public class FsCouponScheduleServiceImpl implements IFsCouponScheduleService
|
|
* 发放优惠券
|
|
* 发放优惠券
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
|
|
+ @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
|
|
public void issueCoupon() {
|
|
public void issueCoupon() {
|
|
List<FsCouponSchedule> fsCouponSchedules = fsCouponScheduleMapper.selectPendingCouponList();
|
|
List<FsCouponSchedule> fsCouponSchedules = fsCouponScheduleMapper.selectPendingCouponList();
|
|
List<FsCouponScheduleLog> logList = new ArrayList<>();
|
|
List<FsCouponScheduleLog> logList = new ArrayList<>();
|
|
@@ -188,17 +189,28 @@ public class FsCouponScheduleServiceImpl implements IFsCouponScheduleService
|
|
scheduleLog.setRetryCountBefore(fsCouponSchedule.getRetryCount());
|
|
scheduleLog.setRetryCountBefore(fsCouponSchedule.getRetryCount());
|
|
scheduleLog.setOperator("SYSTEM");
|
|
scheduleLog.setOperator("SYSTEM");
|
|
scheduleLog.setOperationTime(LocalDateTime.now());
|
|
scheduleLog.setOperationTime(LocalDateTime.now());
|
|
-
|
|
|
|
- FsStoreCouponReceiveParam param = new FsStoreCouponReceiveParam();
|
|
|
|
|
|
+ // 获取优惠券名称
|
|
|
|
+ Set<Long> couponIds = fsCouponSchedule.getCouponId();
|
|
|
|
+ if(CollectionUtils.isEmpty(couponIds)){
|
|
|
|
+ log.info("当前优惠券没有被选择!已经跳过");
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ // 优惠券id (有多张这里只取第一张)
|
|
|
|
+ Long couponId = couponIds.stream().findFirst().get();
|
|
|
|
+ // 找到该优惠券
|
|
|
|
+ FsStoreCouponIssue fsStoreCouponIssue = fsStoreCouponIssueService.selectFsStoreCouponIssueByCouponId(couponId);
|
|
Long userId = fsCouponSchedule.getUserId();
|
|
Long userId = fsCouponSchedule.getUserId();
|
|
// 领取优惠券
|
|
// 领取优惠券
|
|
|
|
+ FsStoreCouponReceiveParam param = new FsStoreCouponReceiveParam();
|
|
|
|
+ param.setId(fsStoreCouponIssue.getId());
|
|
R receive = fsStoreCouponIssueService.receive(String.valueOf(userId), param);
|
|
R receive = fsStoreCouponIssueService.receive(String.valueOf(userId), param);
|
|
|
|
+
|
|
Set<String> operationTypeSet = new HashSet<>();
|
|
Set<String> operationTypeSet = new HashSet<>();
|
|
if(fsCouponSchedule.getRetryCount()>0) {
|
|
if(fsCouponSchedule.getRetryCount()>0) {
|
|
operationTypeSet.add(IcgScheduleOperationTypeEnum.RETRY.getCode());
|
|
operationTypeSet.add(IcgScheduleOperationTypeEnum.RETRY.getCode());
|
|
}
|
|
}
|
|
// 如果不等于200表示失败了
|
|
// 如果不等于200表示失败了
|
|
- if(ObjectUtil.equal(200,receive.get("code"))){
|
|
|
|
|
|
+ if(ObjectUtil.notEqual(200,receive.get("code"))){
|
|
fsCouponSchedule.setErrorMessage(JSON.toJSONString(receive));
|
|
fsCouponSchedule.setErrorMessage(JSON.toJSONString(receive));
|
|
fsCouponSchedule.setStatus(IcgProcessStatusEnum.FAILED.getCode());
|
|
fsCouponSchedule.setStatus(IcgProcessStatusEnum.FAILED.getCode());
|
|
fsCouponSchedule.setRetryCount(fsCouponSchedule.getRetryCount()+1);
|
|
fsCouponSchedule.setRetryCount(fsCouponSchedule.getRetryCount()+1);
|
|
@@ -208,11 +220,16 @@ public class FsCouponScheduleServiceImpl implements IFsCouponScheduleService
|
|
|
|
|
|
operationTypeSet.add(IcgScheduleOperationTypeEnum.ERROR.getCode());
|
|
operationTypeSet.add(IcgScheduleOperationTypeEnum.ERROR.getCode());
|
|
} else {
|
|
} else {
|
|
- fsCouponSchedule.setStatus(IcgProcessStatusEnum.SUCCESS.getCode());
|
|
|
|
|
|
+ if(fsCouponSchedule.getCount() >= fsCouponSchedule.getMonth()){
|
|
|
|
+ fsCouponSchedule.setStatus(IcgProcessStatusEnum.FINISHED.getCode());
|
|
|
|
+ } else {
|
|
|
|
+ fsCouponSchedule.setStatus(IcgProcessStatusEnum.SUCCESS.getCode());
|
|
|
|
+ }
|
|
fsCouponSchedule.setActualSendTime(LocalDateTime.now());
|
|
fsCouponSchedule.setActualSendTime(LocalDateTime.now());
|
|
fsCouponSchedule.setSendTime(fsCouponSchedule.getActualSendTime().plusMonths(1));
|
|
fsCouponSchedule.setSendTime(fsCouponSchedule.getActualSendTime().plusMonths(1));
|
|
fsCouponSchedule.setCount(fsCouponSchedule.getCount()+1);
|
|
fsCouponSchedule.setCount(fsCouponSchedule.getCount()+1);
|
|
-
|
|
|
|
|
|
+ // 清空错误信息
|
|
|
|
+ fsCouponSchedule.setErrorMessage(null);
|
|
scheduleLog.setStatusAfter(IcgProcessStatusEnum.SUCCESS.getCode());
|
|
scheduleLog.setStatusAfter(IcgProcessStatusEnum.SUCCESS.getCode());
|
|
scheduleLog.setActualSendTime(fsCouponSchedule.getActualSendTime());
|
|
scheduleLog.setActualSendTime(fsCouponSchedule.getActualSendTime());
|
|
scheduleLog.setSendTimeAfter(fsCouponSchedule.getSendTime());
|
|
scheduleLog.setSendTimeAfter(fsCouponSchedule.getSendTime());
|
|
@@ -231,15 +248,10 @@ public class FsCouponScheduleServiceImpl implements IFsCouponScheduleService
|
|
// 状态等待执行
|
|
// 状态等待执行
|
|
notifyTask.setStatus(MiniAppNotifyTaskStatusEnum.WAITING.getValue());
|
|
notifyTask.setStatus(MiniAppNotifyTaskStatusEnum.WAITING.getValue());
|
|
notifyTask.setRetryCount(0);
|
|
notifyTask.setRetryCount(0);
|
|
|
|
+ notifyTask.setMaxRetries(3);
|
|
|
|
+ notifyTask.setUpdateTime(LocalDateTime.now());
|
|
Map<String, TemplateMessageSendRequestDTO.TemplateDataValue> data = new HashMap<>();
|
|
Map<String, TemplateMessageSendRequestDTO.TemplateDataValue> data = new HashMap<>();
|
|
- // 获取优惠券名称
|
|
|
|
- Set<Long> couponIds = fsCouponSchedule.getCouponId();
|
|
|
|
- if(CollectionUtils.isEmpty(couponIds)){
|
|
|
|
- log.info("当前优惠券没有被选择!已经跳过");
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- // 优惠券id (有多张这里只取第一张)
|
|
|
|
- Long couponId = couponIds.stream().findFirst().get();
|
|
|
|
|
|
+
|
|
|
|
|
|
TemplateMessageSendRequestDTO.TemplateDataValue couponName = new TemplateMessageSendRequestDTO.TemplateDataValue();
|
|
TemplateMessageSendRequestDTO.TemplateDataValue couponName = new TemplateMessageSendRequestDTO.TemplateDataValue();
|
|
FsStoreCoupon fsStoreCoupon = fsStoreCouponMapper.selectFsStoreCouponById(couponId);
|
|
FsStoreCoupon fsStoreCoupon = fsStoreCouponMapper.selectFsStoreCouponById(couponId);
|
|
@@ -253,17 +265,22 @@ public class FsCouponScheduleServiceImpl implements IFsCouponScheduleService
|
|
// 获取优惠券时间范围
|
|
// 获取优惠券时间范围
|
|
TemplateMessageSendRequestDTO.TemplateDataValue couponValidate = new TemplateMessageSendRequestDTO.TemplateDataValue();
|
|
TemplateMessageSendRequestDTO.TemplateDataValue couponValidate = new TemplateMessageSendRequestDTO.TemplateDataValue();
|
|
|
|
|
|
- FsStoreCouponIssue fsStoreCouponIssue = fsStoreCouponIssueService.selectFsStoreCouponIssueByCouponId(couponId);
|
|
|
|
|
|
+
|
|
if(ObjectUtil.isNotNull(fsStoreCouponIssue)){
|
|
if(ObjectUtil.isNotNull(fsStoreCouponIssue)){
|
|
- String beginTime = fsStoreCouponIssue.getBeginTime();
|
|
|
|
- String endTime = fsStoreCouponIssue.getEndTime();
|
|
|
|
- if(StringUtil.isNotEmpty(beginTime) && StringUtil.isNotEmpty(endTime)){
|
|
|
|
|
|
+ Date beginTime = fsStoreCouponIssue.getStartTime();
|
|
|
|
+ Date endTime = fsStoreCouponIssue.getLimitTime();
|
|
|
|
+ String beginTimeStr = DateUtil.format(beginTime, "yyyy-MM-dd");
|
|
|
|
+ String endTimeStr = DateUtil.format(endTime, "yyyy-MM-dd");
|
|
|
|
+
|
|
|
|
+ if(StringUtil.isNotEmpty(beginTimeStr) && StringUtil.isNotEmpty(endTimeStr)){
|
|
couponValidate.setValue(beginTime + " ~ " + endTime);
|
|
couponValidate.setValue(beginTime + " ~ " + endTime);
|
|
|
|
+ } else {
|
|
|
|
+ couponValidate.setValue("#");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 备注消息
|
|
// 备注消息
|
|
TemplateMessageSendRequestDTO.TemplateDataValue couponMark = new TemplateMessageSendRequestDTO.TemplateDataValue();
|
|
TemplateMessageSendRequestDTO.TemplateDataValue couponMark = new TemplateMessageSendRequestDTO.TemplateDataValue();
|
|
- couponMark.setValue("");
|
|
|
|
|
|
+ couponMark.setValue("无");
|
|
|
|
|
|
// 面值
|
|
// 面值
|
|
TemplateMessageSendRequestDTO.TemplateDataValue couponPrice = new TemplateMessageSendRequestDTO.TemplateDataValue();
|
|
TemplateMessageSendRequestDTO.TemplateDataValue couponPrice = new TemplateMessageSendRequestDTO.TemplateDataValue();
|