|
|
@@ -12,10 +12,10 @@ import com.cyksj.common.exception.BusinessRuntimeException;
|
|
|
import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
|
|
|
import com.cyksj.dto.RedisKey;
|
|
|
import com.cyksj.mapper.*;
|
|
|
-import com.cyksj.mapper.manage.DelGroupsTripsRecordMapper;
|
|
|
import com.cyksj.mapper.manage.GroupsTripsAccountReplaceRecordMapper;
|
|
|
import com.cyksj.mapper.manage.cms.CmsUserMapper;
|
|
|
import com.cyksj.model.entity.*;
|
|
|
+import com.cyksj.model.manage.views.AccountView;
|
|
|
import com.cyksj.model.request.ReplaceTripsAccountReq;
|
|
|
import com.cyksj.model.views.GroupsAccountView;
|
|
|
import com.cyksj.redis.RedisService;
|
|
|
@@ -24,6 +24,7 @@ import com.cyksj.service.mange.CmsGroupService;
|
|
|
import com.cyksj.service.sms.SmsService;
|
|
|
import com.ejlchina.searcher.BeanSearcher;
|
|
|
import com.ejlchina.searcher.param.Operator;
|
|
|
+import com.ejlchina.searcher.util.MapBuilder;
|
|
|
import com.ejlchina.searcher.util.MapUtils;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -67,13 +68,11 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
|
|
|
|
|
|
private final RedisService redisService;
|
|
|
|
|
|
- private final DelGroupsTripsRecordMapper delGroupsTripsRecordMapper;
|
|
|
-
|
|
|
private final GroupsMapper groupsMapper;
|
|
|
|
|
|
private final AccountCommonService accountCommonService;
|
|
|
|
|
|
- private final OrderDiscountPlusPurchaseSkuRelationMapper discountPlusPurchaseSkuRelationMapper;
|
|
|
+ private final GroupsRelationAlertMapper alertMapper;
|
|
|
|
|
|
private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
|
|
|
|
|
|
@@ -108,6 +107,15 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
|
|
|
}
|
|
|
relationMapper.insert(relation);
|
|
|
}
|
|
|
+ Integer alertCount = alertMapper.selectCount(Wrappers.lambdaQuery(GroupsRelationAlert.class)
|
|
|
+ .eq(GroupsRelationAlert::getSkuId, sku.getId())
|
|
|
+ .last("limit 1"));
|
|
|
+ if (alertCount > 0) {
|
|
|
+ alertMapper.update(null, Wrappers.lambdaUpdate(GroupsRelationAlert.class)
|
|
|
+ .set(GroupsRelationAlert::getIsReset, true)
|
|
|
+ .eq(GroupsRelationAlert::getSkuId, sku.getId())
|
|
|
+ .eq(GroupsRelationAlert::getIsReset, false));
|
|
|
+ }
|
|
|
return groups;
|
|
|
}
|
|
|
|
|
|
@@ -166,6 +174,17 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
|
|
|
if (count > 0) {
|
|
|
throw new BusinessRuntimeException("该账号已发车.请选择未发车账户");
|
|
|
}
|
|
|
+ Account account = accountMapper.selectById(groupsTrips.getAccountId());
|
|
|
+ //将预备账号 类型替换掉
|
|
|
+ if (account.getType() == 2) {
|
|
|
+ int update = accountMapper.update(null, Wrappers.lambdaUpdate(Account.class)
|
|
|
+ .set(Account::getType, 1)
|
|
|
+ .eq(Account::getId, account.getId())
|
|
|
+ .eq(Account::getType, 2));
|
|
|
+ if (update == 0) {
|
|
|
+ throw BusinessRuntimeException.getInstance("该账号已配置车队");
|
|
|
+ }
|
|
|
+ }
|
|
|
List<GroupsRelation> groupsRelations = relationMapper.selectList(Wrappers.lambdaQuery(GroupsRelation.class).eq(GroupsRelation::getGroupsId, groupsTrips.getId()).eq(GroupsRelation::getStatus, GroupsRelation.Status.validity));
|
|
|
GroupsTrips trips = beanSearcher.searchFirst(GroupsTrips.class, MapUtils.builder().field(GroupsTrips::getId, groupsTrips.getId()).onlySelect(GroupsTrips::getTitle).build());
|
|
|
String title = "车票";
|
|
|
@@ -254,6 +273,15 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
|
|
|
}
|
|
|
updateById(groupsTrips);
|
|
|
|
|
|
+ Integer alertCount = alertMapper.selectCount(Wrappers.lambdaQuery(GroupsRelationAlert.class)
|
|
|
+ .eq(GroupsRelationAlert::getSkuId, sku.getId())
|
|
|
+ .last("limit 1"));
|
|
|
+ if (alertCount > 0) {
|
|
|
+ alertMapper.update(null, Wrappers.lambdaUpdate(GroupsRelationAlert.class)
|
|
|
+ .set(GroupsRelationAlert::getIsReset, true)
|
|
|
+ .eq(GroupsRelationAlert::getSkuId, sku.getId())
|
|
|
+ .eq(GroupsRelationAlert::getIsReset, false));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -339,6 +367,29 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
|
|
|
TASK_EXECUTOR.execute(() -> sendChangeAccountMsg(groupsId, goodsId));;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Integer getAvailableRelation(Long goodsId, Long skuId) {
|
|
|
+ //chatGPT
|
|
|
+ GoodsDonSku sku = skuMapper.selectById(skuId);
|
|
|
+ goodsId = sku.getGoodsId();
|
|
|
+ Integer skuNum = sku.getNum();
|
|
|
+ if (Constant.AI_goodsIds.contains(sku.getGoodsId()) && sku.getNum() > 1) {
|
|
|
+ Integer extraNum = Constant.AI_EXTRACT_NUM;
|
|
|
+ Integer maxNum = skuNum + extraNum;
|
|
|
+ DateTime tenExpiry = DateUtil.offsetDay(DateTime.now(), 10);
|
|
|
+ Integer available = relationMapper.selectAvailableRelation(skuId);
|
|
|
+ //额外硬塞
|
|
|
+ Integer special_available = relationMapper.selectSpecialGroupsRelationAvailable(skuId, maxNum, extraNum, tenExpiry);
|
|
|
+ available += special_available;
|
|
|
+ available = getAvailableAfterPreAccount(available, skuId, maxNum, goodsId);
|
|
|
+ return available;
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer available = relationMapper.selectAvailableRelation(skuId);
|
|
|
+ available = getAvailableAfterPreAccount(available, skuId, skuNum, goodsId);
|
|
|
+ return available;
|
|
|
+ }
|
|
|
+
|
|
|
private void sendChangeAccountMsg(Long groupsId, Long goodsId) {
|
|
|
GoodsDon goodsDon = goodsDonMapper.selectById(goodsId);
|
|
|
String title = goodsDon != null ? goodsDon.getTitle() : "车票";
|
|
|
@@ -365,4 +416,21 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ public Integer getAvailableAfterPreAccount(Integer available, Long skuId, Integer maxNum, Long goodsId) {
|
|
|
+ MapBuilder builder = MapUtils.builder();
|
|
|
+ if (goodsId == 26) {
|
|
|
+ builder.field(AccountView::getPreSkuId, skuId);
|
|
|
+ }
|
|
|
+ Number preAccount = beanSearcher.searchCount(AccountView.class, builder
|
|
|
+ .field(AccountView::getGoodsId, goodsId)
|
|
|
+ .field(AccountView::getAccountType, 2)
|
|
|
+ .field(AccountView::getGroupsId).op(Operator.IsNull)
|
|
|
+ .build());
|
|
|
+ //计算上预发布账号车位数
|
|
|
+ if (preAccount.intValue() > 0) {
|
|
|
+ available += preAccount.intValue() * maxNum;
|
|
|
+ }
|
|
|
+ return available;
|
|
|
+ }
|
|
|
}
|