手动同步订单接口编写

master
ninftao 3 years ago
parent 0fb27391dc
commit 7a1f394e87

@ -1,23 +1,41 @@
package com.hchbox.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.hchbox.annotaion.SellerUser;
import com.hchbox.config.DataSourceConfiguration;
import com.hchbox.constant.DefaultNumberConstants;
import com.hchbox.dto.SellerAccountDTO;
import com.hchbox.entity.master.TopOrder;
import com.hchbox.entity.master.TopTrade;
import com.hchbox.entity.slaver.JdpTrade;
import com.hchbox.enums.TradeEnum;
import com.hchbox.model.param.CommonResult;
import com.hchbox.service.TopTradeService;
import com.hchbox.service.*;
import com.hchbox.util.CommConverter;
import com.hchbox.vo.PageVo;
import com.hchbox.vo.taobao.TaoBaoOrderResponseVO;
import com.hchbox.vo.taobao.TaoBaoOrderSearchVO;
import com.hchbox.vo.taobao.TradeDecryptVo;
import com.taobao.api.ApiException;
import com.taobao.api.SecretException;
import com.taobao.api.domain.Trade;
import com.taobao.api.internal.util.TaobaoUtils;
import com.taobao.api.request.TradesSoldGetRequest;
import com.taobao.api.response.TopOaidDecryptResponse;
import com.taobao.api.response.TradeFullinfoGetResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@ -28,11 +46,22 @@ import java.util.List;
@Api(tags = "淘宝订单相关信息")
@RestController
@RequestMapping("/source/trade")
@AllArgsConstructor
@RequiredArgsConstructor
public class TopTradeController {
private final MemberService memberService;
private final TopTradeService topTradeService;
private final JdpTradeService jdpTradeService;
private final TaoBaoTradeService taoBaoTradeService;
private final TaoBaoRdsPushService taoBaoRdsPushService;
private final SellerAccountService sellerAccountService;
/**
*
*/
@ -57,8 +86,8 @@ public class TopTradeController {
taoBaoOrderSearchVO.setUserId(
sellerAccountDTO.getParentId() !=
DefaultNumberConstants.ZERO_NUMBER ?
sellerAccountDTO.getParentId() :
sellerAccountDTO.getId());
sellerAccountDTO.getParentId() :
sellerAccountDTO.getId());
return topTradeService.queryTradeList(sellerAccountDTO, taoBaoOrderSearchVO);
}
@ -83,4 +112,59 @@ public class TopTradeController {
return topTradeService.decryptList(sellerAccountDTO, decryptVoList);
}
}
@GetMapping("/synchronizeOrders")
@DS(DataSourceConfiguration.SHARDING_DATASOURCE_NAME)
public CommonResult<String> synchronizeOrders(@RequestParam("nickname") String nickname,
@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date)
throws ApiException, SecretException, NoSuchFieldException, IllegalAccessException {
SellerAccountDTO accountByNick = sellerAccountService.getAccountByNick(nickname);
if (accountByNick == null) {
return new CommonResult<String>().accountException();
}
DynamicDataSourceContextHolder.push("slave");
List<JdpTrade> jdpOrderList = jdpTradeService.findJdpOrderByTime(date, DateUtil.date());
List<Trade> list = new ArrayList<>();
for (JdpTrade jdpTrade : jdpOrderList) {
if (jdpTrade != null && jdpTrade.getJdpResponse() != null) {
// 淘宝用此方式转换为trade
TradeFullinfoGetResponse rsp = TaobaoUtils.parseResponse(jdpTrade.getJdpResponse(),
TradeFullinfoGetResponse.class);
list.add(rsp.getTrade());
}
}
list = taoBaoTradeService.decryptInformation(list, accountByNick.getSessionKey());
if (CollectionUtils.isNotEmpty(list)) {
DynamicDataSourceContextHolder.push(DataSourceConfiguration.SHARDING_DATASOURCE_NAME);
for (Trade trade : list) {
// 判断账号
if (accountByNick.getStatus() == DefaultNumberConstants.ONE_NUMBER) {
TopTrade topTrade = new TopTrade();
BeanUtil.copyProperties(trade, topTrade);
List<TopOrder> topOrders = CommConverter.CommConverter(trade.getOrders(), TopOrder.class);
boolean createResult = topTradeService.createTrade(topTrade, accountByNick, topOrders);
if (createResult && Boolean.TRUE.equals(TradeEnum.checkStatus(trade.getStatus()))) {
memberService.synMemberByTrade(topTrade);
}
}
// 修改同步数量
int messageCount = accountByNick.getMessageCount() != null ?
accountByNick.getMessageCount() : DefaultNumberConstants.ZERO_NUMBER;
int totalAmount = messageCount + list.size();
sellerAccountService.updateMessageCount(accountByNick.getId(), totalAmount);
if (accountByNick.getMassNum() != null
&& accountByNick.getMassNum() > DefaultNumberConstants.ZERO_NUMBER
&& totalAmount > accountByNick.getMassNum()) {
// 删除数据推送
taoBaoRdsPushService.deletePushUser(nickname);
// 修改账号状态
sellerAccountService.updateAccountStatusAndExpiration
(accountByNick.getId(), DefaultNumberConstants.MINUS_ONE_NUMBER, DateUtil.date());
}
}
}
return CommonResult.successfulOperation();
}
}

