提交 4e812bd6 authored 作者: Whispa's avatar Whispa
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 java.util.List;
/**
* @Auther: wudepeng
* @Date: 2020/11/30
* @Description:
* @Description:活动管理
*/
@RestController
@RequestMapping("/activity")
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{
private final AuthenticationUser user;
public AddressController(TbCfAddressRepository repository, UserRepository userRepository, AuthenticationUser user) {
this.repository = repository;
this.userRepository = userRepository;
this.user = user;
......
......@@ -30,7 +30,6 @@ import org.springframework.web.bind.annotation.*;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
......@@ -136,18 +135,18 @@ public class AuthController extends Controller {
@GetMapping("/verifyCode/{account}/{code}")
public Result<Boolean> validateCode(@PathVariable("account") String account,
@PathVariable("code") String code){
@PathVariable("code") String code) {
Optional<TbCfUserInfo> userInfoOptional = userRepository.findFirstByAccount(account);
if( !userInfoOptional.isPresent() )
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Account not found");
if (!userInfoOptional.isPresent())
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Account not found");
TbCfUserInfo userInfo = userInfoOptional.get();
if( code.equals(userInfo.getVerificationCode()) ){
return new Result<>(true,"Verification code is right !!!");
if (code.equals(userInfo.getVerificationCode())) {
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")
......@@ -348,7 +347,7 @@ public class AuthController extends Controller {
if (!optional.isPresent() && user.getPhone() != null && !user.getPhone().isEmpty() && userRepository.existsByAccount(user.getPhone().replace("+", ""))) {
optional = userRepository.findFirstByAccount(user.getPhone().replace("+", ""));
}
logger.info("user is exist:" + optional.isPresent());
if (!optional.isPresent()) {
......@@ -417,7 +416,7 @@ public class AuthController extends Controller {
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());
}
......@@ -449,6 +448,7 @@ public class AuthController extends Controller {
private void fixCoupon(TbCfUserInfo user) {
logger.info("Issue coupons to new users...");
try {
List<TbCfCoupon> couponVailList = couponRepository.findAllByCouponVaild(1);
//获取当前时间的时分秒
......@@ -459,6 +459,7 @@ public class AuthController extends Controller {
c.add(Calendar.DATE, 7);
Date endDate = c.getTime();
for (TbCfCoupon tbCfCoupon : couponVailList) {
logger.info("coupon:" + tbCfCoupon.getCouponTitle());
TbCfToicoupon toi = new TbCfToicoupon();
//把上面获取到的值,赋值到实体类中
toi.setToitableId(IdUtil.createIdbyUUID());
......@@ -527,7 +528,6 @@ public class AuthController extends Controller {
private void fillUserNecessayInfo(TbCfUserInfo tbCfUserInfoVo) {
if (tbCfUserInfoVo.getAvatar() == null) tbCfUserInfoVo.setAvatar(domainProperties.getProperty("user.avatar"));
tbCfUserInfoVo.setNick(tbCfUserInfoVo.getAccount());
tbCfUserInfoVo.setUserNo(IdUtil.createIdByDate());
tbCfUserInfoVo.setPhoneFlag(StateConstant.INVALID);
tbCfUserInfoVo.setLoginCount(0);
......@@ -540,9 +540,14 @@ public class AuthController extends Controller {
tbCfUserInfoVo.setUserType(UserTypeEnum.UN_KNOW.getCode());
tbCfUserInfoVo.setEmailFlag(StateConstant.INVALID);
if( tbCfUserInfoVo.getNick() == null ){
tbCfUserInfoVo.setNick(tbCfUserInfoVo.getEmail() == null ? tbCfUserInfoVo.getEmail() : tbCfUserInfoVo.getPhone());
if (tbCfUserInfoVo.getNick() == null) {
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}")
......@@ -567,8 +572,8 @@ public class AuthController extends Controller {
String validatePassword = validatePassword(password);
if( validatePassword != null ){
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),validatePassword);
if (validatePassword != null) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), validatePassword);
}
TbCfUserInfo user = firstByAccount.get();
......@@ -577,17 +582,17 @@ public class AuthController extends Controller {
user.setPassword(encoder.encode(password));
userRepository.save(user);
return new Result("Password reset successfully !");
}else {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Verification code don't match !");
} else {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Verification code don't match !");
}
}
@GetMapping("/checkAccountAvailability/{account}")
public Result checkUsername(@PathVariable("account") String account){
public Result checkUsername(@PathVariable("account") String account) {
boolean exists = userRepository.existsByAccount(account);
if( exists ){
if (exists) {
return new Result<>(
true,
ResultCodeEnum.SUCCESS.getCode(),
......
......@@ -14,6 +14,7 @@ import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthException;
import com.google.firebase.auth.FirebaseToken;
import com.google.firebase.messaging.*;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.HttpEntity;
......@@ -21,8 +22,11 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.HashMap;
......@@ -31,6 +35,10 @@ import java.util.regex.Pattern;
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() {
return IdUtil.createIdbyUUID();
}
......@@ -102,6 +110,7 @@ abstract class Controller {
FirebaseApp firebaseApp;
try {
firebaseApp = FirebaseApp.getInstance("other");
System.out.println("firebaseApp="+firebaseApp);
} catch (IllegalStateException e) {
firebaseApp = FirebaseApp.initializeApp(options, "other");
}
......@@ -120,7 +129,7 @@ abstract class Controller {
if (firebaseApp == null) return false;
FirebaseAuth instance = FirebaseAuth.getInstance(firebaseApp);
//System.out.println(firebaseApp.getName());
System.out.println("instance="+instance);
//System.out.println(token);
try {
FirebaseToken firebaseToken = instance.verifyIdToken(token);
......@@ -204,4 +213,50 @@ abstract class Controller {
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;
}
}
......@@ -4,7 +4,6 @@ import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.base.StateConstant;
import com.example.afrishop_v3.models.TbCfFeedback;
import com.example.afrishop_v3.repository.TbCfFeedbackRepository;
import com.example.afrishop_v3.util.IdUtil;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
......
......@@ -3,19 +3,17 @@ package com.example.afrishop_v3.controllers;
import com.alibaba.fastjson.JSON;
import com.example.afrishop_v3.base.Result;
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.RaveConstant;
import com.example.afrishop_v3.enums.DeliveryStatusEnum;
import com.example.afrishop_v3.enums.OrderStatusEnum;
import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.models.*;
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.repository.*;
import com.example.afrishop_v3.security.services.AuthenticationUser;
import com.example.afrishop_v3.util.HttpClientUtil;
import com.example.afrishop_v3.util.IdUtil;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -25,6 +23,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
@RestController
......@@ -37,6 +37,11 @@ public class FlutterWaveController extends Controller {
// private final DomainProperties domainProperties;
private final AuthenticationUser user;
private final NetworkRepository networkRepository;
private final BonusRepository bonusRepository;
private final PostRepository postRepository;
private final TbCfOrderRepository orderRepository;
@Value("${flutter.refund_url}")
private String FLUTTERWAVE_REFUND_URL;
......@@ -60,19 +65,23 @@ public class FlutterWaveController extends Controller {
// // //校验API
// 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.financeRepository = financeRepository;
this.userRepository = userRepository;
// this.domainProperties = domainProperties;
this.user = user;
this.networkRepository = networkRepository;
this.bonusRepository = bonusRepository;
this.postRepository = postRepository;
this.orderRepository = orderRepository;
}
@PostMapping("/pay")
public ResponseEntity<String> payForOrderByCard(@RequestParam("orderId") String orderId, @RequestBody FlutterWaveCard flutterWaveCard) {
RaveConstant.PUBLIC_KEY = PUBLIC_KEY;
RaveConstant.SECRET_KEY = SECRET_KEY;
RaveConstant.ENVIRONMENT = Environment.STAGING; //or live
RaveConstant.ENVIRONMENT = Environment.LIVE; //or live
// Result result = new Result();
Optional<TbCfOrder> byId = repository.findById(orderId);
......@@ -224,6 +233,21 @@ public class FlutterWaveController extends Controller {
}*/
//生成支付流水
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();
// BeanUtils.copyProperties(finance, tbCfFinanceVo);
// removeRedisCache(tbCfOrderVo);
......@@ -333,4 +357,100 @@ public class FlutterWaveController extends Controller {
result.setData(key).setMessage(ResultCodeEnum.SUCCESS.getDesc());
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;
import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.enums.ResultCodeEnum;
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.repository.ItemLabelRepository;
import com.example.afrishop_v3.repository.TbCfStationItemRepository;
......@@ -15,7 +14,6 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.io.IOException;
import java.util.*;
......@@ -31,6 +29,7 @@ public class ImageSearchController extends Controller {
public ImageSearchController(TbCfStationItemRepository repository, ItemLabelRepository labelRepository) {
this.repository = repository;
this.labelRepository = labelRepository;
}
......
......@@ -46,21 +46,21 @@ public class ItemController {
@RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize,
@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")
public Result queryItemsByTypeTwo( @RequestParam("typeTwoId") String typeTwoId,
public Result queryItemsByTypeTwo(@RequestParam("typeTwoId") String typeTwoId,
@RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize,
@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}")
public Result queryCategoryTwoByCid( @PathVariable("categoryId") String categoryId) {
public Result queryCategoryTwoByCid(@PathVariable("categoryId") String categoryId) {
Map<String, Object> map = new HashMap<>();
Optional<TbCfGoodstype> byId = goodstypeRepository.findById(categoryId);
......@@ -89,13 +89,21 @@ public class ItemController {
try {
List<SearchModel> list = repository.searchAllItems(name,pageNum*pageSize,pageSize);
Map<String,Object> map = new LinkedHashMap<>();
map.put("content",list);
List<SearchModel> list = repository.searchAllItems(name, pageNum * pageSize, pageSize);
Long count = repository.countAllBySearchItems(name);
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);
}catch (Exception e){
} catch (Exception e) {
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 {
@RequestParam(value = "pageSize", defaultValue = "12") Integer pageSize) {
Optional<TbCfStationItem> byId = repository.findById(itemId);
if( byId.isPresent() ) {
if (byId.isPresent()) {
TbCfStationItem stationItem = byId.get();
Page<TbCfStationItem> recommendItems = repository.getRecommendItems(itemId, stationItem.getItemDescritionId(), stationItem.getItemCategorytwo(), stationItem.getItemCategory(), PageRequest.of(pageNum, pageSize));
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}")
public Result queryItemByDescription(@PathVariable("descriptionId") String descriptionId,
@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")
public Result queryItemsByTypeThree( @RequestParam("typeThreeId") String typeThreeId,
public Result queryItemsByTypeThree(@RequestParam("typeThreeId") String typeThreeId,
@RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize,
@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){
return "priceUp".equals(order) ? sort("asc") : "priceDown".equals(order) ? sort("desc") : sort(order,"createTime");
private Sort getSort(String order) {
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";
return sort(order,col);
return sort(order, col);
}
private Sort sort(String order,String col){
return Sort.by(order(order,col));
private Sort sort(String order, String 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);
}
private Sort sort2(String order){
String[] cols = new String[]{"itemTop","discountPrice","createTime"};
private Sort sort2(String order) {
String[] cols = new String[]{"itemTop", "discountPrice", "createTime"};
List<Sort.Order> list = new ArrayList<>();
for (String col : cols){
list.add( order(order,col) );
for (String col : cols) {
list.add(order(order, col));
}
return Sort.by(list);
......@@ -169,18 +178,18 @@ public class ItemController {
@RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize,
@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")
public Result queryItemSku( @RequestParam(value = "itemId") String itemId,
public Result queryItemSku(@RequestParam(value = "itemId") String itemId,
@RequestParam(value = "userId", required = false) String userId) {
Optional<TbCfStationItem> itemOptional = repository.findById(itemId);
if( !itemOptional.isPresent() )
return new Result(ResultCodeEnum.ILLEGAL_ARGUMENT.getCode(),"Item Id is not found");
if (!itemOptional.isPresent())
return new Result(ResultCodeEnum.ILLEGAL_ARGUMENT.getCode(), "Item Id is not found");
List<TbCfCategory> categoryList = categoryRepository.findAllByItemIdOrderByOrderNumAsc(itemId);
......@@ -194,13 +203,13 @@ public class ItemController {
//商品详情
Optional<TbCfItemDesc> byId = descRepository.findById(itemId);
map.put("score",item.getTotalScore());
map.put("isCollection",userId != null && !userId.isEmpty() && collectionRepository.existsByUserIdAndItemItemId(userId,itemId));
map.put("optionList",categoryList);
map.put("itemDetail",skusList);
map.put("score", item.getTotalScore());
map.put("isCollection", userId != null && !userId.isEmpty() && collectionRepository.existsByUserIdAndItemItemId(userId, itemId));
map.put("optionList", categoryList);
map.put("itemDetail", skusList);
map.put("itemInfo", item);
map.put("itemParam", itemParamList);
map.put("itemDesc",byId.orElse(new TbCfItemDesc()));
map.put("itemDesc", byId.orElse(new TbCfItemDesc()));
return new Result<>(map);
}
......
......@@ -198,7 +198,8 @@ public class OrderController extends Controller {
@RequestParam(value = "itemNum", required = false) Integer itemNum,
@RequestParam(value = "itemSku", required = false) String itemSku,
@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();
String userId = user.getUserId();
......@@ -308,11 +309,8 @@ public class OrderController extends Controller {
order.setUserId(userId);
if ("web".equals(web)) {
order.setOrderSource(3);
} else {
order.setOrderSource(1);
}
order.setOrderSource(orderSource);
order.getItemOrderListFromCartList(allByUserId, itemRepository);
......
......@@ -7,10 +7,8 @@ import com.example.afrishop_v3.config.PaypalPaymentMethod;
import com.example.afrishop_v3.enums.DeliveryStatusEnum;
import com.example.afrishop_v3.enums.OrderStatusEnum;
import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.models.TbCfFinance;
import com.example.afrishop_v3.models.TbCfOrder;
import com.example.afrishop_v3.repository.TbCfFinanceRepository;
import com.example.afrishop_v3.repository.TbCfOrderRepository;
import com.example.afrishop_v3.models.*;
import com.example.afrishop_v3.repository.*;
import com.example.afrishop_v3.util.IdUtil;
import com.paypal.api.payments.*;
import com.paypal.base.rest.APIContext;
......@@ -25,6 +23,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
......@@ -39,7 +38,7 @@ import java.util.Optional;
@RestController
@RequestMapping(value = "/paypal")
@Transactional
public class PaypalContoller {
public class PaypalContoller extends Controller {
private static Logger logger = LoggerFactory.getLogger(PaypalContoller.class);
......@@ -57,15 +56,22 @@ public class PaypalContoller {
private final APIContext apiContext;
private final TbCfOrderRepository orderRepository;
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.orderRepository = orderRepository;
this.financeRepository = financeRepository;
this.networkRepository = networkRepository;
this.bonusRepository = bonusRepository;
this.postRepository = postRepository;
this.userRepository = userRepository;
}
......@@ -208,6 +214,20 @@ public class PaypalContoller {
//数据库校验支付状态##PayStatus 20
if (OrderStatusEnum.PAID.getValue().equals(tbCfOrder.getPayStatus()))
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 {
String now = format.format(new Date());
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;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;
import java.awt.print.Pageable;
import java.net.URLDecoder;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@RestController
......@@ -284,7 +282,7 @@ public class UserController extends Controller {
@GetMapping("/queryCollectionByUserId")
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));
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 {
private double percentage;
@Transient
private String userId;
public void setUserId(String userId) {
this.userId = userId;
}
public void setOrderId(String 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;
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.TbCfUserInfo;
import org.springframework.data.domain.Page;
......@@ -31,4 +32,7 @@ public interface TbCfOrderRepository extends PagingAndSortingRepository<TbCfOrde
@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)
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
@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);
@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> findByItemCategory(String itemName, Pageable pageable);
......
......@@ -8,7 +8,7 @@ import org.springframework.data.repository.query.Param;
import java.util.List;
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);
@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 {
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests().antMatchers("/api/auth/**", "/search/image/**", "/itemStation/**", "/startPage/**",
"/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()
.anyRequest().authenticated();
......
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.repository.UserRepository;
import org.slf4j.Logger;
......
server:
servlet:
context-path: /afrishop
port: 8099
spring:
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
driver-class-name: com.mysql.cj.jdbc.Driver
password: Diaoyunnuli.8
......
......@@ -5,7 +5,7 @@ server:
spring:
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
driver-class-name: com.mysql.cj.jdbc.Driver
password: Diaoyunnuli.8
......
server.servlet.context-path=/zion
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.username=root
#spring.datasource.password=Diaoyunnuli.8
#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
security.oauth2.resource.filter-order=3
security.signing-key=MaYzkSjmkzPC57L
......@@ -21,9 +21,7 @@ security.jwt.scope-write=write
security.jwt.resource-ids=testjwtresourceid
spring.servlet.multipart.max-file-size=456128KB
spring.servlet.multipart.max-request-size=456128KB
# App Properties
bezkoder.app.jwtSecret= bezKoderSecretKey
bezkoder.app.jwtExpirationMs= 86400000
bezkoder.app.jwtSecret=bezKoderSecretKey
bezkoder.app.jwtExpirationMs=86400000
//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.runner.Result;
//import org.junit.runner.RunWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.http.ResponseEntity;
//import org.springframework.test.context.junit4.SpringRunner;
//import org.springframework.web.client.RestTemplate;
//
//import java.text.SimpleDateFormat;
//import java.time.LocalDateTime;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Optional;
//
//@RunWith(SpringRunner.class)
//@SpringBootTest
//public class AfrishopV3ApplicationTests {
//
// RestTemplate restTemplate = new RestTemplate();
//
// @Test
// void contextLoads() {
// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
......@@ -20,4 +34,27 @@
// 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论