Merge remote-tracking branch 'origin/master'

master
wjt 2 years ago
commit af9abfff5b

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

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

@ -32,6 +32,8 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
/**
@ -43,6 +45,8 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class DeliveryBalanceTask {
private final Lock lock = new ReentrantLock();
private final RedisUtils redisUtils;
private final TaskService taskService;
@ -81,7 +85,7 @@ public class DeliveryBalanceTask {
UserDto userInfo = userService.findUserInfo(userId);
if (ObjectUtil.isNotNull(userInfo)
&& Boolean.TRUE.equals(userInfo.getEnabled())
&& ObjectUtil.isNotNull(companyByUserId)
&& ObjectUtil.isNotNull(companyByUserId)
// 判断价格
&& ObjectUtil.isNotNull(companyByUserId.getDmpDeliveryFee())) {
Integer dmpLimitNum = companyByUserId.getDmpLimitNum();
@ -90,85 +94,94 @@ public class DeliveryBalanceTask {
|| companyByUserId.getUserBalance() < DefaultNumberConstants.TWO_HUNDRED) {
continue;
}
// 截取数据
if (ObjectUtil.isNotNull(dmpLimitNum)
&& dmpLimitNum > DefaultNumberConstants.ZERO_NUMBER) {
// 统计今天数量
Integer count = taskImeiService.countByUserIdAndDate(taskId, DefaultNumberConstants.ONE_NUMBER);
downList = CollUtil.sub(list, count >=
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 数据
List<List<TaskImei>> lists = Lists.partition
(list, DefaultNumberConstants.ONE_HUNDRED_THOUSAND);
// 批量发送
for (List<TaskImei> taskImeiList : lists) {
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);
}
lock.lock();
try {
// 截取数据
if (ObjectUtil.isNotNull(dmpLimitNum)
&& dmpLimitNum > DefaultNumberConstants.ZERO_NUMBER) {
// 统计今天数量
Integer count = taskImeiService.countByUserIdAndDate(taskId, DefaultNumberConstants.ONE_NUMBER);
downList = CollUtil.sub(list, count >=
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 数据
List<List<TaskImei>> lists = Lists.partition
(list, DefaultNumberConstants.ONE_HUNDRED_THOUSAND);
// 批量发送
for (List<TaskImei> taskImeiList : lists) {
// 发送邮件并修改状态
sendMailAndUpdateImeiStatus(taskId, userId, taskImeiList);
}
}
}
if (CollUtil.isNotEmpty(downList)) {
// 处理下载包
zipDownList(taskId, downList, companyByUserId);
if (CollUtil.isNotEmpty(downList) && downList.size() > DefaultNumberConstants.ONE_HUNDRED) {
// 处理下载包
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) {
log.info("============================= down list size as {} =============================", downList.size());
Long minId = (long) DefaultNumberConstants.ZERO_NUMBER;

Loading…
Cancel
Save