添加建模操作

master
bynt 9 months ago
parent 8f580ac64d
commit 9488739766

@ -1,4 +1,4 @@
package com.baiye.module.constant; package com.baiye.constant;
/** /**
* *
@ -11,6 +11,12 @@ public class SecretConstant {
public static final String SECRET_DECRYPT_YY_URL = "https://bd.hzdaba.cn:8085/v3/Accounts/yuyou_bd/BigData/DecryptTel"; public static final String SECRET_DECRYPT_YY_URL = "https://bd.hzdaba.cn:8085/v3/Accounts/yuyou_bd/BigData/DecryptTel";
/**
*
*/
public static final String SECRET_ENCRYPT_YY_URL = "https://bd.hzdaba.cn:8085/v3/Accounts/yuyou_bd/BigData/EncryptTel";
/** /**
* *
*/ */

@ -60,7 +60,7 @@ public final class SecurityConstants {
/** /**
* *
*/ */
public static final String LOGIN_SUCCESS = "Success"; public static final String SUCCESS = "Success";
/** /**
* *

@ -16,6 +16,12 @@ public enum MailRequestEnum {
*/ */
MM("MM", "dmp::manual::"), MM("MM", "dmp::manual::"),
/**
*
*/
MD("MD", "dmp::model::"),
/** /**
* *
*/ */

@ -0,0 +1,27 @@
package com.baiye.http;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* Json
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class EncryptJsonResponse implements Serializable {
private String result;
private String reason;
/**
* telsbase64
*/
private String tels;
}

@ -10,17 +10,15 @@ import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baiye.constant.DefaultNumberConstants; import com.baiye.constant.DefaultNumberConstants;
import com.baiye.module.constant.SecretConstant; import com.baiye.constant.SecretConstant;
import com.baiye.module.service.dto.SecretResponseBean; import com.baiye.http.SecretResponseBean;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.Arrays; import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/** /**
* @author jt * @author jt
@ -30,7 +28,7 @@ public class DecryptPnoUtil {
private static final String HTTP_RESPONSE_JSON_FORMATE = "application/x-www-form-urlencoded"; private static final String HTTP_RESPONSE_JSON_FORMATE = "application/x-www-form-urlencoded";
public static String decryptPno(String origins) { public static String decryptPno(String origins) {
HashMap<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = Maps.newHashMap();
paramMap.put("sig", createSig()); paramMap.put("sig", createSig());
paramMap.put("appid", SecretConstant.SECRET_DECRYPT_YY_ID); paramMap.put("appid", SecretConstant.SECRET_DECRYPT_YY_ID);
paramMap.put("tels", Base64.encode(origins)); paramMap.put("tels", Base64.encode(origins));

@ -0,0 +1,108 @@
package com.baiye.util;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.constant.SecretConstant;
import com.baiye.http.SecretResponseBean;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
/**
* @author jt
*/
@Slf4j
public class EncryptPhoneUtil {
private static final String HTTP_RESPONSE_JSON_FORMATE = "application/x-www-form-urlencoded";
public static String encryptPno(String tels) {
HashMap<String, Object> paramMap = Maps.newHashMap();
paramMap.put("sig", createSig());
paramMap.put("appid", SecretConstant.SECRET_DECRYPT_YY_ID);
paramMap.put("tels", Base64.encode(tels));
//链式构建请求
String result = HttpRequest.post(SecretConstant.SECRET_ENCRYPT_YY_URL)
.header(Header.CONTENT_TYPE, HTTP_RESPONSE_JSON_FORMATE)
.form(paramMap)
.timeout(2_000)
.execute().body();
SecretResponseBean secretResponseBean = JSONUtil.toBean(result, SecretResponseBean.class);
String nid = Base64.decodeStr(secretResponseBean.getTels());
// 解析响应内容
if (!MobileUtil.checkPhone(nid)) {
log.error("===========解密失败或者号码为空=======");
return null;
}
return nid;
}
/**
* sig
*
* @return sig
*/
private static String createSig() {
return SecureUtil.md5(
SecretConstant.SECRET_DECRYPT_YY_ID
+ SecretConstant.SECRET_DECRYPT_YY_SIG
+ DateUtil.format(new Date(), SecretConstant.SECRET_DECRYPT_TIME_FORMATE));
}
/**
*
*
* @param origins
* @return
*/
public static SecretResponseBean batchEncryptPno(String origins) {
Map<String, Object> paramMap = Maps.newHashMap();
paramMap.put("sig", createSig());
paramMap.put("appid", SecretConstant.SECRET_DECRYPT_YY_ID);
paramMap.put("req_id", RandomUtil.randomString(DefaultNumberConstants.TEN_NUMBER));
paramMap.put("tels", origins);
//链式构建请求
String result = HttpRequest.post(SecretConstant.SECRET_ENCRYPT_YY_URL)
.header(Header.CONTENT_TYPE, HTTP_RESPONSE_JSON_FORMATE)
.form(paramMap)
.timeout(2_000)
.execute().body();
// 解析响应内容
return JSONUtil.toBean(result, SecretResponseBean.class);
}
public static List<String> encryptPhoneList(List<String> phoneSets) {
List<String> encryptList = Lists.newArrayList();
// 集合分割
List<List<String>> partitions = ListUtil.partition(phoneSets, DefaultNumberConstants.ONE_THOUSAND);
for (List<String> partition : partitions) {
String join = Joiner.on(StrPool.COMMA).skipNulls().join(partition);
// 批量解析号码
SecretResponseBean responseBean = EncryptPhoneUtil.batchEncryptPno
(Base64.encode(StringUtils.substringBeforeLast(join, StrPool.COMMA)));
if (ObjectUtil.isNotNull(responseBean) && ObjectUtil.isNotNull(responseBean.getTels())) {
encryptList.addAll(Splitter.on(StrPool.COMMA).trimResults()
.omitEmptyStrings().splitToList(Base64.decodeStr(responseBean.getTels())));
}
}
return encryptList;
}
}

@ -20,7 +20,6 @@ import cn.hutool.core.io.IoUtil;
import cn.hutool.core.text.StrPool; import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.BigExcelWriter; import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelUtil;
import com.baiye.exception.BadRequestException; import com.baiye.exception.BadRequestException;
@ -415,4 +414,7 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
return files; return files;
} }
} }

