|
|
@@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springblade.common.enums.AppConstant;
|
|
|
import org.springblade.common.utils.BeanPropertyUtil;
|
|
|
+import org.springblade.common.utils.IPUtils;
|
|
|
import org.springblade.core.log.logger.BladeLogger;
|
|
|
import org.springblade.core.tool.utils.DateUtil;
|
|
|
import org.springblade.gateway.goods_gateway.exception.HelpGoodsException;
|
|
|
@@ -24,7 +25,9 @@ import org.springblade.sing.point.entity.PointRecord;
|
|
|
import org.springblade.sing.point.entity.UserPufaPoint;
|
|
|
import org.springblade.sing.point.service.IPointRecordService;
|
|
|
import org.springblade.sing.point.service.IUserPufaPointService;
|
|
|
+import org.springblade.sing.user.entity.LoginUser;
|
|
|
import org.springblade.sing.user.entity.UserAddress;
|
|
|
+import org.springblade.sing.user.service.ILoginUserService;
|
|
|
import org.springblade.sing.user.service.IUserAddressService;
|
|
|
import org.springblade.sing.yeepay.entity.YeepayOrder;
|
|
|
import org.springblade.sing.yeepay.enums.YeepayOrderPayStatus;
|
|
|
@@ -41,6 +44,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.Optional;
|
|
|
|
|
|
@Service
|
|
|
@@ -64,6 +68,8 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
@Autowired
|
|
|
private IYeepayOrderService yeepayOrderService;
|
|
|
@Autowired
|
|
|
+ private ILoginUserService loginUserService;
|
|
|
+ @Autowired
|
|
|
private YeePayConst yeePayConst;
|
|
|
@Autowired
|
|
|
private BladeLogger bladeLogger;
|
|
|
@@ -75,27 +81,27 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void pointExchange(YeepayOrder yeepayOrder) {
|
|
|
- UserPufaPoint user = userPufaPointService.getOne(new LambdaQueryWrapper<UserPufaPoint>().eq(UserPufaPoint::getPhone,yeepayOrder.getPhone()));
|
|
|
- Assert.notNull(user,"用户不存在");
|
|
|
+ UserPufaPoint user = userPufaPointService.getOne(new LambdaQueryWrapper<UserPufaPoint>().eq(UserPufaPoint::getPhone, yeepayOrder.getPhone()));
|
|
|
+ Assert.notNull(user, "用户不存在");
|
|
|
PointGoods goods = pointGoodsService.getById(yeepayOrder.getPointGoodsId());
|
|
|
- Assert.notNull(goods,"商品不存在");
|
|
|
+ Assert.notNull(goods, "商品不存在");
|
|
|
UserAddress address = userAddressService.getById(yeepayOrder.getAddressId());
|
|
|
- Assert.notNull(address,"请添加收货地址");
|
|
|
- Assert.notNull(yeepayOrder.getActiveId(),"兑换失败");
|
|
|
+ Assert.notNull(address, "请添加收货地址");
|
|
|
+ Assert.notNull(yeepayOrder.getActiveId(), "兑换失败");
|
|
|
|
|
|
Boolean isLimit = Optional.ofNullable(goods.getIsLimit()).orElse(false);
|
|
|
- if (isLimit){
|
|
|
+ if (isLimit) {
|
|
|
int size = goodsOrderService.list(new LambdaQueryWrapper<GoodsOrder>()
|
|
|
.eq(GoodsOrder::getPhone, yeepayOrder.getPhone()).eq(GoodsOrder::getPointGoodsId, yeepayOrder.getPointGoodsId())).size();
|
|
|
System.out.println(size);
|
|
|
- if ((yeepayOrder.getNum() + size) > goods.getLimitBuy()){
|
|
|
+ if ((yeepayOrder.getNum() + size) > goods.getLimitBuy()) {
|
|
|
throw new PointException("超过限购数量");
|
|
|
}
|
|
|
}
|
|
|
if (goods.getRemain() < yeepayOrder.getNum()) {
|
|
|
throw new PointException("库存不足");
|
|
|
}
|
|
|
- if (user.getPufaPoint().compareTo(BigDecimal.ZERO)<=0){
|
|
|
+ if (user.getPufaPoint().compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
throw new PointException("积分不足");
|
|
|
}
|
|
|
//商品所需积分
|
|
|
@@ -104,12 +110,12 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
|
|
|
BigDecimal userPoint = user.getPufaPoint().subtract(exchangePoint);
|
|
|
|
|
|
- if (userPoint.compareTo(BigDecimal.ZERO) < 0){
|
|
|
+ if (userPoint.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
throw new PointException("积分不足");
|
|
|
}
|
|
|
|
|
|
user.setPufaPoint(userPoint);
|
|
|
- Assert.isTrue(userPufaPointService.saveOrUpdate(user),"兑换失败");
|
|
|
+ Assert.isTrue(userPufaPointService.saveOrUpdate(user), "兑换失败");
|
|
|
//下单
|
|
|
yeepayOrder.setUserId(user.getUserId());
|
|
|
yeepayOrder.setUsePoint(exchangePoint);
|
|
|
@@ -123,26 +129,27 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
pointRecord.setPointType(PointTypeEnum.PUFA_POINT_EXCHANGE);
|
|
|
pointRecord.setPhone(yeepayOrder.getPhone());
|
|
|
pointRecord.setActiveId(yeepayOrder.getActiveId());
|
|
|
- Assert.isTrue(pointRecordService.save(pointRecord),"兑换失败");
|
|
|
+ Assert.isTrue(pointRecordService.save(pointRecord), "兑换失败");
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void cashExchange(YeepayOrder yeepayOrder) throws Exception {
|
|
|
- UserPufaPoint user = userPufaPointService.getOne(new LambdaQueryWrapper<UserPufaPoint>().eq(UserPufaPoint::getPhone,yeepayOrder.getPhone()));
|
|
|
- Assert.notNull(user,"用户不存在");
|
|
|
+ public HashMap<String, Object> cashExchange(YeepayOrder yeepayOrder) throws Exception {
|
|
|
+ LoginUser loginUser = loginUserService.getOne(new LambdaQueryWrapper<LoginUser>().eq(LoginUser::getPhone, yeepayOrder.getPhone()));
|
|
|
+ UserPufaPoint user = userPufaPointService.getOne(new LambdaQueryWrapper<UserPufaPoint>().eq(UserPufaPoint::getPhone, yeepayOrder.getPhone()));
|
|
|
+ Assert.notNull(user, "用户不存在");
|
|
|
PointGoods goods = pointGoodsService.getById(yeepayOrder.getPointGoodsId());
|
|
|
- Assert.notNull(goods,"商品不存在");
|
|
|
+ Assert.notNull(goods, "商品不存在");
|
|
|
UserAddress address = userAddressService.getById(yeepayOrder.getAddressId());
|
|
|
- Assert.notNull(address,"请添加收货地址");
|
|
|
- Assert.notNull(yeepayOrder.getActiveId(),"兑换失败");
|
|
|
+ Assert.notNull(address, "请添加收货地址");
|
|
|
+ Assert.notNull(yeepayOrder.getActiveId(), "兑换失败");
|
|
|
|
|
|
Boolean isLimit = Optional.ofNullable(goods.getIsLimit()).orElse(false);
|
|
|
- if (isLimit){
|
|
|
+ if (isLimit) {
|
|
|
int size = goodsOrderService.list(new LambdaQueryWrapper<GoodsOrder>().eq(GoodsOrder::getPhone, yeepayOrder.getPhone())
|
|
|
- .eq(GoodsOrder::getPointGoodsId, yeepayOrder.getPointGoodsId())).size();
|
|
|
- if ((yeepayOrder.getNum() + size) > goods.getLimitBuy()){
|
|
|
+ .eq(GoodsOrder::getPointGoodsId, yeepayOrder.getPointGoodsId())).size();
|
|
|
+ if ((yeepayOrder.getNum() + size) > goods.getLimitBuy()) {
|
|
|
throw new PointException("超过限购数量");
|
|
|
}
|
|
|
}
|
|
|
@@ -169,6 +176,7 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
yeepayOrder.setUserId(user.getUserId());
|
|
|
yeepayOrder.setUsePoint(BigDecimal.ZERO);
|
|
|
yeepayOrder.setPointGoodsName(goods.getName());
|
|
|
+ yeepayOrder.setIp(IPUtils.getRealIp(request));
|
|
|
|
|
|
// 请求易宝
|
|
|
try {
|
|
|
@@ -178,6 +186,10 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
.orderAmount(amount.doubleValue())
|
|
|
.goodsName(goods.getName())
|
|
|
.scene("OFFLINE")
|
|
|
+ .payWay("WECHAT_OFFIACCOUNT")
|
|
|
+ .userIp(yeepayOrder.getIp())
|
|
|
+ .channel("WECHAT")
|
|
|
+ .userId(yeepayOrder.getOpenId())
|
|
|
.appId(configForOfficial.getAppId())
|
|
|
//支付订单有效期为一天
|
|
|
.expiredTime(DateUtil.format(cn.hutool.core.date.DateUtil.offsetDay(DateUtil.now(), 1), DateUtil.PATTERN_DATETIME))
|
|
|
@@ -186,11 +198,14 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
//设置易宝配置内容
|
|
|
initOrderDto.setParentMerchantNo(yeePayConst.getPlatformServiceNo());
|
|
|
initOrderDto.setMerchantNo(yeePayConst.getMerchantNo());
|
|
|
- YopResponse yopResponse = yeepaySaasService.aggPayPayLink(initOrderDto);
|
|
|
+ YopResponse yopResponse = yeepaySaasService.aggPrepay(initOrderDto);
|
|
|
|
|
|
//返回数据
|
|
|
String stringResult = yopResponse.getStringResult();
|
|
|
JSONObject jsonObject = JSONObject.parseObject(stringResult);
|
|
|
+ //返回给前端
|
|
|
+ String prePayTn = jsonObject.getString("prePayTn");
|
|
|
+
|
|
|
if (!StringUtils.equals(jsonObject.getString("code"), "00000")) {
|
|
|
bladeLogger.error("创建道具订单错误", jsonObject.getString("message"));
|
|
|
log.error("创建道具订单错误:{}", jsonObject.getString("message"));
|
|
|
@@ -198,10 +213,22 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
}
|
|
|
yeepayOrder.setUniqueOrderNo(jsonObject.getString(BeanPropertyUtil.getFieldName(YeepayOrder::getUniqueOrderNo)));
|
|
|
yeepayOrder.setQrCodeUrl(jsonObject.getString(BeanPropertyUtil.getFieldName(YeepayOrder::getQrCodeUrl)));
|
|
|
-
|
|
|
+ yeepayOrder.setBankOrderId(jsonObject.get("bankOrderId").toString());
|
|
|
+ yeepayOrder.setPrePayTn(prePayTn);
|
|
|
//保存订单
|
|
|
Assert.isTrue(yeepayOrderService.save(yeepayOrder), "创建订单失败");
|
|
|
|
|
|
+ JSONObject prePayTnJson = JSONObject.parseObject(prePayTn);
|
|
|
+
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("appId", prePayTnJson.get("appId"));
|
|
|
+ map.put("timeStamp", prePayTnJson.get("timeStamp"));
|
|
|
+ map.put("nonceStr", prePayTnJson.get("nonceStr"));
|
|
|
+ map.put("package", prePayTnJson.get("package"));
|
|
|
+ map.put("signType", prePayTnJson.get("signType"));
|
|
|
+ map.put("paySign", prePayTnJson.get("paySign"));
|
|
|
+
|
|
|
+ return map;
|
|
|
} catch (Exception e) {
|
|
|
throw new Exception(e.getMessage());
|
|
|
}
|
|
|
@@ -230,14 +257,14 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
goodsOrder.setGoodsPoint(pointGoods.getPoint());
|
|
|
goodsOrder.setActiveId(yeepayOrder.getActiveId());
|
|
|
goodsOrder.setUserId(yeepayOrder.getUserId());
|
|
|
- if (yeepayOrder.getAmount() == null){
|
|
|
+ if (yeepayOrder.getAmount() == null || yeepayOrder.getAmount().equals(BigDecimal.ZERO)) {
|
|
|
goodsOrder.setCash(BigDecimal.ZERO);
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
goodsOrder.setCash(yeepayOrder.getAmount());
|
|
|
}
|
|
|
goodsOrder.setUsePoint(yeepayOrder.getUsePoint());
|
|
|
|
|
|
- Assert.isTrue(goodsOrderService.save(goodsOrder),"兑换失败");
|
|
|
+ Assert.isTrue(goodsOrderService.save(goodsOrder), "兑换失败");
|
|
|
|
|
|
//更新商品库存
|
|
|
pointGoods.setRemain(pointGoods.getRemain() - yeepayOrder.getNum());
|
|
|
@@ -254,13 +281,13 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
//根据回调信息,获取订单
|
|
|
Long orderId = jsonObject.getLong(BeanPropertyUtil.getFieldName(InitOrderDto::getOrderId));
|
|
|
YeepayOrder yeepayOrder = yeepayOrderService.getById(orderId);
|
|
|
- UserPufaPoint user = userPufaPointService.getOne(new LambdaQueryWrapper<UserPufaPoint>().eq(UserPufaPoint::getPhone,yeepayOrder.getPhone()));
|
|
|
+ UserPufaPoint user = userPufaPointService.getOne(new LambdaQueryWrapper<UserPufaPoint>().eq(UserPufaPoint::getPhone, yeepayOrder.getPhone()));
|
|
|
|
|
|
- if (yeepayOrder.getUsePoint() != null && !yeepayOrder.getUsePoint().equals(BigDecimal.ZERO)){
|
|
|
+ if (yeepayOrder.getUsePoint() != null && !yeepayOrder.getUsePoint().equals(BigDecimal.ZERO)) {
|
|
|
|
|
|
//更新用户积分
|
|
|
user.setPufaPoint(user.getPufaPoint().subtract(yeepayOrder.getUsePoint()));
|
|
|
- Assert.isTrue(userPufaPointService.saveOrUpdate(user),"兑换失败");
|
|
|
+ Assert.isTrue(userPufaPointService.saveOrUpdate(user), "兑换失败");
|
|
|
//添加积分消费记录
|
|
|
PointRecord pointRecord = new PointRecord();
|
|
|
pointRecord.setPoint(yeepayOrder.getUsePoint());
|
|
|
@@ -269,7 +296,7 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
pointRecord.setPointType(PointTypeEnum.PUFA_POINT_EXCHANGE);
|
|
|
pointRecord.setPhone(yeepayOrder.getPhone());
|
|
|
pointRecord.setActiveId(yeepayOrder.getActiveId());
|
|
|
- Assert.isTrue(pointRecordService.save(pointRecord),"兑换失败");
|
|
|
+ Assert.isTrue(pointRecordService.save(pointRecord), "兑换失败");
|
|
|
}
|
|
|
|
|
|
//设置订单状态
|
|
|
@@ -285,7 +312,7 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void hybridExchange(YeepayOrder yeepayOrder, BigDecimal point) throws Exception {
|
|
|
+ public HashMap<String, Object> hybridExchange(YeepayOrder yeepayOrder, BigDecimal point) throws Exception {
|
|
|
|
|
|
UserPufaPoint user = userPufaPointService.getOne(new LambdaQueryWrapper<UserPufaPoint>().eq(UserPufaPoint::getPhone, yeepayOrder.getPhone()));
|
|
|
Assert.notNull(user, "用户不存在");
|
|
|
@@ -297,7 +324,7 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
|
|
|
Boolean isLimit = Optional.ofNullable(goods.getIsLimit()).orElse(false);
|
|
|
if (isLimit) {
|
|
|
- int size = goodsOrderService.list(new LambdaQueryWrapper<GoodsOrder>().eq(GoodsOrder::getPhone, yeepayOrder.getPhone()).eq(GoodsOrder::getPointGoodsId,yeepayOrder.getPointGoodsId())).size();
|
|
|
+ int size = goodsOrderService.list(new LambdaQueryWrapper<GoodsOrder>().eq(GoodsOrder::getPhone, yeepayOrder.getPhone()).eq(GoodsOrder::getPointGoodsId, yeepayOrder.getPointGoodsId())).size();
|
|
|
if ((yeepayOrder.getNum() + size) > goods.getLimitBuy()) {
|
|
|
throw new PointException("超过限购数量");
|
|
|
}
|
|
|
@@ -312,10 +339,10 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
BigDecimal exchangeNum = BigDecimal.valueOf(yeepayOrder.getNum());
|
|
|
BigDecimal exchangePoint = goods.getPoint().multiply(exchangeNum);
|
|
|
|
|
|
- if (user.getPufaPoint().compareTo(exchangePoint) >= 0){
|
|
|
+ if (user.getPufaPoint().compareTo(exchangePoint) >= 0) {
|
|
|
log.info("积分兑换");
|
|
|
this.pointExchange(yeepayOrder);
|
|
|
- return;
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
//需要的现金
|
|
|
@@ -346,6 +373,10 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
.orderAmount(useCash.doubleValue())
|
|
|
.goodsName(goods.getName())
|
|
|
.scene("OFFLINE")
|
|
|
+ .payWay("WECHAT_OFFIACCOUNT")
|
|
|
+ .userIp(yeepayOrder.getIp())
|
|
|
+ .channel("WECHAT")
|
|
|
+ .userId(yeepayOrder.getOpenId())
|
|
|
.appId(configForOfficial.getAppId())
|
|
|
//支付订单有效期为一天
|
|
|
.expiredTime(DateUtil.format(cn.hutool.core.date.DateUtil.offsetDay(DateUtil.now(), 1), DateUtil.PATTERN_DATETIME))
|
|
|
@@ -359,6 +390,7 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
//返回数据
|
|
|
String stringResult = yopResponse.getStringResult();
|
|
|
JSONObject jsonObject = JSONObject.parseObject(stringResult);
|
|
|
+ String prePayTn = jsonObject.getString("prePayTn");
|
|
|
if (!StringUtils.equals(jsonObject.getString("code"), "00000")) {
|
|
|
bladeLogger.error("创建道具订单错误", jsonObject.getString("message"));
|
|
|
log.error("创建道具订单错误:{}", jsonObject.getString("message"));
|
|
|
@@ -366,10 +398,22 @@ public class PointExchangeServiceImpl implements PointExchangeService {
|
|
|
}
|
|
|
yeepayOrder.setUniqueOrderNo(jsonObject.getString(BeanPropertyUtil.getFieldName(YeepayOrder::getUniqueOrderNo)));
|
|
|
yeepayOrder.setQrCodeUrl(jsonObject.getString(BeanPropertyUtil.getFieldName(YeepayOrder::getQrCodeUrl)));
|
|
|
+ yeepayOrder.setBankOrderId(jsonObject.get("bankOrderId").toString());
|
|
|
+ yeepayOrder.setPrePayTn(prePayTn);
|
|
|
|
|
|
//保存订单
|
|
|
Assert.isTrue(yeepayOrderService.save(yeepayOrder), "创建订单失败");
|
|
|
+ JSONObject prePayTnJson = JSONObject.parseObject(prePayTn);
|
|
|
+
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("appId", prePayTnJson.get("appId"));
|
|
|
+ map.put("timeStamp", prePayTnJson.get("timeStamp"));
|
|
|
+ map.put("nonceStr", prePayTnJson.get("nonceStr"));
|
|
|
+ map.put("package", prePayTnJson.get("package"));
|
|
|
+ map.put("signType", prePayTnJson.get("signType"));
|
|
|
+ map.put("paySign", prePayTnJson.get("paySign"));
|
|
|
|
|
|
+ return map;
|
|
|
} catch (Exception e) {
|
|
|
throw new Exception(e.getMessage());
|
|
|
}
|