diff --git a/service/trade-service-source/trade-service-source-core/src/main/java/com/hchbox/controller/TopTradeController.java b/service/trade-service-source/trade-service-source-core/src/main/java/com/hchbox/controller/TopTradeController.java index 1fbe66e..1a12fcd 100644 --- a/service/trade-service-source/trade-service-source-core/src/main/java/com/hchbox/controller/TopTradeController.java +++ b/service/trade-service-source/trade-service-source-core/src/main/java/com/hchbox/controller/TopTradeController.java @@ -1,20 +1,16 @@ 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 cn.hutool.core.convert.Convert; 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.*; -import com.hchbox.util.CommConverter; +import com.hchbox.util.CacheManagerUtil; import com.hchbox.vo.PageVo; import com.hchbox.vo.taobao.TaoBaoOrderResponseVO; import com.hchbox.vo.taobao.TaoBaoOrderSearchVO; @@ -22,19 +18,16 @@ 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.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -55,6 +48,8 @@ public class TopTradeController { private final JdpTradeService jdpTradeService; + private final CacheManagerUtil cacheManagerUtil; + private final TaoBaoTradeService taoBaoTradeService; private final TaoBaoRdsPushService taoBaoRdsPushService; @@ -112,59 +107,43 @@ public class TopTradeController { return topTradeService.decryptList(sellerAccountDTO, decryptVoList); } - @GetMapping("/synchronizeOrders") - @DS(DataSourceConfiguration.SHARDING_DATASOURCE_NAME) - public CommonResult synchronizeOrders(@RequestParam("nickname") String nickname, - @RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date) + @GetMapping("/queryTrade") + public CommonResult queryTrade(@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); + SellerAccountDTO accountByNick = + sellerAccountService.getAccountByNick(nickname); if (accountByNick == null) { return new CommonResult().accountException(); } - DynamicDataSourceContextHolder.push("slave"); - List jdpOrderList = jdpTradeService.findJdpOrderByTime(date, DateUtil.date()); - List 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()); + return topTradeService.queryTrade(accountByNick, date); + } - if (CollectionUtils.isNotEmpty(list)) { - DynamicDataSourceContextHolder.push(DataSourceConfiguration.SHARDING_DATASOURCE_NAME); - for (Trade trade : list) { + @GetMapping("/synchronizeTrade") + public CommonResult synchronizeTrade(@RequestParam("nickname") String nickname) { + SellerAccountDTO accountByNick = + sellerAccountService.getAccountByNick(nickname); + if (accountByNick == null) { + return new CommonResult().accountException(); + } + List tradeCache = cacheManagerUtil.getCache + ("TradeCache", accountByNick.getId()); + if (!CollectionUtils.isEmpty(tradeCache)) { + for (Trade trade : tradeCache) { // 判断账号 if (accountByNick.getStatus() == DefaultNumberConstants.ONE_NUMBER) { - TopTrade topTrade = new TopTrade(); - BeanUtil.copyProperties(trade, topTrade); - List topOrders = CommConverter.CommConverter(trade.getOrders(), TopOrder.class); - boolean createResult = topTradeService.createTrade(topTrade, accountByNick, topOrders); + TopTrade syncTask = new TopTrade(); + BeanUtil.copyProperties(trade, syncTask); + List topOrders = Convert.toList(TopOrder.class, trade.getOrders()); + boolean createResult = topTradeService.createTrade(syncTask, accountByNick, topOrders); if (createResult && Boolean.TRUE.equals(TradeEnum.checkStatus(trade.getStatus()))) { - memberService.synMemberByTrade(topTrade); + memberService.synMemberByTrade(syncTask); } } - // 修改同步数量 - 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(); + return topTradeService.synchronizeOrders(accountByNick, tradeCache.size()); } -} \ No newline at end of file + +} diff --git a/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/TaoBaoTradeService.java b/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/TaoBaoTradeService.java index c6a1866..6afd8c0 100644 --- a/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/TaoBaoTradeService.java +++ b/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/TaoBaoTradeService.java @@ -1,6 +1,7 @@ package com.hchbox.service; import com.hchbox.dto.SellerAccountDTO; +import com.hchbox.entity.master.TopTrade; import com.taobao.api.SecretException; import com.taobao.api.domain.Trade; import com.taobao.api.request.TradesSoldGetRequest; @@ -30,10 +31,13 @@ public interface TaoBaoTradeService { Trade getFullInfoByTid(Long tid, String sessionKey); /** - * 解密订单信息 + * 订单解密信息 * @param list * @param sessionKey * @return + * @throws SecretException + * @throws NoSuchFieldException + * @throws IllegalAccessException */ List decryptInformation(List list, String sessionKey) throws SecretException, NoSuchFieldException, IllegalAccessException; } diff --git a/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/TopTradeService.java b/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/TopTradeService.java index 1d29f88..f20a4d6 100644 --- a/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/TopTradeService.java +++ b/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/TopTradeService.java @@ -2,7 +2,6 @@ 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; @@ -15,6 +14,8 @@ 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,15 +119,25 @@ public interface TopTradeService { */ TopTrade findByTid(Long tid); + /** - * 昵称同步数据 - * - * @param sellerAccount - * @param nickname - * @param date - * @param date1 + * 同步订单 + * @param accountByNick + * @param synchronizeSize * @return */ - CommonResult synchronizeOrdersByNickname(SellerAccountDTO sellerAccount, String nickname, Date date, DateTime date1); + CommonResult synchronizeOrders(SellerAccountDTO accountByNick, int synchronizeSize); + + /** + * 缓存存放 + * @param accountDTO + * @param startTime + * @return + * @throws ApiException + * @throws SecretException + * @throws NoSuchFieldException + * @throws IllegalAccessException + */ + CommonResult queryTrade(SellerAccountDTO accountDTO, Date startTime) throws ApiException, SecretException, NoSuchFieldException, IllegalAccessException; } diff --git a/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/JdpTradeServiceImpl.java b/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/JdpTradeServiceImpl.java index 87d4800..4375e82 100644 --- a/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/JdpTradeServiceImpl.java +++ b/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/JdpTradeServiceImpl.java @@ -15,8 +15,8 @@ import java.util.List; * @author Enzo * @date : 2021/6/23 */ -@DS("slave") @Service +@DS("slave") @RequiredArgsConstructor public class JdpTradeServiceImpl implements JdpTradeService { diff --git a/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/TaoBaoTradeServiceImpl.java b/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/TaoBaoTradeServiceImpl.java index 8323d76..0d79853 100644 --- a/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/TaoBaoTradeServiceImpl.java +++ b/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/TaoBaoTradeServiceImpl.java @@ -6,6 +6,7 @@ import com.hchbox.config.MiProperties; import com.hchbox.constant.FieldConstants; import com.hchbox.constant.TaoBaoDataMethodConstants; import com.hchbox.dto.SellerAccountDTO; +import com.hchbox.entity.master.TopTrade; import com.hchbox.service.TaoBaoTradeService; import com.hchbox.uitl.TaoBaoEncryption; import com.taobao.api.SecretException; diff --git a/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/TopTradeServiceImpl.java b/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/TopTradeServiceImpl.java index 3d38dc8..7d02d98 100644 --- a/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/TopTradeServiceImpl.java +++ b/service/trade-service-source/trade-service-source-taobao/src/main/java/com/hchbox/service/impl/TopTradeServiceImpl.java @@ -16,6 +16,7 @@ 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; @@ -35,10 +36,14 @@ 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; @@ -86,9 +91,6 @@ public class TopTradeServiceImpl implements TopTradeService { private final AppSettingService appSettingService; - /** - * 最高贸易库 - */ private final TopTradeRepository topTradeRepository; private final TaoBaoTradeService taoBaoTradeService; @@ -141,6 +143,7 @@ public class TopTradeServiceImpl implements TopTradeService { public Boolean createTrade(TopTrade topTrade, SellerAccountDTO sellerAccountDTO, List topOrders) { if (topTrade.getTid() != null) { Long tid = topTrade.getTid(); + Integer byTid = topTradeRepository.countByTid(tid); if (byTid == null || byTid == DefaultNumberConstants.ZERO_NUMBER) { // 设置账户 @@ -375,7 +378,6 @@ public class TopTradeServiceImpl implements TopTradeService { private void sendMessageRemind(Integer type, String buyerNick, Long tid, String orderStatus, String template, AppSetting setting, List sendNickList, SellerAccountDTO sellerAccountDTO) { - // TODO 使用本地数据 TopTrade trade = topTradeRepository.findByTid(tid); if (trade != null) { topTradeRepository.updateOrderStatus(orderStatus, tid, DateUtil.date()); @@ -604,36 +606,44 @@ public class TopTradeServiceImpl implements TopTradeService { return topTradeRepository.findByTid(tid); } + @Override + public CommonResult synchronizeOrders(SellerAccountDTO sellerAccount, int synchronizeSize) { + // 修改同步数量 + int messageCount = sellerAccount.getMessageCount() != null ? + sellerAccount.getMessageCount() : DefaultNumberConstants.ZERO_NUMBER; + int totalAmount = messageCount + synchronizeSize; + sellerAccountService.updateMessageCount(sellerAccount.getId(), totalAmount); + if (sellerAccount.getMassNum() != null + && sellerAccount.getMassNum() > DefaultNumberConstants.ZERO_NUMBER + && totalAmount > sellerAccount.getMassNum()) { + // 删除数据推送 + taoBaoRdsPushService.deletePushUser(sellerAccount.getNickname()); + // 修改账号状态 + sellerAccountService.updateAccountStatusAndExpiration + (sellerAccount.getId(), DefaultNumberConstants.MINUS_ONE_NUMBER, DateUtil.date()); + } + cacheManagerUtil.evictCache("TradeCache", sellerAccount.getId().toString()); + return CommonResult.successfulOperation(); + } + @Override - @SneakyThrows - public CommonResult 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 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); - } + public CommonResult queryTrade(SellerAccountDTO accountDTO, Date startTime) + throws ApiException, SecretException, NoSuchFieldException, IllegalAccessException { + List jdpOrderList = + jdpTradeService.findJdpOrderByTime(startTime, DateUtil.date()); + List 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()); } - // 修改同步数量 - 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()); - } - }*/ + } + // 订单解密 + list = taoBaoTradeService.decryptInformation(list, accountDTO.getSessionKey()); + cacheManagerUtil.putCache("TradeCache", accountDTO.getId(), list); return CommonResult.successfulOperation(); }