diff --git a/manage/ad-platform-management/src/main/java/com/baiye/config/properties/DeliveryProperties.java b/manage/ad-platform-management/src/main/java/com/baiye/config/properties/DeliveryProperties.java index bb572ad3..76ed3493 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/config/properties/DeliveryProperties.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/config/properties/DeliveryProperties.java @@ -35,4 +35,8 @@ public class DeliveryProperties { @ApiModelProperty("回调地址") private String responseUrl; + @ApiModelProperty("dmp下载地址") + private String dmpDownPath; + + } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Company.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Company.java index 1dbbb25a..61bfc8b5 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Company.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Company.java @@ -99,6 +99,10 @@ public class Company extends BaseEntity implements Serializable { @Column(name = "company_type") private Integer companyType; + @ApiModelProperty("dmp上传数量") + @Column(name = "dmp_limit_num") + private Integer dmpLimitNum; + @ApiModelProperty("授权状态") @Column(name = "authorization_state") diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/DownRecord.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/DownRecord.java new file mode 100644 index 00000000..dd8c8451 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/DownRecord.java @@ -0,0 +1,60 @@ +package com.baiye.modules.system.domain; + +import com.baiye.model.base.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author Enzo + * @date : 2022/11/17 + */ +@Entity +@Getter +@Setter +@Table(name="tb_down_record") +public class DownRecord extends BaseEntity implements Serializable { + + private static final long serialVersionUID = -138769395974456800L; + + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + @ApiModelProperty(value = "ID", hidden = true) + private Long id; + + + @Column(name = "status") + @ApiModelProperty(value = "下载状态") + private Integer status; + + @Column(name = "task_id") + @ApiModelProperty(value = "任务id") + private Long taskId; + + @Column(name = "user_id") + @ApiModelProperty(value = "用户id") + private Long userId; + + @Column(name = "company_id") + @ApiModelProperty(value = "公司id") + private Long companyId; + + @Column(name = "company_name") + @ApiModelProperty(value = "公司名称") + private String companyName; + + @Column(name = "down_url") + @ApiModelProperty(value = "下载链接") + private String downUrl; + + + @Column(name = "task_name") + @ApiModelProperty(value = "任务名称") + private String taskName; + + +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/vo/CompanyComboVO.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/vo/CompanyComboVO.java index 150fedc8..2f0180ea 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/vo/CompanyComboVO.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/vo/CompanyComboVO.java @@ -3,8 +3,6 @@ package com.baiye.modules.system.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import javax.validation.constraints.DecimalMax; -import javax.validation.constraints.DecimalMin; import java.util.Date; /** @@ -41,6 +39,7 @@ public class CompanyComboVO { @ApiModelProperty("dmp投放费用") private Double dmpDeliveryFee; + @ApiModelProperty("坐席号") private Integer seatNumber; diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/DownRecordRepository.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/DownRecordRepository.java new file mode 100644 index 00000000..64154c99 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/DownRecordRepository.java @@ -0,0 +1,14 @@ + +package com.baiye.modules.system.repository; + +import com.baiye.modules.system.domain.DownRecord; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +/** + * @author Enzo + * @date 2022-11-17 + */ +public interface DownRecordRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/TaskImeiRepository.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/TaskImeiRepository.java index 8050d9c3..90841f76 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/TaskImeiRepository.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/TaskImeiRepository.java @@ -44,13 +44,16 @@ public interface TaskImeiRepository extends JpaRepository, JpaSp /** * 修改数量 + * * @param num * @param taskImeiName * @param date * @param taskId + * @param minId + * @param maxId * @return */ @Modifying - @Query("UPDATE TaskImei i set i.status = ?1,i.taskName = ?2,i.updateTime = ?3 where i.taskId = ?4") - int updateImeiByTaskNameId(Integer num, String taskImeiName, DateTime date, Long taskId); + @Query("UPDATE TaskImei i set i.status = ?1,i.taskName = ?2,i.updateTime = ?3 where i.taskId = ?4 and i.id >= ?5 and i.id <= ?6") + int updateImeiByTaskNameId(Integer num, String taskImeiName, DateTime date, Long taskId, Long minId, Long maxId); } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/DebtFormController.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/DebtFormController.java index 49502aca..cabfecb7 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/DebtFormController.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/DebtFormController.java @@ -2,11 +2,9 @@ package com.baiye.modules.system.rest; import com.baiye.http.CommonResponse; import com.baiye.http.ResponseCode; -import com.baiye.model.dto.TaskQueryCriteria; import com.baiye.modules.system.domain.Debt; import com.baiye.modules.system.service.DebtFormService; import com.baiye.modules.system.service.dto.DebtQueryCriteria; -import com.baiye.modules.system.service.dto.DebtQueryResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/DownRecordController.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/DownRecordController.java new file mode 100644 index 00000000..02a686e3 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/DownRecordController.java @@ -0,0 +1,33 @@ +package com.baiye.modules.system.rest; + + +import com.baiye.modules.system.service.DownRecordService; +import com.baiye.modules.system.service.dto.DownRecordQueryCriteria; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +/** + * @author Enzo + * @date : 2022/11/17 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "系统下载dmp文件") +@RequestMapping("/api/down/record") +public class DownRecordController { + + private final DownRecordService downRecordService; + + + @ApiOperation("查询记录") + @GetMapping + public ResponseEntity query(DownRecordQueryCriteria criteria, Pageable pageable){ + return new ResponseEntity<>(downRecordService.queryAll(criteria, pageable), HttpStatus.OK); + } +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/DownRecordService.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/DownRecordService.java new file mode 100644 index 00000000..d4733116 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/DownRecordService.java @@ -0,0 +1,33 @@ +package com.baiye.modules.system.service; + +import com.baiye.modules.system.domain.Company; +import com.baiye.modules.system.service.dto.DownRecordQueryCriteria; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +/** + * @author Enzo + * @date : 2022/11/17 + */ +public interface DownRecordService { + + + /** + * 创建下载记录 + * @param companyByUserId + * @param taskId + * @param zipPath + * @return + */ + + Boolean createRecord(Company companyByUserId, Long taskId, String zipPath); + + /** + * 分页查询 + * @param criteria 条件 + * @param pageable 分页参数 + * @return / + */ + Map queryAll(DownRecordQueryCriteria criteria, Pageable pageable); +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/TaskImeiService.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/TaskImeiService.java index 8a7ec277..65955984 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/TaskImeiService.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/TaskImeiService.java @@ -42,10 +42,13 @@ public interface TaskImeiService { /** * 批量修改 + * * @param taskId * @param taskImeiName * @param num + * @param minId + * @param maxId * @return */ - Boolean updateBath(Long taskId, String taskImeiName, Integer num); + Boolean updateBath(Long taskId, String taskImeiName, Integer num, Long minId, Long maxId); } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/CompanyDto.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/CompanyDto.java index f19bfc54..044e090c 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/CompanyDto.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/CompanyDto.java @@ -108,4 +108,7 @@ public class CompanyDto extends BaseDTO implements Serializable { @ApiModelProperty("子用户数量") private Integer sonUserNum; + + @ApiModelProperty("dmp上传数量") + private Integer dmpLimitNum; } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/DownRecordQueryCriteria.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/DownRecordQueryCriteria.java new file mode 100644 index 00000000..5595b2a2 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/DownRecordQueryCriteria.java @@ -0,0 +1,36 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.baiye.modules.system.service.dto; + +import com.baiye.annotation.Query; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.sql.Timestamp; +import java.util.List; + +/** +* @author Zheng Jie +* @date 2019-6-4 14:49:34 +*/ +@Data +@NoArgsConstructor +public class DownRecordQueryCriteria { + + + @Query(type = Query.Type.BETWEEN) + private List createTime; +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/CompanyServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/CompanyServiceImpl.java index 1abeb119..2866ae2d 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/CompanyServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/CompanyServiceImpl.java @@ -7,7 +7,6 @@ import com.baiye.constant.DefaultNumberConstants; import com.baiye.exception.BadRequestException; import com.baiye.exception.EntityExistException; import com.baiye.model.enums.ResponseCode; -import com.baiye.modules.security.service.OnlineUserService; import com.baiye.modules.system.domain.Company; import com.baiye.modules.system.domain.PayFatherTemplate; import com.baiye.modules.system.domain.vo.CompanyComboVO; @@ -25,7 +24,6 @@ import com.baiye.util.QueryHelp; import com.baiye.util.SecurityUtils; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; -import org.hibernate.type.DoubleType; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; @@ -33,7 +31,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -152,6 +149,7 @@ public class CompanyServiceImpl implements CompanyService { @Override @Transactional(rollbackFor = Exception.class) + @CacheEvict(cacheNames = "companyCache", key = "#companyId") public void updateUserBalanceByCompanyId(Double balance, Long companyId) { companyRepository.updateUserBalance(balance, companyId); } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/DownRecordServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/DownRecordServiceImpl.java new file mode 100644 index 00000000..51a916a1 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/DownRecordServiceImpl.java @@ -0,0 +1,57 @@ +package com.baiye.modules.system.service.impl; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baiye.modules.system.domain.Company; +import com.baiye.modules.system.domain.DownRecord; +import com.baiye.modules.system.repository.DownRecordRepository; +import com.baiye.modules.system.service.DownRecordService; +import com.baiye.modules.system.service.TaskService; +import com.baiye.modules.system.service.dto.DownRecordQueryCriteria; +import com.baiye.modules.system.service.dto.TaskTagDto; +import com.baiye.util.PageUtil; +import com.baiye.util.QueryHelp; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * @author Enzo + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DownRecordServiceImpl implements DownRecordService { + + private final TaskService taskService; + + private final DownRecordRepository downRecordRepository; + + + @Override + public Boolean createRecord(Company company, Long taskId, String zipPath) { + DownRecord downRecord = new DownRecord(); + TaskTagDto taskTagDto = taskService.queryDmpTask(taskId); + downRecord.setTaskId(taskId); + downRecord.setDownUrl(zipPath); + downRecord.setCompanyId(company.getId()); + downRecord.setUserId(company.getUserId()); + downRecord.setId(IdUtil.getSnowflake().nextId()); + downRecord.setCompanyName(company.getCompanyName()); + if (ObjectUtil.isNotNull(taskTagDto)) { + downRecord.setTaskName(taskTagDto.getTaskName()); + } + return downRecordRepository.save(downRecord).getId() != null; + } + + @Override + public Map queryAll(DownRecordQueryCriteria criteria, Pageable pageable) { + Page page = downRecordRepository.findAll((root, query, cb) -> + QueryHelp.getPredicate(root, criteria, cb), pageable); + return PageUtil.toPage(page); + } +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/TaskImeiServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/TaskImeiServiceImpl.java index 00c759de..20f7862d 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/TaskImeiServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/TaskImeiServiceImpl.java @@ -77,9 +77,9 @@ public class TaskImeiServiceImpl implements TaskImeiService { } @Override - public Boolean updateBath(Long taskId, String taskImeiName, Integer num) { + public Boolean updateBath(Long taskId, String taskImeiName, Integer num, Long minId, Long maxId) { return taskImeiRepository.updateImeiByTaskNameId - (num, taskImeiName, DateUtil.date(), taskId) > DefaultNumberConstants.ZERO_NUMBER; + (num, taskImeiName, DateUtil.date(), taskId, minId, maxId) > DefaultNumberConstants.ZERO_NUMBER; } } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java index 2ee4644b..69a772c8 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java @@ -180,7 +180,7 @@ public class UserServiceImpl implements UserService { if (userDTO.getCompanyId() != null){ Integer sonUserNum = companyService.findCompanyInfo(userDTO.getCompanyId()).getSonUserNum(); int size = userRepository.findByCompanyId(userDTO.getCompanyId()).size() - DefaultNumberConstants.ONE_NUMBER; - if (sonUserNum > size){ + if (sonUserNum < size){ throw new BadRequestException("子账号超过上限,请联系管理员"); } } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java b/manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java index 2b025cc2..7ab5de8a 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java @@ -7,6 +7,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; 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 com.baiye.config.properties.DeliveryProperties; @@ -15,6 +16,7 @@ import com.baiye.modules.system.domain.Company; import com.baiye.modules.system.domain.TaskImei; import com.baiye.modules.system.service.CompanyService; import com.baiye.modules.system.service.DeliveryRecordService; +import com.baiye.modules.system.service.DownRecordService; import com.baiye.modules.system.service.TaskImeiService; import com.baiye.modules.system.service.dto.ImeiDTO; import com.baiye.util.*; @@ -26,8 +28,10 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -40,17 +44,19 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class DeliveryBalanceTask { - private final RedisUtils redisUtils; private final CompanyService companyService; private final TaskImeiService taskImeiService; + private final DownRecordService downRecordService; + private final DeliveryProperties deliveryProperties; private final DeliveryRecordService deliveryRecordService; + /** * 修改时间 为8点至21点 */ @@ -66,17 +72,28 @@ public class DeliveryBalanceTask { for (Map.Entry> map : listMap.entrySet()) { Long taskId = map.getKey(); List list = listMap.get(taskId); + List downList = Lists.newArrayList(); log.info("=================== the task Id as {},upload size as {} ====================", taskId, list.size()); Long userId = list.get(DefaultNumberConstants.ZERO_NUMBER).getUserId(); Company companyByUserId = companyService.findCompanyByUserId(userId); if (ObjectUtil.isNotNull(companyByUserId) // 判断价格 && ObjectUtil.isNotNull(companyByUserId.getDmpDeliveryFee())) { + + // 截取数据 + 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()); + } // 每次100000 数据 List> lists = Lists.partition (list, DefaultNumberConstants.ONE_HUNDRED_THOUSAND); // 批量发送 for (List taskImeiList : lists) { + Long minId = (long) DefaultNumberConstants.ZERO_NUMBER; + Long maxId = (long) DefaultNumberConstants.ZERO_NUMBER; // 大于100 进行兑换 if (taskImeiList.size() >= DefaultNumberConstants.ONE_HUNDRED) { BigDecimal decimal = NumberUtil.mul(companyByUserId.getDmpDeliveryFee(), BigDecimal.valueOf(taskImeiList.size())); @@ -86,39 +103,80 @@ public class DeliveryBalanceTask { (DefaultNumberConstants.ZERO_NUMBER)) < DefaultNumberConstants.ZERO_NUMBER) { continue; } + String fileUrl = deliveryProperties.getFileUrl(); + Comparator 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)); - // 转换DTO - List 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); - // 保存批次号 - redisUtils.set(CacheKey.DMP_REQUEST_ID.concat(format), batch, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS); - // 修改状态 修改余额 - taskImeiService.updateBath(taskId, CharSequenceUtil.EMPTY, DefaultNumberConstants.ONE_NUMBER); - deliveryRecordService.saveDeliveryRecord(zipPath, taskImeiName, taskImeiList.size(), taskId, userId); - companyService.updateUserBalanceByCompanyId(sub.doubleValue(), companyByUserId.getId()); + // 最小id + Optional min = taskImeiList.stream().min(comparing); + if (min.isPresent()) { + minId = min.get().getId(); + } + // 最大id + Optional max = taskImeiList.stream().max(comparing); + if (max.isPresent()) { + maxId = max.get().getId(); + } + if (minId > DefaultNumberConstants.ZERO_NUMBER && maxId > DefaultNumberConstants.ONE_HUNDRED) { + // 转换DTO + List 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); + // 保存批次号 + redisUtils.set(CacheKey.DMP_REQUEST_ID.concat(format), batch, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS); + // 修改状态 修改余额 + taskImeiService.updateBath(taskId, CharSequenceUtil.EMPTY, DefaultNumberConstants.ONE_NUMBER, minId, maxId); + deliveryRecordService.saveDeliveryRecord(zipPath, taskImeiName, taskImeiList.size(), taskId, userId); + companyService.updateUserBalanceByCompanyId(sub.doubleValue(), companyByUserId.getId()); - // 删除文件 - 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); + // 删除文件 + 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)) { + Long minId = (long) DefaultNumberConstants.ZERO_NUMBER; + Long maxId = (long) DefaultNumberConstants.ZERO_NUMBER; + Comparator comparing = Comparator.comparing(TaskImei::getId); + // 最小id + Optional min = downList.stream().min(comparing); + if (min.isPresent()) { + minId = min.get().getId(); + } + // 最大id + Optional max = downList.stream().max(comparing); + if (max.isPresent()) { + maxId = max.get().getId(); } + String uuid = IdUtil.fastSimpleUUID(); + String file = deliveryProperties.getDmpDownPath().concat(uuid); + // 转换DTO + List toList = Convert.toList(ImeiDTO.class, downList); + // 保存文件 + String csvPath = file.concat(".csv"); + CSVFileUtil.createCsvFile(toList, csvPath); + String zipPath = file.concat(".zip"); + // 设置压缩文件 + CompressUtil.decryptionCompression + (zipPath, csvPath, deliveryProperties.getZipPassword()); + downRecordService.createRecord(companyByUserId, taskId, zipPath); + // 修改状态 + taskImeiService.updateBath(taskId, CharSequenceUtil.EMPTY, DefaultNumberConstants.ONE_NUMBER, minId, maxId); } } } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/util/CSVFileUtil.java b/manage/ad-platform-management/src/main/java/com/baiye/util/CSVFileUtil.java index 90b58411..4f06cfd1 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/util/CSVFileUtil.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/util/CSVFileUtil.java @@ -1,11 +1,16 @@ package com.baiye.util; +import cn.hutool.core.text.csv.CsvData; +import cn.hutool.core.text.csv.CsvReader; import cn.hutool.core.text.csv.CsvUtil; import cn.hutool.core.text.csv.CsvWriter; import cn.hutool.core.util.CharsetUtil; +import com.baiye.constant.AdPlatFormConstants; +import com.baiye.constant.DefaultNumberConstants; import com.baiye.exception.BadRequestException; import com.baiye.modules.system.service.dto.ImeiDTO; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import org.apache.poi.ss.formula.functions.T; import java.io.*; @@ -44,11 +49,41 @@ public class CSVFileUtil { } public static void main(String[] args) { - List list = Lists.newArrayList(); - ImeiDTO dto = new ImeiDTO(); - dto.setImei("123"); - dto.setTag("234"); - list.add(dto); - createCsvFile(list, "E:\\test.csv"); + + + + File file = new File("C:\\Users\\a\\Desktop\\1.csv"); + List phoneList = Lists.newArrayList(); + List tagList = Lists.newArrayList(); + CsvReader reader = CsvUtil.getReader(); + + + // 解析文件 + CsvData data = reader.read(file); + + data.getRows().forEach(clue -> phoneList.add + (clue.get(DefaultNumberConstants.TWO_NUMBER))); + + for (String s : phoneList) { + System.out.println(s); + } + + // 去除重复 + List phoneSets = Lists.newArrayList(Sets.newHashSet(phoneList)); + + File csvFile = new File("C:\\Users\\a\\Desktop\\11-17-dmp.csv"); + //导入HuTool中CSV工具包的CsvWriter类 + //设置导出字符类型, CHARSET_UTF_8 + CsvWriter writer = CsvUtil.getWriter(csvFile, CharsetUtil.CHARSET_UTF_8); + + for (int i = 0; i < phoneSets.size(); i++) { + String decrypt = AESUtils.decrypt(phoneSets.get(i), AdPlatFormConstants.AD_PLATFORM); + if (MobileUtil.checkPhone(decrypt)) { + writer.writeLine(decrypt); + } + + } + writer.close(); + } } diff --git a/manage/ad-platform-management/src/main/resources/config/application-dev.yml b/manage/ad-platform-management/src/main/resources/config/application-dev.yml index ab804f1f..f9952c0c 100644 --- a/manage/ad-platform-management/src/main/resources/config/application-dev.yml +++ b/manage/ad-platform-management/src/main/resources/config/application-dev.yml @@ -181,7 +181,8 @@ platform: emailAddress: ensoze@outlook.com emailPassword: baiye2022 customerId: QISX0xz4l6fR3YL2sUNSpzM2 - toEmailAddress: ggggod_2022@outlook.com + toEmailAddress: ensoze@outlook.com + dmpDownPath: /home/eladmin/mail/down/ # 巨量引擎配置 ocean: diff --git a/manage/ad-platform-management/src/main/resources/config/application-prod.yml b/manage/ad-platform-management/src/main/resources/config/application-prod.yml index fd28e663..2b4f149e 100644 --- a/manage/ad-platform-management/src/main/resources/config/application-prod.yml +++ b/manage/ad-platform-management/src/main/resources/config/application-prod.yml @@ -182,6 +182,7 @@ platform: emailPassword: baiye2022 toEmailAddress: ggggod_2022@outlook.com customerId: QISX0xz4l6fR3YL2sUNSpzM2 + dmpDownPath: https://baiyee.vip/dmp/down/ # 巨量引擎配置 ocean: engine: diff --git a/manage/ad-platform-management/src/test/java/com/baiye/OceanEngineTest.java b/manage/ad-platform-management/src/test/java/com/baiye/OceanEngineTest.java index 91b3a5f2..377fa623 100644 --- a/manage/ad-platform-management/src/test/java/com/baiye/OceanEngineTest.java +++ b/manage/ad-platform-management/src/test/java/com/baiye/OceanEngineTest.java @@ -1,5 +1,6 @@ package com.baiye; +import com.baiye.modules.system.service.CompanyService; import com.baiye.modules.system.service.OceanEngineService; import lombok.extern.slf4j.Slf4j; import net.minidev.json.JSONObject; @@ -36,6 +37,9 @@ public class OceanEngineTest { @Resource private OceanEngineService oceanEngineService; + @Resource + private CompanyService companyService; + @Test public void getSetting() { @@ -119,6 +123,11 @@ public class OceanEngineTest { + @Test + public void changeCompany(){ + companyService.updateUserBalanceByCompanyId(2000.0,9L ); + System.out.println(""); + } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java index 79bcf2d7..d0ed49cd 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java @@ -216,7 +216,7 @@ public class ClueJpa { String key = "task:encryption:" + taskId; String str = String.valueOf(redisUtils.get(key)); //fixme 投流线索 返回处理 - if (clueType == 4) { + if (clueType != null && clueType == 4) { clueDto.setNid(RandomUtil.randomString(22)); } else { // 查看资源是否需要加密显示 @@ -417,12 +417,16 @@ public class ClueJpa { clue.setCreateTime((Date) row.get("createTime")); clue.setName((String) row.get("name")); String nid = AESUtils.decrypt(phone, secret); - if (isEncryption == 1) { - StringBuilder stringBuilder = new StringBuilder(nid); - String strRep = stringBuilder.replace(3, 7, "****").toString(); - clue.setNid(strRep); + if (clueType != null && clueType == 4) { + clue.setNid(RandomUtil.randomString(22)); } else { - clue.setNid(nid); + if (isEncryption == 1) { + StringBuilder stringBuilder = new StringBuilder(nid); + String strRep = stringBuilder.replace(3, 7, "****").toString(); + clue.setNid(strRep); + } else { + clue.setNid(nid); + } } BigInteger taskId = (BigInteger) row.get("taskId"); clue.setTaskId(taskId.longValue()); diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/entity/TurnCrmLog.java b/services/ad-platform-source/src/main/java/com/baiye/module/entity/TurnCrmLog.java index d89099dc..49b34099 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/entity/TurnCrmLog.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/entity/TurnCrmLog.java @@ -24,7 +24,6 @@ public class TurnCrmLog implements Serializable { @Id @ApiModelProperty(value = "主键ID") @Column(name = "clue_id") - @GeneratedValue(strategy = GenerationType.AUTO) private Long clueId; @ApiModelProperty(value = "用户ID") diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java index 2ae2be2a..16715008 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java @@ -789,15 +789,15 @@ public class ClueServiceImpl implements ClueService { @Override @Transactional(rollbackFor = Exception.class) public void clueBackFlow(Long taskId, Long clueId, Long userId, Integer clueType) { - Integer userCount = turnCrmLogRepository.findByUserIdCount(userId); - UserDto userInfo = userClient.findUserInfo(userId); + ClueMiddle clueMiddle = clueMiddleRepository.findById(clueId).orElseGet(ClueMiddle::new); + Integer userCount = turnCrmLogRepository.findByUserIdCount(clueMiddle.getMemberId()); + UserDto userInfo = userClient.findUserInfo(clueMiddle.getMemberId()); if (userCount != null && userCount > userInfo.getTurnCrmNum()){ throw new BadRequestException("回流失败, 每天上限" + userInfo.getTurnCrmNum() +"条,请联系管理员"); } // 初始化线索加密字段 Clue clue = clueRepository.findById(clueId).orElseGet(Clue::new); clue.setIsEncryption(DefaultNumberConstants.ZERO_NUMBER); - ClueMiddle clueMiddle = clueMiddleRepository.findById(clueId).orElseGet(ClueMiddle::new); //查看crm任务 TaskQueryCriteria taskQueryCriteria = new TaskQueryCriteria(); int crmClueType = 0; diff --git a/services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java b/services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java index 17b896c1..dcc80214 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java +++ b/services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java @@ -78,13 +78,12 @@ public class MailSourceTask { if (deliveryProperties.getToEmailAddress().equalsIgnoreCase (MailUtil.getFrom((MimeMessage) message))) { String taskName = message.getSubject(); - log.info(message.getSubject()); String str = (String) redisUtils.get(taskName); if (StringUtils.isNotBlank(str)) { continue; } - // 设置一天缓存 - redisUtils.set(taskName, taskName, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS); + // 设置十分钟缓存 + redisUtils.set(taskName, taskName, DefaultNumberConstants.TEN_NUMBER, TimeUnit.MINUTES); // 内容获取发送请求 DeliveryRecord byTaskName = deliveryRecordService.findByTaskName(taskName); if (ObjectUtil.isNotNull(byTaskName)