facade-vip/src/main/java/com/ks/vip/pojo/DTO/PayWayInfoDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
facade-vip/src/main/java/com/ks/vip/service/VipOrederPayService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-lijin/src/main/java/com/ks/lijin/query/ProviderAccountQuery.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinProviderAccountServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-lijin/src/main/java/com/ks/lijin/util/Constant.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-lijin/src/main/resources/mapper/LiJinProviderAccountMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderPayServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
facade-vip/src/main/java/com/ks/vip/pojo/DTO/PayWayInfoDTO.java
New file @@ -0,0 +1,28 @@ package com.ks.vip.pojo.DTO; public class PayWayInfoDTO { //0-表示支付成功 private int payWay; private String payUrl; public PayWayInfoDTO(int payWay, String payUrl) { this.payWay = payWay; this.payUrl = payUrl; } public int getPayWay() { return payWay; } public void setPayWay(int payWay) { this.payWay = payWay; } public String getPayUrl() { return payUrl; } public void setPayUrl(String payUrl) { this.payUrl = payUrl; } } facade-vip/src/main/java/com/ks/vip/service/VipOrederPayService.java
New file @@ -0,0 +1,9 @@ package com.ks.vip.service; public interface VipOrederPayService { } service-lijin/src/main/java/com/ks/lijin/query/ProviderAccountQuery.java
@@ -11,6 +11,7 @@ // 名称 public String name; public Long providerId; public String appKey; public String appSecret; } service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinProviderAccountServiceImpl.java
@@ -27,6 +27,7 @@ ProviderAccountQuery query = new ProviderAccountQuery(); query.id = obj.getId(); query.state = obj.getState(); query.providerId = obj.getProviderId(); query.appKey = obj.getAppKey(); query.appSecret = obj.getAppSecret(); return liJinProviderAccountMapper.count(query); @@ -38,6 +39,7 @@ ProviderAccountQuery query = new ProviderAccountQuery(); query.id = obj.getId(); query.state = obj.getState(); query.providerId = obj.getProviderId(); query.appKey = obj.getAppKey(); query.appSecret = obj.getAppSecret(); query.start = (page - 1) * pageSize; @@ -45,6 +47,18 @@ return liJinProviderAccountMapper.listByPage(query); } @Override public List<LiJinProviderAccount> listByProviderId(Long providerId) { ProviderAccountQuery query = new ProviderAccountQuery(); query.state =1; query.providerId = providerId; query.start = 0; query.count = 1000; return liJinProviderAccountMapper.listByPage(query); } @Override public void insertSelective(LiJinProviderAccount t){ liJinProviderAccountMapper.insertSelective(t); service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java
@@ -13,6 +13,7 @@ import com.ks.lijin.service.LiJinProviderAccountService; import com.ks.lijin.service.LiJinProviderNoticeService; import com.ks.lijin.service.LijinCreateService; import com.ks.lijin.util.Constant; import com.ks.lijin.utils.taobao.TaoBaoUtil; import com.ks.lijin.utils.taobao.TaoKeApiUtil; import com.ks.vip.pojo.DO.VipGradePotence; @@ -30,6 +31,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @Service(version = "1.0") @@ -148,7 +150,6 @@ } @Override public boolean userCanCreateTBLijin(String uid, BigDecimal money) throws LiJinUserException { VipGradePotence potence = vipCenterService.getVipPotence(uid); @@ -190,7 +191,6 @@ } @Override @Transactional(rollbackFor = Exception.class) public LiJinExpendRecord createTBLijin(String uid, Long goodsId) throws LiJinException, LiJinGoodsException, LiJinUserException, LiJinAmountException { @@ -217,16 +217,11 @@ // 执行创建淘礼金 LiJinCreateParam params = getLiJinCreateParam(); // TODO // params.setAppkey(); // params.setAppsecret(); TaoLiJinDTO taoLiJinDTO = executeTaoLiJinAPI(uid, goodsId, lijinAmount, params); if (taoLiJinDTO == null) { throw new LiJinException(1, "淘宝API推广红包创建失败"); } // 保存记录 LiJinExpendRecord record = new LiJinExpendRecord(); @@ -243,36 +238,45 @@ } // 创建淘礼金 private TaoLiJinDTO executeTaoLiJinAPI(String uid, Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException { String appkey =params.getAppkey(); String appsecret = params.getAppsecret(); /** * 调用账号以及淘宝API * @param uid * @param goodsId * @param lijinAmount * @param params * @return * @throws LiJinGoodsException * @throws LiJinException */ private TaoLiJinDTO executeTaoLiJinAPI(String uid, Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException, LiJinException { // 查询供应商账号信息 List<LiJinProviderAccount> listAccount = liJinProviderAccountService.listByProviderId(Constant.PROVIDER_DEFAULT_ID); if (listAccount == null || listAccount.size() == 0) { throw new LiJinException(1, "供应商账号不存在"); } // 创建淘礼金红包 TaoLiJinDTO taoLiJinDTO = null; // 遍历账号 用可使用账号 for (LiJinProviderAccount account : listAccount) { params.setAppkey(account.getAppKey()); params.setAppsecret(account.getAppSecret()); try { taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(goodsId, params.getTitle(), lijinAmount, params.getNum(), params.getSendStartTime(), params.getSendEndTime(), params.getUseStartTime(), params.getUseEndTime(), new TaoKeAppInfo(appkey, appsecret, params.getPid())); taoLiJinDTO = executeTaoLiJinAPI(uid, goodsId, lijinAmount, params); if (taoLiJinDTO != null) { break; } } catch (LiJinException e) { // 通知相应供应商 TODO executor.execute(new Runnable() { @Override public void run() { LiJinProviderAccount account = liJinProviderAccountService.getByAppInfo(appkey, appsecret); if (account == null) { return; } LiJinProviderNotice notice = new LiJinProviderNotice(); notice.setRead(false); notice.setProviderId(account.getProviderId()); if (e.getCode() == LiJinException.CODE_TLJ_FORBIDDEN) { // 该商品不支持创建淘礼金红包 } else if (e.getCode() == LiJinException.CODE_TLJ_NO_MONEY) { if (e.getCode() == LiJinException.CODE_TLJ_NO_MONEY) { // 官方玩法钱包余额不足 notice.setTitle("玩法钱包余额不足"); notice.setContent("账号:"+ appkey +"官方玩法钱包余额不足"); notice.setContent("账号:" + account.getAccountName() + "官方玩法钱包余额不足"); notice.setType(NoticeTypeEnum.noMoney.name()); liJinProviderNoticeService.save(notice); } else if (e.getCode() == LiJinException.CODE_TLJ_UN_PAID) { @@ -281,11 +285,24 @@ } }); } return taoLiJinDTO; } // 创建淘礼金红包 return TaoKeApiUtil.createTaoLiJin(goodsId, params.getTitle(), lijinAmount, params.getNum(), params.getSendStartTime(), params.getSendEndTime(), params.getUseStartTime(), params.getUseEndTime(), new TaoKeAppInfo(params.getAppkey(), params.getAppsecret(), params.getPid())); } private BigDecimal getTBLijinAmount(TaoBaoGoodsBrief goods, VIPEnum vipRank) throws LiJinGoodsException,LiJinAmountException { /** * 获取商品可创建的礼金金额 * @param goods 商品 * @param vipRank 会员等级 * @return * @throws LiJinGoodsException * @throws LiJinAmountException */ private BigDecimal getTBLijinAmount(TaoBaoGoodsBrief goods, VIPEnum vipRank) throws LiJinGoodsException, LiJinAmountException { //获取商品可创建的淘礼金面额,若不能创建需要抛出相关的异常(1.商品不支持礼金创建) BigDecimal money = null; @@ -309,6 +326,7 @@ /** * 创建淘礼金基本参数 * * @return */ private LiJinCreateParam getLiJinCreateParam() { service-lijin/src/main/java/com/ks/lijin/util/Constant.java
@@ -2,8 +2,8 @@ public class Constant { //奖品领取有效期为7天 public final static long ACTIVITY_DRAWN_RECIEVE_VALID_TIME = 1000 * 60 * 60L * 24 * 7; // 默认供应商ID public final static long PROVIDER_DEFAULT_ID = 1L; } service-lijin/src/main/resources/mapper/LiJinProviderAccountMapper.xml
@@ -82,6 +82,7 @@ <sql id="listWhere"> <if test="query.id!=null">and ac_id=#{query.id}</if> <if test="query.name!=null">and ac_account_name=#{query.name}</if> <if test="query.providerId!=null">and ac_provider_id=#{query.providerId}</if> <if test="query.state!=null">and ac_state=#{query.state}</if> <if test="query.appKey!=null">and ac_app_key=#{query.appKey}</if> <if test="query.appSecret!=null">and ac_app_secret=#{query.appSecret}</if> service-vip/src/main/java/com/ks/vip/service/remote/VipOrderPayServiceImpl.java
New file @@ -0,0 +1,127 @@ package com.ks.vip.service.remote; import com.ks.vip.exception.VipOrderException; import com.ks.vip.mapper.VipOrderMapper; import com.ks.vip.pojo.DO.VipCombo; import com.ks.vip.pojo.DO.VipOrder; import com.ks.vip.pojo.DTO.PayWayInfoDTO; import com.ks.vip.pojo.DTO.VipOrderDTO; import com.ks.vip.pojo.Enums.OrderTypeEnum; import com.ks.vip.query.VipOrderQuery; import com.ks.vip.service.VipCenterService; import com.ks.vip.service.VipComboService; import com.ks.vip.service.VipOrederPayService; import com.ks.vip.service.VipOrederService; import com.ks.vip.util.Constant; import org.apache.dubbo.config.annotation.Service; import org.springframework.transaction.annotation.Transactional; import org.yeshi.utils.StringUtil; import org.yeshi.utils.alipay.AlipayH5PayUtil; import org.yeshi.utils.entity.wx.WXPayOrderInfoV3; import org.yeshi.utils.wx.WXPayV3Util; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Date; import java.util.List; import java.util.UUID; @Service(version = "1.0") public class VipOrderPayServiceImpl implements VipOrederPayService { @Resource private VipOrderMapper vipOrderMapper; @Resource private VipComboService vipComboService; @Resource private VipCenterService vipCenterService; @Transactional(rollbackFor = Exception.class) @Override public PayWayInfoDTO payOrder(OrderRecord record) throws OrderException, GoldCornException, PayException, VIPException, PPTVException, VideoBuyRecordException { String orderNo = VIPOrderUtil.getOutOrderNo(record.getOrderType(), record.getId()); switch (record.getPayWay()) { case OrderRecord.PAY_WAY_ALIPAY_GOLDCORN: try { goldCornManager.consumeGoldCorn(record, record.getGoldCorn()); } catch (Exception e) { throw new GoldCornException(1, "影视豆扣除出错"); } paySuccess(record.getId(), OrderRecord.PAY_WAY_GOLDCORN, null, new Date()); orderLogger.info("订单影视豆支付成功:id-{}", record.getId()); case OrderRecord.PAY_WAY_ALIPAY: { if (record.getMoney() != null && record.getMoney().compareTo(new BigDecimal(0)) == 0) { return new PayWayInfoDTO(0, VipUtil.getPaySuccessUrl(record.getId())); } //生成支付宝支付订单 String form = VipUtil.getVipChargeAlipayForm(record.getId(), record.getOrderType(), orderNo, record.getMoney()); //暂存2分钟 String id = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis()); redisManager.cacheCommonString(id, form, 120); String payUrl = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + id; orderLogger.info("订单创建支付宝支付链接成功:id-{} 链接-{}", record.getId(), payUrl); return new PayWayInfoDTO(OrderRecord .PAY_WAY_ALIPAY, payUrl); } case OrderRecord.PAY_WAY_WX_GOLDCORN: try { goldCornManager.consumeGoldCorn(record, record.getGoldCorn()); } catch (){ } } @Transactional(rollbackFor = Exception.class) @Override public OrderRecord checkOrderPayState(String id) { OrderRecord record = vipOrderRecordDao.find(OrderRecord.class, id); if (record.getState() == OrderRecord.STATE_PAY) return record; switch (record.getPayWay()) { case OrderRecord.PAY_WAY_ALIPAY_GOLDCORN: case OrderRecord.PAY_WAY_ALIPAY: { //支付宝 AlipayTradeQueryResponse res = null; try { res = AlipayH5PayUtil.queryOrder(VipUtil.getAlipayApp(), VIPOrderUtil.getOutOrderNo(record.getOrderType(), id), null); //支付成功 if (res.isSuccess() && "TRADE_SUCCESS".equalsIgnoreCase(res.getTradeStatus())) { try { return paySuccess(id, OrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getTotalAmount()), new Date()); } catch (Exception e) { e.printStackTrace(); } } } catch (AlipayApiException e) { e.printStackTrace(); } } break; case OrderRecord.PAY_WAY_WX_GOLDCORN: case OrderRecord.PAY_WAY_WX: { //微信 try { WXPayOrderInfoV3 info = WXPayV3Util.getPayOrderInfo(VIPOrderUtil.getOutOrderNo(record.getOrderType(), id), VipUtil.getWXAPP()); if (info != null && info.getTrade_state().equalsIgnoreCase("SUCCESS")) { paySuccess(id, record.getPayWay(), new BigDecimal(info.getAmount().getPayer_total()).divide(new BigDecimal(100), 2, RoundingMode.FLOOR), new Date()); return record; } } catch (Exception e) { e.printStackTrace(); } } break; } return record; } }