Merge remote-tracking branch 'origin/master'

master
wjt 2 years ago
commit af9abfff5b

@ -128,7 +128,7 @@ public class UserController {
@ApiOperation("查询用户") @ApiOperation("查询用户")
@GetMapping @GetMapping
@PreAuthorize("@el.check('task:source')") @PreAuthorize("@el.check('user:list')")
public ResponseEntity<Object> query(UserQueryCriteria criteria, Pageable pageable) { public ResponseEntity<Object> query(UserQueryCriteria criteria, Pageable pageable) {
UserDto userDto = JSONUtil.toBean(SecurityUtils.getUser(), UserDto.class); UserDto userDto = JSONUtil.toBean(SecurityUtils.getUser(), UserDto.class);
if (userDto != null) { if (userDto != null) {
@ -190,8 +190,9 @@ public class UserController {
UserDto userDto = JSONUtil.toBean(SecurityUtils.getUser(), UserDto.class); UserDto userDto = JSONUtil.toBean(SecurityUtils.getUser(), UserDto.class);
List<UserFavorOfExcel> userFavorOfExcels = List<UserFavorOfExcel> userFavorOfExcels =
ReadExcelUtils.readExcelByClass(file, UserFavorOfExcel.class); ReadExcelUtils.readExcelByClass(file, UserFavorOfExcel.class);
return new ResponseEntity<>(userService.fileCreateUser userService.fileCreateUser
(userFavorOfExcels, userDto.getCompanyId(), userDto), HttpStatus.OK); (userFavorOfExcels, userDto.getCompanyId(), userDto);
return new ResponseEntity<>(HttpStatus.OK);
} }
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
@ -199,7 +200,8 @@ public class UserController {
@ApiOperation("创建或导入用户") @ApiOperation("创建或导入用户")
@PostMapping(value = "/createUsers") @PostMapping(value = "/createUsers")
public ResponseEntity<Map<String, String>> createUsers(@Validated @RequestBody CreateUserDTO userDTO) { public ResponseEntity<Map<String, String>> createUsers(@Validated @RequestBody CreateUserDTO userDTO) {
return new ResponseEntity<>(userService.createUserOrFile(userDTO), HttpStatus.OK); userService.createUserOrFile(userDTO);
return new ResponseEntity<>(HttpStatus.OK);
} }
@ApiOperation("删除用户") @ApiOperation("删除用户")

@ -178,7 +178,7 @@ public interface UserService {
* @return * @return
* @throws IOException * @throws IOException
*/ */
Map<String, String> fileCreateUser(List<UserFavorOfExcel> file, Long companyId, UserDto userDto); void fileCreateUser(List<UserFavorOfExcel> file, Long companyId, UserDto userDto);
/** /**
* *
@ -209,9 +209,8 @@ public interface UserService {
* *
* *
* @param userDTO * @param userDTO
* @return
*/ */
Map<String, String> createUserOrFile(CreateUserDTO userDTO); void createUserOrFile(CreateUserDTO userDTO);
/** /**
* *

@ -20,11 +20,9 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool; import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.*;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import com.baiye.config.BusinessConfig; import com.baiye.config.BusinessConfig;
import com.baiye.config.properties.FileProperties; import com.baiye.config.properties.FileProperties;
import com.baiye.constant.DefaultNumberConstants; import com.baiye.constant.DefaultNumberConstants;
@ -53,6 +51,7 @@ import com.baiye.modules.system.repository.UserRepository;
import com.baiye.modules.system.service.UserService; import com.baiye.modules.system.service.UserService;
import com.baiye.modules.telemarkting.service.ExtensionNumberService; import com.baiye.modules.telemarkting.service.ExtensionNumberService;
import com.baiye.util.*; import com.baiye.util.*;
import com.baiye.util.PageUtil;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
@ -76,7 +75,6 @@ import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentMap;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -138,9 +136,8 @@ public class UserServiceImpl implements UserService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Map<String, String> fileCreateUser(List<UserFavorOfExcel> excels, Long companyId, UserDto userDto) { public void fileCreateUser(List<UserFavorOfExcel> excels, Long companyId, UserDto userDto) {
Company byId = companyService.findById(companyId); Company byId = companyService.findById(companyId);
Map<String, String> map = Maps.newConcurrentMap();
if (CollUtil.isNotEmpty(excels) && byId != null) { if (CollUtil.isNotEmpty(excels) && byId != null) {
User copyUser; User copyUser;
Set<Role> roles = new HashSet<>(); Set<Role> roles = new HashSet<>();
@ -160,19 +157,16 @@ public class UserServiceImpl implements UserService {
throw new EntityExistException(User.class, "phone", user.getPhone()); throw new EntityExistException(User.class, "phone", user.getPhone());
} }
// 随机密码 // 随机密码
String randomNumbers = RandomUtil.randomNumbers(DefaultNumberConstants.SIX_NUMBER);
copyUser.setUsername(username); copyUser.setUsername(username);
copyUser.setPassword(passwordEncoder.encode copyUser.setPassword(passwordEncoder.encode
(org.apache.commons.lang3.StringUtils.isEmpty(user.getPassword()) (StringUtils.isNotBlank(user.getPassword())
? user.getPassword() : randomNumbers)); ? user.getPassword() : "123456"));
copyUser.setWhichUserId(userDto.getId()); copyUser.setWhichUserId(userDto.getId());
copyUser.setCompanyId(companyId); copyUser.setCompanyId(companyId);
copyUser.setEnabled(Boolean.FALSE); copyUser.setEnabled(Boolean.FALSE);
map.put(username, randomNumbers);
userRepository.save(copyUser); userRepository.save(copyUser);
} }
} }
return map;
} }
@Override @Override
@ -221,8 +215,7 @@ public class UserServiceImpl implements UserService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Map<String, String> createUserOrFile(CreateUserDTO userDTO) { public void createUserOrFile(CreateUserDTO userDTO) {
Map<String, String> userMap = Maps.newConcurrentMap();
Long companyId = null; Long companyId = null;
User user = new User(); User user = new User();
boolean flag = Boolean.FALSE; boolean flag = Boolean.FALSE;
@ -244,10 +237,10 @@ public class UserServiceImpl implements UserService {
companyDto.setStatus(DefaultNumberConstants.ZERO_NUMBER); companyDto.setStatus(DefaultNumberConstants.ZERO_NUMBER);
companyId = companyService.createCompany(companyDto).getId(); companyId = companyService.createCompany(companyDto).getId();
} }
String randomNumbers = RandomUtil.randomNumbers(DefaultNumberConstants.SIX_NUMBER);
companyId = companyId != null ? companyId : companyId = companyId != null ? companyId :
SecurityUtils.getCompanyId(); SecurityUtils.getCompanyId();
userDTO.setPassword(passwordEncoder.encode(randomNumbers)); userDTO.setPassword(passwordEncoder.encode(StringUtils.isNotBlank(userDTO.getPassword()) ? userDTO.getPassword() : "123456"));
// 验证子账号 // 验证子账号
Integer sonUserNum = companyService.findCompanyInfo(companyId).getSonUserNum(); Integer sonUserNum = companyService.findCompanyInfo(companyId).getSonUserNum();
int size = userRepository.findByCompanyId(companyId).size(); int size = userRepository.findByCompanyId(companyId).size();
@ -262,9 +255,7 @@ public class UserServiceImpl implements UserService {
user.setWhichUserId(userId); user.setWhichUserId(userId);
user.setIsReview(Boolean.FALSE); user.setIsReview(Boolean.FALSE);
user.setTurnCrmNum(50); user.setTurnCrmNum(50);
userMap.put(user.getUsername(), randomNumbers);
User userCreateResult = create(user); User userCreateResult = create(user);
//todo 如果是管理员 则创建任务 //todo 如果是管理员 则创建任务
if (flag) { if (flag) {
if (userDTO.getCompanyType() != null && userDTO.getCompanyType() == 1) { if (userDTO.getCompanyType() != null && userDTO.getCompanyType() == 1) {
@ -286,12 +277,9 @@ public class UserServiceImpl implements UserService {
CompanyDto dto = new CompanyDto(); CompanyDto dto = new CompanyDto();
dto.setUserId(userCreateResult.getId()); dto.setUserId(userCreateResult.getId());
List<UserFavorOfExcel> userFavorOfExcels = ReadExcelUtils.readExcelByClass(file, UserFavorOfExcel.class); List<UserFavorOfExcel> userFavorOfExcels = ReadExcelUtils.readExcelByClass(file, UserFavorOfExcel.class);
Map<String, String> map = fileCreateUser(userFavorOfExcels, fileCreateUser(userFavorOfExcels,
companyId, Convert.convert(UserDto.class, userCreateResult)); companyId, Convert.convert(UserDto.class, userCreateResult));
// 插入文件导入用户
userMap.putAll(map);
} }
return userMap;
} }
/** /**
@ -390,7 +378,7 @@ public class UserServiceImpl implements UserService {
public Object queryAll(UserQueryCriteria criteria, Pageable pageable) { public Object queryAll(UserQueryCriteria criteria, Pageable pageable) {
Page<User> page = userRepository. Page<User> page = userRepository.
findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable); findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
page.getContent().forEach(user -> user.setPassword(CharSequenceUtil.EMPTY));
return PageUtil.toPage(page.map(userMapper::toDto)); return PageUtil.toPage(page.map(userMapper::toDto));
} }
@ -524,6 +512,9 @@ public class UserServiceImpl implements UserService {
} }
} }
if (StringUtils.isBlank(resources.getPassword())) {
user.setPassword(passwordEncoder.encode(resources.getPassword()));
}
user.setIsReview(resources.getIsReview()); user.setIsReview(resources.getIsReview());
user.setEmail(resources.getEmail()); user.setEmail(resources.getEmail());
user.setEnabled(resources.getEnabled()); user.setEnabled(resources.getEnabled());

@ -32,6 +32,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -43,6 +45,8 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
public class DeliveryBalanceTask { public class DeliveryBalanceTask {
private final Lock lock = new ReentrantLock();
private final RedisUtils redisUtils; private final RedisUtils redisUtils;
private final TaskService taskService; private final TaskService taskService;
@ -81,7 +85,7 @@ public class DeliveryBalanceTask {
UserDto userInfo = userService.findUserInfo(userId); UserDto userInfo = userService.findUserInfo(userId);
if (ObjectUtil.isNotNull(userInfo) if (ObjectUtil.isNotNull(userInfo)
&& Boolean.TRUE.equals(userInfo.getEnabled()) && Boolean.TRUE.equals(userInfo.getEnabled())
&& ObjectUtil.isNotNull(companyByUserId) && ObjectUtil.isNotNull(companyByUserId)
// 判断价格 // 判断价格
&& ObjectUtil.isNotNull(companyByUserId.getDmpDeliveryFee())) { && ObjectUtil.isNotNull(companyByUserId.getDmpDeliveryFee())) {
Integer dmpLimitNum = companyByUserId.getDmpLimitNum(); Integer dmpLimitNum = companyByUserId.getDmpLimitNum();
@ -90,85 +94,94 @@ public class DeliveryBalanceTask {
|| companyByUserId.getUserBalance() < DefaultNumberConstants.TWO_HUNDRED) { || companyByUserId.getUserBalance() < DefaultNumberConstants.TWO_HUNDRED) {
continue; continue;
} }
// 截取数据 lock.lock();
if (ObjectUtil.isNotNull(dmpLimitNum) try {
&& dmpLimitNum > DefaultNumberConstants.ZERO_NUMBER) { // 截取数据
// 统计今天数量 if (ObjectUtil.isNotNull(dmpLimitNum)
Integer count = taskImeiService.countByUserIdAndDate(taskId, DefaultNumberConstants.ONE_NUMBER); && dmpLimitNum > DefaultNumberConstants.ZERO_NUMBER) {
downList = CollUtil.sub(list, count >= // 统计今天数量
dmpLimitNum ? DefaultNumberConstants.ZERO_NUMBER : dmpLimitNum, list.size()); Integer count = taskImeiService.countByUserIdAndDate(taskId, DefaultNumberConstants.ONE_NUMBER);
list = CollUtil.sub(list, DefaultNumberConstants.ZERO_NUMBER, downList = CollUtil.sub(list, count >=
count >= dmpLimitNum ? DefaultNumberConstants.ZERO_NUMBER : dmpLimitNum); dmpLimitNum ? DefaultNumberConstants.ZERO_NUMBER : dmpLimitNum, list.size());
} list = CollUtil.sub(list, DefaultNumberConstants.ZERO_NUMBER,
count >= dmpLimitNum ? DefaultNumberConstants.ZERO_NUMBER : dmpLimitNum);
if (CollUtil.isNotEmpty(list)) { }
// 每次100000 数据 if (CollUtil.isNotEmpty(list)) {
List<List<TaskImei>> lists = Lists.partition // 每次100000 数据
(list, DefaultNumberConstants.ONE_HUNDRED_THOUSAND); List<List<TaskImei>> lists = Lists.partition
// 批量发送 (list, DefaultNumberConstants.ONE_HUNDRED_THOUSAND);
for (List<TaskImei> taskImeiList : lists) { // 批量发送
Long minId = (long) DefaultNumberConstants.ZERO_NUMBER; for (List<TaskImei> taskImeiList : lists) {
Long maxId = (long) DefaultNumberConstants.ZERO_NUMBER; // 发送邮件并修改状态
// 大于100 进行兑换 sendMailAndUpdateImeiStatus(taskId, userId, taskImeiList);
if (taskImeiList.size() >= DefaultNumberConstants.ONE_HUNDRED) {
String fileUrl = deliveryProperties.getFileUrl();
Comparator<TaskImei> comparing = Comparator.comparing(TaskImei::getId);
String format = DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_PATTERN);
Integer num = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_ID.concat(format));
// 最小id
Optional<TaskImei> min = taskImeiList.stream().min(comparing);
if (min.isPresent()) {
minId = min.get().getId();
}
// 最大id
Optional<TaskImei> max = taskImeiList.stream().max(comparing);
if (max.isPresent()) {
maxId = max.get().getId();
}
if (minId > DefaultNumberConstants.ZERO_NUMBER &&
maxId > DefaultNumberConstants.ZERO_NUMBER) {
// 转换DTO
List<ImeiDTO> toList = Convert.toList(ImeiDTO.class, taskImeiList);
Integer batch = ObjectUtil.isNull(num) ?
DefaultNumberConstants.ONE_NUMBER : num + DefaultNumberConstants.ONE_NUMBER;
String taskImeiName = FileConstant.BY.concat(StrPool.UNDERLINE).
concat(format).concat(StrPool.UNDERLINE).concat(String.valueOf(batch));
String file = fileUrl.concat(StrPool.SLASH).concat(taskImeiName);
// 保存文件
String csvPath = file.concat(StrPool.DOT).concat(FileConstant.CSV_FILE_SUB_NAME);
CSVFileUtil.createCsvFile(toList, csvPath);
String zipPath = file.concat(FileConstant.ZIP_FILE_SUB_NAME);
// 设置压缩文件
CompressUtil.decryptionCompression(zipPath, csvPath, deliveryProperties.getZipPassword());
// 发送邮件
MailUtil.sendMail(deliveryProperties.getEmailAddress(),
deliveryProperties.getEmailPassword(), deliveryProperties.getToEmailAddress(), zipPath, taskImeiName);
// 保存发送记录
deliveryRecordService.saveDeliveryRecord(zipPath, taskImeiName,
taskImeiList.size(), taskId, userId, DefaultNumberConstants.ONE_NUMBER);
// 保存批次号
redisUtils.set(CacheKey.DMP_REQUEST_ID.concat(format), batch, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS);
// 批次修改状态
taskImeiService.updateBath(taskId, CharSequenceUtil.EMPTY, DefaultNumberConstants.ONE_NUMBER, minId, maxId);
// 删除文件
boolean csvResult = FileUtil.del(csvPath);
boolean zipResult = FileUtil.del(zipPath);
log.info("=========================== the csv path as {}, zip path as {} " + " csvResult as {} zipResult as {} ========================", csvPath, zipPath, csvResult, zipResult);
}
} }
} }
} if (CollUtil.isNotEmpty(downList) && downList.size() > DefaultNumberConstants.ONE_HUNDRED) {
if (CollUtil.isNotEmpty(downList)) { // 处理下载包
// 处理下载包 zipDownList(taskId, downList, companyByUserId);
zipDownList(taskId, downList, companyByUserId); }
} finally {
lock.unlock();
} }
} }
} }
} }
} }
private void sendMailAndUpdateImeiStatus(Long taskId, Long userId, List<TaskImei> taskImeiList) {
Long minId = (long) DefaultNumberConstants.ZERO_NUMBER;
Long maxId = (long) DefaultNumberConstants.ZERO_NUMBER;
// 大于100 进行兑换
if (taskImeiList.size() >= DefaultNumberConstants.ONE_HUNDRED) {
String fileUrl = deliveryProperties.getFileUrl();
Comparator<TaskImei> comparing = Comparator.comparing(TaskImei::getId);
String format = DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_PATTERN);
Integer num = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_ID.concat(format));
// 最小id
Optional<TaskImei> min = taskImeiList.stream().min(comparing);
if (min.isPresent()) {
minId = min.get().getId();
}
// 最大id
Optional<TaskImei> max = taskImeiList.stream().max(comparing);
if (max.isPresent()) {
maxId = max.get().getId();
}
if (minId > DefaultNumberConstants.ZERO_NUMBER &&
maxId > DefaultNumberConstants.ZERO_NUMBER) {
// 转换DTO
List<ImeiDTO> toList = Convert.toList(ImeiDTO.class, taskImeiList);
Integer batch = ObjectUtil.isNull(num) ?
DefaultNumberConstants.ONE_NUMBER : num + DefaultNumberConstants.ONE_NUMBER;
String taskImeiName = FileConstant.BY.concat(StrPool.UNDERLINE).
concat(format).concat(StrPool.UNDERLINE).concat(String.valueOf(batch));
String file = fileUrl.concat(StrPool.SLASH).concat(taskImeiName);
// 保存文件
String csvPath = file.concat(StrPool.DOT).concat(FileConstant.CSV_FILE_SUB_NAME);
CSVFileUtil.createCsvFile(toList, csvPath);
String zipPath = file.concat(FileConstant.ZIP_FILE_SUB_NAME);
// 设置压缩文件
CompressUtil.decryptionCompression(zipPath, csvPath, deliveryProperties.getZipPassword());
// 发送邮件
MailUtil.sendMail(deliveryProperties.getEmailAddress(),
deliveryProperties.getEmailPassword(), deliveryProperties.getToEmailAddress(), zipPath, taskImeiName);
// 保存发送记录
deliveryRecordService.saveDeliveryRecord(zipPath, taskImeiName,
taskImeiList.size(), taskId, userId, DefaultNumberConstants.ONE_NUMBER);
// 保存批次号
redisUtils.set(CacheKey.DMP_REQUEST_ID.concat(format), batch, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS);
// 批次修改状态
taskImeiService.updateBath(taskId, CharSequenceUtil.EMPTY, DefaultNumberConstants.ONE_NUMBER, minId, maxId);
// 删除文件
boolean csvResult = FileUtil.del(csvPath);
boolean zipResult = FileUtil.del(zipPath);
log.info("=========================== the csv path as {}, zip path as {} " + " csvResult as {} zipResult as {} ========================", csvPath, zipPath, csvResult, zipResult);
}
}
}
private void zipDownList(Long taskId, List<TaskImei> downList, Company companyByUserId) { private void zipDownList(Long taskId, List<TaskImei> downList, Company companyByUserId) {
log.info("============================= down list size as {} =============================", downList.size()); log.info("============================= down list size as {} =============================", downList.size());
Long minId = (long) DefaultNumberConstants.ZERO_NUMBER; Long minId = (long) DefaultNumberConstants.ZERO_NUMBER;

Loading…
Cancel
Save