@ -4,14 +4,8 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.google.common.collect.Lists;
import com.hchbox.config.MiProperties;
import com.hchbox.constant.DefaultNumberConstants;
import com.hchbox.constant.TaoBaoDataMethodConstants;
import com.hchbox.entity.master.Blacklist;
import com.hchbox.entity.master.SellerAccount;
import com.hchbox.entity.master.User;
import com.hchbox.entity.slaver.JdpTrade;
import com.hchbox.repository.master.BlacklistRepository;
import com.hchbox.repository.master.MemberRepository;
import com.hchbox.repository.master.SellerAccountRepository;
import com.hchbox.repository.master.TopTradeRepository;
import com.hchbox.service.*;
@ -47,6 +41,9 @@ public class SlaverTest {
@Resource
private RedisTemplate redisTemplate;
@Resource
private TopTradeRepository topTradeRepository;
@Resource
private SellerAccountService sellerAccountService;
@ -120,18 +117,7 @@ public class SlaverTest {
@Test
public void getAccount() {
try {
for (int i = 0; i < 100; i++) {
if (i== 1){
int i1 = 10 / 0;
}
System.out.println(i);
}
}catch (Exception e){
e.printStackTrace();
}
topTradeRepository.countByTid(2148563198943032631L);
}

@ -32,7 +32,7 @@ public interface TopTradeRepository extends JpaRepository<TopTrade, Long>, JpaSp
Integer countByTid(Long tid);
/**
*
*
* @param status
* @param tid
* @param date

@ -1,5 +1,6 @@
package com.hchbox.repository.slaver;
import cn.hutool.core.date.DateTime;
import com.hchbox.entity.slaver.JdpTrade;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@ -16,12 +17,22 @@ import java.util.List;
@Repository
public interface JdpTradeRepository extends JpaRepository<JdpTrade, Integer>, JpaSpecificationExecutor<JdpTrade> {
/**
*
*
* @param startTime
* @param lastUpdateTime
* @return
*/
@Query(value = "select j from JdpTrade j where j.jdpModified between ?1 and ?2")
List<JdpTrade> findJdpTradeByTime(Date startTime, Date lastUpdateTime);
/**
*
* @param nickname
* @param startTime
* @param endTime
* @return
*/
@Query(value = "select j from JdpTrade j where j.sellerNick = ?1 and j.jdpModified between ?2 and ?3")
List<JdpTrade> findJdpTradeByTimeAndNickname(String nickname, Date startTime, DateTime endTime);
}

@ -1,5 +1,6 @@
package com.hchbox.service;
import cn.hutool.core.date.DateTime;
import com.hchbox.entity.slaver.JdpTrade;
import java.util.Date;
@ -17,4 +18,14 @@ public interface JdpTradeService {
* @return
*/
List<JdpTrade> findJdpOrderByTime(Date lastUpdateTime, Date endTime);
/**
*
* @param nickname
* @param startTime
* @param endTime
* @return
*/
List<JdpTrade> findJdpOrderByTimeAndNickName(String nickname, Date startTime, DateTime endTime);
}

@ -1,6 +1,7 @@
package com.hchbox.service;
import com.hchbox.dto.SellerAccountDTO;
import com.taobao.api.SecretException;
import com.taobao.api.domain.Trade;
import com.taobao.api.request.TradesSoldGetRequest;
@ -27,4 +28,12 @@ public interface TaoBaoTradeService {
* @return
*/
Trade getFullInfoByTid(Long tid, String sessionKey);
/**
*
* @param list
* @param sessionKey
* @return
*/
List<Trade> decryptInformation(List<Trade> list, String sessionKey) throws SecretException, NoSuchFieldException, IllegalAccessException;
}

@ -2,6 +2,7 @@
package com.hchbox.service;
import cn.hutool.core.date.DateTime;
import com.hchbox.dto.SellerAccountDTO;
import com.hchbox.entity.master.TopOrder;
import com.hchbox.entity.master.TopTrade;
@ -14,8 +15,6 @@ import com.hchbox.vo.PageVo;
import com.hchbox.vo.taobao.TaoBaoOrderResponseVO;
import com.hchbox.vo.taobao.TaoBaoOrderSearchVO;
import com.hchbox.vo.taobao.TradeDecryptVo;
import com.taobao.api.ApiException;
import com.taobao.api.SecretException;
import com.taobao.api.request.TradesSoldGetRequest;
import com.taobao.api.response.TopOaidDecryptResponse;
@ -118,4 +117,16 @@ public interface TopTradeService {
* @return
*/
TopTrade findByTid(Long tid);
/**
*
*
* @param sellerAccount
* @param nickname
* @param date
* @param date1
* @return
*/
CommonResult<String> synchronizeOrdersByNickname(SellerAccountDTO sellerAccount, String nickname, Date date, DateTime date1);
}

@ -1,5 +1,6 @@
package com.hchbox.service.impl;
import cn.hutool.core.date.DateTime;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.hchbox.entity.slaver.JdpTrade;
import com.hchbox.repository.slaver.JdpTradeRepository;
@ -25,4 +26,9 @@ public class JdpTradeServiceImpl implements JdpTradeService {
public List<JdpTrade> findJdpOrderByTime(Date lastUpdateTime, Date endTime) {
return jdpTradeRepository.findJdpTradeByTime(lastUpdateTime, endTime);
}
@Override
public List<JdpTrade> findJdpOrderByTimeAndNickName(String nickname, Date startTime, DateTime endTime) {
return jdpTradeRepository.findJdpTradeByTimeAndNickname(nickname, startTime, endTime);
}
}

@ -8,6 +8,7 @@ import com.hchbox.constant.TaoBaoDataMethodConstants;
import com.hchbox.dto.SellerAccountDTO;
import com.hchbox.service.TaoBaoTradeService;
import com.hchbox.uitl.TaoBaoEncryption;
import com.taobao.api.SecretException;
import com.taobao.api.domain.Trade;
import com.taobao.api.request.TradeFullinfoGetRequest;
import com.taobao.api.request.TradesSoldGetRequest;
@ -63,19 +64,35 @@ public class TaoBaoTradeServiceImpl implements TaoBaoTradeService {
request.setTid(tid);
TradeFullinfoGetResponse response = TaoBaoApiClient.createTaoBaoResponse(request, miProperties, sessionKey);
if (response != null) {
return response.getTrade();
/*List<String> fieldName = Lists.newArrayList
List<String> fieldName = Lists.newArrayList
(TaoBaoDataMethodConstants.BUYER_NICK,
TaoBaoDataMethodConstants.RECEIVER_NAME,
TaoBaoDataMethodConstants.RECEIVER_NAME,
TaoBaoDataMethodConstants.RECEIVER_ADDRESS,
TaoBaoDataMethodConstants.ENCRYPT_ALI_PAY_ID,
TaoBaoDataMethodConstants.ENCRYPT_ALI_PAY_ID,
TaoBaoDataMethodConstants.RECEIVER_PHONE,
TaoBaoDataMethodConstants.BUYER_EMAIL,
TaoBaoDataMethodConstants.BUYER_ALIPAY_NO);
TaoBaoEncryption.decrypt(miProperties, sessionKey, trade, TaoBaoDataMethodConstants.SIMPLE, fieldName, null);
TaoBaoEncryption.decrypt(miProperties, sessionKey, trade, TaoBaoDataMethodConstants.PHONE,
Trade.class.getDeclaredField(TaoBaoDataMethodConstants.RECEIVER_MOBILE));*/
TaoBaoDataMethodConstants.BUYER_EMAIL,
TaoBaoDataMethodConstants.BUYER_ALIPAY_NO);
TaoBaoEncryption.decrypt(miProperties, sessionKey, response.getTrade(), TaoBaoDataMethodConstants.SIMPLE, fieldName, null);
TaoBaoEncryption.decrypt(miProperties, sessionKey, response.getTrade(), TaoBaoDataMethodConstants.PHONE,
Trade.class.getDeclaredField(TaoBaoDataMethodConstants.RECEIVER_MOBILE));
}
return null;
}
@Override
public List<Trade> decryptInformation(List<Trade> list, String sessionKey) throws SecretException, NoSuchFieldException, IllegalAccessException {
List<String> fieldName = Lists.newArrayList(
TaoBaoDataMethodConstants.BUYER_NICK,
TaoBaoDataMethodConstants.BUYER_EMAIL,
TaoBaoDataMethodConstants.RECEIVER_NAME,
TaoBaoDataMethodConstants.RECEIVER_PHONE,
TaoBaoDataMethodConstants.BUYER_ALIPAY_NO,
TaoBaoDataMethodConstants.RECEIVER_ADDRESS,
TaoBaoDataMethodConstants.ENCRYPT_ALI_PAY_ID);
TaoBaoEncryption.decrypt(miProperties, sessionKey, list, fieldName);
// 手机号码单独解密
TaoBaoEncryption.decrypt(miProperties, sessionKey, list, TaoBaoDataMethodConstants.PHONE,
Trade.class.getDeclaredField(TaoBaoDataMethodConstants.RECEIVER_MOBILE));
return list;
}
}