@ -1,11 +1,16 @@
package com.baiye.util; package com.baiye.util;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import com.baiye.exception.BadRequestException; import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.text.csv.CsvUtil;
import cn.hutool.core.text.csv.CsvWriter;
import cn.hutool.core.util.CharsetUtil;
import com.baiye.exception.CheckedException; import com.baiye.exception.CheckedException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.io.*; import java.io.*;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
@ -13,6 +18,7 @@ import java.util.zip.ZipOutputStream;
/** /**
* ziprar * ziprar
*/ */
@Slf4j
public class FileZipUtil { public class FileZipUtil {
/** /**
* @param path * @param path
@ -195,9 +201,35 @@ public class FileZipUtil {
//刷新流,也就是把缓存中剩余的内容输出到文件 //刷新流,也就是把缓存中剩余的内容输出到文件
buffWriter.flush(); buffWriter.flush();
} catch (Exception e) { } catch (Exception e) {
throw new CheckedException("failed to write to csv"); throw new CheckedException("failed to write to csv");
} }
} }
/**
* csv
*
* @param filePath
* @param lines
*/
public static void writeCSV(String filePath, Collection<?> lines) {
//指定路径和编码
CsvWriter writer = null;
try {
writer = CsvUtil.getWriter(filePath, CharsetUtil.CHARSET_UTF_8);
//按行写出
writer.write(lines);
} catch (IORuntimeException e) {
log.error("the exception {} ", e.getMessage());
throw new CheckedException("failed to write to csv");
} finally {
assert writer != null;
writer.close();
}
}
} }

@ -22,6 +22,7 @@ import com.baiye.exception.BadRequestException;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
@ -37,6 +38,7 @@ import javax.validation.constraints.NotNull;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Optional; import java.util.Optional;
/** /**

@ -0,0 +1,30 @@
package com.baiye.config.thread;
import com.baiye.constant.DefaultNumberConstants;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
/**
* @author Enzo
* @date
* 线,线
*/
@Configuration
@EnableAsync
public class ThreadPoolConfig {
@Bean("WorkExecutor")
public Executor getExecutor() {
return new ThreadPoolExecutor(DefaultNumberConstants.TEN_NUMBER, Integer.MAX_VALUE,
DefaultNumberConstants.THREE_NUMBER, TimeUnit.MINUTES, new LinkedBlockingDeque<>(DefaultNumberConstants.THREE_NUMBER),
Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy());
}
}

@ -0,0 +1,82 @@
package com.baiye.modules.platform.domain;
import com.baiye.model.base.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Date;
/**
*
* @author Enzo
* @date : 2024/1/4
*/
@Getter
@Setter
@Entity
@Table(name = "tb_mode_record")
@EntityListeners(AuditingEntityListener.class)
public class ModeRecord extends BaseEntity implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ApiModelProperty("用户id")
@Column(name = "user_id")
private Long userId;
@ApiModelProperty("发送状态")
@Column(name = "record_status")
private Integer recordStatus;
@ApiModelProperty("发送类型")
@Column(name = "record_type")
private Integer recordType;
@ApiModelProperty("任务名称")
@Column(name = "task_name")
private String taskName;
@ApiModelProperty("上传数量")
@Column(name = "upload_num")
private Integer uploadNum;
@ApiModelProperty("文件路径")
@Column(name = "upload_path")
private String uploadPath;
@ApiModelProperty("解析数量")
@Column(name = "analysis_num")
private Integer analysisNum;
@ApiModelProperty("发送数量")
@Column(name = "send_num")
private Integer sendNum;
@ApiModelProperty("发送时间")
@Column(name = "build_time")
private Date buildTime;
@ApiModelProperty("层级")
@Column(name = "tree_level")
private Integer treeLevel;
@ApiModelProperty("父类id")
@Column(name = "parent_id")
private Long parentId;
@ApiModelProperty("tag")
@Column(name = "tag_str")
private String tagStr;
}

@ -0,0 +1,35 @@
package com.baiye.modules.platform.httpRequest;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author Enzo
* @date 2023-2-24
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class DecryptionJsonRequest implements Serializable {
private static final long serialVersionUID = 4871071085514651672L;
@SerializedName("request_id")
private String requestId;
@SerializedName("cellphone_md5")
private String cellphoneMd5;
}

@ -0,0 +1,48 @@
package com.baiye.modules.platform.httpRequest;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author Enzo
* @date
*/
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SendEncryptJsonRequest implements Serializable {
/**
*
*
* sig= MD5ID + +
* MD532(:)
* 24yyyyMMddHHmmss50
*/
@SerializedName("sig")
private String sig;
/**
* APP ID
*/
@SerializedName("appid")
private String appId;
/**
* id
* , 8~16
*/
@SerializedName("req_id")
private String reqId;
/**
* 200base64
*/
@SerializedName("tels")
private String tels;
}

@ -0,0 +1,76 @@
package com.baiye.modules.platform.repository;
import cn.hutool.core.date.DateTime;
import com.baiye.modules.platform.domain.ModeRecord;
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.List;
/**
* @author Enz
* @date 2024-1-4
*/
@Repository
public interface ModeRecordRepository extends JpaRepository<ModeRecord, Long>, JpaSpecificationExecutor<ModeRecord> {
/**
*
* @param num
* @param path
* @param size
* @param id
* @return
*/
@Modifying
@Query("UPDATE ModeRecord set recordStatus = ?1,uploadPath = ?2, analysisNum = analysisNum + ?3 where id = ?4")
int updateStatusAndPathById(Integer num, String path, Integer size, Long id);
/**
*
* @param num
* @param size
* @param id
* @return
*/
@Modifying
@Query("UPDATE ModeRecord set recordStatus = ?1, analysisNum = analysisNum + ?2 where id = ?3")
int updateStatusNumById(Integer num, Integer size, Long id);
/**
*
* @param num
* @param id
* @return
*/
@Modifying
@Query("UPDATE ModeRecord set recordStatus = ?1 where id = ?2")
int updateStatusById(Integer num, Long id);
/**
*
*
* @param num
* @param date
* @param count
* @param id
* @return
*/
@Modifying
@Query("UPDATE ModeRecord set recordStatus = ?1,buildTime = ?2,sendNum = ?3 where id = ?4")
int updateStatusAndTimeById(Integer num, DateTime date, Integer count, Long id);
/**
* id
* @param parentId
* @return
*/
List<ModeRecord> findByParentId(Long parentId);
}

@ -13,4 +13,11 @@ public interface QualityScoreRepository extends JpaRepository<QualityScore, Long
@Query(value = "select q.* from tb_quality_score as q left join tb_user_quality as u on q.id =u.quality_score_id where u.user_id = ?1 ", nativeQuery = true) @Query(value = "select q.* from tb_quality_score as q left join tb_user_quality as u on q.id =u.quality_score_id where u.user_id = ?1 ", nativeQuery = true)
QualityScore query(Long userId); QualityScore query(Long userId);
/**
*
* @return
*/
@Query(value = "SELECT * FROM tb_quality_score ORDER BY RAND() LIMIT 1", nativeQuery = true)
QualityScore selectRand();
} }

