新增dmp自动分配逻辑

master
bynt 2 years ago
parent c52d732ac2
commit 663bddf7cc

@ -1,6 +1,5 @@
package com.baiye.http; package com.baiye.http;
import com.baiye.http.DmpDataDTO;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;

@ -58,11 +58,11 @@ public interface TaskImeiService {
/** /**
* *
* *
* @param userId * @param taskId
* @param num * @param num
* @return * @return
*/ */
Integer countByUserIdAndDate(Long userId, Integer num); Integer countByUserIdAndDate(Long taskId, Integer num);
/** /**
* Imei() * Imei()

@ -107,8 +107,8 @@ public class TaskImeiServiceImpl implements TaskImeiService {
} }
@Override @Override
public Integer countByUserIdAndDate(Long userId, Integer num) { public Integer countByUserIdAndDate(Long taskId, Integer num) {
return taskImeiRepository.countByUserId(userId, num); return taskImeiRepository.countByUserId(taskId, num);
} }
@Override @Override
@ -118,12 +118,14 @@ public class TaskImeiServiceImpl implements TaskImeiService {
@Override @Override
public CommonResponse<Object> processingData(TaskImeiDTO taskImeiDTO) { public CommonResponse<Object> processingData(TaskImeiDTO taskImeiDTO) {
// imei去除重复重新组装
List<ImeiDTO> dtoList = Lists.newArrayList(Sets.newHashSet(taskImeiDTO.getImeiList())); List<ImeiDTO> dtoList = Lists.newArrayList(Sets.newHashSet(taskImeiDTO.getImeiList()));
// 最大最小数量设置
if (dtoList.size() < DefaultNumberConstants.ONE_HUNDRED) { if (dtoList.size() < DefaultNumberConstants.ONE_HUNDRED) {
return CommonResponse.createByErrorCodeMessage return CommonResponse.createByErrorCodeMessage
(DefaultNumberConstants.ZERO_NUMBER, ResponseCode.SEND_MAIL_NUM_FRIEND.getDesc()); (DefaultNumberConstants.ZERO_NUMBER, ResponseCode.SEND_MAIL_NUM_FRIEND.getDesc());
} }
if (dtoList.size() >= DefaultNumberConstants.ONE_HUNDRED_THOUSAND) { if (dtoList.size() >= DefaultNumberConstants.ONE_HUNDRED_THOUSAND) {
return CommonResponse.createByErrorCodeMessage return CommonResponse.createByErrorCodeMessage
(DefaultNumberConstants.ZERO_NUMBER, ResponseCode.SEND_MAIL_MAX_NUM_FRIEND.getDesc()); (DefaultNumberConstants.ZERO_NUMBER, ResponseCode.SEND_MAIL_MAX_NUM_FRIEND.getDesc());
@ -136,12 +138,12 @@ public class TaskImeiServiceImpl implements TaskImeiService {
(DefaultNumberConstants.ZERO_NUMBER, ResponseCode.BATCH_NUMBER_ALREADY_EXISTS.getDesc()); (DefaultNumberConstants.ZERO_NUMBER, ResponseCode.BATCH_NUMBER_ALREADY_EXISTS.getDesc());
} }
} }
dtoList.forEach(o -> o.setImei(AESUtils.decrypt(o.getImei(), deliveryProperties.getExchangePassword()))); dtoList.forEach(o -> o.setImei(AESUtils.decrypt(o.getImei(), deliveryProperties.getExchangePassword())));
// 过滤未解密完成的 // 过滤未解密完成的
List<ImeiDTO> filterList = dtoList.stream().filter List<ImeiDTO> filterList = dtoList.stream().filter
(o -> ObjectUtil.isNotNull(o.getImei())).collect(Collectors.toList()); (o -> ObjectUtil.isNotNull(o.getImei())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(filterList)) { if (CollUtil.isNotEmpty(filterList)) {
log.info("================ the exchange list size as {} =================", filterList.size());
String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(taskImeiDTO.getBatchNo()); String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(taskImeiDTO.getBatchNo());
// 保存文件 // 保存文件
String csvPath = file.concat(StrPool.DOT).concat(FileConstant.CSV_FILE_SUB_NAME); String csvPath = file.concat(StrPool.DOT).concat(FileConstant.CSV_FILE_SUB_NAME);

@ -7,7 +7,6 @@ import cn.hutool.json.JSONUtil;
import com.baiye.constant.DefaultNumberConstants; import com.baiye.constant.DefaultNumberConstants;
import com.baiye.exception.BadRequestException; import com.baiye.exception.BadRequestException;
import com.baiye.http.CommonResponse; import com.baiye.http.CommonResponse;
import com.baiye.model.dto.UserDto;
import com.baiye.model.enums.ResponseCode; import com.baiye.model.enums.ResponseCode;
import com.baiye.modules.platform.domain.Company; import com.baiye.modules.platform.domain.Company;
import com.baiye.modules.platform.domain.Organize; import com.baiye.modules.platform.domain.Organize;
@ -23,7 +22,10 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date; import java.util.Date;

@ -47,14 +47,10 @@ public class CSVFileUtil {
} }
public static void main(String[] args) { public static void main(String[] args) {
File file = new File("C:\\Users\\a\\Desktop\\1.csv"); File file = new File("C:\\Users\\a\\Desktop\\1.csv");
List<String> phoneList = Lists.newArrayList(); List<String> phoneList = Lists.newArrayList();
CsvReader reader = CsvUtil.getReader(); CsvReader reader = CsvUtil.getReader();
// 解析文件 // 解析文件
CsvData data = reader.read(file); CsvData data = reader.read(file);
@ -62,11 +58,10 @@ public class CSVFileUtil {
(clue.get(DefaultNumberConstants.TWO_NUMBER))); (clue.get(DefaultNumberConstants.TWO_NUMBER)));
// 去除重复 // 去除重复
List<String> phoneSets = Lists.newArrayList(Sets.newHashSet(phoneList)); List<String> phoneSets = Lists.newArrayList(Sets.newHashSet(phoneList));
File csvFile = new File("C:\\Users\\a\\Desktop\\1-3-dmp.csv"); File csvFile = new File("C:\\Users\\a\\Desktop\\2-14-001-dmp.csv");
//导入HuTool中CSV工具包的CsvWriter类 //导入HuTool中CSV工具包的CsvWriter类
//设置导出字符类型, CHARSET_UTF_8 //设置导出字符类型, CHARSET_UTF_8
CsvWriter writer = CsvUtil.getWriter(csvFile, CharsetUtil.CHARSET_UTF_8); CsvWriter writer = CsvUtil.getWriter(csvFile, CharsetUtil.CHARSET_UTF_8);
@ -76,9 +71,7 @@ public class CSVFileUtil {
if (MobileUtil.checkPhone(decrypt)) { if (MobileUtil.checkPhone(decrypt)) {
writer.writeLine(decrypt); writer.writeLine(decrypt);
} }
} }
writer.close(); writer.close();
} }
} }

@ -116,4 +116,15 @@ public class BaseClueMiddle implements Serializable {
this.clueType = clueType; this.clueType = clueType;
this.clueStageTime = clueStageTime; this.clueStageTime = clueStageTime;
} }
public BaseClueMiddle(Long taskId, Integer memberStatus, Integer optimisticVersion, Integer clueStage, Integer clueCallStatus, Integer clueType, Date clueStageTime, Long memberId) {
this.clueStage = clueStage;
this.clueCallStatus = clueCallStatus;
this.taskId = taskId;
this.memberStatus = memberStatus;
this.optimisticVersion = optimisticVersion;
this.clueType = clueType;
this.clueStageTime = clueStageTime;
this.memberId = memberId;
}
} }

@ -41,6 +41,11 @@ public class ClueTalk extends BaseClueMiddle {
this.clueId = clueId; this.clueId = clueId;
} }
public ClueTalk(Long clueId, Long taskId, Integer memberStatus, Integer optimisticVersion, Integer clueStage, Integer clueCallStatus, Integer clueType, Date clueStageTime, Long memberId) {
super(taskId, memberStatus, optimisticVersion, clueStage, clueCallStatus, clueType, clueStageTime, memberId);
this.clueId = clueId;
}
public ClueTalk(){ public ClueTalk(){
} }

@ -160,6 +160,11 @@ public interface ClueService {
/** /**
* 线 * 线
* @param tagList
* @param phoneList
* @param taskId
* @param userId
* @param num
*/ */
void saveClue(List<String> tagList, List<String> phoneList, Long taskId, Long userId, Integer num); void saveClue(List<String> tagList, List<String> phoneList, Long taskId, Long userId, Integer num);

@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.baiye.constant.*; import com.baiye.constant.*;
import com.baiye.enums.ClueStageEnum; import com.baiye.enums.ClueStageEnum;
import com.baiye.exception.BadRequestException; import com.baiye.exception.BadRequestException;
@ -22,6 +21,7 @@ import com.baiye.module.service.CompanyService;
import com.baiye.module.service.dto.ClueRecordCriteria; import com.baiye.module.service.dto.ClueRecordCriteria;
import com.baiye.task.ClueBackupsTask; import com.baiye.task.ClueBackupsTask;
import com.baiye.util.*; import com.baiye.util.*;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -31,7 +31,6 @@ import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigInteger; import java.math.BigInteger;
@ -1022,9 +1021,56 @@ public class ClueServiceImpl implements ClueService {
@Override @Override
public void saveClue(List<String> tagList, List<String> phoneList, Long taskId, Long userId, Integer num) { public void saveClue(List<String> tagList, List<String> phoneList, Long taskId, Long userId, Integer num) {
if (CollUtil.isNotEmpty(phoneList)) { if (CollUtil.isNotEmpty(phoneList)) {
// 查询是否自动分配
CommonResponse<DynamicTaskDistributionDTO>
response = taskClient.findTaskDistribution(taskId);
if (response.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
DynamicTaskDistributionDTO responseData = response.getData();
// 开启了自动分配
if (ObjectUtil.isNotNull(responseData.getIsOpen()) &&
responseData.getIsOpen() == DefaultNumberConstants.ONE_NUMBER) {
List<DynamicTaskDistributionUserDTO> dtoList
= responseData.getDynamicTaskDistributionUserDTOS();
if (CollUtil.isNotEmpty(dtoList)) {
DistributeDTO distributeDTO = new DistributeDTO();
// 获取用户分配的资源
List<Long> userIdList = Lists.newArrayList();
List<Double> weights = Lists.newArrayList();
dtoList.forEach(dto -> {
userIdList.add(dto.getId());
weights.add(Double.valueOf(dto.getRatio()));
});
List<Long> longList = phoneList.stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
int sum = dtoList.stream().mapToInt(DynamicTaskDistributionUserDTO::getRatio).sum();
// 比率分配数据
distributeDTO.setIsWeight(sum == DefaultNumberConstants.ONE_HUNDRED);
distributeDTO.setResourceList(longList);
distributeDTO.setDeptIds(userIdList);
distributeDTO.setWeights(weights);
// 发送请求分配数据
CommonResponse<List<DistributeResponseDTO>> distributeResponse = assignDataClient.dataDistribution(distributeDTO);
if (distributeResponse.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
for (DistributeResponseDTO data : distributeResponse.getData()) {
// 判断是否包含数据
if (CollUtil.isNotEmpty(data.getResponseList())) {
phoneList = data.getResponseList().stream().map(String::valueOf).collect(Collectors.toList());
this.saveClueTalk(phoneList, tagList, taskId, userId, num, data.getDeptId(), DefaultNumberConstants.ONE_NUMBER);
}
}
}
return;
}
}
}
this.saveClueTalk(phoneList, tagList, taskId, userId, num, null, DefaultNumberConstants.ZERO_NUMBER);
}
}
private void saveClueTalk(List<String> responseList, List<String> tagList, Long taskId, Long userId, Integer num, Long memberId, Integer memberStatus) {
int clueNumber = DefaultNumberConstants.ZERO_NUMBER; int clueNumber = DefaultNumberConstants.ZERO_NUMBER;
for (int i = 0; i < phoneList.size(); i++) { for (int i = 0; i < responseList.size(); i++) {
String phone = phoneList.get(i); String phone = responseList.get(i);
if (StringUtils.isNotBlank(phone)) { if (StringUtils.isNotBlank(phone)) {
Boolean checkPhone = MobileUtil.checkPhone(phone); Boolean checkPhone = MobileUtil.checkPhone(phone);
if (Boolean.FALSE.equals(checkPhone)) { if (Boolean.FALSE.equals(checkPhone)) {
@ -1038,8 +1084,7 @@ public class ClueServiceImpl implements ClueService {
clue.setOrigin(DefaultNumberConstants.SIX_NUMBER); clue.setOrigin(DefaultNumberConstants.SIX_NUMBER);
clue.setIsEncryption(DefaultNumberConstants.ONE_NUMBER); clue.setIsEncryption(DefaultNumberConstants.ONE_NUMBER);
Clue save = clueRepository.save(clue); Clue save = clueRepository.save(clue);
ClueTalk clueTalk = new ClueTalk(save.getId(), taskId, memberStatus, 0, 0, 0, num, new Date(), memberId);
ClueTalk clueTalk = new ClueTalk(save.getId(), taskId, 0, 0, 0, 0, num, new Date());
clueTalkRepository.save(clueTalk); clueTalkRepository.save(clueTalk);
clueNumber++; clueNumber++;
} }
@ -1051,8 +1096,7 @@ public class ClueServiceImpl implements ClueService {
companyService.updateBalanceByUserId(clueNumber, company); companyService.updateBalanceByUserId(clueNumber, company);
} }
} }
log.info("================= save clue size as {} =================", phoneList.size()); log.info("================= save clue size as {} =================", responseList.size());
}
} }
/** /**

@ -178,7 +178,8 @@ public class MailSourceTask {
map.put("status",DefaultNumberConstants.TWO_HUNDRED); map.put("status",DefaultNumberConstants.TWO_HUNDRED);
map.put("msg", ResponseCode.SUCCESS.getDesc()); map.put("msg", ResponseCode.SUCCESS.getDesc());
map.put("data",dmpResponse); map.put("data",dmpResponse);
HttpUtil.post("", JSONUtil.toJsonStr(map)); String post = HttpUtil.post("https://api.xiaolanben.com/blue-touch/api/v1/open/ad/dmp/exchange", JSONUtil.toJsonStr(map));
log.info("=============== the send request result as {} =============",JSONUtil.toJsonStr(post));
deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, decryptList.size(), taskName); deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, decryptList.size(), taskName);
} }
} }
@ -188,7 +189,6 @@ public class MailSourceTask {
deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, decryptList.size(), taskName); deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, decryptList.size(), taskName);
downRecordClient.updatePath(deliveryProperties.getDmpDownPath().concat(filePath), byTaskName.getId()); downRecordClient.updatePath(deliveryProperties.getDmpDownPath().concat(filePath), byTaskName.getId());
} }
} }
} }
} }

@ -0,0 +1,43 @@
import com.baiye.AdPlatformSourceApplication;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.module.service.ClueService;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.List;
/**
* @author Enzo
* @date : 2023/2/17
*/
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AdPlatformSourceApplication.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ImeiTest {
@Resource
private ClueService clueService;
@Test
public void getSetting() {
List<String> tagList = Lists.newArrayList();
tagList.add("test");
List<String> decryptList = Lists.newArrayList();
decryptList.add("13586541001");
// 将imei转为线索
clueService.saveClue(tagList, decryptList, 1611603012639428608L,
574L , DefaultNumberConstants.FOUR_NUMBER);
}
}
Loading…
Cancel
Save