第一次提交

master
weizhongxi 4 years ago
parent 2094e690ec
commit 06963abd8a

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

@ -0,0 +1,14 @@
package com.yuyou.openapi.openapi.dao;
import com.yuyou.openapi.openapi.model.dataobject.MohangMessageDO;
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;
@Repository
public interface MohangMessageRepository extends JpaRepository<MohangMessageDO, Long> {
@Modifying
@Query("update MohangMessageDO t set t.sendStatus = ?1 where t.recId = ?2")
void updateSendStatus(Integer sendStatus, Long recId);
}

@ -131,6 +131,24 @@ public class ABMessageConverter {
return abMessageDOs;
}
/**
* DTODO
* @param dtos
* @return
*/
public static List<MohangMessageDO> convertMohangABMessageDOFromDTO(List<ABMessageDTO> dtos) {
if (CollectionUtils.isEmpty(dtos)) {
return null;
}
List<MohangMessageDO> abMessageDOs = new ArrayList<>();
dtos.forEach(each -> {
MohangMessageDO abMessageDO = convertMohangMessageDOFromDTO(each);
if (abMessageDO != null) {
abMessageDOs.add(abMessageDO);
}
});
return abMessageDOs;
}
/**
* DTODO
* @param dtos
@ -445,6 +463,37 @@ public class ABMessageConverter {
return shijiMessageDO;
}
/**
* Mohang DTODO
* @param abMessageDTO
* @return
*/
public static MohangMessageDO convertMohangMessageDOFromDTO(ABMessageDTO abMessageDTO) {
MohangMessageDO mohangMessageDO = new MohangMessageDO();
if (abMessageDTO == null) {
return mohangMessageDO;
}
BeanUtils.copyProperties(abMessageDTO, mohangMessageDO);
mohangMessageDO.setPushTime(DateUtils.date(abMessageDTO.getTimestamp()));
mohangMessageDO.setStartTime(DateUtils.date(abMessageDTO.getStartTime()));
try{
mohangMessageDO.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);
mohangMessageDO.setPnum(encryptedMobile);
} catch (Exception e) {
log.error("Encrypt Mobile raise Error, recId = {}, error is :", abMessageDTO.getRecId(), e);
mohangMessageDO.setPnum(abMessageDTO.getMobile());
}
return mohangMessageDO;
}
/**
* Luoshi DTODO
* @param abMessageDTO

@ -0,0 +1,80 @@
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;
/**
* liehe AB
* @version 1.0
* @date 2021/4/1
*/
@Data
@Table(name = "mohang_message")
@Entity
@EntityListeners(AuditingEntityListener.class)
public class MohangMessageDO {
@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,79 @@
package com.yuyou.openapi.openapi.model.dto;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
*
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MohangMessageCovDTO {
/**
* ID
*/
// @JSONField(serialize = false)
private String appId;
/**
*
*/
// @JSONField(serialize = false)
private Long timestamp;
/**
* : sha1(app_id=AppId&nonce_str=time_stamp)
*/
private String signature;
/**
* json
*/
private List<MohangMessageCovDTO.MohangData> data;
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class MohangData{
/**
* poneNum Base64
*/
@JSONField(name = "info")
private String mobile;
/**
*
*/
@JSONField(name = "time")
private Long startTime;
/**
* Base64
*/
@JSONField(name = "subType")
private String actName;
/**
* HM
*/
@JSONField(name = "type")
private Integer type;
}
/*
*//**
* Base64
*//*
@JSONField(name = "actname")
private String actName;
*//**
* ID
*//*
@JSONField(name = "id")
private String recId;*/
}

@ -29,6 +29,11 @@ public interface ABClientService {
*/
boolean recordAndSendABClientMsgShiJi(List<ABMessageDTO> dtos);
/**
* ,
*/
boolean recordAndSendABClientMsgMohang(List<ABMessageDTO> dtos);
/**
* ,
*/

@ -31,6 +31,11 @@ public interface ABMessageService {
*/
boolean updateSendSJSatus(Long recId, boolean sucess);
/**
* -
*/
boolean updateSendMHSatus(Long recId, boolean sucess);
/**
* -
*/

@ -45,6 +45,9 @@ public class ABClientServiceImpl implements ABClientService {
@Autowired
private ShijiMessageRepository shijiMessageRepository;
@Autowired
private MohangMessageRepository MohangMessageRepository;
@Autowired
private LuoshiMessageRepository luoshiMessageRepository;
@ -151,6 +154,26 @@ public class ABClientServiceImpl implements ABClientService {
return Boolean.TRUE;
}
@Override
public boolean recordAndSendABClientMsgMohang(List<ABMessageDTO> dtos) {
if (CollectionUtils.isEmpty(dtos)) {
log.error("Param dtos is empty");
return Boolean.FALSE;
}
// 调用接口进行入库
List<MohangMessageDO> abMessageDOS = ABMessageConverter.convertMohangABMessageDOFromDTO(dtos);
// TODO: 2021/4/1 0010 加密存储
List<MohangMessageDO> dos = MohangMessageRepository.saveAll(abMessageDOS);
if (CollectionUtils.isEmpty(dos)){
log.error("========== [insert data error , please check .] ==========");
return Boolean.FALSE;
}
// 调用异步任务进行转发AB单 - 这里是这有一条数据
// 返回处理结果
abDownTask.doRunMohangTask(dtos);
return Boolean.TRUE;
}
@Override
public boolean recordAndSendABClientMsgPanda(List<ABMessageDTO> dtos) {
if (CollectionUtils.isEmpty(dtos)) {

@ -49,6 +49,11 @@ public class ABClientServiceProxy implements ABClientService {
return abClientService.recordAndSendABClientMsgShiJi(dto);
}
@Override
public boolean recordAndSendABClientMsgMohang(List<ABMessageDTO> dtos) {
return abClientService.recordAndSendABClientMsgMohang(dtos);
}
/**
* fixme 使
* @param dto

@ -39,6 +39,8 @@ public class ABMessageServiceImpl implements ABMessageService {
@Autowired
private ShijiMessageRepository shijiMessageRepository;
@Autowired
private MohangMessageRepository mohangMessageRepository;
@Autowired
private LuoshiMessageRepository luoshiMessageRepository;
@Autowired
private PandaMessageRepository pandaMessageRepository;
@ -92,6 +94,20 @@ public class ABMessageServiceImpl implements ABMessageService {
return Boolean.TRUE;
}
@Override
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public boolean updateSendMHSatus(Long recId, boolean sucess) {
if (recId == null) {
return Boolean.FALSE;
}
if (sucess) {
mohangMessageRepository.updateSendStatus(1, recId);
}else {
mohangMessageRepository.updateSendStatus(0, recId);
}
return Boolean.TRUE;
}
@Override
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public boolean updateSendLSSatus(Long recId, boolean sucess) {

@ -94,12 +94,25 @@ public class ABDownTask {
@Value("${ab.shiji.appId}")
private String shiJiAppId;
@Value("${ab.shiji.url}")
private String shiJiUrl;
@Value("${ab.shiji.secretKey}")
private String shiJiSecretKey;
/**
* -
*/
@Value("${ab.mohang.appId}")
private String mohangAppId;
@Value("${ab.mohang.url}")
private String mohangJiUrl;
@Value("${ab.mohang.secretKey}")
private String mohangSecretKey;
/**
* -
*/
@ -268,6 +281,97 @@ public class ABDownTask {
log.info("====== [ task start end, task name is {},cost milliSecond is {} ] ======", "ABDownTask", (endMilliSecond-satrtMilliSecond));
}
/**
* ,
*
* @return
*/
@Async(value = "abTaskExecutor")
public void doRunMohangTask(List<ABMessageDTO> messageDTOList){
Long satrtMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
log.info("====== [ task start running, task name is {} ] ======", "ABDownTask");
runMohangTask(messageDTOList);
Long endMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
log.info("====== [ task start end, task name is {},cost milliSecond is {} ] ======", "ABDownTask", (endMilliSecond-satrtMilliSecond));
}
/**
*
*
* @return
*/
private boolean runMohangTask(List<ABMessageDTO> messageDTOList){
int count = 0; // 设置请求失败计数
// 数据实体进行映射转换 - 目前是只有一条给
MohangMessageCovDTO mohangMessageCovDTO = new MohangMessageCovDTO();
// ShijiMessageCovDTO shijiMessageCovDTO = new ShijiMessageCovDTO();
// 对特殊情况进行过滤,只要AB单的用户,且字段加密规则要重新进行制定
List<ABMessageDTO> collect = messageDTOList.stream()
.filter(item -> (1 == item.getClientType()) || 2 == item.getClientType())
.map(item -> {
// pno通配
String reverse = StringUtils.reverse(item.getMobile());
item.setMobile(reverse);
// startTime 通配下游到秒
Long startTime = item.getStartTime();
if (startTime != null && startTime.toString().length() == 13) {
item.setStartTime(startTime / 1000);
}
return item;
})
.collect(Collectors.toList());
List<MohangMessageCovDTO.MohangData> data = new ArrayList<>();
// 进行转换
collect.forEach(
each->{
MohangMessageCovDTO.MohangData mohangData = new MohangMessageCovDTO.MohangData();
BeanUtils.copyProperties(each, mohangData);
mohangData.setType(each.getClientType());
byte[] bytes = each.getActName().getBytes();
//Base64 加密
String encoded = java.util.Base64.getEncoder().encodeToString(bytes);
mohangData.setActName(encoded);
data.add(mohangData);
}
);
// 进行设置
if (!CollectionUtils.isEmpty(data)){
mohangMessageCovDTO.setData(data);
}
// 补充其他的下游请求字段
long time = System.currentTimeMillis() / 1000;
mohangMessageCovDTO.setTimestamp(time);
mohangMessageCovDTO.setAppId(mohangAppId);
mohangMessageCovDTO.setSignature(SecureUtil.sha1("app_id="+ mohangAppId +"&timestamp="+ time + "&secret=" + mohangSecretKey));
// 数据实体转成Json 不忽略空kv 有序
String jsonStr = JSON.toJSONString(mohangMessageCovDTO);
log.info("========== [ready send json is {} ] =============", jsonStr);
// 请求的响应处理
// todo 失败重发请求3次
while (count <= 3){
// 调用HTTP请求发送数据
HttpResponse httpResponse = sendMohangReq(jsonStr);
log.info("-----------"+httpResponse.isOk()+httpResponse.body().contains("record"));
log.info("--------- "+httpResponse.body());
if (httpResponse.isOk()){
log.info("========== [request success, response is {} ] ==========", httpResponse.body());
break;
}else{
count ++;
log.error("========== [request fail, response is {} ] ==========", httpResponse.body());
}
}
if (count > 3) {
return Boolean.FALSE;
}
collect.forEach(
// FIXME: 2021/4/1 0012 可能会造成更新失败,检查更新语句
each -> abMessageService.updateSendMHSatus(Long.valueOf(each.getRecId()), Boolean.TRUE)
);
return Boolean.TRUE;
}
/**
*
*
@ -1191,6 +1295,19 @@ public class ABDownTask {
return httpResponse;
}
/**
* HTTP
*
* @param json body
* @return
*/
private HttpResponse sendMohangReq(String json){
HttpResponse httpResponse = HttpRequest
.post(mohangJiUrl)
.body(json)
.execute();
return httpResponse;
}
/**
* HTTP
*

@ -48,6 +48,10 @@ ab:
appId: excin4hg3n29yc73ns9x
url: https://www.shijikj.cn/ex/infoColl
secretKey: ex456c24iejto89pavp
mohang:
appId: TZRamCan
url: http://175.27.191.107:8080//highseas/api/tz
secretKey: 77ea829b727913a87f8aa461b392dbb5
luoshi:
appId: Hangzhouyunuo
url: https://data.hzluoshi.cn/index/phoneapi

Loading…
Cancel
Save