From 7f01f82a8bd198484679aaecf8296159cdb0b419 Mon Sep 17 00:00:00 2001 From: wjt Date: Tue, 21 Nov 2023 13:14:55 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E6=B5=8B=E8=AF=95=E5=91=BC=E5=8F=AB?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/baiye/http/PreTestResponse.java | 23 +++ .../baiye/modules/platform/domain/Task.java | 16 ++ .../telemarkting/api/PreTestController.java | 73 ++++++++ .../dao/PreTestAccountRepository.java | 23 +++ .../dao/PreTestActRepository.java | 34 ++++ .../telemarkting/entity/PreTestAccount.java | 49 ++++++ .../telemarkting/entity/PreTestAct.java | 76 ++++++++ .../entity/dto/CallImportDTO.java | 52 ++++++ .../entity/dto/PreTestActDTO.java | 28 +++ .../entity/dto/PreTestActQueryCriteria.java | 20 +++ .../telemarkting/httpRequest/PreTestReq.java | 79 +++++++++ .../telemarkting/service/PreTestService.java | 43 +++++ .../service/impl/PreTestServiceImpl.java | 164 ++++++++++++++++++ .../java/com/baiye/timed/PreTestTask.java | 83 +++++++++ .../com/baiye/timed/PreTestTokenTask.java | 42 +++++ 15 files changed, 805 insertions(+) create mode 100644 ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/http/PreTestResponse.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/api/PreTestController.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/PreTestAccountRepository.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/PreTestActRepository.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/PreTestAccount.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/PreTestAct.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/CallImportDTO.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/PreTestActDTO.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/PreTestActQueryCriteria.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/httpRequest/PreTestReq.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/PreTestService.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/PreTestServiceImpl.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/PreTestTask.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/PreTestTokenTask.java diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/http/PreTestResponse.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/http/PreTestResponse.java new file mode 100644 index 00000000..5adadad4 --- /dev/null +++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/http/PreTestResponse.java @@ -0,0 +1,23 @@ +package com.baiye.http; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * @author wjt + * @date 2023/11/14 + */ +@Data +public class PreTestResponse { + + private Object data; + + @JsonProperty("code") + private int code; + + @JsonProperty("msg") + private String msg; + + @JsonProperty("result") + private Boolean result; +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/domain/Task.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/domain/Task.java index 2075c63c..6e11d9e7 100644 --- a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/domain/Task.java +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/domain/Task.java @@ -1,5 +1,6 @@ package com.baiye.modules.platform.domain; +import com.baiye.constant.DefaultNumberConstants; import com.baiye.model.entity.BaseTask; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -28,4 +29,19 @@ public class Task extends BaseTask { @Transient @ApiModelProperty(value = "任务小组信息") private List organizeList; + + /** + * 创建 预测试活动任务 如果复用请核对参数 + */ + public Task createActTask(Long taskId, Long id, String taskName, Integer isForm, Boolean isDmpDelivery) { + this.setId(taskId); + this.setEncryptionType(DefaultNumberConstants.ZERO_NUMBER); + this.setIsDistribution(DefaultNumberConstants.ZERO_NUMBER); + this.setTaskType(DefaultNumberConstants.ONE_NUMBER); + this.setIsForm(isForm); + this.setCreateBy(id); + this.setTaskName(taskName); + this.setIsDmpDelivery(isDmpDelivery); + return this; + } } diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/api/PreTestController.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/api/PreTestController.java new file mode 100644 index 00000000..0d8c9858 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/api/PreTestController.java @@ -0,0 +1,73 @@ +package com.baiye.modules.telemarkting.api; + +import com.baiye.annotation.Log; +import com.baiye.http.CommonResponse; +import com.baiye.modules.telemarkting.entity.dto.PreTestActDTO; +import com.baiye.modules.telemarkting.entity.dto.PreTestActQueryCriteria; +import com.baiye.modules.telemarkting.service.PreTestService; +import com.baiye.valid.AddGroup; +import com.baiye.valid.UpdateGroup; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +/** + * @author wjt + * @date 2023/11/13 + */ +@Slf4j +@RestController +@RequestMapping("/api") +@Api(tags = " 预测试外呼 对接大坝") +@RequiredArgsConstructor +public class PreTestController { + + private final PreTestService preTestService; + + @PostMapping("/act/add") + @ApiOperation("创建活动任务") + @Log("创建活动任务") + public CommonResponse actAdd(@Validated({AddGroup.class}) @RequestBody PreTestActDTO preTestActDTO) { + preTestService.actAdd(preTestActDTO); + return CommonResponse.createBySuccess(); + } + + @GetMapping("/act/query") + @ApiOperation("预测试活动查询") + @Log("预测试活动查询") + public ResponseEntity actQuery(PreTestActQueryCriteria preTestActQueryCriteria, Pageable pageable) { + return new ResponseEntity<>(preTestService.actQuery(preTestActQueryCriteria, pageable), HttpStatus.OK); + } + + @PostMapping("/act/update") + @ApiOperation("修改活动任务") + @Log("修改活动任务") + public CommonResponse actUpdate(@Validated({UpdateGroup.class}) @RequestBody PreTestActDTO preTestActDTO) { + preTestService.actUpdate(preTestActDTO); + return CommonResponse.createBySuccess(); + } + + + @GetMapping("/account/conf") + @ApiOperation("预测试账号配置") + @Log("预测试账号配置") + public CommonResponse accountConf(@RequestParam("userName") String userName, + @RequestParam("passWord") String passWord) { + preTestService.accountConf(userName, passWord); + return CommonResponse.createBySuccess(); + } + + @GetMapping("/account/query") + @ApiOperation("预测试账号查询") + @Log("预测试账号查询") + public CommonResponse accountQuery() { + return CommonResponse.createBySuccess(preTestService.accountQuery()); + } +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/PreTestAccountRepository.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/PreTestAccountRepository.java new file mode 100644 index 00000000..e3d0f534 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/PreTestAccountRepository.java @@ -0,0 +1,23 @@ +package com.baiye.modules.telemarkting.dao; + +import com.baiye.modules.telemarkting.entity.PreTestAccount; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author wjt + * @date 2023/11/14 + */ +@Repository +public interface PreTestAccountRepository extends JpaRepository, JpaSpecificationExecutor { + + /** + * 根据状态查询 + * @param status + * @return + */ + List findAllByStatus(Boolean status); +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/PreTestActRepository.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/PreTestActRepository.java new file mode 100644 index 00000000..d7995c19 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/PreTestActRepository.java @@ -0,0 +1,34 @@ +package com.baiye.modules.telemarkting.dao; + +import com.baiye.modules.telemarkting.entity.PreTestAct; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author wjt + * @date 2023/11/14 + */ +@Repository +public interface PreTestActRepository extends JpaRepository, JpaSpecificationExecutor { + + /** + * 根据状态查询活动 + * + * @param status 状态 + * @return + */ + List findAllByStatus(Integer status); + + /** + * 查询活动 + * + * @param taskId 用户id + * @param userId 活动id + * @return + */ + PreTestAct findByTaskIdAndUserId(Long taskId, Long userId ); + +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/PreTestAccount.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/PreTestAccount.java new file mode 100644 index 00000000..efc1ecff --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/PreTestAccount.java @@ -0,0 +1,49 @@ +package com.baiye.modules.telemarkting.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * @author wjt + * @date 2023/11/14 + */ +@Getter +@Setter +@Entity +@Table(name = "tb_pre_test_account") +@EntityListeners(AuditingEntityListener.class) +public class PreTestAccount implements Serializable { + + @Id + @ApiModelProperty(value = "user_id") + @Column(name = "user_id") + private Long userId; + + @Column(name = "db_user_name") + @ApiModelProperty(value = "对应大坝用户名") + private String dbUserName; + + @Column(name = "db_user_password") + @ApiModelProperty(value = "对应大坝用户密码") + private String dbUserPassword; + + @Column(name = "token") + @ApiModelProperty(value = "token") + private String token; + + @ApiModelProperty(value = "是否激活") + @Column(name = "status") + private Boolean status = Boolean.TRUE; + + @LastModifiedDate + @Column(name = "create_time") + @ApiModelProperty(value = "创建时间") + private Date createTime; +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/PreTestAct.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/PreTestAct.java new file mode 100644 index 00000000..2ea4343c --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/PreTestAct.java @@ -0,0 +1,76 @@ +package com.baiye.modules.telemarkting.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * @author wjt + * @date 2023/11/14 + */ +@Getter +@Setter +@Entity +@Table(name = "tb_pre_test_act") +@EntityListeners(AuditingEntityListener.class) +public class PreTestAct implements Serializable { + + @Id + @ApiModelProperty(value = "主键id(自动递增)") + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "user_id") + @ApiModelProperty(value = "user_id") + private Long userId; + + @Column(name = "act_name") + @ApiModelProperty(value = "活动名") + private String actName; + + @Column(name = "act_id") + @ApiModelProperty(value = "活动名id") + private String actId; + + @Column(name = "task_id") + @ApiModelProperty(value = "任务id") + private Long taskId; + + @Column(name = "execute_total_num") + @ApiModelProperty(value = "预执行总数") + private Integer executeTotalNum; + + @Column(name = "execute_num") + @ApiModelProperty(value = "已执行数") + private Integer executeNum; + + @Column(name = "rate_num") + @ApiModelProperty(value = "接通数") + private Integer rateNum; + + @Column(name = "status") + @ApiModelProperty(value = "活动状态 0-进行中 1-完结") + private Integer status; + + @LastModifiedDate + @Column(name = "create_time") + @ApiModelProperty(value = "创建时间") + private Date createTime; + + + public PreTestAct addDefaultPreTestAct(Long userId, String actName, String actId, Long taskId) { + this.setUserId(userId); + this.setActId(actId); + this.setActName(actName); + this.setTaskId(taskId); + this.setStatus(0); + return this; + } +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/CallImportDTO.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/CallImportDTO.java new file mode 100644 index 00000000..40be6520 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/CallImportDTO.java @@ -0,0 +1,52 @@ +package com.baiye.modules.telemarkting.entity.dto; + +import lombok.Data; + +import java.util.List; + +/** + * @author wjt + * @date 2023/11/13 + */ +@Data +public class CallImportDTO { + + /** + * 身份认证 token + */ + private String authKey; + + /** + * 活动名称 + */ + private String actName; + + /** + * 活动名称 + */ + private String actId; + + /** + * 数据批次 ID + */ + private String batchId; + + /** + * nid 最大支持1000条 + */ + private List clientList; + + @Data + public static class Source { + /** + * nid + */ + private String cellphone; + + /** + * 线索标识码 (例如:活动名+用户民+随机码) + */ + private String variable; + } + +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/PreTestActDTO.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/PreTestActDTO.java new file mode 100644 index 00000000..81b7489b --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/PreTestActDTO.java @@ -0,0 +1,28 @@ +package com.baiye.modules.telemarkting.entity.dto; + +import com.baiye.valid.AddGroup; +import com.baiye.valid.UpdateGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author wjt + * @date 2023/11/17 + * 活动编辑 + */ +@Data +public class PreTestActDTO { + + @NotNull(groups = {AddGroup.class}) + private String actId; + @NotNull(groups = {AddGroup.class}) + private String actName; + @NotNull(groups = {UpdateGroup.class}) + private Long taskId; + @NotNull(groups = {UpdateGroup.class}) + private List tagStr; + private Boolean isDmpDelivery; +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/PreTestActQueryCriteria.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/PreTestActQueryCriteria.java new file mode 100644 index 00000000..a22d17e9 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/dto/PreTestActQueryCriteria.java @@ -0,0 +1,20 @@ +package com.baiye.modules.telemarkting.entity.dto; + +import com.baiye.annotation.Query; +import lombok.Data; + +/** + * @author wjt + * @date 2023/11/15 + */ +@Data +public class PreTestActQueryCriteria { + @Query + private String actId; + + @Query(type = Query.Type.INNER_LIKE) + private String actName; + + @Query + private Long userId; +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/httpRequest/PreTestReq.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/httpRequest/PreTestReq.java new file mode 100644 index 00000000..0ee6bd09 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/httpRequest/PreTestReq.java @@ -0,0 +1,79 @@ +package com.baiye.modules.telemarkting.httpRequest; + +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baiye.exception.BadRequestException; +import com.baiye.http.PreTestResponse; +import com.baiye.modules.telemarkting.entity.dto.CallImportDTO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + + +/** + * @author wjt + * @date 2023/11/13 + */ +@Slf4j +@Component +public class PreTestReq { + String sendUrl = "https://ai.hzdaba.cn/external/activity/addClient"; + String getUrl = "https://ai.hzdaba.cn/external/activity_statistics"; + String tokenUrl = "https://ai.hzdaba.cn/external/get/authKey"; + + /** + * 导入数据 + */ + public void sendDaBa(CallImportDTO callImportDTO) { + String body = sendCallReq(sendUrl, JSONUtil.toJsonStr(callImportDTO)); + PreTestResponse response = JSONUtil.toBean(body, PreTestResponse.class); + if (!response.getResult()) { + log.info("导入失败 参数{}, 返回结果{}", JSONUtil.toJsonStr(callImportDTO), JSONUtil.toJsonStr(response)); + throw new BadRequestException("导入失败 :" + response.getMsg()); + } + } + + /** + * 获取话单统计 + */ + public JSONArray getDaBa(String authKey, String actName) { + JSONObject json = new JSONObject(8); + json.putOpt("authKey", authKey); + json.putOpt("actName", actName); + json.putOpt("status", 0); + json.putOpt("pageNum", 1); + json.putOpt("pageSize", 10); + String body = sendCallReq(getUrl, JSONUtil.toJsonStr(json)); + PreTestResponse response = JSONUtil.toBean(body, PreTestResponse.class); + if (response.getResult()) { + return JSONUtil.parseArray(response.getData()); + } else { + log.info("获取活动统计失败 {}", JSONUtil.toJsonStr(response)); + } + return null; + } + + /** + * 获取token + */ + public String getToken(String username, String password) { + JSONObject json = new JSONObject(8); + json.putOpt("username", username); + json.putOpt("password", password); + String body = sendCallReq(tokenUrl, JSONUtil.toJsonStr(json)); + PreTestResponse response = JSONUtil.toBean(body, PreTestResponse.class); + if (response.getResult()) { + return String.valueOf(response.getData()); + } else { + log.info("获取token失败 {}", JSONUtil.toJsonStr(response)); + } + return ""; + } + + private String sendCallReq(String url, String json) { + return HttpRequest.post(url) + .body(json) + .execute().body(); + } +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/PreTestService.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/PreTestService.java new file mode 100644 index 00000000..935580a6 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/PreTestService.java @@ -0,0 +1,43 @@ +package com.baiye.modules.telemarkting.service; + +import com.baiye.modules.telemarkting.entity.PreTestAccount; +import com.baiye.modules.telemarkting.entity.dto.PreTestActDTO; +import com.baiye.modules.telemarkting.entity.dto.PreTestActQueryCriteria; +import org.springframework.data.domain.Pageable; +import org.springframework.web.multipart.MultipartFile; + +/** + * @author wjt + * @date 2023/11/13 + */ +public interface PreTestService { + /** + * 新增活动 + */ + void actAdd(PreTestActDTO preTestActDTO); + + /** + * 活动查询 + */ + Object actQuery(PreTestActQueryCriteria preTestActQueryCriteria, Pageable pageable); + + /** + * 修改活动任务 + */ + void actUpdate(PreTestActDTO preTestActDTO); + + /** + * 配置账号 + * + * @param userName 用户名 + * @param passWord 密码 + */ + void accountConf(String userName, String passWord); + + /** + * 查询配置账号 + * + * @return + */ + PreTestAccount accountQuery(); +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/PreTestServiceImpl.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/PreTestServiceImpl.java new file mode 100644 index 00000000..6c322094 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/PreTestServiceImpl.java @@ -0,0 +1,164 @@ +package com.baiye.modules.telemarkting.service.impl; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.baiye.exception.BadRequestException; +import com.baiye.modules.platform.domain.Task; +import com.baiye.modules.platform.domain.TaskTag; +import com.baiye.modules.platform.httpRequest.AdBackRequestApi; +import com.baiye.modules.platform.repository.TaskRepository; +import com.baiye.modules.platform.repository.TaskTagRepository; +import com.baiye.modules.telemarkting.dao.PreTestAccountRepository; +import com.baiye.modules.telemarkting.dao.PreTestActRepository; +import com.baiye.modules.telemarkting.entity.PreTestAccount; +import com.baiye.modules.telemarkting.entity.PreTestAct; +import com.baiye.modules.telemarkting.entity.dto.CallImportDTO; +import com.baiye.modules.telemarkting.entity.dto.PreTestActDTO; +import com.baiye.modules.telemarkting.entity.dto.PreTestActQueryCriteria; +import com.baiye.modules.telemarkting.httpRequest.PreTestReq; +import com.baiye.modules.telemarkting.service.PreTestService; +import com.baiye.util.PageUtil; +import com.baiye.util.QueryHelp; +import com.baiye.util.SecurityUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author wjt + * @date 2023/11/13 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class PreTestServiceImpl implements PreTestService { + private final PreTestReq preTestReq; + private final PreTestActRepository preTestActRepository; + private final PreTestAccountRepository preTestAccountRepository; + private final TaskTagRepository taskTagRepository; + private final TaskRepository taskRepository; + private final AdBackRequestApi adBackRequestApi; + + @Override + @Transactional(rollbackFor = Exception.class) + public void actAdd(PreTestActDTO preTestActDTO) { + //新建任务 + long taskId = IdUtil.getSnowflake(9, 9).nextId(); + long userId = SecurityUtils.getCurrentUserId(); + Task task = new Task().createActTask(taskId, userId, preTestActDTO.getActName(), 8, true); + //检查tag值 + if (CollUtil.isNotEmpty(preTestActDTO.getTagStr())) { + createTag(taskId, userId, preTestActDTO.getTagStr()); + } + //发送任务 + List collect = preTestActDTO.getTagStr().stream().map(String::trim).collect(Collectors.toList()); + adBackRequestApi.sendTag(taskId, userId, collect); + //新建活动 + PreTestAct preTestAct = new PreTestAct().addDefaultPreTestAct(userId, preTestActDTO.getActName(), preTestActDTO.getActId(), taskId); + taskRepository.save(task); + preTestActRepository.save(preTestAct); + } + + @Override + public Object actQuery(PreTestActQueryCriteria preTestActQueryCriteria, Pageable pageable) { + preTestActQueryCriteria.setUserId(SecurityUtils.getCurrentUserId()); + PageRequest pageRequest = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by(Sort.Direction.DESC, "createTime")); + Page all = preTestActRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, preTestActQueryCriteria, criteriaBuilder), pageRequest); + return PageUtil.toPage(all); + } + + @Override + public void actUpdate(PreTestActDTO preTestActDTO) { + long userId = SecurityUtils.getCurrentUserId(); + //检查tag + createTag(preTestActDTO.getTaskId(), userId, preTestActDTO.getTagStr()); + if (preTestActDTO.getIsDmpDelivery() != null) { + Task task = new Task(); + task.setId(preTestActDTO.getTaskId()); + task.setIsDmpDelivery(preTestActDTO.getIsDmpDelivery()); + taskRepository.save(task); + } + List collect = preTestActDTO.getTagStr().stream().map(String::trim).collect(Collectors.toList()); + adBackRequestApi.sendTag(preTestActDTO.getTaskId(), userId, collect); + } + + /** + * 检查tag + */ + private void createTag(Long taskId, Long userId, List tags) { + List taskTags = taskTagRepository.findTaskTagByUserId(userId); + tags = tags.stream().distinct().collect(Collectors.toList()); + List tagAll = new ArrayList<>(); + for (TaskTag taskTag : taskTags) { + if (taskId.equals(taskTag.getTaskId())) { + //已经有这个任务,说明是修改,所以排除掉当前的 + continue; + } + tagAll.addAll(taskTag.getTag()); + } + List differenceList = tagAll.stream().filter(tags::contains).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(differenceList)) { + throw new BadRequestException("tag 存在重复 请检查:" + JSONUtil.toJsonStr(differenceList)); + } + TaskTag taskTag = taskTagRepository.findTaskTagByTaskId(taskId); + if (ObjectUtil.isNull(taskTag)) { + taskTag = new TaskTag(); + taskTag.setUserId(userId); + taskTag.setTaskId(taskId); + } + taskTag.setTag(tags); + taskTagRepository.save(taskTag); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public void accountConf(String userName, String passWord) { + PreTestAccount preTestAccount = new PreTestAccount(); + preTestAccount.setUserId(SecurityUtils.getCurrentUserId()); + String name = Base64.encode(userName); + String pass = Base64.encode(passWord); + preTestAccount.setDbUserName(name); + preTestAccount.setDbUserPassword(pass); + //获取token + String token = preTestReq.getToken(name, pass); + if (StrUtil.isEmpty(token)) { + throw new BadRequestException("账号密码不正确,请检查"); + } + preTestAccount.setToken(token); + preTestAccountRepository.save(preTestAccount); + } + + @Override + public PreTestAccount accountQuery() { + PreTestAccount preTestAccount = preTestAccountRepository.findById(SecurityUtils.getCurrentUserId()).orElseGet(PreTestAccount::new); + preTestAccount.setDbUserName(Base64.decodeStr(preTestAccount.getDbUserName())); + preTestAccount.setDbUserPassword(Base64.decodeStr(preTestAccount.getDbUserPassword())); + return preTestAccount; + } + + public void sendDBData(Long taskId, Long userId, List sources) { + PreTestAccount preTestAccount = preTestAccountRepository.findById(userId).orElseGet(PreTestAccount::new); + PreTestAct preTestAct = preTestActRepository.findByTaskIdAndUserId(taskId, userId); + CallImportDTO callImportDTO = new CallImportDTO(); + callImportDTO.setAuthKey(preTestAccount.getToken()); + callImportDTO.setActName(preTestAct.getActName()); + callImportDTO.setActId(preTestAct.getActId()); + callImportDTO.setClientList(sources); + preTestReq.sendDaBa(callImportDTO); + } + +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/PreTestTask.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/PreTestTask.java new file mode 100644 index 00000000..f5d04df6 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/PreTestTask.java @@ -0,0 +1,83 @@ +package com.baiye.timed; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.baiye.modules.telemarkting.dao.PreTestAccountRepository; +import com.baiye.modules.telemarkting.dao.PreTestActRepository; +import com.baiye.modules.telemarkting.entity.PreTestAccount; +import com.baiye.modules.telemarkting.entity.PreTestAct; +import com.baiye.modules.telemarkting.httpRequest.PreTestReq; +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.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +/** + * @author wjt + * @date 2023/11/14 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PreTestTask { + + private final PreTestAccountRepository preTestAccountRepository; + private final PreTestActRepository preTestActRepository; + private final PreTestReq preTestReq; + + @Scheduled(cron = "0 0 1 * * ?") + @Transactional(rollbackFor = Exception.class) + public void countPreTestData() { + List preTestActs = preTestActRepository.findAllByStatus(0); + if (CollUtil.isEmpty(preTestActs)) { + return; + } + Map> listMap = + preTestActs.stream().collect(Collectors.groupingBy(PreTestAct::getUserId)); + List list = new ArrayList<>(); + for (Map.Entry> map : listMap.entrySet()) { + Long userId = map.getKey(); + List value = map.getValue(); + //获取账号 + PreTestAccount one = preTestAccountRepository.findById(userId).orElseGet(PreTestAccount::new); + if (BeanUtil.isEmpty(one) || StrUtil.isEmpty(one.getToken())) { + continue; + } + //获取token + String token = one.getToken(); + + for (PreTestAct preTestAct : value) { + JSONArray daBaData = preTestReq.getDaBa(token, preTestAct.getActName()); + if (CollUtil.isNotEmpty(daBaData)) { + JSONObject jsonObject = daBaData.getJSONObject(0); + //预执行总数 + int executeTotalNum = jsonObject.getInt("listCallTotleNum"); + //已执行总数 + int executeNum = jsonObject.getInt("listTotleNumber"); + //接通数 + int rateNum = jsonObject.getInt("connCallSum"); + int status = 0; + if (executeTotalNum > 0 && executeTotalNum == executeNum) { + status = 1; + } + preTestAct.setStatus(status); + preTestAct.setExecuteTotalNum(executeTotalNum); + preTestAct.setExecuteNum(executeNum); + preTestAct.setRateNum(rateNum); + list.add(preTestAct); + } + } + } + preTestActRepository.saveAll(list); + } +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/PreTestTokenTask.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/PreTestTokenTask.java new file mode 100644 index 00000000..c56db29e --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/PreTestTokenTask.java @@ -0,0 +1,42 @@ +package com.baiye.timed; + +import cn.hutool.core.util.StrUtil; +import com.baiye.modules.telemarkting.dao.PreTestAccountRepository; +import com.baiye.modules.telemarkting.entity.PreTestAccount; +import com.baiye.modules.telemarkting.httpRequest.PreTestReq; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author wjt + * @date 2023/11/17 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PreTestTokenTask { + + private final PreTestAccountRepository preTestAccountRepository; + private final PreTestReq preTestReq; + + @Scheduled(cron = "0 0 0 * * ?") + public void getToken() { + List all = preTestAccountRepository.findAllByStatus(true); + List list = new ArrayList<>(); + for (PreTestAccount preTestAccount : all) { + String token = preTestReq.getToken(preTestAccount.getDbUserName(), preTestAccount.getDbUserPassword()); + if (StrUtil.isEmpty(token)) { + preTestAccount.setStatus(false); + } + preTestAccount.setToken(token); + list.add(preTestAccount); + } + preTestAccountRepository.saveAll(list); + } + +}