提交 4e812bd6 authored 作者: Whispa's avatar Whispa
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) {
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;
...@@ -136,18 +135,18 @@ public class AuthController extends Controller { ...@@ -136,18 +135,18 @@ public class AuthController extends Controller {
@GetMapping("/verifyCode/{account}/{code}") @GetMapping("/verifyCode/{account}/{code}")
public Result<Boolean> validateCode(@PathVariable("account") String account, public Result<Boolean> validateCode(@PathVariable("account") String account,
@PathVariable("code") String code){ @PathVariable("code") String code) {
Optional<TbCfUserInfo> userInfoOptional = userRepository.findFirstByAccount(account); Optional<TbCfUserInfo> userInfoOptional = userRepository.findFirstByAccount(account);
if( !userInfoOptional.isPresent() ) if (!userInfoOptional.isPresent())
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Account not found"); return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Account not found");
TbCfUserInfo userInfo = userInfoOptional.get(); TbCfUserInfo userInfo = userInfoOptional.get();
if( code.equals(userInfo.getVerificationCode()) ){ if (code.equals(userInfo.getVerificationCode())) {
return new Result<>(true,"Verification code is right !!!"); return new Result<>(true, "Verification code is right !!!");
} }
return new Result<>(false,ResultCodeEnum.VALIDATE_ERROR.getCode(),"Verification code is wrong !!!"); return new Result<>(false, ResultCodeEnum.VALIDATE_ERROR.getCode(), "Verification code is wrong !!!");
} }
@PostMapping("/signup") @PostMapping("/signup")
...@@ -348,7 +347,7 @@ public class AuthController extends Controller { ...@@ -348,7 +347,7 @@ public class AuthController extends Controller {
if (!optional.isPresent() && user.getPhone() != null && !user.getPhone().isEmpty() && userRepository.existsByAccount(user.getPhone().replace("+", ""))) { if (!optional.isPresent() && user.getPhone() != null && !user.getPhone().isEmpty() && userRepository.existsByAccount(user.getPhone().replace("+", ""))) {
optional = userRepository.findFirstByAccount(user.getPhone().replace("+", "")); optional = userRepository.findFirstByAccount(user.getPhone().replace("+", ""));
} }
logger.info("user is exist:" + optional.isPresent());
if (!optional.isPresent()) { if (!optional.isPresent()) {
...@@ -417,7 +416,7 @@ public class AuthController extends Controller { ...@@ -417,7 +416,7 @@ public class AuthController extends Controller {
user.setAccount(user.getEmail() != null ? user.getEmail() : user.getPhone()); user.setAccount(user.getEmail() != null ? user.getEmail() : user.getPhone());
} }
if( user.getNick() == null ){ if (user.getNick() == null) {
user.setNick(user.getEmail() != null ? user.getEmail() : user.getPhone()); user.setNick(user.getEmail() != null ? user.getEmail() : user.getPhone());
} }
...@@ -449,6 +448,7 @@ public class AuthController extends Controller { ...@@ -449,6 +448,7 @@ public class AuthController extends Controller {
private void fixCoupon(TbCfUserInfo user) { private void fixCoupon(TbCfUserInfo user) {
logger.info("Issue coupons to new users...");
try { try {
List<TbCfCoupon> couponVailList = couponRepository.findAllByCouponVaild(1); List<TbCfCoupon> couponVailList = couponRepository.findAllByCouponVaild(1);
//获取当前时间的时分秒 //获取当前时间的时分秒
...@@ -459,6 +459,7 @@ public class AuthController extends Controller { ...@@ -459,6 +459,7 @@ public class AuthController extends Controller {
c.add(Calendar.DATE, 7); c.add(Calendar.DATE, 7);
Date endDate = c.getTime(); Date endDate = c.getTime();
for (TbCfCoupon tbCfCoupon : couponVailList) { for (TbCfCoupon tbCfCoupon : couponVailList) {
logger.info("coupon:" + tbCfCoupon.getCouponTitle());
TbCfToicoupon toi = new TbCfToicoupon(); TbCfToicoupon toi = new TbCfToicoupon();
//把上面获取到的值,赋值到实体类中 //把上面获取到的值,赋值到实体类中
toi.setToitableId(IdUtil.createIdbyUUID()); toi.setToitableId(IdUtil.createIdbyUUID());
...@@ -527,7 +528,6 @@ public class AuthController extends Controller { ...@@ -527,7 +528,6 @@ public class AuthController extends Controller {
private void fillUserNecessayInfo(TbCfUserInfo tbCfUserInfoVo) { private void fillUserNecessayInfo(TbCfUserInfo tbCfUserInfoVo) {
if (tbCfUserInfoVo.getAvatar() == null) tbCfUserInfoVo.setAvatar(domainProperties.getProperty("user.avatar")); if (tbCfUserInfoVo.getAvatar() == null) tbCfUserInfoVo.setAvatar(domainProperties.getProperty("user.avatar"));
tbCfUserInfoVo.setNick(tbCfUserInfoVo.getAccount());
tbCfUserInfoVo.setUserNo(IdUtil.createIdByDate()); tbCfUserInfoVo.setUserNo(IdUtil.createIdByDate());
tbCfUserInfoVo.setPhoneFlag(StateConstant.INVALID); tbCfUserInfoVo.setPhoneFlag(StateConstant.INVALID);
tbCfUserInfoVo.setLoginCount(0); tbCfUserInfoVo.setLoginCount(0);
...@@ -540,9 +540,14 @@ public class AuthController extends Controller { ...@@ -540,9 +540,14 @@ public class AuthController extends Controller {
tbCfUserInfoVo.setUserType(UserTypeEnum.UN_KNOW.getCode()); tbCfUserInfoVo.setUserType(UserTypeEnum.UN_KNOW.getCode());
tbCfUserInfoVo.setEmailFlag(StateConstant.INVALID); tbCfUserInfoVo.setEmailFlag(StateConstant.INVALID);
if( tbCfUserInfoVo.getNick() == null ){ if (tbCfUserInfoVo.getNick() == null) {
tbCfUserInfoVo.setNick(tbCfUserInfoVo.getEmail() == null ? tbCfUserInfoVo.getEmail() : tbCfUserInfoVo.getPhone()); tbCfUserInfoVo.setNick(tbCfUserInfoVo.getEmail() != null ? tbCfUserInfoVo.getEmail() : tbCfUserInfoVo.getPhone() != null ? tbCfUserInfoVo.getPhone() : tbCfUserInfoVo.getAccount());
}
if (tbCfUserInfoVo.getAccount() == null) {
tbCfUserInfoVo.setAccount(tbCfUserInfoVo.getEmail() != null ? tbCfUserInfoVo.getEmail() : tbCfUserInfoVo.getPhone() != null ? tbCfUserInfoVo.getPhone() : tbCfUserInfoVo.getUserNo());
} }
logger.info("user===" + tbCfUserInfoVo);
} }
@PostMapping("/resetPassword/{account}") @PostMapping("/resetPassword/{account}")
...@@ -567,8 +572,8 @@ public class AuthController extends Controller { ...@@ -567,8 +572,8 @@ public class AuthController extends Controller {
String validatePassword = validatePassword(password); String validatePassword = validatePassword(password);
if( validatePassword != null ){ if (validatePassword != null) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),validatePassword); return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), validatePassword);
} }
TbCfUserInfo user = firstByAccount.get(); TbCfUserInfo user = firstByAccount.get();
...@@ -577,17 +582,17 @@ public class AuthController extends Controller { ...@@ -577,17 +582,17 @@ public class AuthController extends Controller {
user.setPassword(encoder.encode(password)); user.setPassword(encoder.encode(password));
userRepository.save(user); userRepository.save(user);
return new Result("Password reset successfully !"); return new Result("Password reset successfully !");
}else { } else {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Verification code don't match !"); return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Verification code don't match !");
} }
} }
@GetMapping("/checkAccountAvailability/{account}") @GetMapping("/checkAccountAvailability/{account}")
public Result checkUsername(@PathVariable("account") String account){ public Result checkUsername(@PathVariable("account") String account) {
boolean exists = userRepository.existsByAccount(account); boolean exists = userRepository.existsByAccount(account);
if( exists ){ if (exists) {
return new Result<>( return new Result<>(
true, true,
ResultCodeEnum.SUCCESS.getCode(), ResultCodeEnum.SUCCESS.getCode(),
......
...@@ -14,6 +14,7 @@ import com.google.firebase.auth.FirebaseAuth; ...@@ -14,6 +14,7 @@ import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthException; import com.google.firebase.auth.FirebaseAuthException;
import com.google.firebase.auth.FirebaseToken; import com.google.firebase.auth.FirebaseToken;
import com.google.firebase.messaging.*; import com.google.firebase.messaging.*;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject; import org.json.JSONObject;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.http.HttpEntity; import org.springframework.http.HttpEntity;
...@@ -21,8 +22,11 @@ import org.springframework.http.HttpHeaders; ...@@ -21,8 +22,11 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.HashMap; import java.util.HashMap;
...@@ -31,6 +35,10 @@ import java.util.regex.Pattern; ...@@ -31,6 +35,10 @@ import java.util.regex.Pattern;
abstract class Controller { abstract class Controller {
public static final String LOCAL_IP = "127.0.0.1";//本地ip地址
public static final String DEFAULT_IP = "0:0:0:0:0:0:0:1";//默认ip地址
public static final int DEFAULT_IP_LENGTH = 15;//默认ip地址长度
String uid() { String uid() {
return IdUtil.createIdbyUUID(); return IdUtil.createIdbyUUID();
} }
...@@ -102,6 +110,7 @@ abstract class Controller { ...@@ -102,6 +110,7 @@ abstract class Controller {
FirebaseApp firebaseApp; FirebaseApp firebaseApp;
try { try {
firebaseApp = FirebaseApp.getInstance("other"); firebaseApp = FirebaseApp.getInstance("other");
System.out.println("firebaseApp="+firebaseApp);
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
firebaseApp = FirebaseApp.initializeApp(options, "other"); firebaseApp = FirebaseApp.initializeApp(options, "other");
} }
...@@ -120,7 +129,7 @@ abstract class Controller { ...@@ -120,7 +129,7 @@ abstract class Controller {
if (firebaseApp == null) return false; if (firebaseApp == null) return false;
FirebaseAuth instance = FirebaseAuth.getInstance(firebaseApp); FirebaseAuth instance = FirebaseAuth.getInstance(firebaseApp);
//System.out.println(firebaseApp.getName()); System.out.println("instance="+instance);
//System.out.println(token); //System.out.println(token);
try { try {
FirebaseToken firebaseToken = instance.verifyIdToken(token); FirebaseToken firebaseToken = instance.verifyIdToken(token);
...@@ -204,4 +213,50 @@ abstract class Controller { ...@@ -204,4 +213,50 @@ abstract class Controller {
return null; return null;
} }
} }
/**
* 获取合法ip地址
* @param request
* @return
*/
public static String getRealIpAddress(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");//squid 服务代理
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");//apache服务代理
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");//weblogic 代理
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");//有些代理
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP"); //nginx代理
}
/*
* 如果此时还是获取不到ip地址,那么最后就使用request.getRemoteAddr()来获取
* */
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
if (StringUtils.equals(ip, LOCAL_IP) || StringUtils.equals(ip, DEFAULT_IP)) {
//根据网卡取本机配置的IP
InetAddress iNet = null;
try {
iNet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
}
ip = iNet.getHostAddress();
}
}//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
//"***.***.***.***".length() = 15
if(!StringUtils.isEmpty(ip) && ip.length()> DEFAULT_IP_LENGTH){
if(ip.indexOf(",") > 0){
ip = ip.substring(0,ip.indexOf(","));
}
}
return ip;
}
} }
...@@ -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,16 +39,24 @@ public class DpoPayController extends Controller { ...@@ -42,16 +39,24 @@ 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/web")
public void payNotifyWeb(HttpServletRequest request, HttpServletResponse response) throws IOException { public void payNotifyWeb(HttpServletRequest request, HttpServletResponse response) throws IOException {
// Result result = new Result(); // Result result = new Result();
// try { // try {
...@@ -89,6 +94,41 @@ public class DpoPayController extends Controller { ...@@ -89,6 +94,41 @@ public class DpoPayController extends Controller {
// } // }
} }
@GetMapping("/notify")
public Result payNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
// Result result = new Result();
// try {
System.out.println("DPO支付回调");
//订单号
String orderId = request.getParameter("CompanyRef");
//交易ID
String transId = request.getParameter("TransID");
//交易令牌
String transToken = request.getParameter("TransactionToken");
System.err.println("transID:" + transId);
System.err.println("transToken:" + transToken);
//logger.info("DPO支付:" + "开始支付校验");
// Optional<TbCfOrder> byId = repository.findById(orderId);
// String orderSource = null;
// if (byId.isPresent()) {
// orderSource = byId.get().getOrderSource().toString();
// }
if (!StringUtils.isBlank(orderId) && !StringUtils.isBlank(transToken)) {
boolean verifyPay = verifyPay(transToken, orderId);
if (verifyPay) {
//logger.info("DPO支付:" + "支付校验成功");
// result.setMessage("Pay for success");
// result.setCode(ResultCodeEnum.SUCCESS.getCode());
return new Result(config.getSuccessUrl());
}
}
// } catch (Exception e) {
// return new Result<>(result,ResultCodeEnum.SERVICE_ERROR.getCode(), "Pay for failure");
// //logger.error("DPO支付回调发生异常--->>>" + e.toString());
// }
return new Result(config.getFailedUrl());
}
@Transactional @Transactional
public boolean verifyPay(String transToken, String orderId) { public boolean verifyPay(String transToken, String orderId) {
...@@ -122,7 +162,7 @@ public class DpoPayController extends Controller { ...@@ -122,7 +162,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 +201,21 @@ public class DpoPayController extends Controller { ...@@ -161,6 +201,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());
}
} }
} }
...@@ -281,8 +336,11 @@ public class DpoPayController extends Controller { ...@@ -281,8 +336,11 @@ public class DpoPayController extends Controller {
tranMap.put("CompanyRefUnique", 0); tranMap.put("CompanyRefUnique", 0);
// logger.info("getOrderSource---------->>>>>>>>>>>>" + order.getOrderSource()); // logger.info("getOrderSource---------->>>>>>>>>>>>" + order.getOrderSource());
//回调地址 //回调地址
tranMap.put("RedirectURL", config.getNotifyUrl()); if (order.getOrderSource() != null && "1".equals(order.getOrderSource().toString())) {
tranMap.put("RedirectURL", config.getNotifyUrl());
} else {
tranMap.put("RedirectURL", config.getNotifyUrl() + "/web");
}
System.out.println("回调地址:" + tranMap.get("RedirectURL")); System.out.println("回调地址:" + tranMap.get("RedirectURL"));
//取消地址 //取消地址
tranMap.put("BackURL", config.getBackUrl()); tranMap.put("BackURL", config.getBackUrl());
...@@ -300,4 +358,101 @@ public class DpoPayController extends Controller { ...@@ -300,4 +358,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,19 +65,23 @@ public class FlutterWaveController extends Controller { ...@@ -60,19 +65,23 @@ 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")
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);
...@@ -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;
} }
......
...@@ -46,21 +46,21 @@ public class ItemController { ...@@ -46,21 +46,21 @@ public class ItemController {
@RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize, @RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize,
@RequestParam(value = "order", required = false) String order) { @RequestParam(value = "order", required = false) String order) {
return new Result<>(repository.findAllItems(PageRequest.of(pageNum,pageSize))); return new Result<>(repository.findAllItems(PageRequest.of(pageNum, pageSize)));
} }
@GetMapping("/queryItemsByTypeTwo") @GetMapping("/queryItemsByTypeTwo")
public Result queryItemsByTypeTwo( @RequestParam("typeTwoId") String typeTwoId, public Result queryItemsByTypeTwo(@RequestParam("typeTwoId") String typeTwoId,
@RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum, @RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize, @RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize,
@RequestParam(value = "order", required = false) String order) { @RequestParam(value = "order", required = false) String order) {
return new Result<>(repository.findAllByItemCategorytwo(typeTwoId, PageRequest.of(pageNum,pageSize,getSort(order)))); return new Result<>(repository.findAllByItemCategorytwo(typeTwoId, PageRequest.of(pageNum, pageSize, getSort(order))));
} }
@GetMapping("/queryCategoryTwoByCid/{categoryId}") @GetMapping("/queryCategoryTwoByCid/{categoryId}")
public Result queryCategoryTwoByCid( @PathVariable("categoryId") String categoryId) { public Result queryCategoryTwoByCid(@PathVariable("categoryId") String categoryId) {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
Optional<TbCfGoodstype> byId = goodstypeRepository.findById(categoryId); Optional<TbCfGoodstype> byId = goodstypeRepository.findById(categoryId);
...@@ -89,13 +89,21 @@ public class ItemController { ...@@ -89,13 +89,21 @@ public class ItemController {
try { try {
List<SearchModel> list = repository.searchAllItems(name,pageNum*pageSize,pageSize); List<SearchModel> list = repository.searchAllItems(name, pageNum * pageSize, pageSize);
Map<String,Object> map = new LinkedHashMap<>(); Long count = repository.countAllBySearchItems(name);
map.put("content",list); Long totalPage = 0L;
if (count % pageSize == 0) {
totalPage = count / pageSize;
} else {
totalPage = count / pageSize + 1;
}
Map<String, Object> map = new LinkedHashMap<>();
map.put("content", list);
map.put("totalPage", totalPage);
return new Result<>(map); return new Result<>(map);
}catch (Exception e){ } catch (Exception e) {
System.out.println(e.getMessage()); System.out.println(e.getMessage());
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),e.getMessage()); return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), e.getMessage());
} }
} }
...@@ -112,53 +120,54 @@ public class ItemController { ...@@ -112,53 +120,54 @@ public class ItemController {
@RequestParam(value = "pageSize", defaultValue = "12") Integer pageSize) { @RequestParam(value = "pageSize", defaultValue = "12") Integer pageSize) {
Optional<TbCfStationItem> byId = repository.findById(itemId); Optional<TbCfStationItem> byId = repository.findById(itemId);
if( byId.isPresent() ) { if (byId.isPresent()) {
TbCfStationItem stationItem = byId.get(); TbCfStationItem stationItem = byId.get();
Page<TbCfStationItem> recommendItems = repository.getRecommendItems(itemId, stationItem.getItemDescritionId(), stationItem.getItemCategorytwo(), stationItem.getItemCategory(), PageRequest.of(pageNum, pageSize)); Page<TbCfStationItem> recommendItems = repository.getRecommendItems(itemId, stationItem.getItemDescritionId(), stationItem.getItemCategorytwo(), stationItem.getItemCategory(), PageRequest.of(pageNum, pageSize));
return new Result<>(recommendItems); return new Result<>(recommendItems);
} }
return new Result<>(new ArrayList<>(),ResultCodeEnum.ILLEGAL_ARGUMENT.getCode(),"Item id is invalid or not found"); return new Result<>(new ArrayList<>(), ResultCodeEnum.ILLEGAL_ARGUMENT.getCode(), "Item id is invalid or not found");
} }
@GetMapping("/queryItemByDescription/{descriptionId}") @GetMapping("/queryItemByDescription/{descriptionId}")
public Result queryItemByDescription(@PathVariable("descriptionId") String descriptionId, public Result queryItemByDescription(@PathVariable("descriptionId") String descriptionId,
@RequestParam(value = "order", required = false) String order) { @RequestParam(value = "order", required = false) String order) {
return new Result<>(repository.findAllByItemDescritionId(descriptionId,getSort(order))); return new Result<>(repository.findAllByItemDescritionId(descriptionId, getSort(order)));
} }
@GetMapping("/queryItemsByTypeThree") @GetMapping("/queryItemsByTypeThree")
public Result queryItemsByTypeThree( @RequestParam("typeThreeId") String typeThreeId, public Result queryItemsByTypeThree(@RequestParam("typeThreeId") String typeThreeId,
@RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum, @RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize, @RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize,
@RequestParam(value = "order", required = false) String order) { @RequestParam(value = "order", required = false) String order) {
return new Result<>(repository.findAllByItemDescritionId(typeThreeId, PageRequest.of(pageNum,pageSize,getSort(order)))); return new Result<>(repository.findAllByItemDescritionId(typeThreeId, PageRequest.of(pageNum, pageSize, getSort(order))));
} }
private Sort getSort(String order){ private Sort getSort(String order) {
return "priceUp".equals(order) ? sort("asc") : "priceDown".equals(order) ? sort("desc") : sort(order,"createTime"); return "priceUp".equals(order) ? sort("asc") : "priceDown".equals(order) ? sort("desc") : sort(order, "createTime");
} }
private Sort sort(String order){
private Sort sort(String order) {
String col = "discountPrice"; String col = "discountPrice";
return sort(order,col); return sort(order, col);
} }
private Sort sort(String order,String col){ private Sort sort(String order, String col) {
return Sort.by(order(order,col)); return Sort.by(order(order, col));
} }
private Sort.Order order(String order,String col){ private Sort.Order order(String order, String col) {
return "desc".equals(order) ? desc(col) : asc(col); return "desc".equals(order) ? desc(col) : asc(col);
} }
private Sort sort2(String order){ private Sort sort2(String order) {
String[] cols = new String[]{"itemTop","discountPrice","createTime"}; String[] cols = new String[]{"itemTop", "discountPrice", "createTime"};
List<Sort.Order> list = new ArrayList<>(); List<Sort.Order> list = new ArrayList<>();
for (String col : cols){ for (String col : cols) {
list.add( order(order,col) ); list.add(order(order, col));
} }
return Sort.by(list); return Sort.by(list);
...@@ -169,18 +178,18 @@ public class ItemController { ...@@ -169,18 +178,18 @@ public class ItemController {
@RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum, @RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize, @RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize,
@RequestParam(value = "order", required = false) String order) { @RequestParam(value = "order", required = false) String order) {
return new Result<>(repository.findAllByItemLabelContaining(label, PageRequest.of(pageNum,pageSize,getSort(order)))); return new Result<>(repository.findAllByItemLabelContaining(label, PageRequest.of(pageNum, pageSize, getSort(order))));
} }
@GetMapping("/queryItemSku") @GetMapping("/queryItemSku")
public Result queryItemSku( @RequestParam(value = "itemId") String itemId, public Result queryItemSku(@RequestParam(value = "itemId") String itemId,
@RequestParam(value = "userId", required = false) String userId) { @RequestParam(value = "userId", required = false) String userId) {
Optional<TbCfStationItem> itemOptional = repository.findById(itemId); Optional<TbCfStationItem> itemOptional = repository.findById(itemId);
if( !itemOptional.isPresent() ) if (!itemOptional.isPresent())
return new Result(ResultCodeEnum.ILLEGAL_ARGUMENT.getCode(),"Item Id is not found"); return new Result(ResultCodeEnum.ILLEGAL_ARGUMENT.getCode(), "Item Id is not found");
List<TbCfCategory> categoryList = categoryRepository.findAllByItemIdOrderByOrderNumAsc(itemId); List<TbCfCategory> categoryList = categoryRepository.findAllByItemIdOrderByOrderNumAsc(itemId);
...@@ -194,13 +203,13 @@ public class ItemController { ...@@ -194,13 +203,13 @@ public class ItemController {
//商品详情 //商品详情
Optional<TbCfItemDesc> byId = descRepository.findById(itemId); Optional<TbCfItemDesc> byId = descRepository.findById(itemId);
map.put("score",item.getTotalScore()); map.put("score", item.getTotalScore());
map.put("isCollection",userId != null && !userId.isEmpty() && collectionRepository.existsByUserIdAndItemItemId(userId,itemId)); map.put("isCollection", userId != null && !userId.isEmpty() && collectionRepository.existsByUserIdAndItemItemId(userId, itemId));
map.put("optionList",categoryList); map.put("optionList", categoryList);
map.put("itemDetail",skusList); map.put("itemDetail", skusList);
map.put("itemInfo", item); map.put("itemInfo", item);
map.put("itemParam", itemParamList); map.put("itemParam", itemParamList);
map.put("itemDesc",byId.orElse(new TbCfItemDesc())); map.put("itemDesc", byId.orElse(new TbCfItemDesc()));
return new Result<>(map); return new Result<>(map);
} }
......
...@@ -198,7 +198,8 @@ public class OrderController extends Controller { ...@@ -198,7 +198,8 @@ 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 = "web", required = false) String web) throws IOException, URISyntaxException, ExecutionException, InterruptedException, TimeoutException { @RequestParam(value = "orderSource", required = false) Integer orderSource
) throws IOException, URISyntaxException, ExecutionException, InterruptedException, TimeoutException {
TbCfUserInfo user = this.user.user(); TbCfUserInfo user = this.user.user();
String userId = user.getUserId(); String userId = user.getUserId();
...@@ -308,11 +309,8 @@ public class OrderController extends Controller { ...@@ -308,11 +309,8 @@ public class OrderController extends Controller {
order.setUserId(userId); order.setUserId(userId);
if ("web".equals(web)) {
order.setOrderSource(3); order.setOrderSource(orderSource);
} else {
order.setOrderSource(1);
}
order.getItemOrderListFromCartList(allByUserId, itemRepository); order.getItemOrderListFromCartList(allByUserId, itemRepository);
......
...@@ -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
...@@ -284,7 +282,7 @@ public class UserController extends Controller { ...@@ -284,7 +282,7 @@ public class UserController extends Controller {
@GetMapping("/queryCollectionByUserId") @GetMapping("/queryCollectionByUserId")
public Result queryCollectionByUserId(@RequestParam(value = "pageNo",defaultValue = "0") Integer pageNo, @RequestParam(value = "pageSize",defaultValue = "12") Integer pageSize) { public Result queryCollectionByUserId(@RequestParam(value = "pageNo",defaultValue = "0") Integer pageNo, @RequestParam(value = "pageSize",defaultValue = "12") Integer pageSize) {
System.err.println(user.userId());
Page<TbCfItemCollection> allByUserId = itemCollectionRepository.findAllByUserId(user.userId(), PageRequest.of(pageNo, pageSize)); Page<TbCfItemCollection> allByUserId = itemCollectionRepository.findAllByUserId(user.userId(), PageRequest.of(pageNo, pageSize));
return new Result<>(allByUserId); return new Result<>(allByUserId);
......
package com.example.afrishop_v3.controllers;
import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.models.TbCfVisit;
import com.example.afrishop_v3.repository.TbCfVisitRepository;
import com.example.afrishop_v3.security.services.AuthenticationUser;
import com.example.afrishop_v3.util.IdUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
/**
* @Auther: wudepeng
* @Date: 2020/12/01
* @Description:
*/
@RestController
@RequestMapping("/visit")
public class VisitController extends Controller {
private final HttpServletRequest request; //自动注入request
private final TbCfVisitRepository visitRepository;
private final AuthenticationUser user;
public VisitController(HttpServletRequest request, TbCfVisitRepository visitRepository, AuthenticationUser user) {
this.request = request;
this.visitRepository = visitRepository;
this.user = user;
}
@GetMapping("/getVisitCount")
public Result getVisitCount(@RequestBody TbCfVisit visit) {
String ip = getRealIpAddress(request);
// System.err.println(ip);
Long count = visitRepository.existsByVisitUser(visit.getSource(), ip);
if (count == 0) {
//保存访问记录
visit.setId(IdUtil.createIdbyUUID());
visit.setIp(ip);
visit.setVisitTime(new Date());
visitRepository.save(visit);
}
return new Result();
}
}
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.models;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
/**
* 实体
* 表名 tb_cf_visit
*
* @author lipengjun
* @date 2020-08-11 11:06:10
*/
@Entity
public class TbCfVisit implements Serializable {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@Id
private String id;
/**
* 访问来源 0:app 1:pc web 2:mobile web
*/
private Integer source;
/**
* 用户ID
*/
private String userId;
/**
* 访问时间
*/
private Date visitTime;
private String ip;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
/**
* 设置:ID
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取:ID
*/
public String getId() {
return id;
}
/**
* 设置:访问来源 0:app 1:pc web 2:mobile web
*/
public void setSource(Integer source) {
this.source = source;
}
/**
* 获取:访问来源 0:app 1:pc web 2:mobile web
*/
public Integer getSource() {
return source;
}
/**
* 设置:用户ID
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
* 获取:用户ID
*/
public String getUserId() {
return userId;
}
/**
* 设置:访问时间
*/
public void setVisitTime(Date visitTime) {
this.visitTime = visitTime;
}
/**
* 获取:访问时间
*/
public Date getVisitTime() {
return visitTime;
}
}
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();
}
package com.example.afrishop_v3.repository; package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.inter_face.OrderCount; import com.example.afrishop_v3.inter_face.OrderCount;
import com.example.afrishop_v3.models.TbCfItemOrderR;
import com.example.afrishop_v3.models.TbCfOrder; import com.example.afrishop_v3.models.TbCfOrder;
import com.example.afrishop_v3.models.TbCfUserInfo; import com.example.afrishop_v3.models.TbCfUserInfo;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
...@@ -31,4 +32,7 @@ public interface TbCfOrderRepository extends PagingAndSortingRepository<TbCfOrde ...@@ -31,4 +32,7 @@ public interface TbCfOrderRepository extends PagingAndSortingRepository<TbCfOrde
@Modifying @Modifying
@Query(value = "update tb_cf_station_item sk INNER JOIN tb_cf_item_order_r r ON r.item_id=sk.item_id set sk.item_count=sk.item_count+r.item_num WHERE r.order_id = :orderId ",nativeQuery = true) @Query(value = "update tb_cf_station_item sk INNER JOIN tb_cf_item_order_r r ON r.item_id=sk.item_id set sk.item_count=sk.item_count+r.item_num WHERE r.order_id = :orderId ",nativeQuery = true)
void returnItemQuantity(@Param("orderId") String orderId); void returnItemQuantity(@Param("orderId") String orderId);
@Query(value = "SELECT t1.*,t2.order_item_id ordersId,t2.order_status orderStatus,t2.item_num itemNum FROM tb_cf_item_detail t1 LEFT JOIN tb_cf_item_order_r t2 ON t1.item_id = t2.item_id LEFT JOIN tb_cf_order t3 ON t2.order_id = t3.order_id WHERE t2.enable_flag = 1 AND t2.order_id =:orderId",nativeQuery = true)
List getAllByItemList(String orderId);
} }
...@@ -30,6 +30,9 @@ public interface TbCfStationItemRepository extends PagingAndSortingRepository<Tb ...@@ -30,6 +30,9 @@ public interface TbCfStationItemRepository extends PagingAndSortingRepository<Tb
@Query(value = "select a.item_id as itemId,a.item_code as itemCode,a.item_name as itemName,a.item_brief as itemBrief,a.item_category as itemCategory,a.item_price as itemPrice,a.discount_price as discountPrice,a.item_url as itemUrl,a.item_img as itemImg,a.item_tags as itemTags,a.item_label as itemLabel,a.item_num as itemNum,a.item_collection_num as itemCollectionNum,a.item_count as itemCount,a.item_sku as itemSku,a.item_top as itemTop,a.supplier as supplier,a.platform_code as platformCode,a.platform_name as platformName,a.enable_flag as enableFlag,a.create_time as createTime,a.item_categorytwo as itemCategorytwo,a.item_descrition_id as itemDescritionId,a.sort,a.template,MATCH(a.item_name, a.item_brief) AGAINST(?1 IN NATURAL LANGUAGE MODE) as score from tb_cf_station_item a where a.item_name LIKE CONCAT('%',?1,'%') or a.item_name SOUNDS LIKE ?1 or MATCH(a.item_name, a.item_brief) AGAINST(?1 IN NATURAL LANGUAGE MODE) ORDER BY IF(a.item_name LIKE CONCAT('%',?1,'%'),10000,IF(a.item_name SOUNDS LIKE ?1,9999,score)) desc,a.create_time DESC limit ?2,?3", nativeQuery = true) @Query(value = "select a.item_id as itemId,a.item_code as itemCode,a.item_name as itemName,a.item_brief as itemBrief,a.item_category as itemCategory,a.item_price as itemPrice,a.discount_price as discountPrice,a.item_url as itemUrl,a.item_img as itemImg,a.item_tags as itemTags,a.item_label as itemLabel,a.item_num as itemNum,a.item_collection_num as itemCollectionNum,a.item_count as itemCount,a.item_sku as itemSku,a.item_top as itemTop,a.supplier as supplier,a.platform_code as platformCode,a.platform_name as platformName,a.enable_flag as enableFlag,a.create_time as createTime,a.item_categorytwo as itemCategorytwo,a.item_descrition_id as itemDescritionId,a.sort,a.template,MATCH(a.item_name, a.item_brief) AGAINST(?1 IN NATURAL LANGUAGE MODE) as score from tb_cf_station_item a where a.item_name LIKE CONCAT('%',?1,'%') or a.item_name SOUNDS LIKE ?1 or MATCH(a.item_name, a.item_brief) AGAINST(?1 IN NATURAL LANGUAGE MODE) ORDER BY IF(a.item_name LIKE CONCAT('%',?1,'%'),10000,IF(a.item_name SOUNDS LIKE ?1,9999,score)) desc,a.create_time DESC limit ?2,?3", nativeQuery = true)
List<SearchModel> searchAllItems(@Param("name") String name, int num, int limit); List<SearchModel> searchAllItems(@Param("name") String name, int num, int limit);
@Query(value = "select count(*),MATCH(a.item_name, a.item_brief) AGAINST(?1 IN NATURAL LANGUAGE MODE) as score from tb_cf_station_item a where a.item_name LIKE CONCAT('%',?1,'%') or a.item_name SOUNDS LIKE ?1 or MATCH(a.item_name, a.item_brief) AGAINST(?1 IN NATURAL LANGUAGE MODE) ", nativeQuery = true)
Long countAllBySearchItems(String name);
Page<TbCfStationItem> findAllByItemNameContainingOrItemTagsContaining(String itemName, String itemTags, Pageable pageable); Page<TbCfStationItem> findAllByItemNameContainingOrItemTagsContaining(String itemName, String itemTags, Pageable pageable);
Page<TbCfStationItem> findByItemCategory(String itemName, Pageable pageable); Page<TbCfStationItem> findByItemCategory(String itemName, Pageable pageable);
......
...@@ -8,7 +8,7 @@ import org.springframework.data.repository.query.Param; ...@@ -8,7 +8,7 @@ import org.springframework.data.repository.query.Param;
import java.util.List; import java.util.List;
public interface TbCfToicouponRepository extends PagingAndSortingRepository<TbCfToicoupon,String> { public interface TbCfToicouponRepository extends PagingAndSortingRepository<TbCfToicoupon,String> {
@Query("select a from #{#entityName} a WHERE a.enableFlag = 1 and a.userId = :user_id and CURRENT_TIMESTAMP between a.startTime and a.endTime order by a.coupon.deductAmount desc ") @Query("select a from #{#entityName} a WHERE a.enableFlag = 1 and a.userId = :user_id and CURRENT_TIMESTAMP between a.startTime and a.endTime order by a.coupon.deductAmount desc,a.toitableId asc ")
List<TbCfToicoupon> queryUserAvailableCoupon(@Param("user_id") String userId); List<TbCfToicoupon> queryUserAvailableCoupon(@Param("user_id") String userId);
@Query("select a from #{#entityName} a WHERE a.enableFlag = 0 and a.userId = :user_id order by a.coupon.deductAmount desc ") @Query("select a from #{#entityName} a WHERE a.enableFlag = 0 and a.userId = :user_id order by a.coupon.deductAmount desc ")
......
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfVisit;
import com.example.afrishop_v3.models.Visit;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
import javax.xml.crypto.Data;
import java.util.Date;
/**
* @Auther: wudepeng
* @Date: 2020/12/01
* @Description:
*/
public interface TbCfVisitRepository extends PagingAndSortingRepository<TbCfVisit, String> {
// @Query(value = "select count(t) from TbCfVisit t where t.source=:source and t.ip=:ip and t.userId=:userId and t.visitTime=CURRENT_DATE ")
@Query(value = "select count(1) from tb_cf_visit where source=:source and ip=:ip and DATE_FORMAT(visit_time,'%Y-%m-%d')=CURRENT_DATE", nativeQuery = true)
Long existsByVisitUser(Integer source, String ip);
}
...@@ -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/**","/problem/**").permitAll()
.antMatchers("/api/test/**").permitAll() .antMatchers("/api/test/**").permitAll()
.anyRequest().authenticated(); .anyRequest().authenticated();
......
package com.example.afrishop_v3.security.services; package com.example.afrishop_v3.security.services;
import com.example.afrishop_v3.controllers.DpoPayController;
import com.example.afrishop_v3.models.TbCfUserInfo; import com.example.afrishop_v3.models.TbCfUserInfo;
import com.example.afrishop_v3.repository.UserRepository; import com.example.afrishop_v3.repository.UserRepository;
import org.slf4j.Logger; import org.slf4j.Logger;
......
server:
servlet:
context-path: /afrishop
port: 8099
spring: spring:
datasource: datasource:
url: jdbc:mysql://159.138.48.71:3306/chinafrica_ref?useUnicode=true&connectionCollation=utf8mb4_general_ci&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC 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
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
......
...@@ -5,7 +5,7 @@ server: ...@@ -5,7 +5,7 @@ server:
spring: spring:
datasource: datasource:
url: jdbc:mysql://159.138.48.71:3306/chinafrica_ref?useUnicode=true&connectionCollation=utf8mb4_general_ci&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC url: jdbc:mysql://159.138.48.71:3306/test?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
......
server.servlet.context-path=/zion server.servlet.context-path=/zion
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
server.port = 7000 server.port=8083
spring.profiles.active=test
#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
#spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect #spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.profiles.active=test spring.datasource.connectionInitSql:SET NAMES 'utf8mb4'
spring.datasource.connectionInitSql: SET NAMES 'utf8mb4'
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect #spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
security.oauth2.resource.filter-order=3 security.oauth2.resource.filter-order=3
security.signing-key=MaYzkSjmkzPC57L security.signing-key=MaYzkSjmkzPC57L
...@@ -21,9 +21,7 @@ security.jwt.scope-write=write ...@@ -21,9 +21,7 @@ security.jwt.scope-write=write
security.jwt.resource-ids=testjwtresourceid security.jwt.resource-ids=testjwtresourceid
spring.servlet.multipart.max-file-size=456128KB spring.servlet.multipart.max-file-size=456128KB
spring.servlet.multipart.max-request-size=456128KB spring.servlet.multipart.max-request-size=456128KB
# App Properties # App Properties
bezkoder.app.jwtSecret= bezKoderSecretKey bezkoder.app.jwtSecret=bezKoderSecretKey
bezkoder.app.jwtExpirationMs= 86400000 bezkoder.app.jwtExpirationMs=86400000
//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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论