添加好友逻辑
parent
5157bba8ac
commit
8bf63db6cb
@ -0,0 +1,71 @@
|
||||
package com.baiye.modules.scrm.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.modules.scrm.dto.CreateAddFriendTaskDTO;
|
||||
import com.baiye.modules.scrm.dto.UpdateTaskDTO;
|
||||
import com.baiye.modules.scrm.qo.TaskQo;
|
||||
import com.baiye.modules.scrm.service.AddFriendTaskService;
|
||||
import com.baiye.modules.scrm.vo.AddFriendTaskVO;
|
||||
import com.baiye.result.BaseResultCode;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.security.util.SecurityUtils;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/2
|
||||
*/
|
||||
|
||||
@Tag(name = "微信添加好友任务")
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping(value = "/add/friend")
|
||||
@AllArgsConstructor
|
||||
public class AddFriendController {
|
||||
|
||||
private final AddFriendTaskService addFriendTaskService;
|
||||
|
||||
|
||||
@GetMapping("/task/page")
|
||||
@Operation(summary = "分页查询记录")
|
||||
public R<PageResult<AddFriendTaskVO>> getClueRecordPage(@Validated PageParam pageParam, TaskQo qo) {
|
||||
return R.ok(addFriendTaskService.queryPage(pageParam, qo));
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/create/task")
|
||||
@Operation(summary = "创建任务")
|
||||
public R<String> createTestTask(@RequestParam(value = "file", required = false) MultipartFile file, @RequestParam("data") String data) {
|
||||
CreateAddFriendTaskDTO taskDTO = JSONUtil.toBean(data, CreateAddFriendTaskDTO.class);
|
||||
return Boolean.TRUE.equals(addFriendTaskService.createTask(file, taskDTO, SecurityUtils.getCurrentUserId())) ? R.ok() : R.failed("创建任务失败");
|
||||
}
|
||||
|
||||
@PostMapping("/update/task")
|
||||
@Operation(summary = "修改任务")
|
||||
public R<String> updateTask(@RequestBody CreateAddFriendTaskDTO createAddFriendTaskDTO) {
|
||||
return Boolean.TRUE.equals(addFriendTaskService.updateTask(createAddFriendTaskDTO)) ? R.ok() : R.failed("创建任务失败");
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/update/taskStatus")
|
||||
@Operation(summary = "修改任务")
|
||||
public R<String> updateTask(@RequestBody UpdateTaskDTO taskDTO) {
|
||||
return Boolean.TRUE.equals(addFriendTaskService.updateTaskStatus(taskDTO.getTaskId(), taskDTO.getTaskStatus())) ? R.ok() : R.failed("修改任务失败");
|
||||
}
|
||||
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@Operation(summary = "ID删除任务")
|
||||
public R<Void> deleteByUserId(@PathVariable("id") Long taskId) {
|
||||
return addFriendTaskService.del(taskId) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "删除失败");
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.baiye.modules.scrm.controller;
|
||||
|
||||
import com.baiye.modules.scrm.service.WeChatGroupService;
|
||||
import com.baiye.result.R;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/3/27
|
||||
*/
|
||||
@RestController
|
||||
@Tag(name = "微信群")
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/wechat/group")
|
||||
public class WeChatGroupController {
|
||||
|
||||
|
||||
private final WeChatGroupService weChatGroupService;
|
||||
|
||||
@GetMapping("/query/information")
|
||||
@Operation(summary = "群列表")
|
||||
public R<Object> queryInformation(String wxId) {
|
||||
return R.ok(weChatGroupService.queryInformation(wxId));
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/user/list")
|
||||
@Operation(summary = "群成员")
|
||||
public R<Object> queryGroupUserList(String wxId, String groupId) {
|
||||
return R.ok(weChatGroupService.queryGroupUserList(wxId, groupId));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.baiye.modules.scrm.converter;
|
||||
|
||||
import com.baiye.modules.scrm.entity.AddFriendTask;
|
||||
import com.baiye.modules.scrm.entity.PayOrder;
|
||||
import com.baiye.modules.scrm.vo.AddFriendTaskVO;
|
||||
import com.baiye.modules.scrm.vo.PayOrderVO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/3/28
|
||||
*/
|
||||
@Mapper
|
||||
public interface AddFriendTaskConverter {
|
||||
|
||||
AddFriendTaskConverter INSTANCE = Mappers.getMapper(AddFriendTaskConverter.class);
|
||||
|
||||
/**
|
||||
* 实体转vo
|
||||
* @param addFriendTask
|
||||
* @return
|
||||
*/
|
||||
AddFriendTaskVO entityToVo(AddFriendTask addFriendTask);
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.baiye.modules.scrm.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/2
|
||||
*/
|
||||
@Data
|
||||
public class AddFriendDTO {
|
||||
|
||||
@Schema(title = "用户Id")
|
||||
private Long userId;
|
||||
|
||||
@Schema(title = "问候语句")
|
||||
private String greet;
|
||||
|
||||
@Schema(title = "微信小号")
|
||||
private String trumpetWechat;
|
||||
|
||||
@Schema(title = "小号微信")
|
||||
private List<String> targetWechat;
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
package com.baiye.modules.scrm.dto;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import com.baiye.extend.mybatis.plus.converter.JsonStringArrayTypeHandler;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/2
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class CreateAddFriendTaskDTO {
|
||||
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "任务名称")
|
||||
private String taskName;
|
||||
|
||||
@Schema(title = "备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(title = "添加类型")
|
||||
private Integer addFriendType;
|
||||
|
||||
@Schema(title = "任务状态")
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(title = "是否去重")
|
||||
private Boolean isDuplicate;
|
||||
|
||||
@Schema(title = "开始时间")
|
||||
@JsonFormat(pattern = DatePattern.NORM_DATE_PATTERN)
|
||||
private Date startTime;
|
||||
|
||||
@Schema(title = "结束时间")
|
||||
@JsonFormat(pattern = DatePattern.NORM_DATE_PATTERN)
|
||||
private Date endTime;
|
||||
|
||||
@Schema(title = "每日结束时间")
|
||||
@JsonFormat(pattern = DatePattern.NORM_TIME_PATTERN)
|
||||
private Date dayEndTime;
|
||||
|
||||
@Schema(title = "每日开始时间")
|
||||
@JsonFormat(pattern = DatePattern.NORM_TIME_PATTERN)
|
||||
private Date dayStartTime;
|
||||
|
||||
@Schema(title = "通过间隔-开始")
|
||||
@TableField("add_interval_start")
|
||||
private Integer addIntervalStart;
|
||||
|
||||
@Schema(title = "通过间隔-结束")
|
||||
@TableField("add_interval_end")
|
||||
private Integer addIntervalEnd;
|
||||
|
||||
@Schema(title = "频繁间隔-开始")
|
||||
private Integer addFrequentlyStart;
|
||||
|
||||
@Schema(title = "频繁间隔-结束")
|
||||
private Integer addFrequentlyEnd;
|
||||
|
||||
@Schema(title = "每日添加好友上限")
|
||||
private Integer addFriendMax;
|
||||
|
||||
@Schema(title = "添加对象")
|
||||
private List<AddFriendDTO> addFriendDTOList;
|
||||
|
||||
|
||||
@Schema(title = "通过之后好友语句")
|
||||
private List<String> passGreetMessage;
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.baiye.modules.scrm.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/7
|
||||
*/
|
||||
@Data
|
||||
public class GroupCallbackDTO {
|
||||
|
||||
|
||||
private String userName;
|
||||
|
||||
private String bigHeadUrl;
|
||||
|
||||
private String chatRoomOwner;
|
||||
|
||||
private String nickName;
|
||||
|
||||
private String wxId;
|
||||
|
||||
|
||||
private String bigHeadImgUrl;
|
||||
private String smallHeadImgUrl;
|
||||
|
||||
private String chatRoomMembers;
|
||||
|
||||
private List<GroupMemberDTO> chatRoomMemberDetail;
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.baiye.modules.scrm.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/7
|
||||
*/
|
||||
@Data
|
||||
public class GroupMemberDTO {
|
||||
|
||||
private Integer flag;
|
||||
|
||||
private Long role;
|
||||
|
||||
private Long joinTime;
|
||||
|
||||
private String nickName;
|
||||
|
||||
private Integer sex;
|
||||
|
||||
private Integer type;
|
||||
|
||||
private String userName;
|
||||
|
||||
private String inviteUser;
|
||||
|
||||
private String smallHeadImgUrl;
|
||||
|
||||
private String bigHeadImgUrl;
|
||||
|
||||
private String displayName;
|
||||
|
||||
private String province;
|
||||
|
||||
private String city;
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package com.baiye.modules.scrm.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/7
|
||||
*/
|
||||
@Data
|
||||
public class UpdateTaskDTO {
|
||||
private Long taskId;
|
||||
private Integer taskStatus;
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package com.baiye.modules.scrm.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2022/6/30
|
||||
*/
|
||||
@Data
|
||||
public class WeChatOnlineStatusDTO implements Serializable {
|
||||
|
||||
|
||||
private String desc;
|
||||
|
||||
|
||||
private Integer status;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package com.baiye.modules.scrm.entity;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.alias.TableAlias;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/5/31
|
||||
*/
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@TableName(value = "tb_add_friend", autoResultMap = true)
|
||||
@Schema(title = "添加好友实体")
|
||||
@TableAlias("af")
|
||||
public class AddFriend {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
@Schema(title = "ID")
|
||||
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "任务名称")
|
||||
private Long taskId;
|
||||
|
||||
@Schema(title = "用户Id")
|
||||
private Long userId;
|
||||
|
||||
@Schema(title = "问候语句")
|
||||
private String greet;
|
||||
|
||||
@Schema(title = "微信小号")
|
||||
private String trumpetWechat;
|
||||
|
||||
@Schema(title = "对方微信")
|
||||
private String targetWechat;
|
||||
|
||||
@Schema(title = "添加状态")
|
||||
private Integer addStatus;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(title = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@Schema(title = "修改时间")
|
||||
private LocalDateTime updateTime;
|
||||
}
|
@ -0,0 +1,101 @@
|
||||
package com.baiye.modules.scrm.entity;
|
||||
|
||||
import com.baiye.entity.BaseEntity;
|
||||
import com.baiye.entity.LogicDeletedBaseEntity;
|
||||
import com.baiye.extend.mybatis.plus.alias.TableAlias;
|
||||
import com.baiye.extend.mybatis.plus.converter.JsonStringArrayTypeHandler;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/5/31
|
||||
*/
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@TableName(value = "tb_add_friend_task", autoResultMap = true)
|
||||
@Schema(title = "添加好友任务")
|
||||
@TableAlias("ft")
|
||||
public class AddFriendTask extends LogicDeletedBaseEntity {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
@Schema(title = "ID")
|
||||
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "任务名称")
|
||||
private String taskName;
|
||||
|
||||
@Schema(title = "备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(title = "添加类型")
|
||||
private Integer addFriendType;
|
||||
|
||||
@Schema(title = "任务状态")
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(title = "是否去重")
|
||||
private Boolean isDuplicate;
|
||||
|
||||
@Schema(title = "开始时间")
|
||||
private Date startTime;
|
||||
|
||||
@Schema(title = "结束时间")
|
||||
private Date endTime;
|
||||
|
||||
@Schema(title = "每日结束时间")
|
||||
private Date dayEndTime;
|
||||
|
||||
@Schema(title = "每日开始时间")
|
||||
private Date dayStartTime;
|
||||
|
||||
@Schema(title = "通过间隔-开始")
|
||||
@TableField("add_interval_start")
|
||||
private Integer addIntervalStart;
|
||||
|
||||
@Schema(title = "通过间隔-结束")
|
||||
@TableField("add_interval_end")
|
||||
private Integer addIntervalEnd;
|
||||
|
||||
@Schema(title = "频繁间隔-开始")
|
||||
@TableField("add_frequently_start")
|
||||
private Integer addFrequentlyStart;
|
||||
|
||||
|
||||
@Schema(title = "频繁间隔-结束")
|
||||
@TableField("add_frequently_end")
|
||||
private Integer addFrequentlyEnd;
|
||||
|
||||
|
||||
@Schema(title = "每日添加好友上限")
|
||||
private Integer addFriendMax;
|
||||
|
||||
@TableField(value = "wechat_flag_list", typeHandler = JsonStringArrayTypeHandler.class)
|
||||
@Schema(title = "微信标签")
|
||||
private List<String> wechatFlagList;
|
||||
|
||||
|
||||
@TableField(value = "pass_greet_message", typeHandler = JsonStringArrayTypeHandler.class)
|
||||
@Schema(title = "通过之后好友语句")
|
||||
private List<String> passGreetMessage;
|
||||
|
||||
|
||||
|
||||
@TableField(value = "execute_wechat_list", typeHandler = JsonStringArrayTypeHandler.class)
|
||||
@Schema(title = "执行微信号")
|
||||
private List<String> executeWechatList;
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.baiye.modules.scrm.mapper;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.mapper.ExtendMapper;
|
||||
import com.baiye.extend.mybatis.plus.toolkit.WrappersX;
|
||||
import com.baiye.modules.scrm.entity.AddFriend;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2024-5-31
|
||||
*/
|
||||
@Mapper
|
||||
public interface AddFriendMapper extends ExtendMapper<AddFriend> {
|
||||
|
||||
/**
|
||||
* 任务ID查询
|
||||
*
|
||||
* @param taskId
|
||||
* @param addFriendNum
|
||||
* @param taskStatus
|
||||
* @return
|
||||
*/
|
||||
default List<AddFriend> queryByTaskIdAndStatus(String taskId, Integer addFriendNum, Integer taskStatus){
|
||||
return selectList(WrappersX.lambdaQueryX(AddFriend.class).eq
|
||||
(AddFriend::getTaskId, taskId).eq(AddFriend::getAddStatus, taskStatus).orderByDesc(AddFriend::getId).last(" limit " + addFriendNum));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package com.baiye.modules.scrm.mapper;
|
||||
|
||||
import com.baiye.constant.DefaultNumberConstants;
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.extend.mybatis.plus.conditions.query.LambdaQueryWrapperX;
|
||||
import com.baiye.extend.mybatis.plus.mapper.ExtendMapper;
|
||||
import com.baiye.extend.mybatis.plus.toolkit.WrappersX;
|
||||
import com.baiye.modules.scrm.converter.AddFriendTaskConverter;
|
||||
import com.baiye.modules.scrm.entity.AddFriendTask;
|
||||
import com.baiye.modules.scrm.qo.TaskQo;
|
||||
import com.baiye.modules.scrm.vo.AddFriendTaskVO;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2024-5-31
|
||||
*/
|
||||
@Mapper
|
||||
public interface AddFriendTaskMapper extends ExtendMapper<AddFriendTask> {
|
||||
|
||||
/**
|
||||
* 状态查找数据
|
||||
*
|
||||
* @param number
|
||||
* @return
|
||||
*/
|
||||
default List<AddFriendTask> queryByStatus(Integer number) {
|
||||
return selectList(WrappersX.lambdaQueryX(AddFriendTask.class).eq(AddFriendTask::getTaskStatus, number).eq(AddFriendTask::getDeleted, DefaultNumberConstants.ZERO_NUMBER));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询数据
|
||||
*
|
||||
* @param pageParam
|
||||
* @param qo
|
||||
* @return
|
||||
*/
|
||||
default PageResult<AddFriendTaskVO> queryPage(PageParam pageParam, TaskQo qo) {
|
||||
IPage<AddFriendTask> page = this.prodPage(pageParam);
|
||||
LambdaQueryWrapperX<AddFriendTask> wrapperX = WrappersX.lambdaQueryX(AddFriendTask.class);
|
||||
if (StringUtils.isNotBlank(qo.getStartTime()) && StringUtils.isNotBlank(qo.getEndTime())) {
|
||||
wrapperX.between(AddFriendTask::getCreateTime, qo.getStartTime(), qo.getEndTime());
|
||||
}
|
||||
wrapperX.eqIfPresent(AddFriendTask::getCreateBy, qo.getUserId()).orderByDesc(AddFriendTask::getId);
|
||||
this.selectPage(page, wrapperX);
|
||||
IPage<AddFriendTaskVO> voPage = page.convert(AddFriendTaskConverter.INSTANCE::entityToVo);
|
||||
return new PageResult<>(voPage.getRecords(), voPage.getTotal());
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.baiye.modules.scrm.mapper;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.mapper.ExtendMapper;
|
||||
import com.baiye.extend.mybatis.plus.toolkit.WrappersX;
|
||||
import com.baiye.modules.scrm.entity.WeChatGroup;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/4/2
|
||||
*/
|
||||
@Mapper
|
||||
public interface WeChatGroupMapper extends ExtendMapper<WeChatGroup> {
|
||||
|
||||
|
||||
/**
|
||||
* count查询
|
||||
*
|
||||
* @param userName
|
||||
* @return
|
||||
*/
|
||||
default Long countByUserName(String userName) {
|
||||
return this.selectCount(WrappersX.lambdaQueryX(WeChatGroup.class).eq(WeChatGroup::getChatRoomId, userName));
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package com.baiye.modules.scrm.mapper;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.conditions.query.LambdaQueryWrapperX;
|
||||
import com.baiye.extend.mybatis.plus.mapper.ExtendMapper;
|
||||
import com.baiye.extend.mybatis.plus.toolkit.WrappersX;
|
||||
import com.baiye.modules.scrm.entity.WeChatGroupMember;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.jdbc.SQL;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/4/2
|
||||
*/
|
||||
@Mapper
|
||||
public interface WeChatGroupMemberMapper extends ExtendMapper<WeChatGroupMember> {
|
||||
|
||||
|
||||
/**
|
||||
* 群查询资源
|
||||
*
|
||||
* @param userName
|
||||
* @return
|
||||
*/
|
||||
default List<String> queryMemberWechatIdByChatRoomId(String userName) {
|
||||
LambdaQueryWrapperX<WeChatGroupMember> select =
|
||||
WrappersX.lambdaQueryX(WeChatGroupMember.class).eq(WeChatGroupMember::getChatRoomId, userName).select(WeChatGroupMember::getWxId);
|
||||
return this.selectList(select).stream().map(WeChatGroupMember::getWxId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据微信id删除元素
|
||||
* @param removeList
|
||||
* @return
|
||||
*/
|
||||
default Boolean deleteByWeChatId(List<String> removeList){
|
||||
return SqlHelper.retBool(this.delete(WrappersX.lambdaQueryX
|
||||
(WeChatGroupMember.class).in(WeChatGroupMember::getWxId, removeList)));
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.baiye.modules.scrm.qo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/3/29
|
||||
*/
|
||||
@Data
|
||||
public class TaskQo {
|
||||
|
||||
|
||||
@Parameter(description = "开始时间")
|
||||
private String startTime;
|
||||
|
||||
@Parameter(description = "结束时间")
|
||||
private String endTime;
|
||||
|
||||
@Parameter(description = "用户昵称")
|
||||
private String nickname;
|
||||
|
||||
@Schema(title = "用户ID")
|
||||
private Long userId;
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.baiye.modules.scrm.service;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.service.ExtendService;
|
||||
import com.baiye.modules.scrm.entity.AddFriend;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2024-5-31
|
||||
*/
|
||||
public interface AddFriendService extends ExtendService<AddFriend> {
|
||||
|
||||
/**
|
||||
* 任务ID查询资源
|
||||
*
|
||||
* @param taskId
|
||||
* @param addFriendNum
|
||||
* @param taskStatus
|
||||
* @return
|
||||
*/
|
||||
List<AddFriend> queryAddSourceByTaskIdAndStatus(String taskId, Integer addFriendNum, Integer taskStatus);
|
||||
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
package com.baiye.modules.scrm.service;
|
||||
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.extend.mybatis.plus.service.ExtendService;
|
||||
import com.baiye.modules.scrm.dto.CreateAddFriendTaskDTO;
|
||||
import com.baiye.modules.scrm.entity.AddFriendTask;
|
||||
import com.baiye.modules.scrm.qo.TaskQo;
|
||||
import com.baiye.modules.scrm.vo.AddFriendTaskVO;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2024-5-31
|
||||
*/
|
||||
public interface AddFriendTaskService extends ExtendService<AddFriendTask> {
|
||||
|
||||
/**
|
||||
* 创建任务
|
||||
*
|
||||
* @param file
|
||||
* @param createAddFriendTaskDTO
|
||||
* @param currentUserId
|
||||
* @return
|
||||
*/
|
||||
Boolean createTask(MultipartFile file, CreateAddFriendTaskDTO createAddFriendTaskDTO, Long currentUserId);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param taskId
|
||||
* @return
|
||||
*/
|
||||
AddFriendTask findByTaskId(Long taskId);
|
||||
|
||||
/**
|
||||
* 修改任务
|
||||
* @param createAddFriendTaskDTO
|
||||
* @return
|
||||
*/
|
||||
Boolean updateTask(CreateAddFriendTaskDTO createAddFriendTaskDTO);
|
||||
|
||||
/**
|
||||
* 修改任务状态
|
||||
*
|
||||
* @param taskId
|
||||
* @param taskStatus
|
||||
* @return
|
||||
*/
|
||||
Boolean updateTaskStatus(Long taskId, Integer taskStatus);
|
||||
|
||||
/**
|
||||
* 删除任务
|
||||
* @param taskId
|
||||
* @return
|
||||
*/
|
||||
Boolean del(Long taskId);
|
||||
|
||||
/**
|
||||
* 根据
|
||||
* @param number
|
||||
* @return
|
||||
*/
|
||||
List<AddFriendTask> queryTaskAndStatus(Integer number);
|
||||
|
||||
/**
|
||||
* 分页数据
|
||||
* @param pageParam
|
||||
* @param qo
|
||||
* @return
|
||||
*/
|
||||
PageResult<AddFriendTaskVO> queryPage(PageParam pageParam, TaskQo qo);
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package com.baiye.modules.scrm.service;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.service.ExtendService;
|
||||
import com.baiye.modules.scrm.dto.GroupCallbackDTO;
|
||||
import com.baiye.modules.scrm.dto.GroupMemberDTO;
|
||||
import com.baiye.modules.scrm.entity.WeChatAccount;
|
||||
import com.baiye.modules.scrm.entity.WeChatGroupMember;
|
||||
import com.baiye.modules.scrm.vo.GroupVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023/9/5
|
||||
*/
|
||||
public interface WeChatGroupMemberService extends ExtendService<WeChatGroupMember> {
|
||||
|
||||
|
||||
/**
|
||||
* 群微信查询数据
|
||||
* @param userName
|
||||
* @return
|
||||
*/
|
||||
List<String> queryMemberWechatIdByChatRoomId(String userName);
|
||||
|
||||
/**
|
||||
* 插入数据
|
||||
* @param saveMemberList
|
||||
* @return
|
||||
*/
|
||||
Boolean saveMemberByDTO(List<GroupMemberDTO> saveMemberList);
|
||||
|
||||
/**
|
||||
* 删除微信元素
|
||||
* @param removeList
|
||||
* @return
|
||||
*/
|
||||
Boolean removeByWechatId(List<String> removeList);
|
||||
|
||||
/**
|
||||
* 微信查询群
|
||||
* @param wxId
|
||||
* @return
|
||||
*/
|
||||
List<GroupVO> queryMemberWechatIdBy(String wxId);
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package com.baiye.modules.scrm.service;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.service.ExtendService;
|
||||
import com.baiye.modules.scrm.dto.GroupCallbackDTO;
|
||||
import com.baiye.modules.scrm.entity.WeChatAccount;
|
||||
import com.baiye.modules.scrm.entity.WeChatFriedRecord;
|
||||
import com.baiye.modules.scrm.entity.WeChatGroup;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023/9/5
|
||||
*/
|
||||
public interface WeChatGroupService extends ExtendService<WeChatGroup> {
|
||||
|
||||
|
||||
/**
|
||||
* 获取所有群信息
|
||||
*
|
||||
* @param wxId
|
||||
* @return
|
||||
*/
|
||||
String queryInformation(String wxId);
|
||||
|
||||
|
||||
/**
|
||||
* 群列表
|
||||
*
|
||||
* @param wxId
|
||||
* @param groupId
|
||||
* @return
|
||||
*/
|
||||
String queryGroupUserList(String wxId, String groupId);
|
||||
|
||||
/**
|
||||
* 同步群信息
|
||||
* @param byWxId
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
Boolean syncGroup(WeChatAccount byWxId, GroupCallbackDTO dto);
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.baiye.modules.scrm.service.impl;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
|
||||
import com.baiye.modules.scrm.entity.AddFriend;
|
||||
import com.baiye.modules.scrm.mapper.AddFriendMapper;
|
||||
import com.baiye.modules.scrm.service.AddFriendService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/2
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AddFriendServiceImpl extends ExtendServiceImpl<AddFriendMapper, AddFriend> implements AddFriendService {
|
||||
@Override
|
||||
public List<AddFriend> queryAddSourceByTaskIdAndStatus(String taskId, Integer addFriendNum, Integer taskStatus) {
|
||||
return baseMapper.queryByTaskIdAndStatus(taskId, addFriendNum, taskStatus);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,150 @@
|
||||
package com.baiye.modules.scrm.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.excel.EasyExcelFactory;
|
||||
import com.baiye.common.job.handler.ElasticJobHandler;
|
||||
import com.baiye.constant.DefaultNumberConstants;
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
|
||||
import com.baiye.listener.AddFileFriendDataListener;
|
||||
import com.baiye.modules.scrm.dto.AddFriendDTO;
|
||||
import com.baiye.modules.scrm.dto.CreateAddFriendTaskDTO;
|
||||
import com.baiye.modules.scrm.entity.AddFriendTask;
|
||||
import com.baiye.modules.scrm.mapper.AddFriendTaskMapper;
|
||||
import com.baiye.modules.scrm.qo.TaskQo;
|
||||
import com.baiye.modules.scrm.service.AddFriendService;
|
||||
import com.baiye.modules.scrm.service.AddFriendTaskService;
|
||||
import com.baiye.modules.scrm.vo.AddFriendTaskVO;
|
||||
import com.baiye.modules.scrm.vo.AddFriendVo;
|
||||
import com.baiye.schedule.handler.AddFriendJob;
|
||||
import com.baiye.security.util.SecurityUtils;
|
||||
import com.baiye.util.CronUtil;
|
||||
import com.baiye.util.FileUtil;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/2
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AddFriendTaskServiceImpl extends ExtendServiceImpl<AddFriendTaskMapper, AddFriendTask> implements AddFriendTaskService {
|
||||
|
||||
@Value("${snowflake.workerId}")
|
||||
private int workerId;
|
||||
|
||||
@Value("${snowflake.datacenterId}")
|
||||
private int datacenterId;
|
||||
|
||||
|
||||
private final AddFriendService addFriendService;
|
||||
|
||||
|
||||
private final ElasticJobHandler elasticJobHandler;
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean createTask(MultipartFile file, CreateAddFriendTaskDTO createAddFriendTaskDTO, Long currentUserId) {
|
||||
DateTime date = DateUtil.date();
|
||||
// 雪花算法id
|
||||
long taskId = IdUtil.getSnowflake(workerId, datacenterId).nextId();
|
||||
Date beginDate =
|
||||
ObjectUtil.isNotNull(createAddFriendTaskDTO.getDayStartTime()) ? createAddFriendTaskDTO.getStartTime() : DateUtil.beginOfDay(date);
|
||||
Date endDate =
|
||||
ObjectUtil.isNotNull(createAddFriendTaskDTO.getDayEndTime()) ? createAddFriendTaskDTO.getDayEndTime() : DateUtil.endOfDay(date);
|
||||
|
||||
List<String> listList = createAddFriendTaskDTO.getAddFriendDTOList()
|
||||
.stream().map(AddFriendDTO::getTrumpetWechat).collect(Collectors.toList());
|
||||
// 创建任务
|
||||
AddFriendTask friendTask = new AddFriendTask();
|
||||
BeanUtil.copyProperties(createAddFriendTaskDTO, friendTask);
|
||||
friendTask.setId(taskId);
|
||||
friendTask.setExecuteWechatList(listList);
|
||||
friendTask.setTaskStatus(DefaultNumberConstants.ONE_NUMBER);
|
||||
if (this.save(friendTask)) {
|
||||
if (ObjectUtil.isNotNull(file)
|
||||
&& createAddFriendTaskDTO.getAddFriendType() == DefaultNumberConstants.TWO_NUMBER) {
|
||||
// 解析 文件
|
||||
File upload = FileUtil.multiToFile(file);
|
||||
EasyExcelFactory.read(upload, AddFriendVo.class, new AddFileFriendDataListener<>(addFriendService));
|
||||
}
|
||||
String generatedCronByTime = CronUtil.generateCronByTime(beginDate, endDate, createAddFriendTaskDTO.getAddIntervalStart(), createAddFriendTaskDTO.getAddIntervalEnd());
|
||||
elasticJobHandler.addJob(createAddFriendTaskDTO.getTaskName(), generatedCronByTime, DefaultNumberConstants.ONE_NUMBER, new AddFriendJob(), String.valueOf(taskId), CharSequenceUtil.EMPTY);
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AddFriendTask findByTaskId(Long taskId) {
|
||||
return baseMapper.selectById(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateTask(CreateAddFriendTaskDTO createAddFriendTaskDTO) {
|
||||
AddFriendTask friendTask = baseMapper.selectById(createAddFriendTaskDTO.getId());
|
||||
if (ObjectUtil.isNotNull(friendTask) && ObjectUtil.isNotNull(friendTask.getId())) {
|
||||
BeanUtil.copyProperties(createAddFriendTaskDTO, friendTask);
|
||||
return SqlHelper.retBool(baseMapper.updateById(friendTask));
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateTaskStatus(Long taskId, Integer taskStatus) {
|
||||
AddFriendTask friendTask = baseMapper.selectById(taskId);
|
||||
if (ObjectUtil.isNotNull(friendTask) && ObjectUtil.isNotNull(friendTask.getId())) {
|
||||
if (taskStatus == DefaultNumberConstants.ONE_NUMBER) {
|
||||
elasticJobHandler.start(friendTask.getTaskName());
|
||||
}
|
||||
if (taskStatus == DefaultNumberConstants.ZERO_NUMBER) {
|
||||
elasticJobHandler.pauseJob(friendTask.getTaskName());
|
||||
}
|
||||
friendTask.setTaskStatus(taskStatus);
|
||||
return SqlHelper.retBool(baseMapper.updateById(friendTask));
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean del(Long taskId) {
|
||||
// 删除时任务未执行 文件记录状态回退
|
||||
AddFriendTask friendTask = baseMapper.selectById(taskId);
|
||||
if (ObjectUtil.isNotNull(friendTask) && ObjectUtil.isNotNull(friendTask.getId())) {
|
||||
// 删除定时任务
|
||||
elasticJobHandler.removeJob(friendTask.getTaskName());
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AddFriendTask> queryTaskAndStatus(Integer number) {
|
||||
return baseMapper.queryByStatus(number);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<AddFriendTaskVO> queryPage(PageParam pageParam, TaskQo qo) {
|
||||
qo.setUserId(SecurityUtils.getCurrentUserId());
|
||||
return baseMapper.queryPage(pageParam, qo);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package com.baiye.modules.scrm.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
|
||||
import com.baiye.modules.scrm.dto.GroupMemberDTO;
|
||||
import com.baiye.modules.scrm.entity.WeChatGroupMember;
|
||||
import com.baiye.modules.scrm.mapper.WeChatGroupMemberMapper;
|
||||
import com.baiye.modules.scrm.service.WeChatGroupMemberService;
|
||||
import com.baiye.modules.scrm.vo.GroupVO;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/7
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class WeChatGroupMemberServiceImpl extends ExtendServiceImpl
|
||||
<WeChatGroupMemberMapper, WeChatGroupMember> implements WeChatGroupMemberService {
|
||||
@Override
|
||||
public List<String> queryMemberWechatIdByChatRoomId(String userName) {
|
||||
return this.baseMapper.queryMemberWechatIdByChatRoomId(userName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean saveMemberByDTO(List<GroupMemberDTO> saveMemberList) {
|
||||
List<WeChatGroupMember> list = Convert.toList(WeChatGroupMember.class, saveMemberList);
|
||||
return this.saveBatch(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean removeByWechatId(List<String> removeList) {
|
||||
return baseMapper.deleteByWeChatId(removeList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<GroupVO> queryMemberWechatIdBy(String wxId) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
package com.baiye.modules.scrm.service.impl;
|
||||
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baiye.constant.DefaultNumberConstants;
|
||||
import com.baiye.constant.url.WeChatGroupRequest;
|
||||
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
|
||||
import com.baiye.modules.scrm.dto.GroupCallbackDTO;
|
||||
import com.baiye.modules.scrm.entity.WeChatAccount;
|
||||
import com.baiye.modules.scrm.entity.WeChatGroup;
|
||||
import com.baiye.modules.scrm.mapper.WeChatGroupMapper;
|
||||
import com.baiye.modules.scrm.service.WeChatGroupMemberService;
|
||||
import com.baiye.modules.scrm.service.WeChatGroupService;
|
||||
import com.baiye.result.WeChatResponse;
|
||||
import com.baiye.system.properties.WeChatProperties;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/4
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class WechatGroupServiceImpl extends ExtendServiceImpl
|
||||
<WeChatGroupMapper, WeChatGroup> implements WeChatGroupService {
|
||||
|
||||
private final WeChatProperties weChatProperties;
|
||||
|
||||
private final WeChatGroupMemberService weChatGroupMemberService;
|
||||
|
||||
@Override
|
||||
public String queryInformation(String wxId) {
|
||||
|
||||
Map<String, Object> map = ImmutableMap.of
|
||||
("wechat", wxId, "contactType", DefaultNumberConstants.FIVE_NUMBER, "isSync", Boolean.TRUE);
|
||||
|
||||
String getQrCodeResult = HttpUtil.post
|
||||
(weChatProperties.getRequestUrl().concat(WeChatGroupRequest.GROUP_CONVERSATION), map);
|
||||
if (StringUtils.isNotBlank(getQrCodeResult)) {
|
||||
WeChatResponse weChatResponse = JSONUtil.toBean(getQrCodeResult, WeChatResponse.class);
|
||||
List<GroupCallbackDTO> dtoList = JSONUtil.toList(JSONUtil.toJsonStr(weChatResponse.getData()), GroupCallbackDTO.class);
|
||||
|
||||
}
|
||||
return CharSequenceUtil.EMPTY;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String queryGroupUserList(String wxId, String groupId) {
|
||||
|
||||
Map<String, Object> map = ImmutableMap.of("wechat", wxId,
|
||||
"groupid", groupId, "detail", Boolean.TRUE, "sync", Boolean.TRUE);
|
||||
|
||||
String userListResult = HttpUtil.post
|
||||
(weChatProperties.getRequestUrl().concat(WeChatGroupRequest.GROUP_INFO), map);
|
||||
if (StringUtils.isNotBlank(userListResult)) {
|
||||
WeChatResponse weChatResponse = JSONUtil.toBean(userListResult, WeChatResponse.class);
|
||||
return JSONUtil.toJsonStr(weChatResponse.getData());
|
||||
}
|
||||
return CharSequenceUtil.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean syncGroup(WeChatAccount byWxId, GroupCallbackDTO dto) {
|
||||
if (this.baseMapper.countByUserName(dto.getUserName())
|
||||
== DefaultNumberConstants.ZERO_NUMBER) {
|
||||
WeChatGroup weChatGroup = new WeChatGroup();
|
||||
weChatGroup.setUserId(byWxId.getUserId());
|
||||
weChatGroup.setWechatId(byWxId.getWxId());
|
||||
weChatGroup.setChatRoomId(dto.getUserName());
|
||||
weChatGroup.setChatRoomNick(dto.getNickName());
|
||||
weChatGroup.setChatRoomIcon
|
||||
(StringUtils.isEmpty(dto.getBigHeadImgUrl()) ? dto.getSmallHeadImgUrl() : dto.getBigHeadImgUrl());
|
||||
weChatGroup.setChatRoomOwner(dto.getChatRoomOwner());
|
||||
return this.save(weChatGroup);
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
package com.baiye.modules.scrm.vo;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.converter.JsonStringArrayTypeHandler;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/3/26
|
||||
*/
|
||||
@Data
|
||||
public class AddFriendTaskVO {
|
||||
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "任务名称")
|
||||
private String taskName;
|
||||
|
||||
@Schema(title = "备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(title = "添加类型")
|
||||
private Integer addFriendType;
|
||||
|
||||
@Schema(title = "任务状态")
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(title = "是否去重")
|
||||
private Boolean isDuplicate;
|
||||
|
||||
@Schema(title = "开始时间")
|
||||
private Date startTime;
|
||||
|
||||
@Schema(title = "结束时间")
|
||||
private Date endTime;
|
||||
|
||||
@Schema(title = "每日结束时间")
|
||||
private Date dayEndTime;
|
||||
|
||||
@Schema(title = "每日开始时间")
|
||||
private Date dayStartTime;
|
||||
|
||||
@Schema(title = "通过间隔-开始")
|
||||
private Integer addIntervalStart;
|
||||
|
||||
@Schema(title = "通过间隔-结束")
|
||||
private Integer addIntervalEnd;
|
||||
|
||||
@Schema(title = "频繁间隔-开始")
|
||||
private Integer addFrequentlyStart;
|
||||
|
||||
@Schema(title = "频繁间隔-结束")
|
||||
private Integer addFrequentlyEnd;
|
||||
|
||||
@Schema(title = "每日添加好友上限")
|
||||
private Integer addFriendMax;
|
||||
|
||||
@TableField(value = "wechat_flag_list", typeHandler = JsonStringArrayTypeHandler.class)
|
||||
@Schema(title = "微信标签")
|
||||
private List<String> wechatFlagList;
|
||||
|
||||
|
||||
@TableField(value = "pass_greet_message", typeHandler = JsonStringArrayTypeHandler.class)
|
||||
@Schema(title = "通过之后好友语句")
|
||||
private List<String> passGreetMessage;
|
||||
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(title = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@Schema(title = "修改时间")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
@TableField(value = "execute_wechat_list", typeHandler = JsonStringArrayTypeHandler.class)
|
||||
@Schema(title = "执行微信号")
|
||||
private List<String> executeWechatList;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package com.baiye.modules.scrm.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/2
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class FileAddFriendVO {
|
||||
|
||||
|
||||
/**
|
||||
* 添加好友手机号/微信号
|
||||
*/
|
||||
@ExcelProperty(value = "添加好友手机号/微信号")
|
||||
private String targetSource;
|
||||
|
||||
/**
|
||||
* 招呼语
|
||||
*/
|
||||
@ExcelProperty(value = "招呼语")
|
||||
private String greet;
|
||||
|
||||
/**
|
||||
* 好友备注
|
||||
*/
|
||||
@ExcelProperty(value = "好友备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
@ExcelProperty(value = "标签(英文逗号分隔)")
|
||||
private String flagArrays;
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.baiye.modules.scrm.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/7
|
||||
*/
|
||||
@Data
|
||||
public class GroupVO {
|
||||
|
||||
private Integer verifyFlag;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
package com.baiye.properties;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/2
|
||||
*/
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.boot.context.properties.ConfigurationPropertiesBean;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.core.annotation.AnnotationUtils;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Utility class to memorize {@code @Bean} definition metadata during initialization of
|
||||
* the bean factory.
|
||||
*
|
||||
* @author Dave Syer
|
||||
* @since 1.1.0
|
||||
* @deprecated since 2.2.0 for removal in 2.4.0 in favor of
|
||||
* {@link ConfigurationPropertiesBean}
|
||||
*/
|
||||
@Deprecated
|
||||
public class ConfigurationBeanFactoryMetadata implements ApplicationContextAware {
|
||||
|
||||
/**
|
||||
* The bean name that this class is registered with.
|
||||
*/
|
||||
public static final String BEAN_NAME = ConfigurationBeanFactoryMetadata.class.getName();
|
||||
|
||||
private ConfigurableApplicationContext applicationContext;
|
||||
|
||||
public <A extends Annotation> Map<String, Object> getBeansWithFactoryAnnotation(Class<A> type) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
for (String name : this.applicationContext.getBeanFactory().getBeanDefinitionNames()) {
|
||||
if (findFactoryAnnotation(name, type) != null) {
|
||||
result.put(name, this.applicationContext.getBean(name));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public <A extends Annotation> A findFactoryAnnotation(String beanName, Class<A> type) {
|
||||
Method method = findFactoryMethod(beanName);
|
||||
return (method != null) ? AnnotationUtils.findAnnotation(method, type) : null;
|
||||
}
|
||||
|
||||
public Method findFactoryMethod(String beanName) {
|
||||
ConfigurableListableBeanFactory beanFactory = this.applicationContext.getBeanFactory();
|
||||
if (beanFactory.containsBeanDefinition(beanName)) {
|
||||
BeanDefinition beanDefinition = beanFactory.getMergedBeanDefinition(beanName);
|
||||
if (beanDefinition instanceof RootBeanDefinition) {
|
||||
return ((RootBeanDefinition) beanDefinition).getResolvedFactoryMethod();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
||||
this.applicationContext = (ConfigurableApplicationContext) applicationContext;
|
||||
}
|
||||
|
||||
static void register(BeanDefinitionRegistry registry) {
|
||||
if (!registry.containsBeanDefinition(BEAN_NAME)) {
|
||||
GenericBeanDefinition definition = new GenericBeanDefinition();
|
||||
definition.setBeanClass(ConfigurationBeanFactoryMetadata.class);
|
||||
definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
registry.registerBeanDefinition(ConfigurationBeanFactoryMetadata.BEAN_NAME, definition);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
package com.baiye.schedule;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import com.baiye.constant.DefaultNumberConstants;
|
||||
import com.baiye.constant.WeChatRequestConstants;
|
||||
import com.baiye.modules.scrm.entity.LoginEquipment;
|
||||
import com.baiye.modules.scrm.service.LoginEquipmentService;
|
||||
import com.baiye.system.properties.WeChatProperties;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/4/10
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AccountTask {
|
||||
|
||||
|
||||
private final WeChatProperties weChatProperties;
|
||||
|
||||
private final LoginEquipmentService loginEquipmentService;
|
||||
|
||||
|
||||
/**
|
||||
* 批量下线
|
||||
*/
|
||||
@Scheduled(cron = "0 0 1 * * ? ")
|
||||
public void updateAccountMassNum() {
|
||||
List<Integer> arrayList = Lists.newArrayList();
|
||||
List<LoginEquipment> equipmentList =
|
||||
loginEquipmentService.findExpiredAccount();
|
||||
if (CollUtil.isNotEmpty(equipmentList)) {
|
||||
for (LoginEquipment equipment : equipmentList) {
|
||||
DateTime dateTime = DateUtil.offsetDay
|
||||
(equipment.getExpirationTime(), DefaultNumberConstants.FIFTEEN_NUMBER);
|
||||
if (dateTime.before(DateUtil.date())) {
|
||||
arrayList.add(equipment.getRobotId());
|
||||
}
|
||||
}
|
||||
if (CollUtil.isNotEmpty(arrayList)) {
|
||||
Map<String, Object> map = Maps.newHashMap();
|
||||
map.put("robotIds", arrayList);
|
||||
String result = HttpUtil.post
|
||||
(weChatProperties.getGatewayHost().concat(WeChatRequestConstants.ROBOT_LOGOUT)
|
||||
.concat(weChatProperties.getAppKey()), map);
|
||||
log.info("========== the response as {} ==========", result);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package com.baiye.schedule.handler;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baiye.constant.DefaultNumberConstants;
|
||||
import com.baiye.modules.scrm.dto.WeChatAddFriendDTO;
|
||||
import com.baiye.modules.scrm.entity.AddFriend;
|
||||
import com.baiye.modules.scrm.entity.AddFriendTask;
|
||||
import com.baiye.modules.scrm.service.AddFriendService;
|
||||
import com.baiye.modules.scrm.service.AddFriendTaskService;
|
||||
import com.baiye.security.userdetails.User;
|
||||
import com.dangdang.ddframe.job.api.ShardingContext;
|
||||
import com.dangdang.ddframe.job.api.simple.SimpleJob;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/2
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class AddFriendJob implements SimpleJob {
|
||||
@Resource
|
||||
private AddFriendTaskService addFriendTaskService;
|
||||
|
||||
@Resource
|
||||
private AddFriendService addFriendService;
|
||||
|
||||
/**
|
||||
* 添加业务逻辑
|
||||
*
|
||||
* @param shardingContext
|
||||
*/
|
||||
@Override
|
||||
public void execute(ShardingContext shardingContext) {
|
||||
Date now = new Date();
|
||||
log.info("{}定时添加好友start...", DateUtil.format(now, DatePattern.NORM_DATETIME_MS_PATTERN));
|
||||
String jobName = shardingContext.getJobName();
|
||||
String taskId = shardingContext.getJobParameter();
|
||||
AddFriendTask byTaskId = addFriendTaskService.findByTaskId(Long.parseLong(taskId));
|
||||
if (ObjectUtil.isNotNull(byTaskId) && ObjectUtil.isNotNull(byTaskId.getId())) {
|
||||
// 判断是否过期
|
||||
if (byTaskId.getStartTime().after(now) || byTaskId.getEndTime().before(now)) {
|
||||
byTaskId.setTaskStatus(DefaultNumberConstants.MINUS_ONE_NUMBER);
|
||||
addFriendTaskService.updateById(byTaskId);
|
||||
return;
|
||||
}
|
||||
// 查询资源
|
||||
/*List<AddFriend> addFriendList = addFriendService.queryAddSourceByTaskIdAndStatus(taskId, byTaskId.getAddFriendNum(), DefaultNumberConstants.ONE_NUMBER);
|
||||
for (AddFriend addFriend : addFriendList) {
|
||||
|
||||
// 添加好友
|
||||
WeChatAddFriendDTO addFriendDTO = WeChatAddFriendDTO.builder().wechat
|
||||
(addFriend.getTrumpetWechat()).targetWxId(addFriend.getTargetWechat()).helloContent
|
||||
(addFriend.getGreet()).type(addFriend.getTargetWechat().length() == DefaultNumberConstants.ELEVEN_NUMBER ?
|
||||
DefaultNumberConstants.ZERO_NUMBER : DefaultNumberConstants.ONE_NUMBER).build();
|
||||
|
||||
HttpUtil.post("", JSONUtil.toJsonStr(addFriendDTO));
|
||||
if (Boolean.TRUE){
|
||||
addFriend.setAddStatus(DefaultNumberConstants.ONE_NUMBER);
|
||||
addFriendService.updateById(addFriend);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
log.info("{}定时添加好友end...", DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MS_PATTERN));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
@ -0,0 +1,25 @@
|
||||
package com.baiye.constant.url;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/5/31
|
||||
*/
|
||||
public interface WeChatFriendRequest {
|
||||
|
||||
/**
|
||||
* 添加好友
|
||||
*/
|
||||
String ADD_FRIEND = "/wechat/v1/addfriends";
|
||||
|
||||
|
||||
/**
|
||||
* 好友信息
|
||||
*/
|
||||
String FRIEND_INFO = "/wechat/v1/friendinfo";
|
||||
|
||||
/**
|
||||
* 修改好友信息
|
||||
*/
|
||||
String UPDATE_FRIEND_INFO = "/wechat/v1/markfriend";
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.baiye.constant.url;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/3
|
||||
*/
|
||||
public interface WeChatGroupRequest {
|
||||
|
||||
/**
|
||||
* 创建群
|
||||
*/
|
||||
String GREAT_GROUP = "/wechat/v1/creategroup";
|
||||
|
||||
|
||||
/**
|
||||
* 获取群信息
|
||||
*/
|
||||
String GROUP_INFO = "/wechat/v1/chatroominfo";
|
||||
|
||||
|
||||
/**
|
||||
* 获取群信息
|
||||
*/
|
||||
String GROUP_CONVERSATION = "/wechat/v1/getAllContact";
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.baiye.constant.url;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/3
|
||||
*/
|
||||
public interface WeChatPersonRequest {
|
||||
|
||||
/**
|
||||
* 在线状态
|
||||
*/
|
||||
String ONLINE_STATUS = "/wechat/v1/wecatstatus";
|
||||
|
||||
|
||||
/**
|
||||
* 在线状态
|
||||
*/
|
||||
String SYNC_ADDRESS_BOOK = "/wechat/v1/syncContact";
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取标签好友列表
|
||||
*/
|
||||
String GET_LABEL_WX_LIST = "/wechat/v1/getLabelWxList";
|
||||
|
||||
/**
|
||||
* 修改个人标签
|
||||
*/
|
||||
String MODIFY_WECHAT_LABEL = "/wechat/v1/modifyLabel";
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package com.baiye.constant.url;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/5/31
|
||||
*/
|
||||
public interface WechatCircleFriendRequest {
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package com.baiye.constant.url;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/5/31
|
||||
*/
|
||||
public interface WechatLoginRequest {
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.baiye.enums;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/2
|
||||
*/
|
||||
public enum JobEnum {
|
||||
|
||||
EVERY("每天", 0),
|
||||
DAY("日", 1),
|
||||
MONTH("月", 2),
|
||||
WEEK("周", 3),
|
||||
YEAR("年", 4),
|
||||
;
|
||||
|
||||
JobEnum(String name, Integer value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
private final String name;
|
||||
private final Integer value;
|
||||
|
||||
public Integer getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
package com.baiye.pojo;
|
||||
|
||||
import com.baiye.enums.JobEnum;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/6/2
|
||||
*/
|
||||
public class CronModel {
|
||||
|
||||
Integer[] dayOfWeeks;
|
||||
|
||||
Integer[] dayOfMonths;
|
||||
|
||||
Integer[] months;
|
||||
|
||||
Integer second;
|
||||
|
||||
Integer minute;
|
||||
|
||||
Integer hour;
|
||||
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
JobEnum jobType;
|
||||
/**
|
||||
* 间隔
|
||||
*/
|
||||
Integer beApart;
|
||||
|
||||
public Integer[] getDayOfWeeks() {
|
||||
return dayOfWeeks;
|
||||
}
|
||||
|
||||
public void setDayOfWeeks(Integer[] dayOfWeeks) {
|
||||
this.dayOfWeeks = dayOfWeeks;
|
||||
}
|
||||
|
||||
public Integer[] getDayOfMonths() {
|
||||
return dayOfMonths;
|
||||
}
|
||||
|
||||
public void setDayOfMonths(Integer[] dayOfMonths) {
|
||||
this.dayOfMonths = dayOfMonths;
|
||||
}
|
||||
|
||||
public Integer[] getMonths() {
|
||||
return months;
|
||||
}
|
||||
|
||||
public void setMonths(Integer[] months) {
|
||||
this.months = months;
|
||||
}
|
||||
|
||||
public Integer getSecond() {
|
||||
return second == null ? 0 : second;
|
||||
}
|
||||
|
||||
public void setSecond(Integer second) {
|
||||
this.second = second;
|
||||
}
|
||||
|
||||
public Integer getMinute() {
|
||||
return minute == null ? 0 : minute;
|
||||
}
|
||||
|
||||
public void setMinute(Integer minute) {
|
||||
this.minute = minute;
|
||||
}
|
||||
|
||||
public Integer getHour() {
|
||||
|
||||
return hour == null ? 0 : hour;
|
||||
}
|
||||
|
||||
public void setHour(Integer hour) {
|
||||
this.hour = hour;
|
||||
}
|
||||
|
||||
public JobEnum getJobType() {
|
||||
return jobType == null ? JobEnum.DAY : jobType;
|
||||
}
|
||||
|
||||
public void setJobType(JobEnum jobType) {
|
||||
this.jobType = jobType;
|
||||
}
|
||||
|
||||
public Integer getBeApart() {
|
||||
return beApart;
|
||||
}
|
||||
|
||||
public void setBeApart(Integer beApart) {
|
||||
this.beApart = beApart;
|
||||
}
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
package org.springframework.boot.context.properties;
|
||||
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.core.annotation.AnnotationUtils;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Utility class to memorize {@code @Bean} definition metadata during initialization of
|
||||
* the bean factory.
|
||||
*
|
||||
* @author Dave Syer
|
||||
* @since 1.1.0
|
||||
* @deprecated since 2.2.0 for removal in 2.4.0 in favor of
|
||||
* {@link ConfigurationPropertiesBean}
|
||||
*/
|
||||
@Deprecated
|
||||
public class ConfigurationBeanFactoryMetadata implements ApplicationContextAware {
|
||||
|
||||
/**
|
||||
* The bean name that this class is registered with.
|
||||
*/
|
||||
public static final String BEAN_NAME = ConfigurationBeanFactoryMetadata.class.getName();
|
||||
|
||||
private ConfigurableApplicationContext applicationContext;
|
||||
|
||||
public <A extends Annotation> Map<String, Object> getBeansWithFactoryAnnotation(Class<A> type) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
for (String name : this.applicationContext.getBeanFactory().getBeanDefinitionNames()) {
|
||||
if (findFactoryAnnotation(name, type) != null) {
|
||||
result.put(name, this.applicationContext.getBean(name));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public <A extends Annotation> A findFactoryAnnotation(String beanName, Class<A> type) {
|
||||
Method method = findFactoryMethod(beanName);
|
||||
return (method != null) ? AnnotationUtils.findAnnotation(method, type) : null;
|
||||
}
|
||||
|
||||
public Method findFactoryMethod(String beanName) {
|
||||
ConfigurableListableBeanFactory beanFactory = this.applicationContext.getBeanFactory();
|
||||
if (beanFactory.containsBeanDefinition(beanName)) {
|
||||
BeanDefinition beanDefinition = beanFactory.getMergedBeanDefinition(beanName);
|
||||
if (beanDefinition instanceof RootBeanDefinition) {
|
||||
return ((RootBeanDefinition) beanDefinition).getResolvedFactoryMethod();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
||||
this.applicationContext = (ConfigurableApplicationContext) applicationContext;
|
||||
}
|
||||
|
||||
static void register(BeanDefinitionRegistry registry) {
|
||||
if (!registry.containsBeanDefinition(BEAN_NAME)) {
|
||||
GenericBeanDefinition definition = new GenericBeanDefinition();
|
||||
definition.setBeanClass(ConfigurationBeanFactoryMetadata.class);
|
||||
definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
registry.registerBeanDefinition(ConfigurationBeanFactoryMetadata.BEAN_NAME, definition);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue