Merge branch 'master' of http://git.hchbox.com/yuyou/client into master

master
queyounan 4 years ago
commit ac5815ed68

@ -119,6 +119,24 @@ public class ABClient {
}
/**
* AB -
*
* @return
*/
@PostMapping("/api/req/taginfo/wxfans")
@ResponseBody
public CommonResponse getDBTagInfoWxFans(@RequestBody ABClientInterMessageVO vo) {
// 记录日志
log.info("====== [ WX fans request comming, request content is {} ] ======", vo.toString());
// 转换实体类映射
List<ABMessageDTO> dtos = ABMessageConverter.convertABMessageDTOFromVO(vo);
// 调用业务处理接口 返回校验成功的结果
return abClientService.recordAndSendABClientMsgWxFans(dtos) ?
CommonResponse.createBySuccess() : CommonResponse.createByErrorMessage("调用失败请重试");
}
/**
* AB
*

@ -0,0 +1,25 @@
package com.yuyou.openapi.openapi.dao;
import com.yuyou.openapi.openapi.model.dataobject.WxFansMessageDO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
/**
* Copyright (C), 2012 - 2018, qyx
* FileName: LuoshiMessageRepository
* Author:
* Date: 2020/10/22 2:52 PM
* Description: TODO
* History:
* <author> <time> <version> <desc>
* 2020/10/22 v1.0
*/
@Repository
public interface WxFansMessageRepository extends JpaRepository<WxFansMessageDO, Long>{
@Modifying
@Query("update WxFansMessageDO t set t.sendStatus = ?1 where t.recId = ?2")
void updateSendStatus(Integer sendStatus, Long recId);
}

@ -131,6 +131,26 @@ public class ABMessageConverter {
}
/**
* DTODO
* @param dtos
* @return
*/
public static List<WxFansMessageDO> convertWxFansABMessageDOFromDTO(List<ABMessageDTO> dtos) {
if (CollectionUtils.isEmpty(dtos)) {
return null;
}
List<WxFansMessageDO> abMessageDOs = new ArrayList<>();
dtos.forEach(each -> {
WxFansMessageDO abMessageDO = convertWxFansMessageDOFromDTO(each);
if (abMessageDO != null) {
abMessageDOs.add(abMessageDO);
}
});
return abMessageDOs;
}
/**
* DTODO
* @param abMessageDTO
@ -306,6 +326,37 @@ public class ABMessageConverter {
return pandaMessageDO;
}
/**
* Luoshi DTODO
* @param abMessageDTO
* @return
*/
public static WxFansMessageDO convertWxFansMessageDOFromDTO(ABMessageDTO abMessageDTO) {
WxFansMessageDO wxFansMessageDO = new WxFansMessageDO();
if (abMessageDTO == null) {
return wxFansMessageDO;
}
BeanUtils.copyProperties(abMessageDTO, wxFansMessageDO);
wxFansMessageDO.setPushTime(DateUtils.date(abMessageDTO.getTimestamp()));
wxFansMessageDO.setStartTime(DateUtils.date(abMessageDTO.getStartTime()));
try{
wxFansMessageDO.setRecId(Long.valueOf(abMessageDTO.getRecId()));
}catch (Exception e){
log.error("String convert Long type Error.", e);
}
// AES加密
try {
String encryptedMobile = SecurityService.encrypt(abMessageDTO.getMobile(), SecurityConstants.PHONE);
wxFansMessageDO.setPnum(encryptedMobile);
} catch (Exception e) {
log.error("Encrypt Mobile raise Error, recId = {}, error is :", abMessageDTO.getRecId(), e);
wxFansMessageDO.setPnum(abMessageDTO.getMobile());
}
return wxFansMessageDO;
}

@ -0,0 +1,76 @@
package com.yuyou.openapi.openapi.model.dataobject;
import lombok.Data;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.util.Date;
@Data
@Table(name = "wxfans_message")
@Entity
@EntityListeners(AuditingEntityListener.class)
public class WxFansMessageDO {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
@Column(name = "gmt_create")
@CreatedDate
private Date gmtCreate;
@Column(name = "gmt_modified")
@LastModifiedDate
private Date gmtModified;
/**
* id
*/
@Column(name = "rec_id")
private Long recId;
/**
*
*/
@Column(name = "pnum")
private String pnum;
/**
*
*/
@Column(name = "act_name")
private String actName;
/**
*
*/
@Column(name = "start_time")
private Date startTime;
/**
* (1:A,2:B,3:C,4:D,5:E,6:F)
*/
@Column(name = "client_type")
private Integer clientType;
/**
* id
*/
@Column(name = "app_id")
private String appId;
/**
*
*/
@Column(name = "push_time")
private Date pushTime;
/**
* 0 0 - 1 -
*/
@Column(name = "send_status")
private Integer sendStatus = 0;
}

