提交 bac2bb41 authored 作者: 吴德鹏's avatar 吴德鹏

修改佣金规则

上级 5101fc50
package com.example.afrishop_v3.controllers; package com.example.afrishop_v3.controllers;
import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.models.Activity;
import com.example.afrishop_v3.repository.ActivityRepository;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/** /**
* @Auther: wudepeng * @Auther: wudepeng
* @Date: 2020/11/30 * @Date: 2020/11/30
* @Description:活动管理 * @Description:活动管理
*/ */
@RestController @RestController
@RequestMapping("/activity")
public class ActivityController { public class ActivityController {
private final ActivityRepository activityRepository;
public ActivityController(ActivityRepository activityRepository) {
this.activityRepository = activityRepository;
}
@GetMapping("/getAllActivity")
public Result getAllActivity(@RequestParam("pageNum") Integer pageNum,
@RequestParam("pageSize") Integer pageSize) {
return new Result(activityRepository.getAllActivity());
}
} }
...@@ -22,6 +22,7 @@ public class AddressController extends Controller{ ...@@ -22,6 +22,7 @@ public class AddressController extends Controller{
private final AuthenticationUser user; private final AuthenticationUser user;
public AddressController(TbCfAddressRepository repository, UserRepository userRepository, AuthenticationUser user) { public AddressController(TbCfAddressRepository repository, UserRepository userRepository, AuthenticationUser user) {
super(networkRepository, bonusRepository, postRepository, orderRepository, userRepository);
this.repository = repository; this.repository = repository;
this.userRepository = userRepository; this.userRepository = userRepository;
this.user = user; this.user = user;
......
...@@ -30,7 +30,6 @@ import org.springframework.web.bind.annotation.*; ...@@ -30,7 +30,6 @@ import org.springframework.web.bind.annotation.*;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.Query; import javax.persistence.Query;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -57,6 +56,7 @@ public class AuthController extends Controller { ...@@ -57,6 +56,7 @@ public class AuthController extends Controller {
private static Logger logger = LoggerFactory.getLogger(AuthController.class); private static Logger logger = LoggerFactory.getLogger(AuthController.class);
public AuthController(AuthenticationManager authenticationManager, UserRepository userRepository, EmailHelper emailHelper, TbCfCouponRepository couponRepository, TbCfToicouponRepository toicouponRepository, NetworkRepository networkRepository, EntityManager entityManager, PasswordEncoder encoder, DomainProperties domainProperties, JwtUtils jwtUtils) { public AuthController(AuthenticationManager authenticationManager, UserRepository userRepository, EmailHelper emailHelper, TbCfCouponRepository couponRepository, TbCfToicouponRepository toicouponRepository, NetworkRepository networkRepository, EntityManager entityManager, PasswordEncoder encoder, DomainProperties domainProperties, JwtUtils jwtUtils) {
super(networkRepository, bonusRepository, postRepository, orderRepository, userRepository);
this.authenticationManager = authenticationManager; this.authenticationManager = authenticationManager;
this.userRepository = userRepository; this.userRepository = userRepository;
this.emailHelper = emailHelper; this.emailHelper = emailHelper;
...@@ -98,7 +98,7 @@ public class AuthController extends Controller { ...@@ -98,7 +98,7 @@ public class AuthController extends Controller {
TbCfUserInfo userInfo = byAccount.get(); TbCfUserInfo userInfo = byAccount.get();
fixCode(userInfo); fixCode(userInfo);
Authentication authentication; Authentication authentication;
try { try {
authentication = authenticationManager.authenticate( authentication = authenticationManager.authenticate(
......
...@@ -6,12 +6,8 @@ import com.example.afrishop_v3.config.DpoConfiguration; ...@@ -6,12 +6,8 @@ import com.example.afrishop_v3.config.DpoConfiguration;
import com.example.afrishop_v3.enums.DeliveryStatusEnum; import com.example.afrishop_v3.enums.DeliveryStatusEnum;
import com.example.afrishop_v3.enums.OrderStatusEnum; import com.example.afrishop_v3.enums.OrderStatusEnum;
import com.example.afrishop_v3.enums.ResultCodeEnum; import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.models.TbCfFinance; import com.example.afrishop_v3.models.*;
import com.example.afrishop_v3.models.TbCfOrder; import com.example.afrishop_v3.repository.*;
import com.example.afrishop_v3.models.TbCfUserInfo;
import com.example.afrishop_v3.repository.TbCfFinanceRepository;
import com.example.afrishop_v3.repository.TbCfOrderRepository;
import com.example.afrishop_v3.repository.UserRepository;
import com.example.afrishop_v3.security.services.AuthenticationUser; import com.example.afrishop_v3.security.services.AuthenticationUser;
import com.example.afrishop_v3.util.DataUtils; import com.example.afrishop_v3.util.DataUtils;
import com.example.afrishop_v3.util.HttpsUtil; import com.example.afrishop_v3.util.HttpsUtil;
...@@ -26,6 +22,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -26,6 +22,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
...@@ -42,13 +39,21 @@ public class DpoPayController extends Controller { ...@@ -42,13 +39,21 @@ public class DpoPayController extends Controller {
private final TbCfFinanceRepository financeRepository; private final TbCfFinanceRepository financeRepository;
private final AuthenticationUser user; private final AuthenticationUser user;
private final DpoConfiguration config; private final DpoConfiguration config;
private final NetworkRepository networkRepository;
private final BonusRepository bonusRepository;
private final PostRepository postRepository;
private final TbCfOrderRepository orderRepository;
public DpoPayController(TbCfOrderRepository repository, UserRepository userRepository, TbCfFinanceRepository financeRepository, AuthenticationUser user, DpoConfiguration config) { public DpoPayController(TbCfOrderRepository repository, UserRepository userRepository, TbCfFinanceRepository financeRepository, AuthenticationUser user, DpoConfiguration config, NetworkRepository networkRepository, BonusRepository bonusRepository, PostRepository postRepository, TbCfOrderRepository orderRepository) {
this.repository = repository; this.repository = repository;
this.userRepository = userRepository; this.userRepository = userRepository;
this.financeRepository = financeRepository; this.financeRepository = financeRepository;
this.user = user; this.user = user;
this.config = config; this.config = config;
this.networkRepository = networkRepository;
this.bonusRepository = bonusRepository;
this.postRepository = postRepository;
this.orderRepository = orderRepository;
} }
@GetMapping("/notify") @GetMapping("/notify")
...@@ -122,7 +127,7 @@ public class DpoPayController extends Controller { ...@@ -122,7 +127,7 @@ public class DpoPayController extends Controller {
if (config.getSuccessCode().equals(resCode)) { if (config.getSuccessCode().equals(resCode)) {
String userId = order.getUserId(); String userId = order.getUserId();
Optional<TbCfUserInfo> userInfoOptional = userRepository.findById(userId); Optional<TbCfUserInfo> userInfoOptional = userRepository.findById(userId);
if( userInfoOptional.isPresent() ) { if (userInfoOptional.isPresent()) {
TbCfUserInfo user = userInfoOptional.get(); TbCfUserInfo user = userInfoOptional.get();
System.out.println("user================" + user); System.out.println("user================" + user);
/** /**
...@@ -161,6 +166,21 @@ public class DpoPayController extends Controller { ...@@ -161,6 +166,21 @@ public class DpoPayController extends Controller {
verify = true; verify = true;
//清除缓存中的订单 //清除缓存中的订单
// removeRedisCache(tbCfOrderVo); // removeRedisCache(tbCfOrderVo);
//生成佣金
Optional<TbCfOrder> optional = orderRepository.findById(orderId);
if (optional.isPresent()) {
TbCfOrder tbCfOrder = optional.get();
Bonus bonus = new Bonus();
TbCfUserInfo userInfo = new TbCfUserInfo();
userInfo.setUserId(tbCfOrder.getUserId());
// bonus.setUserId(tbCfOrder.getUserId());
bonus.setOrderId(orderId);
bonus.setAmount(tbCfOrder.getItemsPrice());
System.out.println("佣金-----》》》订单号:"+orderId+"=user="+tbCfOrder.getUserId()+"=price="+tbCfOrder.getItemsPrice());
saveNetworkMarketing(bonus,tbCfOrder.getUserId());
}
} }
} }
...@@ -300,4 +320,101 @@ public class DpoPayController extends Controller { ...@@ -300,4 +320,101 @@ public class DpoPayController extends Controller {
paramMap.put("API3G", apiMap); paramMap.put("API3G", apiMap);
return paramMap; return paramMap;
} }
public Result saveNetworkMarketing(Bonus bonus,String userId) {
TbCfUserInfo info = user.user();
// Optional<String> userIdOptional = userId;
System.out.println("userId=="+userId);
String orderId = bonus.getOrderId();
if (orderId == null)
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!");
Optional<TbCfOrder> orderOptional = orderRepository.findById(orderId);
if (!orderOptional.isPresent())
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!");
TbCfOrder order = orderOptional.get();
if (!OrderStatusEnum.PAID.getValue().equals(order.getPayStatus())) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Invalid order status");
}
if (bonusRepository.existsByOrderId(orderId)) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Transaction already done !!!");
}
BigDecimal amount = bonus.getAmount();
if (!StringUtils.isBlank(userId)) {
Optional<TbCfUserInfo> optionalUser = userRepository.findById(userId);
if (optionalUser.isPresent()) {
TbCfUserInfo user = optionalUser.get();
Post post = bonus.getPost();
Optional<Post> postOptional = post == null ? Optional.empty() : postRepository.findById(post.getId());
String productSharer = bonus.getProductSharer();
Optional<TbCfUserInfo> sharer = Optional.empty();
if (productSharer != null) {
sharer = userRepository.findByCode(productSharer);
}
if (user.invited()) {
BigDecimal v = amount.multiply(BigDecimal.valueOf(10)).divide(BigDecimal.valueOf(100), RoundingMode.CEILING);
bonus.setAmount(v);
bonus.setUserInfo(user);
bonus.setPercentage(10);
bonus = bonusRepository.save(bonus);
if (user.hasFcm()) {
sendNotification(user.getFcm(), "Bonus alert !!", user.display() + ", You received bonus of $" + formatter.format(v) + " in your account");
}
}
TbCfUserInfo bonusInc = runBonusInc(user, amount, 5, false, orderId);
runBonusInc(sharer.orElseGet(() -> postOptional.isPresent() ? postOptional.get().getRealUser() : bonusInc), amount, 5, postOptional.isPresent() || sharer.isPresent(), orderId);
//runBonusInc(bonusInc, amount, 0);
}
}
return new Result<>(bonus);
}
private TbCfUserInfo runBonusInc(TbCfUserInfo user, BigDecimal amount, int percent, boolean direct, String orderId) {
if (user == null) return null;
Optional<Network> userCode = networkRepository.findByNetworkInfoCode(user.getCode());
if (userCode.isPresent() || direct) {
TbCfUserInfo userInfo = direct ? user : userCode.get().getUserInfo();
Bonus bonus = new Bonus();
bonus.setUserInfo(userInfo);
BigDecimal v = amount.multiply(BigDecimal.valueOf(percent));
v = v.divide(BigDecimal.valueOf(100), RoundingMode.CEILING);
bonus.setAmount(v);
bonus.setPercentage(percent);
bonus.setOrderId(orderId);
if (userInfo.invited()) {
bonusRepository.save(bonus);
// bonus = repository.save(bonus);
if (userInfo.hasFcm()) {
sendNotification(userInfo.getFcm(), "Bonus alert !!", userInfo.display() + ", You received bonus of $" + formatter.format(v) + " in your account");
}
}
return userInfo;
}
return null;
}
} }
...@@ -4,7 +4,6 @@ import com.example.afrishop_v3.base.Result; ...@@ -4,7 +4,6 @@ import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.base.StateConstant; import com.example.afrishop_v3.base.StateConstant;
import com.example.afrishop_v3.models.TbCfFeedback; import com.example.afrishop_v3.models.TbCfFeedback;
import com.example.afrishop_v3.repository.TbCfFeedbackRepository; import com.example.afrishop_v3.repository.TbCfFeedbackRepository;
import com.example.afrishop_v3.util.IdUtil;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Date; import java.util.Date;
......
...@@ -3,19 +3,17 @@ package com.example.afrishop_v3.controllers; ...@@ -3,19 +3,17 @@ package com.example.afrishop_v3.controllers;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.example.afrishop_v3.base.Result; import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.config.CardCharge; import com.example.afrishop_v3.config.CardCharge;
import com.example.afrishop_v3.config.DomainProperties;
import com.example.afrishop_v3.config.Environment; import com.example.afrishop_v3.config.Environment;
import com.example.afrishop_v3.config.RaveConstant; import com.example.afrishop_v3.config.RaveConstant;
import com.example.afrishop_v3.enums.DeliveryStatusEnum; import com.example.afrishop_v3.enums.DeliveryStatusEnum;
import com.example.afrishop_v3.enums.OrderStatusEnum; import com.example.afrishop_v3.enums.OrderStatusEnum;
import com.example.afrishop_v3.enums.ResultCodeEnum; import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.models.*; import com.example.afrishop_v3.models.*;
import com.example.afrishop_v3.repository.TbCfFinanceRepository; import com.example.afrishop_v3.repository.*;
import com.example.afrishop_v3.repository.TbCfOrderRepository;
import com.example.afrishop_v3.repository.UserRepository;
import com.example.afrishop_v3.security.services.AuthenticationUser; import com.example.afrishop_v3.security.services.AuthenticationUser;
import com.example.afrishop_v3.util.HttpClientUtil; import com.example.afrishop_v3.util.HttpClientUtil;
import com.example.afrishop_v3.util.IdUtil; import com.example.afrishop_v3.util.IdUtil;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject; import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -25,6 +23,8 @@ import org.springframework.http.ResponseEntity; ...@@ -25,6 +23,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*; import java.util.*;
@RestController @RestController
...@@ -37,6 +37,11 @@ public class FlutterWaveController extends Controller { ...@@ -37,6 +37,11 @@ public class FlutterWaveController extends Controller {
// private final DomainProperties domainProperties; // private final DomainProperties domainProperties;
private final AuthenticationUser user; private final AuthenticationUser user;
private final NetworkRepository networkRepository;
private final BonusRepository bonusRepository;
private final PostRepository postRepository;
private final TbCfOrderRepository orderRepository;
@Value("${flutter.refund_url}") @Value("${flutter.refund_url}")
private String FLUTTERWAVE_REFUND_URL; private String FLUTTERWAVE_REFUND_URL;
...@@ -60,12 +65,16 @@ public class FlutterWaveController extends Controller { ...@@ -60,12 +65,16 @@ public class FlutterWaveController extends Controller {
// // //校验API // // //校验API
// private String VERIFY_PAY_URL = "https://api.ravepay.co/flwv3-pug/getpaidx/api/v2/verify"; // private String VERIFY_PAY_URL = "https://api.ravepay.co/flwv3-pug/getpaidx/api/v2/verify";
public FlutterWaveController(TbCfOrderRepository repository, TbCfFinanceRepository financeRepository, UserRepository userRepository, AuthenticationUser user) { public FlutterWaveController(TbCfOrderRepository repository, TbCfFinanceRepository financeRepository, UserRepository userRepository, AuthenticationUser user, NetworkRepository networkRepository, BonusRepository bonusRepository, PostRepository postRepository, TbCfOrderRepository orderRepository) {
this.repository = repository; this.repository = repository;
this.financeRepository = financeRepository; this.financeRepository = financeRepository;
this.userRepository = userRepository; this.userRepository = userRepository;
// this.domainProperties = domainProperties; // this.domainProperties = domainProperties;
this.user = user; this.user = user;
this.networkRepository = networkRepository;
this.bonusRepository = bonusRepository;
this.postRepository = postRepository;
this.orderRepository = orderRepository;
} }
@PostMapping("/pay") @PostMapping("/pay")
...@@ -224,6 +233,21 @@ public class FlutterWaveController extends Controller { ...@@ -224,6 +233,21 @@ public class FlutterWaveController extends Controller {
}*/ }*/
//生成支付流水 //生成支付流水
TbCfFinance finance = createFinance(paymentid, authurl, tbCfOrderVo); TbCfFinance finance = createFinance(paymentid, authurl, tbCfOrderVo);
//生成佣金
Optional<TbCfOrder> optional = orderRepository.findById(orderId);
if (optional.isPresent()) {
TbCfOrder tbCfOrder = optional.get();
Bonus bonus = new Bonus();
TbCfUserInfo userInfo = new TbCfUserInfo();
userInfo.setUserId(tbCfOrder.getUserId());
// bonus.setUserId(tbCfOrder.getUserId());
bonus.setOrderId(orderId);
bonus.setAmount(tbCfOrder.getItemsPrice());
System.out.println("佣金-----》》》订单号:"+orderId+"=user="+tbCfOrder.getUserId()+"=price="+tbCfOrder.getItemsPrice());
saveNetworkMarketing(bonus,tbCfOrder.getUserId());
}
// TbCfFinanceVo tbCfFinanceVo = new TbCfFinanceVo(); // TbCfFinanceVo tbCfFinanceVo = new TbCfFinanceVo();
// BeanUtils.copyProperties(finance, tbCfFinanceVo); // BeanUtils.copyProperties(finance, tbCfFinanceVo);
// removeRedisCache(tbCfOrderVo); // removeRedisCache(tbCfOrderVo);
...@@ -333,4 +357,100 @@ public class FlutterWaveController extends Controller { ...@@ -333,4 +357,100 @@ public class FlutterWaveController extends Controller {
result.setData(key).setMessage(ResultCodeEnum.SUCCESS.getDesc()); result.setData(key).setMessage(ResultCodeEnum.SUCCESS.getDesc());
return result; return result;
} }
public Result saveNetworkMarketing(Bonus bonus,String userId) {
TbCfUserInfo info = user.user();
// Optional<String> userIdOptional = userId;
System.out.println("userId=="+userId);
String orderId = bonus.getOrderId();
if (orderId == null)
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!");
Optional<TbCfOrder> orderOptional = orderRepository.findById(orderId);
if (!orderOptional.isPresent())
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!");
TbCfOrder order = orderOptional.get();
if (!OrderStatusEnum.PAID.getValue().equals(order.getPayStatus())) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Invalid order status");
}
if (bonusRepository.existsByOrderId(orderId)) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Transaction already done !!!");
}
BigDecimal amount = bonus.getAmount();
if (!StringUtils.isBlank(userId)) {
Optional<TbCfUserInfo> optionalUser = userRepository.findById(userId);
if (optionalUser.isPresent()) {
TbCfUserInfo user = optionalUser.get();
Post post = bonus.getPost();
Optional<Post> postOptional = post == null ? Optional.empty() : postRepository.findById(post.getId());
String productSharer = bonus.getProductSharer();
Optional<TbCfUserInfo> sharer = Optional.empty();
if (productSharer != null) {
sharer = userRepository.findByCode(productSharer);
}
if (user.invited()) {
BigDecimal v = amount.multiply(BigDecimal.valueOf(10)).divide(BigDecimal.valueOf(100), RoundingMode.CEILING);
bonus.setAmount(v);
bonus.setUserInfo(user);
bonus.setPercentage(10);
bonus = bonusRepository.save(bonus);
if (user.hasFcm()) {
sendNotification(user.getFcm(), "Bonus alert !!", user.display() + ", You received bonus of $" + formatter.format(v) + " in your account");
}
}
TbCfUserInfo bonusInc = runBonusInc(user, amount, 5, false, orderId);
runBonusInc(sharer.orElseGet(() -> postOptional.isPresent() ? postOptional.get().getRealUser() : bonusInc), amount, 5, postOptional.isPresent() || sharer.isPresent(), orderId);
//runBonusInc(bonusInc, amount, 0);
}
}
return new Result<>(bonus);
}
private TbCfUserInfo runBonusInc(TbCfUserInfo user, BigDecimal amount, int percent, boolean direct, String orderId) {
if (user == null) return null;
Optional<Network> userCode = networkRepository.findByNetworkInfoCode(user.getCode());
if (userCode.isPresent() || direct) {
TbCfUserInfo userInfo = direct ? user : userCode.get().getUserInfo();
Bonus bonus = new Bonus();
bonus.setUserInfo(userInfo);
BigDecimal v = amount.multiply(BigDecimal.valueOf(percent));
v = v.divide(BigDecimal.valueOf(100), RoundingMode.CEILING);
bonus.setAmount(v);
bonus.setPercentage(percent);
bonus.setOrderId(orderId);
if (userInfo.invited()) {
bonusRepository.save(bonus);
// bonus = repository.save(bonus);
if (userInfo.hasFcm()) {
sendNotification(userInfo.getFcm(), "Bonus alert !!", userInfo.display() + ", You received bonus of $" + formatter.format(v) + " in your account");
}
}
return userInfo;
}
return null;
}
} }
...@@ -3,7 +3,6 @@ package com.example.afrishop_v3.controllers; ...@@ -3,7 +3,6 @@ package com.example.afrishop_v3.controllers;
import com.example.afrishop_v3.base.Result; import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.enums.ResultCodeEnum; import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.models.ItemLabel; import com.example.afrishop_v3.models.ItemLabel;
import com.example.afrishop_v3.models.Post;
import com.example.afrishop_v3.models.TbCfStationItem; import com.example.afrishop_v3.models.TbCfStationItem;
import com.example.afrishop_v3.repository.ItemLabelRepository; import com.example.afrishop_v3.repository.ItemLabelRepository;
import com.example.afrishop_v3.repository.TbCfStationItemRepository; import com.example.afrishop_v3.repository.TbCfStationItemRepository;
...@@ -15,7 +14,6 @@ import org.springframework.data.domain.PageRequest; ...@@ -15,7 +14,6 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
...@@ -31,6 +29,7 @@ public class ImageSearchController extends Controller { ...@@ -31,6 +29,7 @@ public class ImageSearchController extends Controller {
public ImageSearchController(TbCfStationItemRepository repository, ItemLabelRepository labelRepository) { public ImageSearchController(TbCfStationItemRepository repository, ItemLabelRepository labelRepository) {
this.repository = repository; this.repository = repository;
this.labelRepository = labelRepository; this.labelRepository = labelRepository;
} }
......
...@@ -7,10 +7,8 @@ import com.example.afrishop_v3.config.PaypalPaymentMethod; ...@@ -7,10 +7,8 @@ import com.example.afrishop_v3.config.PaypalPaymentMethod;
import com.example.afrishop_v3.enums.DeliveryStatusEnum; import com.example.afrishop_v3.enums.DeliveryStatusEnum;
import com.example.afrishop_v3.enums.OrderStatusEnum; import com.example.afrishop_v3.enums.OrderStatusEnum;
import com.example.afrishop_v3.enums.ResultCodeEnum; import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.models.TbCfFinance; import com.example.afrishop_v3.models.*;
import com.example.afrishop_v3.models.TbCfOrder; import com.example.afrishop_v3.repository.*;
import com.example.afrishop_v3.repository.TbCfFinanceRepository;
import com.example.afrishop_v3.repository.TbCfOrderRepository;
import com.example.afrishop_v3.util.IdUtil; import com.example.afrishop_v3.util.IdUtil;
import com.paypal.api.payments.*; import com.paypal.api.payments.*;
import com.paypal.base.rest.APIContext; import com.paypal.base.rest.APIContext;
...@@ -25,6 +23,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -25,6 +23,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
...@@ -39,7 +38,7 @@ import java.util.Optional; ...@@ -39,7 +38,7 @@ import java.util.Optional;
@RestController @RestController
@RequestMapping(value = "/paypal") @RequestMapping(value = "/paypal")
@Transactional @Transactional
public class PaypalContoller { public class PaypalContoller extends Controller {
private static Logger logger = LoggerFactory.getLogger(PaypalContoller.class); private static Logger logger = LoggerFactory.getLogger(PaypalContoller.class);
...@@ -57,15 +56,22 @@ public class PaypalContoller { ...@@ -57,15 +56,22 @@ public class PaypalContoller {
private final APIContext apiContext; private final APIContext apiContext;
private final TbCfOrderRepository orderRepository; private final TbCfOrderRepository orderRepository;
private final TbCfFinanceRepository financeRepository; private final TbCfFinanceRepository financeRepository;
private final NetworkRepository networkRepository;
private final BonusRepository bonusRepository;
private final PostRepository postRepository;
private final UserRepository userRepository;
public PaypalContoller(APIContext apiContext, TbCfOrderRepository orderRepository, TbCfFinanceRepository financeRepository) { public PaypalContoller(APIContext apiContext, TbCfOrderRepository orderRepository, TbCfFinanceRepository financeRepository, NetworkRepository networkRepository, BonusRepository bonusRepository, PostRepository postRepository, UserRepository userRepository) {
this.apiContext = apiContext; this.apiContext = apiContext;
this.orderRepository = orderRepository; this.orderRepository = orderRepository;
this.financeRepository = financeRepository; this.financeRepository = financeRepository;
this.networkRepository = networkRepository;
this.bonusRepository = bonusRepository;
this.postRepository = postRepository;
this.userRepository = userRepository;
} }
...@@ -208,6 +214,20 @@ public class PaypalContoller { ...@@ -208,6 +214,20 @@ public class PaypalContoller {
//数据库校验支付状态##PayStatus 20 //数据库校验支付状态##PayStatus 20
if (OrderStatusEnum.PAID.getValue().equals(tbCfOrder.getPayStatus())) if (OrderStatusEnum.PAID.getValue().equals(tbCfOrder.getPayStatus()))
verify = true; verify = true;
//生成佣金
Optional<TbCfOrder> optional = orderRepository.findById(orderId);
if (optional.isPresent()) {
TbCfOrder order1 = optional.get();
Bonus bonus = new Bonus();
TbCfUserInfo userInfo = new TbCfUserInfo();
userInfo.setUserId(order1.getUserId());
// bonus.setUserId(tbCfOrder.getUserId());
bonus.setOrderId(orderId);
bonus.setAmount(order1.getItemsPrice());
System.out.println("佣金-----》》》订单号:"+orderId+"=user="+order1.getUserId()+"=price="+order1.getItemsPrice());
saveNetworkMarketing(bonus,order1.getUserId());
}
} }
} }
...@@ -265,4 +285,100 @@ public class PaypalContoller { ...@@ -265,4 +285,100 @@ public class PaypalContoller {
String now = format.format(new Date()); String now = format.format(new Date());
return now; return now;
} }
public Result saveNetworkMarketing(Bonus bonus, String userId) {
// TbCfUserInfo info = user.user();
// Optional<String> userIdOptional = userId;
System.out.println("userId=="+userId);
String orderId = bonus.getOrderId();
if (orderId == null)
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!");
Optional<TbCfOrder> orderOptional = orderRepository.findById(orderId);
if (!orderOptional.isPresent())
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!");
TbCfOrder order = orderOptional.get();
if (!OrderStatusEnum.PAID.getValue().equals(order.getPayStatus())) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Invalid order status");
}
if (bonusRepository.existsByOrderId(orderId)) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Transaction already done !!!");
}
BigDecimal amount = bonus.getAmount();
if (!StringUtils.isBlank(userId)) {
Optional<TbCfUserInfo> optionalUser = userRepository.findById(userId);
if (optionalUser.isPresent()) {
TbCfUserInfo user = optionalUser.get();
Post post = bonus.getPost();
Optional<Post> postOptional = post == null ? Optional.empty() : postRepository.findById(post.getId());
String productSharer = bonus.getProductSharer();
Optional<TbCfUserInfo> sharer = Optional.empty();
if (productSharer != null) {
sharer = userRepository.findByCode(productSharer);
}
if (user.invited()) {
BigDecimal v = amount.multiply(BigDecimal.valueOf(10)).divide(BigDecimal.valueOf(100), RoundingMode.CEILING);
bonus.setAmount(v);
bonus.setUserInfo(user);
bonus.setPercentage(10);
bonus = bonusRepository.save(bonus);
if (user.hasFcm()) {
sendNotification(user.getFcm(), "Bonus alert !!", user.display() + ", You received bonus of $" + formatter.format(v) + " in your account");
}
}
TbCfUserInfo bonusInc = runBonusInc(user, amount, 5, false, orderId);
runBonusInc(sharer.orElseGet(() -> postOptional.isPresent() ? postOptional.get().getRealUser() : bonusInc), amount, 5, postOptional.isPresent() || sharer.isPresent(), orderId);
//runBonusInc(bonusInc, amount, 0);
}
}
return new Result<>(bonus);
}
private TbCfUserInfo runBonusInc(TbCfUserInfo user, BigDecimal amount, int percent, boolean direct, String orderId) {
if (user == null) return null;
Optional<Network> userCode = networkRepository.findByNetworkInfoCode(user.getCode());
if (userCode.isPresent() || direct) {
TbCfUserInfo userInfo = direct ? user : userCode.get().getUserInfo();
Bonus bonus = new Bonus();
bonus.setUserInfo(userInfo);
BigDecimal v = amount.multiply(BigDecimal.valueOf(percent));
v = v.divide(BigDecimal.valueOf(100), RoundingMode.CEILING);
bonus.setAmount(v);
bonus.setPercentage(percent);
bonus.setOrderId(orderId);
if (userInfo.invited()) {
bonusRepository.save(bonus);
// bonus = repository.save(bonus);
if (userInfo.hasFcm()) {
sendNotification(userInfo.getFcm(), "Bonus alert !!", userInfo.display() + ", You received bonus of $" + formatter.format(v) + " in your account");
}
}
return userInfo;
}
return null;
}
} }
...@@ -20,10 +20,8 @@ import org.springframework.data.domain.PageRequest; ...@@ -20,10 +20,8 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.awt.print.Pageable;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Optional; import java.util.Optional;
@RestController @RestController
......
package com.example.afrishop_v3.models;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 实体
* 表名 activity
*
* @author lipengjun
* @date 2020-11-28 16:30:49
*/
@Entity
public class Activity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 活动ID
*/
@Id
private String id;
/**
* 活动名称
*/
private String name;
/**
* 活动类型 1:满减 2:满折 3:满几件打折
*/
private Integer type;
/**
* 使用类型 1:全场 2:分类商品 3:特定商品
*/
private Integer useType;
/**
* 商品分类ID
*/
private String categoryId;
/**
* 活动图片
*/
private String picture;
/**
* 满减金额
*/
private BigDecimal fullAmount;
/**
* 抵扣金额
*/
private BigDecimal reducedAmount;
/**
* 折扣率
*/
private Double discountRate;
/**
* 商品IDS
*/
private String itemIds;
/**
* 活动状态 0:关闭 1:开启
*/
private Integer status;
/**
* 活动开始时间
*/
private Date startTime;
/**
* 活动结束时间
*/
private Date endTime;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
// @Transient
// private List<TbCfStationItem> itemList;
/**
* 设置:活动ID
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取:活动ID
*/
public String getId() {
return id;
}
/**
* 设置:活动名称
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取:活动名称
*/
public String getName() {
return name;
}
/**
* 设置:活动类型 1:满减 2:满折 3:满几件打折
*/
public void setType(Integer type) {
this.type = type;
}
/**
* 获取:活动类型 1:满减 2:满折 3:满几件打折
*/
public Integer getType() {
return type;
}
/**
* 设置:使用类型 1:全场 2:分类商品 3:特定商品
*/
public void setUseType(Integer useType) {
this.useType = useType;
}
/**
* 获取:使用类型 1:全场 2:分类商品 3:特定商品
*/
public Integer getUseType() {
return useType;
}
/**
* 设置:商品分类ID
*/
public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
}
/**
* 获取:商品分类ID
*/
public String getCategoryId() {
return categoryId;
}
/**
* 设置:活动图片
*/
public void setPicture(String picture) {
this.picture = picture;
}
/**
* 获取:活动图片
*/
public String getPicture() {
return picture;
}
/**
* 设置:满减金额
*/
public void setFullAmount(BigDecimal fullAmount) {
this.fullAmount = fullAmount;
}
/**
* 获取:满减金额
*/
public BigDecimal getFullAmount() {
return fullAmount;
}
/**
* 设置:抵扣金额
*/
public void setReducedAmount(BigDecimal reducedAmount) {
this.reducedAmount = reducedAmount;
}
/**
* 获取:抵扣金额
*/
public BigDecimal getReducedAmount() {
return reducedAmount;
}
/**
* 设置:折扣率
*/
public void setdiscountRate(Double discountRate) {
this.discountRate = discountRate;
}
/**
* 获取:折扣率
*/
public Double getdiscountRate() {
return discountRate;
}
/**
* 设置:商品IDS
*/
public void setItemIds(String itemIds) {
this.itemIds = itemIds;
}
/**
* 获取:商品IDS
*/
public String getItemIds() {
return itemIds;
}
/**
* 设置:活动状态 0:关闭 1:开启
*/
public void setStatus(Integer status) {
this.status = status;
}
/**
* 获取:活动状态 0:关闭 1:开启
*/
public Integer getStatus() {
return status;
}
/**
* 设置:活动开始时间
*/
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
/**
* 获取:活动开始时间
*/
public Date getStartTime() {
return startTime;
}
/**
* 设置:活动结束时间
*/
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
/**
* 获取:活动结束时间
*/
public Date getEndTime() {
return endTime;
}
/**
* 设置:创建时间
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
/**
* 获取:创建时间
*/
public Date getCreateTime() {
return createTime;
}
/**
* 设置:更新时间
*/
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
/**
* 获取:更新时间
*/
public Date getUpdateTime() {
return updateTime;
}
public Double getDiscountRate() {
return discountRate;
}
public void setDiscountRate(Double discountRate) {
this.discountRate = discountRate;
}
}
...@@ -57,6 +57,13 @@ public class Bonus extends Model { ...@@ -57,6 +57,13 @@ public class Bonus extends Model {
private double percentage; private double percentage;
@Transient
private String userId;
public void setUserId(String userId) {
this.userId = userId;
}
public void setOrderId(String orderId) { public void setOrderId(String orderId) {
this.orderId = orderId; this.orderId = orderId;
} }
......
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.Activity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
/**
* @Auther: wudepeng
* @Date: 2020/12/02
* @Description:
*/
public interface ActivityRepository extends JpaRepository<Activity,String> {
@Query(value = "select a from Activity a where CURRENT_TIMESTAMP between startTime and endTime and status=1")
List<Activity> getAllActivity();
}
...@@ -66,7 +66,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -66,7 +66,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests().antMatchers("/api/auth/**", "/search/image/**", "/itemStation/**", "/startPage/**", .authorizeRequests().antMatchers("/api/auth/**", "/search/image/**", "/itemStation/**", "/startPage/**",
"/goodsType/**", "/home/**", "/spider/**", "/store/**", "/shopify/**", "/community/**", "/version/**", "/goodsType/**", "/home/**", "/spider/**", "/store/**", "/shopify/**", "/community/**", "/version/**",
"/flutterwave/notify/**", "/dpo/notify/**", "/advertisement/**", "/website/**","/paypal/**").permitAll() "/flutterwave/notify/**", "/dpo/notify/**", "/advertisement/**", "/website/**","/paypal/**","/discover/bonus/**").permitAll()
.antMatchers("/api/test/**").permitAll() .antMatchers("/api/test/**").permitAll()
.anyRequest().authenticated(); .anyRequest().authenticated();
......
//package com.example.afrishop_v3; //package com.example.afrishop_v3;
// //
//import com.example.afrishop_v3.models.JsonTag;
//import com.example.afrishop_v3.models.TbCfOrder;
//import com.example.afrishop_v3.repository.TbCfOrderRepository;
//import com.google.gson.JsonObject;
//import net.sf.json.JSONObject;
//import org.junit.jupiter.api.Test; //import org.junit.jupiter.api.Test;
//import org.junit.runner.Result;
//import org.junit.runner.RunWith; //import org.junit.runner.RunWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.context.SpringBootTest; //import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.http.ResponseEntity;
//import org.springframework.test.context.junit4.SpringRunner; //import org.springframework.test.context.junit4.SpringRunner;
//import org.springframework.web.client.RestTemplate;
// //
//import java.text.SimpleDateFormat; //import java.text.SimpleDateFormat;
//import java.time.LocalDateTime; //import java.time.LocalDateTime;
//import java.util.Date; //import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Optional;
// //
//@RunWith(SpringRunner.class) //@RunWith(SpringRunner.class)
//@SpringBootTest //@SpringBootTest
//public class AfrishopV3ApplicationTests { //public class AfrishopV3ApplicationTests {
// //
// RestTemplate restTemplate = new RestTemplate();
//
// @Test // @Test
// void contextLoads() { // void contextLoads() {
// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
...@@ -20,4 +34,27 @@ ...@@ -20,4 +34,27 @@
// System.out.println(now); // System.out.println(now);
// } // }
// //
// private String url = "http://localhost:8099/afrishop/discover/bonus/saveNetworkMarketing";
// @Autowired
// private TbCfOrderRepository orderRepository;
//
//// post35789572fbf643cdab55901d1dc511a6
//// userInfo00297bf300ed45e092a5182dececad21
//// productSharervv32GmG4q
//// amount0.9
//// orderId008272b1fb994aef9b199449f46d5aa5
//
// @Test
// public void test1() {
//
// Optional<TbCfOrder> byId = orderRepository.findById("12a9d7d1042348278c97980a00fc67c4");
// JSONObject json=new JSONObject();
// json.put("userInfo", "32dcda5a709c4265a6f01686ae9b1c1c");
// json.put("amount", byId.get().getItemsPrice());
// json.put("orderId","12a9d7d1042348278c97980a00fc67c4");
// System.out.println(json);
// ResponseEntity<Result> resultResponseEntity = restTemplate.postForEntity(url, json, Result.class);
// System.err.println(resultResponseEntity);
// }
//
//} //}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论