提交 0cd7de3d authored 作者: Whispa's avatar Whispa

commit

上级 ea401cd3
...@@ -60,6 +60,23 @@ ...@@ -60,6 +60,23 @@
<artifactId>gson</artifactId> <artifactId>gson</artifactId>
<!--<version>2.8.5</version>--> <!--<version>2.8.5</version>-->
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
<!-- https://mvnrepository.com/artifact/de.odysseus.staxon/staxon -->
<dependency>
<groupId>de.odysseus.staxon</groupId>
<artifactId>staxon</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>6.14.0</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId> <artifactId>spring-boot-starter-oauth2-client</artifactId>
......
package com.example.afrishop_v3.config;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.json.JSONObject;
import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import static org.apache.http.conn.ssl.SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER;
/**
* @author Theresa
*/
public class ApiConnection {
final private String url;
/**
* @param url - Flutterwave API url
*/
public ApiConnection(String url) {
this.url = url;
this.enforceTlsV1point2();
}
private void enforceTlsV1point2() {
try {
SSLContext sslContext = SSLContexts.custom()
.useTLS()
.build();
SSLConnectionSocketFactory f = new SSLConnectionSocketFactory(
sslContext,
new String[]{"TLSv1.2"},
null,
BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(f)
.build();
Unirest.setHttpClient(httpClient);
} catch (NoSuchAlgorithmException | KeyManagementException ex) {
Logger.getLogger(ApiConnection.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Connects to and queries Flutterwave API with POST
*
* @param query - APIQuery containing parameters to send
* @return - JSONObject containing API response
*/
public JSONObject connectAndQuery(ApiQuery query) {
try {
HttpResponse<JsonNode> queryForResponse = Unirest.post(url)
.header("Accept", "application/json")
.fields(query.getParams())
.asJson();
try{
return queryForResponse.getBody().getObject();
}catch(Exception ex){}
} catch (UnirestException e) {
}
return null;
}
/**
* Connects to and queries API with POST
*
* @param query - HashMap containing parameters to send
* @return - JSONObject containing API response
*/
public JSONObject connectAndQuery(HashMap<String, Object> query) {
try {
HttpResponse<JsonNode> queryForResponse = Unirest.post(url)
.header("Accept", "application/json")
.fields(query)
.asJson();
return queryForResponse.getBody().getObject();
} catch (UnirestException e) {
}
return null;
}
/**
* Used to send a GET request to the Flutterwave API
*
* @return - JSONObject containing the API response
*/
public JsonNode connectAndQueryWithGet() {
try {
HttpResponse<JsonNode> queryForResponse = Unirest.get(url)
.header("content-type", "application/json")
.asJson();
return queryForResponse.getBody();
} catch (UnirestException e) {
System.out.println("Cant query at this time!");
}
return null;
}
}
package com.example.afrishop_v3.config;
import java.util.HashMap;
public class ApiQuery {
final private HashMap<String, Object> queryMap;
/**
* Initializes a new query map
*/
public ApiQuery() {
this.queryMap = new HashMap<>();
}
/**
* Used to add a parameter to the query map
*
* @param key
* @param value
*/
public void putParams(String key, Object value) {
this.queryMap.put(key, value);
}
public HashMap<String, Object> getParams() {
return this.queryMap;
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.example.afrishop_v3.config;
import org.json.JSONObject;
/**
*
* @author Theresa
*/
public class Charge {
ApiConnection apiConnection;
Endpoints ed= new Endpoints();
/**
*
* @param client
* @return JSONObject
*/
//for all charges
public JSONObject charge(String client){
this.apiConnection = new ApiConnection(ed.getChargeEndPoint());
String alg="3DES-24";
ApiQuery api=new ApiQuery();
api.putParams("PBFPubKey", RaveConstant.PUBLIC_KEY);
api.putParams("client", client);
api.putParams("alg", alg);
return this.apiConnection.connectAndQuery(api);
}
/**
*
*
* @return JSONObject
* @param transaction_reference
* @param otp
*
*/
public JSONObject validateAccountCharge(String transaction_reference, String otp){
this.apiConnection = new ApiConnection(ed.getValidateAccountChargeEndPoint());
ApiQuery api=new ApiQuery();
api.putParams("PBFPubKey",RaveConstant.PUBLIC_KEY);
api.putParams("transactionreference", transaction_reference);
api.putParams("otp", otp);
return this.apiConnection.connectAndQuery(api);
}
/**
*
*
* @return JSONObject
* @param transaction_reference
* @param otp
*
*/
public JSONObject validateCardCharge(String transaction_reference, String otp){
this.apiConnection = new ApiConnection(ed.getValidateCardChargeEndPoint());
ApiQuery api=new ApiQuery();
api.putParams("PBFPubKey",RaveConstant.PUBLIC_KEY);
api.putParams("transaction_reference", transaction_reference);
api.putParams("otp", otp);
return this.apiConnection.connectAndQuery(api);
}
}
package com.example.afrishop_v3.config;
/**
* @Auther: wudepeng
* @Date: 2020/02/27
* @Description:DPO配置类 (正式环境)
*/
public class DpoConfig {
//创建交易请求
public final static String CREATE_TOKEN_REQUEST = "createToken";
//校验交易请求
public final static String VERIFY_TOKEN_REQUEST = "verifyToken";
//取消交易请求
public final static String CANCEL_TOKEN_REQUEST = "cancelToken";
//CompanyToken
public final static String COMPANY_TOKEN = "E6759E15-C2F3-4526-ADEF-8FC0017BB1C4";
//请求成功的状态码
public final static String SUCCESS_CODE = "000";
//DPO支付API
public final static String PAYMENT_API = "https://secure.3gdirectpay.com/API/v6/";
//重定向地址
public final static String REDIRECT_URL = "https://secure.3gdirectpay.com/pay.asp";
//服务类型
public final static String SERVICE_TYPE = "35711";
//回调地址
public final static String NOTIFY_URL = "https://app.afrieshop.com/zion/dpo/notify";
//取消地址
public final static String BACK_URL = "https://app.afrieshop.com/zion/dpo/cancel";
//支付成功页面
public final static String SUCCESS_URL = "https://www.afrieshop.com/payment_successful";
//支付失败页面
public final static String FAILED_URL = "https://www.afrieshop.com/payment_failed";
//支付成功页面
public final static String MOBILE_SUCCESS_URL = "https://m.afrieshop.com/#/Paysuccess";
//支付失败页面
public final static String MOBILE_FAILED_URL = "https://m.afrieshop.com/#/PayFail";
}
package com.example.afrishop_v3.config;
/**
* @Auther: wudepeng
* @Date: 2020/03/13
* @Description:DPO配置(测试环境)
*/
public class DpoConfigTest {
//创建交易请求
public final static String CREATE_TOKEN_REQUEST = "createToken";
//校验交易请求
public final static String VERIFY_TOKEN_REQUEST = "verifyToken";
//取消交易请求
public final static String CANCEL_TOKEN_REQUEST = "cancelToken";
//CompanyToken
public final static String COMPANY_TOKEN = "9F416C11-127B-4DE2-AC7F-D5710E4C5E0A";
//请求成功的状态码
public final static String SUCCESS_CODE = "000";
//DPO支付API
public final static String PAYMENT_API = "https://secure1.sandbox.directpay.online/API/v6/";
//重定向地址
public final static String REDIRECT_URL = "https://secure1.sandbox.directpay.online/payv2.php";
//回调地址
public final static String NOTIFY_URL = "https://dev.diaosaas.com/zion/dpo/notify";
//支付成功页面
public final static String SUCCESS_URL = "https://dev.diaosaas.com/afrishop_web/payment_successful";
//支付失败页面
public final static String FAILED_URL = "https://dev.diaosaas.com/afrishop_web/payment_failed";
//支付成功页面
public final static String MOBILE_SUCCESS_URL = "https://m.afrieshop.com/#/Paysuccess";
//支付失败页面
public final static String MOBILE_FAILED_URL = "https://m.afrieshop.com/#/PayFail";
//取消地址
public final static String BACK_URL = "https://dev.diaosaas.com/zion/dpo/cancel";
//服务类型
public final static Integer SERVICE_TYPE = 5525;
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.example.afrishop_v3.config;
import org.json.JSONObject;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Base64;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Theresa
*/
public class Encryption {
RaveConstant keys= new RaveConstant();
// Method to turn bytes in hex
public static String toHexStr(byte[] bytes){
StringBuilder builder = new StringBuilder();
for(int i = 0; i < bytes.length; i++ ){
builder.append(String.format("%02x", bytes[i]));
}
return builder.toString();
}
// this is the getKey function that generates an encryption Key for you by passing your Secret Key as a parameter.
public static String getKey(String seedKey) {
try {
MessageDigest md = MessageDigest.getInstance("md5");
byte[] hashedString = md.digest(seedKey.getBytes("utf-8"));
byte[] subHashString = toHexStr(Arrays.copyOfRange(hashedString, hashedString.length - 12, hashedString.length)).getBytes("utf-8");
String subSeedKey = seedKey.replace("FLWSECK-", "");
subSeedKey = subSeedKey.substring(0, 12);
byte[] combineArray = new byte[24];
System.arraycopy(subSeedKey.getBytes(), 0, combineArray, 0, 12);
System.arraycopy(subHashString, subHashString.length - 12, combineArray, 12, 12);
return new String(combineArray);
} catch (NoSuchAlgorithmException | UnsupportedEncodingException ex) {
Logger.getGlobal().log(Level.SEVERE, null, ex);
}
return null;
}
// This is the encryption function that encrypts your payload by passing the stringified format and your encryption Key.
public static String encryptData(String message, String _encryptionKey) {
try {
final byte[] digestOfPassword = _encryptionKey.getBytes("utf-8");
final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
final SecretKey key = new SecretKeySpec( keyBytes , "DESede");
final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
final byte[] plainTextBytes = message.getBytes("utf-8");
final byte[] cipherText = cipher.doFinal(plainTextBytes);
return Base64.getEncoder().encodeToString(cipherText);
} catch (UnsupportedEncodingException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) {
return "";
}
}
/**
*
* @param api(JSON object)
* @return String
*/
public String encryptParameters(JSONObject api) {
try{
api.put("PBFPubKey",RaveConstant.PUBLIC_KEY);
}catch(Exception ex){}
String message= api.toString();
String encrypt_secret_key=getKey(RaveConstant.SECRET_KEY);
String encrypted_message= encryptData(message,encrypt_secret_key);
return encrypted_message;
}
/**
*
*
* @return String
* @param api
*
*/
public String encryptParametersPreAuth(JSONObject api){
try{
api.put("PBFPubKey","FLWPUBK-8cd258c49f38e05292e5472b2b15906e-X");
}catch(Exception ex){}
String message= api.toString();
String encrypt_secret_key=getKey("FLWSECK-c51891678d48c39eff3701ff686bdb69-X");
String encrypted_message= encryptData(message,encrypt_secret_key);
return encrypted_message;
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.example.afrishop_v3.config;
/**
*
* @author Theresa
*/
public class Endpoints {
RaveConstant key= new RaveConstant();
String staging_url="https://ravesandboxapi.flutterwave.com/";
String live_url="https://api.ravepay.co/";
String url;
public String BANK_ENDPOINT;
public static String CHARGE_ENDPOINT;
public static String CARD_VALIDATE_ENDPOINT;
public static String ACCOUNT_VALIDATE_ENDPOINT;
public static String TIMEOUT_ENDPOINT;
public static String POLL_ENDPOINT;
public static String FEES_ENDPOINT;
public static String REFUND_ENDPOINT;
public static String FOREX_ENDPOINT;
public static String VERIFY_TRANSACTION_ENDPOINT;
public static String VERIFY_XREQUERY_ENDPOINT;
public static String CAPTURE_ENDPOINT;
public static String REFUNDVOID_ENDPOINT;
public static String CHARGE_TIMEOUT_ENDPOINT;
public static String VALIDATE_CARD_CHARGE_TIMEOUT_ENDPOINT;
public static String VALIDATE_ACCOUNT_CHARGE_TIMEOUT_ENDPOINT;
void init(){
if(RaveConstant.ENVIRONMENT.toString().equalsIgnoreCase("live")){
url=live_url;
}
else {
url=staging_url;
}
BANK_ENDPOINT= url+"flwv3-pug/getpaidx/api/flwpbf-banks.js?json=1";
CHARGE_ENDPOINT =url+"flwv3-pug/getpaidx/api/charge";
CARD_VALIDATE_ENDPOINT = url+"flwv3-pug/getpaidx/api/validatecharge";
ACCOUNT_VALIDATE_ENDPOINT=url+"flwv3-pug/getpaidx/api/validate";
TIMEOUT_ENDPOINT=url+"flwv3-pug/getpaidx/api/charge?use_polling=1";
POLL_ENDPOINT=url+"flwv3-pug/getpaidx/api/requests/RCORE_CHREQ_3FC28781846AD8E1C598";
FEES_ENDPOINT=url+"flwv3-pug/getpaidx/api/fee";
REFUND_ENDPOINT=url+"gpx/merchant/transactions/refund";
FOREX_ENDPOINT=url+"flwv3-pug/getpaidx/api/forex";
VERIFY_TRANSACTION_ENDPOINT=url+"flwv3-pug/getpaidx/api/verify";
VERIFY_XREQUERY_ENDPOINT=url+"flwv3-pug/getpaidx/api/xrequery";
CAPTURE_ENDPOINT=url+"flwv3-pug/getpaidx/api/capture";
REFUNDVOID_ENDPOINT=url+"flwv3-pug/getpaidx/api/refundorvoid";
CHARGE_TIMEOUT_ENDPOINT=url+"flwv3-pug/getpaidx/api/charge?use_polling=1";
VALIDATE_CARD_CHARGE_TIMEOUT_ENDPOINT=url+"flwv3-pug/getpaidx/api/validatecharge?use_polling=1";
VALIDATE_ACCOUNT_CHARGE_TIMEOUT_ENDPOINT= url+"flwv3-pug/getpaidx/api/validate?use_polling=1";
}
public String getBankEndPoint(){
init();
return BANK_ENDPOINT;
}
public String getChargeEndPoint(){
init();
return CHARGE_ENDPOINT;
}
public String getValidateCardChargeEndPoint(){
init();
return CARD_VALIDATE_ENDPOINT;
}
public String getValidateAccountChargeEndPoint(){
init();
return ACCOUNT_VALIDATE_ENDPOINT;
}
public String getFeesEndPoint(){
init();
return FEES_ENDPOINT;
}
public String getRefundEndPoint(){
init();
return REFUND_ENDPOINT;
}
public String getForexEndPoint(){
init();
return FOREX_ENDPOINT;
}
public String getVerifyEndPoint(){
init();
return VERIFY_TRANSACTION_ENDPOINT;
}
public String getVerifyXrequeryEndPoint(){
init();
return VERIFY_XREQUERY_ENDPOINT;
}
public String getCaptureEndPoint(){
init();
return CAPTURE_ENDPOINT;
}
public String getRefundOrVoidEndPoint(){
init();
return REFUNDVOID_ENDPOINT;
}
public String getChargeTimeoutEndpoint(){
init();
return CHARGE_TIMEOUT_ENDPOINT;
}
public String getValidateCardChargeTimeoutEndpoint(){
init();
return VALIDATE_CARD_CHARGE_TIMEOUT_ENDPOINT;
}
public String getValidateAccountChargeTimeoutEndpoint(){
init();
return VALIDATE_ACCOUNT_CHARGE_TIMEOUT_ENDPOINT;
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.example.afrishop_v3.config;
/**
*
* @author Theresa
*/
public enum Environment {
STAGING,
LIVE
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.example.afrishop_v3.config;
import org.json.JSONException;
import org.json.JSONObject;
import static com.example.afrishop_v3.config.Encryption.encryptData;
/**
*
* @author Theresa
*/
public class Polling {
ApiConnection apiConnection;
final private Endpoints ed=new Endpoints();
Encryption e=new Encryption();
RaveConstant key=new RaveConstant();
//if timeout, start polling
/**
*
*@param json
* @throws JSONException
* @return JSONObject
*/
public JSONObject handleTimeoutCharge(JSONObject json){
this.apiConnection = new ApiConnection(ed.getChargeTimeoutEndpoint());
JSONObject tcharge= null;
String message= json.toString();
String encrypt_secret_key=Encryption.getKey( RaveConstant.SECRET_KEY);
String client= encryptData(message,encrypt_secret_key);
String alg="3DES-24";
ApiQuery api=new ApiQuery();
api.putParams("PBFPubKey", RaveConstant.PUBLIC_KEY);
api.putParams("client", client);
api.putParams("alg", alg);
tcharge= this.apiConnection.connectAndQuery(api);
return tcharge;
}
/**
*
* @param transaction_reference
* @param otp
* @return String
*/
public JSONObject validateCardChargeTimeout(String transaction_reference, String otp){
this.apiConnection = new ApiConnection(ed.getValidateCardChargeTimeoutEndpoint());
ApiQuery api=new ApiQuery();
api.putParams("PBFPubKey",RaveConstant.PUBLIC_KEY);
api.putParams("transaction_reference", transaction_reference);
api.putParams("otp", otp);
return this.apiConnection.connectAndQuery(api);
}
/**
*
* @param transaction_reference
* @param otp
* @return String
*/
public JSONObject validateAccountChargeTimeout(String transaction_reference, String otp){
this.apiConnection = new ApiConnection(ed.getValidateAccountChargeTimeoutEndpoint());
ApiQuery api=new ApiQuery();
api.putParams("PBFPubKey",RaveConstant.PUBLIC_KEY);
api.putParams("transaction_reference", transaction_reference);
api.putParams("otp", otp);
return this.apiConnection.connectAndQuery(api);
}
}
package com.example.afrishop_v3.config;
/**
* @author Theresa
*/
public class RaveConstant {
public static String SECRET_KEY;
public static String PUBLIC_KEY;
public static Environment ENVIRONMENT;
}
package com.example.afrishop_v3.controllers; 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.base.StateConstant;
import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.models.TbCfAddress; import com.example.afrishop_v3.models.TbCfAddress;
import com.example.afrishop_v3.models.TbCfUserInfo;
import com.example.afrishop_v3.repository.TbCfAddressRepository; import com.example.afrishop_v3.repository.TbCfAddressRepository;
import com.example.afrishop_v3.repository.UserRepository;
import com.example.afrishop_v3.security.services.AuthenticationUser; import com.example.afrishop_v3.security.services.AuthenticationUser;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Optional;
@RestController @RestController
@RequestMapping("/address") @RequestMapping("/address")
public class AddressController extends Controller{ public class AddressController extends Controller{
private final TbCfAddressRepository repository; private final TbCfAddressRepository repository;
private final UserRepository userRepository;
private final AuthenticationUser user; private final AuthenticationUser user;
public AddressController(TbCfAddressRepository repository, AuthenticationUser user) { public AddressController(TbCfAddressRepository repository, UserRepository userRepository, AuthenticationUser user) {
this.repository = repository; this.repository = repository;
this.userRepository = userRepository;
this.user = user; this.user = user;
} }
...@@ -36,4 +44,37 @@ public class AddressController extends Controller{ ...@@ -36,4 +44,37 @@ public class AddressController extends Controller{
address.setAddressId(addressId); address.setAddressId(addressId);
return new Result<>(repository.save(address)); return new Result<>(repository.save(address));
} }
@PutMapping(value = "/default/{addressId}")
public Result configDefaultAddress(@PathVariable("addressId") String addressId) {
Optional<TbCfAddress> byId = repository.findById(addressId);
if( byId.isPresent() ){
TbCfAddress address = byId.get();
TbCfUserInfo user = this.user.user();
address.setDefaultFlag(StateConstant.VALID);
repository.save(address);
user.setAddress(address);
userRepository.save(user);
repository.resetToDefault(user.getUserId());
return new Result<>(ResultCodeEnum.SUCCESS.getDesc());
}
return new Result<>().setCode(ResultCodeEnum.ERROR.getCode()).setMessage(ResultCodeEnum.ERROR.getDesc());
}
@GetMapping(value = "/default")
public Result getDefaultAddress() {
TbCfAddress address = user.user().getAddress();
return new Result<>(address, address == null ? ResultCodeEnum.SERVICE_ERROR.getCode() : ResultCodeEnum.SUCCESS.getCode(),"");
}
} }
package com.example.afrishop_v3.controllers; 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.base.StateConstant;
import com.example.afrishop_v3.config.DomainProperties;
import com.example.afrishop_v3.enums.ResultCodeEnum; import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.enums.SexEnum;
import com.example.afrishop_v3.enums.UserTypeEnum;
import com.example.afrishop_v3.models.TbCfCoupon;
import com.example.afrishop_v3.models.TbCfToicoupon;
import com.example.afrishop_v3.models.TbCfUserInfo; import com.example.afrishop_v3.models.TbCfUserInfo;
import com.example.afrishop_v3.payload.request.LoginRequest; import com.example.afrishop_v3.payload.request.LoginRequest;
import com.example.afrishop_v3.payload.response.JwtResponse;
import com.example.afrishop_v3.payload.response.MessageResponse; import com.example.afrishop_v3.payload.response.MessageResponse;
import com.example.afrishop_v3.repository.TbCfCouponRepository;
import com.example.afrishop_v3.repository.TbCfToicouponRepository;
import com.example.afrishop_v3.repository.UserRepository; import com.example.afrishop_v3.repository.UserRepository;
import com.example.afrishop_v3.security.jwt.JwtUtils; import com.example.afrishop_v3.security.jwt.JwtUtils;
import com.example.afrishop_v3.security.services.UserDetailsImpl; import com.example.afrishop_v3.security.services.UserDetailsImpl;
import com.example.afrishop_v3.util.IdUtil; import com.example.afrishop_v3.util.IdUtil;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthException;
import com.google.firebase.auth.FirebaseToken;
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
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.util.Collection; import java.io.IOException;
import java.util.List; import java.io.InputStream;
import java.util.Optional; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@CrossOrigin(origins = "*", maxAge = 3600) @CrossOrigin(origins = "*", maxAge = 3600)
...@@ -32,22 +47,28 @@ public class AuthController { ...@@ -32,22 +47,28 @@ public class AuthController {
private final AuthenticationManager authenticationManager; private final AuthenticationManager authenticationManager;
private final UserRepository userRepository; private final UserRepository userRepository;
private final TbCfCouponRepository couponRepository;
private final TbCfToicouponRepository toicouponRepository;
private final PasswordEncoder encoder; private final PasswordEncoder encoder;
private final DomainProperties domainProperties;
private final JwtUtils jwtUtils; private final JwtUtils jwtUtils;
public AuthController(AuthenticationManager authenticationManager, UserRepository userRepository, PasswordEncoder encoder, JwtUtils jwtUtils) { public AuthController(AuthenticationManager authenticationManager, UserRepository userRepository, TbCfCouponRepository couponRepository, TbCfToicouponRepository toicouponRepository, PasswordEncoder encoder, DomainProperties domainProperties, JwtUtils jwtUtils) {
this.authenticationManager = authenticationManager; this.authenticationManager = authenticationManager;
this.userRepository = userRepository; this.userRepository = userRepository;
this.couponRepository = couponRepository;
this.toicouponRepository = toicouponRepository;
this.encoder = encoder; this.encoder = encoder;
this.domainProperties = domainProperties;
this.jwtUtils = jwtUtils; this.jwtUtils = jwtUtils;
} }
@PostMapping("/signin") @PostMapping("/signin")
public Result authenticateUser(@RequestBody LoginRequest loginRequest) { public Result authenticateUser(@RequestBody LoginRequest loginRequest) {
Optional<TbCfUserInfo> byAccount = userRepository.findByAccount(loginRequest.getAccount()); Optional<TbCfUserInfo> byAccount = userRepository.findByFirebaseUid(loginRequest.getAccount());
if( !byAccount.isPresent() ){ if( !byAccount.isPresent() ){
return new Result<>(ResultCodeEnum.VALIDATE_ERROR,"User not found"); return new Result<>(ResultCodeEnum.VALIDATE_ERROR,"User not found");
} }
...@@ -99,4 +120,130 @@ public class AuthController { ...@@ -99,4 +120,130 @@ public class AuthController {
return ResponseEntity.ok(new Result<>(userInfo,"User createdSuccessfully")); return ResponseEntity.ok(new Result<>(userInfo,"User createdSuccessfully"));
} }
private boolean validateFirebaseToken(String token) {
FirebaseOptions options;
try {
InputStream in = new ClassPathResource("afrishop-6e142-firebase-adminsdk-ypj91-b5e0248586.json").getInputStream();
// InputStream in = ResourceUtils.getURL("src/main/resources/afrishop-6e142-firebase-adminsdk-ypj91-b5e0248586.json").openStream();
options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(in))
.setDatabaseUrl("https://afrishop-6e142.firebaseio.com")
.build();
FirebaseApp firebaseApp;
try {
firebaseApp = FirebaseApp.getInstance("other");
} catch (IllegalStateException e) {
firebaseApp = FirebaseApp.initializeApp(options, "other");
}
FirebaseAuth instance = FirebaseAuth.getInstance(firebaseApp);
System.out.println(firebaseApp.getName());
System.out.println(token);
try {
FirebaseToken firebaseToken = instance.verifyIdToken(token);
// verify token successfully
return true;
} catch (FirebaseAuthException e) {
// verify token error
System.out.println("verify token error");
System.out.println(e.getMessage());
}
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
@PostMapping(value = "/register/user")
public Result checkFirebase(@RequestBody TbCfUserInfo user) throws ParseException {
//Data to be userInfoVo
// {
// "firebaseUid":"firebaseUid",
// "name":"name",
// "email":"email",
// "phone":"phone",
// "birthDate":"date",
// "token":"token",
// }
// Check if firebase token is valid
boolean isTokenValid = user.getToken() != null && validateFirebaseToken(user.getToken());
// if valid do sign in if firebase Uid exist in database or register as new user
if (isTokenValid) {
//Query to find user from database by firebase uid
Optional<TbCfUserInfo> optional = userRepository.findByFirebaseUid(user.getFirebaseUid());
if ( !optional.isPresent() ) {
String userid = IdUtil.createIdbyUUID();
user.setPassword(encoder.encode(user.getFirebaseUid()));
user.setUserId(userid);
fillUserNecessayInfo(user);
userRepository.save(user);
//赠送用户优惠券
List<TbCfCoupon> couponVailList = couponRepository.findAllByCouponVaild(1);
//获取当前时间的时分秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");//设置日期格式
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, +7);
Date time = c.getTime();
Date startDate = sdf.parse(sdf.format(new Date()));
Date endDate = sdf.parse(sdf.format(time));
for (TbCfCoupon tbCfCoupon : couponVailList) {
TbCfToicoupon toi = new TbCfToicoupon();
//把上面获取到的值,赋值到实体类中
toi.setToitableId(IdUtil.createIdbyUUID());
toi.setCoupon(tbCfCoupon);
toi.setUserId(userid);
toi.setStartTime(startDate);
toi.setIdentification(3);
toi.setEnableFlag(1);
toi.setEndTime(endDate);
toicouponRepository.save(toi);
}
} else {
user = optional.get();
if( user.getPassword() == null ){
user.setPassword(encoder.encode(user.getFirebaseUid()));// Assign user from database to the user we have to return back to request
userRepository.save(user);
}
}
// generate token codes has been moved downwards from if condition of checking if user doesn't exist in database, because even if
// user exist we have to generate token also
//注册成功 创建token
return authenticateUser(new LoginRequest(user.getFirebaseUid(),user.getFirebaseUid()));
} else {
return new Result<>(ResultCodeEnum.ILLEGAL_ARGUMENT.getCode(),ResultCodeEnum.ILLEGAL_ARGUMENT.getDesc());
}
}
private void fillUserNecessayInfo(TbCfUserInfo tbCfUserInfoVo) {
if( tbCfUserInfoVo.getAvatar() == null) tbCfUserInfoVo.setAvatar(domainProperties.getProperty("user.avatar"));
tbCfUserInfoVo.setUserNo(IdUtil.createIdByDate());
tbCfUserInfoVo.setPhoneFlag(StateConstant.INVALID);
tbCfUserInfoVo.setLoginCount(0);
tbCfUserInfoVo.setCreateTime(new Date());
tbCfUserInfoVo.setSex(SexEnum.UNKNOW.getCode());
tbCfUserInfoVo.setInvitedCount(0);
tbCfUserInfoVo.setEnableFlag(StateConstant.VALID);
//目前有验证码的都是邮箱类型
tbCfUserInfoVo.setUserType(UserTypeEnum.FACEBOOK.getCode());
tbCfUserInfoVo.setEmailFlag(StateConstant.INVALID);
}
} }
package com.example.afrishop_v3.controllers;
import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.models.TbCfToicoupon;
import com.example.afrishop_v3.repository.TbCfCouponRepository;
import com.example.afrishop_v3.repository.TbCfToicouponRepository;
import com.example.afrishop_v3.security.services.AuthenticationUser;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.LinkedHashMap;
import java.util.List;
@RestController
@RequestMapping("/coupon")
public class CouponController {
private final TbCfToicouponRepository repository;
private final AuthenticationUser user;
public CouponController(TbCfToicouponRepository repository, AuthenticationUser user) {
this.repository = repository;
this.user = user;
}
@GetMapping
public Result getUserCoupons(){
String userId = user.userId();
List<TbCfToicoupon> availableCoupons = repository.queryUserAvailableCoupon(userId);
List<TbCfToicoupon> expiredCoupons = repository.queryUserExpiredCoupon(userId);
List<TbCfToicoupon> usedCoupons = repository.queryUserUsedCoupon(userId);
LinkedHashMap<String, Object> hashMap = new LinkedHashMap<>();
hashMap.put("validCouponList",availableCoupons);
hashMap.put("usedCouponList",usedCoupons);
hashMap.put("expiredCouponList",expiredCoupons);
return new Result<>(hashMap);
}
}
package com.example.afrishop_v3.controllers;
import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.base.StateConstant;
import com.example.afrishop_v3.enums.OrderStatusEnum;
import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.models.OrderRequest;
import com.example.afrishop_v3.models.TbCfCartRecordR;
import com.example.afrishop_v3.models.TbCfCoupon;
import com.example.afrishop_v3.models.TbCfOrder;
import com.example.afrishop_v3.repository.TbCfCartRecordRRepository;
import com.example.afrishop_v3.repository.TbCfCouponRepository;
import com.example.afrishop_v3.repository.TbCfItemOrderRepository;
import com.example.afrishop_v3.repository.TbCfOrderRepository;
import com.example.afrishop_v3.security.services.AuthenticationUser;
import com.example.afrishop_v3.util.IdUtil;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
import static org.springframework.data.domain.Sort.Order.asc;
import static org.springframework.data.domain.Sort.Order.desc;
@RestController
@RequestMapping("/order")
public class OrderController {
private final TbCfOrderRepository repository;
private final TbCfCartRecordRRepository cartRepository;
private final TbCfCouponRepository couponRepository;
private final TbCfItemOrderRepository itemOrderRepository;
private final AuthenticationUser user;
public OrderController(TbCfOrderRepository repository, TbCfCartRecordRRepository cartRepository, TbCfCouponRepository couponRepository, TbCfItemOrderRepository itemOrderRepository, AuthenticationUser user) {
this.repository = repository;
this.cartRepository = cartRepository;
this.couponRepository = couponRepository;
this.itemOrderRepository = itemOrderRepository;
this.user = user;
}
@PostMapping("/settle")
public Result<TbCfOrder> settleAccount(@RequestBody String[] ids,@RequestParam(value = "toitableId", required = false) String toitableId) {
//String userId = user.userId();
List<TbCfCartRecordR> allByUserId = cartRepository.findAllByCartRecordIdIn(ids);
if( allByUserId.isEmpty() ){
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(),"There are no items in the shopping cart");
}
TbCfOrder order = new TbCfOrder();
order.setCouponId(toitableId);
if( toitableId != null && !toitableId.isEmpty()){
Optional<TbCfCoupon> byId = couponRepository.findById(toitableId);
byId.ifPresent(order::setCoupon);
}
order.getItemOrderListFromCartList(allByUserId);
return new Result<>(order);
}
@PostMapping("/place")
public Result<TbCfOrder> placeOrder(@RequestBody OrderRequest tbCfOrder,
@RequestParam(value = "toitableId", required = false) String toitableId,
@RequestParam(value = "itemId", required = false) String itemId,
@RequestParam(value = "web", required = false) String web) throws IOException, URISyntaxException, ExecutionException, InterruptedException, TimeoutException {
String userId = user.userId();
int v_code = ResultCodeEnum.VALIDATE_ERROR.getCode();
if( tbCfOrder == null)
return new Result<>(v_code,"Empty body");
if( tbCfOrder.getIds() == null || tbCfOrder.getIds().length <= 0)
return new Result<>(v_code,"Empty body");
String addressId = tbCfOrder.getDeliveryAddressId();
if( addressId == null || addressId.isEmpty() ) return new Result<>(v_code,"Address id is required");
List<TbCfCartRecordR> allByUserId = cartRepository.findAllByCartRecordIdIn(tbCfOrder.getIds());
if( allByUserId.isEmpty() ){
return new Result<>(v_code,"There are no items in the shopping cart");
}
TbCfOrder order = new TbCfOrder();
order.setOrderId(IdUtil.createIdbyUUID());
order.setCouponId(toitableId);
if( toitableId != null && !toitableId.isEmpty()){
Optional<TbCfCoupon> byId = couponRepository.findById(toitableId);
byId.ifPresent(order::setCoupon);
}
order.setUserId(userId);
if ("web".equals(web)) {
order.setOrderSource(3);
} else {
order.setOrderSource(1);
}
order.getItemOrderListFromCartList(allByUserId);
TbCfOrder save = repository.save(order);
//order.getItemOrderList().forEach(itemOrderRepository::save);
List<String> collect = allByUserId.stream().map(TbCfCartRecordR::getCartRecordId).collect(Collectors.toList());
String[] strings = collect.toArray(new String[]{});
cartRepository.deleteAllByCartRecordIdIn(strings);
// implementation of coupon use
return new Result<>(save);
}
@GetMapping
public Result getUserOrderList(@RequestParam(value = "num", defaultValue = "0") Integer pageNum,
@RequestParam(value = "size", defaultValue = "20") Integer pageSize,
@RequestParam(value = "orderStatus", required = false) Integer orderStatus,
@RequestParam(value = "sort", defaultValue = "desc") String sort,
@RequestParam(value = "name", required = false) String name
) {
Page<TbCfOrder> list = repository.findAllByUserId(user.userId(), PageRequest.of(pageNum, pageSize, sort(sort)));
return new Result<>(list);
}
@GetMapping("/cancelOrder")
public Result cancelOrder(@RequestParam("orderId") String orderId,
@RequestParam("reason") String reason) {
Optional<TbCfOrder> byId = repository.findById(orderId);
if( byId.isPresent() ){
TbCfOrder order = byId.get();
order.setOrderStatus(OrderStatusEnum.CLOSE.getValue());
order.setRemarkInfo(reason);
repository.save(order);
return new Result();
}
return new Result<>(ResultCodeEnum.SERVICE_ERROR.getCode(),"Order not found!");
}
@DeleteMapping("/{orderId}")
public Result deleteOrder(@PathVariable("orderId") String orderId){
Optional<TbCfOrder> byId = repository.findById(orderId);
if( byId.isPresent() ){
TbCfOrder order = byId.get();
order.setEnableFlag(StateConstant.INVALID);
System.out.println(orderId);
repository.save(order);
}
return new Result(ResultCodeEnum.ILLEGAL_ARGUMENT.getCode(),"");
}
private Sort sort(String order){
String col = "orderTime";
return Sort.by( "desc".equals(order) ? desc(col) : asc(col));
}
}
package com.example.afrishop_v3.controllers; 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.models.TbCfHomePage; import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.repository.TbCfHomePageRepository; import com.example.afrishop_v3.models.*;
import com.example.afrishop_v3.repository.*;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.GetMapping; 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.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.*;
@RestController @RestController
@RequestMapping("/startPage")
public class TbCfHomePageEntityController { public class TbCfHomePageEntityController {
private final TbCfHomePageRepository repository; private final TbCfHomePageRepository repository;
private final TbCfSortRepository sortRepository;
private final TbCfClassificationRepository classificationRepository;
private final TbCfStoreRepository storeRepository;
private final TbCfPosterRepository posterRepository;
private final TbCfColumnRepository columnRepository;
public TbCfHomePageEntityController(TbCfHomePageRepository repository) { public TbCfHomePageEntityController(TbCfHomePageRepository repository, TbCfSortRepository sortRepository, TbCfClassificationRepository classificationRepository, TbCfStoreRepository storeRepository, TbCfPosterRepository posterRepository, TbCfColumnRepository columnRepository) {
this.repository = repository; this.repository = repository;
this.sortRepository = sortRepository;
this.classificationRepository = classificationRepository;
this.storeRepository = storeRepository;
this.posterRepository = posterRepository;
this.columnRepository = columnRepository;
} }
@GetMapping("/img") @GetMapping("/startPage/img")
public Result<List<TbCfHomePage>> getStartPageImage(@RequestParam(value = "version", defaultValue = "0") Integer version) { public Result<List<TbCfHomePage>> getStartPageImage(@RequestParam(value = "version", defaultValue = "0") Integer version) {
List<TbCfHomePage> all = repository.getAllByImgVersionAndEnableFlag(version, 1); List<TbCfHomePage> all = repository.getAllByImgVersionAndEnableFlag(version, 1);
return new Result<>(all); return new Result<>(all);
} }
@GetMapping("/home/middleColumn")
public Result getMiddleColumn( @RequestParam(value = "limit", defaultValue = "4") Integer limit){
Result result = new Result<>();
try {
List<TbCfSort> moduleList = sortRepository.findAll(Sort.by(Sort.Order.asc("sort")));
List<Map<String, Object>> list = new ArrayList<>();
if (moduleList != null && moduleList.size() > 0) {
for (TbCfSort module : moduleList) {
Map<String, Object> moduleMap = new LinkedHashMap<>();
String type = String.valueOf(module.getType());
//分类导航栏
if ("1".equals(type)) {
/*moduleMap.put("class_title", getTitleImage(1));*/
List<TbCfClassification> classificationList = classificationRepository.findAll();
moduleMap.put("classificationList", classificationList);
}
//爬虫品牌
if ("2".equals(type)) {
moduleMap.put("store_title", getTitleImage(2));
List<TbCfStore> storeStationList = storeRepository.findAll(PageRequest.of(0,limit)).toList();
moduleMap.put("storeStationList", storeStationList);
}
//海报图
if ("3".equals(type)) {
moduleMap.put("poster_title", getTitleImage(3));
List<TbCfPosters> postersList = posterRepository.findAll();
moduleMap.put("postersList", postersList);
}
list.add(moduleMap);
}
Map map = new HashMap();
List<TbCfColumn> hotColumnList = columnRepository.findAllByColumnType(4);
map.put("hot_title", hotColumnList);
list.add(map);
return new Result<>(list);
}
} catch (Exception e) {
result.setCode(ResultCodeEnum.SERVICE_ERROR.getCode());
result.setMessage(e.toString());
}
return result;
}
private List<TbCfColumn> getTitleImage(Integer type) {
return columnRepository.findAllByColumnType(type);
}
} }
package com.example.afrishop_v3.enums;
/**
* 发货状态
*
* @author G
*/
public enum DeliveryStatusEnum implements EnumItemable<DeliveryStatusEnum> {
/**
* 代购及物流状态
*/
PROCESSING("等待处理", 0),
PURCHASE("已采购并发货", 10),
ON_LOAD("已到达中国仓", 20),
ON_AFRICA("已到达非洲仓", 40),
ARRIVALS("买家已签收", 50);
private String label;
private Integer value;
DeliveryStatusEnum(String label, Integer value) {
this.label = label;
this.value = value;
}
@Override
public String getLabel() {
return this.label;
}
@Override
public Integer getValue() {
return this.value;
}
}
package com.example.afrishop_v3.enums;
/**
* 订单状态
*
* @author G
*/
public enum OrderStatusEnum implements EnumItemable<OrderStatusEnum> {
/**
* 订单状态枚举
*/
CANCEL("取消", 0),
PENDING_PAY("等待付款", 10),
PAID("已付款", 20),
SHIPPED("已发货", 40),
SUCCESS("交易成功", 50),
CLOSE("交易关闭", 60);
private String label;
private Integer value;
OrderStatusEnum(String label, Integer value) {
this.label = label;
this.value = value;
}
@Override
public String getLabel() {
return this.label;
}
@Override
public Integer getValue() {
return this.value;
}
}
package com.example.afrishop_v3.models;
import java.util.List;
/**
* @Auther: wudepeng
* @Date: 2019/11/28
* @Description:前端所需的支付数据
*/
public class FlutterKey {
private String public_key;
private List<TbCfUserInfo> userInfo;
public String getPublic_key() {
return public_key;
}
public void setPublic_key(String public_key) {
this.public_key = public_key;
}
public List<TbCfUserInfo> getUserInfo() {
return userInfo;
}
public void setUserInfo(List<TbCfUserInfo> userInfo) {
this.userInfo = userInfo;
}
}
package com.example.afrishop_v3.models;
/**
* @Auther: wudepeng
* @Date: 2019/11/11
* @Description: 持卡人信息
*/
public class FlutterWaveCard {
//卡号
private String card;
//银行卡背后3位数
private String cvv;
//到期月
private String month;
//到期年
private String year;
//email
private String email;
//手机号
private String phone;
//名字
private String firstname;
//姓氏
private String lastname;
//国家
private String country;
//支付的唯一参考
private String ref;
//退款金额
private String amount;
public String getCard() {
return card;
}
public void setCard(String card) {
this.card = card;
}
public String getCvv() {
return cvv;
}
public void setCvv(String cvv) {
this.cvv = cvv;
}
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getRef() {
return ref;
}
public void setRef(String ref) {
this.ref = ref;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
}
package com.example.afrishop_v3.models;
public class OrderRequest {
private String[] ids;
private String deliveryAddressId;
public String getDeliveryAddressId() {
return deliveryAddressId;
}
public String[] getIds() {
return ids;
}
}
...@@ -26,18 +26,21 @@ public class TbCfCartRecordR { ...@@ -26,18 +26,21 @@ public class TbCfCartRecordR {
*/ */
@Id @Id
private String cartRecordId; private String cartRecordId;
/**
* 商品id
*/
@ManyToOne
@JoinColumn(name = "item_id",columnDefinition = "item_id")
private TbCfItemDetail itemDetail;
/** /**
* 用户id * 用户id
*/ */
private String userId; private String userId;
private String itemId;
private String itemImg;
private String itemTitle;
private String itemCategory;
/** /**
* 是否已经被勾选,0未勾选,1勾选 * 是否已经被勾选,0未勾选,1勾选
*/ */
...@@ -58,11 +61,25 @@ public class TbCfCartRecordR { ...@@ -58,11 +61,25 @@ public class TbCfCartRecordR {
* 商品SKU * 商品SKU
*/ */
private String itemSku; private String itemSku;
private String shopName;
private String shopUrl;
private String shopId;
/** /**
* 商品SKU * 商品SKU
*/ */
private Integer itemNum; private Integer itemNum;
@ManyToOne
private TbCfExpressTemplate template;
/**
* 状态 0:已删除 1:加入购物车 2:直接支付(预留)
*/
private Integer status;
/** /**
* 商品价格 * 商品价格
*/ */
...@@ -72,6 +89,10 @@ public class TbCfCartRecordR { ...@@ -72,6 +89,10 @@ public class TbCfCartRecordR {
return itemPrice; return itemPrice;
} }
public BigDecimal getItemPriceTotal() {
return itemPrice.multiply(BigDecimal.valueOf(itemNum));
}
public void setItemPrice(BigDecimal itemPrice) { public void setItemPrice(BigDecimal itemPrice) {
this.itemPrice = itemPrice; this.itemPrice = itemPrice;
} }
...@@ -90,16 +111,36 @@ public class TbCfCartRecordR { ...@@ -90,16 +111,36 @@ public class TbCfCartRecordR {
return cartRecordId; return cartRecordId;
} }
public String getItemImg() {
return itemImg;
}
/** /**
* 设置:商品id * 设置:商品分类
*/ */
public void setItemCategory(String itemCategory) {
public TbCfItemDetail getItemDetail() { this.itemCategory = itemCategory;
return itemDetail; }
/**
* 获取:商品分类
*/
public String getItemCategory() {
return itemCategory;
}
/**
* 设置:状态 0:已删除 1:加入购物车 2:直接支付(预留)
*/
public void setStatus(Integer status) {
this.status = status;
} }
public void setItemDetail(TbCfItemDetail itemDetail) {
this.itemDetail = itemDetail;
/**
* 获取:状态 0:已删除 1:加入购物车 2:直接支付(预留)
*/
public Integer getStatus() {
return status;
} }
/** /**
...@@ -130,6 +171,7 @@ public class TbCfCartRecordR { ...@@ -130,6 +171,7 @@ public class TbCfCartRecordR {
return checkFlag; return checkFlag;
} }
/** /**
* 设置:是否有效 * 设置:是否有效
*/ */
...@@ -137,6 +179,36 @@ public class TbCfCartRecordR { ...@@ -137,6 +179,36 @@ public class TbCfCartRecordR {
this.enableFlag = enableFlag; this.enableFlag = enableFlag;
} }
public void setItemId(String itemId) {
this.itemId = itemId;
}
public String getItemId() {
return itemId;
}
TbCfItemOrderR getOrderItem(String orderId){
return new TbCfItemOrderR(cartRecordId,orderId,itemId,itemNum,itemPrice,template,itemImg,itemSku,itemTitle,shopId,shopName,shopUrl);
}
public void setTemplate(TbCfExpressTemplate template) {
this.template = template;
}
public void setItemTitle(String itemTitle) {
this.itemTitle = itemTitle;
}
public String getItemTitle() {
return itemTitle;
}
public TbCfExpressTemplate getTemplate() {
return template;
}
/** /**
* 获取:是否有效 * 获取:是否有效
*/ */
...@@ -172,8 +244,8 @@ public class TbCfCartRecordR { ...@@ -172,8 +244,8 @@ public class TbCfCartRecordR {
return itemNum; return itemNum;
} }
public void increaseNum(Integer itemNum){ public void increaseNum(Integer itemNum) {
setItemNum(this.itemNum+itemNum); setItemNum(this.itemNum + itemNum);
} }
public void setItemNum(Integer itemNum) { public void setItemNum(Integer itemNum) {
......
package com.example.afrishop_v3.models;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
/**
* 首页分类导航实体
* 表名 tb_cf_classification
*
* @author lipengjun
* @date 2020-03-01 14:05:19
*/
@Entity
@Data
public class TbCfClassification{
/**
* 首页分类导航ID
*/
@Id
private String id;
/**
* 一级分类ID
*/
private String goodtypeId;
/**
* 标题
*/
private String classTitle;
/**
* 图片
*/
private String picture;
/**
* 排序
*/
private Integer sort;
/**
* 是否展示
*/
private String isShow;
/**
* 设置:首页分类导航ID
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取:首页分类导航ID
*/
public String getId() {
return id;
}
/**
* 设置:一级分类ID
*/
public void setGoodtypeId(String goodtypeId) {
this.goodtypeId = goodtypeId;
}
/**
* 获取:一级分类ID
*/
public String getGoodtypeId() {
return goodtypeId;
}
/**
* 设置:标题
*/
public void setClassTitle(String classTitle) {
this.classTitle = classTitle;
}
/**
* 获取:标题
*/
public String getClassTitle() {
return classTitle;
}
/**
* 设置:图片
*/
public void setPicture(String picture) {
this.picture = picture;
}
/**
* 获取:图片
*/
public String getPicture() {
return picture;
}
/**
* 设置:排序
*/
public void setSort(Integer sort) {
this.sort = sort;
}
/**
* 获取:排序
*/
public Integer getSort() {
return sort;
}
/**
* 设置:是否展示
*/
public void setIsShow(String isShow) {
this.isShow = isShow;
}
/**
* 获取:是否展示
*/
public String getIsShow() {
return isShow;
}
}
package com.example.afrishop_v3.models;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
/**
* 标题栏实体
* 表名 tb_cf_column
*
* @author lipengjun
* @date 2020-03-09 15:53:24
*/
@Entity
@Data
public class TbCfColumn{
/**
* 标题栏ID
*/
@Id
private String id;
/**
* 标题栏
*/
private String columnName;
/**
* 类型 1:爬虫 2:其他
*/
private Integer columnType;
/**
* 栏目图片
*/
private String columuPicture;
/**
* 排序
*/
private Integer sort;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updaeTime;
/**
* 设置:标题栏ID
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取:标题栏ID
*/
public String getId() {
return id;
}
/**
* 设置:标题栏
*/
public void setColumnName(String columnName) {
this.columnName = columnName;
}
/**
* 获取:标题栏
*/
public String getColumnName() {
return columnName;
}
/**
* 设置:类型 1:爬虫 2:其他
*/
public void setColumnType(Integer columnType) {
this.columnType = columnType;
}
/**
* 获取:类型 1:爬虫 2:其他
*/
public Integer getColumnType() {
return columnType;
}
/**
* 设置:栏目图片
*/
public void setColumuPicture(String columuPicture) {
this.columuPicture = columuPicture;
}
/**
* 获取:栏目图片
*/
public String getColumuPicture() {
return columuPicture;
}
/**
* 设置:排序
*/
public void setSort(Integer sort) {
this.sort = sort;
}
/**
* 获取:排序
*/
public Integer getSort() {
return sort;
}
/**
* 设置:创建时间
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
/**
* 获取:创建时间
*/
public Date getCreateTime() {
return createTime;
}
/**
* 设置:更新时间
*/
public void setUpdaeTime(Date updaeTime) {
this.updaeTime = updaeTime;
}
/**
* 获取:更新时间
*/
public Date getUpdaeTime() {
return updaeTime;
}
}
package com.example.afrishop_v3.models;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 优惠券表实体
* 表名 tb_cf_coupon
*
* @author G
* @date 2019-08-14 09:11:48
*/
@Entity
@Data
public class TbCfCoupon {
@Id
private String toitableId;
private String couponId;
private String couponCategoryId;
private String couponCategoryName;
private Integer couponUse;
private String couponTitle;
private String couponIcon;
private String withStationId;
private BigDecimal withAmount;
private BigDecimal deductAmount;
/**
* 发券数量
*/
private Integer quato;
/**
* 已领取数量 不更改,因为会被覆盖,改为查询统计来获取已经领取的优惠券数量
*/
private Integer takeCount;
/**
* 已使用数量 不更改,因为会被覆盖,改为查询统计来获取已经使用的优惠券数量
*/
private Integer usedCount;
/**
* 发放开始时间
*/
private Date startTime;
/**
* 发放结束时间
*/
private Date endTime;
/**
* 有效开始时间
*/
private Date validStartTime;
/**
* 有效结束时间
*/
private Date validEndTime;
/**
* 有效标志,0无效,1生效,2过期
*/
private Integer status;
/**
* 创建人
*/
private String createUserId;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改人
*/
private String updateUserId;
/**
* 修改时间
*/
private Date updateTime;
/**
* 设置是否是注册就是的优惠券,(0)默认状态,(1)是用户注册就送这张优惠券
*/
private Integer couponVaild;
/**
* 设置:设置是否是注册就是的优惠券,(0)默认状态,(1)是用户注册就送这张优惠券
*/
public String getToitableId() {
return toitableId;
}
public void setToitableId(String toitableId) {
this.toitableId = toitableId;
}
public String getCouponId() {
return couponId;
}
public void setCouponId(String couponId) {
this.couponId = couponId;
}
public String getCouponCategoryId() {
return couponCategoryId;
}
public void setCouponCategoryId(String couponCategoryId) {
this.couponCategoryId = couponCategoryId;
}
public String getCouponCategoryName() {
return couponCategoryName;
}
public void setCouponCategoryName(String couponCategoryName) {
this.couponCategoryName = couponCategoryName;
}
public Integer getCouponUse() {
return couponUse;
}
public void setCouponUse(Integer couponUse) {
this.couponUse = couponUse;
}
public String getCouponTitle() {
return couponTitle;
}
public void setCouponTitle(String couponTitle) {
this.couponTitle = couponTitle;
}
public String getCouponIcon() {
return couponIcon;
}
public void setCouponIcon(String couponIcon) {
this.couponIcon = couponIcon;
}
public String getWithStationId() {
return withStationId;
}
public void setWithStationId(String withStationId) {
this.withStationId = withStationId;
}
public BigDecimal getWithAmount() {
return withAmount;
}
public void setWithAmount(BigDecimal withAmount) {
this.withAmount = withAmount;
}
public BigDecimal getDeductAmount() {
return deductAmount;
}
public void setDeductAmount(BigDecimal deductAmount) {
this.deductAmount = deductAmount;
}
public Integer getQuato() {
return quato;
}
public void setQuato(Integer quato) {
this.quato = quato;
}
public Integer getTakeCount() {
return takeCount;
}
public void setTakeCount(Integer takeCount) {
this.takeCount = takeCount;
}
public Integer getUsedCount() {
return usedCount;
}
public void setUsedCount(Integer usedCount) {
this.usedCount = usedCount;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public Date getValidStartTime() {
return validStartTime;
}
public void setValidStartTime(Date validStartTime) {
this.validStartTime = validStartTime;
}
public Date getValidEndTime() {
return validEndTime;
}
public void setValidEndTime(Date validEndTime) {
this.validEndTime = validEndTime;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getCreateUserId() {
return createUserId;
}
public void setCreateUserId(String createUserId) {
this.createUserId = createUserId;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getUpdateUserId() {
return updateUserId;
}
public void setUpdateUserId(String updateUserId) {
this.updateUserId = updateUserId;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Integer getCouponVaild() {
return couponVaild;
}
public void setCouponVaild(Integer couponVaild) {
this.couponVaild = couponVaild;
}
}
package com.example.afrishop_v3.models;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 财务明细实体
* 表名 tb_cf_finance
*
* @author G
* @date 2019-08-14 09:11:48
*/
@Entity
@Data
public class TbCfFinance{
/**
* 财务报表id
*/
@Id
private String finaceId;
/**
* 订单id
*/
private String orderId;
/**
* 用户id
*/
private String userId;
/**
* 支付款项
*/
private BigDecimal payAccount;
/**
* 支付流水号
*/
private String payId;
/**
* 支付方式
*/
private String payWayCode;
/**
* 支付时间
*/
private Date payTime;
/**
* 支付结果页面
*/
private String receiptUrl;
/**
* 设置:财务报表id
*/
public void setFinaceId(String finaceId) {
this.finaceId = finaceId;
}
/**
* 获取:财务报表id
*/
public String getFinaceId() {
return finaceId;
}
/**
* 设置:订单id
*/
public void setOrderId(String orderId) {
this.orderId = orderId;
}
/**
* 获取:订单id
*/
public String getOrderId() {
return orderId;
}
/**
* 设置:用户id
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
* 获取:用户id
*/
public String getUserId() {
return userId;
}
/**
* 设置:支付款项
*/
public void setPayAccount(BigDecimal payAccount) {
this.payAccount = payAccount;
}
/**
* 获取:支付款项
*/
public BigDecimal getPayAccount() {
return payAccount;
}
/**
* 设置:支付流水号
*/
public void setPayId(String payId) {
this.payId = payId;
}
/**
* 获取:支付流水号
*/
public String getPayId() {
return payId;
}
/**
* 设置:支付方式
*/
public void setPayWayCode(String payWayCode) {
this.payWayCode = payWayCode;
}
/**
* 获取:支付方式
*/
public String getPayWayCode() {
return payWayCode;
}
/**
* 设置:支付时间
*/
public void setPayTime(Date payTime) {
this.payTime = payTime;
}
/**
* 获取:支付时间
*/
public Date getPayTime() {
return payTime;
}
public String getReceiptUrl() {
return receiptUrl;
}
public void setReceiptUrl(String receiptUrl) {
this.receiptUrl = receiptUrl;
}
}
package com.example.afrishop_v3.models;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 商品详情实体
* 表名 tb_cf_item_detail
*
* @author lipengjun
* @date 2020-04-04 15:07:45
*/
@Entity
@Data
public class TbCfItemDetail{
/**
* 商品表记录id
*/
@Id
private String itemId;
/**
* 商品独立站ID
*/
private String goodsId;
/**
* 商品url
*/
@JsonIgnore
private String sourceItemId;
/**
* 来源站点id
*/
private String stationId;
/**
* 站点类型 1:自营商品 2:其他
*/
private Integer stationType;
/**
* 商品名称
*/
private String itemTitle;
/**
* 商品数量
*/
@JsonIgnore
private Integer itemNum;
/**
* 商品主图
*/
private String itemImg;
/**
* 商品单价
*/
private BigDecimal itemPrice;
/**
* 商品分类
*/
private String itemCategory;
/**
* 商品skus
*/
@JsonIgnore
private String itemSku;
/**
* 所属店铺id
*/
private String shopId;
/**
* 所属商铺名
*/
private String shopName;
/**
* 所属商铺链接
*/
private String shopUrl;
/**
* 状态 0:已删除 1:加入购物车 2:直接支付(预留)
*/
private Integer status;
/**
* 用户ID(预留)
*/
private String userId;
/**
* 加入时间
*/
private Date createTime;
private String descripitionName;
public String getDescripitionName() {
return descripitionName;
}
public void setDescripitionName(String descripitionName) {
this.descripitionName = descripitionName;
}
/**
* 设置:商品表记录id
*/
public void setItemId(String itemId) {
this.itemId = itemId;
}
/**
* 获取:商品表记录id
*/
public String getItemId() {
return itemId;
}
/**
* 设置:商品独立站ID
*/
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
/**
* 获取:商品独立站ID
*/
public String getGoodsId() {
return goodsId;
}
/**
* 设置:商品url
*/
public void setSourceItemId(String sourceItemId) {
this.sourceItemId = sourceItemId;
}
/**
* 获取:商品url
*/
public String getSourceItemId() {
return sourceItemId;
}
/**
* 设置:来源站点id
*/
public void setStationId(String stationId) {
this.stationId = stationId;
}
/**
* 获取:来源站点id
*/
public String getStationId() {
return stationId;
}
/**
* 设置:站点类型 1:自营商品 2:其他
*/
public void setStationType(Integer stationType) {
this.stationType = stationType;
}
/**
* 获取:站点类型 1:自营商品 2:其他
*/
public Integer getStationType() {
return stationType;
}
/**
* 设置:商品名称
*/
public void setItemTitle(String itemTitle) {
this.itemTitle = itemTitle;
}
/**
* 获取:商品名称
*/
public String getItemTitle() {
return itemTitle;
}
/**
* 设置:商品数量
*/
public void setItemNum(Integer itemNum) {
this.itemNum = itemNum;
}
/**
* 获取:商品数量
*/
public Integer getItemNum() {
return itemNum;
}
/**
* 设置:商品主图
*/
public void setItemImg(String itemImg) {
this.itemImg = itemImg;
}
/**
* 获取:商品主图
*/
public String getItemImg() {
return itemImg;
}
/**
* 设置:商品单价
*/
public void setItemPrice(BigDecimal itemPrice) {
this.itemPrice = itemPrice;
}
/**
* 获取:商品单价
*/
public BigDecimal getItemPrice() {
return itemPrice;
}
/**
* 设置:商品分类
*/
public void setItemCategory(String itemCategory) {
this.itemCategory = itemCategory;
}
/**
* 获取:商品分类
*/
public String getItemCategory() {
return itemCategory;
}
/**
* 设置:商品skus
*/
public void setItemSku(String itemSku) {
this.itemSku = itemSku;
}
/**
* 获取:商品skus
*/
public String getItemSku() {
return itemSku;
}
/**
* 设置:所属店铺id
*/
public void setShopId(String shopId) {
this.shopId = shopId;
}
/**
* 获取:所属店铺id
*/
public String getShopId() {
return shopId;
}
/**
* 设置:所属商铺名
*/
public void setShopName(String shopName) {
this.shopName = shopName;
}
/**
* 获取:所属商铺名
*/
public String getShopName() {
return shopName;
}
/**
* 设置:所属商铺链接
*/
public void setShopUrl(String shopUrl) {
this.shopUrl = shopUrl;
}
/**
* 获取:所属商铺链接
*/
public String getShopUrl() {
return shopUrl;
}
/**
* 设置:状态 0:已删除 1:加入购物车 2:直接支付(预留)
*/
public void setStatus(Integer status) {
this.status = status;
}
/**
* 获取:状态 0:已删除 1:加入购物车 2:直接支付(预留)
*/
public Integer getStatus() {
return status;
}
/**
* 设置:用户ID(预留)
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
* 获取:用户ID(预留)
*/
public String getUserId() {
return userId;
}
/**
* 设置:加入时间
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
/**
* 获取:加入时间
*/
public Date getCreateTime() {
return createTime;
}
}
package com.example.afrishop_v3.models;
import com.example.afrishop_v3.base.StateConstant;
import com.example.afrishop_v3.enums.OrderStatusEnum;
import com.example.afrishop_v3.util.IdUtil;
import lombok.Data;
import org.hibernate.annotations.Where;
import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 订单商品对应表实体
* 表名 tb_cf_item_order_r
*
* @author G
* @date 2019-08-14 09:11:48
*/
@Entity
@Data
@Table(name = "tb_cf_item_order_r")
@Where(clause = "enable_flag = 1")
public class TbCfItemOrderR {
/**
* 记录表
*/
@Id
private String orderItemId;
/**
* 商品id
*/
private String itemId;
/**
* 订单id
*/
private String orderId;
/**
* 是否有效
*/
private Integer enableFlag;
private Integer orderStatus;
private Integer deliveryFlag;
/**
* 是否已发送短信
*/
private Integer isSend;
private Date deliveryTime;
private Date closeTime;
private Date updateTime;
private Integer itemNum;
private String itemImg;
private String itemTitle;
private String itemSku;
private String shopName;
private String shopUrl;
private String shopId;
@ManyToOne
private TbCfOrder order;
@ManyToOne
private TbCfExpressTemplate template;
@Transient
private String cartRecordId;
TbCfItemOrderR(String id,String orderId,String itemId,Integer itemNum,BigDecimal itemPrice,TbCfExpressTemplate template,String itemImg,String itemSku,String itemTitle,String shopId,String shopName,String shopUrl){
this.itemNum = itemNum;
this.cartRecordId = id;
this.orderId = orderId;
this.orderItemId = IdUtil.createIdbyUUID();
this.itemPrice = itemPrice;
this.template = template;
this.itemId = itemId;
this.itemImg = itemImg;
this.itemSku = itemSku;
this.itemTitle = itemTitle;
this.enableFlag = StateConstant.VALID;
this.orderStatus = OrderStatusEnum.PENDING_PAY.getValue();
this.shopId = shopId;
this.shopName = shopName;
this.shopUrl = shopUrl;
}
TbCfItemOrderR(){
}
/**
* 商品价格
*/
private BigDecimal itemPrice;
public Integer getItemNum() {
return itemNum;
}
public void setItemNum(Integer itemNum) {
this.itemNum = itemNum;
}
public TbCfExpressTemplate getTemplate() {
return template;
}
/**
* 设置:记录表
*/
public void setOrderItemId(String orderItemId) {
this.orderItemId = orderItemId;
}
public BigDecimal getItemPriceTotal() {
return itemPrice.multiply(BigDecimal.valueOf(itemNum));
}
/**
* 获取:记录表
*/
public String getOrderItemId() {
return orderItemId;
}
/**
* 设置:商品id
*/
public void setItemId(String itemId) {
this.itemId = itemId;
}
/**
* 获取:商品id
*/
public String getItemId() {
return itemId;
}
/**
* 设置:订单id
*/
public void setOrderId(String orderId) {
this.orderId = orderId;
}
/**
* 获取:订单id
*/
public String getOrderId() {
return orderId;
}
/**
* 设置:是否有效
*/
public void setEnableFlag(Integer enableFlag) {
this.enableFlag = enableFlag;
}
/**
* 获取:是否有效
*/
public Integer getEnableFlag() {
return enableFlag;
}
public Integer getOrderStatus() {
return orderStatus;
}
public void setOrderStatus(Integer orderStatus) {
this.orderStatus = orderStatus;
}
public Integer getDeliveryFlag() {
return deliveryFlag;
}
public void setDeliveryFlag(Integer deliveryFlag) {
this.deliveryFlag = deliveryFlag;
}
public Date getDeliveryTime() {
return deliveryTime;
}
public void setDeliveryTime(Date deliveryTime) {
this.deliveryTime = deliveryTime;
}
public Date getCloseTime() {
return closeTime;
}
public void setCloseTime(Date closeTime) {
this.closeTime = closeTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Integer getIsSend() {
return isSend;
}
public void setIsSend(Integer isSend) {
this.isSend = isSend;
}
}
package com.example.afrishop_v3.models;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
/**
* 首页海报实体
* 表名 tb_cf_posters
*
* @author lipengjun
* @date 2020-03-01 16:59:28
*/
@Entity
@Data
public class TbCfPosters {
/**
* 海报ID
*/
@Id
private String id;
/**
* 标题
*/
private String postersTitle;
/**
* 类型 0:不跳转,1:商品 2:分类 3:
*/
private Integer postersType;
/**
* 图片
*/
private String postersPicture;
/**
* 是否展示
*/
private Integer isShow;
/**
* 跳转链接
*/
private String redirectUrl;
/**
* 备注
*/
private String remark;
/**
* 排序
*/
private Integer sort;
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
/**
* 设置:海报ID
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取:海报ID
*/
public String getId() {
return id;
}
/**
* 设置:标题
*/
public void setPostersTitle(String postersTitle) {
this.postersTitle = postersTitle;
}
/**
* 获取:标题
*/
public String getPostersTitle() {
return postersTitle;
}
/**
* 设置:类型 0:不跳转,1:商品 2:分类 3:
*/
public void setPostersType(Integer postersType) {
this.postersType = postersType;
}
/**
* 获取:类型 0:不跳转,1:商品 2:分类 3:
*/
public Integer getPostersType() {
return postersType;
}
/**
* 设置:图片
*/
public void setPostersPicture(String postersPicture) {
this.postersPicture = postersPicture;
}
/**
* 获取:图片
*/
public String getPostersPicture() {
return postersPicture;
}
/**
* 设置:是否展示
*/
public void setIsShow(Integer isShow) {
this.isShow = isShow;
}
/**
* 获取:是否展示
*/
public Integer getIsShow() {
return isShow;
}
/**
* 设置:跳转链接
*/
public void setRedirectUrl(String redirectUrl) {
this.redirectUrl = redirectUrl;
}
/**
* 获取:跳转链接
*/
public String getRedirectUrl() {
return redirectUrl;
}
/**
* 设置:备注
*/
public void setRemark(String remark) {
this.remark = remark;
}
/**
* 获取:备注
*/
public String getRemark() {
return remark;
}
}
...@@ -7,6 +7,8 @@ import org.hibernate.annotations.Where; ...@@ -7,6 +7,8 @@ import org.hibernate.annotations.Where;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
...@@ -122,10 +124,18 @@ public class TbCfStationItem { ...@@ -122,10 +124,18 @@ public class TbCfStationItem {
private String template; private String template;
@ManyToOne
@JoinColumn(columnDefinition = "template")
private TbCfExpressTemplate express;
@Formula(value = "(SELECT IFNULL(CEILING(SUM((a.item_score+a.service_score+a.logistics_score+a.price_score)/4)/COUNT(a.item_id)),5) FROM tb_cf_item_comment a WHERE a.item_id=item_id)") @Formula(value = "(SELECT IFNULL(CEILING(SUM((a.item_score+a.service_score+a.logistics_score+a.price_score)/4)/COUNT(a.item_id)),5) FROM tb_cf_item_comment a WHERE a.item_id=item_id)")
private int totalScore; private int totalScore;
public TbCfExpressTemplate getExpress() {
return express;
}
/** /**
* 设置:商品id * 设置:商品id
*/ */
......
package com.example.afrishop_v3.models;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
/**
* 店铺管理实体
* 表名 tb_cf_store
*
* @author lipengjun
* @date 2019-09-05 16:51:07
*/
@Entity
@Data
public class TbCfStore {
/**
* 店铺id
*/
@Id
private String storeId;
/**
* 店铺编号
*/
private String storeCode;
/**
* 店铺名字
*/
private String storeName;
/**
* 店铺简介
*/
private String storeBrief;
/**
* 店铺链接
*/
private String storeUrl;
/**
* 店铺图片
*/
private String storeImg;
/**
* 所属平台
*/
private String platformCode;
/**
* 平台名
*/
private String platformName;
/**
* 启用状态
*/
private Integer enableFlag;
/**
* 创建日期
*/
private Date createTime;
/**
* 主营商品图片1
*/
@Column(columnDefinition = "item_img_1",name = "item_img_1")
private String itemImg1;
/**
* 主营商品图片2
*/
@Column(columnDefinition = "item_img_2",name = "item_img_2")
private String itemImg2;
/**
* 设置:店铺id
*/
public void setStoreId(String storeId) {
this.storeId = storeId;
}
/**
* 获取:店铺id
*/
public String getStoreId() {
return storeId;
}
/**
* 设置:店铺编号
*/
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
/**
* 获取:店铺编号
*/
public String getStoreCode() {
return storeCode;
}
/**
* 设置:店铺名字
*/
public void setStoreName(String storeName) {
this.storeName = storeName;
}
/**
* 获取:店铺名字
*/
public String getStoreName() {
return storeName;
}
/**
* 设置:店铺简介
*/
public void setStoreBrief(String storeBrief) {
this.storeBrief = storeBrief;
}
/**
* 获取:店铺简介
*/
public String getStoreBrief() {
return storeBrief;
}
/**
* 设置:店铺链接
*/
public void setStoreUrl(String storeUrl) {
this.storeUrl = storeUrl;
}
/**
* 获取:店铺链接
*/
public String getStoreUrl() {
return storeUrl;
}
/**
* 设置:店铺图片
*/
public void setStoreImg(String storeImg) {
this.storeImg = storeImg;
}
/**
* 获取:店铺图片
*/
public String getStoreImg() {
return storeImg;
}
/**
* 设置:所属平台
*/
public void setPlatformCode(String platformCode) {
this.platformCode = platformCode;
}
/**
* 获取:所属平台
*/
public String getPlatformCode() {
return platformCode;
}
/**
* 设置:平台名
*/
public void setPlatformName(String platformName) {
this.platformName = platformName;
}
/**
* 获取:平台名
*/
public String getPlatformName() {
return platformName;
}
/**
* 设置:启用状态
*/
public void setEnableFlag(Integer enableFlag) {
this.enableFlag = enableFlag;
}
/**
* 获取:启用状态
*/
public Integer getEnableFlag() {
return enableFlag;
}
/**
* 设置:创建日期
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
/**
* 获取:创建日期
*/
public Date getCreateTime() {
return createTime;
}
public String getItemImg1() {
return itemImg1;
}
public void setItemImg1(String itemImg1) {
this.itemImg1 = itemImg1;
}
public String getItemImg2() {
return itemImg2;
}
public void setItemImg2(String itemImg2) {
this.itemImg2 = itemImg2;
}
}
package com.example.afrishop_v3.models;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import java.io.Serializable;
import java.util.Date;
/**
* 实体
* 表名 tb_cf_toicoupon
*
* @author lipengjun
* @date 2019-11-22 19:32:08
*/
@Entity
@Data
public class TbCfToicoupon {
/**
* 发放/领取表id
*/
@Id
private String toitableId;
/**
* 优惠券id
*/
@ManyToOne
@JoinColumn(columnDefinition = "coupon_id")
private TbCfCoupon coupon;
/**
* 用户id
*/
private String userId;
/**
* 开始时间
*/
private Date startTime;
/**
* 结束时间
*/
private Date endTime;
/**
* 标识(1发放,2领取,3注册)
*/
private Integer identification;
/**
* 是否已使用(0已使用,1未使用)
*/
private Integer enableFlag;
/**
* 设置:发放/领取表id
*/
public void setToitableId(String toitableId) {
this.toitableId = toitableId;
}
/**
* 获取:发放/领取表id
*/
public String getToitableId() {
return toitableId;
}
/**
* 设置:优惠券id
*/
public void setCoupon(TbCfCoupon coupon) {
this.coupon = coupon;
}
/**
* 设置:用户id
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
* 获取:用户id
*/
public String getUserId() {
return userId;
}
/**
* 设置:开始时间
*/
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;
}
/**
* 设置:标识(1发放,2领取,3注册)
*/
public void setIdentification(Integer identification) {
this.identification = identification;
}
/**
* 获取:标识(1发放,2领取,3注册)
*/
public Integer getIdentification() {
return identification;
}
/**
* 设置:是否已使用(0已使用,1未使用)
*/
public void setEnableFlag(Integer enableFlag) {
this.enableFlag = enableFlag;
}
/**
* 获取:是否已使用(0已使用,1未使用)
*/
public Integer getEnableFlag() {
return enableFlag;
}
}
...@@ -5,6 +5,8 @@ import lombok.Setter; ...@@ -5,6 +5,8 @@ import lombok.Setter;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
...@@ -94,7 +96,9 @@ public class TbCfUserInfo { ...@@ -94,7 +96,9 @@ public class TbCfUserInfo {
/** /**
* 默认地址id * 默认地址id
*/ */
private String defaultAddressId; @ManyToOne
@JoinColumn(columnDefinition = "default_address_id")
private TbCfAddress address;
/** /**
* 发出邀请的用户 * 发出邀请的用户
*/ */
...@@ -355,17 +359,21 @@ public class TbCfUserInfo { ...@@ -355,17 +359,21 @@ public class TbCfUserInfo {
/** /**
* 设置:默认地址id * 设置:默认地址id
*/ */
public void setDefaultAddressId(String defaultAddressId) {
this.defaultAddressId = defaultAddressId; public void setAddress(TbCfAddress address) {
this.address = address;
}
public TbCfAddress getAddress() {
return address;
} }
/** /**
* 获取:默认地址id * 获取:默认地址id
*/ */
public String getDefaultAddressId() {
return defaultAddressId;
}
/** /**
*
* 设置:发出邀请的用户 * 设置:发出邀请的用户
*/ */
public void setInvitedUserId(String invitedUserId) { public void setInvitedUserId(String invitedUserId) {
......
package com.example.afrishop_v3.models;
import java.math.BigDecimal;
/**
* @Auther: wudepeng
* @Date: 2020/09/04
* @Description:The shipping template
*/
public class TemplateVo {
/**
* case List<TemplateVo> templateList = new ArrayList<>();
* templateList.add(new TemplateVo("ef57cb80e2e74a42850119c014b06c96",2,15.99));
*/
private String templateId;
private TbCfExpressTemplate template;
private Integer itemCount;
private BigDecimal itemPrice;//count*The price of a single item
public TemplateVo() {
}
public TemplateVo(TbCfExpressTemplate template,String templateId, Integer itemCount, BigDecimal itemPrice) {
this.template = template;
this.templateId = templateId;
this.itemCount = itemCount;
this.itemPrice = itemPrice;
}
public String getTemplateId() {
return templateId;
}
public void setTemplateId(String templateId) {
this.templateId = templateId;
}
public TbCfExpressTemplate getTemplate() {
return template;
}
public void setTemplate(TbCfExpressTemplate template) {
this.template = template;
}
public Integer getItemCount() {
return itemCount;
}
public void setItemCount(Integer itemCount) {
this.itemCount = itemCount;
}
public BigDecimal getItemPrice() {
return itemPrice;
}
public void setItemPrice(BigDecimal itemPrice) {
this.itemPrice = itemPrice;
}
}
...@@ -6,6 +6,16 @@ public class LoginRequest { ...@@ -6,6 +6,16 @@ public class LoginRequest {
private String password; private String password;
public LoginRequest(){
}
public LoginRequest(String account,String password){
this.account = account;
this.password = password;
}
public String getAccount() { public String getAccount() {
return account; return account;
} }
......
package com.example.afrishop_v3.repository; package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfAddress; import com.example.afrishop_v3.models.TbCfAddress;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
public interface TbCfAddressRepository extends PagingAndSortingRepository<TbCfAddress,String> { public interface TbCfAddressRepository extends PagingAndSortingRepository<TbCfAddress,String> {
List<TbCfAddress> findAllByUserId(String userId); List<TbCfAddress> findAllByUserId(String userId);
@Transactional
@Modifying
@Query(value = "update tb_cf_address set default_flag=0 where user_id=:user_id",nativeQuery = true)
void resetToDefault(@Param("user_id") String userId);
} }
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfClassification;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface TbCfClassificationRepository extends PagingAndSortingRepository<TbCfClassification,String> {
List<TbCfClassification> findAll();
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论