修改当天上传条数

master
bynt 2 years ago
parent 72c168a988
commit 76c96abc7b

@ -0,0 +1,26 @@
package com.baiye.util;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
* http
*
* @author pangu
*/
public class HttpContextUtil {
/**
* request
*
* @return HttpServletRequest
*/
public static HttpServletRequest getHttpServletRequest() {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
return (requestAttributes == null) ? null : ((ServletRequestAttributes) requestAttributes).getRequest();
}
}

@ -51,6 +51,16 @@ public class FileConstant {
*/
public static final int ONE_MILLION_NUMBER = 1000000;
/**
* BY
*/
public static final String BY = "BY";
/**
* MM
*/
public static final String MM = "MM";
/**
* uc
*/
@ -93,4 +103,10 @@ public class FileConstant {
public static final String CSV_FILE_SUB_NAME = "csv";
/**
* zip
*/
public static final String ZIP_FILE_SUB_NAME = ".zip";
}

@ -7,6 +7,7 @@ import com.baiye.model.vo.ResSourceLabel;
import com.baiye.modules.system.domain.Clue;
import com.baiye.modules.system.service.dto.ClueMiddleTo;
import com.baiye.modules.telemarkting.entity.ClueMiddle;
import com.baiye.socket.filter.FeignConfiguration;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;

@ -67,6 +67,7 @@ public class TokenFilter extends GenericFilterBean {
throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String token = resolveToken(httpServletRequest);
logger.info(httpServletRequest.getRequestURI());
// 对于 Token 为空的不需要去查 Redis
if (CharSequenceUtil.isNotBlank(token)) {
OnlineUserDto onlineUserDto = null;

@ -0,0 +1,32 @@
package com.baiye.modules.system.domain;
import com.baiye.model.entity.BaseClueMiddle;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
/**
* @author jt
*/
@Getter
@Setter
@Entity
@Table(name = "tb_clue_talk")
@ApiModel(value = "ClueTalk")
public class ClueTalk extends BaseClueMiddle {
private static final long serialVersionUID = -2426343637629328905L;
@Id
@ApiModelProperty(value = "线索id")
@Column(name = "clue_id")
@NotNull(message = "资源id不能为空")
private Long clueId;
}

@ -0,0 +1,25 @@
package com.baiye.modules.system.repository;
import com.baiye.modules.system.domain.ClueTalk;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
/**
* @author jt
*/
@Repository
public interface ClueTalkRepository extends JpaRepository<ClueTalk, Long>, JpaSpecificationExecutor<ClueTalk> {
/**
*
* @param taskId
* @param num
* @return
*/
@Query(value = "select count(1) from tb_clue_talk where" +
" to_days(create_time) = to_days(now()) and task_id = ?1 and clue_type = ?2", nativeQuery = true)
Integer countByTaskId(Long taskId, Integer num);
}

@ -0,0 +1,17 @@
package com.baiye.modules.system.service;
/**
* @author Enzo
* @date : 2022/12/6
*/
public interface ClueTalkService {
/**
*
* @param taskId
* @param num
* @return
*/
Integer countByTaskIdAndDate(Long taskId, Integer num);
}

@ -1,6 +1,5 @@
package com.baiye.modules.system.service;
import cn.hutool.core.date.DateTime;
import com.baiye.modules.system.domain.TaskImei;
import com.baiye.modules.system.service.dto.PlatformTransmitDTO;

@ -51,8 +51,6 @@ public class DownRecordServiceImpl implements DownRecordService {
private final RedisUtils redisUtils;
private final TaskService taskService;
private final DeliveryProperties deliveryProperties;
private final DownRecordRepository downRecordRepository;
@ -93,7 +91,7 @@ public class DownRecordServiceImpl implements DownRecordService {
String format = DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_PATTERN);
Integer num = (Integer) redisUtils.get(CacheKey.DMP_MANUAL_ID.concat(format));
Integer batch = ObjectUtil.isNull(num) ? DefaultNumberConstants.ONE_NUMBER : num + DefaultNumberConstants.ONE_NUMBER;
String taskImeiName = "MM".concat(StrPool.UNDERLINE).concat(format).concat(StrPool.UNDERLINE).concat(String.valueOf(batch));
String taskImeiName = FileConstant.MM.concat(StrPool.UNDERLINE).concat(format).concat(StrPool.UNDERLINE).concat(String.valueOf(batch));
// 发送邮件
MailUtil.sendMail(deliveryProperties.getEmailAddress(),
deliveryProperties.getEmailPassword(), deliveryProperties.getToEmailAddress(), downRecord.getDownUrl(), taskImeiName);
@ -157,11 +155,11 @@ public class DownRecordServiceImpl implements DownRecordService {
String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(uuid);
Integer num = (Integer) redisUtils.get(CacheKey.DMP_MANUAL_ID.concat(format));
Integer batch = ObjectUtil.isNull(num) ? DefaultNumberConstants.ONE_NUMBER : num + DefaultNumberConstants.ONE_NUMBER;
String taskImeiName = "MM".concat(StrPool.UNDERLINE).concat(format).concat(StrPool.UNDERLINE).concat(String.valueOf(batch));
String taskImeiName = FileConstant.MM.concat(StrPool.UNDERLINE).concat(format).concat(StrPool.UNDERLINE).concat(String.valueOf(batch));
// 保存文件
String csvPath = file.concat(".csv");
String csvPath = file.concat(StrPool.DOT).concat(FileConstant.CSV_FILE_SUB_NAME);
CSVFileUtil.createCsvFile(dtoArrayList, csvPath);
String zipPath = file.concat(".zip");
String zipPath = file.concat(FileConstant.ZIP_FILE_SUB_NAME);
// 设置压缩文件
CompressUtil.decryptionCompression
(zipPath, csvPath, deliveryProperties.getZipPassword());
@ -172,7 +170,7 @@ public class DownRecordServiceImpl implements DownRecordService {
redisUtils.set(CacheKey.DMP_MANUAL_ID.concat(format), batch, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS);
Long recordId = deliveryRecordService.saveDeliveryRecord(zipPath, taskImeiName, dtoArrayList.size(), null,
SecurityUtils.getCurrentUserId(), DefaultNumberConstants.TWO_NUMBER);
String filePath = deliveryProperties.getDmpDownPath().concat(uuid).concat(".zip");
String filePath = deliveryProperties.getDmpDownPath().concat(uuid).concat(FileConstant.ZIP_FILE_SUB_NAME);
this.createRecord(dtoArrayList.size(), "超级管理员", taskName, zipPath, filePath, recordId, DefaultNumberConstants.TWO_NUMBER);
return Boolean.TRUE;
}

@ -11,11 +11,13 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baiye.config.properties.DeliveryProperties;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.constant.FileConstant;
import com.baiye.modules.system.domain.Company;
import com.baiye.modules.system.domain.TaskImei;
import com.baiye.modules.system.service.*;
import com.baiye.modules.system.service.dto.ImeiDTO;
import com.baiye.modules.system.service.dto.TaskTagDto;
import com.baiye.modules.telemarkting.entity.ClueMiddle;
import com.baiye.util.*;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
@ -48,12 +50,15 @@ public class DeliveryBalanceTask {
private final TaskImeiService taskImeiService;
private final ClueTalkService clueTalkService;
private final DownRecordService downRecordService;
private final DeliveryProperties deliveryProperties;
private final DeliveryRecordService deliveryRecordService;
/**
* 821
*/
@ -64,8 +69,7 @@ public class DeliveryBalanceTask {
List<TaskImei> imeiList = taskImeiService.findByStatus(DefaultNumberConstants.ZERO_NUMBER);
if (CollUtil.isNotEmpty(imeiList)) {
// 根据任务id分组
Map<Long, List<TaskImei>> listMap = imeiList.stream()
.collect(Collectors.groupingBy(TaskImei::getTaskId));
Map<Long, List<TaskImei>> listMap = imeiList.stream().collect(Collectors.groupingBy(TaskImei::getTaskId));
for (Map.Entry<Long, List<TaskImei>> map : listMap.entrySet()) {
Long taskId = map.getKey();
List<TaskImei> list = listMap.get(taskId);
@ -76,111 +80,120 @@ public class DeliveryBalanceTask {
if (ObjectUtil.isNotNull(companyByUserId) &&
// 判断价格
ObjectUtil.isNotNull(companyByUserId.getDmpDeliveryFee())) {
boolean limitFlag = ObjectUtil.isNotNull(companyByUserId.getDmpLimitNum()) &&
companyByUserId.getDmpLimitNum() == DefaultNumberConstants.ONE_HUNDRED;
Integer dmpLimitNum = companyByUserId.getDmpLimitNum();
// 判断余额
if (companyByUserId.getUserBalance() <= DefaultNumberConstants.ZERO_NUMBER || limitFlag) {
if (companyByUserId.getUserBalance() <= DefaultNumberConstants.ZERO_NUMBER) {
continue;
}
// 截取数据
if (ObjectUtil.isNotNull(companyByUserId.getDmpLimitNum())
&& companyByUserId.getDmpLimitNum() > DefaultNumberConstants.ZERO_NUMBER
&& list.size() > companyByUserId.getDmpLimitNum()) {
downList = CollUtil.sub(list, companyByUserId.getDmpLimitNum(), list.size());
list = CollUtil.sub(list, DefaultNumberConstants.ZERO_NUMBER, companyByUserId.getDmpLimitNum());
if (ObjectUtil.isNotNull(dmpLimitNum)
&& dmpLimitNum > DefaultNumberConstants.ZERO_NUMBER) {
// 统计今天数量
Integer count = taskImeiService.countByUserIdAndDate(taskId, DefaultNumberConstants.FOUR_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);
}
// 每次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 = "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(".csv");
CSVFileUtil.createCsvFile(toList, csvPath);
String zipPath = file.concat(".zip");
// 设置压缩文件
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(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);
}
}
}
}
if (CollUtil.isNotEmpty(downList)) {
log.info("============================= down list size as {} =============================", downList.size());
Long minId = (long) DefaultNumberConstants.ZERO_NUMBER;
Long maxId = (long) DefaultNumberConstants.ZERO_NUMBER;
TaskTagDto taskTagDto = taskService.queryDmpTask(taskId);
Comparator<TaskImei> comparing = Comparator.comparing(TaskImei::getId);
// 最小id
Optional<TaskImei> min = downList.stream().min(comparing);
if (min.isPresent()) {
minId = min.get().getId();
}
// 最大id
Optional<TaskImei> max = downList.stream().max(comparing);
if (max.isPresent()) {
maxId = max.get().getId();
}
String uuid = IdUtil.fastSimpleUUID();
String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(uuid);
// 转换DTO
List<ImeiDTO> toList = Convert.toList(ImeiDTO.class, downList);
// 保存文件
String csvPath = file.concat(".csv");
CSVFileUtil.createCsvFile(toList, csvPath);
String zipPath = file.concat(".zip");
String filePath = deliveryProperties.getDmpDownPath().concat(uuid).concat(".zip");
// 设置压缩文件
CompressUtil.decryptionCompression(zipPath, csvPath, deliveryProperties.getZipPassword());
downRecordService.createRecord(downList.size(), companyByUserId.getCompanyName(), taskTagDto.getTaskName(), zipPath, filePath, null, DefaultNumberConstants.ONE_NUMBER);
// 修改状态
taskImeiService.updateBath(taskId, CharSequenceUtil.EMPTY, DefaultNumberConstants.ONE_NUMBER, minId, maxId);
// 处理下载包
zipDownList(taskId, downList, companyByUserId);
}
}
}
}
}
private void zipDownList(Long taskId, List<TaskImei> downList, Company companyByUserId) {
log.info("============================= down list size as {} =============================", downList.size());
Long minId = (long) DefaultNumberConstants.ZERO_NUMBER;
Long maxId = (long) DefaultNumberConstants.ZERO_NUMBER;
TaskTagDto taskTagDto = taskService.queryDmpTask(taskId);
Comparator<TaskImei> comparing = Comparator.comparing(TaskImei::getId);
// 最小id
Optional<TaskImei> min = downList.stream().min(comparing);
if (min.isPresent()) {
minId = min.get().getId();
}
// 最大id
Optional<TaskImei> max = downList.stream().max(comparing);
if (max.isPresent()) {
maxId = max.get().getId();
}
String uuid = IdUtil.fastSimpleUUID();
String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(uuid);
// 转换DTO
List<ImeiDTO> toList = Convert.toList(ImeiDTO.class, downList);
// 保存文件
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);
String filePath = deliveryProperties.getDmpDownPath().concat(uuid).concat(FileConstant.ZIP_FILE_SUB_NAME);
// 设置压缩文件
CompressUtil.decryptionCompression(zipPath, csvPath, deliveryProperties.getZipPassword());
downRecordService.createRecord(downList.size(), companyByUserId.getCompanyName(), taskTagDto.getTaskName(), zipPath, filePath, null, DefaultNumberConstants.ONE_NUMBER);
// 修改状态
taskImeiService.updateBath(taskId, CharSequenceUtil.EMPTY, DefaultNumberConstants.ONE_NUMBER, minId, maxId);
}
}

@ -69,7 +69,7 @@ public class CSVFileUtil {
// 去除重复
List<String> phoneSets = Lists.newArrayList(Sets.newHashSet(phoneList));
File csvFile = new File("C:\\Users\\a\\Desktop\\12-1.csv");
File csvFile = new File("C:\\Users\\a\\Desktop\\12-6-dmp.csv");
//导入HuTool中CSV工具包的CsvWriter类
//设置导出字符类型, CHARSET_UTF_8
CsvWriter writer = CsvUtil.getWriter(csvFile, CharsetUtil.CHARSET_UTF_8);

@ -63,10 +63,10 @@ public class MailSourceTask {
private final ClueService clueService;
private final ClueTalkRepository clueTalkRepository;
private final DownRecordClient downRecordClient;
private final ClueTalkRepository clueTalkRepository;
private final DeliveryProperties deliveryProperties;
private final DeliveryRecordService deliveryRecordService;
@ -185,7 +185,7 @@ public class MailSourceTask {
(deliveryProperties.getEmailAddress(), deliveryProperties.getEmailPassword());
for (Message message : list) {
Date sentDate = message.getSentDate();
// 时间偏移三十天
// 时间偏移
DateTime dateTime = DateUtil.offsetDay(DateUtil.date(), -DefaultNumberConstants.FIVE_NUMBER);
if (dateTime.after(sentDate)) {
// 删除邮件

Loading…
Cancel
Save