@ -0,0 +1,99 @@
/*
* 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.platform.rest;
import com.baiye.annotation.Inner;
import com.baiye.annotation.Log;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.constant.SecurityConstants;
import com.baiye.http.CommonResponse;
import com.baiye.modules.platform.service.ModeRecordService;
import com.baiye.modules.platform.service.dto.AgentQueryCriteria;
import com.baiye.modules.platform.service.dto.DecryptionDTO;
import com.baiye.modules.platform.service.dto.ModeRecordQueryCriteria;
import com.baiye.util.SecurityUtils;
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.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* @author Enzo
* @date 2022-08-13
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "广告建模")
@RequestMapping("/api/mode/record")
public class ModeRecordController {
private final ModeRecordService modeRecordService;
@ApiOperation("查询建模记录")
@GetMapping
public ResponseEntity<Object> query(ModeRecordQueryCriteria criteria, Pageable pageable) {
Long currentUserId = SecurityUtils.getCurrentUserId();
if (currentUserId != DefaultNumberConstants.ONE_NUMBER) {
criteria.setUserId(currentUserId);
}
criteria.setTreeLevel(DefaultNumberConstants.ONE_NUMBER);
return new ResponseEntity<>(modeRecordService.queryAll(criteria, pageable), HttpStatus.OK);
}
@ApiOperation("上传文件发送邮件")
@PostMapping("/upload/files")
public CommonResponse<Object> uploadFile(@RequestParam("file") MultipartFile[] files,
@RequestParam(value = "taskName") String taskName,
@RequestParam("uploadType") Integer uploadType) {
return Boolean.TRUE.equals(modeRecordService.uploadModeFile(files, taskName, uploadType))
? CommonResponse.createBySuccess() : CommonResponse.createByError();
}
@ApiOperation("创建任务")
@GetMapping("/build")
public CommonResponse<Object> buildModel(@RequestParam("id") Long id,
@RequestParam(value = "actName") String actName,
@RequestParam("actId") String actId) {
return Boolean.TRUE.equals(modeRecordService.sendDataByActNameAndActId(id, actName, actId)) ?
CommonResponse.createBySuccess() : CommonResponse.createByError();
}
@Inner
@ApiOperation("下载id查询下载地址")
@GetMapping("/find/path")
public ResponseEntity<String> queryPath(Long downId) {
String path = modeRecordService.findPath(downId);
return new ResponseEntity<>(path, HttpStatus.OK);
}
@Log("修改数量")
@Inner
@ApiOperation("修改数量")
@GetMapping("/update/num")
public CommonResponse<Object> updateQuantity(String path, Integer num, Long downId) {
modeRecordService.updateNumById(path, num, downId);
return CommonResponse.createBySuccess();
}
}

@ -0,0 +1,55 @@
package com.baiye.modules.platform.service;
import com.baiye.modules.platform.service.dto.ModeRecordQueryCriteria;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
/**
* @author Enzo
* @date : 2024/1/4
*/
public interface ModeRecordService {
/**
*
* @param criteria
* @param pageable
* @return
*/
Object queryAll(ModeRecordQueryCriteria criteria, Pageable pageable);
/**
*
* @param files
* @param taskName
* @param uploadType
* @return
*/
Boolean uploadModeFile(MultipartFile[] files, String taskName, Integer uploadType);
/**
* id
* @param downId
* @return
*/
String findPath(Long downId);
/**
* id
* @param path
* @param num
* @param downId
* @return
*/
Boolean updateNumById(String path, Integer num, Long downId);
/**
*
*
* @param id
* @param actName
* @param actId
* @return
*/
Boolean sendDataByActNameAndActId(Long id, String actName, String actId);
}

@ -0,0 +1,28 @@
package com.baiye.modules.platform.service.dto;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Enzo
* @date : 2023/2/24
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DecryptionDTO {
@SerializedName("requestId")
private String requestId;
@SerializedName("cell_phone")
private String cellPhone;
@SerializedName("result")
private String result;
@SerializedName("reason")
private String reason;
}

