提交 50c78a79 authored 作者: Whispa's avatar Whispa

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/com/example/afrishop_v3/controllers/FlutterWaveController.java
#	src/main/java/com/example/afrishop_v3/security/WebSecurityConfig.java
...@@ -189,73 +189,73 @@ public class BonusController extends Controller { ...@@ -189,73 +189,73 @@ public class BonusController extends Controller {
TbCfUserInfo info = user.user(); TbCfUserInfo info = user.user();
Optional<String> userIdOptional = bonus.userId(); // Optional<String> userIdOptional = bonus.userId();
//
String orderId = bonus.getOrderId(); // String orderId = bonus.getOrderId();
//
if( orderId == null ) // if( orderId == null )
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Order is missing !!!"); // return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Order is missing !!!");
//
Optional<TbCfOrder> orderOptional = orderRepository.findById(orderId); // Optional<TbCfOrder> orderOptional = orderRepository.findById(orderId);
//
if( !orderOptional.isPresent() ) // if( !orderOptional.isPresent() )
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Order is missing !!!"); // return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Order is missing !!!");
//
TbCfOrder order = orderOptional.get(); // TbCfOrder order = orderOptional.get();
//
if( !OrderStatusEnum.PAID.getValue().equals(order.getPayStatus()) ){ // if( !OrderStatusEnum.PAID.getValue().equals(order.getPayStatus()) ){
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Invalid order status"); // return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Invalid order status");
} // }
//
if( repository.existsByOrderId(orderId) ){ // if( repository.existsByOrderId(orderId) ){
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Transaction already done !!!"); // return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Transaction already done !!!");
} // }
//
//
BigDecimal amount = bonus.getAmount(); // BigDecimal amount = bonus.getAmount();
//
if (userIdOptional.isPresent()) { // if (userIdOptional.isPresent()) {
//
Optional<TbCfUserInfo> optionalUser = userRepository.findById(userIdOptional.get()); // Optional<TbCfUserInfo> optionalUser = userRepository.findById(userIdOptional.get());
//
if (optionalUser.isPresent()) { // if (optionalUser.isPresent()) {
//
TbCfUserInfo user = optionalUser.get(); // TbCfUserInfo user = optionalUser.get();
//
Post post = bonus.getPost(); // Post post = bonus.getPost();
//
Optional<Post> postOptional = post == null ? Optional.empty() : postRepository.findById(post.getId()); // Optional<Post> postOptional = post == null ? Optional.empty() : postRepository.findById(post.getId());
//
String productSharer = bonus.getProductSharer(); // String productSharer = bonus.getProductSharer();
//
Optional<TbCfUserInfo> sharer = Optional.empty(); // Optional<TbCfUserInfo> sharer = Optional.empty();
//
if( productSharer != null){ // if( productSharer != null){
sharer = userRepository.findByCode(productSharer); // sharer = userRepository.findByCode(productSharer);
} // }
//
//
if (user.invited()) { // if (user.invited()) {
BigDecimal v = amount.multiply(BigDecimal.valueOf(10)).divide(BigDecimal.valueOf(100),RoundingMode.CEILING); // BigDecimal v = amount.multiply(BigDecimal.valueOf(10)).divide(BigDecimal.valueOf(100),RoundingMode.CEILING);
bonus.setAmount(v); // bonus.setAmount(v);
bonus.setUserInfo(user); // bonus.setUserInfo(user);
bonus.setPercentage(10); // bonus.setPercentage(10);
bonus = repository.save(bonus); // bonus = repository.save(bonus);
if( user.hasFcm() ){ // if( user.hasFcm() ){
sendNotification(user.getFcm(),"Bonus alert !!",user.display()+", You received bonus of $"+formatter.format(v)+" in your account"); // 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); // TbCfUserInfo bonusInc = runBonusInc(user, amount, 5,false, orderId);
if (sharer.isPresent()&&sharer.get().getUserId().equals(user.getUserId())){ // if (sharer.isPresent()&&sharer.get().getUserId().equals(user.getUserId())){
runBonusInc(bonusInc, amount, 5,false, orderId); // runBonusInc(bonusInc, amount, 5,false, orderId);
} // }
runBonusInc(sharer.orElseGet(() -> (postOptional.isPresent()&& !postOptional.get().getUserId().equals(user.getUserId()))? postOptional.get().getRealUser() : bonusInc), // runBonusInc(sharer.orElseGet(() -> (postOptional.isPresent()&& !postOptional.get().getUserId().equals(user.getUserId()))? postOptional.get().getRealUser() : bonusInc),
amount, 5,postOptional.isPresent() || sharer.isPresent(), orderId); // amount, 5,postOptional.isPresent() || sharer.isPresent(), orderId);
//runBonusInc(bonusInc, amount, 0); // //runBonusInc(bonusInc, amount, 0);
} // }
} // }
return new Result<>(bonus); return new Result<>(bonus);
} }
......
...@@ -28,6 +28,7 @@ import java.util.Date; ...@@ -28,6 +28,7 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.locks.ReentrantLock;
@RestController @RestController
@RequestMapping("/dpo") @RequestMapping("/dpo")
...@@ -44,6 +45,7 @@ public class DpoPayController extends Controller { ...@@ -44,6 +45,7 @@ public class DpoPayController extends Controller {
private final PostRepository postRepository; private final PostRepository postRepository;
private final TbCfOrderRepository orderRepository; private final TbCfOrderRepository orderRepository;
public DpoPayController(TbCfOrderRepository repository, UserRepository userRepository, TbCfFinanceRepository financeRepository, AuthenticationUser user, DpoConfiguration config, NetworkRepository networkRepository, BonusRepository bonusRepository, PostRepository postRepository, TbCfOrderRepository orderRepository) { 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;
...@@ -336,7 +338,7 @@ public class DpoPayController extends Controller { ...@@ -336,7 +338,7 @@ public class DpoPayController extends Controller {
tranMap.put("CompanyRefUnique", 0); tranMap.put("CompanyRefUnique", 0);
// logger.info("getOrderSource---------->>>>>>>>>>>>" + order.getOrderSource()); // logger.info("getOrderSource---------->>>>>>>>>>>>" + order.getOrderSource());
//回调地址 //回调地址
if ("2".equals(order.getOrderSource().toString())||"3".equals(order.getOrderSource().toString())) { if ("2".equals(order.getOrderSource().toString()) || "3".equals(order.getOrderSource().toString())) {
tranMap.put("RedirectURL", config.getNotifyUrl() + "/web"); tranMap.put("RedirectURL", config.getNotifyUrl() + "/web");
} else { } else {
tranMap.put("RedirectURL", config.getNotifyUrl()); tranMap.put("RedirectURL", config.getNotifyUrl());
...@@ -360,36 +362,35 @@ public class DpoPayController extends Controller { ...@@ -360,36 +362,35 @@ public class DpoPayController extends Controller {
} }
public Result saveNetworkMarketing(Bonus bonus, String userId) { public void saveNetworkMarketing(Bonus bonus, String userId) {
TbCfUserInfo info = user.user();
// Optional<String> userIdOptional = userId;
System.out.println("userId==" + userId);
String orderId = bonus.getOrderId(); String orderId = bonus.getOrderId();
if (orderId == null) if (orderId == null)
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!"); logger.info("佣金:orderId为空");
Optional<TbCfOrder> orderOptional = orderRepository.findById(orderId); Optional<TbCfOrder> orderOptional = orderRepository.findById(orderId);
if (!orderOptional.isPresent()) if (!orderOptional.isPresent())
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!"); logger.info("佣金:订单不存在");
TbCfOrder order = orderOptional.get(); TbCfOrder order = orderOptional.get();
if (!OrderStatusEnum.PAID.getValue().equals(order.getPayStatus())) { if (!OrderStatusEnum.PAID.getValue().equals(order.getPayStatus())) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Invalid order status"); logger.info("佣金:订单未支付");
} }
if (bonusRepository.existsByOrderId(orderId)) { boolean condition = orderId != null && orderOptional.isPresent() && OrderStatusEnum.PAID.getValue().equals(order.getPayStatus()) && !StringUtils.isBlank(userId);
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Transaction already done !!!");
} // if (bonusRepository.existsByOrderId(orderId)) {
// return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Transaction already done !!!");
// }
BigDecimal amount = bonus.getAmount(); BigDecimal amount = bonus.getAmount();
if (!StringUtils.isBlank(userId)) { if (condition) {
Optional<TbCfUserInfo> optionalUser = userRepository.findById(userId); Optional<TbCfUserInfo> optionalUser = userRepository.findById(userId);
...@@ -408,9 +409,9 @@ public class DpoPayController extends Controller { ...@@ -408,9 +409,9 @@ public class DpoPayController extends Controller {
if (productSharer != null) { if (productSharer != null) {
sharer = userRepository.findByCode(productSharer); sharer = userRepository.findByCode(productSharer);
} }
synchronized (this) {
boolean exists = bonusRepository.existsByOrderId(orderId);
if (user.invited()) { if (!exists && user.invited()) {
BigDecimal v = amount.multiply(BigDecimal.valueOf(10)).divide(BigDecimal.valueOf(100), RoundingMode.CEILING); BigDecimal v = amount.multiply(BigDecimal.valueOf(10)).divide(BigDecimal.valueOf(100), RoundingMode.CEILING);
bonus.setAmount(v); bonus.setAmount(v);
bonus.setUserInfo(user); bonus.setUserInfo(user);
...@@ -420,15 +421,16 @@ public class DpoPayController extends Controller { ...@@ -420,15 +421,16 @@ public class DpoPayController extends Controller {
sendNotification(user.getFcm(), "Bonus alert !!", user.display() + ", You received bonus of $" + formatter.format(v) + " in your account"); 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); 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(sharer.orElseGet(() -> postOptional.isPresent() ? postOptional.get().getRealUser() : bonusInc), amount, 5, postOptional.isPresent() || sharer.isPresent(), orderId);
//runBonusInc(bonusInc, amount, 0); //runBonusInc(bonusInc, amount, 0);
} }
} }
return new Result<>(bonus);
} }
private TbCfUserInfo runBonusInc(TbCfUserInfo user, BigDecimal amount, int percent, boolean direct, String orderId) { private TbCfUserInfo runBonusInc(TbCfUserInfo user, BigDecimal amount, int percent, boolean direct, String orderId) {
...@@ -443,7 +445,7 @@ public class DpoPayController extends Controller { ...@@ -443,7 +445,7 @@ public class DpoPayController extends Controller {
bonus.setAmount(v); bonus.setAmount(v);
bonus.setPercentage(percent); bonus.setPercentage(percent);
bonus.setOrderId(orderId); bonus.setOrderId(orderId);
if (userInfo!=null&&userInfo.invited()&&!"000000".equals(userInfo.getCode())) { if (userInfo != null && userInfo.invited() && !"000000".equals(userInfo.getCode())) {
bonusRepository.save(bonus); bonusRepository.save(bonus);
// bonus = repository.save(bonus); // bonus = repository.save(bonus);
if (userInfo.hasFcm()) { if (userInfo.hasFcm()) {
......
...@@ -81,7 +81,7 @@ public class FlutterWaveController extends Controller { ...@@ -81,7 +81,7 @@ public class FlutterWaveController extends Controller {
public ResponseEntity<String> payForOrderByCard(@RequestParam("orderId") String orderId, @RequestBody FlutterWaveCard flutterWaveCard) { public ResponseEntity<String> payForOrderByCard(@RequestParam("orderId") String orderId, @RequestBody FlutterWaveCard flutterWaveCard) {
RaveConstant.PUBLIC_KEY = PUBLIC_KEY; RaveConstant.PUBLIC_KEY = PUBLIC_KEY;
RaveConstant.SECRET_KEY = SECRET_KEY; RaveConstant.SECRET_KEY = SECRET_KEY;
RaveConstant.ENVIRONMENT = Environment.STAGING; //or live RaveConstant.ENVIRONMENT = Environment.LIVE; //or live
// Result result = new Result(); // Result result = new Result();
Optional<TbCfOrder> byId = repository.findById(orderId); Optional<TbCfOrder> byId = repository.findById(orderId);
...@@ -358,36 +358,35 @@ public class FlutterWaveController extends Controller { ...@@ -358,36 +358,35 @@ public class FlutterWaveController extends Controller {
return result; return result;
} }
public Result saveNetworkMarketing(Bonus bonus,String userId) { public void saveNetworkMarketing(Bonus bonus, String userId) {
TbCfUserInfo info = user.user();
// Optional<String> userIdOptional = userId;
System.out.println("userId=="+userId);
String orderId = bonus.getOrderId(); String orderId = bonus.getOrderId();
if (orderId == null) if (orderId == null)
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!"); logger.info("佣金:orderId为空");
Optional<TbCfOrder> orderOptional = orderRepository.findById(orderId); Optional<TbCfOrder> orderOptional = orderRepository.findById(orderId);
if (!orderOptional.isPresent()) if (!orderOptional.isPresent())
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!"); logger.info("佣金:订单不存在");
TbCfOrder order = orderOptional.get(); TbCfOrder order = orderOptional.get();
if (!OrderStatusEnum.PAID.getValue().equals(order.getPayStatus())) { if (!OrderStatusEnum.PAID.getValue().equals(order.getPayStatus())) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Invalid order status"); logger.info("佣金:订单未支付");
} }
if (bonusRepository.existsByOrderId(order.getOrderId())) { boolean condition = orderId != null && orderOptional.isPresent() && OrderStatusEnum.PAID.getValue().equals(order.getPayStatus()) && !StringUtils.isBlank(userId);
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Transaction already done !!!");
} // if (bonusRepository.existsByOrderId(orderId)) {
// return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Transaction already done !!!");
// }
BigDecimal amount = bonus.getAmount(); BigDecimal amount = bonus.getAmount();
if (!StringUtils.isBlank(userId)) { if (condition) {
Optional<TbCfUserInfo> optionalUser = userRepository.findById(userId); Optional<TbCfUserInfo> optionalUser = userRepository.findById(userId);
...@@ -406,9 +405,9 @@ public class FlutterWaveController extends Controller { ...@@ -406,9 +405,9 @@ public class FlutterWaveController extends Controller {
if (productSharer != null) { if (productSharer != null) {
sharer = userRepository.findByCode(productSharer); sharer = userRepository.findByCode(productSharer);
} }
synchronized (this) {
boolean exists = bonusRepository.existsByOrderId(orderId);
if (user.invited()) { if (!exists && user.invited()) {
BigDecimal v = amount.multiply(BigDecimal.valueOf(10)).divide(BigDecimal.valueOf(100), RoundingMode.CEILING); BigDecimal v = amount.multiply(BigDecimal.valueOf(10)).divide(BigDecimal.valueOf(100), RoundingMode.CEILING);
bonus.setAmount(v); bonus.setAmount(v);
bonus.setUserInfo(user); bonus.setUserInfo(user);
...@@ -418,15 +417,16 @@ public class FlutterWaveController extends Controller { ...@@ -418,15 +417,16 @@ public class FlutterWaveController extends Controller {
sendNotification(user.getFcm(), "Bonus alert !!", user.display() + ", You received bonus of $" + formatter.format(v) + " in your account"); 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); 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(sharer.orElseGet(() -> postOptional.isPresent() ? postOptional.get().getRealUser() : bonusInc), amount, 5, postOptional.isPresent() || sharer.isPresent(), orderId);
//runBonusInc(bonusInc, amount, 0); //runBonusInc(bonusInc, amount, 0);
} }
} }
return new Result<>(bonus);
} }
private TbCfUserInfo runBonusInc(TbCfUserInfo user, BigDecimal amount, int percent, boolean direct, String orderId) { private TbCfUserInfo runBonusInc(TbCfUserInfo user, BigDecimal amount, int percent, boolean direct, String orderId) {
......
...@@ -23,6 +23,7 @@ import java.io.IOException; ...@@ -23,6 +23,7 @@ import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.text.ParseException;
import java.time.Duration; import java.time.Duration;
import java.util.*; import java.util.*;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
...@@ -45,10 +46,11 @@ public class OrderController extends Controller { ...@@ -45,10 +46,11 @@ public class OrderController extends Controller {
private final TbCfItemCommentRepository commentRepository; private final TbCfItemCommentRepository commentRepository;
private final TbCfExpressTemplateRepository templateRepository; private final TbCfExpressTemplateRepository templateRepository;
private final TbCfExchangeRepository exchangeRepository; private final TbCfExchangeRepository exchangeRepository;
private final ActivityRepository activityRepository;
private final AuthenticationUser user; private final AuthenticationUser user;
private static Logger logger = LoggerFactory.getLogger(OrderController.class); private static Logger logger = LoggerFactory.getLogger(OrderController.class);
public OrderController(TbCfToicouponRepository couponRepository, TbCfOrderRepository repository, TbCfCartRecordRRepository cartRepository, TbCfAddressRepository addressRepository, TbCfToicouponRepository toicouponRepository, TbCfStationItemRepository itemRepository, TbCfItemSkuRepository itemSkuRepository, TbCfItemCommentRepository commentRepository, TbCfExpressTemplateRepository templateRepository, @Qualifier("tbCfExchangeRepository") TbCfExchangeRepository exchangeRepository, AuthenticationUser user) { public OrderController(TbCfToicouponRepository couponRepository, TbCfOrderRepository repository, TbCfCartRecordRRepository cartRepository, TbCfAddressRepository addressRepository, TbCfToicouponRepository toicouponRepository, TbCfStationItemRepository itemRepository, TbCfItemSkuRepository itemSkuRepository, TbCfItemCommentRepository commentRepository, TbCfExpressTemplateRepository templateRepository, @Qualifier("tbCfExchangeRepository") TbCfExchangeRepository exchangeRepository, ActivityRepository activityRepository, AuthenticationUser user) {
this.couponRepository = couponRepository; this.couponRepository = couponRepository;
this.repository = repository; this.repository = repository;
this.cartRepository = cartRepository; this.cartRepository = cartRepository;
...@@ -59,6 +61,7 @@ public class OrderController extends Controller { ...@@ -59,6 +61,7 @@ public class OrderController extends Controller {
this.commentRepository = commentRepository; this.commentRepository = commentRepository;
this.templateRepository = templateRepository; this.templateRepository = templateRepository;
this.exchangeRepository = exchangeRepository; this.exchangeRepository = exchangeRepository;
this.activityRepository = activityRepository;
this.user = user; this.user = user;
} }
...@@ -98,7 +101,8 @@ public class OrderController extends Controller { ...@@ -98,7 +101,8 @@ public class OrderController extends Controller {
@RequestParam("itemNum") Integer itemNum, @RequestParam("itemNum") Integer itemNum,
@RequestParam(value = "itemSku", defaultValue = "") String itemSku, @RequestParam(value = "itemSku", defaultValue = "") String itemSku,
@RequestParam(value = "itemSkuId", required = false) String itemSkuId, @RequestParam(value = "itemSkuId", required = false) String itemSkuId,
@RequestParam(value = "toitableId", required = false) String toitableId) { @RequestParam(value = "toitableId", required = false) String toitableId,
@RequestParam(value = "open", required = false) boolean open) throws ParseException {
TbCfOrder order = new TbCfOrder(); TbCfOrder order = new TbCfOrder();
...@@ -138,15 +142,16 @@ public class OrderController extends Controller { ...@@ -138,15 +142,16 @@ public class OrderController extends Controller {
order.setCoupon(coupon); order.setCoupon(coupon);
} }
} }
order.setOpen(open);
order.setCouponMap(map); order.setCouponMap(map);
order.getItemOrderListFromCartList(list, itemRepository); order.getItemOrderListFromCartList(list, itemRepository,activityRepository);
return new Result<>(order); return new Result<>(order);
} }
@PostMapping("/settle") @PostMapping("/settle")
public Result<TbCfOrder> settleAccount(@RequestBody String[] ids, @RequestParam(value = "toitableId", required = false) String toitableId) { public Result<TbCfOrder> settleAccount(@RequestBody String[] ids, @RequestParam(value = "toitableId", required = false) String toitableId,
@RequestParam(value = "open", required = false) boolean open) throws ParseException {
//String userId = user.userId(); //String userId = user.userId();
List<TbCfCartRecordR> allByUserId = cartRepository.findAllByCartRecordIdIn(ids); List<TbCfCartRecordR> allByUserId = cartRepository.findAllByCartRecordIdIn(ids);
BigDecimal orderPrice = BigDecimal.ZERO; BigDecimal orderPrice = BigDecimal.ZERO;
...@@ -178,8 +183,8 @@ public class OrderController extends Controller { ...@@ -178,8 +183,8 @@ public class OrderController extends Controller {
} }
} }
order.setOpen(open);
order.getItemOrderListFromCartList(allByUserId, itemRepository); order.getItemOrderListFromCartList(allByUserId, itemRepository,activityRepository);
return new Result<>(order); return new Result<>(order);
...@@ -200,8 +205,9 @@ public class OrderController extends Controller { ...@@ -200,8 +205,9 @@ public class OrderController extends Controller {
@RequestParam(value = "itemNum", required = false) Integer itemNum, @RequestParam(value = "itemNum", required = false) Integer itemNum,
@RequestParam(value = "itemSku", required = false) String itemSku, @RequestParam(value = "itemSku", required = false) String itemSku,
@RequestParam(value = "itemSkuId", required = false) String itemSkuId, @RequestParam(value = "itemSkuId", required = false) String itemSkuId,
@RequestParam(value = "orderSource", required = false) Integer orderSource @RequestParam(value = "orderSource", required = false) Integer orderSource,
) throws IOException, URISyntaxException, ExecutionException, InterruptedException, TimeoutException { @RequestParam(value = "open", required = false) boolean open
) throws IOException, URISyntaxException, ExecutionException, InterruptedException, TimeoutException, ParseException {
TbCfUserInfo user = this.user.user(); TbCfUserInfo user = this.user.user();
String userId = user.getUserId(); String userId = user.getUserId();
...@@ -320,8 +326,8 @@ public class OrderController extends Controller { ...@@ -320,8 +326,8 @@ public class OrderController extends Controller {
order.setOrderSource(orderSource); order.setOrderSource(orderSource);
} }
order.setOpen(open);
order.getItemOrderListFromCartList(allByUserId, itemRepository); order.getItemOrderListFromCartList(allByUserId, itemRepository,activityRepository);
TbCfOrder save = repository.save(order); TbCfOrder save = repository.save(order);
......
...@@ -286,36 +286,35 @@ public class PaypalContoller extends Controller { ...@@ -286,36 +286,35 @@ public class PaypalContoller extends Controller {
return now; return now;
} }
public Result saveNetworkMarketing(Bonus bonus, String userId) { public void saveNetworkMarketing(Bonus bonus, String userId) {
// TbCfUserInfo info = user.user();
// Optional<String> userIdOptional = userId;
System.out.println("userId=="+userId);
String orderId = bonus.getOrderId(); String orderId = bonus.getOrderId();
if (orderId == null) if (orderId == null)
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!"); logger.info("佣金:orderId为空");
Optional<TbCfOrder> orderOptional = orderRepository.findById(orderId); Optional<TbCfOrder> orderOptional = orderRepository.findById(orderId);
if (!orderOptional.isPresent()) if (!orderOptional.isPresent())
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Order is missing !!!"); logger.info("佣金:订单不存在");
TbCfOrder order = orderOptional.get(); TbCfOrder order = orderOptional.get();
if (!OrderStatusEnum.PAID.getValue().equals(order.getPayStatus())) { if (!OrderStatusEnum.PAID.getValue().equals(order.getPayStatus())) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Invalid order status"); logger.info("佣金:订单未支付");
} }
if (bonusRepository.existsByOrderId(orderId)) { boolean condition = orderId != null && orderOptional.isPresent() && OrderStatusEnum.PAID.getValue().equals(order.getPayStatus()) && !StringUtils.isBlank(userId);
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Transaction already done !!!");
} // if (bonusRepository.existsByOrderId(orderId)) {
// return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Transaction already done !!!");
// }
BigDecimal amount = bonus.getAmount(); BigDecimal amount = bonus.getAmount();
if (!StringUtils.isBlank(userId)) { if (condition) {
Optional<TbCfUserInfo> optionalUser = userRepository.findById(userId); Optional<TbCfUserInfo> optionalUser = userRepository.findById(userId);
...@@ -334,9 +333,9 @@ public class PaypalContoller extends Controller { ...@@ -334,9 +333,9 @@ public class PaypalContoller extends Controller {
if (productSharer != null) { if (productSharer != null) {
sharer = userRepository.findByCode(productSharer); sharer = userRepository.findByCode(productSharer);
} }
synchronized (this) {
boolean exists = bonusRepository.existsByOrderId(orderId);
if (user.invited()) { if (!exists && user.invited()) {
BigDecimal v = amount.multiply(BigDecimal.valueOf(10)).divide(BigDecimal.valueOf(100), RoundingMode.CEILING); BigDecimal v = amount.multiply(BigDecimal.valueOf(10)).divide(BigDecimal.valueOf(100), RoundingMode.CEILING);
bonus.setAmount(v); bonus.setAmount(v);
bonus.setUserInfo(user); bonus.setUserInfo(user);
...@@ -346,17 +345,17 @@ public class PaypalContoller extends Controller { ...@@ -346,17 +345,17 @@ public class PaypalContoller extends Controller {
sendNotification(user.getFcm(), "Bonus alert !!", user.display() + ", You received bonus of $" + formatter.format(v) + " in your account"); 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); 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(sharer.orElseGet(() -> postOptional.isPresent() ? postOptional.get().getRealUser() : bonusInc), amount, 5, postOptional.isPresent() || sharer.isPresent(), orderId);
//runBonusInc(bonusInc, amount, 0); //runBonusInc(bonusInc, amount, 0);
}
} }
return new Result<>(bonus);
} }
}
private TbCfUserInfo runBonusInc(TbCfUserInfo user, BigDecimal amount, int percent, boolean direct, String orderId) { private TbCfUserInfo runBonusInc(TbCfUserInfo user, BigDecimal amount, int percent, boolean direct, String orderId) {
if (user == null) return null; if (user == null) return null;
Optional<Network> userCode = networkRepository.findByNetworkInfoCode(user.getCode()); Optional<Network> userCode = networkRepository.findByNetworkInfoCode(user.getCode());
......
package com.example.afrishop_v3.models; package com.example.afrishop_v3.models;
import lombok.Data;
import lombok.ToString;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.Transient; import javax.persistence.Transient;
...@@ -17,6 +20,8 @@ import java.util.List; ...@@ -17,6 +20,8 @@ import java.util.List;
*/ */
@Entity @Entity
@Data
@ToString
public class Activity implements Serializable { public class Activity implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -30,7 +35,11 @@ public class Activity implements Serializable { ...@@ -30,7 +35,11 @@ public class Activity implements Serializable {
*/ */
private String name; private String name;
/** /**
* 活动类型 1:满减 2:满折 3:满几件打折 * 活动内容
*/
private String content;
/**
* 活动类型 1:满减 2:满折 3:满件打折
*/ */
private Integer type; private Integer type;
/** /**
...@@ -46,19 +55,11 @@ public class Activity implements Serializable { ...@@ -46,19 +55,11 @@ public class Activity implements Serializable {
*/ */
private String picture; private String picture;
/** /**
* 满减金额 * 活动条件(json)
*/
private BigDecimal fullAmount;
/**
* 抵扣金额
*/
private BigDecimal reducedAmount;
/**
* 折扣率
*/ */
private Double discountRate; private String condition;
/** /**
* 商品IDS * 特定商品链接
*/ */
private String itemIds; private String itemIds;
/** /**
...@@ -77,233 +78,146 @@ public class Activity implements Serializable { ...@@ -77,233 +78,146 @@ public class Activity implements Serializable {
* 创建时间 * 创建时间
*/ */
private Date createTime; private Date createTime;
/** /**
* 更新时间 * 更新时间
*/ */
private Date updateTime; private Date updateTime;
// @Transient
// private List<TbCfStationItem> itemList;
/** /**
* 设置:活动ID * 距离活动截至时间
*/ */
@Transient
private String deadline;
@Transient
private Integer order;
public String getId() {
return id;
}
public void setId(String id) { public void setId(String id) {
this.id = id; this.id = id;
} }
/** public String getName() {
* 获取:活动ID return name;
*/
public String getId() {
return id;
} }
/**
* 设置:活动名称
*/
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
/** public String getContent() {
* 获取:活动名称 return content;
*/
public String getName() {
return name;
} }
/** public void setContent(String content) {
* 设置:活动类型 1:满减 2:满折 3:满几件打折 this.content = content;
*/
public void setType(Integer type) {
this.type = type;
} }
/**
* 获取:活动类型 1:满减 2:满折 3:满几件打折
*/
public Integer getType() { public Integer getType() {
return type; return type;
} }
/** public void setType(Integer type) {
* 设置:使用类型 1:全场 2:分类商品 3:特定商品 this.type = type;
*/
public void setUseType(Integer useType) {
this.useType = useType;
} }
/**
* 获取:使用类型 1:全场 2:分类商品 3:特定商品
*/
public Integer getUseType() { public Integer getUseType() {
return useType; return useType;
} }
/** public void setUseType(Integer useType) {
* 设置:商品分类ID this.useType = useType;
*/
public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
} }
/**
* 获取:商品分类ID
*/
public String getCategoryId() { public String getCategoryId() {
return categoryId; return categoryId;
} }
/** public void setCategoryId(String categoryId) {
* 设置:活动图片 this.categoryId = categoryId;
*/
public void setPicture(String picture) {
this.picture = picture;
} }
/**
* 获取:活动图片
*/
public String getPicture() { public String getPicture() {
return picture; return picture;
} }
/** public void setPicture(String picture) {
* 设置:满减金额 this.picture = picture;
*/
public void setFullAmount(BigDecimal fullAmount) {
this.fullAmount = fullAmount;
}
/**
* 获取:满减金额
*/
public BigDecimal getFullAmount() {
return fullAmount;
}
/**
* 设置:抵扣金额
*/
public void setReducedAmount(BigDecimal reducedAmount) {
this.reducedAmount = reducedAmount;
} }
/** public String getCondition() {
* 获取:抵扣金额 return condition;
*/
public BigDecimal getReducedAmount() {
return reducedAmount;
} }
/** public void setCondition(String condition) {
* 设置:折扣率 this.condition = condition;
*/
public void setdiscountRate(Double discountRate) {
this.discountRate = discountRate;
} }
/** public String getItemIds() {
* 获取:折扣率 return itemIds;
*/
public Double getdiscountRate() {
return discountRate;
} }
/**
* 设置:商品IDS
*/
public void setItemIds(String itemIds) { public void setItemIds(String itemIds) {
this.itemIds = itemIds; this.itemIds = itemIds;
} }
/** public Integer getStatus() {
* 获取:商品IDS return status;
*/
public String getItemIds() {
return itemIds;
} }
/**
* 设置:活动状态 0:关闭 1:开启
*/
public void setStatus(Integer status) { public void setStatus(Integer status) {
this.status = status; this.status = status;
} }
/** public Date getStartTime() {
* 获取:活动状态 0:关闭 1:开启 return startTime;
*/
public Integer getStatus() {
return status;
} }
/**
* 设置:活动开始时间
*/
public void setStartTime(Date startTime) { public void setStartTime(Date startTime) {
this.startTime = startTime; this.startTime = startTime;
} }
/** public Date getEndTime() {
* 获取:活动开始时间 return endTime;
*/
public Date getStartTime() {
return startTime;
} }
/**
* 设置:活动结束时间
*/
public void setEndTime(Date endTime) { public void setEndTime(Date endTime) {
this.endTime = endTime; this.endTime = endTime;
} }
/** public Date getCreateTime() {
* 获取:活动结束时间 return createTime;
*/
public Date getEndTime() {
return endTime;
} }
/**
* 设置:创建时间
*/
public void setCreateTime(Date createTime) { public void setCreateTime(Date createTime) {
this.createTime = createTime; this.createTime = createTime;
} }
/** public Date getUpdateTime() {
* 获取:创建时间 return updateTime;
*/
public Date getCreateTime() {
return createTime;
} }
/**
* 设置:更新时间
*/
public void setUpdateTime(Date updateTime) { public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime; this.updateTime = updateTime;
} }
/** public String getDeadline() {
* 获取:更新时间 return deadline;
*/
public Date getUpdateTime() {
return updateTime;
} }
public void setDeadline(String deadline) {
this.deadline = deadline;
public Double getDiscountRate() {
return discountRate;
} }
public void setDiscountRate(Double discountRate) { public Integer getOrder() {
this.discountRate = discountRate; return order;
} }
public void setOrder(Integer order) {
this.order = order;
}
} }
package com.example.afrishop_v3.models;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @Auther: wudepeng
* @Date: 2020/12/11
* @Description:活动模板
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityVo {
private Activity activity;
private String activityId;
private Integer itemNum;
private BigDecimal itemPrice;
public String getActivityId() {
return activity == null ? null : activity.getId();
}
}
...@@ -5,16 +5,29 @@ import org.springframework.data.domain.Page; ...@@ -5,16 +5,29 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.relational.core.sql.In;
import javax.annotation.Nullable;
import java.util.List; import java.util.List;
import java.util.Optional;
/** /**
* @Auther: wudepeng * @Auther: wudepeng
* @Date: 2020/12/02 * @Date: 2020/12/02
* @Description: * @Description:
*/ */
public interface ActivityRepository extends JpaRepository<Activity,String> { public interface ActivityRepository extends JpaRepository<Activity, String> {
@Query(value = "select a from Activity a where CURRENT_TIMESTAMP between startTime and endTime and status=1 order by a.createTime desc")
Page<Activity> getAllActivity(Pageable pageable);
boolean existsByUseType(Integer useType);
// @Query(value = "select * from Activity a where CURRENT_TIMESTAMP between a.start_time and a.end_time and a.status=1 and use_type=:useType order by a.create_time desc limit 1", nativeQuery = true)
// Optional<Activity> findFirstByUseType(Integer useType);
@Query(value = "select * from Activity a where CURRENT_TIMESTAMP between a.start_time and a.end_time and a.status=1 and a.use_type=:useType order by a.create_time desc ", nativeQuery = true)
List<Activity> findAllByUseType(Integer useType);
@Query(value = "select a from Activity a where CURRENT_TIMESTAMP between startTime and endTime and status=1")
List<Activity> getAllActivity();
} }
package com.example.afrishop_v3.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Auther: wudepeng
* @Date: 2020/12/09
* @Description:活动条件
*/
@Data
@AllArgsConstructor
public class Condition {
private double key;
private double value;
}
server: #server:
servlet: # servlet:
context-path: /afrishop # context-path: /afrishop
port: 8099 # port: 8099
spring: spring:
datasource: datasource:
url: jdbc:mysql://159.138.48.71:3306/chinafrica_ref_test?useUnicode=true&connectionCollation=utf8mb4_general_ci&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC url: jdbc:mysql://159.138.48.71:3306/chinafrica?useUnicode=true&connectionCollation=utf8mb4_general_ci&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root username: root
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
password: Diaoyunnuli.8 password: Diaoyunnuli.8
...@@ -57,9 +57,9 @@ dpo: ...@@ -57,9 +57,9 @@ dpo:
#服务类型 #服务类型
service_type: 35711 service_type: 35711
#回调地址 #回调地址
notify_url: https://app.afrieshop.com/afrishop/dpo/notify notify_url: https://app.afrieshop.com/zion/dpo/notify
#取消地址 #取消地址
back_url: https://app.afrieshop.com/afrishop/dpo/cancel back_url: https://app.afrieshop.com/zion/dpo/cancel
#支付成功页面 #支付成功页面
success_url: https://www.afrieshop.com/payment_successful success_url: https://www.afrieshop.com/payment_successful
#支付失败页面 #支付失败页面
......
server.servlet.context-path=/zion server.servlet.context-path=/zion
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
server.port=8083 server.port=8083
spring.profiles.active=test spring.profiles.active=dev
#spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/afrishop_test?useUnicode=true&connectionCollation=utf8mb4_general_ci&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC #spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/afrishop_test?useUnicode=true&connectionCollation=utf8mb4_general_ci&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
#spring.datasource.username=root #spring.datasource.username=root
#spring.datasource.password=Diaoyunnuli.8 #spring.datasource.password=Diaoyunnuli.8
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论