@ -8,21 +8,17 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.emoji.EmojiUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import com.hchbox.api.TaoBaoApiClient;
import com.hchbox.config.DataSourceConfiguration;
import com.hchbox.config.MiProperties;
import com.hchbox.constant.*;
import com.hchbox.dto.SellerAccountDTO;
import com.hchbox.entity.master.*;
import com.hchbox.entity.slaver.JdpTrade;
import com.hchbox.enums.AppSettingTypeEnum;
import com.hchbox.enums.RefundStatusEnum;
import com.hchbox.enums.ResponseCode;
import com.hchbox.enums.TradeEnum;
import com.hchbox.hander.message.TaoBaoMessage;
import com.hchbox.hander.message.TaoBaoRefundMessage;
import com.hchbox.hander.message.TaoBaoShipMessage;
@ -34,21 +30,17 @@ import com.hchbox.repository.master.TopOrderRegistry;
import com.hchbox.repository.master.TopTradeRepository;
import com.hchbox.service.*;
import com.hchbox.uitl.RemindTemplates;
import com.hchbox.uitl.TaoBaoEncryption;
import com.hchbox.util.*;
import com.hchbox.vo.PageVo;
import com.hchbox.vo.taobao.TaoBaoOrderResponseVO;
import com.hchbox.vo.taobao.TaoBaoOrderSearchVO;
import com.hchbox.vo.taobao.TradeDecryptVo;
import com.taobao.api.ApiException;
import com.taobao.api.SecretException;
import com.taobao.api.domain.Trade;
import com.taobao.api.internal.util.TaobaoUtils;
import com.taobao.api.request.TopOaidDecryptRequest;
import com.taobao.api.request.TradesSoldGetRequest;
import com.taobao.api.response.TopOaidDecryptResponse;
import com.taobao.api.response.TradeFullinfoGetResponse;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
@ -103,6 +95,8 @@ public class TopTradeServiceImpl implements TopTradeService {
private final SellerAccountService sellerAccountService;
private final TaoBaoRdsPushService taoBaoRdsPushService;
private final PageUtils<TaoBaoOrderResponseVO> pageUtils;
private final TaskMessageInfoService taskMessageInfoService;
@ -153,7 +147,7 @@ public class TopTradeServiceImpl implements TopTradeService {
topTrade.setUserId(
sellerAccountDTO.getParentId() != DefaultNumberConstants.ZERO_NUMBER
? sellerAccountDTO.getParentId() :
sellerAccountDTO.getId());
sellerAccountDTO.getId());
topTrade.setId(GenerateIdUtils.generateLongId());
topTradeRepository.save(topTrade);
topOrderService.bulkInsertOrder(tid, topTrade.getSellerNick(), topTrade.getId(), topOrders);
@ -375,7 +369,7 @@ public class TopTradeServiceImpl implements TopTradeService {
}
// 6.提交旺旺提醒任务
sendMessageRemind(appSettingTypeEnum.getType(),message.getBuyerNick(), message.getTid(), status, templateStr, setting, subNickList, sellerAccount);
sendMessageRemind(appSettingTypeEnum.getType(), message.getBuyerNick(), message.getTid(), status, templateStr, setting, subNickList, sellerAccount);
return Boolean.TRUE;
}
@ -384,7 +378,7 @@ public class TopTradeServiceImpl implements TopTradeService {
// TODO 使用本地数据
TopTrade trade = topTradeRepository.findByTid(tid);
if (trade != null) {
topTradeRepository.updateOrderStatus(orderStatus, tid,DateUtil.date());
topTradeRepository.updateOrderStatus(orderStatus, tid, DateUtil.date());
// 订单支付成功
if (type.equals(AppSettingTypeEnum.PAYMENT_SUCCESSFUL.getType())) {
@ -447,8 +441,8 @@ public class TopTradeServiceImpl implements TopTradeService {
// 放入缓存
String timeFormat = sellerAccountDTO.getId()
.toString()
.concat(StrUtil.DASHED)
.concat(TimeUtil.timeFormat());
.concat(StrUtil.DASHED)
.concat(TimeUtil.timeFormat());
Map<String, String> sendMessageCache = cacheManagerUtil.getCache
(MessageConstants.SEND_MESSAGE_KEY, timeFormat);
if (CollectionUtils.isEmpty(sendMessageCache)) {
@ -611,4 +605,37 @@ public class TopTradeServiceImpl implements TopTradeService {
}
@Override
@SneakyThrows
public CommonResult<String> synchronizeOrdersByNickname(SellerAccountDTO sellerAccount, String nickname, Date date, DateTime date1) {
/*for (Trade trade : list) {
// 判断账号
if (sellerAccount.getStatus() == DefaultNumberConstants.ONE_NUMBER) {
syncTask = new TopTrade();
BeanUtil.copyProperties(trade, syncTask);
List<TopOrder> topOrders = CommConverter.CommConverter(trade.getOrders(), TopOrder.class);
boolean createResult = createTrade(syncTask, sellerAccount, topOrders);
if (createResult && Boolean.TRUE.equals(TradeEnum.checkStatus(trade.getStatus()))) {
memberService.synMemberByTrade(syncTask);
}
}
// 修改同步数量
int messageCount = sellerAccount.getMessageCount() != null ?
sellerAccount.getMessageCount() : DefaultNumberConstants.ZERO_NUMBER;
int totalAmount = messageCount + list.size();
sellerAccountService.updateMessageCount(sellerAccount.getId(), totalAmount);
if (sellerAccount.getMassNum() != null
&& sellerAccount.getMassNum() > DefaultNumberConstants.ZERO_NUMBER
&& totalAmount > sellerAccount.getMassNum()) {
// 删除数据推送
// taoBaoRdsPushService.deletePushUser(sellerNick);
// 修改账号状态
sellerAccountService.updateAccountStatusAndExpiration
(sellerAccount.getId(), DefaultNumberConstants.MINUS_ONE_NUMBER, DateUtil.date());
}
}*/
return CommonResult.successfulOperation();
}
}

@ -4,8 +4,8 @@ import com.hchbox.entity.master.TopTrade;
import com.hchbox.entity.master.UserOaidInfo;
import com.hchbox.repository.master.UserOaidInfoRepository;
import com.hchbox.service.UserOaidInfoService;
import groovy.util.logging.Slf4j;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**

Loading…
Cancel
Save