@ -12,7 +12,6 @@ import java.io.Serializable;
@Data @Data
public class ImeiDTO implements Serializable { public class ImeiDTO implements Serializable {
private static final long serialVersionUID = -3271582444610218303L; private static final long serialVersionUID = -3271582444610218303L;
/** /**

@ -0,0 +1,51 @@
/*
* 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.platform.service.dto;
import com.baiye.annotation.DataPermission;
import com.baiye.annotation.Query;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
/**
* @author Enzo
* @date 2022-03-25
*/
@Data
@DataPermission(fieldName = "id")
public class ModeRecordQueryCriteria {
@Query(type = Query.Type.INNER_LIKE)
private String taskName;
@Query
private Integer recordType;
@Query
private Integer recordStatus;
@Query
private Long userId;
@Query
private Integer treeLevel;
@Query(type = Query.Type.BETWEEN)
private List<Timestamp> createTime;
}

@ -0,0 +1,70 @@
package com.baiye.modules.platform.service.dto;
import com.baiye.model.base.BaseDTO;
import com.baiye.model.dto.TreeUserDTO;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import javax.persistence.Column;
import java.io.Serializable;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.List;
/**
* @website https://el-admin.vip
* @description /
* @author Enzo
* @date 2021-12-16
**/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ModelRecordDto extends BaseDTO implements Serializable {
private static final long serialVersionUID = 7917504710223840272L;
/** 防止精度丢失 */
@JsonSerialize(using= ToStringSerializer.class)
private Long id;
@ApiModelProperty("用户id")
private Long userId;
@ApiModelProperty("记录状态")
private Integer recordStatus;
@ApiModelProperty("发送类型")
private Integer recordType;
@ApiModelProperty("任务名称")
private String taskName;
@ApiModelProperty("上传数量")
private Integer uploadNum;
@ApiModelProperty("上传数量")
private String uploadPath;
@ApiModelProperty("解析数量")
private Integer analysisNum;
@ApiModelProperty("发送数量")
private Integer sendNum;
@ApiModelProperty("发送时间")
private Date buildTime;
@ApiModelProperty("tag")
private String tagStr;
@ApiModelProperty("parentId")
private Long parentId;
@ApiModelProperty("层级")
private Integer treeLevel;
private List<ModelRecordDto> treeList;
}

@ -0,0 +1,229 @@
package com.baiye.modules.platform.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.text.CharSequenceUtil;
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 cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.baiye.config.properties.DeliveryProperties;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.constant.FileConstant;
import com.baiye.enums.MailRequestEnum;
import com.baiye.exception.BadRequestException;
import com.baiye.modules.platform.domain.ModeRecord;
import com.baiye.modules.platform.repository.ModeRecordRepository;
import com.baiye.modules.platform.service.DeliveryRecordService;
import com.baiye.modules.platform.service.ModeRecordService;
import com.baiye.modules.platform.service.dto.ImeiDTO;
import com.baiye.modules.platform.service.dto.ModeRecordQueryCriteria;
import com.baiye.modules.platform.service.dto.ModelRecordDto;
import com.baiye.modules.platform.service.mapstruct.ModeRecordMapper;
import com.baiye.timed.DecryptTask;
import com.baiye.util.*;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author Enzo
* @date : 2022/1/21
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class ModelRecordServiceImpl implements ModeRecordService {
private final DeliveryRecordService deliveryRecordService;
private final ModeRecordRepository modeRecordRepository;
private final DeliveryProperties deliveryProperties;
private final ModeRecordMapper modeRecordMapper;
private final DecryptTask decryptTask;
private final RedisUtils redisUtils;
@Override
public Object queryAll(ModeRecordQueryCriteria criteria, Pageable pageable) {
Page<ModeRecord> page = modeRecordRepository.findAll
((root, criteriaQuery, criteriaBuilder) ->
QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
List<ModelRecordDto> dtoList = page.map(modeRecordMapper::toDto).getContent();
dtoList.forEach(dto -> {
List<ModeRecord> byParentId = modeRecordRepository.findByParentId(dto.getId());
if (CollUtil.isNotEmpty(byParentId)) {
dto.setTreeList(modeRecordMapper.toDto(byParentId));
}
});
return PageUtil.toPage(dtoList, page.getTotalElements());
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean uploadModeFile(MultipartFile[] files, String taskName, Integer uploadType) {
Long userId = SecurityUtils.getCurrentUserId();
List<ImeiDTO> stringList = Lists.newArrayList();
for (MultipartFile file : files) {
String originalFilename = file.getOriginalFilename();
if (StringUtils.isNotBlank(originalFilename)) {
stringList = parseFile(file, originalFilename);
}
}
// 去除重复数据
List<ImeiDTO> dtoArrayList = Lists.newArrayList(Sets.newHashSet(stringList));
// 保存父类数据
Long recordId = saveRecord(taskName, uploadType, userId, (long) DefaultNumberConstants.ZERO_NUMBER,
DefaultNumberConstants.ONE_NUMBER, CharSequenceUtil.EMPTY, dtoArrayList);
// tag分组
Map<String, List<ImeiDTO>> collect = dtoArrayList.stream().
collect(Collectors.groupingBy(ImeiDTO::getTag));
for (Map.Entry<String, List<ImeiDTO>> entry : collect.entrySet()) {
String tag = entry.getKey();
List<ImeiDTO> imeiDTOList = entry.getValue();
// 保存子类数据
Long childrenId = saveRecord(taskName, uploadType, userId, recordId,
DefaultNumberConstants.TWO_NUMBER, tag, imeiDTOList);
if (uploadType < DefaultNumberConstants.TWO_NUMBER) {
// 每次100000 数据
List<List<ImeiDTO>> partition = Lists.partition
(imeiDTOList, DefaultNumberConstants.ONE_HUNDRED_THOUSAND);
for (List<ImeiDTO> list : partition) {
String taskImeiName = redisUtils.acquisitionBatch(MailRequestEnum.MD.getCacheName());
Boolean result = deliveryRecordService.exchangeByInterFace
(list, taskImeiName, uploadType, deliveryProperties.getPublicKey(), deliveryProperties.getPrivateKey());
if (Boolean.TRUE.equals(result)) {
deliveryRecordService.saveDeliveryRecord(null, taskImeiName, entry.getKey(), list.size(), null,
userId, DefaultNumberConstants.FIVE_NUMBER, uploadType, childrenId);
}
log.info("=========== the interface conversion result is {} =========== ", result);
}
continue;
}
// 调用异步任务
decryptTask.doRunTask(imeiDTOList, recordId, childrenId);
}
return Boolean.TRUE;
}
@Override
public String findPath(Long downId) {
ModeRecord downRecord = modeRecordRepository.findById(downId).orElseGet(ModeRecord::new);
return ObjectUtil.isNotNull(downRecord) &&
StringUtils.isNotBlank(downRecord.getUploadPath()) ? downRecord.getUploadPath() : CharSequenceUtil.EMPTY;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateNumById(String path, Integer num, Long downId) {
ModeRecord downRecord = modeRecordRepository.findById(downId).orElseGet(ModeRecord::new);
if (ObjectUtil.isNull(downRecord) && ObjectUtil.isNull(downRecord.getId())) {
modeRecordRepository.updateStatusAndPathById(DefaultNumberConstants.ONE_NUMBER, path, num, downId);
modeRecordRepository.updateStatusNumById(DefaultNumberConstants.ONE_NUMBER, num, downRecord.getParentId());
return Boolean.TRUE;
}
return Boolean.FALSE;
}
@Override
@SneakyThrows
@Transactional(rollbackFor = Exception.class)
public Boolean sendDataByActNameAndActId(Long id, String actName, String actId) {
List<String> stringList = Lists.newArrayList();
ModeRecord downRecord = modeRecordRepository.findById(id).orElseGet(ModeRecord::new);
if (ObjectUtil.isNull(downRecord) ||
downRecord.getRecordStatus() != DefaultNumberConstants.ONE_NUMBER) {
throw new BadRequestException("该批次暂不能建模!");
}
// 解压文件
String unzipPath = CompressUtil.unzipFiles
(deliveryProperties.getFileUrl(), downRecord.getUploadPath(), deliveryProperties.getZipPassword());
File unzipFile = new File(unzipPath);
File parseFile = Objects.requireNonNull
(unzipFile.listFiles())[DefaultNumberConstants.ZERO_NUMBER];
CsvReader reader = CsvUtil.getReader();
CsvData data = reader.read(parseFile);
// csv通配
data.getRows().forEach(str -> stringList.add(str.size() >
DefaultNumberConstants.THREE_NUMBER ? str.get(DefaultNumberConstants.TWO_NUMBER)
: str.get(DefaultNumberConstants.ZERO_NUMBER)));
cn.hutool.core.io.FileUtil.del(unzipPath);
// 修改状态
modeRecordRepository.updateStatusById(DefaultNumberConstants.TWO_NUMBER, id);
// 调用异步任务
decryptTask.doRunSendTask(stringList, id, actId, actName);
log.info("============= the request str list {} =============", stringList.size());
return Boolean.TRUE;
}
private Long saveRecord(String taskName, Integer uploadType, Long userId, Long parentId, Integer levelNum, String tagStr, List<ImeiDTO> dtoArrayList) {
ModeRecord modeRecord = new ModeRecord();
modeRecord.setUserId(userId);
modeRecord.setTagStr(tagStr);
modeRecord.setParentId(parentId);
modeRecord.setTaskName(taskName);
modeRecord.setTreeLevel(levelNum);
modeRecord.setRecordType(uploadType);
modeRecord.setUploadNum(dtoArrayList.size());
modeRecord.setAnalysisNum(DefaultNumberConstants.ZERO_NUMBER);
modeRecord.setRecordStatus(DefaultNumberConstants.ZERO_NUMBER);
return modeRecordRepository.save(modeRecord).getId();
}
private List<ImeiDTO> parseFile(MultipartFile file, String originalFilename) {
List<ImeiDTO> dtoList = Lists.newArrayList();
// 解析 文件
File upload = FileUtil.multiToFile(file);
if (ObjectUtil.isNotNull(upload)) {
if (originalFilename.endsWith(FileConstant.XLS_FILE_SUB_NAME)
|| originalFilename.endsWith(FileConstant.XLSX_FILE_SUB_NAME)) {
ExcelReader reader = ExcelUtil.getReader(upload);
for (List<Object> objects : reader.read()) {
if (objects.size() > DefaultNumberConstants.ONE_NUMBER) {
ImeiDTO dto = new ImeiDTO();
dto.setTag(objects.get(DefaultNumberConstants.ONE_NUMBER).toString());
dto.setImei(objects.get(DefaultNumberConstants.ZERO_NUMBER).toString());
dtoList.add(dto);
}
}
}
if (originalFilename.endsWith(FileConstant.CSV_FILE_SUB_NAME)) {
CsvReader reader = CsvUtil.getReader();
CsvData read = reader.read(upload);
for (CsvRow row : read.getRows()) {
if (row.size() > DefaultNumberConstants.ONE_NUMBER) {
ImeiDTO dto = new ImeiDTO();
dto.setTag(row.get(DefaultNumberConstants.ONE_NUMBER));
dto.setImei(row.get(DefaultNumberConstants.ZERO_NUMBER));
dtoList.add(dto);
}
}
}
}
return dtoList;
}
}

@ -1,5 +1,7 @@
package com.baiye.modules.platform.service.impl; package com.baiye.modules.platform.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.modules.platform.domain.QualityScore; import com.baiye.modules.platform.domain.QualityScore;
import com.baiye.modules.platform.domain.UserQuality; import com.baiye.modules.platform.domain.UserQuality;
import com.baiye.modules.platform.repository.QualityScoreRepository; import com.baiye.modules.platform.repository.QualityScoreRepository;
@ -11,7 +13,10 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* @author wjt * @author wjt
@ -31,6 +36,9 @@ public class QualityScoreServiceImpl implements QualityScoreService {
@Override @Override
public Map<String, Object> query() { public Map<String, Object> query() {
QualityScore query = qualityScoreRepository.query(SecurityUtils.getCurrentUserId()); QualityScore query = qualityScoreRepository.query(SecurityUtils.getCurrentUserId());
if (ObjectUtil.isNull(query) || ObjectUtil.isNull(query.getId())) {
query = qualityScoreRepository.selectRand();
}
QualityScore qualityScore = qualityScoreRepository.findById(1L).orElseGet(QualityScore::new); QualityScore qualityScore = qualityScoreRepository.findById(1L).orElseGet(QualityScore::new);
Map<String, Object> map = new HashMap<>(2); Map<String, Object> map = new HashMap<>(2);
map.put("reality", dealData(query)); map.put("reality", dealData(query));

@ -0,0 +1,18 @@
package com.baiye.modules.platform.service.mapstruct;
import com.baiye.model.base.BaseMapper;
import com.baiye.modules.platform.domain.Label;
import com.baiye.modules.platform.domain.ModeRecord;
import com.baiye.modules.platform.service.dto.ModelRecordDto;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @website https://el-admin.vip
* @author Enzo
* @date 2021-12-16
**/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ModeRecordMapper extends BaseMapper<ModelRecordDto, ModeRecord> {
}

@ -35,9 +35,7 @@ import com.baiye.feign.IRemoteAuthService;
import com.baiye.feign.SourceClueClient; import com.baiye.feign.SourceClueClient;
import com.baiye.model.dto.*; import com.baiye.model.dto.*;
import com.baiye.model.enums.ResponseCode; import com.baiye.model.enums.ResponseCode;
import com.baiye.modules.agent.repository.ChannelCustomRepository;
import com.baiye.modules.agent.entity.ChannelCustom; import com.baiye.modules.agent.entity.ChannelCustom;
import com.baiye.modules.agent.service.ChannelManageService;
import com.baiye.modules.agent.service.CustomManageService; import com.baiye.modules.agent.service.CustomManageService;
import com.baiye.modules.platform.domain.*; import com.baiye.modules.platform.domain.*;
import com.baiye.modules.platform.repository.*; import com.baiye.modules.platform.repository.*;
@ -280,11 +278,13 @@ public class UserServiceImpl implements UserService {
companyId = companyService.createCompany(companyDto).getId(); companyId = companyService.createCompany(companyDto).getId();
} }
companyId = companyId != null ? companyId : SecurityUtils.getCompanyId(); companyId = companyId != null ? companyId : SecurityUtils.getCompanyId();
// 验证子账号 if (ObjectUtil.isNotNull(companyId)) {
Integer sonUserNum = companyService.findCompanyInfo(companyId).getSonUserNum(); // 验证子账号
int size = userRepository.findByCompanyId(companyId).size(); Integer sonUserNum = companyService.findCompanyInfo(companyId).getSonUserNum();
if (!flag && sonUserNum < size) { int size = userRepository.findByCompanyId(companyId).size();
throw new BadRequestException("子账号超过上限,请联系管理员"); if (!flag && sonUserNum < size) {
throw new BadRequestException("子账号超过上限,请联系管理员");
}
} }
BeanUtil.copyProperties(userDTO, user); BeanUtil.copyProperties(userDTO, user);
user.setCompanyId(companyId); user.setCompanyId(companyId);
@ -311,7 +311,7 @@ public class UserServiceImpl implements UserService {
if (userDTO.getIsChannelActive() == null || !userDTO.getIsChannelActive()) { if (userDTO.getIsChannelActive() == null || !userDTO.getIsChannelActive()) {
customManageService.saveChannelCustom(userDTO.getUsername(), userDTO.getPhone(), user.getId(), userId); customManageService.saveChannelCustom(userDTO.getUsername(), userDTO.getPhone(), user.getId(), userId);
} }
//添加质量图 // 添加质量图
qualityScoreService.addDefault(userCreateResult.getId()); qualityScoreService.addDefault(userCreateResult.getId());
//todo 创建默认的支付模板 (因为这快业务已经不需要了,为了避免多余业务操作,默认创建一个) //todo 创建默认的支付模板 (因为这快业务已经不需要了,为了避免多余业务操作,默认创建一个)
payFatherTemplateService.addDefaultTemplate(userCreateResult.getUsername(),userCreateResult.getId(),userCreateResult.getExpirationTime(),companyId); payFatherTemplateService.addDefaultTemplate(userCreateResult.getUsername(),userCreateResult.getId(),userCreateResult.getExpirationTime(),companyId);

@ -0,0 +1,167 @@
package com.baiye.timed;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.baiye.config.properties.DeliveryProperties;
import com.baiye.config.thread.ThreadPoolConfig;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.constant.FileConstant;
import com.baiye.constant.SecurityConstants;
import com.baiye.modules.platform.httpRequest.DecryptionJsonRequest;
import com.baiye.modules.platform.repository.ModeRecordRepository;
import com.baiye.modules.platform.service.dto.DecryptionDTO;
import com.baiye.modules.platform.service.dto.ImeiDTO;
import com.baiye.modules.telemarkting.entity.dto.CallImportDTO;
import com.baiye.util.CompressUtil;
import com.baiye.util.EncryptPhoneUtil;
import com.baiye.util.FileZipUtil;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.sun.org.apache.xalan.internal.XalanConstants;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StopWatch;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @author Enzo
* @date : 2024/1/4
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class DecryptTask {
@Value(value = "${inter.decryptAddress}")
private String decryptAddress;
@Value(value = "${inter.sendClientAddress}")
private String sendClientAddress;
private final ThreadPoolConfig threadConfig;
private final DeliveryProperties deliveryProperties;
private final ModeRecordRepository modeRecordRepository;
/**
* MD524
*
* @param dtoArrayList list
* @param recordId id
* @param childrenId
*/
@SneakyThrows
@Async(value = "WorkExecutor")
@Transactional(rollbackFor = Exception.class)
public void doRunTask(List<ImeiDTO> dtoArrayList, Long recordId, Long childrenId) {
log.info("================== run task begin time {} ==================", DateUtil.now());
StopWatch stopWatch = new StopWatch();
String uuid = IdUtil.fastSimpleUUID();
List<String> stringList = Lists.newArrayList();
// 取出线程池
Executor executor = threadConfig.getExecutor();
List<CompletableFuture<List<String>>> results = Lists.newArrayList();
// 取出值
List<String> sendList = dtoArrayList.stream().map(ImeiDTO::getImei).collect(Collectors.toList());
List<List<String>> partition = Lists.partition(sendList, DefaultNumberConstants.TWO_HUNDRED);
int batchNum = partition.size();
stopWatch.start();
for (List<String> list : partition) {
TimeUnit.MILLISECONDS.sleep(DefaultNumberConstants.ONE_THOUSAND);
// 异步线程池
CompletableFuture<List<String>> future = CompletableFuture.supplyAsync(() -> {
Gson gson = new Gson();
// 转换
String encryptStr = StringUtils.substringBeforeLast(Joiner.on(StrPool.COMMA).skipNulls().join(list), StrPool.COMMA);
// 构造请求
DecryptionJsonRequest build =
DecryptionJsonRequest.builder().cellphoneMd5
(encryptStr).requestId(RandomUtil.randomString(DefaultNumberConstants.TEN_NUMBER)).build();
// 调用HTTP请求发送数据
DecryptionDTO decryptionDTO = JSONUtil.toBean(HttpUtil.post(decryptAddress, gson.toJson(build)), DecryptionDTO.class);
if (StringUtils.isNotBlank(decryptionDTO.getReason())
&& SecurityConstants.SUCCESS.equalsIgnoreCase(decryptionDTO.getReason()) && (StringUtils.isNotBlank(decryptionDTO.getCellPhone()))) {
List<String> parseArray = JSONUtil.toList(decryptionDTO.getCellPhone(), String.class);
if (!parseArray.isEmpty()) {
parseArray = parseArray.stream().filter
(StringUtils::isNotBlank).collect(Collectors.toList());
log.info("================ response size as {} ================", parseArray.size());
return EncryptPhoneUtil.encryptPhoneList(parseArray);
}
}
return Lists.newArrayList();
}, executor);
results.add(future);
}
// 线程结束取出结果集
CompletableFuture<Void> allCompletableFuture = CompletableFuture.allOf
(results.toArray(new CompletableFuture[batchNum]));
List<List<String>> result = allCompletableFuture.thenApply(e -> results.stream().map
(CompletableFuture::join).collect(Collectors.toList())).join();
result.forEach(stringList::addAll);
stopWatch.stop();
String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(uuid);
// 进行文件保存
String csvPath = file.concat(StrPool.DOT).concat(FileConstant.CSV_FILE_SUB_NAME);
String zipPath = file.concat(FileConstant.ZIP_FILE_SUB_NAME);
log.info("============= the save path as {} ,num {} ===================", csvPath, stringList.size());
FileZipUtil.writeCSV(csvPath, stringList);
// 设置压缩文件
CompressUtil.decryptionCompression(zipPath, csvPath, null);
// 修改状态并更改
modeRecordRepository.updateStatusAndPathById(DefaultNumberConstants.ONE_NUMBER, zipPath, stringList.size(), childrenId);
modeRecordRepository.updateStatusNumById(DefaultNumberConstants.ONE_NUMBER, stringList.size(), recordId);
FileUtil.del(csvPath);
log.info("================== run task end time {} ==================", DateUtil.now());
}
@Async(value = "WorkExecutor")
@Transactional(rollbackFor = Exception.class)
public void doRunSendTask(List<String> stringList, Long id, String actId, String actName) {
log.info("================== run task begin time {} ==================", DateUtil.now());
int count = DefaultNumberConstants.ZERO_NUMBER;
List<List<String>> partition = Lists.partition(stringList, DefaultNumberConstants.ONE_THOUSAND);
// 调用推送地址进行推送
CallImportDTO dto = new CallImportDTO();
dto.setActId(actId);
dto.setActName(actName);
for (List<String> list : partition) {
List<CallImportDTO.Source> sendClientList = Lists.newArrayList();
list.forEach(str -> {
CallImportDTO.Source client = new CallImportDTO.Source();
client.setCellphone(str);
sendClientList.add(client);
});
dto.setClientList(sendClientList);
String post = HttpUtil.post(sendClientAddress, JSONUtil.toJsonStr(dto));
if (post.contains(XalanConstants.FEATURE_TRUE)){
count += list.size();
}
log.info("============ the submit result as {} =========", JSONUtil.toJsonStr(post));
}
if (count > DefaultNumberConstants.ZERO_NUMBER){
modeRecordRepository.updateStatusAndTimeById(DefaultNumberConstants.THREE_NUMBER, DateUtil.date(), count, id);
}
log.info("================== run task end time {} ==================", DateUtil.now());
}
}

@ -1,5 +1,6 @@
package com.baiye.timed; package com.baiye.timed;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baiye.modules.telemarkting.dao.PreTestAccountRepository; import com.baiye.modules.telemarkting.dao.PreTestAccountRepository;
import com.baiye.modules.telemarkting.entity.PreTestAccount; import com.baiye.modules.telemarkting.entity.PreTestAccount;
@ -30,7 +31,7 @@ public class PreTestTokenTask {
List<PreTestAccount> list = new ArrayList<>(); List<PreTestAccount> list = new ArrayList<>();
for (PreTestAccount preTestAccount : all) { for (PreTestAccount preTestAccount : all) {
String token = preTestReq.getToken(preTestAccount.getDbUserName(), preTestAccount.getDbUserPassword()); String token = preTestReq.getToken(preTestAccount.getDbUserName(), preTestAccount.getDbUserPassword());
if (StrUtil.isEmpty(token)) { if (CharSequenceUtil.isEmpty(token)) {
preTestAccount.setStatus(false); preTestAccount.setStatus(false);
} }
preTestAccount.setToken(token); preTestAccount.setToken(token);

@ -234,3 +234,8 @@ channel:
logstash: logstash:
url: localhost:9601 url: localhost:9601
exchange:
org-code: org_by_test
callback-url: http://proxy.hzdaba.cn:58888/pub/data/set
submit-url: http://proxy.hzdaba.cn:58888/pub/data/submit

@ -136,6 +136,10 @@ double:
statusUrl: https://baiyee.vip/api/back/status statusUrl: https://baiyee.vip/api/back/status
stopUrl: http://ax.hzdaba.cn/callback/Accounts/dbby_hangzhoubaiyehl/Hw/CallBackStop stopUrl: http://ax.hzdaba.cn/callback/Accounts/dbby_hangzhoubaiyehl/Hw/CallBackStop
exchange:
org-code: org_by
callback-url: http://proxy.hzdaba.cn:58888/pub/data/set
submit-url: http://proxy.hzdaba.cn:58888/pub/data/submit
#axb地址 #axb地址
axb: axb:

@ -108,9 +108,10 @@ generate:
url: https://cb.tuoz.net url: https://cb.tuoz.net
exchange:
org-code: org_by
callback-url: http://proxy.hzdaba.cn:58888/pub/data/set
submit-url: http://proxy.hzdaba.cn:58888/pub/data/submit
inter:
decryptAddress: http://proxy.hzdaba.cn:32288/v2/Accounts/dabakeji/Calls/Getcellphone
address: https://bd.hzdaba.cn:8085/v3/Accounts/yuyoukeji/BigData/EncryptTel
appid: yuyoukeji
tk: e3fb7090b4babe44a5113601487af433
sendClientAddress: https://ai.hzdaba.cn/api/activity/addclient

@ -9,6 +9,8 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/** /**
* @author jt * @author jt
*/ */
@ -17,7 +19,10 @@ public interface DeliveryRecordClient {
String TRIPARTITE_DOWN_PREFIX = "/api/tripartite/record"; String TRIPARTITE_DOWN_PREFIX = "/api/tripartite/record";
String PAY_PREFIX = "/api/down/record"; String DOWN_PREFIX = "/api/down/record";
String MODEL_PREFIX = "/api/mode/record";
String AGENT_PREFIX = "/api/custom"; String AGENT_PREFIX = "/api/custom";
@ -31,7 +36,7 @@ public interface DeliveryRecordClient {
* @return * @return
*/ */
@ApiOperation("修改下载链接") @ApiOperation("修改下载链接")
@GetMapping(PAY_PREFIX + "/update/path") @GetMapping(DOWN_PREFIX + "/update/path")
ResponseEntity<Void> updatePath( @RequestParam("filePath") String filePath, @RequestParam("path") String path, @RequestParam("downId") Long downId, @RequestHeader(SecurityConstants.FROM) String from); ResponseEntity<Void> updatePath( @RequestParam("filePath") String filePath, @RequestParam("path") String path, @RequestParam("downId") Long downId, @RequestHeader(SecurityConstants.FROM) String from);
@ -60,10 +65,24 @@ public interface DeliveryRecordClient {
* @return * @return
*/ */
@ApiOperation("下载地址获取链接") @ApiOperation("下载地址获取链接")
@GetMapping(PAY_PREFIX + "/find/path") @GetMapping(DOWN_PREFIX + "/find/path")
ResponseEntity<String> queryPath(@RequestParam("downId") Long downId, @RequestHeader(SecurityConstants.FROM) String from); ResponseEntity<String> queryPath(@RequestParam("downId") Long downId, @RequestHeader(SecurityConstants.FROM) String from);
/**
* id
*
* @param downId
* @param from
* @return
*/
@ApiOperation("下载地址获取链接")
@GetMapping(MODEL_PREFIX + "/find/path")
ResponseEntity<String> queryDownPath(@RequestParam("downId") Long downId, @RequestHeader(SecurityConstants.FROM) String from);
/** /**
* id * id
* *
@ -102,4 +121,17 @@ public interface DeliveryRecordClient {
@ApiOperation("保存链接地址") @ApiOperation("保存链接地址")
@GetMapping(TRIPARTITE_DOWN_PREFIX + "/update/num") @GetMapping(TRIPARTITE_DOWN_PREFIX + "/update/num")
void updateOriginAndSize(@RequestParam("sourceData") Long userId, @RequestParam("dateStr") String format,@RequestParam("totalNumber") Integer size, @RequestHeader(SecurityConstants.FROM) String fromIn); void updateOriginAndSize(@RequestParam("sourceData") Long userId, @RequestParam("dateStr") String format,@RequestParam("totalNumber") Integer size, @RequestHeader(SecurityConstants.FROM) String fromIn);
/**
*
* @param csvPath
* @param num
* @param downId
* @param fromIn
* @return
*/
@ApiOperation("下载地址获取链接")
@GetMapping(MODEL_PREFIX + "/update/num")
ResponseEntity<Void> updateNumPathById(@RequestParam("path") String csvPath, @RequestParam("num") Integer num,@RequestParam("downId") Long downId, @RequestHeader(SecurityConstants.FROM) String fromIn);
} }

@ -11,7 +11,7 @@ import com.baiye.module.entity.Clue;
import com.baiye.module.listener.dto.BaseExcelListenerDto; import com.baiye.module.listener.dto.BaseExcelListenerDto;
import com.baiye.module.listener.dto.TokerListenerDto; import com.baiye.module.listener.dto.TokerListenerDto;
import com.baiye.module.service.ClueService; import com.baiye.module.service.ClueService;
import com.baiye.module.service.dto.SecretResponseBean; import com.baiye.http.SecretResponseBean;
import com.baiye.util.DecryptPnoUtil; import com.baiye.util.DecryptPnoUtil;
import com.google.common.base.Splitter; import com.google.common.base.Splitter;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;

@ -121,7 +121,8 @@ public class DmpCallbackServiceImpl implements DmpCallbackService {
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER) { if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER) {
saveClue(bathNo, byTaskName, taskId, tagList, responseList); saveClue(bathNo, byTaskName, taskId, tagList, responseList);
} }
if (byTaskName.getType() == DefaultNumberConstants.TWO_NUMBER) { if (byTaskName.getType() == DefaultNumberConstants.TWO_NUMBER ||
byTaskName.getType() == DefaultNumberConstants.FIVE_NUMBER) {
// 异步方式下载 // 异步方式下载
List<String> finalResponseList = responseList; List<String> finalResponseList = responseList;
CompletableFuture.runAsync(() -> downResource(bathNo, byTaskName, originalList, finalResponseList)); CompletableFuture.runAsync(() -> downResource(bathNo, byTaskName, originalList, finalResponseList));
@ -141,8 +142,8 @@ public class DmpCallbackServiceImpl implements DmpCallbackService {
return CommonResponse.createBySuccess(HttpStatus.SC_OK); return CommonResponse.createBySuccess(HttpStatus.SC_OK);
} }
return CommonResponse.createByErrorCodeMessage return CommonResponse.createByErrorCodeMessage
(ResponseCode.BATCH_NUMBER_EXIST_OR_SEND.getCode(), (ResponseCode.BATCH_NUMBER_EXIST_OR_SEND.getCode(),
ResponseCode.BATCH_NUMBER_EXIST_OR_SEND.getDesc()); ResponseCode.BATCH_NUMBER_EXIST_OR_SEND.getDesc());
} }
@ -187,15 +188,16 @@ public class DmpCallbackServiceImpl implements DmpCallbackService {
@SneakyThrows(value = ZipException.class) @SneakyThrows(value = ZipException.class)
private void downResource(String taskName, DeliveryRecord private void downResource(String taskName, DeliveryRecord
byTaskName, List<List<String>> originalList, List<String> responseList) { byTaskName, List<List<String>> originalList, List<String> responseList) {
Integer type = byTaskName.getType();
String uuid = IdUtil.fastSimpleUUID(); String uuid = IdUtil.fastSimpleUUID();
List<String> csvList = Lists.newArrayList(); List<String> csvList = Lists.newArrayList();
originalList = Lists.newArrayList(Sets.newHashSet(originalList)); originalList = Lists.newArrayList(Sets.newHashSet(originalList));
String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(uuid); String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(uuid);
Object objPath = redisUtils.get(CacheKey.DMP_DOWN_URL.concat(String.valueOf(byTaskName.getDownId()))); Object objPath = redisUtils.get(CacheKey.DMP_DOWN_URL.concat(String.valueOf(byTaskName.getDownId())).concat(String.valueOf(type)));
String path = ObjectUtil.isNotNull(objPath) ? String path = ObjectUtil.isNotNull(objPath) ?
String.valueOf(objPath) : deliveryRecordClient.queryPath String.valueOf(objPath) : type == DefaultNumberConstants.TWO_NUMBER ?
(byTaskName.getDownId(), SecurityConstants.FROM_IN).getBody(); deliveryRecordClient.queryPath(byTaskName.getDownId(), SecurityConstants.FROM_IN).getBody() :
deliveryRecordClient.queryDownPath(byTaskName.getDownId(), SecurityConstants.FROM_IN).getBody();
if (ObjectUtil.isNotNull(path)) { if (ObjectUtil.isNotNull(path)) {
// 解压文件 // 解压文件
String unzipPath = CompressUtil.unzipFiles String unzipPath = CompressUtil.unzipFiles
@ -213,6 +215,9 @@ public class DmpCallbackServiceImpl implements DmpCallbackService {
FileZipUtil.writeToCsv(csvList, parseFile.getPath(), Boolean.TRUE); FileZipUtil.writeToCsv(csvList, parseFile.getPath(), Boolean.TRUE);
// 设置压缩文件 // 设置压缩文件
CompressUtil.decryptionCompression(path, parseFile.getPath(), null); CompressUtil.decryptionCompression(path, parseFile.getPath(), null);
if (type == DefaultNumberConstants.FIVE_NUMBER) {
deliveryRecordClient.updateNumPathById(path, originalList.size(), byTaskName.getDownId(), SecurityConstants.FROM_IN);
}
deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, responseList.size(), taskName); deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, responseList.size(), taskName);
FileUtil.del(unzipPath); FileUtil.del(unzipPath);
return; return;
@ -233,9 +238,14 @@ public class DmpCallbackServiceImpl implements DmpCallbackService {
(zipPath.lastIndexOf(StrPool.SLASH) + DefaultNumberConstants.ONE_NUMBER); (zipPath.lastIndexOf(StrPool.SLASH) + DefaultNumberConstants.ONE_NUMBER);
FileUtil.del(csvPath); FileUtil.del(csvPath);
String downUrl = deliveryProperties.getDmpDownPath().concat(filePath); String downUrl = deliveryProperties.getDmpDownPath().concat(filePath);
deliveryRecordClient.updatePath(zipPath, downUrl, byTaskName.getDownId(), SecurityConstants.FROM_IN); if (type == DefaultNumberConstants.TWO_NUMBER) {
deliveryRecordClient.updatePath(zipPath, downUrl, byTaskName.getDownId(), SecurityConstants.FROM_IN);
}
if (type == DefaultNumberConstants.FIVE_NUMBER) {
deliveryRecordClient.updateNumPathById(zipPath, originalList.size(), byTaskName.getDownId(), SecurityConstants.FROM_IN);
}
deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, responseList.size(), taskName); deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, responseList.size(), taskName);
redisUtils.set(CacheKey.DMP_DOWN_URL.concat(String.valueOf(byTaskName.getDownId())), zipPath, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS); redisUtils.set(CacheKey.DMP_DOWN_URL.concat(String.valueOf(byTaskName.getDownId()).concat(String.valueOf(type))), zipPath, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS);
} }
@SneakyThrows(value = ZipException.class) @SneakyThrows(value = ZipException.class)

@ -7,7 +7,7 @@ import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baiye.constant.DefaultNumberConstants; import com.baiye.constant.DefaultNumberConstants;
import com.baiye.model.enums.ResponseCode; import com.baiye.model.enums.ResponseCode;
import com.baiye.module.constant.SecretConstant; import com.baiye.constant.SecretConstant;
import com.baiye.module.service.dto.IsBlackListDTO; import com.baiye.module.service.dto.IsBlackListDTO;
import com.baiye.module.service.dto.IsBlackResponse; import com.baiye.module.service.dto.IsBlackResponse;
import com.baiye.module.service.dto.IsOnlineBlackResponse; import com.baiye.module.service.dto.IsOnlineBlackResponse;

Loading…
Cancel
Save