facade-goods/facade-goods.iml
@@ -18,7 +18,7 @@ <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="library" name="javas" level="project" /> <orderEntry type="module" module-name="facede-common" /> <orderEntry type="module" module-name="utils" /> <orderEntry type="library" name="Maven: com.yeshi:utils:0.0.1-SNAPSHOT" level="project" /> <orderEntry type="library" name="Maven: com.opencsv:opencsv:4.3.2" level="project" /> <orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.3" level="project" /> <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.2" level="project" /> facede-common/facede-common.iml
@@ -17,7 +17,7 @@ <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="library" name="javas" level="project" /> <orderEntry type="module" module-name="utils" /> <orderEntry type="library" name="Maven: com.yeshi:utils:0.0.1-SNAPSHOT" level="project" /> <orderEntry type="library" name="Maven: com.opencsv:opencsv:4.3.2" level="project" /> <orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.3" level="project" /> <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.2" level="project" /> fanli/src/main/java/com/yeshi/fanli/controller/client/v2/TuanYouController.java
New file @@ -0,0 +1,38 @@ package com.yeshi.fanli.controller.client.v2; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.util.TuanYouUtil; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.yeshi.utils.JsonUtil; import javax.annotation.Resource; import java.io.PrintWriter; @Controller @RequestMapping("api/v2/tuanyou") public class TuanYouController { @Resource private UserInfoService userInfoService; /** * @param acceptData * @param uid */ @RequestMapping(value = "getAuthCode") public void getAuthCode(AcceptData acceptData, Long uid, PrintWriter out) { UserInfo userInfo = userInfoService.selectByPKey(uid); if (userInfo != null) { String code = TuanYouUtil.getAuthCode(userInfo.getPhone()); out.print(JsonUtil.loadTrueResult(code)); return; } out.print(JsonUtil.loadFalseResult("获取授权码失败")); } } fanli/src/main/java/com/yeshi/fanli/dao/user/UserGoodsChannelConfigDao.java
New file @@ -0,0 +1,28 @@ package com.yeshi.fanli.dao.user; import com.yeshi.common.MongodbBaseDao; import com.yeshi.fanli.entity.goods.UserGoodsChannelConfig; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Repository; import java.util.Date; @Repository public class UserGoodsChannelConfigDao extends MongodbBaseDao<UserGoodsChannelConfig> { public void updateSelective(UserGoodsChannelConfig config) { Query query = new Query(); query.addCriteria(Criteria.where("uid").is(config.getUid())); Update update = new Update(); if (config.getPddFanliCustomerParams() != null) { update.set("pddFanliCustomerParams", config.getPddFanliCustomerParams()); } config.setUpdateTime(new Date()); update(query, update); } } fanli/src/main/java/com/yeshi/fanli/entity/goods/UserGoodsChannelConfig.java
New file @@ -0,0 +1,56 @@ package com.yeshi.fanli.entity.goods; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import java.util.Date; /** * 商品渠道配置 */ @Document(collection = "userGoodsChannelConfig") public class UserGoodsChannelConfig { @Id private Long uid; //拼多多自购的CustomerParams private String pddFanliCustomerParams; private Date createTime; private Date updateTime; public Long getUid() { return uid; } public void setUid(Long uid) { this.uid = uid; } public String getPddFanliCustomerParams() { return pddFanliCustomerParams; } public void setPddFanliCustomerParams(String pddFanliCustomerParams) { this.pddFanliCustomerParams = pddFanliCustomerParams; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } } fanli/src/main/java/com/yeshi/fanli/job/JobDefend.java
New file @@ -0,0 +1,29 @@ package com.yeshi.fanli.job; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; import com.yeshi.fanli.service.manger.JobManager; import org.springframework.stereotype.Component; import javax.annotation.Resource; @Component public class JobDefend { @Resource private JobManager jobManager; /** * 维护job * * @param param * @return * @throws Exception */ @XxlJob("jobDefend-defend") public ReturnT<String> defend(String param) throws Exception { jobManager.repaire(); return ReturnT.SUCCESS; } } fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java
@@ -438,14 +438,12 @@ * * @param extract * @param msg * @param session */ @Transactional private void extractFail(Extract extract, String msg) { private void extractFail(Extract extract, String subCode, String msg) { UserInfo user = extract.getUserInfo(); // MoneyRecord moneyRecord = new MoneyRecord(user, null, extract // .getMoney(), "提现", "提现失败", new Date().getTime(), 3); if ("付款方余额不足".equals(msg)) { if ("PAYER_BALANCE_NOT_ENOUGH".equals(subCode)) { Extract updateExtract = new Extract(); updateExtract.setId(extract.getId()); updateExtract.setState(Constant.EXTRACT_DEFUALT); @@ -671,10 +669,10 @@ if ("10000".equals(code)) { extractSuccess(extract, response.getOrderId()); } else { extractFail(extract, response.getSubMsg()); extractFail(extract, response.getSubCode(), response.getSubMsg()); } } else { extractFail(extract, response.getSubMsg()); extractFail(extract, response.getSubCode(), response.getSubMsg()); } PayInfo payInfo = new PayInfo(); payInfo.setBizno(response.getOutBizNo()); fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -14,6 +14,7 @@ import javax.annotation.Resource; import com.yeshi.fanli.service.manger.order.TeamRewardManager; import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -1069,10 +1070,10 @@ public void processPDDOrder(PDDOrder pddOrder) { if (pddOrder == null) return; String uidStr = pddOrder.getCustomParameters(); String customParameters = pddOrder.getCustomParameters(); Long uid = null; if (!StringUtil.isNullOrEmpty(uidStr)) uid = Long.parseLong(uidStr); if (!StringUtil.isNullOrEmpty(customParameters)) uid = Long.parseLong(PinDuoDuoUtil.getUidFromCustomParams(customParameters)); String positionId = pddOrder.getpId(); if (PinDuoDuoApiUtil.PID_FANLI.equalsIgnoreCase(positionId))// 返利订单 { fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java
@@ -15,7 +15,9 @@ import javax.annotation.Resource; import com.yeshi.fanli.dao.user.UserGoodsChannelConfigDao; import com.yeshi.fanli.entity.SystemEnum; import com.yeshi.fanli.entity.goods.UserGoodsChannelConfig; import com.yeshi.fanli.util.*; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -546,6 +548,7 @@ /** * 邀请关系生成激活码 * * @param uid * @param bossId * @return @@ -596,7 +599,6 @@ return inviteCode; } @Override @@ -883,4 +885,17 @@ } } @Resource private UserGoodsChannelConfigDao userGoodsChannelConfigDao; @Override public String getPddFanliCustomerParams(Long uid) { UserGoodsChannelConfig config = userGoodsChannelConfigDao.get(uid); if (config == null || StringUtil.isNullOrEmpty(config.getPddFanliCustomerParams())) { return uid + ""; } return config.getPddFanliCustomerParams(); } } fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoExtraService.java
@@ -202,5 +202,9 @@ * @param uid */ public void uploadERCode(MultipartFile file, Long uid); public String getPddFanliCustomerParams(Long uid); } fanli/src/main/java/com/yeshi/fanli/service/manger/JobManager.java
New file @@ -0,0 +1,1325 @@ package com.yeshi.fanli.service.manger; import com.google.gson.Gson; import com.yeshi.fanli.dto.ad.DouYinDeviceActiveQueueDTO; import com.yeshi.fanli.dto.money.UserMoneyChangeDTO; import com.yeshi.fanli.dto.mq.UidDateDTO; import com.yeshi.fanli.dto.push.PushContentDetailDTO; import com.yeshi.fanli.entity.ad.DouYinClickEvent; import com.yeshi.fanli.entity.bus.user.*; import com.yeshi.fanli.entity.jd.JDOrder; import com.yeshi.fanli.entity.order.CommonOrder; import com.yeshi.fanli.entity.order.HongBaoOrder; import com.yeshi.fanli.entity.pdd.PDDOrder; import com.yeshi.fanli.entity.push.DeviceActive; import com.yeshi.fanli.entity.push.PushQueueRecord; import com.yeshi.fanli.entity.suning.SuningOrderInfo; import com.yeshi.fanli.entity.taobao.TaoBaoOrder; import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder; import com.yeshi.fanli.entity.vipshop.VipShopOrder; import com.yeshi.fanli.exception.order.TaoBaoWeiQuanException; import com.yeshi.fanli.exception.order.dividents.TeamDividentsRecordException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.impl.JobThreadExecutorServiceImpl; import com.yeshi.fanli.service.inter.ad.DouYinClickEventService; import com.yeshi.fanli.service.inter.lable.BoutiqueAutoRuleService; import com.yeshi.fanli.service.inter.money.UserMoneyDebtService; import com.yeshi.fanli.service.inter.money.extract.ExtractService; import com.yeshi.fanli.service.inter.order.CommonOrderService; import com.yeshi.fanli.service.inter.order.HongBaoOrderService; import com.yeshi.fanli.service.inter.order.HongBaoV2Service; import com.yeshi.fanli.service.inter.order.OrderProcessService; import com.yeshi.fanli.service.inter.order.jd.JDOrderService; import com.yeshi.fanli.service.inter.order.pdd.PDDOrderService; import com.yeshi.fanli.service.inter.order.suning.SuningOrderService; import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService; import com.yeshi.fanli.service.inter.order.vipshop.VipShopOrderService; import com.yeshi.fanli.service.inter.push.DeviceActiveService; import com.yeshi.fanli.service.inter.push.HWPushService; import com.yeshi.fanli.service.inter.push.IOSPushService; import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService; import com.yeshi.fanli.service.inter.user.integral.IntegralGetService; import com.yeshi.fanli.service.inter.user.integral.IntegralTaskRecordService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; import com.yeshi.fanli.service.manger.money.TeamEincomeManager; import com.yeshi.fanli.service.manger.order.TeamDividentsManager; import com.yeshi.fanli.util.CMQManager; import com.yeshi.fanli.util.RedisKeyEnum; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.ad.DouYinAdUtil; import com.yeshi.fanli.util.mq.cmq.DouYinDeviceActiveCMQManager; import com.yeshi.fanli.util.mq.cmq.HongBaoRecieveCMQManager; import com.yeshi.fanli.util.mq.cmq.PushCMQManager; import com.yeshi.fanli.util.mq.cmq.UserMoneyChangeCMQManager; import com.yeshi.fanli.util.mq.cmq.order.*; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief; import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Component; import org.yeshi.utils.NumberUtil; import org.yeshi.utils.TimeUtil; import javax.annotation.Resource; import java.lang.reflect.Method; import java.math.BigDecimal; import java.util.*; @Component public class JobManager { @Resource private BoutiqueAutoRuleService boutiqueAutoRuleService; @Resource private ExtractService extractService; @Resource private IOSPushService iosPushService; @Resource(name = "taskExecutor") private TaskExecutor executor; @Resource private OrderProcessService orderProcessService; @Resource private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService; @Resource private ThreeSaleSerivce threeSaleSerivce; @Resource private TaoBaoOrderService taoBaoOrderService; @Resource private RedisManager redisManager; @Resource private UserMoneyDebtService userMoneyDebtService; @Resource private JDOrderService jdOrderService; @Resource private PDDOrderService pddOrderService; @Resource private HongBaoV2Service hongBaoV2Service; @Resource private IntegralGetService integralGetService; @Resource private CommonOrderService commonOrderService; @Resource private HongBaoOrderService hongBaoOrderService; @Resource private IntegralTaskRecordService integralTaskRecordService; @Resource private DeviceActiveService deviceActiveService; @Resource private TeamDividentsManager teamDividentsManager; @Resource private TeamEincomeManager teamEincomeManager; @Resource private VipShopOrderService vipShopOrderService; @Resource private SuningOrderService suningOrderService; @Resource private HWPushService hwPushService; private Map<String, Long> latestRunTimeMap = new HashMap<>(); class MyRunnable implements Runnable { private String method; public MyRunnable(String methodName) { this.method = methodName; } @Override public void run() { latestRunTimeMap.put(method, System.currentTimeMillis()); } } /** * 开始任务 */ public void start() { doExtractResult();// 处理提现结果 doTaoBaoOrders();// 处理淘宝订单 doTaoBaoNewOrders();// 处理淘宝订单(刚刚产生的) doOrderFanLiNew();// 新版返利 doOrderShareFanLi(); doWeiQuanOrder();// 处理维权订单 doPushIOS();// 处理发送IOS消息 doUserMoneyDebtJob();// 债务偿还 initScheduler();// 启动商品更新定时任务 doUpdateGoodsJob(); // 更新商品队列 doJDOrderJob();// 京东订单处理 doPDDOrderJob();// 拼多多订单处理 doVipShopOrderJob();// 唯品会订单处理 doSuningOrderJob();// 苏宁订单处理 doImportantTaoBaoGoodsUpdateJob();// 淘宝重要商品的信息更新 doHongBaoRecieveIntegralGetJob();// 返利到账,金币增加 // doPlaceOrderIntegralJob();// 下单赠送金币任务 // doDouYinDeviceActiveJob();// 抖音设备激活广告监测 doOrderTeamIncomePreFanLi();// 处理订单提成返利 doDividentsPreJob(); doOrderTeamRewardFanLi(); doDividentsJob(); //华为推送 doHWPushJob(); } /** * 修复未运行的 */ public void repaire() { for (Iterator<String> its = latestRunTimeMap.keySet().iterator(); its.hasNext(); ) { String methodName = its.next(); //15分钟以上的需要修复 if (System.currentTimeMillis() - latestRunTimeMap.get(methodName).longValue() > 1000 * 60 * 15L) { try { Method method = this.getClass().getMethod(methodName); method.invoke(this); } catch (Exception e) { } } } } /** * 获取方法名称 * * @param thread * @return */ private String getMethodName(Thread thread) { return thread.getStackTrace()[2].getMethodName(); } /** * 处理提现结果的队列 */ public void doExtractResult() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, AlipayTransferResultInfo> map = CMQManager.getInstance().consumeExtractResultMsg(1); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { extractService.processExtractResult(map.get(key)); CMQManager.getInstance().deleteExtractResultMsg(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * 处理淘宝订单 */ public void doTaoBaoOrders() { String methodName = getMethodName(Thread.currentThread()); // 同时开启3个线程处理 for (int i = 0; i < 3; i++) { new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { // 取16个订单 List<String> orderIds = CMQManager.getInstance().consumeTaoBaoOrderMsg(16); if (orderIds != null) { for (String orderId : orderIds) { if (NumberUtil.isNumeric(orderId.trim())) { Map<String, List<TaoBaoOrder>> map = new HashMap<>(); List<TaoBaoOrder> orderList = taoBaoOrderService .getTaoBaoOrderByOrderId(orderId); map.put(orderId, orderList); LogHelper.orderInfo("开始处理订单:" + orderId); orderProcessService.processOrder(map); LogHelper.orderInfo("结束处理订单:" + orderId); } } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { } } } }); } } /** * 刚刚产生的订单 */ public void doTaoBaoNewOrders() { String methodName = getMethodName(Thread.currentThread()); // 同时开启3个线程处理 for (int i = 0; i < 1; i++) { new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { // 取16个订单 List<String> orderIds = CMQManager.getInstance().consumeTaoBaoNewOrderMsg(16); Map<String, List<TaoBaoOrder>> map = new HashMap<>(); if (orderIds != null) { for (String orderId : orderIds) { List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId); map.put(orderId, orderList); LogHelper.orderInfo("新订单-开始处理订单:" + orderId); long startTime = System.currentTimeMillis(); orderProcessService.processOrder(map); LogHelper.orderInfo("新订单-结束处理订单:" + orderId + "- 处理时间:" + (System.currentTimeMillis() - startTime)); } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { } } } }); } } /** * 处理新版淘宝订单返利 */ public void doOrderFanLiNew() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, HongBaoV2> map = CMQManager.getInstance().consumeFanLiMsgNew(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { HongBaoV2 hongbao = map.get(handler); if (hongbao != null) { String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.hongBaoFanLi, hongbao.getId() + ""); if (StringUtil.isNullOrEmpty(redisManager.getCommonString(key))) { // 处理之后要隔2小时再次进行处理 redisManager.cacheCommonString(key, "1", 60 * 60 * 2); orderProcessService.fanli(map.get(handler)); } } CMQManager.getInstance().deleteFanLiMsgNew(handler); } catch (TaoBaoWeiQuanException e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } catch (Exception e) { try { LogHelper.errorDetailInfo(e, "HongBaoV2-ID:" + map.get(handler).getId(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * 处理团队订单返利 */ public void doOrderTeamIncomePreFanLi() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, UidDateDTO> map = TeamOrderCMQManager.getInstance() .consumeFanLiTeamIncomePreMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { UidDateDTO dto = map.get(handler); orderProcessService.fanliPreInvaite(dto.getUid(), dto.getDate()); TeamOrderCMQManager.getInstance().deleteTeamIncomePreMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e, new Gson().toJson(map.get(handler)).toString(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * 处理团队奖金返利 */ public void doOrderTeamRewardFanLi() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, UidDateDTO> map = TeamOrderCMQManager.getInstance().consumeFanLiTeamIncomeMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { UidDateDTO dto = map.get(handler); teamEincomeManager.addTeamRewardTOUserAccount(dto.getDate(), dto.getUid()); TeamOrderCMQManager.getInstance().deleteTeamIncomeMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e, map.get(handler).toString(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * 处理分享订单返利 */ public void doOrderShareFanLi() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, UidDateDTO> map = CMQManager.getInstance().consumeFanLiShareMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { UidDateDTO dto = map.get(handler); orderProcessService.fanliShare(dto.getUid(), dto.getDate()); CMQManager.getInstance().deleteFanLiShareMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e, map.get(handler).toString(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * 处理淘宝订单维权 */ public void doWeiQuanOrder() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, TaoBaoWeiQuanOrder> map = CMQManager.getInstance().consumeWeiQuanOrderMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { orderProcessService.weiQuanOrder(map.get(handler)); CMQManager.getInstance().deleteWeiQuanOrderMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * IOS 推送消息 */ public void doPushIOS() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, PushQueueRecord> map = CMQManager.getInstance().consumeIOSPushMsg(10); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { iosPushService.readyPushIOS(map.get(key)); CMQManager.getInstance().deleteIOSPushMsg(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { LogHelper.errorDetailInfo(e); } } }); } /** * 创建Scheduler()执行自动爬取 */ private void initScheduler() { boutiqueAutoRuleService.startScheduler(); } /** * 更新精选库商品 */ public void doUpdateGoodsJob() { String methodName = getMethodName(Thread.currentThread()); for (int i = 0; i < 1; i++) new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, Long> map = CMQManager.getInstance().consumeNeedUpdateTaoBaoGoodsIdMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); taoBaoGoodsUpdateService.updateByTaoKeGoodsDetail(Long.parseLong(key)); CMQManager.getInstance().deleteNeedUpdateTaoBaoGoodsIdMsg(key); } } } catch (Exception e) { e.printStackTrace(); LogHelper.error("更新商品出错:" + e.getMessage()); } } }); } /** * 用户借贷处理 */ public void doUserMoneyDebtJob() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, UserMoneyChangeDTO> map = UserMoneyChangeCMQManager.getInstance() .consumeQueueMsg(UserMoneyChangeCMQManager.QUEUE_DEBT, 16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { UserMoneyChangeDTO dto = map.get(key); if (dto != null && dto.getChangeMoney().compareTo(new BigDecimal(0)) > 0) { userMoneyDebtService.repayDebt(dto.getUid()); } UserMoneyChangeCMQManager.getInstance() .deleteQueueMsg(UserMoneyChangeCMQManager.QUEUE_DEBT, key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { LogHelper.error("还款出错:" + e.getMessage()); } } }); } public void doJDOrderJob() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, String> map = JDOrderCMQManager.getInstance().consumeJDOrder(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { String orderId = map.get(key); if (!StringUtil.isNullOrEmpty(orderId)) { JDOrder order = jdOrderService.selectDetailByOrderId(Long.parseLong(orderId)); orderProcessService.processJDOrder(order); } JDOrderCMQManager.getInstance().deleteJDOrder(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { LogHelper.error("拼多多订单出错:" + e.getMessage()); } } }); } public void doPDDOrderJob() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, String> map = PDDOrderCMQManager.getInstance().consumePDDOrder(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { String orderId = map.get(key); if (!StringUtil.isNullOrEmpty(orderId)) { List<PDDOrder> orderList = pddOrderService.selectByOrderSn(orderId); if (orderList != null) for (PDDOrder order : orderList) orderProcessService.processPDDOrder(order); } PDDOrderCMQManager.getInstance().deletePDDOrder(key); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } } catch (Exception e) { LogHelper.error("拼多多订单:" + e.getMessage()); } } }); } public void doVipShopOrderJob() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, String> map = VipShopOrderCMQManager.getInstance().consumeVipShopOrder(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { String orderId = map.get(key); LogHelper.test("唯品会订单消费:" + orderId); if (!StringUtil.isNullOrEmpty(orderId)) { List<VipShopOrder> orderList = vipShopOrderService.listDetailByOrderSn(orderId); if (orderList != null) for (VipShopOrder order : orderList) orderProcessService.processVipShopOrder(order); } VipShopOrderCMQManager.getInstance().deleteVipShopOrder(key); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } } catch (Exception e) { LogHelper.errorDetailInfo(e); } } }); } public void doSuningOrderJob() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); try { Map<String, String> map = SuningOrderCMQManager.getInstance().consumeSuningOrder(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { String orderId = map.get(key); if (!StringUtil.isNullOrEmpty(orderId)) { List<SuningOrderInfo> orderList = suningOrderService.listByOrderCode(orderId); if (orderList != null) for (SuningOrderInfo order : orderList) orderProcessService.processSuningOrder(order); } SuningOrderCMQManager.getInstance().deleteSuningOrder(key); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } } catch (Exception e) { LogHelper.errorDetailInfo(e); } } }); } /** * 重要的淘宝商品信息更新 */ public void doImportantTaoBaoGoodsUpdateJob() { String methodName = getMethodName(Thread.currentThread()); // 开启2个线程做更新 for (int i = 0; i < 2; i++) new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); Map<String, Long> map = CMQManager.getInstance().consumeTBImpGoodsUpdateMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { long startTime = System.currentTimeMillis(); TaoBaoGoodsBrief goods = TaoKeApiUtil.searchGoodsDetail(map.get(key)); // 更新一条数据需要的时间 taoBaoGoodsUpdateService.updateTaoBaoGoods(goods); long time = System.currentTimeMillis() - startTime; LogHelper.test("淘宝重要商品库更新时间:" + time); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { CMQManager.getInstance().deleteTBImpGoodsUpdateMsg(key); } } } } }); } /** * 红包到账后的金币获取 */ public void doHongBaoRecieveIntegralGetJob() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); Map<String, Long> map = HongBaoRecieveCMQManager.getInstance() .consumeQueueMsg(HongBaoRecieveCMQManager.QUEUE_INTEGRAL, 16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); Long hongBaoId = map.get(key); try { HongBaoV2 hongBaoV2 = hongBaoV2Service.selectByPrimaryKey(hongBaoId); if (hongBaoV2 != null && hongBaoV2.getState() == HongBaoV2.STATE_YILINGQU && hongBaoV2.getMoney().compareTo(new BigDecimal(0)) > 0) { // 到账送金币 fanliGetIntegral(hongBaoV2); HongBaoRecieveCMQManager.getInstance() .deleteQueueMsg(HongBaoRecieveCMQManager.QUEUE_INTEGRAL, key); // 返利不足0.01元送金币 if (hongBaoV2.getType() == HongBaoV2.TYPE_ZIGOU) {// 自购 // 判断是否为该用户的首笔红包 List<Integer> typeList = new ArrayList<>(); typeList.add(HongBaoV2.TYPE_ZIGOU); HongBaoV2 firstHongBao = hongBaoV2Service.getFirstValidHongBaoByTypeAndUid( typeList, hongBaoV2.getUserInfo().getId()); if (firstHongBao != null && firstHongBao.getId().longValue() == hongBaoV2.getId()) {// 自购首单到账 // 查询下级红包 BigDecimal firstLevelMoney = new BigDecimal(0); BigDecimal secondLevelMoney = new BigDecimal(0); // 获取改单下面的红包 List<HongBaoV2> hongBaoList = new ArrayList<>(); HongBaoOrder hongBaoOrder = hongBaoOrderService .selectDetailByHongBaoId(hongBaoV2.getId()); if (hongBaoOrder != null && hongBaoOrder.getCommonOrder() != null) {// 计算改订单号下面的所有返利金额 CommonOrder commonOrder = hongBaoOrder.getCommonOrder(); List<CommonOrder> list = commonOrderService.listBySourceTypeAndOrderId( commonOrder.getSourceType(), commonOrder.getOrderNo()); for (CommonOrder co : list) { HongBaoOrder hbo = hongBaoOrderService .selectDetailByCommonOrderId(co.getId()); if (hbo != null && hbo.getHongBaoV2() != null) hongBaoList.add(hbo.getHongBaoV2()); } } for (HongBaoV2 hb : hongBaoList) { List<HongBaoV2> children = hongBaoV2Service .listChildrenById(hb.getId()); if (children != null) for (HongBaoV2 child : children) if (child.getType() == HongBaoV2.TYPE_YIJI) { firstLevelMoney = firstLevelMoney.add(child.getMoney()); } else if (child.getType() == HongBaoV2.TYPE_ERJI) { secondLevelMoney = secondLevelMoney.add(child.getMoney()); } } // 查询下级的生效时间 ThreeSale threeSale = threeSaleSerivce.selectLatestByWorkerIdAndState( hongBaoV2.getUserInfo().getId(), ThreeSale.STATE_SUCCESS); if (threeSale != null && threeSale.getSucceedTime() != null && threeSale .getSucceedTime() < hongBaoV2.getCreateTime().getTime()) {// 邀请成功的时间是否在下单的时间之前 // 成功时间要大于20190910日才开始送金币 if (threeSale.getSucceedTime() > TimeUtil.convertToTimeTemp("20190901", "yyyyMMdd")) { if (firstLevelMoney.compareTo(new BigDecimal("0.01")) < 0) {// 一级返利小于0.01 integralTaskRecordService.firstRebateOrderRewardBoss( threeSale.getBoss().getId(), hongBaoV2.getUserInfo().getId(), null); LogHelper.test("自购-一级用户-" + threeSale.getBoss().getId() + "-hongBaoId:" + hongBaoV2.getId()); } } } // 查询下下级生效时间 if (threeSale != null) { threeSale = threeSaleSerivce.selectLatestByWorkerIdAndState( threeSale.getBoss().getId(), ThreeSale.STATE_SUCCESS); if (threeSale != null && threeSale.getSucceedTime() != null && threeSale .getSucceedTime() < hongBaoV2.getCreateTime().getTime()) {// 邀请成功的时间是否在下单的时间之前 // 成功时间要大于20190910日才开始送金币 if (threeSale.getSucceedTime() > TimeUtil .convertToTimeTemp("20190901", "yyyyMMdd")) { if (secondLevelMoney.compareTo(new BigDecimal("0.01")) < 0) {// 二级返利小于0.01 integralTaskRecordService.firstRebateOrderRewardBossSuper( threeSale.getBoss().getId(), hongBaoV2.getUserInfo().getId(), null); LogHelper.test("自购-二级用户-" + threeSale.getBoss().getId() + "-hongBaoId:" + hongBaoV2.getId()); } } } } } } else if (hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_GOODS) {// 分享赚 // 判断是否为该用户的首笔红包 List<Integer> typeList = new ArrayList<>(); typeList.add(HongBaoV2.TYPE_SHARE_GOODS); HongBaoV2 firstHongBao = hongBaoV2Service.getFirstValidHongBaoByTypeAndUid( typeList, hongBaoV2.getUserInfo().getId()); if (firstHongBao != null && firstHongBao.getId().longValue() == hongBaoV2.getId()) // 分享首笔到账 { // 查询下级红包 BigDecimal firstLevelMoney = new BigDecimal(0); // 获取改单下面的红包 List<HongBaoV2> hongBaoList = new ArrayList<>(); HongBaoOrder hongBaoOrder = hongBaoOrderService .selectDetailByHongBaoId(hongBaoV2.getId()); if (hongBaoOrder != null && hongBaoOrder.getCommonOrder() != null) {// 计算改订单号下面的所有返利金额 CommonOrder commonOrder = hongBaoOrder.getCommonOrder(); List<CommonOrder> list = commonOrderService.listBySourceTypeAndOrderId( commonOrder.getSourceType(), commonOrder.getOrderNo()); for (CommonOrder co : list) { HongBaoOrder hbo = hongBaoOrderService .selectDetailByCommonOrderId(co.getId()); if (hbo != null && hbo.getHongBaoV2() != null) hongBaoList.add(hbo.getHongBaoV2()); } } for (HongBaoV2 hb : hongBaoList) { List<HongBaoV2> children = hongBaoV2Service .listChildrenById(hb.getId()); if (children != null) for (HongBaoV2 child : children) if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI) { firstLevelMoney = firstLevelMoney.add(child.getMoney()); } } ThreeSale threeSale = threeSaleSerivce.selectLatestByWorkerIdAndState( hongBaoV2.getUserInfo().getId(), ThreeSale.STATE_SUCCESS); if (threeSale != null && threeSale.getSucceedTime() != null && threeSale .getSucceedTime() < hongBaoV2.getCreateTime().getTime()) {// 邀请成功的时间是否在下单的时间之前 // 成功时间要大于20190910日才开始送金币 if (threeSale.getSucceedTime() > TimeUtil.convertToTimeTemp("20190901", "yyyyMMdd")) { if (firstLevelMoney.compareTo(new BigDecimal("0.01")) < 0) {// 一级返利小于0.01 integralTaskRecordService.firstSharerOrderRewardBoss( threeSale.getBoss().getId(), hongBaoV2.getUserInfo().getId(), null); LogHelper.test("分享-一级用户-" + threeSale.getBoss().getId() + "-hongBaoId:" + hongBaoV2.getId()); } } } } } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } }); } private void fanliGetIntegral(HongBaoV2 hongBaoV2) { if (hongBaoV2 != null && hongBaoV2.getState() == HongBaoV2.STATE_YILINGQU && hongBaoV2.getMoney().compareTo(new BigDecimal(0)) > 0) { // 查询对应的订单号 Long mainHongBaoId = hongBaoV2.getId(); if (hongBaoV2.getParent() != null && hongBaoV2.getParent().getId() != null) mainHongBaoId = hongBaoV2.getParent().getId(); HongBaoOrder hongbaoOrder = hongBaoOrderService.selectDetailByHongBaoId(mainHongBaoId); if (hongbaoOrder == null || hongbaoOrder.getCommonOrder() == null) return; CommonOrder commonOrder = hongbaoOrder.getCommonOrder(); if (hongBaoV2.getType() == HongBaoV2.TYPE_ZIGOU) {// 自购订单 integralGetService.addRebateOrder(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } else if (hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_GOODS) {// 分享订单 integralGetService.addShareOrder(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } else if (hongBaoV2.getType() == HongBaoV2.TYPE_YIJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_YIJI) {// 一级邀请 integralGetService.addInviteOrderLevelOne(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } else if (hongBaoV2.getType() == HongBaoV2.TYPE_ERJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_ERJI) {// 二级邀请 integralGetService.addInviteOrderLevelTwo(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } } } private boolean isFirstValidOrder(String orderId, int sourceType, Long uid) { CommonOrder commonOrder = commonOrderService.selectLatestValidByUid(uid); if (commonOrder != null && commonOrder.getOrderNo().equalsIgnoreCase(orderId) && sourceType == commonOrder.getSourceType()) return true; else return false; } // 下单获取金币任务 public void doPlaceOrderIntegralJob() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); Map<String, Order> map = PlaceOrderCMQManager.getInstance() .consumeQueueMsg(PlaceOrderCMQManager.QUEUE_INTEGRAL, 16); if (map != null) { for (Iterator<String> its = map.keySet().iterator(); its.hasNext(); ) { try { String key = its.next(); Order order = map.get(key); // 是否是首单 if (isFirstValidOrder(order.getOrderId(), order.getOrderType(), order.getUserInfo().getId())) { // 统计订单下的用户所获得的返利金额 List<CommonOrder> list = commonOrderService .listBySourceTypeAndOrderId(order.getOrderType(), order.getOrderId()); Map<Long, BigDecimal> hongBaoMoney = new HashMap<>(); if (list != null) for (CommonOrder commonOrder : list) { HongBaoOrder hongBaoOrder = hongBaoOrderService .selectDetailByCommonOrderId(commonOrder.getId()); if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) { Long mainUid = hongBaoOrder.getHongBaoV2().getUserInfo().getId(); if (hongBaoMoney.get(mainUid) == null) hongBaoMoney.put(mainUid, new BigDecimal(0)); hongBaoMoney.put(mainUid, hongBaoMoney.get(mainUid) .add(hongBaoOrder.getHongBaoV2().getMoney())); // 查询上级 List<HongBaoV2> children = hongBaoV2Service .listChildrenById(hongBaoOrder.getHongBaoV2().getId()); if (children != null) { for (HongBaoV2 hongBao : children) { Long uid = hongBao.getUserInfo().getId(); if (hongBaoMoney.get(uid) == null) hongBaoMoney.put(uid, new BigDecimal(0)); hongBaoMoney.put(uid, hongBaoMoney.get(uid).add(hongBao.getMoney())); } } } } if (isFirstValidOrder(order.getOrderId(), order.getOrderType(), order.getUserInfo().getId())) {// 有效的首单 if (hongBaoMoney.get(order.getUserInfo().getId()) == null || hongBaoMoney .get(order.getUserInfo().getId()).compareTo(new BigDecimal("0")) <= 0) { // 分享奖金是0 integralTaskRecordService.firstShareOrderReward(order.getUserInfo().getId(), null); } // 获取上两级数据 UserInfo boss = threeSaleSerivce.getBoss(order.getUserInfo().getId()); if (boss != null) {// 判断上级的红包 if (hongBaoMoney.get(boss.getId()) == null || hongBaoMoney.get(boss.getId()) .compareTo(new BigDecimal("0")) <= 0) { // 补偿金币 integralTaskRecordService.firstSharerOrderRewardBoss(boss.getId(), order.getUserInfo().getId(), null); } } } else {// 自购订单 UserInfo boss = threeSaleSerivce.getBoss(order.getUserInfo().getId()); if (boss != null) {// 判断上级的红包 if (hongBaoMoney.get(boss.getId()) == null || hongBaoMoney.get(boss.getId()) .compareTo(new BigDecimal("0")) <= 0) { // 补偿金币1级 integralTaskRecordService.firstRebateOrderRewardBoss(boss.getId(), order.getUserInfo().getId(), null); } boss = threeSaleSerivce.getBoss(boss.getId()); if (boss != null) {// 判断上级的红包 if (hongBaoMoney.get(boss.getId()) == null || hongBaoMoney .get(boss.getId()).compareTo(new BigDecimal("0")) <= 0) { // 补偿金币2级 integralTaskRecordService.firstRebateOrderRewardBossSuper( boss.getId(), order.getUserInfo().getId(), null); } } } } } PlaceOrderCMQManager.getInstance().deleteQueueMsg(PlaceOrderCMQManager.QUEUE_INTEGRAL, key); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } } }); } // 抖音广告监控 public void doPlaceOrderAdJob() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); Map<String, Order> map = PlaceOrderCMQManager.getInstance() .consumeQueueMsg(PlaceOrderCMQManager.QUEUE_AD, 16); if (map != null) { // 是否是首单 for (Iterator<String> its = map.keySet().iterator(); its.hasNext(); ) { String key = its.next(); Order order = map.get(key); if (isFirstValidOrder(order.getOrderId(), order.getOrderType(), order.getUserInfo().getId())) {// 有效的首单 // TODO 抖音的数据回调 } } } } }); } @Resource private DouYinClickEventService douYinClickEventService; // 抖音 public void doDouYinDeviceActiveJob() { String methodName = getMethodName(Thread.currentThread()); LogHelper.test("开始执行:doDouYinDeviceActiveJob"); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); Map<String, DouYinDeviceActiveQueueDTO> map = DouYinDeviceActiveCMQManager.getInstance() .consume(16); if (map != null) { // 是否是首单 for (Iterator<String> its = map.keySet().iterator(); its.hasNext(); ) { String key = its.next(); DouYinDeviceActiveQueueDTO active = map.get(key); if (active.getType() == DouYinDeviceActiveQueueDTO.TYPE_AD) {// 抖音 DouYinClickEvent event = douYinClickEventService.selectByCallback(active.getCallback()); if (event != null) { if (event.getOs() == 0 && !StringUtil.isNullOrEmpty(event.getUuid())) { DeviceActive deviceActive = deviceActiveService .getFirstActiveInfoByImei(event.getUuid()); if (deviceActive != null) { if (event != null) { if (event.getOs() == 0) DouYinAdUtil.activeAndroid(event.getCallback(), event.getImei(), deviceActive.getCreateTime().getTime()); else if (event.getOs() == 1) DouYinAdUtil.activeIOS(event.getCallback(), event.getIdfa(), deviceActive.getCreateTime().getTime()); } } } else {// TODO 处理IOS } } } else if (active.getType() == DouYinDeviceActiveQueueDTO.TYPE_DEVICE) {// 设备 if (active.getPlatform() == 1) { DeviceActive deviceActive = deviceActiveService .getFirstActiveInfo(active.getDevice()); if (deviceActive != null && !StringUtil.isNullOrEmpty(deviceActive.getImei())) { DouYinClickEvent event = douYinClickEventService .selectByUuid(deviceActive.getImei()); if (event != null) {// 回调 if (deviceActive != null) DouYinAdUtil.activeAndroid(event.getCallback(), event.getImei(), deviceActive.getCreateTime().getTime()); } } } else { // TODO 兼容IOS } } DouYinDeviceActiveCMQManager.getInstance().delete(key); } } } }); } // 分红 public void doDividentsPreJob() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); Map<String, UidDateDTO> map = TeamOrderCMQManager.getInstance().consumeTeamDividentsPreMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); UidDateDTO dto = map.get(key); try { teamDividentsManager.addToTeamEincome(dto.getUid(), dto.getDate()); TeamOrderCMQManager.getInstance().deleteTeamDividentsPreMsg(key); } catch (TeamDividentsRecordException e1) { if (e1.getCode() == TeamDividentsRecordException.CODE_EXIST) { TeamOrderCMQManager.getInstance().deleteTeamDividentsPreMsg(key); } else { try { LogHelper.errorDetailInfo(e1); } catch (Exception e2) { e2.printStackTrace(); } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } }); } // 分红 public void doDividentsJob() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); Map<String, UidDateDTO> map = TeamOrderCMQManager.getInstance().consumeTeamDividentsMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); UidDateDTO dto = map.get(key); try { teamEincomeManager.addTeamDividentsTOUserAccount(dto.getDate(), dto.getUid()); TeamOrderCMQManager.getInstance().deleteTeamDividentsMsg(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } }); } // 华为推送 public void doHWPushJob() { String methodName = getMethodName(Thread.currentThread()); new JobThreadExecutorServiceImpl().run(new MyRunnable(methodName) { @Override public void run() { super.run(); Map<String, PushContentDetailDTO> map = PushCMQManager.getInstance().consumeHWPush(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); PushContentDetailDTO dto = map.get(key); LogHelper.pushHW("接受到消息:" + new Gson().toJson(dto)); try { hwPushService.push(dto); PushCMQManager.getInstance().deleteHWPush(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } }); } } fanli/src/main/java/com/yeshi/fanli/util/SpringContext.java
@@ -13,6 +13,7 @@ import com.yeshi.fanli.dto.push.PushContentDetailDTO; import com.yeshi.fanli.service.impl.JobThreadExecutorServiceImpl; import com.yeshi.fanli.service.inter.push.HWPushService; import com.yeshi.fanli.service.manger.JobManager; import com.yeshi.fanli.util.mq.cmq.PushCMQManager; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; @@ -90,75 +91,8 @@ */ @Component public class SpringContext implements ApplicationListener<ContextRefreshedEvent> { @Resource private BoutiqueAutoRuleService boutiqueAutoRuleService; @Resource private ExtractService extractService; @Resource private IOSPushService iosPushService; @Resource(name = "taskExecutor") private TaskExecutor executor; @Resource private OrderProcessService orderProcessService; @Resource private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService; @Resource private ThreeSaleSerivce threeSaleSerivce; @Resource private TaoBaoOrderService taoBaoOrderService; @Resource private RedisManager redisManager; @Resource private UserMoneyDebtService userMoneyDebtService; @Resource private JDOrderService jdOrderService; @Resource private PDDOrderService pddOrderService; @Resource private HongBaoV2Service hongBaoV2Service; @Resource private IntegralGetService integralGetService; @Resource private CommonOrderService commonOrderService; @Resource private HongBaoOrderService hongBaoOrderService; @Resource private IntegralTaskRecordService integralTaskRecordService; @Resource private DeviceActiveService deviceActiveService; @Resource private TeamDividentsManager teamDividentsManager; @Resource private TeamEincomeManager teamEincomeManager; @Resource private VipShopOrderService vipShopOrderService; @Resource private SuningOrderService suningOrderService; @Resource private HWPushService hwPushService; private JobManager jobManager; private static boolean isInited = false; @@ -180,34 +114,8 @@ private void init(ContextRefreshedEvent arg0) { initCOS(); if (Constant.IS_TASK) { doExtractResult();// 处理提现结果 doTaoBaoOrders();// 处理淘宝订单 doTaoBaoNewOrders();// 处理淘宝订单(刚刚产生的) doOrderFanLiNew();// 新版返利 doOrderShareFanLi(); doWeiQuanOrder();// 处理维权订单 doPushIOS();// 处理发送IOS消息 doUserMoneyDebtJob();// 债务偿还 initScheduler();// 启动商品更新定时任务 doUpdateGoodsJob(); // 更新商品队列 doJDOrderJob();// 京东订单处理 doPDDOrderJob();// 拼多多订单处理 doVipShopOrderJob();// 唯品会订单处理 doSuningOrderJob();// 苏宁订单处理 doImportantTaoBaoGoodsUpdateJob();// 淘宝重要商品的信息更新 doHongBaoRecieveIntegralGetJob();// 返利到账,金币增加 // doPlaceOrderIntegralJob();// 下单赠送金币任务 // doDouYinDeviceActiveJob();// 抖音设备激活广告监测 doOrderTeamIncomePreFanLi();// 处理订单提成返利 doDividentsPreJob(); doOrderTeamRewardFanLi(); doDividentsJob(); //华为推送 doHWPushJob(); jobManager.start(); } } /** @@ -225,1067 +133,6 @@ params.setSecretKey(ps.getProperty("secretKey")); // 初始化 COSManager.getInstance().init(params); } /** * 处理提现结果的队列 */ public void doExtractResult() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, AlipayTransferResultInfo> map = CMQManager.getInstance().consumeExtractResultMsg(1); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { extractService.processExtractResult(map.get(key)); CMQManager.getInstance().deleteExtractResultMsg(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * 处理淘宝订单 */ public void doTaoBaoOrders() { // 同时开启3个线程处理 for (int i = 0; i < 3; i++) { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { // 取16个订单 List<String> orderIds = CMQManager.getInstance().consumeTaoBaoOrderMsg(16); if (orderIds != null) { for (String orderId : orderIds) { if (NumberUtil.isNumeric(orderId.trim())) { Map<String, List<TaoBaoOrder>> map = new HashMap<>(); List<TaoBaoOrder> orderList = taoBaoOrderService .getTaoBaoOrderByOrderId(orderId); map.put(orderId, orderList); LogHelper.orderInfo("开始处理订单:" + orderId); orderProcessService.processOrder(map); LogHelper.orderInfo("结束处理订单:" + orderId); } } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { } } } }); } } /** * 刚刚产生的订单 */ public void doTaoBaoNewOrders() { // 同时开启3个线程处理 for (int i = 0; i < 1; i++) { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { // 取16个订单 List<String> orderIds = CMQManager.getInstance().consumeTaoBaoNewOrderMsg(16); Map<String, List<TaoBaoOrder>> map = new HashMap<>(); if (orderIds != null) { for (String orderId : orderIds) { List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId); map.put(orderId, orderList); LogHelper.orderInfo("新订单-开始处理订单:" + orderId); long startTime = System.currentTimeMillis(); orderProcessService.processOrder(map); LogHelper.orderInfo("新订单-结束处理订单:" + orderId + "- 处理时间:" + (System.currentTimeMillis() - startTime)); } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { } } } }); } } /** * 处理新版淘宝订单返利 */ public void doOrderFanLiNew() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, HongBaoV2> map = CMQManager.getInstance().consumeFanLiMsgNew(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { HongBaoV2 hongbao = map.get(handler); if (hongbao != null) { String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.hongBaoFanLi, hongbao.getId() + ""); if (StringUtil.isNullOrEmpty(redisManager.getCommonString(key))) { // 处理之后要隔2小时再次进行处理 redisManager.cacheCommonString(key, "1", 60 * 60 * 2); orderProcessService.fanli(map.get(handler)); } } CMQManager.getInstance().deleteFanLiMsgNew(handler); } catch (TaoBaoWeiQuanException e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } catch (Exception e) { try { LogHelper.errorDetailInfo(e, "HongBaoV2-ID:" + map.get(handler).getId(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * 处理团队订单返利 */ public void doOrderTeamIncomePreFanLi() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, UidDateDTO> map = TeamOrderCMQManager.getInstance() .consumeFanLiTeamIncomePreMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { UidDateDTO dto = map.get(handler); orderProcessService.fanliPreInvaite(dto.getUid(), dto.getDate()); TeamOrderCMQManager.getInstance().deleteTeamIncomePreMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e, new Gson().toJson(map.get(handler)).toString(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * 处理团队奖金返利 */ public void doOrderTeamRewardFanLi() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, UidDateDTO> map = TeamOrderCMQManager.getInstance().consumeFanLiTeamIncomeMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { UidDateDTO dto = map.get(handler); teamEincomeManager.addTeamRewardTOUserAccount(dto.getDate(), dto.getUid()); TeamOrderCMQManager.getInstance().deleteTeamIncomeMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e, map.get(handler).toString(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * 处理分享订单返利 */ public void doOrderShareFanLi() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, UidDateDTO> map = CMQManager.getInstance().consumeFanLiShareMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { UidDateDTO dto = map.get(handler); orderProcessService.fanliShare(dto.getUid(), dto.getDate()); CMQManager.getInstance().deleteFanLiShareMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e, map.get(handler).toString(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * 处理淘宝订单维权 */ public void doWeiQuanOrder() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, TaoBaoWeiQuanOrder> map = CMQManager.getInstance().consumeWeiQuanOrderMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { orderProcessService.weiQuanOrder(map.get(handler)); CMQManager.getInstance().deleteWeiQuanOrderMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } }); } /** * IOS 推送消息 */ public void doPushIOS() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, PushQueueRecord> map = CMQManager.getInstance().consumeIOSPushMsg(10); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { iosPushService.readyPushIOS(map.get(key)); CMQManager.getInstance().deleteIOSPushMsg(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { LogHelper.errorDetailInfo(e); } } }); } /** * 创建Scheduler()执行自动爬取 */ private void initScheduler() { boutiqueAutoRuleService.startScheduler(); } /** * 更新精选库商品 */ public void doUpdateGoodsJob() { for (int i = 0; i < 1; i++) new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, Long> map = CMQManager.getInstance().consumeNeedUpdateTaoBaoGoodsIdMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); taoBaoGoodsUpdateService.updateByTaoKeGoodsDetail(Long.parseLong(key)); CMQManager.getInstance().deleteNeedUpdateTaoBaoGoodsIdMsg(key); } } } catch (Exception e) { e.printStackTrace(); LogHelper.error("更新商品出错:" + e.getMessage()); } } }); } /** * 用户借贷处理 */ public void doUserMoneyDebtJob() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, UserMoneyChangeDTO> map = UserMoneyChangeCMQManager.getInstance() .consumeQueueMsg(UserMoneyChangeCMQManager.QUEUE_DEBT, 16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { UserMoneyChangeDTO dto = map.get(key); if (dto != null && dto.getChangeMoney().compareTo(new BigDecimal(0)) > 0) { userMoneyDebtService.repayDebt(dto.getUid()); } UserMoneyChangeCMQManager.getInstance() .deleteQueueMsg(UserMoneyChangeCMQManager.QUEUE_DEBT, key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { LogHelper.error("还款出错:" + e.getMessage()); } } }); } public void doJDOrderJob() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, String> map = JDOrderCMQManager.getInstance().consumeJDOrder(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { String orderId = map.get(key); if (!StringUtil.isNullOrEmpty(orderId)) { JDOrder order = jdOrderService.selectDetailByOrderId(Long.parseLong(orderId)); orderProcessService.processJDOrder(order); } JDOrderCMQManager.getInstance().deleteJDOrder(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { LogHelper.error("拼多多订单出错:" + e.getMessage()); } } }); } public void doPDDOrderJob() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, String> map = PDDOrderCMQManager.getInstance().consumePDDOrder(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { String orderId = map.get(key); if (!StringUtil.isNullOrEmpty(orderId)) { List<PDDOrder> orderList = pddOrderService.selectByOrderSn(orderId); if (orderList != null) for (PDDOrder order : orderList) orderProcessService.processPDDOrder(order); } PDDOrderCMQManager.getInstance().deletePDDOrder(key); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } } catch (Exception e) { LogHelper.error("拼多多订单:" + e.getMessage()); } } }); } public void doVipShopOrderJob() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, String> map = VipShopOrderCMQManager.getInstance().consumeVipShopOrder(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { String orderId = map.get(key); LogHelper.test("唯品会订单消费:" + orderId); if (!StringUtil.isNullOrEmpty(orderId)) { List<VipShopOrder> orderList = vipShopOrderService.listDetailByOrderSn(orderId); if (orderList != null) for (VipShopOrder order : orderList) orderProcessService.processVipShopOrder(order); } VipShopOrderCMQManager.getInstance().deleteVipShopOrder(key); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } } catch (Exception e) { LogHelper.errorDetailInfo(e); } } }); } public void doSuningOrderJob() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { try { Map<String, String> map = SuningOrderCMQManager.getInstance().consumeSuningOrder(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { String orderId = map.get(key); if (!StringUtil.isNullOrEmpty(orderId)) { List<SuningOrderInfo> orderList = suningOrderService.listByOrderCode(orderId); if (orderList != null) for (SuningOrderInfo order : orderList) orderProcessService.processSuningOrder(order); } SuningOrderCMQManager.getInstance().deleteSuningOrder(key); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } } catch (Exception e) { LogHelper.errorDetailInfo(e); } } }); } /** * 重要的淘宝商品信息更新 */ public void doImportantTaoBaoGoodsUpdateJob() { // 开启2个线程做更新 for (int i = 0; i < 2; i++) new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { Map<String, Long> map = CMQManager.getInstance().consumeTBImpGoodsUpdateMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { long startTime = System.currentTimeMillis(); TaoBaoGoodsBrief goods = TaoKeApiUtil.searchGoodsDetail(map.get(key)); // 更新一条数据需要的时间 taoBaoGoodsUpdateService.updateTaoBaoGoods(goods); long time = System.currentTimeMillis() - startTime; LogHelper.test("淘宝重要商品库更新时间:" + time); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { CMQManager.getInstance().deleteTBImpGoodsUpdateMsg(key); } } } } }); } /** * 红包到账后的金币获取 */ public void doHongBaoRecieveIntegralGetJob() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { Map<String, Long> map = HongBaoRecieveCMQManager.getInstance() .consumeQueueMsg(HongBaoRecieveCMQManager.QUEUE_INTEGRAL, 16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); Long hongBaoId = map.get(key); try { HongBaoV2 hongBaoV2 = hongBaoV2Service.selectByPrimaryKey(hongBaoId); if (hongBaoV2 != null && hongBaoV2.getState() == HongBaoV2.STATE_YILINGQU && hongBaoV2.getMoney().compareTo(new BigDecimal(0)) > 0) { // 到账送金币 fanliGetIntegral(hongBaoV2); HongBaoRecieveCMQManager.getInstance() .deleteQueueMsg(HongBaoRecieveCMQManager.QUEUE_INTEGRAL, key); // 返利不足0.01元送金币 if (hongBaoV2.getType() == HongBaoV2.TYPE_ZIGOU) {// 自购 // 判断是否为该用户的首笔红包 List<Integer> typeList = new ArrayList<>(); typeList.add(HongBaoV2.TYPE_ZIGOU); HongBaoV2 firstHongBao = hongBaoV2Service.getFirstValidHongBaoByTypeAndUid( typeList, hongBaoV2.getUserInfo().getId()); if (firstHongBao != null && firstHongBao.getId().longValue() == hongBaoV2.getId()) {// 自购首单到账 // 查询下级红包 BigDecimal firstLevelMoney = new BigDecimal(0); BigDecimal secondLevelMoney = new BigDecimal(0); // 获取改单下面的红包 List<HongBaoV2> hongBaoList = new ArrayList<>(); HongBaoOrder hongBaoOrder = hongBaoOrderService .selectDetailByHongBaoId(hongBaoV2.getId()); if (hongBaoOrder != null && hongBaoOrder.getCommonOrder() != null) {// 计算改订单号下面的所有返利金额 CommonOrder commonOrder = hongBaoOrder.getCommonOrder(); List<CommonOrder> list = commonOrderService.listBySourceTypeAndOrderId( commonOrder.getSourceType(), commonOrder.getOrderNo()); for (CommonOrder co : list) { HongBaoOrder hbo = hongBaoOrderService .selectDetailByCommonOrderId(co.getId()); if (hbo != null && hbo.getHongBaoV2() != null) hongBaoList.add(hbo.getHongBaoV2()); } } for (HongBaoV2 hb : hongBaoList) { List<HongBaoV2> children = hongBaoV2Service .listChildrenById(hb.getId()); if (children != null) for (HongBaoV2 child : children) if (child.getType() == HongBaoV2.TYPE_YIJI) { firstLevelMoney = firstLevelMoney.add(child.getMoney()); } else if (child.getType() == HongBaoV2.TYPE_ERJI) { secondLevelMoney = secondLevelMoney.add(child.getMoney()); } } // 查询下级的生效时间 ThreeSale threeSale = threeSaleSerivce.selectLatestByWorkerIdAndState( hongBaoV2.getUserInfo().getId(), ThreeSale.STATE_SUCCESS); if (threeSale != null && threeSale.getSucceedTime() != null && threeSale .getSucceedTime() < hongBaoV2.getCreateTime().getTime()) {// 邀请成功的时间是否在下单的时间之前 // 成功时间要大于20190910日才开始送金币 if (threeSale.getSucceedTime() > TimeUtil.convertToTimeTemp("20190901", "yyyyMMdd")) { if (firstLevelMoney.compareTo(new BigDecimal("0.01")) < 0) {// 一级返利小于0.01 integralTaskRecordService.firstRebateOrderRewardBoss( threeSale.getBoss().getId(), hongBaoV2.getUserInfo().getId(), null); LogHelper.test("自购-一级用户-" + threeSale.getBoss().getId() + "-hongBaoId:" + hongBaoV2.getId()); } } } // 查询下下级生效时间 if (threeSale != null) { threeSale = threeSaleSerivce.selectLatestByWorkerIdAndState( threeSale.getBoss().getId(), ThreeSale.STATE_SUCCESS); if (threeSale != null && threeSale.getSucceedTime() != null && threeSale .getSucceedTime() < hongBaoV2.getCreateTime().getTime()) {// 邀请成功的时间是否在下单的时间之前 // 成功时间要大于20190910日才开始送金币 if (threeSale.getSucceedTime() > TimeUtil .convertToTimeTemp("20190901", "yyyyMMdd")) { if (secondLevelMoney.compareTo(new BigDecimal("0.01")) < 0) {// 二级返利小于0.01 integralTaskRecordService.firstRebateOrderRewardBossSuper( threeSale.getBoss().getId(), hongBaoV2.getUserInfo().getId(), null); LogHelper.test("自购-二级用户-" + threeSale.getBoss().getId() + "-hongBaoId:" + hongBaoV2.getId()); } } } } } } else if (hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_GOODS) {// 分享赚 // 判断是否为该用户的首笔红包 List<Integer> typeList = new ArrayList<>(); typeList.add(HongBaoV2.TYPE_SHARE_GOODS); HongBaoV2 firstHongBao = hongBaoV2Service.getFirstValidHongBaoByTypeAndUid( typeList, hongBaoV2.getUserInfo().getId()); if (firstHongBao != null && firstHongBao.getId().longValue() == hongBaoV2.getId()) // 分享首笔到账 { // 查询下级红包 BigDecimal firstLevelMoney = new BigDecimal(0); // 获取改单下面的红包 List<HongBaoV2> hongBaoList = new ArrayList<>(); HongBaoOrder hongBaoOrder = hongBaoOrderService .selectDetailByHongBaoId(hongBaoV2.getId()); if (hongBaoOrder != null && hongBaoOrder.getCommonOrder() != null) {// 计算改订单号下面的所有返利金额 CommonOrder commonOrder = hongBaoOrder.getCommonOrder(); List<CommonOrder> list = commonOrderService.listBySourceTypeAndOrderId( commonOrder.getSourceType(), commonOrder.getOrderNo()); for (CommonOrder co : list) { HongBaoOrder hbo = hongBaoOrderService .selectDetailByCommonOrderId(co.getId()); if (hbo != null && hbo.getHongBaoV2() != null) hongBaoList.add(hbo.getHongBaoV2()); } } for (HongBaoV2 hb : hongBaoList) { List<HongBaoV2> children = hongBaoV2Service .listChildrenById(hb.getId()); if (children != null) for (HongBaoV2 child : children) if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI) { firstLevelMoney = firstLevelMoney.add(child.getMoney()); } } ThreeSale threeSale = threeSaleSerivce.selectLatestByWorkerIdAndState( hongBaoV2.getUserInfo().getId(), ThreeSale.STATE_SUCCESS); if (threeSale != null && threeSale.getSucceedTime() != null && threeSale .getSucceedTime() < hongBaoV2.getCreateTime().getTime()) {// 邀请成功的时间是否在下单的时间之前 // 成功时间要大于20190910日才开始送金币 if (threeSale.getSucceedTime() > TimeUtil.convertToTimeTemp("20190901", "yyyyMMdd")) { if (firstLevelMoney.compareTo(new BigDecimal("0.01")) < 0) {// 一级返利小于0.01 integralTaskRecordService.firstSharerOrderRewardBoss( threeSale.getBoss().getId(), hongBaoV2.getUserInfo().getId(), null); LogHelper.test("分享-一级用户-" + threeSale.getBoss().getId() + "-hongBaoId:" + hongBaoV2.getId()); } } } } } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } }); } private void fanliGetIntegral(HongBaoV2 hongBaoV2) { if (hongBaoV2 != null && hongBaoV2.getState() == HongBaoV2.STATE_YILINGQU && hongBaoV2.getMoney().compareTo(new BigDecimal(0)) > 0) { // 查询对应的订单号 Long mainHongBaoId = hongBaoV2.getId(); if (hongBaoV2.getParent() != null && hongBaoV2.getParent().getId() != null) mainHongBaoId = hongBaoV2.getParent().getId(); HongBaoOrder hongbaoOrder = hongBaoOrderService.selectDetailByHongBaoId(mainHongBaoId); if (hongbaoOrder == null || hongbaoOrder.getCommonOrder() == null) return; CommonOrder commonOrder = hongbaoOrder.getCommonOrder(); if (hongBaoV2.getType() == HongBaoV2.TYPE_ZIGOU) {// 自购订单 integralGetService.addRebateOrder(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } else if (hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_GOODS) {// 分享订单 integralGetService.addShareOrder(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } else if (hongBaoV2.getType() == HongBaoV2.TYPE_YIJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_YIJI) {// 一级邀请 integralGetService.addInviteOrderLevelOne(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } else if (hongBaoV2.getType() == HongBaoV2.TYPE_ERJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_ERJI) {// 二级邀请 integralGetService.addInviteOrderLevelTwo(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } } } private boolean isFirstValidOrder(String orderId, int sourceType, Long uid) { CommonOrder commonOrder = commonOrderService.selectLatestValidByUid(uid); if (commonOrder != null && commonOrder.getOrderNo().equalsIgnoreCase(orderId) && sourceType == commonOrder.getSourceType()) return true; else return false; } // 下单获取金币任务 public void doPlaceOrderIntegralJob() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { Map<String, Order> map = PlaceOrderCMQManager.getInstance() .consumeQueueMsg(PlaceOrderCMQManager.QUEUE_INTEGRAL, 16); if (map != null) { for (Iterator<String> its = map.keySet().iterator(); its.hasNext(); ) { try { String key = its.next(); Order order = map.get(key); // 是否是首单 if (isFirstValidOrder(order.getOrderId(), order.getOrderType(), order.getUserInfo().getId())) { // 统计订单下的用户所获得的返利金额 List<CommonOrder> list = commonOrderService .listBySourceTypeAndOrderId(order.getOrderType(), order.getOrderId()); Map<Long, BigDecimal> hongBaoMoney = new HashMap<>(); if (list != null) for (CommonOrder commonOrder : list) { HongBaoOrder hongBaoOrder = hongBaoOrderService .selectDetailByCommonOrderId(commonOrder.getId()); if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) { Long mainUid = hongBaoOrder.getHongBaoV2().getUserInfo().getId(); if (hongBaoMoney.get(mainUid) == null) hongBaoMoney.put(mainUid, new BigDecimal(0)); hongBaoMoney.put(mainUid, hongBaoMoney.get(mainUid) .add(hongBaoOrder.getHongBaoV2().getMoney())); // 查询上级 List<HongBaoV2> children = hongBaoV2Service .listChildrenById(hongBaoOrder.getHongBaoV2().getId()); if (children != null) { for (HongBaoV2 hongBao : children) { Long uid = hongBao.getUserInfo().getId(); if (hongBaoMoney.get(uid) == null) hongBaoMoney.put(uid, new BigDecimal(0)); hongBaoMoney.put(uid, hongBaoMoney.get(uid).add(hongBao.getMoney())); } } } } if (isFirstValidOrder(order.getOrderId(), order.getOrderType(), order.getUserInfo().getId())) {// 有效的首单 if (hongBaoMoney.get(order.getUserInfo().getId()) == null || hongBaoMoney .get(order.getUserInfo().getId()).compareTo(new BigDecimal("0")) <= 0) { // 分享奖金是0 integralTaskRecordService.firstShareOrderReward(order.getUserInfo().getId(), null); } // 获取上两级数据 UserInfo boss = threeSaleSerivce.getBoss(order.getUserInfo().getId()); if (boss != null) {// 判断上级的红包 if (hongBaoMoney.get(boss.getId()) == null || hongBaoMoney.get(boss.getId()) .compareTo(new BigDecimal("0")) <= 0) { // 补偿金币 integralTaskRecordService.firstSharerOrderRewardBoss(boss.getId(), order.getUserInfo().getId(), null); } } } else {// 自购订单 UserInfo boss = threeSaleSerivce.getBoss(order.getUserInfo().getId()); if (boss != null) {// 判断上级的红包 if (hongBaoMoney.get(boss.getId()) == null || hongBaoMoney.get(boss.getId()) .compareTo(new BigDecimal("0")) <= 0) { // 补偿金币1级 integralTaskRecordService.firstRebateOrderRewardBoss(boss.getId(), order.getUserInfo().getId(), null); } boss = threeSaleSerivce.getBoss(boss.getId()); if (boss != null) {// 判断上级的红包 if (hongBaoMoney.get(boss.getId()) == null || hongBaoMoney .get(boss.getId()).compareTo(new BigDecimal("0")) <= 0) { // 补偿金币2级 integralTaskRecordService.firstRebateOrderRewardBossSuper( boss.getId(), order.getUserInfo().getId(), null); } } } } } PlaceOrderCMQManager.getInstance().deleteQueueMsg(PlaceOrderCMQManager.QUEUE_INTEGRAL, key); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } } }); } // 抖音广告监控 public void doPlaceOrderAdJob() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { Map<String, Order> map = PlaceOrderCMQManager.getInstance() .consumeQueueMsg(PlaceOrderCMQManager.QUEUE_AD, 16); if (map != null) { // 是否是首单 for (Iterator<String> its = map.keySet().iterator(); its.hasNext(); ) { String key = its.next(); Order order = map.get(key); if (isFirstValidOrder(order.getOrderId(), order.getOrderType(), order.getUserInfo().getId())) {// 有效的首单 // TODO 抖音的数据回调 } } } } }); } @Resource private DouYinClickEventService douYinClickEventService; // 抖音 public void doDouYinDeviceActiveJob() { LogHelper.test("开始执行:doDouYinDeviceActiveJob"); new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { Map<String, DouYinDeviceActiveQueueDTO> map = DouYinDeviceActiveCMQManager.getInstance() .consume(16); if (map != null) { // 是否是首单 for (Iterator<String> its = map.keySet().iterator(); its.hasNext(); ) { String key = its.next(); DouYinDeviceActiveQueueDTO active = map.get(key); if (active.getType() == DouYinDeviceActiveQueueDTO.TYPE_AD) {// 抖音 DouYinClickEvent event = douYinClickEventService.selectByCallback(active.getCallback()); if (event != null) { if (event.getOs() == 0 && !StringUtil.isNullOrEmpty(event.getUuid())) { DeviceActive deviceActive = deviceActiveService .getFirstActiveInfoByImei(event.getUuid()); if (deviceActive != null) { if (event != null) { if (event.getOs() == 0) DouYinAdUtil.activeAndroid(event.getCallback(), event.getImei(), deviceActive.getCreateTime().getTime()); else if (event.getOs() == 1) DouYinAdUtil.activeIOS(event.getCallback(), event.getIdfa(), deviceActive.getCreateTime().getTime()); } } } else {// TODO 处理IOS } } } else if (active.getType() == DouYinDeviceActiveQueueDTO.TYPE_DEVICE) {// 设备 if (active.getPlatform() == 1) { DeviceActive deviceActive = deviceActiveService .getFirstActiveInfo(active.getDevice()); if (deviceActive != null && !StringUtil.isNullOrEmpty(deviceActive.getImei())) { DouYinClickEvent event = douYinClickEventService .selectByUuid(deviceActive.getImei()); if (event != null) {// 回调 if (deviceActive != null) DouYinAdUtil.activeAndroid(event.getCallback(), event.getImei(), deviceActive.getCreateTime().getTime()); } } } else { // TODO 兼容IOS } } DouYinDeviceActiveCMQManager.getInstance().delete(key); } } } }); } // 分红 public void doDividentsPreJob() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { Map<String, UidDateDTO> map = TeamOrderCMQManager.getInstance().consumeTeamDividentsPreMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); UidDateDTO dto = map.get(key); try { teamDividentsManager.addToTeamEincome(dto.getUid(), dto.getDate()); TeamOrderCMQManager.getInstance().deleteTeamDividentsPreMsg(key); } catch (TeamDividentsRecordException e1) { if (e1.getCode() == TeamDividentsRecordException.CODE_EXIST) { TeamOrderCMQManager.getInstance().deleteTeamDividentsPreMsg(key); } else { try { LogHelper.errorDetailInfo(e1); } catch (Exception e2) { e2.printStackTrace(); } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } }); } // 分红 public void doDividentsJob() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { Map<String, UidDateDTO> map = TeamOrderCMQManager.getInstance().consumeTeamDividentsMsg(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); UidDateDTO dto = map.get(key); try { teamEincomeManager.addTeamDividentsTOUserAccount(dto.getDate(), dto.getUid()); TeamOrderCMQManager.getInstance().deleteTeamDividentsMsg(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } }); } // 华为推送 public void doHWPushJob() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { Map<String, PushContentDetailDTO> map = PushCMQManager.getInstance().consumeHWPush(16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); PushContentDetailDTO dto = map.get(key); LogHelper.pushHW("接受到消息:" + new Gson().toJson(dto)); try { hwPushService.push(dto); PushCMQManager.getInstance().deleteHWPush(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } }); } } fanli/src/main/java/com/yeshi/fanli/util/TuanYouUtil.java
New file @@ -0,0 +1,79 @@ package com.yeshi.fanli.util; import net.sf.json.JSONObject; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; import org.yeshi.utils.HttpUtil; import java.io.IOException; import java.util.*; public class TuanYouUtil { private final static String APP_KEY = "appm_h598645363"; private final static String APP_SECRET = "dec748b401b5df426fc0fa795e2704db"; private static String getSign(Map<String, String> params) { List<String> list = new ArrayList<>(); for (Iterator<String> its = params.keySet().iterator(); its.hasNext(); ) { String key = its.next(); list.add(key + params.get(key)); } Collections.sort(list); return StringUtil.Md5(APP_SECRET + StringUtil.concat(list, "") + APP_SECRET); } private static Map<String, String> getBaseRequestParams() { Map<String, String> map = new HashMap<>(); map.put("app_key", APP_KEY); map.put("timestamp", System.currentTimeMillis() + ""); return map; } private static String request(String url, Map<String, String> map) { Iterator<String> its = map.keySet().iterator(); NameValuePair[] params = new NameValuePair[map.keySet().size()]; for (int p = 0; its.hasNext(); ++p) { String key = (String) its.next(); NameValuePair np = new NameValuePair(key, (String) map.get(key)); params[p] = np; } HttpClient client = new HttpClient(); PostMethod method = new PostMethod(url); method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded"); method.setRequestBody(params); try { client.executeMethod(method); return method.getResponseBodyAsString(); } catch (HttpException var8) { var8.printStackTrace(); } catch (IOException var9) { var9.printStackTrace(); } return ""; } public static String getAuthCode(String phone) { Map<String, String> map = getBaseRequestParams(); map.put("platformId", "98645363"); map.put("phone", phone); String sign = getSign(map); map.put("sign", sign); String result = request("https://mcs.czb365.com/services/v3/begin/getSecretCode", map); JSONObject data = JSONObject.fromObject(result); if (data.optInt("code") == 200) { return data.optString("result"); } return ""; } } fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java
@@ -562,4 +562,25 @@ } else return true; } public static String getAuthLink(String pid, String customParameters) { Map<String, String> map = new HashMap<>(); map.put("type", "pdd.ddk.rp.prom.url.generate"); map.put("channel_type", 10 + ""); map.put("custom_parameters", customParameters); map.put("p_id_list", "[\"" + pid + "\"]"); String result = baseRequest(map); JSONObject resultJson = JSONObject.fromObject(result); JSONArray array = resultJson.optJSONObject("rp_promotion_url_generate_response").optJSONArray("url_list"); if (array != null && array.size() > 0) { JSONObject item = array.optJSONObject(0); String url = item.optString("url"); if (StringUtil.isNullOrEmpty(url)) { url = item.optString("mobile_url"); } return url; } return null; } } fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoUtil.java
@@ -37,6 +37,7 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.yeshi.utils.TimeUtil; public class PinDuoDuoUtil { @@ -641,4 +642,12 @@ return urlList; } public static String getCustomParams(String uid) { return uid + "_" + TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMddHH"); } public static String getUidFromCustomParams(String params) { return params.split("_")[0]; } } fanli/src/test/java/org/fanli/TaoKeTest.java
@@ -349,12 +349,22 @@ @Test public void test18(){ TaoKeAppInfo app = new TaoKeAppInfo(); app.setAppKey("27867727"); app.setAppSecret("781fce83545edbed13af32dc3fa9fc3a"); app.setPid("mm_124933865_865950258_109407350204"); OrderQuery q=new OrderQuery(); q.startTime="2020-01-01"; q.pageNo=1; q.pageSize=20; TaoKeOrderApiUtil.queryTaoBaoOrder(q,TaoBaoConstant.TAOBAO_AUTH_APPKEY,TaoBaoConstant.TAOBAO_AUTH_APPSECRET); SearchFilter filter = new SearchFilter(); filter.setKey("活着"); filter.setPage(1); filter.setPageSize(20); Long id = 535786796994L; try { TaoKeApiUtil.searchGoodsDetailForConvert(id, app, "", ""); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } } } utils/pom.xml
@@ -58,6 +58,13 @@ <version>1.0.7</version> </dependency> <!--商户平台API --> <dependency> <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-apache-httpclient</artifactId> <version>0.2.1</version> </dependency> </dependencies> </project> utils/src/main/java/org/yeshi/utils/entity/wx/WXAPPInfo.java
@@ -4,6 +4,18 @@ private String appId; private String appSecret; private String mchId; private String mchKey; /** * V3接口新增字段 */ //证书序列号 private String mchSerialNo; //证书私钥 private String privateKey; private String apiV3Key; public WXAPPInfo(String appId, String appSecret, String mchId, String mchKey) { this.appId = appId; @@ -12,11 +24,43 @@ this.mchKey = mchKey; } public WXAPPInfo(String appId, String mchId, String mchSerialNo, String privateKey, String apiV3Key) { this.appId = appId; this.mchId = mchId; this.mchSerialNo = mchSerialNo; this.privateKey = privateKey; this.apiV3Key = apiV3Key; } public WXAPPInfo() { } private String mchKey; public String getMchSerialNo() { return mchSerialNo; } public void setMchSerialNo(String mchSerialNo) { this.mchSerialNo = mchSerialNo; } public String getPrivateKey() { return privateKey; } public void setPrivateKey(String privateKey) { this.privateKey = privateKey; } public String getApiV3Key() { return apiV3Key; } public void setApiV3Key(String apiV3Key) { this.apiV3Key = apiV3Key; } public String getAppId() { return appId; utils/src/main/java/org/yeshi/utils/entity/wx/WXPlaceOrderParams.java
@@ -6,7 +6,6 @@ * 微信支付统一下单参数 * * @author Administrator * */ public class WXPlaceOrderParams { private String orderNo; @@ -17,7 +16,11 @@ private String tradeType; private String notifyUrl; private WXAPPInfo info; //附加数据-V3接口中使用,支付结果通知中会原样返回 private String attach; private WXAPPInfo app; public String getOrderNo() { return orderNo; @@ -67,12 +70,21 @@ this.tradeType = tradeType; } public WXAPPInfo getInfo() { return info; public WXAPPInfo getApp() { return app; } public void setInfo(WXAPPInfo info) { this.info = info; public void setApp(WXAPPInfo app) { this.app = app; } public String getAttach() { return attach; } public void setAttach(String attach) { this.attach = attach; } public String getNotifyUrl() { utils/src/main/java/org/yeshi/utils/sms/TencentSMSUtil.java
New file @@ -0,0 +1,41 @@ package org.yeshi.utils.sms; import com.github.qcloudsms.SmsSingleSender; import com.github.qcloudsms.SmsSingleSenderResult; import com.github.qcloudsms.httpclient.HTTPException; import org.json.JSONException; import java.io.IOException; public class TencentSMSUtil { /** * 发送单一短信 * * @param phone * @param msg */ public static SmsSingleSenderResult sendSingleMsg(int appId, String appKey, String phone, String msg) { SmsSingleSender ssender = new SmsSingleSender(appId, appKey); SmsSingleSenderResult result = null; try { result = ssender.send(0, "86", phone, msg, "", ""); } catch (JSONException e) { e.printStackTrace(); } catch (HTTPException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; // if (result == null) // throw new SMSException(2, "短信发送失败"); // if (result.result == 1025) { // throw new SMSException(result.result, "今日验证码发送超限,请明日再试"); // } else if (result.result != 0) {// 发送失败 // throw new SMSException(result.result, "短信发送失败"); // } } } utils/src/main/java/org/yeshi/utils/wx/WXPayUtil.java
@@ -172,16 +172,16 @@ if (params == null) throw new WXPlaceOrderParamsException(1, "请传入下单参数"); if (params.getInfo() == null) if (params.getApp() == null) throw new WXPlaceOrderParamsException(2, "请传入下单应用信息"); if (StringUtil.isNullOrEmpty(params.getInfo().getAppId())) if (StringUtil.isNullOrEmpty(params.getApp().getAppId())) throw new WXPlaceOrderParamsException(201, "请传入下单应用信息-appId"); if (StringUtil.isNullOrEmpty(params.getInfo().getAppSecret())) if (StringUtil.isNullOrEmpty(params.getApp().getAppSecret())) throw new WXPlaceOrderParamsException(202, "请传入下单应用信息-appSecret"); if (StringUtil.isNullOrEmpty(params.getInfo().getMchId())) if (StringUtil.isNullOrEmpty(params.getApp().getMchId())) throw new WXPlaceOrderParamsException(203, "请传入下单应用信息-mchId"); if (StringUtil.isNullOrEmpty(params.getInfo().getMchKey())) if (StringUtil.isNullOrEmpty(params.getApp().getMchKey())) throw new WXPlaceOrderParamsException(204, "请传入下单应用信息-mchKey"); if (StringUtil.isNullOrEmpty(params.getBody())) throw new WXPlaceOrderParamsException(3, "请传入body"); @@ -205,8 +205,8 @@ // throw new WXPlaceOrderParamsException(9, "请传入openId"); Map<String, String> map = new HashMap<String, String>(); map.put("appid", params.getInfo().getAppId()); map.put("mch_id", params.getInfo().getMchId()); map.put("appid", params.getApp().getAppId()); map.put("mch_id", params.getApp().getMchId()); map.put("nonce_str", StringUtil.getRandomCode(32)); map.put("body", params.getBody()); map.put("out_trade_no", params.getOrderNo()); @@ -216,7 +216,7 @@ map.put("trade_type", params.getTradeType()); if (!StringUtil.isNullOrEmpty(params.getOpenId())) map.put("openid", params.getOpenId()); map.put("sign", WXUtil.getSignMD5(map, params.getInfo().getMchKey())); map.put("sign", WXUtil.getSignMD5(map, params.getApp().getMchKey())); String entity = WXUtil.loadWXMessage(map); utils/src/main/java/org/yeshi/utils/wx/WXPayV3Util.java
New file @@ -0,0 +1,199 @@ package org.yeshi.utils.wx; import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder; import com.wechat.pay.contrib.apache.httpclient.auth.AutoUpdateCertificatesVerifier; import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner; import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials; import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator; import com.wechat.pay.contrib.apache.httpclient.util.PemUtil; import net.sf.json.JSONObject; import org.apache.commons.io.Charsets; import org.apache.commons.io.IOUtils; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.util.EntityUtils; import org.yeshi.utils.StringUtil; import org.yeshi.utils.entity.wx.WXAPPInfo; import org.yeshi.utils.entity.wx.WXPlaceOrderParams; import org.yeshi.utils.exception.WXOrderException; import org.yeshi.utils.exception.WXPlaceOrderParamsException; import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.math.BigDecimal; import java.net.URLEncoder; import java.nio.file.Files; import java.nio.file.Paths; import java.security.PrivateKey; /** * 微信支付帮助类(基于微信支付V3接口) * * @author Administrator */ public class WXPayV3Util { private static CloseableHttpClient getHttpClient(WXAPPInfo app) throws Exception { // 加载商户私钥(privateKey:私钥字符串) PrivateKey merchantPrivateKey = PemUtil .loadPrivateKey(new ByteArrayInputStream(app.getPrivateKey().getBytes("utf-8"))); // 加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3秘钥) AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier( new WechatPay2Credentials(app.getMchId(), new PrivateKeySigner(app.getMchSerialNo(), merchantPrivateKey)), app.getApiV3Key().getBytes("utf-8")); // 初始化httpClient return WechatPayHttpClientBuilder.create() .withMerchant(app.getMchId(), app.getMchSerialNo(), merchantPrivateKey) .withValidator(new WechatPay2Validator(verifier)).build(); } /** * 网络请求 * * @param url * @param requestData * @param app * @return * @throws Exception */ private static JSONObject request(String url, String requestData, WXAPPInfo app) throws Exception { HttpPost httpPost = new HttpPost(url); if (!StringUtil.isNullOrEmpty(requestData)) { StringEntity entity = new StringEntity(requestData, ContentType.APPLICATION_JSON.withCharset(Charsets.UTF_8)); entity.setContentType("application/json;charset=utf-8"); httpPost.setEntity(entity); } httpPost.setHeader("Accept", "application/json;charset=utf-8"); //完成签名并执行请求 CloseableHttpClient httpClient = getHttpClient(app); CloseableHttpResponse response = httpClient.execute(httpPost); try { int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == 200) { System.out.println("success,return body = " + EntityUtils.toString(response.getEntity())); String result = EntityUtils.toString(response.getEntity()); JSONObject resultJson = JSONObject.fromObject(result); return resultJson; } else if (statusCode == 204) { System.out.println("success"); } else { System.out.println("failed,resp code = " + statusCode + ",return body = " + EntityUtils.toString(response.getEntity())); throw new Exception("request failed"); } } finally { response.close(); } return null; } /** * H5支付统一下单接口 * * @param params * @return 支付链接 * @throws WXPlaceOrderParamsException * @throws Exception */ public static String createH5Order(WXPlaceOrderParams params, String redirectUrl) throws WXPlaceOrderParamsException, Exception { if (params == null) throw new WXPlaceOrderParamsException(1, "请传入下单参数"); if (params.getApp() == null) throw new WXPlaceOrderParamsException(2, "请传入下单应用信息"); if (StringUtil.isNullOrEmpty(params.getApp().getAppId())) throw new WXPlaceOrderParamsException(201, "请传入下单应用信息-appId"); if (StringUtil.isNullOrEmpty(params.getApp().getMchId())) throw new WXPlaceOrderParamsException(203, "请传入下单应用信息-mchId"); if (StringUtil.isNullOrEmpty(params.getApp().getApiV3Key())) throw new WXPlaceOrderParamsException(204, "请传入下单应用信息apiV3Key"); if (StringUtil.isNullOrEmpty(params.getBody())) throw new WXPlaceOrderParamsException(3, "请传入body"); if (StringUtil.isNullOrEmpty(params.getOrderNo())) throw new WXPlaceOrderParamsException(4, "请传入orderNo"); if (params.getFee() == null) throw new WXPlaceOrderParamsException(5, "请传入fee"); if (StringUtil.isNullOrEmpty(params.getIp())) throw new WXPlaceOrderParamsException(6, "请传入ip"); if (StringUtil.isNullOrEmpty(params.getNotifyUrl())) throw new WXPlaceOrderParamsException(7, "请传入notifyUrl"); // 请求body参数 String reqdata = "{" + "\"amount\": {" + "\"total\": " + params.getFee().multiply(new BigDecimal(100)).intValue() + "," + "\"currency\": \"CNY\"" + "}," + "\"scene_info\": {" + "\"payer_client_ip\":\"" + params.getIp() + "\"," + "\"h5_info\": {" + "\"type\": \"Wap\"" + "}}," + "\"mchid\": \"" + params.getApp().getMchId() + "\"," + "\"description\": \"" + params.getBody() + "\"," + "\"notify_url\": \"" + params.getNotifyUrl() + "\","; //附加数据,在支付结果通知中会原样返回 if (params.getAttach() != null) reqdata += ("\"attach\": \"" + params.getAttach() + "\","); reqdata += ("\"out_trade_no\": \"" + params.getOrderNo() + "\"," + "\"appid\": \"" + params.getApp().getAppId() + "\"" + "}"); JSONObject result = request("https://api.mch.weixin.qq.com/v3/pay/transactions/h5", reqdata, params.getApp()); if (result == null) return null; return result.optString("h5_url") + "&redirect_url=" + URLEncoder.encode(redirectUrl, "UTF-8"); } /** * 查询订单号是否支付成功 * * @param orderNo * @param app * @return * @throws WXOrderException */ public static boolean isPaySuccess(String orderNo, WXAPPInfo app) throws Exception { String url = String.format("https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/%s?mchid=%s", URLEncoder.encode(orderNo), app.getMchId()); JSONObject result = request(url, null, app); if (result == null) return false; return "SUCCESS".equalsIgnoreCase(result.optString("trade_state")); } public static void main(String[] args) { String privateKey = ""; try { String content = IOUtils.toString(new FileInputStream("D:\\项目\\返利券\\商户平台\\1520950211_20210125_cert\\apiclient_key.pem")); privateKey = content.replace("-----BEGIN PRIVATE KEY-----", "") .replace("-----END PRIVATE KEY-----", "") .replaceAll("\\s+", ""); } catch (Exception e) { } WXPlaceOrderParams params = new WXPlaceOrderParams(); params.setBody("影视大全VIP-包月"); params.setFee(new BigDecimal("0.1")); params.setNotifyUrl("http://api.ysdq.yeshitv.com:8089/BuWan/wx/pay/vip"); params.setOrderNo("buwan-vip-8"); params.setIp("113.249.192.231"); params.setApp(new WXAPPInfo("wxa99686bb65a9f466", "1520950211", "454328C324C6CC21355D064B44D6524CD7506DD0", privateKey, "XYJkJ2018FAfaodCCx899mLl138rfGVd")); try { String payUrl = WXPayV3Util.createH5Order(params, "http://vip.ysdq.yeshitv.com/wx_result.html"); System.out.println(payUrl); } catch (Exception e) { e.printStackTrace(); } } } utils/utils.iml
@@ -40,6 +40,11 @@ <orderEntry type="library" name="Maven: org.slf4j:slf4j-log4j12:1.7.26" level="project" /> <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.7.0" level="project" /> <orderEntry type="library" name="Maven: com.squareup.okio:okio:1.12.0" level="project" /> <orderEntry type="library" name="Maven: com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.2.1" level="project" /> <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.12" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.10" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.10" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.10" level="project" /> <orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-core:2.6.11" level="project" /> <orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-web:2.0.4" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-context:4.3.0.RELEASE" level="project" /> @@ -103,9 +108,6 @@ <orderEntry type="library" name="Maven: com.github.jai-imageio:jai-imageio-core:1.3.0" level="project" /> <orderEntry type="library" name="Maven: com.qcloud:cos_api:5.2.4" level="project" /> <orderEntry type="library" name="Maven: joda-time:joda-time:2.9.6" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.5" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.0" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.8.5" level="project" /> <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.10" level="project" /> <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.1" level="project" /> <orderEntry type="library" name="Maven: commons-io:commons-io:2.4" level="project" /> @@ -115,7 +117,6 @@ <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.47" level="project" /> <orderEntry type="library" name="Maven: com.github.qcloudsms:qcloudsms:1.0.2" level="project" /> <orderEntry type="library" name="Maven: org.json:json:20170516" level="project" /> <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.3" level="project" /> <orderEntry type="library" name="Maven: org.mongodb:mongo-java-driver:2.13.0-rc0" level="project" /> <orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:1.10.10.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:1.13.10.RELEASE" level="project" />