增加邮件内容
parent
573f009f43
commit
948bccee7c
@ -0,0 +1,47 @@
|
|||||||
|
package com.baiye.model.entity;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.EntityListeners;
|
||||||
|
import javax.persistence.MappedSuperclass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@MappedSuperclass
|
||||||
|
@EntityListeners(AuditingEntityListener.class)
|
||||||
|
public class BaseDeliveryRecord {
|
||||||
|
@ApiModelProperty("任务id")
|
||||||
|
@Column(name = "task_id")
|
||||||
|
private Long taskId;
|
||||||
|
|
||||||
|
@ApiModelProperty("用户id")
|
||||||
|
@Column(name = "user_id")
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务名称")
|
||||||
|
@Column(name = "task_name")
|
||||||
|
private String taskName;
|
||||||
|
|
||||||
|
@Column(name = "status")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@ApiModelProperty("上传链接")
|
||||||
|
@Column(name = "upload_url")
|
||||||
|
private String uploadUrl;
|
||||||
|
|
||||||
|
@ApiModelProperty("下载链接")
|
||||||
|
@Column(name = "down_url")
|
||||||
|
private String downUrl;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务数量")
|
||||||
|
@Column(name = "num")
|
||||||
|
private Integer num;
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.baiye.config.properties;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Configuration
|
||||||
|
@ConfigurationProperties(prefix = "platform")
|
||||||
|
public class DeliveryProperties {
|
||||||
|
|
||||||
|
@ApiModelProperty("文件地址")
|
||||||
|
private String fileUrl;
|
||||||
|
|
||||||
|
@ApiModelProperty("customerId")
|
||||||
|
private String customerId;
|
||||||
|
|
||||||
|
@ApiModelProperty("emailAddress")
|
||||||
|
private String emailAddress;
|
||||||
|
|
||||||
|
@ApiModelProperty("emailPassword")
|
||||||
|
private String emailPassword;
|
||||||
|
|
||||||
|
@ApiModelProperty("toEmailAddress")
|
||||||
|
private String toEmailAddress;
|
||||||
|
|
||||||
|
@ApiModelProperty("回调地址")
|
||||||
|
private String responseUrl;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.baiye.modules.system.repository;
|
||||||
|
|
||||||
|
import com.baiye.modules.system.domain.DeliveryRecord;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
public interface DeliveryRecordRepository extends
|
||||||
|
JpaRepository<DeliveryRecord, Long>, JpaSpecificationExecutor<DeliveryRecord> {
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package com.baiye.modules.system.repository;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
|
import com.baiye.modules.system.domain.TaskImei;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
|
import org.springframework.data.jpa.repository.Modifying;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author jt
|
||||||
|
*/
|
||||||
|
@Repository
|
||||||
|
public interface TaskImeiRepository extends JpaRepository<TaskImei, Long>, JpaSpecificationExecutor<TaskImei> {
|
||||||
|
/**
|
||||||
|
* 任务id查找
|
||||||
|
* @param taskId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<TaskImei> findAllByTaskId(Long taskId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态查找
|
||||||
|
* @param num
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<TaskImei> findByStatus(Integer num);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改兑换数量
|
||||||
|
*
|
||||||
|
* @param status
|
||||||
|
* @param updateDate
|
||||||
|
* @param taskName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Modifying
|
||||||
|
@Query("UPDATE TaskImei i set i.status = ?1,i.updateTime = ?2 where i.taskName = ?3")
|
||||||
|
int updateImeiByTaskName(Integer status, Date updateDate, String taskName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改数量
|
||||||
|
* @param num
|
||||||
|
* @param taskImeiName
|
||||||
|
* @param date
|
||||||
|
* @param taskId
|
||||||
|
* @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);
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.baiye.modules.system.rest;
|
||||||
|
|
||||||
|
import com.baiye.http.CommonResponse;
|
||||||
|
import com.baiye.modules.system.service.TaskImeiService;
|
||||||
|
import com.baiye.modules.system.service.dto.PlatformTransmitDTO;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Api(tags = "系统:角色管理")
|
||||||
|
@RequestMapping("/api/taskImei")
|
||||||
|
public class TaskImeiController {
|
||||||
|
|
||||||
|
private final TaskImeiService taskImeiService;
|
||||||
|
|
||||||
|
@ApiOperation("修改用户")
|
||||||
|
@GetMapping("/updateImei")
|
||||||
|
public ResponseEntity<Object> update(@RequestParam("taskName") String taskName) {
|
||||||
|
taskImeiService.updateImeiByTaskName(taskName);
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("接受ad-back任务资源")
|
||||||
|
@PostMapping("/callback/add")
|
||||||
|
public CommonResponse<Object> acceptAdBackSource(@RequestBody PlatformTransmitDTO transmitDTO) {
|
||||||
|
return Boolean.TRUE.equals(taskImeiService.acceptAdBackSource(transmitDTO)) ?
|
||||||
|
CommonResponse.createBySuccess() : CommonResponse.createByError();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.baiye.modules.system.service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
public interface DeliveryRecordService {
|
||||||
|
/**
|
||||||
|
* 保存投放记录
|
||||||
|
*
|
||||||
|
* @param filePath
|
||||||
|
* @param taskName
|
||||||
|
* @param num
|
||||||
|
* @param taskId
|
||||||
|
* @param userId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean saveDeliveryRecord(String filePath, String taskName, Integer num, Long taskId, Long userId);
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.baiye.modules.system.service;
|
||||||
|
|
||||||
|
import com.baiye.modules.system.domain.PayComboUser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
public interface PayComboUserService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户查找购买套餐
|
||||||
|
* @param userId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
PayComboUser findTemplateByUserId(Long userId);
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package com.baiye.modules.system.service;
|
||||||
|
|
||||||
|
import com.baiye.modules.system.domain.TaskImei;
|
||||||
|
import com.baiye.modules.system.service.dto.PlatformTransmitDTO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
public interface TaskImeiService {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态查找集合
|
||||||
|
* @param num
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<TaskImei> findByStatus(Integer num);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 接收消息
|
||||||
|
* @param transmitDTO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean acceptAdBackSource(PlatformTransmitDTO transmitDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量修改数据
|
||||||
|
* @param taskImeiList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean updateBath(List<TaskImei> taskImeiList);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务名称修改状态
|
||||||
|
* @param taskName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean updateImeiByTaskName(String taskName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量修改
|
||||||
|
* @param taskId
|
||||||
|
* @param taskImeiName
|
||||||
|
* @param num
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean updateBath(Long taskId, String taskImeiName, Integer num);
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.baiye.modules.system.service.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class DeliveryDecryptResponseDTO {
|
||||||
|
|
||||||
|
@ApiModelProperty("结果")
|
||||||
|
private Boolean result;
|
||||||
|
|
||||||
|
@ApiModelProperty("请求返回信息/错误说明")
|
||||||
|
private String msg;
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.baiye.modules.system.service.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/21
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ImeiDTO implements Serializable {
|
||||||
|
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -3271582444610218303L;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "imei")
|
||||||
|
private String imei;
|
||||||
|
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "tag")
|
||||||
|
private String tag;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.baiye.modules.system.service.impl;
|
||||||
|
|
||||||
|
import com.baiye.constant.DefaultNumberConstants;
|
||||||
|
import com.baiye.modules.system.domain.DeliveryRecord;
|
||||||
|
import com.baiye.modules.system.repository.DeliveryRecordRepository;
|
||||||
|
import com.baiye.modules.system.service.DeliveryRecordService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class DeliveryRecordServiceImpl implements DeliveryRecordService {
|
||||||
|
|
||||||
|
private final DeliveryRecordRepository deliveryRecordRepository;
|
||||||
|
@Override
|
||||||
|
public Boolean saveDeliveryRecord(String filePath, String taskName, Integer num, Long taskId, Long userId) {
|
||||||
|
DeliveryRecord deliveryRecord = new DeliveryRecord();
|
||||||
|
deliveryRecord.setNum(num);
|
||||||
|
deliveryRecord.setUserId(userId);
|
||||||
|
deliveryRecord.setTaskId(taskId);
|
||||||
|
deliveryRecord.setTaskName(taskName);
|
||||||
|
deliveryRecord.setUploadUrl(filePath);
|
||||||
|
deliveryRecord.setStatus(DefaultNumberConstants.ZERO_NUMBER);
|
||||||
|
return deliveryRecordRepository.save(deliveryRecord).getId() != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.baiye.modules.system.service.impl;
|
||||||
|
|
||||||
|
import com.baiye.modules.system.domain.PayComboUser;
|
||||||
|
import com.baiye.modules.system.repository.PayComboUserRepository;
|
||||||
|
import com.baiye.modules.system.service.PayComboUserService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class PayComboUserServiceImpl implements PayComboUserService {
|
||||||
|
|
||||||
|
private final PayComboUserRepository payComboUserRepository;
|
||||||
|
@Override
|
||||||
|
public PayComboUser findTemplateByUserId(Long userId) {
|
||||||
|
return payComboUserRepository.findTemplateByUserId(userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,86 @@
|
|||||||
|
package com.baiye.modules.system.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import com.baiye.constant.DefaultNumberConstants;
|
||||||
|
import com.baiye.modules.system.domain.TaskImei;
|
||||||
|
import com.baiye.modules.system.repository.TaskImeiRepository;
|
||||||
|
import com.baiye.modules.system.service.TaskImeiService;
|
||||||
|
import com.baiye.modules.system.service.dto.PlateFormDTO;
|
||||||
|
import com.baiye.modules.system.service.dto.PlatformTransmitDTO;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class TaskImeiServiceImpl implements TaskImeiService {
|
||||||
|
|
||||||
|
@Value("${platform.authToken}")
|
||||||
|
private String authToken;
|
||||||
|
|
||||||
|
private final TaskImeiRepository taskImeiRepository;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TaskImei> findByStatus(Integer num) {
|
||||||
|
return taskImeiRepository.findByStatus(num);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dmp
|
||||||
|
*
|
||||||
|
* @param transmitDTO
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean acceptAdBackSource(PlatformTransmitDTO transmitDTO) {
|
||||||
|
if (StringUtils.isNotBlank(transmitDTO.getAuthToken())
|
||||||
|
&& transmitDTO.getAuthToken().equalsIgnoreCase(authToken)) {
|
||||||
|
List<TaskImei> imeiList = Lists.newArrayList();
|
||||||
|
for (PlateFormDTO plateForm : transmitDTO.getList()) {
|
||||||
|
TaskImei taskImei = new TaskImei();
|
||||||
|
taskImei.setTag(plateForm.getTag());
|
||||||
|
taskImei.setImei(plateForm.getImei());
|
||||||
|
taskImei.setCreateTime(DateUtil.date());
|
||||||
|
taskImei.setUserId(transmitDTO.getUserId());
|
||||||
|
taskImei.setTaskId(transmitDTO.getTaskId());
|
||||||
|
taskImei.setStatus(DefaultNumberConstants.ZERO_NUMBER);
|
||||||
|
imeiList.add(taskImei);
|
||||||
|
}
|
||||||
|
taskImeiRepository.saveAll(imeiList);
|
||||||
|
return Boolean.TRUE;
|
||||||
|
}
|
||||||
|
return Boolean.FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateBath(List<TaskImei> taskImeiList) {
|
||||||
|
return taskImeiRepository.saveAll(taskImeiList).size() == taskImeiList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public Boolean updateImeiByTaskName(String taskName) {
|
||||||
|
return taskImeiRepository.updateImeiByTaskName
|
||||||
|
(DefaultNumberConstants.ONE_NUMBER, DateUtil.date(), taskName)
|
||||||
|
> DefaultNumberConstants.ZERO_NUMBER;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateBath(Long taskId, String taskImeiName, Integer num) {
|
||||||
|
return taskImeiRepository.updateImeiByTaskNameId
|
||||||
|
(num, taskImeiName, DateUtil.date(), taskId) > DefaultNumberConstants.ZERO_NUMBER;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,111 @@
|
|||||||
|
package com.baiye.timed;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.convert.Convert;
|
||||||
|
import cn.hutool.core.io.FileUtil;
|
||||||
|
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.StrUtil;
|
||||||
|
import com.baiye.config.properties.DeliveryProperties;
|
||||||
|
import com.baiye.constant.DefaultNumberConstants;
|
||||||
|
import com.baiye.modules.system.domain.*;
|
||||||
|
import com.baiye.modules.system.service.*;
|
||||||
|
import com.baiye.modules.system.service.dto.ImeiDTO;
|
||||||
|
import com.baiye.util.CSVFileUtil;
|
||||||
|
import com.baiye.util.MailUtil;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class DeliveryBalanceTask {
|
||||||
|
|
||||||
|
private final CompanyService companyService;
|
||||||
|
|
||||||
|
private final TaskImeiService taskImeiService;
|
||||||
|
|
||||||
|
private final DeliveryProperties deliveryProperties;
|
||||||
|
|
||||||
|
private final DeliveryRecordService deliveryRecordService;
|
||||||
|
|
||||||
|
private final PayFatherTemplateService payFatherTemplateService;
|
||||||
|
|
||||||
|
|
||||||
|
@Scheduled(cron = "0 0/30 * * * ? ")
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void cashResources() {
|
||||||
|
// 查询所有未兑换的
|
||||||
|
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));
|
||||||
|
for (Map.Entry<Long, List<TaskImei>> map : listMap.entrySet()) {
|
||||||
|
Long taskId = map.getKey();
|
||||||
|
List<TaskImei> list = listMap.get(taskId);
|
||||||
|
Long userId = list.get(DefaultNumberConstants.ZERO_NUMBER).getUserId();
|
||||||
|
Company companyByUserId = companyService.findCompanyByUserId(userId);
|
||||||
|
if (ObjectUtil.isNotNull(companyByUserId)
|
||||||
|
&& ObjectUtil.isNotNull(companyByUserId.getTemplateId())) {
|
||||||
|
// 查找模板
|
||||||
|
PayFatherTemplate template =
|
||||||
|
payFatherTemplateService.findById(companyByUserId.getTemplateId());
|
||||||
|
if (ObjectUtil.isNotNull(template) &&
|
||||||
|
ObjectUtil.isNotNull(template.getDmpDeliveryFee())) {
|
||||||
|
// 每次100000 数据
|
||||||
|
List<List<TaskImei>> lists = Lists.partition
|
||||||
|
(list, DefaultNumberConstants.ONE_HUNDRED_THOUSAND);
|
||||||
|
// 批量发送
|
||||||
|
for (List<TaskImei> taskImeiList : lists) {
|
||||||
|
// 大于100 进行兑换
|
||||||
|
if (taskImeiList.size() >= DefaultNumberConstants.ONE_HUNDRED) {
|
||||||
|
BigDecimal decimal = NumberUtil.mul(template.getDmpDeliveryFee(), BigDecimal.valueOf(taskImeiList.size()));
|
||||||
|
BigDecimal sub = NumberUtil.sub(companyByUserId.getUserBalance(), decimal);
|
||||||
|
// 判断余额
|
||||||
|
if (sub.compareTo(BigDecimal.valueOf
|
||||||
|
(DefaultNumberConstants.ZERO_NUMBER)) < DefaultNumberConstants.ZERO_NUMBER) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String fileUrl = deliveryProperties.getFileUrl();
|
||||||
|
// 转换DTO
|
||||||
|
List<ImeiDTO> toList = Convert.toList(ImeiDTO.class, taskImeiList);
|
||||||
|
String taskImeiName = IdUtil.fastUUID();
|
||||||
|
// 保存文件
|
||||||
|
String filePath = fileUrl.concat(StrPool.SLASH).concat(taskImeiName).concat(".csv");
|
||||||
|
CSVFileUtil.createCsvFile(toList, filePath);
|
||||||
|
// 发送邮件
|
||||||
|
MailUtil.sendMail(deliveryProperties.getEmailAddress(),
|
||||||
|
deliveryProperties.getEmailPassword(),
|
||||||
|
deliveryProperties.getToEmailAddress(), filePath,
|
||||||
|
deliveryProperties.getCustomerId(), taskImeiName);
|
||||||
|
// 修改状态 修改余额
|
||||||
|
taskImeiService.updateBath(taskId, taskImeiName, DefaultNumberConstants.ONE_NUMBER);
|
||||||
|
deliveryRecordService.saveDeliveryRecord(filePath, taskImeiName, taskImeiList.size(), taskId, userId);
|
||||||
|
companyService.updateUserBalanceByCompanyId(sub.doubleValue(), companyByUserId.getId());
|
||||||
|
// 删除文件
|
||||||
|
FileUtil.del(filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
|||||||
|
package com.baiye.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.text.csv.CsvUtil;
|
||||||
|
import cn.hutool.core.text.csv.CsvWriter;
|
||||||
|
import cn.hutool.core.util.CharsetUtil;
|
||||||
|
import com.baiye.exception.BadRequestException;
|
||||||
|
import com.baiye.modules.system.service.dto.ImeiDTO;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import org.apache.poi.ss.formula.functions.T;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/21
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class CSVFileUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出csv格式工具类
|
||||||
|
*
|
||||||
|
* @param result 导出数据
|
||||||
|
* @param fileName 文件名
|
||||||
|
*/
|
||||||
|
public static void createCsvFile(List<ImeiDTO> result, String fileName) {
|
||||||
|
try {
|
||||||
|
//构造文件
|
||||||
|
File csvFile = new File(fileName);
|
||||||
|
//导入HuTool中CSV工具包的CsvWriter类
|
||||||
|
//设置导出字符类型, CHARSET_UTF_8
|
||||||
|
CsvWriter writer = CsvUtil.getWriter(csvFile, CharsetUtil.CHARSET_UTF_8);
|
||||||
|
|
||||||
|
//通过CsvWriter中的write方法写入数据
|
||||||
|
for (ImeiDTO dto : result) {
|
||||||
|
writer.writeLine(dto.getImei(), dto.getTag());
|
||||||
|
}
|
||||||
|
writer.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new BadRequestException("生成文件失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
List<ImeiDTO> list = Lists.newArrayList();
|
||||||
|
ImeiDTO dto = new ImeiDTO();
|
||||||
|
dto.setImei("123");
|
||||||
|
dto.setTag("234");
|
||||||
|
list.add(dto);
|
||||||
|
createCsvFile(list, "E:\\test.csv");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.baiye.config.properties;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Configuration
|
||||||
|
@ConfigurationProperties(prefix = "platform")
|
||||||
|
public class DeliveryProperties {
|
||||||
|
|
||||||
|
@ApiModelProperty("文件地址")
|
||||||
|
private String fileUrl;
|
||||||
|
|
||||||
|
@ApiModelProperty("customerId")
|
||||||
|
private String customerId;
|
||||||
|
|
||||||
|
@ApiModelProperty("emailAddress")
|
||||||
|
private String emailAddress;
|
||||||
|
|
||||||
|
@ApiModelProperty("emailPassword")
|
||||||
|
private String emailPassword;
|
||||||
|
|
||||||
|
@ApiModelProperty("toEmailAddress")
|
||||||
|
private String toEmailAddress;
|
||||||
|
|
||||||
|
@ApiModelProperty("回调地址")
|
||||||
|
private String responseUrl;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package com.baiye.feign;
|
||||||
|
|
||||||
|
import com.baiye.feign.fallback.OrganizeClientFallback;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author jt
|
||||||
|
*/
|
||||||
|
@FeignClient(value = "ad-platform-management", fallback = OrganizeClientFallback.class)
|
||||||
|
public interface TaskImeiClient {
|
||||||
|
|
||||||
|
String PAY_PREFIX = "/api/taskImei";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改兑换数量
|
||||||
|
*
|
||||||
|
* @param taskName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@ApiOperation("根据状态获取")
|
||||||
|
@GetMapping(PAY_PREFIX + "/updateImei")
|
||||||
|
ResponseEntity<Void> updateImei(@RequestParam("taskName") String taskName);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.baiye.feign.fallback;
|
||||||
|
|
||||||
|
import com.baiye.feign.TaskImeiClient;
|
||||||
|
import com.baiye.module.entity.OceanEngineToken;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author jt
|
||||||
|
*/
|
||||||
|
public class TaskImeiClientFallback implements TaskImeiClient {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseEntity<Void> updateImei(String taskName) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.baiye.module.dao;
|
||||||
|
|
||||||
|
import com.baiye.module.entity.DeliveryRecord;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
public interface DeliveryRecordRepository extends JpaRepository<DeliveryRecord, Long>, JpaSpecificationExecutor<DeliveryRecord> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务查找记录
|
||||||
|
* @param taskName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
DeliveryRecord findByTaskName(String taskName);
|
||||||
|
}
|
@ -1,16 +0,0 @@
|
|||||||
package com.baiye.module.dao;
|
|
||||||
|
|
||||||
import com.baiye.module.entity.TaskImei;
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author jt
|
|
||||||
*/
|
|
||||||
@Repository
|
|
||||||
public interface TaskImeiRepository extends JpaRepository<TaskImei, Long>, JpaSpecificationExecutor<TaskImei> {
|
|
||||||
List<TaskImei> findAllByTaskId(Long taskId);
|
|
||||||
}
|
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.baiye.module.service;
|
||||||
|
|
||||||
|
import com.baiye.module.entity.DeliveryRecord;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/22
|
||||||
|
*/
|
||||||
|
public interface DeliveryRecordService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务名称查找记录
|
||||||
|
* @param taskName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
DeliveryRecord findByTaskName(String taskName);
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.baiye.module.service.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/18
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class DeliveryTransmitDTO {
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@ApiModelProperty("16-64位用户ID")
|
||||||
|
private String customerId;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@ApiModelProperty("任务名称")
|
||||||
|
private String taskName;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@ApiModelProperty("任务文件下载地址")
|
||||||
|
private String dUrl;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.baiye.module.service.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/22
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class MailDTO {
|
||||||
|
private String imei;
|
||||||
|
private String tag;
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.baiye.module.service.impl;
|
||||||
|
|
||||||
|
import com.baiye.module.dao.DeliveryRecordRepository;
|
||||||
|
import com.baiye.module.entity.DeliveryRecord;
|
||||||
|
import com.baiye.module.service.DeliveryRecordService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/22
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class DeliveryRecordServiceImpl implements DeliveryRecordService {
|
||||||
|
|
||||||
|
private final DeliveryRecordRepository deliveryRecordRepository;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DeliveryRecord findByTaskName(String taskName) {
|
||||||
|
return deliveryRecordRepository.findByTaskName(taskName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,113 @@
|
|||||||
|
package com.baiye.task;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.io.FileUtil;
|
||||||
|
import cn.hutool.core.text.csv.CsvData;
|
||||||
|
import cn.hutool.core.text.csv.CsvReader;
|
||||||
|
import cn.hutool.core.text.csv.CsvRow;
|
||||||
|
import cn.hutool.core.text.csv.CsvUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.baiye.config.properties.DeliveryProperties;
|
||||||
|
import com.baiye.constant.DefaultNumberConstants;
|
||||||
|
import com.baiye.exception.BadRequestException;
|
||||||
|
import com.baiye.feign.TaskClient;
|
||||||
|
import com.baiye.module.entity.Clue;
|
||||||
|
import com.baiye.module.entity.DeliveryRecord;
|
||||||
|
import com.baiye.module.entity.Task;
|
||||||
|
import com.baiye.module.service.ClueService;
|
||||||
|
import com.baiye.module.service.DeliveryRecordService;
|
||||||
|
import com.baiye.util.MailUtil;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import javax.mail.Flags;
|
||||||
|
import javax.mail.Message;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Enzo
|
||||||
|
* @date : 2022/10/22
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class MailSourceTask {
|
||||||
|
|
||||||
|
private final TaskClient taskClient;
|
||||||
|
|
||||||
|
private final ClueService clueService;
|
||||||
|
|
||||||
|
private final DeliveryProperties deliveryProperties;
|
||||||
|
|
||||||
|
private final DeliveryRecordService deliveryRecordService;
|
||||||
|
|
||||||
|
|
||||||
|
@Scheduled(cron = "0 0/1 * * * ? ")
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void receiveMail() {
|
||||||
|
// 获取邮件内容
|
||||||
|
List<Message> list = MailUtil.readMailByIMAP
|
||||||
|
(deliveryProperties.getEmailAddress(),
|
||||||
|
deliveryProperties.getEmailPassword());
|
||||||
|
if (CollUtil.isNotEmpty(list)) {
|
||||||
|
try {
|
||||||
|
for (Message message : list) {
|
||||||
|
// 获取邮件的状态
|
||||||
|
Flags flags = message.getFlags();
|
||||||
|
// 获取未读的邮件内容 且与之对应
|
||||||
|
if (!flags.contains(Flags.Flag.SEEN)
|
||||||
|
&& deliveryProperties.getCustomerId().equals(message.getSubject())) {
|
||||||
|
String body = MailUtil.getBody(message);
|
||||||
|
// 获取文件内容
|
||||||
|
String taskName = body.substring
|
||||||
|
(body.indexOf(">") + DefaultNumberConstants.ONE_NUMBER);
|
||||||
|
|
||||||
|
// 内容获取发送请求
|
||||||
|
DeliveryRecord byTaskName =
|
||||||
|
deliveryRecordService.findByTaskName(taskName);
|
||||||
|
if (ObjectUtil.isNotNull(byTaskName)) {
|
||||||
|
Task task = new Task();
|
||||||
|
Long taskId = byTaskName.getTaskId();
|
||||||
|
CsvReader reader = CsvUtil.getReader();
|
||||||
|
List<Clue> clues = Lists.newArrayList();
|
||||||
|
// 解析附件内容并保存文件
|
||||||
|
String path = MailUtil.saveAttachMent
|
||||||
|
(message, deliveryProperties.getFileUrl());
|
||||||
|
// 解析文件
|
||||||
|
CsvData data = reader.read(FileUtil.file(path));
|
||||||
|
List<CsvRow> rows = data.getRows();
|
||||||
|
for (CsvRow row : rows) {
|
||||||
|
Clue clue = new Clue();
|
||||||
|
clue.setNid(row.get(DefaultNumberConstants.ZERO_NUMBER));
|
||||||
|
clue.setOrigin(DefaultNumberConstants.FIVE_NUMBER);
|
||||||
|
clue.setCreateBy(byTaskName.getUserId());
|
||||||
|
clues.add(clue);
|
||||||
|
}
|
||||||
|
// 将imei转为线索
|
||||||
|
clueService.saveClue(clues, byTaskName.getTaskId(), DefaultNumberConstants.FOUR_NUMBER);
|
||||||
|
// 修改任务总条数
|
||||||
|
Integer taskNum = clueService.findTaskNum(taskId);
|
||||||
|
task.setId(taskId);
|
||||||
|
task.setTotalNumber(taskNum);
|
||||||
|
task.setIsDistribution(DefaultNumberConstants.ONE_NUMBER);
|
||||||
|
taskClient.updateTask(task);
|
||||||
|
// 删除邮件
|
||||||
|
message.setFlag(Flags.Flag.DELETED, Boolean.TRUE);
|
||||||
|
FileUtil.del(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("=================== the receive mail error time as {} ===========", DateUtil.date());
|
||||||
|
throw new BadRequestException("接收邮件失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue