|
@@ -2,12 +2,23 @@ package com.cyksj.service.mange.group;
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateField;
|
|
import cn.hutool.core.date.DateField;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
+import com.cyksj.common.constant.Constant;
|
|
|
import com.cyksj.common.exception.BusinessRuntimeException;
|
|
import com.cyksj.common.exception.BusinessRuntimeException;
|
|
|
|
|
+import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
|
|
|
|
|
+import com.cyksj.common.util.SmsUtil;
|
|
|
import com.cyksj.mapper.*;
|
|
import com.cyksj.mapper.*;
|
|
|
|
|
+import com.cyksj.mapper.manage.GroupsTripsAccountReplaceRecordMapper;
|
|
|
|
|
+import com.cyksj.mapper.manage.cms.CmsUserMapper;
|
|
|
|
|
+import com.cyksj.mapper.market.task.UserBindDetailMapper;
|
|
|
import com.cyksj.model.entity.*;
|
|
import com.cyksj.model.entity.*;
|
|
|
|
|
+import com.cyksj.model.request.ReplaceTripsAccountReq;
|
|
|
|
|
+import com.cyksj.model.views.GroupsAccountView;
|
|
|
import com.cyksj.service.mange.CmsGroupService;
|
|
import com.cyksj.service.mange.CmsGroupService;
|
|
|
|
|
+import com.ejlchina.searcher.BeanSearcher;
|
|
|
|
|
+import com.ejlchina.searcher.util.MapUtils;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -34,6 +45,20 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
|
|
|
|
|
|
|
|
private final AccountMapper accountMapper;
|
|
private final AccountMapper accountMapper;
|
|
|
|
|
|
|
|
|
|
+ private final BeanSearcher beanSearcher;
|
|
|
|
|
+
|
|
|
|
|
+ private final GroupsTripsAccountReplaceRecordMapper replaceRecordMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final CmsUserMapper cmsUserMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final GoodsDonMapper goodsDonMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private UserBindDetailMapper userBindDetailMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final UserMapper userMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
|
|
|
|
|
+
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public GroupsTrips issuance(GroupsTrips groups) {
|
|
public GroupsTrips issuance(GroupsTrips groups) {
|
|
@@ -108,4 +133,95 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Throwable.class)
|
|
|
|
|
+ public void replaceTripsAccount(ReplaceTripsAccountReq req) {
|
|
|
|
|
+ Long groupsId = req.getGroupsId();
|
|
|
|
|
+ String account = req.getAccount().trim();
|
|
|
|
|
+ String password = req.getPassword().trim();
|
|
|
|
|
+ String remark = req.getRemark();
|
|
|
|
|
+ GroupsAccountView groupsAccountView = beanSearcher.searchFirst(GroupsAccountView.class, MapUtils.builder()
|
|
|
|
|
+ .field(GroupsAccountView::getGroupsId, groupsId)
|
|
|
|
|
+ .build());
|
|
|
|
|
+ if (groupsId == null) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("车队已不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ Long accountId = groupsAccountView.getAccountId();
|
|
|
|
|
+ if (accountId == null) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("该车队暂未配置账号");
|
|
|
|
|
+ }
|
|
|
|
|
+ Long goodsId = groupsAccountView.getGoodsId();
|
|
|
|
|
+ if (!account.contains("客服")) {
|
|
|
|
|
+ int count = accountMapper.selectCount(Wrappers.lambdaQuery(Account.class)
|
|
|
|
|
+ .eq(Account::getAccount, account)
|
|
|
|
|
+ .eq(Account::getGoodsId, goodsId));
|
|
|
|
|
+ if (count > 0) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("该平台下已生成该账号");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //新增账号
|
|
|
|
|
+ Account replace = new Account();
|
|
|
|
|
+ replace.setAccount(account);
|
|
|
|
|
+ replace.setPassword(password);
|
|
|
|
|
+ replace.setGoodsId(goodsId);
|
|
|
|
|
+
|
|
|
|
|
+ replace.setStartTime(groupsAccountView.getStartTime());
|
|
|
|
|
+ replace.setExpiryTime(groupsAccountView.getExpiryTime());
|
|
|
|
|
+ replace.setRemark(remark);
|
|
|
|
|
+ accountMapper.insert(replace);
|
|
|
|
|
+
|
|
|
|
|
+ //替换车队账号
|
|
|
|
|
+ this.update(null, Wrappers.lambdaUpdate(GroupsTrips.class)
|
|
|
|
|
+ .set(GroupsTrips::getAccountId, replace.getId())
|
|
|
|
|
+ .eq(GroupsTrips::getId, groupsId));
|
|
|
|
|
+
|
|
|
|
|
+ //删除旧的账号
|
|
|
|
|
+ accountMapper.deleteById(accountId);
|
|
|
|
|
+
|
|
|
|
|
+ //保存替换记录
|
|
|
|
|
+ GroupsTripsAccountReplaceRecord replaceRecord = new GroupsTripsAccountReplaceRecord();
|
|
|
|
|
+ replaceRecord.setGroupsId(groupsId);
|
|
|
|
|
+ replaceRecord.setOldAccountId(accountId);
|
|
|
|
|
+ replaceRecord.setOldAccount(groupsAccountView.getAccount());
|
|
|
|
|
+ replaceRecord.setOldPassword(groupsAccountView.getPassword());
|
|
|
|
|
+ replaceRecord.setOldStartTime(groupsAccountView.getStartTime());
|
|
|
|
|
+ replaceRecord.setOldExpiryTime(groupsAccountView.getExpiryTime());
|
|
|
|
|
+
|
|
|
|
|
+ Long adminId = req.getAdminId();
|
|
|
|
|
+ Optional.ofNullable(cmsUserMapper.selectById(adminId)).ifPresent(admin -> replaceRecord.setOperator(admin.getNickname()));
|
|
|
|
|
+
|
|
|
|
|
+ replaceRecord.setNewAccountId(replace.getId());
|
|
|
|
|
+ replaceRecord.setNewAccount(replace.getAccount());
|
|
|
|
|
+ replaceRecord.setNewPassword(replace.getPassword());
|
|
|
|
|
+ replaceRecord.setNewStartTime(replace.getStartTime());
|
|
|
|
|
+ replaceRecord.setNewExpiryTime(replace.getExpiryTime());
|
|
|
|
|
+
|
|
|
|
|
+ replaceRecordMapper.insert(replaceRecord);
|
|
|
|
|
+
|
|
|
|
|
+ TASK_EXECUTOR.execute(() -> sendChangeAccountMsg(groupsId, goodsId));;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void sendChangeAccountMsg(Long groupsId,Long goodsId) {
|
|
|
|
|
+ GoodsDon goodsDon = goodsDonMapper.selectById(goodsId);
|
|
|
|
|
+ List<GroupsRelation> groupsRelations = beanSearcher.searchAll(GroupsRelation.class, MapUtils.builder().field(GroupsRelation::getGroupsId, groupsId).build());
|
|
|
|
|
+ groupsRelations.forEach(relation->{
|
|
|
|
|
+ Long userId = relation.getUserId();
|
|
|
|
|
+ User user = userMapper.selectById(userId);
|
|
|
|
|
+ String phone = null;
|
|
|
|
|
+ if (user != null) {
|
|
|
|
|
+ phone = user.getLoginPhone();
|
|
|
|
|
+ if (StrUtil.isEmpty(phone)) {
|
|
|
|
|
+ UserBindDetail userBindDetail = userBindDetailMapper.selectById(userId);
|
|
|
|
|
+ if (userBindDetail != null) {
|
|
|
|
|
+ phone = userBindDetail.getPhone();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StrUtil.isNotBlank(phone)) {
|
|
|
|
|
+ String title = goodsDon != null ? goodsDon.getTitle() : "车票";
|
|
|
|
|
+ SmsUtil.sendLuoKey2Msg(phone, String.format(Constant.CHANGE_GROUPS_TRIPS_ACCOUNT, title));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|