...
|
...
|
@@ -1018,7 +1018,7 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport |
|
|
UnionShareOrders unionShareOrders = unionShareOrdersMapper.selectByCode(bo.getOrderCode());
|
|
|
|
|
|
//新增
|
|
|
if (unionShareOrders == null) {
|
|
|
if (null == unionShareOrders) {
|
|
|
insertOrder(bo);
|
|
|
//清缓存
|
|
|
clearShareOrderRedis(bo.getPromoteUid());
|
...
|
...
|
@@ -1037,7 +1037,7 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport |
|
|
logger.info("saveOrUpdateOrder enter,update nothing,req is {}",bo);
|
|
|
//没有更新到数据,应该有并发更新事件,查询新的再试一下
|
|
|
unionShareOrders = unionShareOrdersMapper.selectByCode(bo.getOrderCode());
|
|
|
if (unionShareOrders == null) {
|
|
|
if (null == unionShareOrders) {
|
|
|
logger.info("saveOrUpdateOrder end,can not find the orderCode,req is {}",bo);
|
|
|
//查不到数据,不该出现的情况,目前没有硬删数据的途径
|
|
|
return;
|
...
|
...
|
@@ -1049,82 +1049,183 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport |
|
|
}
|
|
|
result=unionShareOrdersMapper.updateStatusById(unionShareOrders.getId(), unionShareOrders.getStatus(), bo.getStatus(), DateUtil.getCurrentTimeSecond());
|
|
|
}
|
|
|
if (result > 0 &&ShareOrdersStatusEnum.isFailOrder(unionShareOrders.getStatus())) {
|
|
|
rehandExtraActivity(unionShareOrders);
|
|
|
if (result > 0 && unionShareOrders.getExtraActivityId() != null) {
|
|
|
if (ShareOrdersStatusEnum.isFailOrder(unionShareOrders.getStatus())) {
|
|
|
//订单不可参与活动,重新处理该单参与的满单返
|
|
|
rehandExtraActivity(unionShareOrders);
|
|
|
}
|
|
|
if (ShareOrdersStatusEnum.CAN_SETTLE.getCode().equals(unionShareOrders.getStatus())
|
|
|
|| ShareOrdersStatusEnum.getLevelByCode(unionShareOrders.getStatus()) > ShareOrdersStatusEnum.CAN_SETTLE.getLevel()) {
|
|
|
//有效订单已完结,判断是否需要把该单的满返活动状态改成可结算
|
|
|
changeExtraActivityStatus(unionShareOrders);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//清缓存
|
|
|
clearShareOrderRedis(bo.getPromoteUid());
|
|
|
}
|
|
|
|
|
|
//重新处理订单相关的满单返活动
|
|
|
private void rehandExtraActivity(UnionShareOrders unionShareOrders) {
|
|
|
UnionShareOrdersActivityLogs updateLogs = new UnionShareOrdersActivityLogs();
|
|
|
updateLogs.setOrderId(unionShareOrders.getId());
|
|
|
updateLogs.setUpdateTime(DateUtil.getCurrentTimeSecond());
|
|
|
updateLogs.setStatus(0);//类型:1-有效,0-作废
|
|
|
unionShareOrdersActivityLogsMapper.updateStatusByOrderId(updateLogs);
|
|
|
//查询是否参与满单返
|
|
|
List<UnionShareOrdersActivityLogs> activityLogs=unionShareOrdersActivityLogsMapper.selectByOrderCode(unionShareOrders.getOrderCode());
|
|
|
/**
|
|
|
* 获取订单参与的满单返活动返利单
|
|
|
* */
|
|
|
private UnionShareOrders getRelatedActivityOrder(UnionShareOrders unionShareOrders) {
|
|
|
UnionShareOrdersActivity activity = queryActivity(unionShareOrders.getExtraActivityId());
|
|
|
if (null == activity || activity.getType() != 3) {
|
|
|
return null;
|
|
|
}
|
|
|
//
|
|
|
UnionShareOrders activityOrder = queryOrderActivity(unionShareOrders.getOrderUid(), unionShareOrders.getPromoteUid(), unionShareOrders.getActivityId());
|
|
|
if (null == activityOrder) {
|
|
|
return null;
|
|
|
}
|
|
|
return activityOrder;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取订单参与的满单返活动日志
|
|
|
* */
|
|
|
private UnionShareOrdersActivityLogs getRelatedActivityLogs(UnionShareOrders unionShareOrders) {
|
|
|
UnionShareOrders activityOrder = getRelatedActivityOrder(unionShareOrders);
|
|
|
if (null == activityOrder) {
|
|
|
return null;
|
|
|
}
|
|
|
List<UnionShareOrdersActivityLogs> activityLogs=unionShareOrdersActivityLogsMapper.selectByOrderId(activityOrder.getId());
|
|
|
if (CollectionUtils.isEmpty(activityLogs)) {
|
|
|
return null;
|
|
|
}
|
|
|
return activityLogs.get(0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 判断是否需要重新处理订单相关的满单返活动
|
|
|
* */
|
|
|
private void rehandExtraActivity(UnionShareOrders unionShareOrders) {
|
|
|
|
|
|
//判断满返是否作废,若作废,查询是否满足该活动其他门槛条件
|
|
|
UnionShareOrdersActivityLogs activityLog = getRelatedActivityLogs(unionShareOrders);
|
|
|
if (null == activityLog) {
|
|
|
return;
|
|
|
}
|
|
|
for(UnionShareOrdersActivityLogs activityLog:activityLogs){
|
|
|
//活动类型:1-订单返利比例升级,2-订单返利翻x倍,3-额外返
|
|
|
if (activityLog.getActivityType() != 3) {
|
|
|
continue;
|
|
|
}
|
|
|
String[] orders=activityLog.getOrders().split(",");
|
|
|
for (int i = 0; i < orders.length; i++) {
|
|
|
if (orders[i].equals(unionShareOrders.getOrderCode())) {
|
|
|
//判断满返是否作废,若作废,查询是否满足该活动低一阶段条件
|
|
|
// 获取某时间段可参与活动的单数
|
|
|
List<String> orderCodeList = Arrays.stream(orders).collect(Collectors.toList());
|
|
|
List<UnionShareOrders> orderList = unionShareOrdersMapper.selectListByOrderCodesForActivity(orderCodeList);
|
|
|
UnionShareOrdersActivityItem item = unionShareOrdersActivityItemMapper.selectByPrimaryKey(activityLog.getActivityItemId());
|
|
|
if (orderList.size() <item.getOrderMinNum()) {
|
|
|
//作废已参加的满单活动
|
|
|
UnionShareOrdersActivityLogs updatelogs = new UnionShareOrdersActivityLogs();
|
|
|
updatelogs.setId(activityLog.getId());
|
|
|
updatelogs.setStatus(0);//类型:1-有效,0-作废
|
|
|
updateLogs.setUpdateTime(DateUtil.getCurrentTimeSecond());
|
|
|
unionShareOrdersActivityLogsMapper.updateByPrimaryKeySelective(updatelogs);
|
|
|
|
|
|
//重新参加活动
|
|
|
boolean joinResult = joinExtraActivity(activityLog.getOrderUid(), activityLog.getPromoteUid(), activityLog.getActivityId());
|
|
|
if (!joinResult) {
|
|
|
//已不满足此活动条件
|
|
|
// clearOrderRelated(orderCodeList);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
List<String> orderCodeList = Arrays.stream(activityLog.getOrders().split(",")).collect(Collectors.toList());
|
|
|
// 获取参与此活动的有效订单
|
|
|
List<UnionShareOrders> orderList = unionShareOrdersMapper.selectListByOrderCodesForActivity(orderCodeList);
|
|
|
UnionShareOrdersActivityItem item = queryActivityItem(activityLog.getActivityItemId());
|
|
|
if (orderList.size() <item.getOrderMinNum()) {
|
|
|
reJoinExtraActivity(activityLog);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private boolean reJoinExtraActivity(UnionShareOrdersActivityLogs activityLog){
|
|
|
int now = DateUtil.getCurrentTimeSecond();
|
|
|
//作废已参加的满单活动
|
|
|
UnionShareOrdersActivityLogs updatelogs = new UnionShareOrdersActivityLogs();
|
|
|
updatelogs.setId(activityLog.getId());
|
|
|
updatelogs.setStatus(0);//类型:1-有效,0-作废
|
|
|
updatelogs.setUpdateTime(now);
|
|
|
unionShareOrdersActivityLogsMapper.updateByPrimaryKeySelective(updatelogs);
|
|
|
unionShareOrdersMapper.updateStatusById(activityLog.getOrderId(), ShareOrdersStatusEnum.PAY.getCode(), ShareOrdersStatusEnum.ACTIVITY_DISCARD.getCode(), now);
|
|
|
|
|
|
//尝试重新参加活动
|
|
|
boolean joinResult = joinExtraActivity(activityLog.getOrderUid(), activityLog.getPromoteUid(), activityLog.getActivityId());
|
|
|
if (!joinResult) {
|
|
|
//已不满足此活动条件
|
|
|
// clearOrderRelated(orderCodeList);
|
|
|
}
|
|
|
//todo 清缓存
|
|
|
return joinResult;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 尝试更新订单参与的,满返活动单的状态
|
|
|
* */
|
|
|
private boolean changeExtraActivityStatus(UnionShareOrders unionShareOrders) {
|
|
|
UnionShareOrdersActivityLogs activityLog = getRelatedActivityLogs(unionShareOrders);
|
|
|
if (null == activityLog) {
|
|
|
return false;
|
|
|
}
|
|
|
int now = DateUtil.getCurrentTimeSecond();
|
|
|
List<String> orderCodeList = Arrays.stream(activityLog.getOrders().split(",")).collect(Collectors.toList());
|
|
|
// 获取参与此活动的有效订单
|
|
|
List<UnionShareOrders> orderList = unionShareOrdersMapper.selectListByOrderCodesForActivity(orderCodeList);
|
|
|
for(UnionShareOrders order :orderList ) {
|
|
|
if (order.getStatus().equals(ShareOrdersStatusEnum.PAY.getCode())) {
|
|
|
//活动满单返有已支付不可结算的订单,活动返利还不可以结算
|
|
|
return false;
|
|
|
}
|
|
|
//一个订单最多可以参加一个满单返活动
|
|
|
return;
|
|
|
}
|
|
|
UnionShareOrdersActivityItem item = queryActivityItem(activityLog.getActivityItemId());
|
|
|
if (orderList.size() < item.getOrderMinNum()) {
|
|
|
//订单有效数不符合参加的满单活动,warn
|
|
|
return reJoinExtraActivity(activityLog);
|
|
|
}
|
|
|
//更新满返单状态为可结算
|
|
|
unionShareOrdersMapper.updateStatusById(activityLog.getOrderId(), ShareOrdersStatusEnum.PAY.getCode(), ShareOrdersStatusEnum.CAN_SETTLE.getCode(), now);
|
|
|
//清缓存
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
//查询进行中的活动
|
|
|
private List<UnionShareOrdersActivity> queryActivity() {
|
|
|
//todo 读写缓存
|
|
|
List<UnionShareOrdersActivity> activities=unionShareOrdersActivityMapper.selectByDate(DateUtil.getCurrentTimeSecond());
|
|
|
return activities;
|
|
|
}
|
|
|
//获取某时间段可参与活动的单数
|
|
|
private List<UnionShareOrders> queryUidActivity(int orderUid,int promoteUid,int beginTime,int endTime) {
|
|
|
//todo 读写缓存
|
|
|
List<UnionShareOrders> orders = unionShareOrdersMapper.selectListByOrderUidForActivity(beginTime, endTime, orderUid,promoteUid);
|
|
|
return orders;
|
|
|
}
|
|
|
// 参加满x单返活动
|
|
|
private boolean joinExtraActivity(int orderUid ,int promoteUid ,int activityId){
|
|
|
//获取某时间段可参与活动的单数
|
|
|
private UnionShareOrders queryOrderActivity(int orderUid,int promoteUid,int activityId) {
|
|
|
//todo 读写缓存
|
|
|
UnionShareOrders activityOrder = unionShareOrdersMapper.selectActivityOrderByUid(activityId, orderUid,promoteUid);
|
|
|
return activityOrder;
|
|
|
}
|
|
|
|
|
|
private UnionShareOrdersActivity queryActivity(Integer activityId) {
|
|
|
if (activityId == null || activityId == 0) {
|
|
|
return null;
|
|
|
}
|
|
|
//todo 读写缓存
|
|
|
UnionShareOrdersActivity activity = unionShareOrdersActivityMapper.selectByPrimaryKey(activityId);
|
|
|
if (activity == null || activity.getType() != 3) {
|
|
|
return activity;
|
|
|
}
|
|
|
|
|
|
private UnionShareOrdersActivityItem queryActivityItem(int activityItemId) {
|
|
|
//todo 读写缓存
|
|
|
UnionShareOrdersActivityItem item = unionShareOrdersActivityItemMapper.selectByPrimaryKey(activityItemId);
|
|
|
return item;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询满x单返活动条目(正常状态)
|
|
|
* */
|
|
|
private List<UnionShareOrdersActivityItem> queryActivityItemList(int activityId) {
|
|
|
//todo 读写缓存
|
|
|
List<UnionShareOrdersActivityItem> items = unionShareOrdersActivityItemMapper.selectByActivityId(activityId);
|
|
|
return items;
|
|
|
}
|
|
|
|
|
|
public void clearActivityCache(int activityId) {
|
|
|
//todo 清除某活动缓存
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 参加满x单额外返活动
|
|
|
* */
|
|
|
//todo 需加定时任务每天10点调用此方法,把前一天结束的活动该预发放的奖励单发下去
|
|
|
public boolean joinExtraActivity(int orderUid ,int promoteUid ,int activityId){
|
|
|
UnionShareOrdersActivity activity = queryActivity(activityId);
|
|
|
if (null == activity || activity.getType() != 3) {
|
|
|
return false;
|
|
|
}
|
|
|
List<UnionShareOrders> orders = queryUidActivity(orderUid,promoteUid, activity.getStartTime(), activity.getEndTime());
|
|
|
if (orders.size() == 0) {
|
|
|
return false;
|
|
|
}
|
|
|
//查询满x单返活动条目
|
|
|
List<UnionShareOrdersActivityItem> items = unionShareOrdersActivityItemMapper.selectByActivityId(activityId);
|
|
|
//查询满x单返活动条目(正常状态)
|
|
|
List<UnionShareOrdersActivityItem> items = queryActivityItemList(activityId);
|
|
|
for (UnionShareOrdersActivityItem item : items) {
|
|
|
if (orders.size() >= item.getOrderMinNum() && orders.size() <= item.getOrderMaxNum()) {
|
|
|
//满足此项标准
|
...
|
...
|
@@ -1132,7 +1233,7 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport |
|
|
List<Integer> orderIds = new ArrayList<>();
|
|
|
String status=ShareOrdersStatusEnum.CAN_SETTLE.getCode();
|
|
|
for(UnionShareOrders order:orders){
|
|
|
if(ShareOrdersStatusEnum.getLevelByCode(order.getStatus())<2){
|
|
|
if(ShareOrdersStatusEnum.getLevelByCode(order.getStatus())<ShareOrdersStatusEnum.CAN_SETTLE.getLevel()){
|
|
|
status = order.getStatus();
|
|
|
}
|
|
|
ordersStr.append(order.getOrderCode()).append(',');
|
...
|
...
|
@@ -1172,15 +1273,12 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport |
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
// 是否可以参与满单返活动
|
|
|
private boolean canJoinExtraActivity(){
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
//参加加倍返活动
|
|
|
/**
|
|
|
* 参加加倍返活动
|
|
|
* */
|
|
|
private boolean participateActivity(UnionShareOrders order,UnionShareOrdersActivity activity) {
|
|
|
//1、判断是否符合活动条件
|
|
|
//1.1 活动类型:1-订单返利比例升级,2-订单返利翻x倍,3-额外返
|
...
|
...
|
@@ -1282,7 +1380,7 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport |
|
|
List<UnionShareOrdersActivity> activityList = queryActivity();
|
|
|
for (UnionShareOrdersActivity a :activityList ) {
|
|
|
if(participateActivity(insertReq,a)) {
|
|
|
//参加了活动
|
|
|
//参加了活动,参加一个加返活动就可以了
|
|
|
break;
|
|
|
}
|
|
|
}
|
...
|
...
|
@@ -1514,9 +1612,7 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport |
|
|
BeanUtils.copyProperties(o,b);
|
|
|
orderList.add(b);
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
//查询活动额外返的返利单
|
|
|
List<Integer> ids = unionShareOrdersMapper.selectIdForActivity(settlementCode);
|
|
|
List<UnionShareOrdersActivityBo> activityBos = new ArrayList<>();
|
...
|
...
|
|