@ -0,0 +1,39 @@
package com.yuyou.openapi.openapi.model.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* Copyright (C), 2012 - 2018, qyx
* FileName: WxFansMessageCovDTO
* Author:
* Date: 2020/10/22 2:55 PM
* Description: TODO
* History:
* <author> <time> <version> <desc>
* 2020/10/22 v1.0
*/
/**
*
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WxFansMessageCovDTO {
/**
* ID
*/
// @JSONField(serialize = false)
private String type;
/**
* json
*/
private List<String> data;
}

@ -37,6 +37,12 @@ public interface ABClientService {
*/
boolean recordAndSendABClientMsgPanda(List<ABMessageDTO> dtos);
/**
* ,
*/
boolean recordAndSendABClientMsgWxFans(List<ABMessageDTO> dtos);
/**
* TODO:.recordAndSendABClientMsg
* @param dtos

@ -41,6 +41,12 @@ public interface ABMessageService {
*/
boolean updateSendPDSatus(Long recId, boolean sucess);
/**
* -
*/
boolean updateSendWxFansSatus(Long recId, boolean sucess);
/**
*
*/

@ -67,6 +67,8 @@ public class ABClientServiceImpl implements ABClientService {
@Autowired
private SongshuMessageRepository songshuMessageRepository;
@Autowired
private WxFansMessageRepository wxFansMessageRepository;
@Autowired
private XuebaMessageRepository xuebaMessageRepository;
@ -131,6 +133,26 @@ public class ABClientServiceImpl implements ABClientService {
return Boolean.TRUE;
}
@Override
public boolean recordAndSendABClientMsgWxFans(List<ABMessageDTO> dtos) {
if (CollectionUtils.isEmpty(dtos)) {
log.error("Param dtos is empty");
return Boolean.FALSE;
}
// 调用接口进行入库
List<WxFansMessageDO> abMessageDOS = ABMessageConverter.convertWxFansABMessageDOFromDTO(dtos);
// TODO: 2020/8/10 0010 加密存储
List<WxFansMessageDO> dos = wxFansMessageRepository.saveAll(abMessageDOS);
if (CollectionUtils.isEmpty(dos)){
log.error("========== [insert data error , please check .] ==========");
return Boolean.FALSE;
}
// 调用异步任务进行转发AB单 - 这里是这有一条数据
// 返回处理结果
abDownTask.doRunWxFansTask(dtos);
return Boolean.TRUE;
}
@Override
public boolean recordAndSendABClientMsgLuoshi(List<ABMessageDTO> dtos) {

@ -68,6 +68,11 @@ public class ABClientServiceProxy implements ABClientService {
return abClientService.recordAndSendABClientMsgPanda(dto);
}
@Override
public boolean recordAndSendABClientMsgWxFans(List<ABMessageDTO> dtos) {
return abClientService.recordAndSendABClientMsgWxFans(dtos);
}
@Override
public boolean recordAndSendLieheMsg(List<ABMessageDTO> dtos) {
return abClientService.recordAndSendLieheMsg(dtos);

@ -33,6 +33,8 @@ public class ABMessageServiceImpl implements ABMessageService {
private LuoshiMessageRepository luoshiMessageRepository;
@Autowired
private PandaMessageRepository pandaMessageRepository;
@Autowired
private WxFansMessageRepository wxFansMessageRepository;
@Override
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@ -104,6 +106,21 @@ public class ABMessageServiceImpl implements ABMessageService {
return Boolean.TRUE;
}
@Override
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public boolean updateSendWxFansSatus(Long recId, boolean sucess) {
if (recId == null) {
return Boolean.FALSE;
}
if (sucess) {
wxFansMessageRepository.updateSendStatus(1, recId);
}else {
wxFansMessageRepository.updateSendStatus(0, recId);
}
return Boolean.TRUE;
}
@Override
public List<ABMessageDTO> queryUnSendMessage(Date startPushTime, Date endPushTime) {

@ -37,6 +37,11 @@ import java.util.stream.Collectors;
@Slf4j
public class ABDownTask {
/**
*
*/
private static final String FIX_WX_ADD_FANS_TAG = "addfriend";
@Autowired
private ABMessageService abMessageService;
@ -99,7 +104,11 @@ public class ABDownTask {
@Value("${ab.panda.secretKey}")
private String panDaSecretKey;
/**
* -
*/
@Value("${ab.wxfans.url}")
private String wxFansUrl;
/**
* ,
@ -435,6 +444,71 @@ public class ABDownTask {
}
/**
* ,
*
* @return
*/
@Async(value = "abTaskExecutor")
public void doRunWxFansTask(List<ABMessageDTO> messageDTOList){
Long satrtMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
log.info("====== [ task start running, task name is {} ] ======", "doRunWxFansTask");
runWxFansTask(messageDTOList);
Long endMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
log.info("====== [ task start end, task name is {},cost milliSecond is {} ] ======", "doRunWxFansTask", (endMilliSecond-satrtMilliSecond));
}
/**
*
*
* @return
*/
private boolean runWxFansTask(List<ABMessageDTO> messageDTOList){
int count = 0; // 设置请求失败计数
// 数据实体进行映射转换 - 目前是只有一条给
WxFansMessageCovDTO wxFansMessageCovDTO = new WxFansMessageCovDTO();
// 号码集合
List<String> data = new ArrayList<>();
// 进行转换
messageDTOList.forEach(
each-> data.add(each.getMobile())
);
// 进行设置
if (!CollectionUtils.isEmpty(data)){
wxFansMessageCovDTO.setData(data);
}
// 补充其他的下游请求字段
wxFansMessageCovDTO.setType(FIX_WX_ADD_FANS_TAG);
// 数据实体转成Json 不忽略空kv 有序
String jsonStr = JSON.toJSONString(wxFansMessageCovDTO);
log.info("========== [ready send json is {} ] =============", jsonStr);
// 请求的响应处理
// todo 失败重发请求3次
while (count <= 3){
// 调用HTTP请求发送数据
HttpResponse httpResponse = sendWxReq(jsonStr);
if (httpResponse.isOk() && httpResponse.body().contains("true")){
log.info("========== [request success, response is {} ] ==========", httpResponse.body());
break;
}else{
count ++;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
log.error("sleep error!");
}
log.error("========== [request fail, response is {} ] ==========", httpResponse.body());
}
}
if (count > 3) {
return Boolean.FALSE;
}
messageDTOList.forEach(
// FIXME: 2020/8/12 0012 可能会造成更新失败,检查更新语句
each -> abMessageService.updateSendWxFansSatus(Long.valueOf(each.getRecId()), Boolean.TRUE)
);
return Boolean.TRUE;
}
/**
@ -560,6 +634,20 @@ public class ABDownTask {
return httpResponse;
}
/**
* HTTP
*
* @param json body
* @return
*/
private HttpResponse sendWxReq(String json){
HttpResponse httpResponse = HttpRequest
.post(wxFansUrl)
.body(json)
.execute();
return httpResponse;
}
/**
* liehe HTTP
* @param json

@ -48,7 +48,8 @@ ab:
appId: 10671792
url: https://pre-api.aircourses.com/common/open/n/stuClue/add/callback
secretKey: fee2824fb2e0d1f166084cb66fc9d391
wxfans:
url: https://api.wooxin.cn/tketong/30
---
# 端口
server:
@ -88,6 +89,8 @@ ab:
appId: 10671792
url: https://api.aircourses.com/common/open/n/stuClue/add/callback
secretKey: fee2824fb2e0d1f166084cb66fc9d391
wxfans:
url: https://api.wooxin.cn/tketong/30
logging:
config: classpath:logback.xml
---
@ -129,5 +132,7 @@ ab:
appId: Hangzhouyunuo
url: https://data.hzluoshi.cn/index/phoneapi
secretKey: fee2824fb2e0d1f166084cb66fc9d391
wxfans:
url: https://api.wooxin.cn/tketong/30
#logging:
# config: classpath:logback.xml

@ -0,0 +1,35 @@
package com.yuyou.openapi.openapi;
import org.junit.Test;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;
import java.util.stream.Collectors;
public class ExcelFileTest {
@Test
public void testReadAllFiles() throws IOException {
List<String> stringList = Files.readAllLines(Paths.get("H:\\1.txt"));
System.out.println(stringList.size());
List<String> collect = stringList.stream()
.distinct()
.filter(each -> (each.trim().length() == 24))
.collect(Collectors.toList());
System.out.println(collect.size());
Files.write(Paths.get("H:\\all.txt"),collect, StandardOpenOption.CREATE);
}
}
Loading…
Cancel
Save